diff --git a/java/src/game/command/ArgumentParser.java b/java/src/game/command/ArgumentParser.java index 6742b41..d961f69 100644 --- a/java/src/game/command/ArgumentParser.java +++ b/java/src/game/command/ArgumentParser.java @@ -1,5 +1,6 @@ package game.command; +import java.util.Collection; import java.util.List; import game.collect.Lists; @@ -86,7 +87,7 @@ public abstract class ArgumentParser { public abstract Object parse(CommandEnvironment env, String input); public abstract Object getDefault(CommandEnvironment env); - public abstract String[] getCompletions(CommandEnvironment env); + public abstract Collection getCompletions(CommandEnvironment env); public abstract Class getTypeClass(); public final String getName() { diff --git a/java/src/game/command/ArgumentSplitter.java b/java/src/game/command/ArgumentSplitter.java index aa8ecb6..6d229e5 100644 --- a/java/src/game/command/ArgumentSplitter.java +++ b/java/src/game/command/ArgumentSplitter.java @@ -126,7 +126,7 @@ public class ArgumentSplitter { return new ArgumentSplitter(args, str, env); } - private static String[] getParam(CommandEnvironment env, String[] argv, CachedExecutable cached) { + private static Iterable getParam(CommandEnvironment env, String[] argv, CachedExecutable cached) { Map parameters = cached.getParameters(); List positionals = Lists.newArrayList(cached.getPositionals()); Set args = Sets.newHashSet(); @@ -190,16 +190,16 @@ public class ArgumentSplitter { return null; } - public static String[] parseComplete(CommandEnvironment env, String[] argv, CachedExecutable cached, String last) { - String[] comp = getParam(env, argv, cached); - if(comp == null || comp.length == 0) { + public static Iterable parseComplete(CommandEnvironment env, String[] argv, CachedExecutable cached, String last) { + Iterable comp = getParam(env, argv, cached); + if(comp == null /* || comp.length == 0 */ ) { Set params = Sets.newTreeSet(); boolean all = last.startsWith("--"); for(String param : cached.getParameters().keySet()) { if(all || param.length() == 1) params.add(param.length() == 1 ? "-" + param : ("--" + param)); } - comp = params.toArray(new String[params.size()]); + return params; } return comp; } diff --git a/java/src/game/command/CommandEnvironment.java b/java/src/game/command/CommandEnvironment.java index 7e1b555..a88ec0c 100644 --- a/java/src/game/command/CommandEnvironment.java +++ b/java/src/game/command/CommandEnvironment.java @@ -196,7 +196,7 @@ public class CommandEnvironment { if(argv.length == 0) return list; String param = cmd.endsWith(" ") ? "" : argv[argv.length - 1]; - String[] comp; + Iterable comp; if(argv.length > 1) { int eq = argv[0].indexOf('='); CachedExecutable cached = this.executables.get(eq >= 0 ? argv[0].substring(eq + 1) : argv[0]); @@ -205,7 +205,7 @@ public class CommandEnvironment { comp = ArgumentSplitter.parseComplete(this, argv, cached, param); } else { - comp = this.executables.keySet().toArray(new String[this.executables.keySet().size()]); + comp = this.executables.keySet(); } for(String cmp : comp) { if(cmp.regionMatches(true, 0, param, 0, param.length())) diff --git a/java/src/game/command/CompletingParser.java b/java/src/game/command/CompletingParser.java index 99701c5..247c740 100644 --- a/java/src/game/command/CompletingParser.java +++ b/java/src/game/command/CompletingParser.java @@ -1,17 +1,21 @@ package game.command; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + public abstract class CompletingParser extends ArgumentParser { - private final String[] defCompletions; + private final List defCompletions; public CompletingParser(String name, Object ... completions) { super(name); - this.defCompletions = new String[completions.length]; - for(int z = 0; z < completions.length; z++) { - this.defCompletions[z] = String.valueOf(completions[z]); + this.defCompletions = new ArrayList(completions.length); + for(Object comp : completions) { + this.defCompletions.add(String.valueOf(comp)); } } - public String[] getCompletions(CommandEnvironment env) { + public Collection getCompletions(CommandEnvironment env) { return this.defCompletions; } } diff --git a/java/src/game/command/DimensionParser.java b/java/src/game/command/DimensionParser.java index c0bfc72..f66ebf3 100644 --- a/java/src/game/command/DimensionParser.java +++ b/java/src/game/command/DimensionParser.java @@ -1,5 +1,7 @@ package game.command; +import java.util.Collection; + import game.dimension.Dimension; import game.init.UniverseRegistry; import game.world.Position; @@ -37,8 +39,8 @@ public class DimensionParser extends CompletingParser { // throw new ScriptException("Unbekannte Dimension '%s'"); } - public String[] getCompletions(CommandEnvironment env) { - return UniverseRegistry.getWorldNames().toArray(new String[UniverseRegistry.getWorldNames().size()]); + public Collection getCompletions(CommandEnvironment env) { + return UniverseRegistry.getWorldNames(); } public Class getTypeClass() { diff --git a/java/src/game/command/DoubleParser.java b/java/src/game/command/DoubleParser.java index d3e32bb..19fec1f 100644 --- a/java/src/game/command/DoubleParser.java +++ b/java/src/game/command/DoubleParser.java @@ -1,5 +1,8 @@ package game.command; +import java.util.Collection; + +import game.collect.Lists; import game.world.BlockPos; import game.world.Position; @@ -75,15 +78,15 @@ public class DoubleParser extends DefaultingParser { return this.hasDefault() ? double.class : Double.class; } - public String[] getCompletions(CommandEnvironment env) { + public Collection getCompletions(CommandEnvironment env) { BlockPos pos = this.defType == null ? null : env.getExecutor().getPointedPosition(); switch(this.defType) { case X: - return pos == null ? null : new String[] {"" + pos.getX()}; + return pos == null ? null : Lists.newArrayList("" + pos.getX()); case Y: - return pos == null ? null : new String[] {"" + pos.getY()}; + return pos == null ? null : Lists.newArrayList("" + pos.getY()); case Z: - return pos == null ? null : new String[] {"" + pos.getZ()}; + return pos == null ? null : Lists.newArrayList("" + pos.getZ()); } return super.getCompletions(env); } diff --git a/java/src/game/command/EntityListParser.java b/java/src/game/command/EntityListParser.java index 9666024..3630cdd 100644 --- a/java/src/game/command/EntityListParser.java +++ b/java/src/game/command/EntityListParser.java @@ -1,5 +1,6 @@ package game.command; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -71,17 +72,15 @@ public class EntityListParser extends EntityParser { return entity == null ? null : Lists.newArrayList(entity); } - public String[] getCompletions(CommandEnvironment env) { - Entity target = env.getExecutor().getPointedEntity(); - List comp = target == null || (this.livingOnly && !(target instanceof EntityLiving)) ? Lists.newArrayList() : Lists.newArrayList("#" + target.getId()); - comp.addAll(env.getServer().getAllUsernames()); + public Collection getCompletions(CommandEnvironment env) { + Collection comp = super.getCompletions(env); comp.add("*"); for(Class clazz : EntityRegistry.getAllClasses()) { if(!this.livingOnly || EntityLiving.class.isAssignableFrom(clazz)) comp.add(EntityRegistry.getEntityString(clazz)); } comp.add("**"); - return comp.toArray(new String[comp.size()]); + return comp; } public Class getTypeClass() { diff --git a/java/src/game/command/EntityParser.java b/java/src/game/command/EntityParser.java index b4944c7..70d13b7 100644 --- a/java/src/game/command/EntityParser.java +++ b/java/src/game/command/EntityParser.java @@ -1,5 +1,6 @@ package game.command; +import java.util.Collection; import java.util.List; import game.collect.Lists; @@ -46,11 +47,11 @@ public class EntityParser extends PlayerEntityParser { return this.useSender && (this.livingOnly ? (env.getExecutor() instanceof EntityLiving) : (env.getExecutor() instanceof Entity)) ? env.getExecutor() : super.getDefault(env); } - public String[] getCompletions(CommandEnvironment env) { + public Collection getCompletions(CommandEnvironment env) { Entity target = env.getExecutor().getPointedEntity(); List comp = target == null || (this.livingOnly && !(target instanceof EntityLiving)) ? Lists.newArrayList() : Lists.newArrayList("#" + target.getId()); - comp.addAll(env.getServer().getAllUsernames()); - return comp.toArray(new String[comp.size()]); + comp.addAll(super.getCompletions(env)); + return comp; } public Class getTypeClass() { diff --git a/java/src/game/command/PlayerEntityListParser.java b/java/src/game/command/PlayerEntityListParser.java index 0d768ee..008d86a 100644 --- a/java/src/game/command/PlayerEntityListParser.java +++ b/java/src/game/command/PlayerEntityListParser.java @@ -1,5 +1,6 @@ package game.command; +import java.util.Collection; import java.util.List; import game.collect.Lists; import game.entity.Entity; @@ -30,10 +31,10 @@ public class PlayerEntityListParser extends PlayerEntityParser { return entity == null ? null : Lists.newArrayList(entity); } - public String[] getCompletions(CommandEnvironment env) { - List comp = Lists.newArrayList(env.getServer().getAllUsernames()); + public Collection getCompletions(CommandEnvironment env) { + Collection comp = super.getCompletions(env); comp.add("*"); - return comp.toArray(new String[comp.size()]); + return comp; } public Class getTypeClass() { diff --git a/java/src/game/command/PlayerListParser.java b/java/src/game/command/PlayerListParser.java index a142010..05857e8 100644 --- a/java/src/game/command/PlayerListParser.java +++ b/java/src/game/command/PlayerListParser.java @@ -1,5 +1,6 @@ package game.command; +import java.util.Collection; import java.util.List; import game.collect.Lists; import game.network.Player; @@ -23,10 +24,10 @@ public class PlayerListParser extends PlayerParser { return net == null ? null : Lists.newArrayList(net); } - public String[] getCompletions(CommandEnvironment env) { - List comp = Lists.newArrayList(env.getServer().getAllUsernames()); + public Collection getCompletions(CommandEnvironment env) { + Collection comp = super.getCompletions(env); comp.add("*"); - return comp.toArray(new String[comp.size()]); + return comp; } public Class getTypeClass() { diff --git a/java/src/game/command/PlayerParser.java b/java/src/game/command/PlayerParser.java index c057bd1..0c5d7c8 100644 --- a/java/src/game/command/PlayerParser.java +++ b/java/src/game/command/PlayerParser.java @@ -1,7 +1,6 @@ package game.command; -import java.util.List; - +import java.util.Collection; import game.network.Player; public class PlayerParser extends CompletingParser { @@ -23,9 +22,8 @@ public class PlayerParser extends CompletingParser { return this.useSender && env.getExecutor() instanceof Player ? (Player)env.getExecutor() : null; } - public String[] getCompletions(CommandEnvironment env) { - List comp = env.getServer().getAllUsernames(); - return comp.toArray(new String[comp.size()]); + public Collection getCompletions(CommandEnvironment env) { + return env.getServer().getAllUsernames(); } public Class getTypeClass() { diff --git a/java/src/game/command/StringCompleter.java b/java/src/game/command/StringCompleter.java index 97e99be..374bbb1 100644 --- a/java/src/game/command/StringCompleter.java +++ b/java/src/game/command/StringCompleter.java @@ -1,5 +1,7 @@ package game.command; +import java.util.Collection; + public interface StringCompleter { - String[] complete(CommandEnvironment env); + Collection complete(CommandEnvironment env); } diff --git a/java/src/game/command/StringParser.java b/java/src/game/command/StringParser.java index 93d55ae..1b3d636 100644 --- a/java/src/game/command/StringParser.java +++ b/java/src/game/command/StringParser.java @@ -1,5 +1,7 @@ package game.command; +import java.util.Collection; + import game.util.CharValidator; public class StringParser extends DefaultingParser { @@ -55,7 +57,7 @@ public class StringParser extends DefaultingParser { return String.class; } - public String[] getCompletions(CommandEnvironment env) { + public Collection getCompletions(CommandEnvironment env) { return this.completer != null ? this.completer.complete(env) : super.getCompletions(env); } } diff --git a/java/src/game/command/WorldParser.java b/java/src/game/command/WorldParser.java index 69b5e8a..c2df3bf 100644 --- a/java/src/game/command/WorldParser.java +++ b/java/src/game/command/WorldParser.java @@ -1,5 +1,6 @@ package game.command; +import java.util.Collection; import java.util.List; import game.collect.Lists; @@ -31,13 +32,13 @@ public class WorldParser extends DimensionParser { // return world; } - public String[] getCompletions(CommandEnvironment env) { + public Collection getCompletions(CommandEnvironment env) { if(this.loadedOnly) { List loaded = Lists.newArrayList(); for(WorldServer world : env.getServer().getWorlds()) { loaded.add(world.dimension.getDimensionName()); } - return loaded.toArray(new String[loaded.size()]); + return loaded; } return super.getCompletions(env); } diff --git a/java/src/game/command/commands/CommandOfflinetp.java b/java/src/game/command/commands/CommandOfflinetp.java index f638dec..7ad7c0a 100644 --- a/java/src/game/command/commands/CommandOfflinetp.java +++ b/java/src/game/command/commands/CommandOfflinetp.java @@ -1,7 +1,9 @@ package game.command.commands; +import java.util.Collection; import java.util.List; import game.command.CommandEnvironment; +import game.collect.Lists; import game.command.Command; import game.command.Executor; import game.command.RunException; @@ -16,8 +18,8 @@ public class CommandOfflinetp extends Command { super("offlinetp"); this.addString("user", false, new StringCompleter() { - public String[] complete(CommandEnvironment env) { - return env.getServer().getUsers(); + public Collection complete(CommandEnvironment env) { + return Lists.newArrayList(env.getServer().getUsers()); } }); diff --git a/java/src/game/command/commands/CommandWarp.java b/java/src/game/command/commands/CommandWarp.java index 0fa9fa0..04f8a03 100644 --- a/java/src/game/command/commands/CommandWarp.java +++ b/java/src/game/command/commands/CommandWarp.java @@ -1,7 +1,9 @@ package game.command.commands; +import java.util.Collection; import java.util.List; import game.command.CommandEnvironment; +import game.collect.Lists; import game.command.Command; import game.command.Executor; import game.command.RunException; @@ -18,13 +20,9 @@ public class CommandWarp extends Command { super("warp"); this.addString("warp", true, new StringCompleter() { - public String[] complete(CommandEnvironment env) { - String[] warps = new String[1 + env.getServer().getWarps().size()]; - warps[0] = "spawn"; - int pos = 1; - for(String warp : env.getServer().getWarps().keySet()) { - warps[pos++] = warp; - } + public Collection complete(CommandEnvironment env) { + List warps = Lists.newArrayList("spawn"); + warps.addAll(env.getServer().getWarps().keySet()); return warps; } });