diff --git a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java index 8795688..19756d0 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java +++ b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java @@ -645,34 +645,36 @@ public class MineTweakerImplementationAPI { MineTweakerAPI.tweaker.rollback(); if (MineTweakerAPI.server != null) { - server.addCommand("minetweaker", "", new String[]{"mt"}, new ICommandFunction() { - @Override - public void execute(String[] arguments, IPlayer player) { - if (arguments.length == 0) { - player.sendChat("Please provide a command. Use /mt help for more info."); - } else if (arguments[0].equals("help")) { - String[] keys = minetweakerCommands.keySet().toArray(new String[minetweakerCommands.size()]); - Arrays.sort(keys); - for (String key : keys) { - for (String helpMessage : minetweakerCommands.get(key).description) { - player.sendChat(helpMessage); + if (!MineTweakerAPI.server.isCommandAdded("minetweaker")) { + server.addCommand("minetweaker", "", new String[]{"mt"}, new ICommandFunction() { + @Override + public void execute(String[] arguments, IPlayer player) { + if (arguments.length == 0) { + player.sendChat("Please provide a command. Use /mt help for more info."); + } else if (arguments[0].equals("help")) { + String[] keys = minetweakerCommands.keySet().toArray(new String[minetweakerCommands.size()]); + Arrays.sort(keys); + for (String key : keys) { + for (String helpMessage : minetweakerCommands.get(key).description) { + player.sendChat(helpMessage); + } + } + } else { + MineTweakerCommand command = minetweakerCommands.get(arguments[0]); + if (command == null) { + player.sendChat("No such minetweaker command available"); + } else { + command.function.execute(Arrays.copyOfRange(arguments, 1, arguments.length), player); } } - } else { - MineTweakerCommand command = minetweakerCommands.get(arguments[0]); - if (command == null) { - player.sendChat("No such minetweaker command available"); - } else { - command.function.execute(Arrays.copyOfRange(arguments, 1, arguments.length), player); - } } - } - }, new ICommandValidator() { - @Override - public boolean canExecute(IPlayer player) { - return server.isOp(player); - } - }, null); + }, new ICommandValidator() { + @Override + public boolean canExecute(IPlayer player) { + return server.isOp(player); + } + }, null); + } } ONRELOAD.publish(new ReloadEvent()); @@ -724,7 +726,6 @@ public class MineTweakerImplementationAPI { private static class AddMineTweakerCommandAction implements IUndoableAction { private final MineTweakerCommand command; - private boolean added; public AddMineTweakerCommandAction(MineTweakerCommand command) { this.command = command; @@ -734,32 +735,30 @@ public class MineTweakerImplementationAPI { public void apply() { if (!minetweakerCommands.containsKey(command.name)) { minetweakerCommands.put(command.name, command); - added = true; } else { - added = false; } } @Override public boolean canUndo() { - return true; + return false; } @Override public void undo() { - if (added) { - minetweakerCommands.remove(command.name); - } } @Override public String describe() { - return "Adding minetweaker command " + command.name; + if (!minetweakerCommands.containsKey(command.name)) { + return "Adding minetweaker command " + command.name; + } + return ""; } @Override public String describeUndo() { - return "Removing minetweaker command " + command.name; + return ""; } @Override diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/server/IServer.java b/MineTweaker3-API/src/main/java/minetweaker/api/server/IServer.java index 68eef56..309949f 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/server/IServer.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/server/IServer.java @@ -30,9 +30,6 @@ public interface IServer { @Optional ICommandValidator validator, @Optional ICommandTabCompletion completion); - @ZenMethod - public void removeCommand(String name); - @ZenMethod public void addMineTweakerCommand(String name, String[] usage, ICommandFunction function); @@ -44,4 +41,7 @@ public interface IServer { @ZenMethod public IEventHandle onPlayerLoggedOut(IEventHandler ev); + + @ZenMethod + public boolean isCommandAdded(String name); } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc19/server/MCServer.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc19/server/MCServer.java index 6e016a3..8026319 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc19/server/MCServer.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc19/server/MCServer.java @@ -6,9 +6,6 @@ package minetweaker.mc19.server; -import java.util.Arrays; -import java.util.List; - import minetweaker.IUndoableAction; import minetweaker.MineTweakerAPI; import minetweaker.api.minecraft.MineTweakerMC; @@ -27,8 +24,10 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.dedicated.DedicatedServer; import net.minecraft.server.management.UserListOps; +import java.util.Arrays; +import java.util.List; + /** - * * @author Stan */ public class MCServer extends AbstractServer { @@ -44,16 +43,6 @@ public class MCServer extends AbstractServer { MineTweakerAPI.apply(new AddCommandAction(command)); } - @Override - public void removeCommand(String name) { - ICommand command = (ICommand) ((CommandHandler) server.getCommandManager()).getCommands().get(name); - if (command == null) { - MineTweakerAPI.logWarning("No such command: " + name); - } else { - MineTweakerAPI.apply(new RemoveCommandAction(command)); - } - } - @Override public boolean isOp(IPlayer player) { if (player == ServerPlayer.INSTANCE) @@ -67,6 +56,11 @@ public class MCServer extends AbstractServer { } } + @Override + public boolean isCommandAdded(String name) { + return MinecraftServer.getServer().getCommandManager().getCommands().containsKey(name); + } + private static IPlayer getPlayer(ICommandSender commandSender) { if (commandSender instanceof EntityPlayer) { return MineTweakerMC.getIPlayer((EntityPlayer) commandSender); @@ -81,17 +75,6 @@ public class MCServer extends AbstractServer { } } - private static void removeCommand(ICommand command) { - CommandHandler ch = (CommandHandler) MinecraftServer.getServer().getCommandManager(); - ch.getCommands().remove(command.getCommandName()); - - if (command.getCommandAliases() != null) { - for (String alias : (List) command.getCommandAliases()) { - ch.getCommands().remove(alias); - } - } - } - private class MCCommand implements ICommand { private final String name; private final String usage; @@ -164,11 +147,11 @@ public class MCServer extends AbstractServer { public AddCommandAction(ICommand command) { this.command = command; } - @Override public void apply() { CommandHandler ch = (CommandHandler) MinecraftServer.getServer().getCommandManager(); - ch.registerCommand(command); + if (!ch.getCommands().containsValue(command)) + ch.registerCommand(command); } @Override @@ -178,56 +161,20 @@ public class MCServer extends AbstractServer { @Override public void undo() { - removeCommand(command); + } @Override public String describe() { - return "Adding command " + command.getCommandName(); - } - - @Override - public String describeUndo() { - return "Removing command " + command.getCommandName(); - } - - @Override - public Object getOverrideKey() { - return null; - } - } - - private class RemoveCommandAction implements IUndoableAction { - private final ICommand command; - - public RemoveCommandAction(ICommand command) { - this.command = command; - } - - @Override - public void apply() { - removeCommand(command); - } - - @Override - public boolean canUndo() { - return true; - } - - @Override - public void undo() { CommandHandler ch = (CommandHandler) MinecraftServer.getServer().getCommandManager(); - ch.registerCommand(command); - } - - @Override - public String describe() { - return "Adding command " + command.getCommandName(); + if (!ch.getCommands().containsValue(command)) + return "Adding command " + command.getCommandName(); + return ""; } @Override public String describeUndo() { - return "Removing command " + command.getCommandName(); + return ""; } @Override @@ -235,4 +182,5 @@ public class MCServer extends AbstractServer { return null; } } + } diff --git a/MineTweaker3-MC19-Main/src/main/java/minetweaker/mc19/brackets/ItemBracketHandler.java b/MineTweaker3-MC19-Main/src/main/java/minetweaker/mc19/brackets/ItemBracketHandler.java index 7106bb2..51733ea 100644 --- a/MineTweaker3-MC19-Main/src/main/java/minetweaker/mc19/brackets/ItemBracketHandler.java +++ b/MineTweaker3-MC19-Main/src/main/java/minetweaker/mc19/brackets/ItemBracketHandler.java @@ -70,15 +70,10 @@ public class ItemBracketHandler implements IBracketHandler{ @Override public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens){ // any symbol - System.out.println("resolving"); if(tokens.size() == 1 && tokens.get(0).getValue().equals("*")){ return symbolAny; } - for(Token tok : tokens){ - System.out.println(tok.getValue()); - } - // detect special cases: // item: at the start means item-specific syntax // :xxx with xxx an integer means sub-item syntax diff --git a/MineTweaker3-MC19-Main/src/main/java/minetweaker/mc19/server/MCServer.java b/MineTweaker3-MC19-Main/src/main/java/minetweaker/mc19/server/MCServer.java index d5bc91b..d1b39f1 100644 --- a/MineTweaker3-MC19-Main/src/main/java/minetweaker/mc19/server/MCServer.java +++ b/MineTweaker3-MC19-Main/src/main/java/minetweaker/mc19/server/MCServer.java @@ -33,71 +33,55 @@ import java.util.List; /** * @author Stan */ -public class MCServer extends AbstractServer{ +public class MCServer extends AbstractServer { private final MinecraftServer server; - public MCServer(MinecraftServer server){ + public MCServer(MinecraftServer server) { this.server = server; } - private static IPlayer getPlayer(ICommandSender commandSender){ - if(commandSender instanceof EntityPlayer){ + private static IPlayer getPlayer(ICommandSender commandSender) { + if (commandSender instanceof EntityPlayer) { return MineTweakerMC.getIPlayer((EntityPlayer) commandSender); - }else if(commandSender instanceof DedicatedServer){ + } else if (commandSender instanceof DedicatedServer) { return ServerPlayer.INSTANCE; - }else if(commandSender instanceof RConConsoleSource){ + } else if (commandSender instanceof RConConsoleSource) { return new RconPlayer(commandSender); - }else{ + } else { System.out.println("Unsupported command sender: " + commandSender); System.out.println("player name: " + commandSender.getName()); return null; } } - private static void removeCommand(ICommand command){ - CommandHandler ch = (CommandHandler) MineTweakerMod.server.getCommandManager(); - ch.getCommands().remove(command.getCommandName()); - - if(command.getCommandAliases() != null){ - for(String alias : command.getCommandAliases()){ - ch.getCommands().remove(alias); - } - } - } - @Override - public void addCommand(String name, String usage, String[] aliases, ICommandFunction function, ICommandValidator validator, ICommandTabCompletion completion){ + public void addCommand(String name, String usage, String[] aliases, ICommandFunction function, ICommandValidator validator, ICommandTabCompletion completion) { ICommand command = new MCCommand(name, usage, aliases, function, validator, completion); MineTweakerAPI.apply(new AddCommandAction(command)); } @Override - public void removeCommand(String name){ - ICommand command = server.getCommandManager().getCommands().get(name); - if(command == null){ - MineTweakerAPI.logWarning("No such command: " + name); - }else{ - MineTweakerAPI.apply(new RemoveCommandAction(command)); + public boolean isOp(IPlayer player) { + if (player == ServerPlayer.INSTANCE) + return true; + + UserListOps ops = MineTweakerMod.server.getPlayerList().getOppedPlayers(); + if (server.isDedicatedServer() && ops != null) { + //TODO figure if this is correct + // return ops.func_152690_d() || ops.func_152700_a(player.getName()) != null || player instanceof RconPlayer; + return ops.isEmpty() || ops.getGameProfileFromName(player.getName()) != null || player instanceof RconPlayer; + } else { + return true; } } @Override - public boolean isOp(IPlayer player){ - if(player == ServerPlayer.INSTANCE) - return true; - - UserListOps ops = MineTweakerMod.server.getPlayerList().getOppedPlayers(); - if(server.isDedicatedServer() && ops != null){ - //TODO figure if this is correct - // return ops.func_152690_d() || ops.func_152700_a(player.getName()) != null || player instanceof RconPlayer; - return ops.isEmpty() || ops.getGameProfileFromName(player.getName()) != null || player instanceof RconPlayer; - }else{ - return true; - } + public boolean isCommandAdded(String name) { + return MineTweakerMod.server.getCommandManager().getCommands().containsKey(name); } - private class MCCommand implements ICommand{ + private class MCCommand implements ICommand { private final String name; private final String usage; private final List aliases; @@ -105,7 +89,7 @@ public class MCServer extends AbstractServer{ private final ICommandValidator validator; private final ICommandTabCompletion completion; - public MCCommand(String name, String usage, String[] aliases, ICommandFunction function, ICommandValidator validator, ICommandTabCompletion completion){ + public MCCommand(String name, String usage, String[] aliases, ICommandFunction function, ICommandValidator validator, ICommandTabCompletion completion) { this.name = name; this.usage = usage; this.aliases = Arrays.asList(aliases); @@ -115,129 +99,95 @@ public class MCServer extends AbstractServer{ } @Override - public String getCommandName(){ + public String getCommandName() { return name; } @Override - public String getCommandUsage(ICommandSender var1){ + public String getCommandUsage(ICommandSender var1) { return usage; } @Override - public List getCommandAliases(){ + public List getCommandAliases() { return aliases; } @Override - public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException{ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { function.execute(args, getPlayer(sender)); } @Override - public boolean checkPermission(MinecraftServer server, ICommandSender sender){ - if(validator == null){ + public boolean checkPermission(MinecraftServer server, ICommandSender sender) { + if (validator == null) { return true; - }else{ + } else { return validator.canExecute(getPlayer(sender)); } } @Override - public List getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos){ - if(completion != null){ + public List getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) { + if (completion != null) { return Arrays.asList(completion.getTabCompletionOptions(args, getPlayer(sender))); - }else{ + } else { return null; } } @Override - public boolean isUsernameIndex(String[] var1, int var2){ + public boolean isUsernameIndex(String[] var1, int var2) { return false; } @Override - public int compareTo(ICommand o){ + public int compareTo(ICommand o) { return 0; } } - private class AddCommandAction implements IUndoableAction{ + private class AddCommandAction implements IUndoableAction { private final ICommand command; - public AddCommandAction(ICommand command){ + public AddCommandAction(ICommand command) { this.command = command; } @Override - public void apply(){ + public void apply() { CommandHandler ch = (CommandHandler) MineTweakerMod.server.getCommandManager(); - ch.registerCommand(command); + if (!ch.getCommands().containsValue(command)) + ch.registerCommand(command); } @Override - public boolean canUndo(){ + public boolean canUndo() { return true; } @Override - public void undo(){ - removeCommand(command); + public void undo() { + } @Override - public String describe(){ - return "Adding command " + command.getCommandName(); - } - - @Override - public String describeUndo(){ - return "Removing command " + command.getCommandName(); - } - - @Override - public Object getOverrideKey(){ - return null; - } - } - - private class RemoveCommandAction implements IUndoableAction{ - private final ICommand command; - - public RemoveCommandAction(ICommand command){ - this.command = command; - } - - @Override - public void apply(){ - removeCommand(command); - } - - @Override - public boolean canUndo(){ - return true; - } - - @Override - public void undo(){ + public String describe() { CommandHandler ch = (CommandHandler) MineTweakerMod.server.getCommandManager(); - ch.registerCommand(command); + if (!ch.getCommands().containsValue(command)) + return "Adding command " + command.getCommandName(); + return ""; } @Override - public String describe(){ - return "Adding command " + command.getCommandName(); + public String describeUndo() { + return ""; } @Override - public String describeUndo(){ - return "Removing command " + command.getCommandName(); - } - - @Override - public Object getOverrideKey(){ + public Object getOverrideKey() { return null; } } + } diff --git a/MineTweaker3-MC19-Mod-JEI/src/main/java/minetweaker/mods/jei/JEI.java b/MineTweaker3-MC19-Mod-JEI/src/main/java/minetweaker/mods/jei/JEI.java index fe8e203..6ef8222 100644 --- a/MineTweaker3-MC19-Mod-JEI/src/main/java/minetweaker/mods/jei/JEI.java +++ b/MineTweaker3-MC19-Mod-JEI/src/main/java/minetweaker/mods/jei/JEI.java @@ -2,9 +2,7 @@ package minetweaker.mods.jei; import minetweaker.IUndoableAction; import minetweaker.MineTweakerAPI; -import minetweaker.MineTweakerImplementationAPI; import minetweaker.api.item.IItemStack; -import minetweaker.util.IEventHandler; import stanhebben.zenscript.annotations.NotNull; import stanhebben.zenscript.annotations.ZenClass; import stanhebben.zenscript.annotations.ZenMethod; @@ -14,12 +12,12 @@ import static minetweaker.mods.jei.JEIAddonPlugin.jeiHelpers; /** * MineTweaker JEI support. - * + * * Enables hiding JEI items as well as adding new item stacks. These item stacks * can then show a custom message or contain NBT data. Can be used to show a * custom message or lore with certain items, or to provide spawnable items with * specific NBT tags. - * + * * @author Stan Hebben */ @ZenClass("mods.jei.JEI") @@ -28,7 +26,7 @@ public class JEI { /** * Hides a specific item in JEI. Will take into account metadata values, if * any. - * + * * @param item * item to be hidden */