diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitMain.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitMain.java index a9ec5b374..582f94746 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitMain.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitMain.java @@ -81,12 +81,13 @@ import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotAreaTerrainType; import com.plotsquared.core.plot.PlotAreaType; import com.plotsquared.core.plot.PlotId; -import com.plotsquared.core.plot.SetupObject; import com.plotsquared.core.plot.message.PlainChatManager; import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.SinglePlotArea; import com.plotsquared.core.plot.world.SinglePlotAreaManager; import com.plotsquared.core.queue.QueueProvider; +import com.plotsquared.core.setup.PlotAreaBuilder; +import com.plotsquared.core.setup.SettingsNodesWrapper; import com.plotsquared.core.util.ChatManager; import com.plotsquared.core.util.ChunkManager; import com.plotsquared.core.util.ConsoleColors; @@ -992,14 +993,14 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain< ConfigurationSection worldConfig = PlotSquared.get().worlds.getConfigurationSection("worlds." + worldName); String manager = worldConfig.getString("generator.plugin", getPluginName()); - SetupObject setup = new SetupObject(); - setup.plotManager = manager; - setup.setupGenerator = worldConfig.getString("generator.init", manager); - setup.type = MainUtil.getType(worldConfig); - setup.terrain = MainUtil.getTerrain(worldConfig); - setup.step = new ConfigurationNode[0]; - setup.world = worldName; - SetupUtils.manager.setupWorld(setup); + PlotAreaBuilder builder = new PlotAreaBuilder() + .plotManager(manager) + .generatorName(worldConfig.getString("generator.init", manager)) + .plotAreaType(MainUtil.getType(worldConfig)) + .terrainType(MainUtil.getTerrain(worldConfig)) + .settingsNodesWrapper(new SettingsNodesWrapper(new ConfigurationNode[0], null)) + .worldName(worldName); + SetupUtils.manager.setupWorld(builder); world = Bukkit.getWorld(worldName); } else { try { diff --git a/Core/src/main/java/com/plotsquared/core/command/Area.java b/Core/src/main/java/com/plotsquared/core/command/Area.java index 7cdca5c6f..696cf1459 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Area.java +++ b/Core/src/main/java/com/plotsquared/core/command/Area.java @@ -39,8 +39,8 @@ import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotAreaTerrainType; import com.plotsquared.core.plot.PlotAreaType; import com.plotsquared.core.plot.PlotId; -import com.plotsquared.core.plot.SetupObject; import com.plotsquared.core.plot.message.PlotMessage; +import com.plotsquared.core.setup.PlotAreaBuilder; import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MathMan; import com.plotsquared.core.util.Permissions; @@ -186,20 +186,15 @@ public class Area extends SubCommand { final BlockVector3 singlePos1 = selectedRegion.getMinimumPoint(); // Now the schematic is saved, which is wonderful! - final SetupObject singleSetup = new SetupObject(); - singleSetup.world = hybridPlotWorld.getWorldName(); - singleSetup.id = hybridPlotWorld.getId(); - singleSetup.terrain = hybridPlotWorld.getTerrain(); - singleSetup.type = hybridPlotWorld.getType(); - singleSetup.plotManager = PlotSquared.imp().getPluginName(); - singleSetup.setupGenerator = PlotSquared.imp().getPluginName(); - singleSetup.step = hybridPlotWorld.getSettingNodes(); - singleSetup.max = plotId; - singleSetup.min = plotId; + PlotAreaBuilder singleBuilder = PlotAreaBuilder.ofPlotArea(hybridPlotWorld) + .plotManager(PlotSquared.imp().getPluginName()) + .generatorName(PlotSquared.imp().getPluginName()) + .maximumId(plotId) + .minimumId(plotId); // TODO will throw exception right now Runnable singleRun = () -> { final String path = "worlds." + hybridPlotWorld.getWorldName() + ".areas." + hybridPlotWorld.getId() + '-' - + singleSetup.min + '-' + singleSetup.max; + + singleBuilder.minimumId() + '-' + singleBuilder.maximumId(); final int offsetX = singlePos1.getX(); final int offsetZ = singlePos1.getZ(); if (offsetX != 0) { @@ -210,7 +205,7 @@ public class Area extends SubCommand { PlotSquared.get().worlds .set(path + ".road.offset.z", offsetZ); } - final String world = SetupUtils.manager.setupWorld(singleSetup); + final String world = SetupUtils.manager.setupWorld(singleBuilder); if (WorldUtil.IMP.isWorld(world)) { PlotSquared.get().loadWorld(world, null); MainUtil.sendMessage(player, Captions.SINGLE_AREA_CREATED); @@ -286,19 +281,14 @@ public class Area extends SubCommand { .send(player, areas.iterator().next().toString()); return false; } - final SetupObject object = new SetupObject(); - object.world = area.getWorldName(); - object.id = area.getId(); - object.terrain = area.getTerrain(); - object.type = area.getType(); - object.min = new PlotId(1, 1); - object.max = new PlotId(numX, numZ); - object.plotManager = PlotSquared.imp().getPluginName(); - object.setupGenerator = PlotSquared.imp().getPluginName(); - object.step = area.getSettingNodes(); + PlotAreaBuilder builder = PlotAreaBuilder.ofPlotArea(area) + .plotManager(PlotSquared.imp().getPluginName()) + .generatorName(PlotSquared.imp().getPluginName()) + .minimumId(new PlotId(1, 1)) + .maximumId(new PlotId(numX, numZ)); final String path = "worlds." + area.getWorldName() + ".areas." + area.getId() + '-' - + object.min + '-' + object.max; + + builder.minimumId() + '-' + builder.maximumId(); Runnable run = () -> { if (offsetX != 0) { PlotSquared.get().worlds @@ -308,7 +298,7 @@ public class Area extends SubCommand { PlotSquared.get().worlds .set(path + ".road.offset.z", offsetZ); } - final String world = SetupUtils.manager.setupWorld(object); + final String world = SetupUtils.manager.setupWorld(builder); if (WorldUtil.IMP.isWorld(world)) { PlotSquared.get().loadWorld(world, null); Captions.SETUP_FINISHED.send(player); @@ -346,9 +336,9 @@ public class Area extends SubCommand { } else { id = null; } - final SetupObject object = new SetupObject(); - object.world = split[0]; - final HybridPlotWorld pa = new HybridPlotWorld(object.world, id, + PlotAreaBuilder builder = new PlotAreaBuilder(); + builder.worldName(split[0]); + final HybridPlotWorld pa = new HybridPlotWorld(builder.worldName(), id, PlotSquared.get().IMP.getDefaultGenerator(), null, null); PlotArea other = PlotSquared.get().getPlotArea(pa.getWorldName(), id); if (other != null && Objects.equals(pa.getId(), other.getId())) { @@ -410,13 +400,13 @@ public class Area extends SubCommand { pa.setTerrain(PlotAreaTerrainType.fromString(pair[1]) .orElseThrow(() -> new IllegalArgumentException( pair[1] + " is not a valid terrain."))); - object.terrain = pa.getTerrain(); + builder.terrainType(pa.getTerrain()); break; case "type": pa.setType(PlotAreaType.fromString(pair[1]).orElseThrow( () -> new IllegalArgumentException( pair[1] + " is not a valid type."))); - object.type = pa.getType(); + builder.plotAreaType(pa.getType()); break; default: Captions.COMMAND_SYNTAX.send(player, getCommandString() @@ -438,9 +428,9 @@ public class Area extends SubCommand { PlotSquared.get().worlds.getConfigurationSection(path); pa.saveConfiguration(section); pa.loadConfiguration(section); - object.plotManager = PlotSquared.imp().getPluginName(); - object.setupGenerator = PlotSquared.imp().getPluginName(); - String world = SetupUtils.manager.setupWorld(object); + builder.plotManager(PlotSquared.imp().getPluginName()); + builder.generatorName(PlotSquared.imp().getPluginName()); + String world = SetupUtils.manager.setupWorld(builder); if (WorldUtil.IMP.isWorld(world)) { Captions.SETUP_FINISHED.send(player); player.teleport(WorldUtil.IMP.getSpawn(world), @@ -475,9 +465,9 @@ public class Area extends SubCommand { TeleportCause.COMMAND); } } else { - object.terrain = PlotAreaTerrainType.NONE; - object.type = PlotAreaType.NORMAL; - SetupUtils.manager.setupWorld(object); + builder.terrainType(PlotAreaTerrainType.NONE); + builder.plotAreaType(PlotAreaType.NORMAL); + SetupUtils.manager.setupWorld(builder); player.teleport(WorldUtil.IMP.getSpawn(pa.getWorldName()), TeleportCause.COMMAND); } diff --git a/Core/src/main/java/com/plotsquared/core/command/Setup.java b/Core/src/main/java/com/plotsquared/core/command/Setup.java index db3d750bd..238f1bd5a 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Setup.java +++ b/Core/src/main/java/com/plotsquared/core/command/Setup.java @@ -27,43 +27,19 @@ package com.plotsquared.core.command; import com.plotsquared.core.PlotSquared; import com.plotsquared.core.configuration.Captions; -import com.plotsquared.core.configuration.ConfigurationNode; -import com.plotsquared.core.configuration.ConfigurationUtil; -import com.plotsquared.core.configuration.StaticCaption; -import com.plotsquared.core.events.TeleportCause; import com.plotsquared.core.generator.GeneratorWrapper; import com.plotsquared.core.player.PlotPlayer; -import com.plotsquared.core.plot.PlotArea; -import com.plotsquared.core.plot.PlotAreaTerrainType; -import com.plotsquared.core.plot.PlotAreaType; -import com.plotsquared.core.plot.PlotId; -import com.plotsquared.core.plot.SetupObject; -import com.plotsquared.core.plot.message.PlotMessage; import com.plotsquared.core.setup.SetupProcess; import com.plotsquared.core.setup.SetupStep; import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.SetupUtils; -import com.plotsquared.core.util.StringMan; -import com.plotsquared.core.util.WorldUtil; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; -import lombok.ToString; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Map.Entry; -import java.util.Optional; -import java.util.UUID; @CommandDeclaration(command = "setup", permission = "plots.admin.command.setup", @@ -72,14 +48,12 @@ import java.util.UUID; aliases = {"create"}, category = CommandCategory.ADMINISTRATION) public class Setup extends SubCommand { + private static final Collection specialCommands = Arrays.asList( + new Command(null, false, "back", "", RequiredType.NONE, null) {}, + new Command(null, false, "cancel", "", RequiredType.NONE, null) {}); - private static boolean d(String s) { - return s.chars().allMatch((i) -> { - return i == 95 || i == 45 || i >= 97 && i <= 122 || i >= 48 && i <= 57 || i == 46; - }); - } - public void displayGenerators(PlotPlayer player) { + public void displayGenerators(PlotPlayer player) { StringBuilder message = new StringBuilder(); message.append("&6What generator do you want?"); for (Entry> entry : SetupUtils.generators.entrySet()) { @@ -105,7 +79,7 @@ public class Setup extends SubCommand { process = new SetupProcess(); player.setMeta("setup", process); SetupUtils.manager.updateGenerators(); - com.plotsquared.core.setup.SetupStep step = process.getCurrentStep(); + SetupStep step = process.getCurrentStep(); step.announce(player); displayGenerators(player); return true; @@ -123,277 +97,11 @@ public class Setup extends SubCommand { process.getCurrentStep().announce(player); } } - return true; } else { process.getCurrentStep().announce(player); - // TODO return only - if (true) { - return true; - } } + return true; - - - // going through setup - SetupObject object = player.getMeta("setup"); - if (object == null) { - object = new SetupObject(); - player.setMeta("setup", object); - SetupUtils.manager.updateGenerators(); - sendMessage(player, Captions.SETUP_INIT); - displayGenerators(player); - return false; - } - if (args.length == 1) { - if (args[0].equalsIgnoreCase("cancel")) { - player.deleteMeta("setup"); - MainUtil.sendMessage(player, Captions.SETUP_CANCELLED); - return false; - } - if (args[0].equalsIgnoreCase("back")) { - if (object.setup_index > 0) { - object.setup_index--; - ConfigurationNode node = object.step[object.setup_index]; - sendMessage(player, Captions.SETUP_STEP, object.setup_index + 1, - node.getDescription(), node.getType().getType(), - String.valueOf(node.getDefaultValue())); - return false; - } else if (object.current > 0) { - object.current--; - } - } - } - int index = object.current; - switch (index) { - case 0: // choose generator - if (args.length != 1 || !SetupUtils.generators.containsKey(args[0])) { - String prefix = "\n&8 - &7"; - MainUtil.sendMessage(player, - Captions.SETUP_WORLD_GENERATOR_ERROR + prefix + StringMan - .join(SetupUtils.generators.keySet(), prefix) - .replaceAll(PlotSquared.imp().getPluginName(), - "&2" + PlotSquared.imp().getPluginName())); - sendMessage(player, Captions.SETUP_INIT); - return false; - } - object.setupGenerator = args[0]; - object.current++; - MainUtil.sendMessage(player, Captions.SETUP_WORLD_TYPE); - break; - case 1: // choose world type - List allTypes = Arrays.asList("normal", "augmented", "partial"); - List allDesc = Arrays - .asList("Standard plot generation", "Plot generation with vanilla terrain", - "Vanilla with clusters of plots"); - ArrayList types = new ArrayList<>(); - if (SetupUtils.generators.get(object.setupGenerator).isFull()) { - types.add("normal"); - } - types.add("augmented"); - types.add("partial"); - Optional plotAreaType; - if (args.length != 1 || !(plotAreaType = PlotAreaType.fromString(args[0])) - .isPresent()) { - MainUtil.sendMessage(player, Captions.SETUP_WORLD_TYPE_ERROR); - for (String type : types) { - int i = allTypes.indexOf(type); - if (type.equals("normal")) { - MainUtil - .sendMessage(player, "&8 - &2" + type + " &8-&7 " + allDesc.get(i)); - } else { - MainUtil - .sendMessage(player, "&8 - &7" + type + " &8-&7 " + allDesc.get(i)); - } - } - return false; - } - object.type = plotAreaType.orElse(PlotAreaType.NORMAL); - GeneratorWrapper gen = SetupUtils.generators.get(object.setupGenerator); - if (object.type == PlotAreaType.NORMAL) { - object.current = 6; - if (object.step == null) { - object.plotManager = object.setupGenerator; - object.step = - SetupUtils.generators.get(object.plotManager).getPlotGenerator() - .getNewPlotArea("CheckingPlotSquaredGenerator", null, null, null) - .getSettingNodes(); - SetupUtils.generators.get(object.plotManager).getPlotGenerator() - .processSetup(object); - } - if (object.step.length == 0) { - MainUtil.sendMessage(player, Captions.SETUP_WORLD_NAME); - object.setup_index = 0; - return true; - } - ConfigurationNode step = object.step[object.setup_index]; - sendMessage(player, Captions.SETUP_STEP, object.setup_index + 1, - step.getDescription(), step.getType().getType(), - String.valueOf(step.getDefaultValue())); - } else { - if (gen.isFull()) { - object.plotManager = object.setupGenerator; - object.setupGenerator = null; - object.step = - SetupUtils.generators.get(object.plotManager).getPlotGenerator() - .getNewPlotArea("CheckingPlotSquaredGenerator", null, null, null) - .getSettingNodes(); - SetupUtils.generators.get(object.plotManager).getPlotGenerator() - .processSetup(object); - } else { - object.plotManager = PlotSquared.imp().getPluginName(); - MainUtil.sendMessage(player, Captions.SETUP_WRONG_GENERATOR); - object.step = - SetupUtils.generators.get(object.plotManager).getPlotGenerator() - .getNewPlotArea("CheckingPlotSquaredGenerator", null, null, null) - .getSettingNodes(); - } - if (object.type == PlotAreaType.PARTIAL) { - MainUtil.sendMessage(player, Captions.SETUP_AREA_NAME); - object.current++; - } else { - MainUtil.sendMessage(player, Captions.SETUP_PARTIAL_AREA); - object.current = 5; - } - } - break; - case 2: // area id - if (!StringMan.isAlphanumericUnd(args[0])) { - MainUtil.sendMessage(player, Captions.SETUP_AREA_NON_ALPHANUMERICAL); - return false; - } - for (PlotArea area : PlotSquared.get().getPlotAreas()) { - if (area.getId() != null && area.getId().equalsIgnoreCase(args[0])) { - MainUtil.sendMessage(player, Captions.SETUP_AREA_INVALID_ID); - return false; - } - } - object.id = args[0]; - object.current++; - MainUtil.sendMessage(player, Captions.SETUP_AREA_MIN_PLOT_ID); - break; - case 3: // min - try { - object.min = PlotId.fromString(args[0]); - } catch (IllegalArgumentException ignored) { - MainUtil.sendMessage(player, Captions.SETUP_AREA_MIN_PLOT_ID_ERROR); - return false; - } - object.current++; - MainUtil.sendMessage(player, Captions.SETUP_AREA_MAX_PLOT_ID); - break; - case 4: - // max - PlotId id; - try { - id = PlotId.fromString(args[0]); - } catch (IllegalArgumentException ignored) { - MainUtil.sendMessage(player, Captions.SETUP_AREA_MAX_PLOT_ID_ERROR); - return false; - } - if (id.x <= object.min.x || id.y <= object.min.y) { - MainUtil.sendMessage(player, Captions.SETUP_AREA_PLOT_ID_GREATER_THAN_MINIMUM); - return false; - } - object.max = id; - object.current++; - MainUtil.sendMessage(player, Captions.SETUP_PARTIAL_AREA); - break; - case 5: { // Choose terrain - Optional optTerrain; - if (args.length != 1 || !(optTerrain = PlotAreaTerrainType.fromString(args[0])) - .isPresent()) { - MainUtil.sendMessage(player, Captions.SETUP_PARTIAL_AREA_ERROR, - Captions.SETUP_PARTIAL_AREA); - return false; - } - object.terrain = optTerrain.get(); - object.current++; - if (object.step == null) { - object.step = SetupUtils.generators.get(object.plotManager).getPlotGenerator() - .getNewPlotArea("CheckingPlotSquaredGenerator", null, null, null) - .getSettingNodes(); - } - ConfigurationNode step = object.step[object.setup_index]; - sendMessage(player, Captions.SETUP_STEP, object.setup_index + 1, - step.getDescription(), step.getType().getType(), - String.valueOf(step.getDefaultValue())); - break; - } - case 6: // world setup - if (object.setup_index == object.step.length) { - MainUtil.sendMessage(player, Captions.SETUP_WORLD_NAME); - object.setup_index = 0; - object.current++; - return true; - } - ConfigurationNode step = object.step[object.setup_index]; - if (args.length < 1) { - sendMessage(player, Captions.SETUP_STEP, object.setup_index + 1, - step.getDescription(), step.getType().getType(), - String.valueOf(step.getDefaultValue())); - return false; - } - - boolean valid = false; - try { - valid = step.isValid(args[0]); - } catch (final ConfigurationUtil.UnsafeBlockException e) { - Captions.NOT_ALLOWED_BLOCK.send(player, e.getUnsafeBlock().toString()); - } - if (valid) { - step.setValue(args[0]); - Object value = step.getValue(); - sendMessage(player, Captions.SETUP_VALID_ARG, step.getConstant(), value); - object.setup_index++; - if (object.setup_index == object.step.length) { - onCommand(player, args); - return false; - } - step = object.step[object.setup_index]; - sendMessage(player, Captions.SETUP_STEP, object.setup_index + 1, - step.getDescription(), step.getType().getType(), - String.valueOf(step.getDefaultValue())); - return false; - } else { - sendMessage(player, Captions.SETUP_INVALID_ARG, args[0], step.getConstant()); - sendMessage(player, Captions.SETUP_STEP, object.setup_index + 1, - step.getDescription(), step.getType().getType(), - String.valueOf(step.getDefaultValue())); - return false; - } - case 7: - if (args.length != 1) { - MainUtil.sendMessage(player, Captions.SETUP_WORLD_NAME_ERROR); - return false; - } - if (!d(args[0])) { - MainUtil.sendMessage(player, Captions.SETUP_WORLD_NAME_FORMAT + args[0]); - return false; - } - if (WorldUtil.IMP.isWorld(args[0])) { - if (PlotSquared.get().hasPlotArea(args[0])) { - MainUtil.sendMessage(player, Captions.SETUP_WORLD_NAME_TAKEN); - return false; - } - MainUtil.sendMessage(player, Captions.SETUP_WORLD_APPLY_PLOTSQUARED); - } - object.world = args[0]; - player.deleteMeta("setup"); - String world; - if (object.setupManager == null) { - world = SetupUtils.manager.setupWorld(object); - } else { - world = object.setupManager.setupWorld(object); - } - try { - player.teleport(WorldUtil.IMP.getSpawn(world), TeleportCause.COMMAND); - } catch (Exception e) { - player.sendMessage("&cAn error occurred. See console for more information"); - e.printStackTrace(); - } - sendMessage(player, Captions.SETUP_FINISHED, object.world); - } - return false; } @Override public Collection tab(PlotPlayer player, String[] args, boolean space) { @@ -406,136 +114,15 @@ public class Setup extends SubCommand { return Collections.emptyList(); } SetupStep setupStep = process.getCurrentStep(); - return setupStep.createSuggestions(player, space ? "" : args[0]); + List commands = new ArrayList<>(setupStep.createSuggestions(player, space ? "" : args[0])); + tryAddSubCommand("back", args[0], commands); + tryAddSubCommand("cancel", args[0], commands); + return commands; } - /*private static final class StepPickGenerator extends SetupStep { - - @Getter private String generator; - - public StepPickGenerator() { - super("generator"); - } - - @Override public Collection showDescriptionMessage() { - SetupUtils.manager.updateGenerators(); - final List messages = new ArrayList<>(); - messages.add(new PlotMessage("What generator do you want?").color("$6")); - for (Entry> entry : SetupUtils.generators.entrySet()) { - final PlotMessage plotMessage = new PlotMessage(" - ").color("$8"); - if (entry.getKey().equals(PlotSquared.imp().getPluginName())) { - plotMessage.text(entry.getKey()).color("$8").tooltip("Select this generator") - .color("$2").command("/plot setup generator " + entry.getKey()) - .text(" (Default Generator)").color("$7"); - } else if (entry.getValue().isFull()) { - plotMessage.text(entry.getKey()).color("$8").tooltip("Select this generator") - .color("$7").command("/plot setup generator " + entry.getKey()) - .text(" (Plot Generator)").color("$7"); - } else { - plotMessage.text(entry.getKey()).color("$8").tooltip("Select this generator") - .color("$7").command("/plot setup generator " + entry.getKey()) - .text(" (Unknown Structure)").color("$7"); - } - messages.add(plotMessage); - } - return messages; - } - - @Override public boolean parseInput(String input) { - this.generator = input.toLowerCase(); - return true; - } - - @Nullable @Override public String getDefault() { - return null; + private void tryAddSubCommand(String subCommand, String argument, List suggestions) { + if (!argument.isEmpty() && subCommand.startsWith(argument)) { + suggestions.add(new Command(null, false, subCommand, "", RequiredType.NONE, null) {}); } } - - - private static final class StepWorldType extends SetupStep { - - private static final Map WORLD_TYPES = new HashMap<>(); - - static { - WORLD_TYPES.put("default", "Standard plot generation"); - WORLD_TYPES.put("augmented", "Plot generation with vanilla terrain"); - WORLD_TYPES.put("partial", "Vanilla clusters of plots"); - } - - @Getter private String worldType; - - public StepWorldType() { - super("type"); - } - - @Override public Collection showDescriptionMessage() { - final List messages = new ArrayList<>(); - messages.add(new PlotMessage("What world type do you want?").color("$6")); - for (final Map.Entry worldType : WORLD_TYPES.entrySet()) { - messages.add(new PlotMessage(" - ").color("$8").text(worldType.getKey()) - .color(worldType.getKey().equals(getDefault()) ? "$2" : "$7") - .tooltip("Select this world type") - .command("/plot setup type " + worldType.getKey()) - .text(" (" + worldType.getValue() + ")").color("$7")); - } - return messages; - } - - @Override public boolean parseInput(String input) { - if (!WORLD_TYPES.containsKey(input.toLowerCase())) { - return false; - } - this.worldType = input.toLowerCase(); - return true; - } - - @Override public String getDefault() { - return "default"; - } - } - - - @ToString - @EqualsAndHashCode(of = "uuid") - @AllArgsConstructor - private static class SetupContext { - - private final UUID uuid; - - @Getter private String step; - - } - - - @RequiredArgsConstructor(access = AccessLevel.PROTECTED) - private abstract static class SetupStep { - - private final String stepName; - - public abstract Collection showDescriptionMessage(); - - public abstract boolean parseInput(String input); - - public final PlotMessage getUsage() { - return new PlotMessage("Usage: ").color("$1") - .text("/plot setup " + this.stepName + " ").color("$2").suggest( - "/plot setup " + this.stepName + (this.getDefault() != null ? - this.getDefault() : - "")); - } - - @Nullable public abstract String getDefault(); - - public void sendToPlayer(@NonNull final PlotPlayer plotPlayer) { - new PlotMessage("Setup Step: ").color("$6").text(this.stepName).color("$7") - .send(plotPlayer); - this.getUsage().send(plotPlayer); - this.showDescriptionMessage().forEach(plotMessage -> plotMessage.send(plotPlayer)); - if (this.getDefault() != null) { - new PlotMessage("Default: ").color("$6").text(this.getDefault()).color("$7"); - } - } - - }*/ - } diff --git a/Core/src/main/java/com/plotsquared/core/command/Template.java b/Core/src/main/java/com/plotsquared/core/command/Template.java index d19fbab51..02bc7af4d 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Template.java +++ b/Core/src/main/java/com/plotsquared/core/command/Template.java @@ -36,8 +36,9 @@ import com.plotsquared.core.events.TeleportCause; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotManager; -import com.plotsquared.core.plot.SetupObject; import com.plotsquared.core.queue.GlobalBlockQueue; +import com.plotsquared.core.setup.PlotAreaBuilder; +import com.plotsquared.core.setup.SettingsNodesWrapper; import com.plotsquared.core.util.FileBytes; import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.SetupUtils; @@ -181,15 +182,15 @@ public class Template extends SubCommand { String manager = worldConfig.getString("generator.plugin", PlotSquared.imp().getPluginName()); String generator = worldConfig.getString("generator.init", manager); - SetupObject setup = new SetupObject(); - setup.type = MainUtil.getType(worldConfig); - setup.terrain = MainUtil.getTerrain(worldConfig); + PlotAreaBuilder builder = new PlotAreaBuilder() + .plotAreaType(MainUtil.getType(worldConfig)) + .terrainType(MainUtil.getTerrain(worldConfig)) + .plotManager(manager) + .generatorName(generator) + .settingsNodesWrapper(new SettingsNodesWrapper(new ConfigurationNode[0], null)) + .worldName(world); - setup.plotManager = manager; - setup.setupGenerator = generator; - setup.step = new ConfigurationNode[0]; - setup.world = world; - SetupUtils.manager.setupWorld(setup); + SetupUtils.manager.setupWorld(builder); GlobalBlockQueue.IMP.addEmptyTask(() -> { MainUtil.sendMessage(player, "Done!"); player.teleport(WorldUtil.IMP.getSpawn(world), TeleportCause.COMMAND); diff --git a/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlotArea.java b/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlotArea.java index da1613cee..a212a0506 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlotArea.java +++ b/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlotArea.java @@ -38,8 +38,9 @@ import com.plotsquared.core.plot.PlotAreaType; import com.plotsquared.core.plot.PlotId; import com.plotsquared.core.plot.PlotManager; import com.plotsquared.core.plot.PlotSettings; -import com.plotsquared.core.plot.SetupObject; import com.plotsquared.core.plot.flag.FlagContainer; +import com.plotsquared.core.setup.PlotAreaBuilder; +import com.plotsquared.core.setup.SettingsNodesWrapper; import com.plotsquared.core.util.SetupUtils; import com.plotsquared.core.util.WorldUtil; import com.plotsquared.core.util.task.RunnableVal; @@ -78,13 +79,13 @@ public class SinglePlotArea extends GridPlotWorld { if (WorldUtil.IMP.isWorld(worldName)) { return; } - SetupObject setup = new SetupObject(); - setup.plotManager = "PlotSquared:single"; - setup.setupGenerator = "PlotSquared:single"; - setup.type = getType(); - setup.terrain = getTerrain(); - setup.step = new ConfigurationNode[0]; - setup.world = worldName; + PlotAreaBuilder builder = new PlotAreaBuilder() + .plotManager("PlotSquared:single") + .generatorName("PlotSquared:single") + .plotAreaType(getType()) + .terrainType(getTerrain()) + .settingsNodesWrapper(new SettingsNodesWrapper(new ConfigurationNode[0], null)) + .worldName(worldName); File container = PlotSquared.imp().getWorldContainer(); File destination = new File(container, worldName); @@ -96,7 +97,7 @@ public class SinglePlotArea extends GridPlotWorld { } } // Duplicate 0;0 - if (setup.type != PlotAreaType.NORMAL) { + if (builder.plotAreaType() != PlotAreaType.NORMAL) { if (!destination.exists()) { File src = new File(container, "0.0"); if (src.exists()) { @@ -132,7 +133,7 @@ public class SinglePlotArea extends GridPlotWorld { return; } - SetupUtils.manager.setupWorld(setup); + SetupUtils.manager.setupWorld(builder); } }); // String worldName = plot.getWorldName(); diff --git a/Core/src/main/java/com/plotsquared/core/setup/CommonSetupSteps.java b/Core/src/main/java/com/plotsquared/core/setup/CommonSetupSteps.java index 4b0a6c7a6..f299f0b42 100644 --- a/Core/src/main/java/com/plotsquared/core/setup/CommonSetupSteps.java +++ b/Core/src/main/java/com/plotsquared/core/setup/CommonSetupSteps.java @@ -76,11 +76,11 @@ public enum CommonSetupSteps implements SetupStep { // TODO reimplement SetupUtils.generators.get(object.plotManager).getPlotGenerator() // .processSetup(process); } - if (!builder.settingsNodesWrapper().hasNext()) { + if (!builder.settingsNodesWrapper().hasStep()) { // object.setup_index = 0; TODO what did that do? return builder.settingsNodesWrapper().getAfterwards(); // skip } - return builder.settingsNodesWrapper().next(); + return builder.settingsNodesWrapper().first(); } else { if (gen.isFull()) { builder.plotManager(builder.generatorName()); @@ -179,7 +179,7 @@ public enum CommonSetupSteps implements SetupStep { builder.settingsNodesWrapper(CommonSetupSteps.wrap(builder.plotManager())); } SettingsNodesWrapper wrapper = builder.settingsNodesWrapper(); - return wrapper.hasNext() ? wrapper.next() : wrapper.getAfterwards(); + return wrapper.hasStep() ? wrapper.first() : wrapper.getAfterwards(); } @Nullable @Override public String getDefaultValue() { diff --git a/Core/src/main/java/com/plotsquared/core/setup/PlotAreaBuilder.java b/Core/src/main/java/com/plotsquared/core/setup/PlotAreaBuilder.java index c6c6ea494..bae262df1 100644 --- a/Core/src/main/java/com/plotsquared/core/setup/PlotAreaBuilder.java +++ b/Core/src/main/java/com/plotsquared/core/setup/PlotAreaBuilder.java @@ -1,6 +1,8 @@ package com.plotsquared.core.setup; +import com.plotsquared.core.PlotSquared; +import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotAreaTerrainType; import com.plotsquared.core.plot.PlotAreaType; import com.plotsquared.core.plot.PlotId; @@ -22,20 +24,35 @@ public class PlotAreaBuilder { @Getter @Setter private SettingsNodesWrapper settingsNodesWrapper; @Getter @Setter private SetupUtils setupManager; - public void minimumId(PlotId minimumId) { + public static PlotAreaBuilder ofPlotArea(PlotArea area) { + return new PlotAreaBuilder() + .worldName(area.getWorldName()) + .areaName(area.getId()) + .plotAreaType(area.getType()) + .terrainType(area.getTerrain()) + .generatorName(area.getGenerator().getName()) + .plotManager(PlotSquared.imp().getPluginName()) + .minimumId(area.getMin()) + .maximumId(area.getMax()) + .settingsNodesWrapper(new SettingsNodesWrapper(area.getSettingNodes(), null)); + } + + public PlotAreaBuilder minimumId(PlotId minimumId) { if (this.maximumId != null - && (minimumId.getX() >= this.maximumId.getX() || minimumId.getY() >= this.maximumId.getY())) { + && (minimumId.getX() > this.maximumId.getX() || minimumId.getY() > this.maximumId.getY())) { throw new IllegalStateException("minId >= maxId"); } this.minimumId = minimumId; + return this; } - public void maximumId(PlotId maximumId) { + public PlotAreaBuilder maximumId(PlotId maximumId) { if (this.minimumId != null - && (maximumId.getX() <= this.minimumId.getX() || maximumId.getY() <= this.minimumId.getY())) { + && (maximumId.getX() < this.minimumId.getX() || maximumId.getY() < this.minimumId.getY())) { throw new IllegalStateException("maxId <= minId"); } this.maximumId = maximumId; + return this; } } diff --git a/Core/src/main/java/com/plotsquared/core/setup/SettingsNodeStep.java b/Core/src/main/java/com/plotsquared/core/setup/SettingsNodeStep.java index 55d78722d..e5f3da3bd 100644 --- a/Core/src/main/java/com/plotsquared/core/setup/SettingsNodeStep.java +++ b/Core/src/main/java/com/plotsquared/core/setup/SettingsNodeStep.java @@ -29,7 +29,7 @@ public class SettingsNodeStep implements SetupStep { if (this.configurationNode.isValid(argument)) { this.configurationNode.setValue(argument); } - return this.wrapper.hasNext() ? wrapper.next() : wrapper.getAfterwards(); + return this.wrapper.hasNext(this.id) ? wrapper.next(this.id) : wrapper.getAfterwards(); } @NotNull @Override public Collection getSuggestions() { diff --git a/Core/src/main/java/com/plotsquared/core/setup/SettingsNodesWrapper.java b/Core/src/main/java/com/plotsquared/core/setup/SettingsNodesWrapper.java index a967d8ea1..2c0fd0b0f 100644 --- a/Core/src/main/java/com/plotsquared/core/setup/SettingsNodesWrapper.java +++ b/Core/src/main/java/com/plotsquared/core/setup/SettingsNodesWrapper.java @@ -6,25 +6,34 @@ import lombok.Getter; public class SettingsNodesWrapper { @Getter private final ConfigurationNode[] settingsNodes; @Getter private final SetupStep afterwards; - private int current; public SettingsNodesWrapper(ConfigurationNode[] settingsNodes, SetupStep afterwards) { this.settingsNodes = settingsNodes; this.afterwards = afterwards; - this.current = 0; } - public SettingsNodeStep next() { - if (this.settingsNodes.length <= this.current) { + public SettingsNodeStep next(int current) { + if (this.settingsNodes.length <= current + 1) { throw new IllegalStateException("No step left"); } else { - int temp = this.current; - this.current++; - return new SettingsNodeStep(this.settingsNodes[temp], temp, this); + return new SettingsNodeStep(this.settingsNodes[current + 1], current + 1, this); } } - public boolean hasNext() { - return this.current < this.settingsNodes.length; + + public SettingsNodeStep first() { + if (this.settingsNodes.length == 0) { + throw new IllegalStateException("No step left"); + } else { + return new SettingsNodeStep(this.settingsNodes[0], 0, this); + } + } + + public boolean hasNext(int current) { + return current + 1 < this.settingsNodes.length; + } + + public boolean hasStep() { + return this.settingsNodes.length > 0; } } diff --git a/Core/src/main/java/com/plotsquared/core/util/SetupUtils.java b/Core/src/main/java/com/plotsquared/core/util/SetupUtils.java index 73e6ccfaa..cae6f2ae1 100644 --- a/Core/src/main/java/com/plotsquared/core/util/SetupUtils.java +++ b/Core/src/main/java/com/plotsquared/core/util/SetupUtils.java @@ -42,6 +42,7 @@ public abstract class SetupUtils { public abstract String getGenerator(final PlotArea plotArea); + @Deprecated public abstract String setupWorld(final SetupObject object); public abstract String setupWorld(final PlotAreaBuilder builder);