diff --git a/src/main/java/com/cnaude/purpleirc/IRCMessageHandler.java b/src/main/java/com/cnaude/purpleirc/IRCMessageHandler.java index 6577b1a..b862beb 100644 --- a/src/main/java/com/cnaude/purpleirc/IRCMessageHandler.java +++ b/src/main/java/com/cnaude/purpleirc/IRCMessageHandler.java @@ -20,8 +20,11 @@ import com.google.common.base.Joiner; import java.text.Collator; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.bukkit.entity.Player; import org.pircbotx.Channel; import org.pircbotx.User; @@ -41,7 +44,7 @@ public class IRCMessageHandler { public IRCMessageHandler(PurpleIRC plugin) { this.plugin = plugin; } - + private void sendFloodWarning(User user, PurpleBot ircBot) { String message = plugin.colorConverter.gameColorsToIrc(plugin.getMsgTemplate( ircBot.botNick, "", TemplateName.IRC_FLOOD_WARNING) @@ -98,6 +101,7 @@ public void processMessage(PurpleBot ircBot, User user, Channel channel, String } String gc = (String) ircBot.commandMap.get(channelName).get(command).get("game_command"); + String gcUsage = (String) ircBot.commandMap.get(channelName).get(command).get("game_command_usage"); List extraCommands = ircBot.extraCommandMap.get(channelName).get(command); List gameCommands = new ArrayList<>(); gameCommands.add(gc); @@ -115,6 +119,7 @@ public void processMessage(PurpleBot ircBot, User user, Channel channel, String plugin.logDebug("Target: " + target); if (isValidMode(modes, user, channel) && checkPerm(perm, user.getNick())) { + gc_loop: for (String gameCommand : gameCommands) { switch (gameCommand) { case "@list": @@ -184,29 +189,49 @@ public void processMessage(PurpleBot ircBot, User user, Channel channel, String if (commandArgs == null) { commandArgs = ""; } + if (gameCommand.contains("%ARGS%")) { gameCommand = gameCommand.replace("%ARGS%", commandArgs); } - + + if (gameCommand.contains("%NAME%")) { + gameCommand = gameCommand.replace("%NAME%", user.getNick()); + } + if (gameCommand.matches(".*%ARG\\d+%.*")) { String commandArgsArray[] = commandArgs.split(" "); for (int i = 0; i < commandArgsArray.length; i++) { gameCommand = gameCommand.replace("%ARG" + (i + 1) + "%", commandArgsArray[i]); } - gameCommand = gameCommand.replaceAll("%ARG\\d+%", ""); - } - - if (gameCommand.contains("%NAME%")) { - gameCommand = gameCommand.replace("%NAME%", user.getNick()); } - plugin.logDebug("GM: \"" + gameCommand.trim() + "\""); - try { - plugin.commandQueue.add(new IRCCommand( - new IRCCommandSender(ircBot, target, plugin, ctcpResponse, senderName), - //new IRCConsoleCommandSender(ircBot, target, plugin, ctcpResponse, senderName), - gameCommand.trim())); - } catch (Exception ex) { - plugin.logError(ex.getMessage()); + + Pattern pattern = Pattern.compile(".*%ARG(\\d+)\\+%.*"); + Matcher matcher = pattern.matcher(gameCommand); + if (matcher.matches()) { + String commandArgsArray[] = commandArgs.split(" "); + int startPos = Integer.valueOf(matcher.group(1)); + if (commandArgsArray.length >= startPos) { + gameCommand = gameCommand.replace("%ARG" + startPos + "+%", + Joiner.on(" ").join(Arrays.copyOfRange(commandArgsArray, startPos - 1, commandArgsArray.length))); + } + } + + if (gameCommand.matches(".*%ARG\\d+%.*") + || gameCommand.matches(".*%ARG(\\d+)\\+%.*") + || gameCommand.contains("%ARGS%")) { + plugin.logDebug("GM BAIL: \"" + gameCommand.trim() + "\""); + ircBot.asyncIRCMessage(target, gcUsage); + break gc_loop; + } else { + plugin.logDebug("GM: \"" + gameCommand.trim() + "\""); + try { + plugin.commandQueue.add(new IRCCommand( + new IRCCommandSender(ircBot, target, plugin, ctcpResponse, senderName), + //new IRCConsoleCommandSender(ircBot, target, plugin, ctcpResponse, senderName), + gameCommand.trim())); + } catch (Exception ex) { + plugin.logError(ex.getMessage()); + } } break; } diff --git a/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_184_185_186_197.java b/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_184_185_186_187_188.java similarity index 96% rename from src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_184_185_186_197.java rename to src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_184_185_186_187_188.java index 2efcd0d..afe8eec 100644 --- a/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_184_185_186_197.java +++ b/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_184_185_186_187_188.java @@ -30,7 +30,7 @@ * * @author cnaude */ -public class NetPacket_184_185_186_197 { +public class NetPacket_184_185_186_187_188 { public static PacketContainer add(String displayName) { UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + displayName).getBytes(Charsets.UTF_8)); diff --git a/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java b/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java index 9c5fd6d..9c9b55d 100644 --- a/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java +++ b/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java @@ -139,13 +139,14 @@ private PacketContainer tabPacket(String name, boolean add) { } else if (version.contains("MC: 1.8.4") || version.contains("MC: 1.8.5") || version.contains("MC: 1.8.6") - || version.contains("MC: 1.8.7")) { + || version.contains("MC: 1.8.7") + || version.contains("MC: 1.8.8")) { try { if (add) { - return NetPacket_184_185_186_197.add(displayName); + return NetPacket_184_185_186_187_188.add(displayName); } else { plugin.logDebug("T: Removing: " + name); - return NetPacket_184_185_186_197.rem(displayName); + return NetPacket_184_185_186_187_188.rem(displayName); } } catch (Exception ex) { plugin.logError("tabPacket: " + ex.getMessage());