diff --git a/src/main/java/net/minecraft/commands/CommandDispatcher.java b/src/main/java/net/minecraft/commands/CommandDispatcher.java index 768e97e..5b7a8f3 100644 --- a/src/main/java/net/minecraft/commands/CommandDispatcher.java +++ b/src/main/java/net/minecraft/commands/CommandDispatcher.java @@ -1,7 +1,7 @@ package net.minecraft.commands; import com.google.common.collect.Maps; -import net.minecraft.commands.builder.CommandBuilder; +import net.minecraft.commands.builder.LiteralArgumentBuilder; import net.minecraft.commands.exceptions.CommandException; import net.minecraft.commands.exceptions.UnknownCommandException; import net.minecraft.commands.tree.LiteralCommandNode; @@ -11,11 +11,11 @@ import java.util.Map; public class CommandDispatcher { private final Map commands = Maps.newHashMap(); - public void register(CommandBuilder command) { - if (commands.containsKey(command.getName())) { - throw new IllegalArgumentException("New command " + command.getName() + " conflicts with existing command " + command.getName()); + public void register(LiteralArgumentBuilder command) { + if (commands.containsKey(command.getLiteral())) { + throw new IllegalArgumentException("New command " + command.getLiteral() + " conflicts with existing command " + command.getLiteral()); } - commands.put(command.getName(), command.build()); + commands.put(command.getLiteral(), command.build()); } public void execute(String command) throws CommandException { diff --git a/src/main/java/net/minecraft/commands/builder/ArgumentBuilder.java b/src/main/java/net/minecraft/commands/builder/ArgumentBuilder.java index c0bf8cc..91588ed 100644 --- a/src/main/java/net/minecraft/commands/builder/ArgumentBuilder.java +++ b/src/main/java/net/minecraft/commands/builder/ArgumentBuilder.java @@ -5,17 +5,29 @@ import net.minecraft.commands.tree.CommandNode; import java.util.List; -public abstract class ArgumentBuilder { +public abstract class ArgumentBuilder> { private final List arguments = Lists.newArrayList(); + private Runnable executor; - public ArgumentBuilder then(ArgumentBuilder argument) { + protected abstract T getThis(); + + public T then(ArgumentBuilder argument) { arguments.add(argument); - return this; + return getThis(); } public List getArguments() { return arguments; } + public T executes(Runnable executor) { + this.executor = executor; + return getThis(); + } + + public Runnable getExecutor() { + return executor; + } + public abstract CommandNode build(); } diff --git a/src/main/java/net/minecraft/commands/builder/CommandBuilder.java b/src/main/java/net/minecraft/commands/builder/CommandBuilder.java deleted file mode 100644 index a200951..0000000 --- a/src/main/java/net/minecraft/commands/builder/CommandBuilder.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.minecraft.commands.builder; - -import com.google.common.collect.Lists; -import net.minecraft.commands.tree.LiteralCommandNode; - -import java.util.List; - -public class CommandBuilder { - private final String name; - private final List arguments = Lists.newArrayList(); - private Runnable executor; - - protected CommandBuilder(String name) { - this.name = name; - } - - public static CommandBuilder command(String name) { - return new CommandBuilder(name); - } - - public String getName() { - return name; - } - - public CommandBuilder executes(Runnable executor) { - this.executor = executor; - return this; - } - - public Runnable getExecutor() { - return executor; - } - - public CommandBuilder then(ArgumentBuilder argument) { - arguments.add(argument); - return this; - } - - public List getArguments() { - return arguments; - } - - public LiteralCommandNode build() { - LiteralCommandNode result = new LiteralCommandNode(getName(), getExecutor()); - - for (ArgumentBuilder argument : arguments) { - result.addChild(argument.build()); - } - - return result; - } -} diff --git a/src/main/java/net/minecraft/commands/builder/LiteralArgumentBuilder.java b/src/main/java/net/minecraft/commands/builder/LiteralArgumentBuilder.java new file mode 100644 index 0000000..05ce82d --- /dev/null +++ b/src/main/java/net/minecraft/commands/builder/LiteralArgumentBuilder.java @@ -0,0 +1,35 @@ +package net.minecraft.commands.builder; + +import net.minecraft.commands.tree.LiteralCommandNode; + +public class LiteralArgumentBuilder extends ArgumentBuilder { + private final String literal; + + protected LiteralArgumentBuilder(String literal) { + this.literal = literal; + } + + public static LiteralArgumentBuilder literal(String name) { + return new LiteralArgumentBuilder(name); + } + + @Override + protected LiteralArgumentBuilder getThis() { + return this; + } + + public String getLiteral() { + return literal; + } + + @Override + public LiteralCommandNode build() { + LiteralCommandNode result = new LiteralCommandNode(getLiteral(), getExecutor()); + + for (ArgumentBuilder argument : getArguments()) { + result.addChild(argument.build()); + } + + return result; + } +} diff --git a/src/main/java/net/minecraft/commands/builder/RequiredArgumentBuilder.java b/src/main/java/net/minecraft/commands/builder/RequiredArgumentBuilder.java index 6392f46..651ddd5 100644 --- a/src/main/java/net/minecraft/commands/builder/RequiredArgumentBuilder.java +++ b/src/main/java/net/minecraft/commands/builder/RequiredArgumentBuilder.java @@ -3,7 +3,7 @@ package net.minecraft.commands.builder; import net.minecraft.commands.arguments.CommandArgumentType; import net.minecraft.commands.tree.ArgumentCommandNode; -public class RequiredArgumentBuilder extends ArgumentBuilder { +public class RequiredArgumentBuilder extends ArgumentBuilder> { private final String name; private final CommandArgumentType type; @@ -16,6 +16,11 @@ public class RequiredArgumentBuilder extends ArgumentBuilder { return new RequiredArgumentBuilder(name, type); } + @Override + protected RequiredArgumentBuilder getThis() { + return this; + } + public CommandArgumentType getType() { return type; } diff --git a/src/main/test/net/minecraft/commands/CommandDispatcherTest.java b/src/main/test/net/minecraft/commands/CommandDispatcherTest.java index dcad9f5..a4d13bb 100644 --- a/src/main/test/net/minecraft/commands/CommandDispatcherTest.java +++ b/src/main/test/net/minecraft/commands/CommandDispatcherTest.java @@ -7,7 +7,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import static net.minecraft.commands.builder.CommandBuilder.command; +import static net.minecraft.commands.builder.LiteralArgumentBuilder.literal; import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) @@ -22,13 +22,13 @@ public class CommandDispatcherTest { @Test(expected = IllegalArgumentException.class) public void testDuplicateCommand() throws Exception { - subject.register(command("foo").executes(runnable)); - subject.register(command("foo").executes(runnable)); + subject.register(literal("foo").executes(runnable)); + subject.register(literal("foo").executes(runnable)); } @Test public void testCreateAndExecuteCommand() throws Exception { - subject.register(command("foo").executes(runnable)); + subject.register(literal("foo").executes(runnable)); subject.execute("foo"); verify(runnable).run(); diff --git a/src/main/test/net/minecraft/commands/builder/ArgumentBuilderTest.java b/src/main/test/net/minecraft/commands/builder/ArgumentBuilderTest.java index d10efd4..f96361c 100644 --- a/src/main/test/net/minecraft/commands/builder/ArgumentBuilderTest.java +++ b/src/main/test/net/minecraft/commands/builder/ArgumentBuilderTest.java @@ -11,16 +11,11 @@ import static org.hamcrest.Matchers.hasSize; import static org.junit.Assert.assertThat; public class ArgumentBuilderTest { - ArgumentBuilder builder; + TestableArgumentBuilder builder; @Before public void setUp() throws Exception { - builder = new ArgumentBuilder() { - @Override - public CommandNode build() { - return null; - } - }; + builder = new TestableArgumentBuilder(); } @Test @@ -32,4 +27,16 @@ public class ArgumentBuilderTest { assertThat(builder.getArguments(), hasSize(1)); assertThat(builder.getArguments(), hasItems((ArgumentBuilder) argument)); } + + private static class TestableArgumentBuilder extends ArgumentBuilder { + @Override + protected TestableArgumentBuilder getThis() { + return this; + } + + @Override + public CommandNode build() { + return null; + } + } } \ No newline at end of file diff --git a/src/main/test/net/minecraft/commands/builder/CommandBuilderTest.java b/src/main/test/net/minecraft/commands/builder/LiteralArgumentBuilderTest.java similarity index 66% rename from src/main/test/net/minecraft/commands/builder/CommandBuilderTest.java rename to src/main/test/net/minecraft/commands/builder/LiteralArgumentBuilderTest.java index aefbbce..a9cf096 100644 --- a/src/main/test/net/minecraft/commands/builder/CommandBuilderTest.java +++ b/src/main/test/net/minecraft/commands/builder/LiteralArgumentBuilderTest.java @@ -6,27 +6,16 @@ import org.junit.Test; import static net.minecraft.commands.arguments.IntegerArgumentType.integer; import static net.minecraft.commands.builder.RequiredArgumentBuilder.argument; -import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; -public class CommandBuilderTest { - CommandBuilder builder; +public class LiteralArgumentBuilderTest { + LiteralArgumentBuilder builder; @Before public void setUp() throws Exception { - builder = new CommandBuilder("foo"); - } - - @Test - public void testArguments() throws Exception { - RequiredArgumentBuilder argument = argument("bar", integer()); - - builder.then(argument); - - assertThat(builder.getArguments(), hasSize(1)); - assertThat(builder.getArguments(), hasItems((ArgumentBuilder) argument)); + builder = new LiteralArgumentBuilder("foo"); } @Test diff --git a/src/main/test/net/minecraft/commands/tree/LiteralCommandNodeTest.java b/src/main/test/net/minecraft/commands/tree/LiteralCommandNodeTest.java index 0fa1ef5..f49f714 100644 --- a/src/main/test/net/minecraft/commands/tree/LiteralCommandNodeTest.java +++ b/src/main/test/net/minecraft/commands/tree/LiteralCommandNodeTest.java @@ -5,7 +5,7 @@ import org.junit.Before; import org.junit.Test; import static net.minecraft.commands.arguments.IntegerArgumentType.integer; -import static net.minecraft.commands.builder.CommandBuilder.command; +import static net.minecraft.commands.builder.LiteralArgumentBuilder.literal; import static net.minecraft.commands.builder.RequiredArgumentBuilder.argument; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; @@ -15,7 +15,7 @@ public class LiteralCommandNodeTest { @Before public void setUp() throws Exception { - node = command("foo").build(); + node = literal("foo").build(); } @Test