|
|
|
@ -52,46 +52,30 @@ public class TestblockCommand extends SWCommand {
|
|
|
|
|
super("testblock", "tb", "dummy");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Register(description = "REGION_TB_HELP_RESET")
|
|
|
|
|
public void genericTestblockCommand(Player p) {
|
|
|
|
|
genericTestblockCommand(p, RegionExtensionType.NORMAL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Register(description = "REGION_TB_HELP_RESET_EXTENSION")
|
|
|
|
|
public void genericTestblockCommand(@Validator Player p, RegionExtensionType regionExtensionType) {
|
|
|
|
|
Region region = regionCheck(p);
|
|
|
|
|
if (region == null) return;
|
|
|
|
|
try {
|
|
|
|
|
region.reset(RegionType.TESTBLOCK, regionExtensionType, regionExtensionType == null);
|
|
|
|
|
RegionUtils.message(region, "REGION_TB_DONE");
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
BauSystem.MESSAGE.send("REGION_TB_ERROR", p);
|
|
|
|
|
Bukkit.getLogger().log(Level.WARNING, "Failed testblock", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Register(description = "REGION_TB_HELP_SCHEMATIC")
|
|
|
|
|
public void schematicTestblockCommand(Player p, @Mapper("withPublic") SchematicNode node) {
|
|
|
|
|
schematicTestblockCommand(p, node, RegionExtensionType.NORMAL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Register
|
|
|
|
|
public void schematicTestblockCommand(Player p, RegionExtensionType regionExtensionType, @Mapper("withPublic") SchematicNode node) {
|
|
|
|
|
schematicTestblockCommand(p, node, regionExtensionType);
|
|
|
|
|
public void schematicTestblockCommand(@Validator Player p,@OptionalValue("") @Mapper("withPublic") @AllowNull SchematicNode node,TestblockParameter... testblockParameters) {
|
|
|
|
|
boolean isExtension = Arrays.stream(testblockParameters).anyMatch(testblockParameter -> testblockParameter.extension);
|
|
|
|
|
boolean isIgnoreAir = Arrays.stream(testblockParameters).anyMatch(testblockParameter -> testblockParameter.ignoreAir);
|
|
|
|
|
boolean isOnlyColor = Arrays.stream(testblockParameters).anyMatch(testblockParameter -> testblockParameter.onlyColor);
|
|
|
|
|
boolean replaceTNT = Arrays.stream(testblockParameters).anyMatch(testblockParameter -> testblockParameter.tnt);
|
|
|
|
|
boolean replaceWater = Arrays.stream(testblockParameters).anyMatch(testblockParameter -> testblockParameter.water);
|
|
|
|
|
|
|
|
|
|
resetRegion(p,node,isExtension ? RegionExtensionType.EXTENSION : RegionExtensionType.NORMAL,isIgnoreAir,isOnlyColor,replaceTNT,replaceWater);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Register(description = "REGION_TB_HELP_SCHEMATIC_EXTENSION")
|
|
|
|
|
public void schematicTestblockCommand(@Validator Player p, @Mapper("withPublic") SchematicNode node, RegionExtensionType regionExtensionType) {
|
|
|
|
|
private void resetRegion(Player p,SchematicNode node, RegionExtensionType regionExtensionType,boolean ignoreAir,boolean onlyColors, boolean removeTNT, boolean removeWater) {
|
|
|
|
|
Region region = regionCheck(p);
|
|
|
|
|
if (region == null) return;
|
|
|
|
|
|
|
|
|
|
if(node.isDir()) {
|
|
|
|
|
BauSystem.MESSAGE.send("ONLY_SCHEMS", p);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(node != null) {
|
|
|
|
|
if(node.isDir()) {
|
|
|
|
|
BauSystem.MESSAGE.send("ONLY_SCHEMS", p);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
region.reset(node, RegionType.TESTBLOCK, regionExtensionType,false);
|
|
|
|
|
region.reset(node,RegionType.TESTBLOCK, regionExtensionType,ignoreAir,onlyColors,removeTNT,removeWater);
|
|
|
|
|
RegionUtils.message(region, "REGION_TB_DONE");
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
BauSystem.MESSAGE.send("REGION_TB_ERROR", p);
|
|
|
|
@ -99,39 +83,39 @@ public class TestblockCommand extends SWCommand {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ClassMapper(value = TestblockParamaterType.class, local = true)
|
|
|
|
|
private TypeMapper<TestblockParamaterType> testblockParamaterTypeMapper() {
|
|
|
|
|
Map<TestblockParamaterType, List<String>> testblockParamaterTypeListMap = new EnumMap<>(TestblockParamaterType.class);
|
|
|
|
|
for (TestblockParamaterType value : TestblockParamaterType.values()) {
|
|
|
|
|
testblockParamaterTypeListMap.put(value, value.getTabCompletes());
|
|
|
|
|
@ClassMapper(value = TestblockParameterType.class, local = true)
|
|
|
|
|
private TypeMapper<TestblockParameterType> testblockParameterTypeMapper() {
|
|
|
|
|
Map<TestblockParameterType, List<String>> testblockParameterTypeListMap = new EnumMap<>(TestblockParameterType.class);
|
|
|
|
|
for (TestblockParameterType value : TestblockParameterType.values()) {
|
|
|
|
|
testblockParameterTypeListMap.put(value, value.getTabCompletes());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<String, TestblockParamaterType> testblockParameterTypesMap = new HashMap<>();
|
|
|
|
|
testblockParamaterTypeListMap.forEach((k, v) -> v.forEach(s -> testblockParameterTypesMap.put(s, k)));
|
|
|
|
|
Map<String, TestblockParameterType> testblockParameterTypesMap = new HashMap<>();
|
|
|
|
|
testblockParameterTypeListMap.forEach((k, v) -> v.forEach(s -> testblockParameterTypesMap.put(s, k)));
|
|
|
|
|
|
|
|
|
|
return new TypeMapper<TestblockParamaterType>() {
|
|
|
|
|
return new TypeMapper<TestblockParameterType>() {
|
|
|
|
|
@Override
|
|
|
|
|
public TestblockParamaterType map(CommandSender commandSender, PreviousArguments previousArguments, String s) {
|
|
|
|
|
public TestblockParameterType map(CommandSender commandSender, PreviousArguments previousArguments, String s) {
|
|
|
|
|
return testblockParameterTypesMap.get(s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<String> tabCompletes(CommandSender commandSender, PreviousArguments previousArguments, String s) {
|
|
|
|
|
Set<TestblockParamaterType> testblockParameterTypeSet = new HashSet<>();
|
|
|
|
|
previousArguments.getAll(TestblockParamaterType.class).forEach(showModeType -> {
|
|
|
|
|
Set<TestblockParameterType> testblockParameterTypeSet = new HashSet<>();
|
|
|
|
|
previousArguments.getAll(TestblockParameterType.class).forEach(showModeType -> {
|
|
|
|
|
testblockParameterTypeSet.addAll(Arrays.asList(showModeType.removed.get()));
|
|
|
|
|
});
|
|
|
|
|
Arrays.stream(previousArguments.userArgs).map(testblockParameterTypesMap::get).forEach(testblockParameterTypeSet::add);
|
|
|
|
|
testblockParameterTypeSet.remove(null);
|
|
|
|
|
|
|
|
|
|
Set<TestblockParamaterType> removed = testblockParameterTypeSet.stream()
|
|
|
|
|
.map(TestblockParamaterType::getRemoved)
|
|
|
|
|
Set<TestblockParameterType> removed = testblockParameterTypeSet.stream()
|
|
|
|
|
.map(TestblockParameterType::getRemoved)
|
|
|
|
|
.map(Supplier::get)
|
|
|
|
|
.flatMap(Arrays::stream)
|
|
|
|
|
.collect(Collectors.toSet());
|
|
|
|
|
|
|
|
|
|
List<String> tabCompletes = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<TestblockParamaterType, List<String>> entry : testblockParamaterTypeListMap.entrySet()) {
|
|
|
|
|
for (Map.Entry<TestblockParameterType, List<String>> entry : testblockParameterTypeListMap.entrySet()) {
|
|
|
|
|
if (removed.contains(entry.getKey()) || testblockParameterTypeSet.contains(entry.getKey())) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
@ -144,9 +128,7 @@ public class TestblockCommand extends SWCommand {
|
|
|
|
|
|
|
|
|
|
@ClassValidator(value = Player.class, local = true)
|
|
|
|
|
public TypeValidator<Player> validator() {
|
|
|
|
|
return (commandSender, player, messageSender) -> {
|
|
|
|
|
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "REGION_TB_NO_PERMS");
|
|
|
|
|
};
|
|
|
|
|
return (commandSender, player, messageSender) -> !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "REGION_TB_NO_PERMS");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Region regionCheck(Player player) {
|
|
|
|
@ -179,11 +161,12 @@ public class TestblockCommand extends SWCommand {
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private enum TestblockParamaterType {
|
|
|
|
|
NORMAL(TestblockParameter::enableWater, Arrays.asList("-n","-normal"), "EXTENSION"),
|
|
|
|
|
EXTENSION(TestblockParameter::enableExtension, Arrays.asList("-e", "-extension"), "NORMAL"),
|
|
|
|
|
TNT(TestblockParameter::enableTNT, Arrays.asList("-t", "-interpolate-x", "-tnt")),
|
|
|
|
|
WATER(TestblockParameter::enableWater, Arrays.asList("-w", "-water"));
|
|
|
|
|
private enum TestblockParameterType {
|
|
|
|
|
EXTENSION(TestblockParameter::enableExtension, Arrays.asList("-e", "-extension")),
|
|
|
|
|
TNT(TestblockParameter::enableTNT, Arrays.asList("-t", "-tnt")),
|
|
|
|
|
WATER(TestblockParameter::enableWater, Arrays.asList("-w", "-water")),
|
|
|
|
|
IGNORE_AIR(TestblockParameter::enableIgnoreAir, Arrays.asList("-ig", "-ignore_air")),
|
|
|
|
|
ONLY_COLOR(TestblockParameter::enableOnlyColor, Arrays.asList("-o","-color","-only_color"));
|
|
|
|
|
|
|
|
|
|
@Getter
|
|
|
|
|
private final Consumer<TestblockParameter> testblockParameterConsumer;
|
|
|
|
@ -192,17 +175,17 @@ public class TestblockCommand extends SWCommand {
|
|
|
|
|
private List<String> tabCompletes;
|
|
|
|
|
|
|
|
|
|
@Getter
|
|
|
|
|
private final Supplier<TestblockParamaterType[]> removed;
|
|
|
|
|
private AtomicReference<TestblockParamaterType[]> cached = new AtomicReference<>();
|
|
|
|
|
private final Supplier<TestblockParameterType[]> removed;
|
|
|
|
|
private AtomicReference<TestblockParameterType[]> cached = new AtomicReference<>();
|
|
|
|
|
|
|
|
|
|
TestblockParamaterType(Consumer<TestblockParameter> testblockParameterConsumer, List<String> tabCompletes, String... removed) {
|
|
|
|
|
TestblockParameterType(Consumer<TestblockParameter> testblockParameterConsumer, List<String> tabCompletes, String... removed) {
|
|
|
|
|
this.testblockParameterConsumer = testblockParameterConsumer;
|
|
|
|
|
this.tabCompletes = tabCompletes;
|
|
|
|
|
this.removed = () -> {
|
|
|
|
|
if (cached.get() == null) {
|
|
|
|
|
TestblockParamaterType[] showModeParameterTypes = new TestblockParamaterType[removed.length];
|
|
|
|
|
TestblockParameterType[] showModeParameterTypes = new TestblockParameterType[removed.length];
|
|
|
|
|
for (int i = 0; i < removed.length; i++) {
|
|
|
|
|
showModeParameterTypes[i] = TestblockParamaterType.valueOf(removed[i]);
|
|
|
|
|
showModeParameterTypes[i] = TestblockParameterType.valueOf(removed[i]);
|
|
|
|
|
}
|
|
|
|
|
cached.set(showModeParameterTypes);
|
|
|
|
|
return showModeParameterTypes;
|
|
|
|
@ -212,12 +195,13 @@ public class TestblockCommand extends SWCommand {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Getter
|
|
|
|
|
private class TestblockParameter {
|
|
|
|
|
public static class TestblockParameter {
|
|
|
|
|
private boolean water = false;
|
|
|
|
|
private boolean tnt = false;
|
|
|
|
|
private boolean extension = false;
|
|
|
|
|
private boolean normal = false;
|
|
|
|
|
private boolean onlyColor = false;
|
|
|
|
|
|
|
|
|
|
private boolean ignoreAir = false;
|
|
|
|
|
|
|
|
|
|
public void enableWater() {
|
|
|
|
|
this.water = true;
|
|
|
|
@ -231,8 +215,8 @@ public class TestblockCommand extends SWCommand {
|
|
|
|
|
this.extension = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void enableNormal() {
|
|
|
|
|
this.normal = true;
|
|
|
|
|
}
|
|
|
|
|
public void enableOnlyColor() { this.onlyColor = true; }
|
|
|
|
|
|
|
|
|
|
public void enableIgnoreAir() { this.ignoreAir = true; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|