diff --git a/src/main/java/org/ultramine/commands/CommandContext.java b/src/main/java/org/ultramine/commands/CommandContext.java new file mode 100644 index 0000000..9414a4a --- /dev/null +++ b/src/main/java/org/ultramine/commands/CommandContext.java @@ -0,0 +1,115 @@ +package org.ultramine.commands; + +import net.minecraft.block.Block; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.util.IChatComponent; + +public class CommandContext +{ + private ICommandSender sender; + private String[] args; + + public CommandContext(ICommandSender sender, String[] args) + { + this.sender = sender; + this.args = args; + } + + public ICommandSender getSender() + { + return sender; + } + + public String[] getArgs() + { + return args; + } + + public int getInt(int argNum) + { + return CommandBase.parseInt(sender, args[argNum]); + } + + public int getInt(int argNum, int minBound) + { + return CommandBase.parseIntWithMin(sender, args[argNum], minBound); + } + + public int getInt(int argNum, int minBound, int maxBound) + { + return CommandBase.parseIntBounded(sender, args[argNum], minBound, maxBound); + } + + public double getDouble(int argNum) + { + return CommandBase.parseDouble(sender, args[argNum]); + } + + public double getDouble(int argNum, double minBound) + { + return CommandBase.parseDoubleWithMin(sender, args[argNum], minBound); + } + + public double getDouble(int argNum, double minBound, double maxBound) + { + return CommandBase.parseDoubleBounded(sender, args[argNum], minBound, maxBound); + } + + public boolean getBoolean(int argNum) + { + return CommandBase.parseBoolean(sender, args[argNum]); + } + + public String getString(int argNum) + { + return args[argNum]; + } + + public EntityPlayerMP getSenderAsPlayer() + { + return CommandBase.getCommandSenderAsPlayer(sender); + } + + public EntityPlayerMP getPlayer(int argNum) + { + return CommandBase.getPlayer(sender, args[argNum]); + } + + public IChatComponent getChatComponent(int startArgNum, boolean emphasizePlayers) + { + return CommandBase.func_147176_a(sender, args, startArgNum, emphasizePlayers); + } + + public String getJoined(int startArgNum) + { + return CommandBase.func_82360_a(sender, args, startArgNum); + } + + public double getCoordinate(int argNum, double original) + { + return CommandBase.func_110666_a(sender, original, args[argNum]); + } + + public double getCoordinate(int argNum, double original, int minBound, int maxBound) + { + return CommandBase.func_110665_a(sender, original, args[argNum], minBound, maxBound); + } + + public Item getItem(int argNum) + { + return CommandBase.getItemByText(sender, args[argNum]); + } + + public Block getBlock(int argNum) + { + return CommandBase.getBlockByText(sender, args[argNum]); + } + + public void notifyAdmins(String messageKey, Object... messageArgs) + { + CommandBase.notifyAdmins(sender, messageKey, messageArgs); + } +} diff --git a/src/main/java/org/ultramine/commands/MethodBasedCommand.java b/src/main/java/org/ultramine/commands/MethodBasedCommand.java new file mode 100644 index 0000000..f8bc0c7 --- /dev/null +++ b/src/main/java/org/ultramine/commands/MethodBasedCommand.java @@ -0,0 +1,84 @@ +package org.ultramine.commands; + +import net.minecraft.command.CommandNotFoundException; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.ultramine.commands.completion.CommandCompletionHandler; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; + +public class MethodBasedCommand implements IExtendedCommand +{ + private static Logger logger = LogManager.getLogger(); + + private String name; + private String usage; + private List aliases; + private Method method; + private CommandCompletionHandler completionHandler; + + @Override + public String getCommandName() + { + return name; + } + + @Override + public String getCommandUsage(ICommandSender var1) + { + return usage; + } + + @Override + public List getCommandAliases() + { + return aliases; + } + + @Override + public void processCommand(ICommandSender var1, String[] var2) + { + try + { + method.invoke(null, new CommandContext(var1, var2)); + } + catch (IllegalAccessException e) + { + logger.error("Error while invoking method for command " + name, e); + throw new CommandNotFoundException(); + } + catch (InvocationTargetException e) + { + logger.error("Error while invoking method for command " + name, e); + throw new CommandNotFoundException(); + } + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender var1) + { + return false; + } + + @Override + public List addTabCompletionOptions(ICommandSender var1, String[] var2) + { + return completionHandler.getCompletionOptions(var2); + } + + @Override + public boolean isUsernameIndex(String[] var1, int var2) + { + return completionHandler.isUsernameIndex(var2); + } + + @Override + public int compareTo(Object o) + { + return getCommandName().compareTo(((ICommand)o).getCommandName()); + } +} diff --git a/src/main/java/org/ultramine/commands/VanillaCommandWrapper.java b/src/main/java/org/ultramine/commands/VanillaCommandWrapper.java new file mode 100644 index 0000000..0dee3a8 --- /dev/null +++ b/src/main/java/org/ultramine/commands/VanillaCommandWrapper.java @@ -0,0 +1,64 @@ +package org.ultramine.commands; + +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; + +import java.util.List; + +public class VanillaCommandWrapper implements IExtendedCommand +{ + private ICommand wrappedCommand; + + public VanillaCommandWrapper(ICommand wrappedCommand) + { + this.wrappedCommand = wrappedCommand; + } + + @Override + public String getCommandName() + { + return wrappedCommand.getCommandName(); + } + + @Override + public String getCommandUsage(ICommandSender var1) + { + return wrappedCommand.getCommandUsage(var1); + } + + @Override + public List getCommandAliases() + { + return wrappedCommand.getCommandAliases(); + } + + @Override + public void processCommand(ICommandSender var1, String[] var2) + { + wrappedCommand.processCommand(var1, var2); + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender var1) + { + return wrappedCommand.canCommandSenderUseCommand(var1); + } + + @Override + public List addTabCompletionOptions(ICommandSender var1, String[] var2) + { + return wrappedCommand.addTabCompletionOptions(var1, var2); + } + + @Override + public boolean isUsernameIndex(String[] var1, int var2) + { + return wrappedCommand.isUsernameIndex(var1, var2); + } + + @Override + public int compareTo(Object o) + { + return wrappedCommand.compareTo(o); + } +}