diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java index bf26a0a1f..a831c10b8 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java @@ -175,15 +175,6 @@ public class EditSession implements Extent, AutoCloseable { public String getDisplayName() { return this.displayName; } - - public static Optional getFromDisplayName(String name) { - for (ReorderMode mode : values()) { - if (mode.getDisplayName().equalsIgnoreCase(name)) { - return Optional.of(mode); - } - } - return Optional.empty(); - } } @SuppressWarnings("ProtectedField") diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java index a5a0a9796..220b30de2 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java @@ -122,23 +122,18 @@ public class GeneralCommands { ) @CommandPermissions("worldedit.fast") public void fast(Player player, LocalSession session, - @Arg(name = "on|off", desc = "The new fast mode state", def = "toggle") - String newState) throws WorldEditException { - - if (session.hasFastMode()) { - if ("on".equals(newState)) { - player.printError("Fast mode already enabled."); - return; - } + @Arg(desc = "The new fast mode state", def = "") + Boolean fastMode) throws WorldEditException { + boolean hasFastMode = session.hasFastMode(); + if (fastMode != null && fastMode == hasFastMode) { + player.printError("Fast mode already " + (fastMode ? "enabled" : "disabled") + "."); + return; + } + if (hasFastMode) { session.setFastMode(false); player.print("Fast mode disabled."); } else { - if ("off".equals(newState)) { - player.printError("Fast mode already disabled."); - return; - } - session.setFastMode(true); player.print("Fast mode enabled. Lighting in the affected chunks may be wrong and/or you may need to rejoin to see changes."); } @@ -150,18 +145,11 @@ public class GeneralCommands { ) @CommandPermissions("worldedit.reorder") public void reorderMode(Player player, LocalSession session, - @Arg(name = "multi|fast|none", desc = "The reorder mode", def = "") - String newState) throws WorldEditException { - if (newState == null) { + @Arg(desc = "The reorder mode", def = "") + EditSession.ReorderMode reorderMode) throws WorldEditException { + if (reorderMode == null) { player.print("The reorder mode is " + session.getReorderMode().getDisplayName()); } else { - java.util.Optional reorderModeOptional = EditSession.ReorderMode.getFromDisplayName(newState); - if (!reorderModeOptional.isPresent()) { - player.printError("Unknown reorder mode!"); - return; - } - - EditSession.ReorderMode reorderMode = reorderModeOptional.get(); session.setReorderMode(reorderMode); player.print("The reorder mode is now " + session.getReorderMode().getDisplayName()); } @@ -173,26 +161,21 @@ public class GeneralCommands { ) @CommandPermissions("worldedit.drawsel") public void drawSelection(Player player, LocalSession session, - @Arg(name = "on|off", desc = "The new fast mode state", def = "toggle") - String newState) throws WorldEditException { + @Arg(desc = "The new draw selection state", def = "toggle") + Boolean drawSelection) throws WorldEditException { if (!WorldEdit.getInstance().getConfiguration().serverSideCUI) { throw new DisallowedUsageException("This functionality is disabled in the configuration!"); } - if (session.shouldUseServerCUI()) { - if ("on".equals(newState)) { - player.printError("Server CUI already enabled."); - return; - } - + boolean useServerCui = session.shouldUseServerCUI(); + if (drawSelection != null && drawSelection == useServerCui) { + player.printError("Server CUI already " + (useServerCui ? "enabled" : "disabled") + "."); + return; + } + if (useServerCui) { session.setUseServerCUI(false); session.updateServerCUI(player); player.print("Server CUI disabled."); } else { - if ("off".equals(newState)) { - player.printError("Server CUI already disabled."); - return; - } - session.setUseServerCUI(true); session.updateServerCUI(player); player.print("Server CUI enabled. This only supports cuboid regions, with a maximum size of 32x32x32."); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java index c61c2fc92..2af2b8750 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java @@ -19,9 +19,6 @@ package com.sk89q.worldedit.command; -import com.sk89q.minecraft.util.commands.Command; -import com.sk89q.minecraft.util.commands.CommandContext; -import com.sk89q.minecraft.util.commands.CommandPermissions; import com.sk89q.worldedit.LocalConfiguration; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; @@ -35,12 +32,18 @@ import com.sk89q.worldedit.command.tool.FloodFillTool; import com.sk89q.worldedit.command.tool.LongRangeBuildTool; import com.sk89q.worldedit.command.tool.QueryTool; import com.sk89q.worldedit.command.tool.TreePlanter; +import com.sk89q.worldedit.command.util.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissionsConditionGenerator; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.function.pattern.BlockPattern; import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.util.HandSide; import com.sk89q.worldedit.util.TreeGenerator; +import org.enginehub.piston.annotation.Command; +import org.enginehub.piston.annotation.CommandContainer; +import org.enginehub.piston.annotation.param.Arg; +@CommandContainer(superTypes = CommandPermissionsConditionGenerator.Registration.class) public class ToolCommands { private final WorldEdit we; @@ -49,11 +52,8 @@ public class ToolCommands { } @Command( - aliases = { "none" }, - usage = "", - desc = "Unbind a bound tool from your current item", - min = 0, - max = 0 + name = "none", + desc = "Unbind a bound tool from your current item" ) public void none(Player player, LocalSession session) throws WorldEditException { @@ -62,11 +62,8 @@ public class ToolCommands { } @Command( - aliases = { "info" }, - usage = "", - desc = "Block information tool", - min = 0, - max = 0 + name = "info", + desc = "Block information tool" ) @CommandPermissions("worldedit.tool.info") public void info(Player player, LocalSession session) throws WorldEditException { @@ -78,49 +75,34 @@ public class ToolCommands { } @Command( - aliases = { "tree" }, - usage = "[type]", - desc = "Tree generator tool", - min = 0, - max = 1 + name = "tree", + desc = "Tree generator tool" ) @CommandPermissions("worldedit.tool.tree") - public void tree(Player player, LocalSession session, CommandContext args) throws WorldEditException { - - TreeGenerator.TreeType type = args.argsLength() > 0 - ? TreeGenerator.lookup(args.getString(0)) - : TreeGenerator.TreeType.TREE; - - if (type == null) { - player.printError("Tree type '" + args.getString(0) + "' is unknown."); - return; - } - + public void tree(Player player, LocalSession session, + @Arg(desc = "Type of tree to generate", def = "tree") + TreeGenerator.TreeType type) throws WorldEditException { BaseItemStack itemStack = player.getItemInHand(HandSide.MAIN_HAND); session.setTool(itemStack.getType(), new TreePlanter(type)); player.print("Tree tool bound to " + itemStack.getType().getName() + "."); } @Command( - aliases = { "repl" }, - usage = "", - desc = "Block replacer tool", - min = 1, - max = 1 + name = "repl", + desc = "Block replacer tool" ) @CommandPermissions("worldedit.tool.replacer") - public void repl(Player player, LocalSession session, Pattern pattern) throws WorldEditException { + public void repl(Player player, LocalSession session, + @Arg(desc = "The pattern of blocks to place") + Pattern pattern) throws WorldEditException { BaseItemStack itemStack = player.getItemInHand(HandSide.MAIN_HAND); session.setTool(itemStack.getType(), new BlockReplacer(pattern)); player.print("Block replacer tool bound to " + itemStack.getType().getName() + "."); } @Command( - aliases = { "cycler" }, - usage = "", - desc = "Block data cycler tool", - min = 0, - max = 0 + name = "cycler", + desc = "Block data cycler tool" ) @CommandPermissions("worldedit.tool.data-cycler") public void cycler(Player player, LocalSession session) throws WorldEditException { @@ -131,14 +113,16 @@ public class ToolCommands { } @Command( - aliases = { "floodfill", "flood" }, - usage = " ", - desc = "Flood fill tool", - min = 2, - max = 2 + name = "floodfill", + aliases = { "flood" }, + desc = "Flood fill tool" ) @CommandPermissions("worldedit.tool.flood-fill") - public void floodFill(Player player, LocalSession session, Pattern pattern, int range) throws WorldEditException { + public void floodFill(Player player, LocalSession session, + @Arg(desc = "The pattern to flood fill") + Pattern pattern, + @Arg(desc = "The range to perform the fill") + int range) throws WorldEditException { LocalConfiguration config = we.getConfiguration(); @@ -153,11 +137,8 @@ public class ToolCommands { } @Command( - aliases = { "deltree" }, - usage = "", - desc = "Floating tree remover tool", - min = 0, - max = 0 + name = "deltree", + desc = "Floating tree remover tool" ) @CommandPermissions("worldedit.tool.deltree") public void deltree(Player player, LocalSession session) throws WorldEditException { @@ -169,11 +150,8 @@ public class ToolCommands { } @Command( - aliases = { "farwand" }, - usage = "", - desc = "Wand at a distance tool", - min = 0, - max = 0 + name = "farwand", + desc = "Wand at a distance tool" ) @CommandPermissions("worldedit.tool.farwand") public void farwand(Player player, LocalSession session) throws WorldEditException { @@ -184,14 +162,16 @@ public class ToolCommands { } @Command( - aliases = { "lrbuild", "/lrbuild" }, - usage = " ", - desc = "Long-range building tool", - min = 2, - max = 2 + name = "lrbuild", + aliases = { "/lrbuild" }, + desc = "Long-range building tool" ) @CommandPermissions("worldedit.tool.lrbuild") - public void longrangebuildtool(Player player, LocalSession session, Pattern secondary, Pattern primary) throws WorldEditException { + public void longrangebuildtool(Player player, LocalSession session, + @Arg(desc = "Block to set on left-click") + Pattern primary, + @Arg(desc = "Block to set on right-click") + Pattern secondary) throws WorldEditException { BaseItemStack itemStack = player.getItemInHand(HandSide.MAIN_HAND); session.setTool(itemStack.getType(), new LongRangeBuildTool(primary, secondary)); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolUtilCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolUtilCommands.java index df1637880..6f53cc1bf 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolUtilCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolUtilCommands.java @@ -19,21 +19,23 @@ package com.sk89q.worldedit.command; -import com.sk89q.minecraft.util.commands.Command; -import com.sk89q.minecraft.util.commands.CommandContext; -import com.sk89q.minecraft.util.commands.CommandPermissions; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEditException; +import com.sk89q.worldedit.command.util.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissionsConditionGenerator; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.util.HandSide; -import com.sk89q.worldedit.util.command.parametric.Optional; +import org.enginehub.piston.annotation.Command; +import org.enginehub.piston.annotation.CommandContainer; +import org.enginehub.piston.annotation.param.Arg; /** * Tool commands. */ +@CommandContainer(superTypes = CommandPermissionsConditionGenerator.Registration.class) public class ToolUtilCommands { private final WorldEdit we; @@ -42,44 +44,37 @@ public class ToolUtilCommands { } @Command( - aliases = { "/", "," }, - usage = "[on|off]", - desc = "Toggle the super pickaxe function", - min = 0, - max = 1 + name = "/", + aliases = { "," }, + desc = "Toggle the super pickaxe function" ) @CommandPermissions("worldedit.superpickaxe") - public void togglePickaxe(Player player, LocalSession session, CommandContext args) throws WorldEditException { - - String newState = args.getString(0, null); - if (session.hasSuperPickAxe()) { - if ("on".equals(newState)) { - player.printError("Super pick axe already enabled."); - return; - } - + public void togglePickaxe(Player player, LocalSession session, + @Arg(desc = "The new super pickaxe state", def = "") + Boolean superPickaxe) throws WorldEditException { + boolean hasSuperPickAxe = session.hasSuperPickAxe(); + if (superPickaxe != null && superPickaxe == hasSuperPickAxe) { + player.printError("Super pickaxe already " + (superPickaxe ? "enabled" : "disabled") + "."); + return; + } + if (hasSuperPickAxe) { session.disableSuperPickAxe(); - player.print("Super pick axe disabled."); + player.print("Super pickaxe disabled."); } else { - if ("off".equals(newState)) { - player.printError("Super pick axe already disabled."); - return; - } session.enableSuperPickAxe(); - player.print("Super pick axe enabled."); + player.print("Super pickaxe enabled."); } } @Command( - aliases = { "mask" }, - usage = "[mask]", - desc = "Set the brush mask", - min = 0, - max = -1 + name = "mask", + desc = "Set the brush mask" ) @CommandPermissions("worldedit.brush.options.mask") - public void mask(Player player, LocalSession session, @Optional Mask mask) throws WorldEditException { + public void mask(Player player, LocalSession session, + @Arg(desc = "The mask to set", def = "") + Mask mask) throws WorldEditException { if (mask == null) { session.getBrushTool(player.getItemInHand(HandSide.MAIN_HAND).getType()).setMask(null); player.print("Brush mask disabled."); @@ -90,46 +85,41 @@ public class ToolUtilCommands { } @Command( - aliases = { "mat", "material" }, - usage = "[pattern]", - desc = "Set the brush material", - min = 1, - max = 1 + name = "material", + aliases = { "material" }, + desc = "Set the brush material" ) @CommandPermissions("worldedit.brush.options.material") - public void material(Player player, LocalSession session, Pattern pattern) throws WorldEditException { + public void material(Player player, LocalSession session, + @Arg(desc = "The pattern of blocks to use") + Pattern pattern) throws WorldEditException { session.getBrushTool(player.getItemInHand(HandSide.MAIN_HAND).getType()).setFill(pattern); player.print("Brush material set."); } @Command( - aliases = { "range" }, - usage = "[pattern]", - desc = "Set the brush range", - min = 1, - max = 1 - ) + name = "range", + desc = "Set the brush range" + ) @CommandPermissions("worldedit.brush.options.range") - public void range(Player player, LocalSession session, CommandContext args) throws WorldEditException { - int range = args.getInteger(0); + public void range(Player player, LocalSession session, + @Arg(desc = "The range of the brush") + int range) throws WorldEditException { session.getBrushTool(player.getItemInHand(HandSide.MAIN_HAND).getType()).setRange(range); player.print("Brush range set."); } @Command( - aliases = { "size" }, - usage = "[pattern]", - desc = "Set the brush size", - min = 1, - max = 1 + name = "size", + desc = "Set the brush size" ) @CommandPermissions("worldedit.brush.options.size") - public void size(Player player, LocalSession session, CommandContext args) throws WorldEditException { + public void size(Player player, LocalSession session, + @Arg(desc = "The size of the brush") + int size) throws WorldEditException { + we.checkMaxBrushRadius(size); - int radius = args.getInteger(0); - we.checkMaxBrushRadius(radius); - - session.getBrushTool(player.getItemInHand(HandSide.MAIN_HAND).getType()).setSize(radius); + session.getBrushTool(player.getItemInHand(HandSide.MAIN_HAND).getType()).setSize(size); player.print("Brush size set."); } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/BooleanConverter.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/BooleanConverter.java new file mode 100644 index 000000000..fccc6a932 --- /dev/null +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/BooleanConverter.java @@ -0,0 +1,65 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.command.argument; + +import com.google.common.collect.ImmutableSortedSet; +import org.enginehub.piston.CommandManager; +import org.enginehub.piston.converter.ArgumentConverter; +import org.enginehub.piston.converter.ConversionResult; +import org.enginehub.piston.converter.FailedConversion; +import org.enginehub.piston.converter.SuccessfulConversion; +import org.enginehub.piston.inject.InjectedValueAccess; +import org.enginehub.piston.inject.Key; + +public class BooleanConverter implements ArgumentConverter { + + public static void register(CommandManager commandManager) { + commandManager.registerConverter(Key.of(Boolean.class), new BooleanConverter()); + } + + private static final ImmutableSortedSet TRUE = ImmutableSortedSet + .orderedBy(String.CASE_INSENSITIVE_ORDER) + .add("on", "t", "true", "y", "yes") + .build(); + + private static final ImmutableSortedSet FALSE = ImmutableSortedSet + .orderedBy(String.CASE_INSENSITIVE_ORDER) + .add("off", "f", "false", "n", "no") + .build(); + + private BooleanConverter() { + } + + @Override + public String describeAcceptableArguments() { + return "on|off|true|false"; + } + + @Override + public ConversionResult convert(String argument, InjectedValueAccess context) { + if (TRUE.contains(argument)) { + return SuccessfulConversion.fromSingle(true); + } + if (FALSE.contains(argument)) { + return SuccessfulConversion.fromSingle(false); + } + return FailedConversion.from(new IllegalArgumentException("Not a strictly boolean value: " + argument)); + } +} diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/EnumConverter.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/EnumConverter.java index a5fab7da3..cb91c31a6 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/EnumConverter.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/EnumConverter.java @@ -20,7 +20,10 @@ package com.sk89q.worldedit.command.argument; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedMap; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.util.TreeGenerator; import org.enginehub.piston.CommandManager; import org.enginehub.piston.converter.ArgumentConverter; import org.enginehub.piston.converter.ConversionResult; @@ -31,34 +34,74 @@ import org.enginehub.piston.inject.Key; import javax.annotation.Nullable; import java.util.EnumSet; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Stream; + +import static com.google.common.base.Preconditions.checkState; +import static java.util.stream.Collectors.joining; public class EnumConverter> implements ArgumentConverter { public static void register(CommandManager commandManager) { commandManager.registerConverter(Key.of(SelectorChoice.class), - new EnumConverter<>(SelectorChoice.class, SelectorChoice.UNKNOWN)); + basic(SelectorChoice.class, SelectorChoice.UNKNOWN)); + commandManager.registerConverter(Key.of(TreeGenerator.TreeType.class), + full(TreeGenerator.TreeType.class, + t -> ImmutableSet.copyOf(t.lookupKeys), + null)); + commandManager.registerConverter(Key.of(EditSession.ReorderMode.class), + full(EditSession.ReorderMode.class, + r -> ImmutableSet.of(r.getDisplayName()), + null)); } + private static > EnumConverter basic(Class enumClass) { + return full(enumClass, e -> ImmutableSet.of(e.name()), null); + } + + private static > EnumConverter basic(Class enumClass, E unknownValue) { + return full(enumClass, e -> ImmutableSet.of(e.name()), unknownValue); + } + + private static > EnumConverter full(Class enumClass, + Function> lookupKeys, + @Nullable E unknownValue) { + return new EnumConverter<>(enumClass, lookupKeys, unknownValue); + } + + private final String choices; private final ImmutableMap map; @Nullable private final E unknownValue; - private EnumConverter(Class enumClass, @Nullable E unknownValue) { + private EnumConverter(Class enumClass, + Function> lookupKeys, + @Nullable E unknownValue) { ImmutableSortedMap.Builder map = ImmutableSortedMap.orderedBy(String.CASE_INSENSITIVE_ORDER); + Stream.Builder> choices = Stream.builder(); EnumSet validValues = EnumSet.allOf(enumClass); if (unknownValue != null) { validValues.remove(unknownValue); } for (E e : validValues) { - map.put(e.name(), e); + Set keys = lookupKeys.apply(e); + checkState(keys.size() > 0, "No lookup keys for enum value %s", e); + choices.add(keys); + for (String key : keys) { + map.put(key, e); + } } + this.choices = choices.build() + .map(choice -> choice.stream().collect(joining("|", "[", "]"))) + .collect(joining("|")); this.map = map.build(); this.unknownValue = unknownValue; } @Override public String describeAcceptableArguments() { - return String.join("|", map.keySet()); + return choices; } @Override diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformCommandMananger.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformCommandMananger.java index b6c2b6c89..016500666 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformCommandMananger.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformCommandMananger.java @@ -56,7 +56,12 @@ import com.sk89q.worldedit.command.SnapshotUtilCommands; import com.sk89q.worldedit.command.SnapshotUtilCommandsRegistration; import com.sk89q.worldedit.command.SuperPickaxeCommands; import com.sk89q.worldedit.command.SuperPickaxeCommandsRegistration; +import com.sk89q.worldedit.command.ToolCommands; +import com.sk89q.worldedit.command.ToolCommandsRegistration; +import com.sk89q.worldedit.command.ToolUtilCommands; +import com.sk89q.worldedit.command.ToolUtilCommandsRegistration; import com.sk89q.worldedit.command.argument.Arguments; +import com.sk89q.worldedit.command.argument.BooleanConverter; import com.sk89q.worldedit.command.argument.CommaSeparatedValuesConverter; import com.sk89q.worldedit.command.argument.DirectionConverter; import com.sk89q.worldedit.command.argument.EnumConverter; @@ -209,6 +214,7 @@ public final class PlatformCommandMananger { EnumConverter.register(commandManager); ExpandAmountConverter.register(commandManager); ZonedDateTimeConverter.register(commandManager); + BooleanConverter.register(commandManager); } private void registerAlwaysInjectedValues() { @@ -367,14 +373,22 @@ public final class PlatformCommandMananger { SnapshotUtilCommandsRegistration.builder(), new SnapshotUtilCommands(worldEdit) ); + register( + commandManager, + ToolCommandsRegistration.builder(), + new ToolCommands(worldEdit) + ); + register( + commandManager, + ToolUtilCommandsRegistration.builder(), + new ToolUtilCommands(worldEdit) + ); // Unported commands are below. Delete once they're added to the main manager above. /* dispatcher = new CommandGraph() .builder(builder) .commands() - .registerMethods(new ToolUtilCommands(worldEdit)) - .registerMethods(new ToolCommands(worldEdit)) .registerMethods(new UtilityCommands(worldEdit)) .register(adapt(new SelectionCommand(new ApplyCommand(new ReplaceParser(), "Set all blocks within selection"), "worldedit.region.set")), "/set") .group("worldedit", "we") diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java index 60e5f12f3..1bd79f2ff 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java @@ -19,6 +19,7 @@ package com.sk89q.worldedit.util; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.MaxChangedBlocksException; @@ -113,22 +114,22 @@ public class TreeGenerator { private static final Set primaryAliases = Sets.newHashSet(); private final String name; - private final String[] lookupKeys; + public final ImmutableList lookupKeys; static { for (TreeType type : EnumSet.allOf(TreeType.class)) { for (String key : type.lookupKeys) { lookup.put(key, type); } - if (type.lookupKeys.length > 0) { - primaryAliases.add(type.lookupKeys[0]); + if (type.lookupKeys.size() > 0) { + primaryAliases.add(type.lookupKeys.get(0)); } } } TreeType(String name, String... lookupKeys) { this.name = name; - this.lookupKeys = lookupKeys; + this.lookupKeys = ImmutableList.copyOf(lookupKeys); } public static Set getAliases() {