Remove usage of SetupObject

This commit is contained in:
Hannes Greule 2020-06-05 02:19:37 +02:00 committed by Alexander Söderberg
parent 5165c439fc
commit ae1427b189
10 changed files with 114 additions and 507 deletions

View File

@ -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 {

View File

@ -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);
}

View File

@ -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<Command> 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<String, GeneratorWrapper<?>> 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;
}
}
// 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<String> allTypes = Arrays.asList("normal", "augmented", "partial");
List<String> allDesc = Arrays
.asList("Standard plot generation", "Plot generation with vanilla terrain",
"Vanilla with clusters of plots");
ArrayList<String> types = new ArrayList<>();
if (SetupUtils.generators.get(object.setupGenerator).isFull()) {
types.add("normal");
}
types.add("augmented");
types.add("partial");
Optional<PlotAreaType> 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<PlotAreaTerrainType> 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<Command> 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<Command> 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<PlotMessage> showDescriptionMessage() {
SetupUtils.manager.updateGenerators();
final List<PlotMessage> messages = new ArrayList<>();
messages.add(new PlotMessage("What generator do you want?").color("$6"));
for (Entry<String, GeneratorWrapper<?>> 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<Command> 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<String, String> 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<PlotMessage> showDescriptionMessage() {
final List<PlotMessage> messages = new ArrayList<>();
messages.add(new PlotMessage("What world type do you want?").color("$6"));
for (final Map.Entry<String, String> 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<PlotMessage> showDescriptionMessage();
public abstract boolean parseInput(String input);
public final PlotMessage getUsage() {
return new PlotMessage("Usage: ").color("$1")
.text("/plot setup " + this.stepName + " <value>").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");
}
}
}*/
}

View File

@ -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);

View File

@ -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();

View File

@ -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() {

View File

@ -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;
}
}

View File

@ -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<String> getSuggestions() {

View File

@ -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;
}
}

View File

@ -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);