BlockFace customization in config

This commit is contained in:
Niels Vergucht 2018-12-10 20:16:21 +01:00
parent 58f4604ee0
commit 0c53dbf2a1
3 changed files with 79 additions and 15 deletions

View File

@ -1,17 +1,17 @@
package com.songoda.epicbuckets.file;
import com.songoda.epicbuckets.EpicBuckets;
import com.songoda.epicbuckets.genbucket.GenbucketType;
import com.songoda.epicbuckets.util.InventoryHelper;
import com.songoda.epicbuckets.util.Validator;
import com.songoda.epicbuckets.util.XMaterial;
import org.bukkit.block.BlockFace;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ItemStack;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
public class ConfigManager {
@ -30,6 +30,10 @@ public class ConfigManager {
private LinkedHashMap<String, Integer> genbucketGroups;
private HashMap<GenbucketType, List<BlockFace>> genbucketValidFaces;
private HashMap<GenbucketType, BlockFace> genbucketDefaultFace;
private HashMap<GenbucketType, List<BlockFace>> genbucketLogicalFaces;
private boolean supportFactions;
private boolean supportWorldGuard;
private boolean supportGriefPrevention;
@ -77,6 +81,8 @@ public class ConfigManager {
psuedoMaterials = new ArrayList<>();
genbucketGroups = new LinkedHashMap<>();
loadValidFaces();
ignoredMaterials = InventoryHelper.convertMaterialList(epicBuckets.getConfig().getStringList("IGNORE-MATERIALS"), "IGNORE-MATERIALS");
psuedoMaterials = InventoryHelper.convertMaterialList(epicBuckets.getConfig().getStringList("PSUEDO-MATERIALS"), "PSUEDO-MATERIALS");
supportFactions = epicBuckets.getConfig().getBoolean("FACTIONS-SUPPORT");
@ -98,6 +104,22 @@ public class ConfigManager {
epicBuckets.getConfig().getConfigurationSection("CUSTOM-ACTIVE-GEN-PER-PLAY").getKeys(false).forEach(s -> genbucketGroups.put(epicBuckets.getConfig().getString("CUSTOM-ACTIVE-GEN-PER-PLAY." + s).split(":")[1], Integer.parseInt(epicBuckets.getConfig().getString("CUSTOM-ACTIVE-GEN-PER-PLAY." + s).split(":")[0])));
}
private void loadValidFaces() {
genbucketValidFaces = new HashMap<>();
genbucketDefaultFace = new HashMap<>();
genbucketLogicalFaces = new HashMap<>();
epicBuckets.getConfig().getConfigurationSection("VALID-FACES").getKeys(false).forEach(s -> {
genbucketDefaultFace.put(GenbucketType.valueOf(s), BlockFace.valueOf(epicBuckets.getConfig().getString("VALID-FACES" + s + "DEFAULT")));
genbucketValidFaces.put(GenbucketType.valueOf(s), epicBuckets.getConfig().getStringList("VALID-FACES" + s + "WHITELIST").stream().map(s1 -> BlockFace.valueOf(s1)).collect(Collectors.toList()));
});
genbucketLogicalFaces.put(GenbucketType.HORIZONTAL, new ArrayList<>(Arrays.asList(BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH)));
genbucketLogicalFaces.put(GenbucketType.VERTICAL, new ArrayList<>(Arrays.asList(BlockFace.UP, BlockFace.DOWN)));
genbucketLogicalFaces.put(GenbucketType.INFUSED, new ArrayList<>(Arrays.asList(BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH)));
genbucketLogicalFaces.put(GenbucketType.PSUEDO, new ArrayList<>(Arrays.asList(BlockFace.UP, BlockFace.DOWN)));
}
private void setupFillItem() {
boolean m = Validator.isMaterial(epicBuckets.getConfig().getString(getFillItemPath() + ".material"));
@ -238,4 +260,16 @@ public class ConfigManager {
public LinkedHashMap<String, Integer> getGenbucketGroups() {
return genbucketGroups;
}
public List<BlockFace> getValidFacesForGenbucket(GenbucketType genbucketType) {
return genbucketValidFaces.get(genbucketType);
}
public BlockFace getDefaultFaceForGenbucket(GenbucketType genbucketType) {
return genbucketDefaultFace.get(genbucketType);
}
public List<BlockFace> getLogicalFacesForGenbucket(GenbucketType genbucketType) {
return genbucketLogicalFaces.get(genbucketType);
}
}

View File

@ -59,18 +59,15 @@ public abstract class Genbucket {
}
public boolean isValidBlockFace() {
switch(genbucketType) {
case VERTICAL:
case PSUEDO:
if (blockFace == BlockFace.UP || blockFace == BlockFace.DOWN) return true;
return false;
case HORIZONTAL:
case INFUSED:
if (blockFace == BlockFace.UP || blockFace == BlockFace.DOWN) return false;
return true;
default:
return false;
return epicBuckets.getConfigManager().getValidFacesForGenbucket(getGenbucketType()).contains(getBlockFace());
}
public boolean calculateBlockFace() {
if (!isValidBlockFace()) return false;
if (!epicBuckets.getConfigManager().getLogicalFacesForGenbucket(getGenbucketType()).contains(getBlockFace())) {
blockFace = epicBuckets.getConfigManager().getDefaultFaceForGenbucket(genbucketType);
}
return true;
}
protected boolean isBelowVoid(int moved) {

View File

@ -44,6 +44,39 @@ CUSTOM-ACTIVE-GEN-PER-PLAY: # Put the highest first
VETERAN: "25:genbucket.limit.veteran"
VIP: "20:genbucket.limit.vip"
# Valid values are: UP, DOWN, SOUTH, NORTH, EAST, WEST
# Whitelist means what faces the genbucket will work on
# Default means when, for example, you allow a vertical genbucket to work on a side that is different from
# UP or DOWN, the plugin will then get this value to allow the genbucket to work. Please make sure this value
# is logical. For the vertical genbucket, that would be either UP or DOWN. Any other value just makes it
# act like a horizontal genbucket, which ofcourse isnt going to work
VALID-FACES:
HORIZONTAL:
WHITELIST:
- "EAST"
- "WEST"
- "NORTH"
- "SOUTH"
DEFAULT: "NORTH"
VERTICAL:
WHITELIST:
- "UP"
- "DOWN"
DEFAULT: "UP"
PSUEDO:
WHITELIST:
- "UP"
- "DOWN"
DEFAULT: "UP"
INFUSED:
WHITELIST:
- "EAST"
- "WEST"
- "NORTH"
- "SOUTH"
DEFAULT: "NORTH"
# All genbuckets will run over these materials
# except the psuedo.
# Make all words capital!