diff --git a/src/main/java/org/ultramine/commands/CommandContext.java b/src/main/java/org/ultramine/commands/CommandContext.java index 951c82e..0ef9b91 100644 --- a/src/main/java/org/ultramine/commands/CommandContext.java +++ b/src/main/java/org/ultramine/commands/CommandContext.java @@ -72,6 +72,11 @@ return actionName; } + public boolean actionIs(String action) + { + return actionName.equalsIgnoreCase(action); + } + public void doAction() { if (actionHandler != null) @@ -159,11 +164,6 @@ this.last = false; } - private String value() - { - return value; - } - private String[] args() { if (num >= 0) @@ -182,7 +182,7 @@ if (last) return CommandBase.func_82360_a(sender, args(), num()); else - return value(); + return value; } public Argument[] asArray() @@ -198,42 +198,42 @@ public int asInt() { - return CommandBase.parseInt(sender, value()); + return CommandBase.parseInt(sender, value); } public int asInt(int minBound) { - return CommandBase.parseIntWithMin(sender, value(), minBound); + return CommandBase.parseIntWithMin(sender, value, minBound); } public int asInt(int minBound, int maxBound) { - return CommandBase.parseIntBounded(sender, value(), minBound, maxBound); + return CommandBase.parseIntBounded(sender, value, minBound, maxBound); } public double asDouble() { - return CommandBase.parseDouble(sender, value()); + return CommandBase.parseDouble(sender, value); } public double asDouble(double minBound) { - return CommandBase.parseDoubleWithMin(sender, value(), minBound); + return CommandBase.parseDoubleWithMin(sender, value, minBound); } public double asDouble(double minBound, double maxBound) { - return CommandBase.parseDoubleBounded(sender, value(), minBound, maxBound); + return CommandBase.parseDoubleBounded(sender, value, minBound, maxBound); } public boolean asBoolean() { - return CommandBase.parseBoolean(sender, value()); + return CommandBase.parseBoolean(sender, value); } public EntityPlayerMP asPlayer() { - return CommandBase.getPlayer(sender, value()); + return CommandBase.getPlayer(sender, value); } public WorldServer asWorld() @@ -251,22 +251,22 @@ public double asCoordinate(double original) { - return CommandBase.func_110666_a(sender, original, value()); + return CommandBase.func_110666_a(sender, original, value); } public double asCoordinate(double original, int minBound, int maxBound) { - return CommandBase.func_110665_a(sender, original, value(), minBound, maxBound); + return CommandBase.func_110665_a(sender, original, value, minBound, maxBound); } public Item asItem() { - return CommandBase.getItemByText(sender, value()); + return CommandBase.getItemByText(sender, value); } public Block asBlock() { - return CommandBase.getBlockByText(sender, value()); + return CommandBase.getBlockByText(sender, value); } } diff --git a/src/main/java/org/ultramine/commands/HandlerBasedCommand.java b/src/main/java/org/ultramine/commands/HandlerBasedCommand.java index 27e55b6..b8dd50c 100644 --- a/src/main/java/org/ultramine/commands/HandlerBasedCommand.java +++ b/src/main/java/org/ultramine/commands/HandlerBasedCommand.java @@ -106,9 +106,13 @@ List result = null; Set dupChecker = null; String[] tail = ArrayUtils.remove(var2, var2.length - 1); + int minArgsCount = 1; for (ArgumentsPattern argumentsPattern : argumentsPatterns) { + if (argumentsPattern.getArgumentsCount() < minArgsCount) + continue; + ArgumentsPattern.MatchResult currentMatch = argumentsPattern.partialMatch(tail); if (currentMatch != ArgumentsPattern.MatchResult.NOT) @@ -139,7 +143,7 @@ } if (currentMatch == ArgumentsPattern.MatchResult.FULLY) - break; + minArgsCount = argumentsPattern.getArgumentsCount() + 1; } } return result; diff --git a/src/main/java/org/ultramine/commands/basic/TeleportCommands.java b/src/main/java/org/ultramine/commands/basic/TeleportCommands.java index b84a5a5..837991e 100644 --- a/src/main/java/org/ultramine/commands/basic/TeleportCommands.java +++ b/src/main/java/org/ultramine/commands/basic/TeleportCommands.java @@ -28,7 +28,9 @@ EntityPlayerMP target = context.contains("target") ? context.get("target").asPlayer() : context.getSenderAsPlayer(); if(context.contains("dst")) { + EntityPlayerMP dst = context.get("dst").asPlayer(); Teleporter.tpNow(target, context.get("dst").asPlayer()); + context.notifyAdmins("command.tp.success.player", target.getCommandSenderName(), dst.getCommandSenderName()); } else if(context.contains("x") && context.contains("y") && context.contains("z")) { @@ -37,6 +39,8 @@ double y = context.get("y").asCoordinate(target.posY); double z = context.get("z").asCoordinate(target.posZ); Teleporter.tpNow(target, world.provider.dimensionId, x, y, z); + context.notifyAdmins("command.tp.success.coordinate", + target.getCommandSenderName(), world.getWorldInfo().getWorldName(), x, y, z); } } } diff --git a/src/main/java/org/ultramine/commands/syntax/ArgumentsPattern.java b/src/main/java/org/ultramine/commands/syntax/ArgumentsPattern.java index 5357fbb..b6ad369 100644 --- a/src/main/java/org/ultramine/commands/syntax/ArgumentsPattern.java +++ b/src/main/java/org/ultramine/commands/syntax/ArgumentsPattern.java @@ -95,6 +95,11 @@ return builder.toString(); } + public int getArgumentsCount() + { + return arguments.size(); + } + public static class Builder { private ArgumentsPattern pattern; diff --git a/src/main/java/org/ultramine/commands/syntax/ArgumentsPatternParser.java b/src/main/java/org/ultramine/commands/syntax/ArgumentsPatternParser.java index 9b43423..f89108c 100644 --- a/src/main/java/org/ultramine/commands/syntax/ArgumentsPatternParser.java +++ b/src/main/java/org/ultramine/commands/syntax/ArgumentsPatternParser.java @@ -44,9 +44,9 @@ argumentName = handlerName; String[] params = StringUtils.split(matcher.group(4)); - HandlerBasedArgument argument = new HandlerBasedArgument(argumentName, params); - argument.setValidationHandler(validationHandlers.get(argumentName)); - argument.setCompletionHandler(completionHandlers.get(argumentName)); + HandlerBasedArgument argument = new HandlerBasedArgument(handlerName, params); + argument.setValidationHandler(validationHandlers.get(handlerName)); + argument.setCompletionHandler(completionHandlers.get(handlerName)); arguments.add(argument); builder.addArgument(argumentName, argument); } @@ -112,8 +112,8 @@ { for (HandlerBasedArgument argument : arguments) { - argument.setCompletionHandler(completionHandlers.get(argument.getName())); - argument.setValidationHandler(validationHandlers.get(argument.getName())); + argument.setCompletionHandler(completionHandlers.get(argument.getHandlerName())); + argument.setValidationHandler(validationHandlers.get(argument.getHandlerName())); } } diff --git a/src/main/java/org/ultramine/commands/syntax/DefaultCompleters.java b/src/main/java/org/ultramine/commands/syntax/DefaultCompleters.java index 6745359..dd51dcb 100644 --- a/src/main/java/org/ultramine/commands/syntax/DefaultCompleters.java +++ b/src/main/java/org/ultramine/commands/syntax/DefaultCompleters.java @@ -5,6 +5,7 @@ import net.minecraft.entity.EntityList; import net.minecraft.item.Item; import net.minecraft.server.MinecraftServer; +import org.ultramine.server.util.BasicTypeParser; import java.util.ArrayList; import java.util.List; @@ -47,6 +48,12 @@ return filterCollection(val, MinecraftServer.getServer().getMultiWorld().getAllNames()); } + @ArgumentValidator("world") + public static boolean world_validator(String val, String[] args) + { + return BasicTypeParser.isInt(val) || MinecraftServer.getServer().getMultiWorld().getAllNames().contains(val); + } + public static List filterArray(String filter, String[] strings) { List result = new ArrayList(); diff --git a/src/main/java/org/ultramine/commands/syntax/HandlerBasedArgument.java b/src/main/java/org/ultramine/commands/syntax/HandlerBasedArgument.java index 6c5faaf..df453bb 100644 --- a/src/main/java/org/ultramine/commands/syntax/HandlerBasedArgument.java +++ b/src/main/java/org/ultramine/commands/syntax/HandlerBasedArgument.java @@ -48,7 +48,7 @@ this.validationHandler = validationHandler; } - public String getName() + public String getHandlerName() { return name; } diff --git a/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java b/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java index 304b49f..744a52f 100644 --- a/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java +++ b/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java @@ -1,9 +1,8 @@ package org.ultramine.permission.commands; -import net.minecraft.command.WrongUsageException; -import org.ultramine.commands.Action; import org.ultramine.commands.Command; import org.ultramine.commands.CommandContext; +import org.ultramine.permission.internal.ServerPermissionManager; import org.ultramine.server.PermissionHandler; public class BasicPermissionCommands @@ -17,12 +16,12 @@ ) public static void pcofnig(CommandContext context) { - if (context.getAction().equals("save")) + if (context.actionIs("save")) { PermissionHandler.getInstance().save(); context.notifyAdmins("command.pconfig.success.save"); } - else if (context.getAction().equals("reload")) + else { PermissionHandler.getInstance().reload(); context.notifyAdmins("command.pconfig.success.reload"); @@ -42,43 +41,30 @@ ) public static void pworld(CommandContext context) { - if (!context.contains("world")) - { - if (context.senderIsServer()) - throw new WrongUsageException("command.permissions.serverworld"); + String world = context.contains("world") + ? context.get("world").asWorld().getWorldInfo().getWorldName() + : ServerPermissionManager.GLOBAL_WORLD; - context.set("world", context.getSenderAsPlayer().getEntityWorld().getWorldInfo().getWorldName()); + context.checkSenderPermissionInWorld(world, "permissions.admin.world"); + + if (context.actionIs("add")) + { + for (CommandContext.Argument arg : context.get("permission").asArray()) + { + PermissionHandler.getInstance().addToWorld(world, arg.asString()); + context.notifyAdmins("command.pworld.success.add", arg.asString(), world); + } } - - context.checkSenderPermissionInWorld(context.get("world").asString(), "permissions.admin.world"); - context.doAction(); - } - - @Action(command = "pworld", name = "add") - public static void pworld_add(CommandContext context) - { - String world = context.get("world").asString(); - - for (CommandContext.Argument arg : context.get("permission").asArray()) + else { - PermissionHandler.getInstance().addToWorld(world, arg.asString()); - context.notifyAdmins("command.pworld.success.add", arg.asString(), world); + for (CommandContext.Argument arg : context.get("permission").asArray()) + { + PermissionHandler.getInstance().removeFromWorld(world, arg.asString()); + context.notifyAdmins("command.pworld.success.remove", arg.asString(), world); + } } } - @Action(command = "pworld", name = "remove") - public static void pworld_remove(CommandContext context) - { - String world = context.get("world").asString(); - - for (CommandContext.Argument arg : context.get("permission").asArray()) - { - PermissionHandler.getInstance().removeFromWorld(world, arg.asString()); - context.notifyAdmins("command.pworld.success.remove", arg.asString(), world); - } - } - - @Command( name = "puser", @@ -93,57 +79,39 @@ ) public static void puser(CommandContext context) { - if (!context.contains("world")) - { - if (context.senderIsServer()) - throw new WrongUsageException("command.permissions.serverworld"); - - context.set("world", context.getSenderAsPlayer().getEntityWorld().getWorldInfo().getWorldName()); - } - - context.checkSenderPermissionInWorld(context.get("world").asString(), "permissions.admin.user"); - context.doAction(); - } - - @Action(command = "puser", name = "add") - public static void puser_add(CommandContext context) - { - String world = context.get("world").asString(); String player = context.get("player").asString(); + String world = context.contains("world") + ? context.get("world").asWorld().getWorldInfo().getWorldName() + : ServerPermissionManager.GLOBAL_WORLD; - for (CommandContext.Argument arg : context.get("permission").asArray()) + context.checkSenderPermissionInWorld(world, "permissions.admin.world"); + + if (context.actionIs("add")) { - PermissionHandler.getInstance().add(world, player, arg.asString()); - context.notifyAdmins("command.puser.success.add", arg.asString(), player, world); + for (CommandContext.Argument arg : context.get("permission").asArray()) + { + PermissionHandler.getInstance().add(world, player, arg.asString()); + context.notifyAdmins("command.puser.success.add", arg.asString(), player, world); + } + } + else if (context.actionIs("remove")) + { + for (CommandContext.Argument arg : context.get("permission").asArray()) + { + PermissionHandler.getInstance().remove(world, player, arg.asString()); + context.notifyAdmins("command.puser.success.remove", arg.asString(), player, world); + } + } + else + { + String key = context.get("pmeta").asString(); + String value = context.get("value").asString(); + + PermissionHandler.getInstance().setMeta(world, player, key, value); + context.notifyAdmins("command.puser.success.meta", key, value, player, world); } } - @Action(command = "puser", name = "remove") - public static void puser_remove(CommandContext context) - { - String world = context.get("world").asString(); - String player = context.get("player").asString(); - - for (CommandContext.Argument arg : context.get("permission").asArray()) - { - PermissionHandler.getInstance().remove(world, player, arg.asString()); - context.notifyAdmins("command.puser.success.remove", arg.asString(), player, world); - } - } - - @Action(command = "puser", name = "meta") - public static void puser_meta(CommandContext context) - { - String world = context.get("world").asString(); - String player = context.get("player").asString(); - String key = context.get("pmeta").asString(); - String value = context.get("value").asString(); - - PermissionHandler.getInstance().setMeta(world, player, key, value); - context.notifyAdmins("command.puser.success.meta", key, value, player, world); - } - - @Command( name = "pgroup", @@ -158,7 +126,7 @@ { String group = context.get("group").asString(); - if (context.getAction().equals("add")) + if (context.actionIs("add")) { for (CommandContext.Argument arg : context.get("permission").asArray()) { @@ -166,8 +134,7 @@ context.notifyAdmins("command.pgroup.success.add", arg.asString(), group); } } - - else if (context.getAction().equals("remove")) + else if (context.actionIs("remove")) { for (CommandContext.Argument arg : context.get("permission").asArray()) { @@ -175,8 +142,7 @@ context.notifyAdmins("command.pgroup.success.remove", arg.asString(), group); } } - - else if (context.getAction().equals("meta")) + else { String key = context.get("key").asString(); String value = context.get("value").asString(); @@ -184,5 +150,4 @@ context.notifyAdmins("command.pgroup.success.meta", key, value, group); } } - } diff --git a/src/main/resources/assets/ultramine/lang/en_US.lang b/src/main/resources/assets/ultramine/lang/en_US.lang index 68d329a..f8411ba 100644 --- a/src/main/resources/assets/ultramine/lang/en_US.lang +++ b/src/main/resources/assets/ultramine/lang/en_US.lang @@ -1,9 +1,12 @@ #Command generic commands.generic.world.invalid=Can't find world '%s' -# Permissions -command.permissions.serverworld=You must specify world when using this command from console +command.tp.usage=/tp [target player] OR /tp [target player] [world] +command.tp.description=Teleport target player (or you) to another player or coordinate +command.tp.success.player=Teleported <%s> to <%s> +command.tp.success.coordinate=Teleported <%s> to <%s, %s, %s, %s> +# Permissions command.pconfig.usage=/pconfig command.pconfig.description=Save or reload all permissions configs command.pconfig.success.save=Permissions are saved