diff --git a/pom.xml b/pom.xml index b11b87d..4a57c08 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ UTF-8 - 1.10.2 + 1.11 SNAPSHOT @@ -140,6 +140,14 @@ jar provided + + + org.bukkit + spigot-111 + 1.11 + jar + provided + diff --git a/src/main/java/com/cnaude/purpleirc/IRCCommandSender.java b/src/main/java/com/cnaude/purpleirc/IRCCommandSender.java index c9c1176..984f16f 100644 --- a/src/main/java/com/cnaude/purpleirc/IRCCommandSender.java +++ b/src/main/java/com/cnaude/purpleirc/IRCCommandSender.java @@ -16,6 +16,7 @@ */ package com.cnaude.purpleirc; +import com.cnaude.purpleirc.IRCMessage.Type; import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.Server; @@ -35,7 +36,7 @@ public class IRCCommandSender implements CommandSender { private final PurpleBot ircBot; private final String target; private final PurpleIRC plugin; - private final boolean ctcpResponse; + private final Type responseType; private final String name; private final String template; @@ -67,7 +68,7 @@ public class IRCCommandSender implements CommandSender { private void addMessageToQueue(String message) { ircBot.messageQueue.add(new IRCMessage(target, - plugin.colorConverter.gameColorsToIrc(message), ctcpResponse)); + plugin.colorConverter.gameColorsToIrc(message), responseType)); } /** @@ -75,16 +76,16 @@ public class IRCCommandSender implements CommandSender { * @param ircBot * @param target * @param plugin the PurpleIRC plugin - * @param ctcpResponse + * @param responseType * @param name * @param template */ - public IRCCommandSender(PurpleBot ircBot, String target, PurpleIRC plugin, boolean ctcpResponse, String name, String template) { + public IRCCommandSender(PurpleBot ircBot, String target, PurpleIRC plugin, Type responseType, String name, String template) { super(); this.target = target; this.ircBot = ircBot; this.plugin = plugin; - this.ctcpResponse = ctcpResponse; + this.responseType = responseType; this.name = name; this.template = template; } diff --git a/src/main/java/com/cnaude/purpleirc/IRCConsoleCommandSender.java b/src/main/java/com/cnaude/purpleirc/IRCConsoleCommandSender.java index be6c4d5..7a87184 100644 --- a/src/main/java/com/cnaude/purpleirc/IRCConsoleCommandSender.java +++ b/src/main/java/com/cnaude/purpleirc/IRCConsoleCommandSender.java @@ -16,6 +16,7 @@ */ package com.cnaude.purpleirc; +import com.cnaude.purpleirc.IRCMessage.Type; import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.Server; @@ -37,7 +38,7 @@ public class IRCConsoleCommandSender implements ConsoleCommandSender { private final PurpleBot ircBot; private final String target; private final PurpleIRC plugin; - private final boolean ctcpResponse; + private final Type type; private final String name; /** @@ -68,7 +69,7 @@ public class IRCConsoleCommandSender implements ConsoleCommandSender { private void addMessageToQueue(String message) { ircBot.messageQueue.add(new IRCMessage(target, - plugin.colorConverter.gameColorsToIrc(message), ctcpResponse)); + plugin.colorConverter.gameColorsToIrc(message), type)); } /** @@ -76,15 +77,15 @@ public class IRCConsoleCommandSender implements ConsoleCommandSender { * @param ircBot * @param target * @param plugin the PurpleIRC plugin - * @param ctcpResponse + * @param type * @param name */ - public IRCConsoleCommandSender(PurpleBot ircBot, String target, PurpleIRC plugin, boolean ctcpResponse, String name) { + public IRCConsoleCommandSender(PurpleBot ircBot, String target, PurpleIRC plugin, Type type, String name) { super(); this.target = target; this.ircBot = ircBot; this.plugin = plugin; - this.ctcpResponse = ctcpResponse; + this.type = type; this.name = name; } diff --git a/src/main/java/com/cnaude/purpleirc/IRCMessage.java b/src/main/java/com/cnaude/purpleirc/IRCMessage.java index b6fb9f4..1cb80d1 100644 --- a/src/main/java/com/cnaude/purpleirc/IRCMessage.java +++ b/src/main/java/com/cnaude/purpleirc/IRCMessage.java @@ -24,11 +24,17 @@ public class IRCMessage { public String target; public String message; - public boolean ctcpResponse; + public Type type; - public IRCMessage(String target, String message, boolean ctcpResponse) { + public enum Type { + MESSAGE, + CTCP, + NOTICE + } + + public IRCMessage(String target, String message, Type type) { this.target = target; this.message = message; - this.ctcpResponse = ctcpResponse; + this.type = type; } } diff --git a/src/main/java/com/cnaude/purpleirc/IRCMessageHandler.java b/src/main/java/com/cnaude/purpleirc/IRCMessageHandler.java index 4ccd2fb..8c8b19d 100644 --- a/src/main/java/com/cnaude/purpleirc/IRCMessageHandler.java +++ b/src/main/java/com/cnaude/purpleirc/IRCMessageHandler.java @@ -16,6 +16,7 @@ */ package com.cnaude.purpleirc; +import com.cnaude.purpleirc.IRCMessage.Type; import com.cnaude.purpleirc.Utilities.CaseInsensitiveMap; import com.google.common.base.Joiner; import java.text.Collator; @@ -111,7 +112,7 @@ public class IRCMessageHandler { long coolDown; try { coolDown = Long.parseLong(ircBot.commandMap.get(channelName).get(command).get("cool_down")); - } catch (Exception ex) { + } catch (NumberFormatException ex) { coolDown = 0; plugin.logError(ex.getMessage()); } @@ -121,7 +122,7 @@ public class IRCMessageHandler { if (coolDown != 1) { s = "s"; } - sendMessage(ircBot, user.getNick(), "Cool down for this command triggered. Please wait at least " + coolDown + " second" + s + ".", true); + sendMessage(ircBot, user.getNick(), "Cool down for this command triggered. Please wait at least " + coolDown + " second" + s + ".", Type.CTCP); return; } } @@ -135,7 +136,14 @@ public class IRCMessageHandler { String perm = (String) ircBot.commandMap.get(channelName).get(command).get("perm"); String outputTemplate = (String) ircBot.commandMap.get(channelName).get(command).get("output"); boolean privateCommand = Boolean.parseBoolean(ircBot.commandMap.get(channelName).get(command).get("private")); - boolean ctcpResponse = Boolean.parseBoolean(ircBot.commandMap.get(channelName).get(command).get("ctcp")); + Type responseType = Type.MESSAGE; + if (Boolean.parseBoolean(ircBot.commandMap.get(channelName).get(command).get("ctcp"))) { + responseType = Type.CTCP; + } + if (Boolean.parseBoolean(ircBot.commandMap.get(channelName).get(command).get("notice"))) { + responseType = Type.NOTICE; + } + String senderName = ircBot.commandMap.get(channelName).get(command).get("sender").replace("%NICK%", user.getNick()); if (privateCommand || privateMessage) { @@ -151,28 +159,28 @@ public class IRCMessageHandler { for (String gameCommand : gameCommands) { switch (gameCommand) { case "@list": - sendMessage(ircBot, target, plugin.getMCPlayers(ircBot, channelName), ctcpResponse); + sendMessage(ircBot, target, plugin.getMCPlayers(ircBot, channelName), responseType); break; case "@uptime": - sendMessage(ircBot, target, plugin.getMCUptime(), ctcpResponse); + sendMessage(ircBot, target, plugin.getMCUptime(), responseType); break; case "@help": - sendMessage(ircBot, target, getCommands(ircBot.commandMap, channelName), ctcpResponse); + sendMessage(ircBot, target, getCommands(ircBot.commandMap, channelName), responseType); break; case "@chat": - ircBot.broadcastChat(user, channel, target, commandArgs, false, ctcpResponse); + ircBot.broadcastChat(user, channel, target, commandArgs, false, responseType); break; case "@ochat": - ircBot.broadcastChat(user, channel, target, commandArgs, true, ctcpResponse); + ircBot.broadcastChat(user, channel, target, commandArgs, true, responseType); break; case "@hchat": ircBot.broadcastHeroChat(user, channel, target, commandArgs); break; case "@motd": - sendMessage(ircBot, target, plugin.getServerMotd(), ctcpResponse); + sendMessage(ircBot, target, plugin.getServerMotd(), responseType); break; case "@version": - sendMessage(ircBot, target, plugin.getServer().getVersion(), ctcpResponse); + sendMessage(ircBot, target, plugin.getServer().getVersion(), responseType); break; case "@versionfull": String v = "This server is running " @@ -181,10 +189,10 @@ public class IRCMessageHandler { + plugin.getServer().getVersion() + " (Implementing API version " + plugin.getServer().getBukkitVersion() + ")"; - sendMessage(ircBot, target, v, ctcpResponse); + sendMessage(ircBot, target, v, responseType); break; case "@bukkit": - sendMessage(ircBot, target, plugin.getServer().getBukkitVersion(), ctcpResponse); + sendMessage(ircBot, target, plugin.getServer().getBukkitVersion(), responseType); break; case "@rtsmb": if (plugin.reportRTSHook != null) { @@ -198,11 +206,11 @@ public class IRCMessageHandler { ircBot.playerReplyChat(user, channel, target, commandArgs); break; case "@clearqueue": - sendMessage(ircBot, target, plugin.commandQueue.clearQueue(), ctcpResponse); - sendMessage(ircBot, target, ircBot.messageQueue.clearQueue(), ctcpResponse); + sendMessage(ircBot, target, plugin.commandQueue.clearQueue(), responseType); + sendMessage(ircBot, target, ircBot.messageQueue.clearQueue(), responseType); break; case "@query": - sendMessage(ircBot, target, plugin.getRemotePlayers(commandArgs), ctcpResponse); + sendMessage(ircBot, target, plugin.getRemotePlayers(commandArgs), responseType); break; case "@a": if (plugin.adminPrivateChatHook != null && commandArgs != null) { @@ -211,7 +219,7 @@ public class IRCMessageHandler { plugin.adminPrivateChatHook.sendMessage(newMessage, user.getNick()); String acResponse = plugin.tokenizer.msgChatResponseTokenizer(target, commandArgs, plugin.getMessageTemplate(TemplateName.IRC_ADMIN_RESPONSE)); if (!acResponse.isEmpty()) { - sendMessage(ircBot, target, acResponse, ctcpResponse); + sendMessage(ircBot, target, acResponse, responseType); } } break; @@ -257,8 +265,8 @@ public class IRCMessageHandler { plugin.logDebug("GM: \"" + gameCommand.trim() + "\""); try { plugin.commandQueue.add(new IRCCommand( - new IRCCommandSender(ircBot, target, plugin, ctcpResponse, senderName, outputTemplate), - new IRCConsoleCommandSender(ircBot, target, plugin, ctcpResponse, senderName), + new IRCCommandSender(ircBot, target, plugin, responseType, senderName, outputTemplate), + new IRCConsoleCommandSender(ircBot, target, plugin, responseType, senderName), gameCommand.trim() )); } catch (Exception ex) { @@ -294,7 +302,7 @@ public class IRCMessageHandler { } if (ircBot.enabledMessages.get(channelName).contains(TemplateName.INVALID_IRC_COMMAND)) { plugin.logDebug("Invalid IRC command dispatched for broadcast..."); - ircBot.broadcastChat(user, channel, null, message, false, false); + ircBot.broadcastChat(user, channel, null, message, false, Type.MESSAGE); } } } else { @@ -310,7 +318,7 @@ public class IRCMessageHandler { if (plugin.stripGameColorsFromIrc) { message = ChatColor.stripColor(message); } - ircBot.broadcastChat(user, channel, null, message, false, false); + ircBot.broadcastChat(user, channel, null, message, false, Type.MESSAGE); } } @@ -341,13 +349,20 @@ public class IRCMessageHandler { return modeOkay; } - private void sendMessage(PurpleBot ircBot, String target, String message, boolean ctcpResponse) { - if (ctcpResponse) { - plugin.logDebug("Sending message to target: " + target + " => " + message); - ircBot.asyncCTCPMessage(target, message); - } else { - plugin.logDebug("Sending message to target: " + target + " => " + message); - ircBot.asyncIRCMessage(target, message); + private void sendMessage(PurpleBot ircBot, String target, String message, Type responseType) { + switch (responseType) { + case CTCP: + plugin.logDebug("Sending message to target: " + target + " => " + message); + ircBot.asyncCTCPMessage(target, message); + break; + case MESSAGE: + plugin.logDebug("Sending message to target: " + target + " => " + message); + ircBot.asyncIRCMessage(target, message); + break; + case NOTICE: + plugin.logDebug("Sending notice to target: " + target + " => " + message); + ircBot.asyncNoticeMessage(target, message); + break; } } diff --git a/src/main/java/com/cnaude/purpleirc/IRCMessageQueueWatcher.java b/src/main/java/com/cnaude/purpleirc/IRCMessageQueueWatcher.java index 2163ffc..ed02a1e 100644 --- a/src/main/java/com/cnaude/purpleirc/IRCMessageQueueWatcher.java +++ b/src/main/java/com/cnaude/purpleirc/IRCMessageQueueWatcher.java @@ -65,10 +65,15 @@ public class IRCMessageQueueWatcher { if (ircMessage != null) { plugin.logDebug("[" + queue.size() + "]: queueAndSend message detected"); for (String s : cleanupAndSplitMessage(ircMessage.message)) { - if (ircMessage.ctcpResponse) { - blockingCTCPMessage(ircMessage.target, s); - } else { - blockingIRCMessage(ircMessage.target, s); + switch (ircMessage.type) { + case MESSAGE: + blockingIRCMessage(ircMessage.target, s); + break; + case CTCP: + blockingCTCPMessage(ircMessage.target, s); + break; + case NOTICE: + blockingNoticeMessage(ircMessage.target, s); } } } @@ -92,6 +97,15 @@ public class IRCMessageQueueWatcher { plugin.logDebug("[blockingCTCPMessage] Message sent to " + target + ": " + message); } + private void blockingNoticeMessage(final String target, final String message) { + if (!ircBot.isConnected()) { + return; + } + plugin.logDebug("[blockingNoticeMessage] About to send IRC notice to " + target + ": " + message); + ircBot.bot.sendIRC().notice(target, message); + plugin.logDebug("[blockingNoticeMessage] Notice sent to " + target + ": " + message); + } + private String pingFix(String message) { try { for (Channel channel : ircBot.bot.getUserBot().getChannels()) { diff --git a/src/main/java/com/cnaude/purpleirc/PurpleBot.java b/src/main/java/com/cnaude/purpleirc/PurpleBot.java index 641f1f5..a494605 100644 --- a/src/main/java/com/cnaude/purpleirc/PurpleBot.java +++ b/src/main/java/com/cnaude/purpleirc/PurpleBot.java @@ -34,6 +34,10 @@ import com.cnaude.purpleirc.IRCListeners.QuitListener; import com.cnaude.purpleirc.IRCListeners.ServerResponseListener; import com.cnaude.purpleirc.IRCListeners.TopicListener; import com.cnaude.purpleirc.IRCListeners.WhoisListener; +import com.cnaude.purpleirc.IRCMessage.Type; +import static com.cnaude.purpleirc.IRCMessage.Type.CTCP; +import static com.cnaude.purpleirc.IRCMessage.Type.MESSAGE; +import static com.cnaude.purpleirc.IRCMessage.Type.NOTICE; import com.cnaude.purpleirc.Utilities.CaseInsensitiveMap; import com.dthielke.herochat.Herochat; import com.dthielke.herochat.Chatter; @@ -183,6 +187,8 @@ public final class PurpleBot { boolean joinNoticeEnabled; boolean joinNoticePrivate; boolean joinNoticeCtcp; + boolean joinNoticeNotice; + Type joinResponseType; String joinNoticeMessage; String version; String finger; @@ -559,13 +565,19 @@ public final class PurpleBot { public void asyncIRCMessage(final String target, final String message) { plugin.logDebug("Entering aysncIRCMessage"); - IRCMessage ircMessage = new IRCMessage(target, plugin.colorConverter.gameColorsToIrc(message), false); + IRCMessage ircMessage = new IRCMessage(target, plugin.colorConverter.gameColorsToIrc(message), MESSAGE); messageQueue.add(ircMessage); } public void asyncCTCPMessage(final String target, final String message) { plugin.logDebug("Entering asyncCTCPMessage"); - IRCMessage ircMessage = new IRCMessage(target, plugin.colorConverter.gameColorsToIrc(message), true); + IRCMessage ircMessage = new IRCMessage(target, plugin.colorConverter.gameColorsToIrc(message), CTCP); + messageQueue.add(ircMessage); + } + + public void asyncNoticeMessage(final String target, final String message) { + plugin.logDebug("Entering asyncNoticeMessage"); + IRCMessage ircMessage = new IRCMessage(target, plugin.colorConverter.gameColorsToIrc(message), NOTICE); messageQueue.add(ircMessage); } @@ -951,7 +963,7 @@ public final class PurpleBot { townyChannel.put(channelName, config.getString("channels." + enChannelName + ".towny-channel", "")); plugin.logDebug(" TownyChannel => " + townyChannel.get(channelName)); - + discordChannel.put(channelName, config.getString("channels." + enChannelName + ".discord-channel", "")); plugin.logDebug(" DiscordChannel => " + discordChannel.get(channelName)); @@ -1137,8 +1149,16 @@ public final class PurpleBot { joinNoticeCoolDown = config.getInt("channels." + enChannelName + ".join-notice.cooldown", 60); joinNoticeEnabled = config.getBoolean("channels." + enChannelName + ".join-notice.enabled", false); joinNoticePrivate = config.getBoolean("channels." + enChannelName + ".join-notice.private", true); - joinNoticeCtcp = config.getBoolean("channels." + enChannelName + ".join-notice.ctcp", true); joinNoticeMessage = config.getString("channels." + enChannelName + ".join-notice.message", ""); + + joinResponseType = Type.MESSAGE; + if (config.getBoolean("channels." + enChannelName + ".join-notice.ctcp", true)) { + joinResponseType = Type.CTCP; + } + if (config.getBoolean("channels." + enChannelName + ".join-notice.notice", false)) { + joinResponseType = Type.NOTICE; + } + plugin.logDebug("join-notice.cooldown: " + joinNoticeCoolDown); plugin.logDebug("join-notice.enabled: " + joinNoticeEnabled); plugin.logDebug("join-notice.private: " + joinNoticePrivate); @@ -2355,7 +2375,7 @@ public final class PurpleBot { + " IRC topic for " + ChatColor.WHITE + channelName + ChatColor.RESET + ": \"" + ChatColor.WHITE + plugin.colorConverter - .ircColorsToGame(activeTopic.get(channelName)) + .ircColorsToGame(activeTopic.get(channelName)) + ChatColor.RESET + "\""); } } @@ -2702,9 +2722,9 @@ public final class PurpleBot { * @param target * @param message * @param override - * @param ctcpResponse + * @param responseType */ - public void broadcastChat(User user, org.pircbotx.Channel channel, String target, String message, boolean override, boolean ctcpResponse) { + public void broadcastChat(User user, org.pircbotx.Channel channel, String target, String message, boolean override, Type responseType) { boolean messageSent = false; String channelName = channel.getName(); @@ -2893,7 +2913,7 @@ public final class PurpleBot { } } } - + /* Send messages to VentureChat if enabled */ @@ -2916,10 +2936,16 @@ public final class PurpleBot { // Let the sender know the message was sent String responseTemplate = plugin.getMessageTemplate(botNick, channelName, TemplateName.IRC_CHAT_RESPONSE); if (!responseTemplate.isEmpty()) { - if (ctcpResponse) { - asyncCTCPMessage(target, plugin.tokenizer.targetChatResponseTokenizer(target, message, responseTemplate)); - } else { - asyncIRCMessage(target, plugin.tokenizer.targetChatResponseTokenizer(target, message, responseTemplate)); + switch (responseType) { + case CTCP: + asyncCTCPMessage(target, plugin.tokenizer.targetChatResponseTokenizer(target, message, responseTemplate)); + break; + case MESSAGE: + asyncIRCMessage(target, plugin.tokenizer.targetChatResponseTokenizer(target, message, responseTemplate)); + break; + case NOTICE: + asyncNoticeMessage(target, plugin.tokenizer.targetChatResponseTokenizer(target, message, responseTemplate)); + break; } } } @@ -3866,8 +3892,8 @@ public final class PurpleBot { String myMessage = ChatColor.translateAlternateColorCodes('&', plugin.colorConverter.gameColorsToIrc(joinNoticeMessage.replace("%NAME%", user.getNick()))); if (joinNoticeMessage.startsWith("/")) { plugin.commandQueue.add(new IRCCommand( - new IRCCommandSender(this, target, plugin, joinNoticeCtcp, "CONSOLE", "%RESULT%"), - new IRCConsoleCommandSender(this, target, plugin, joinNoticeCtcp, "CONSOLE"), + new IRCCommandSender(this, target, plugin, joinResponseType, "CONSOLE", "%RESULT%"), + new IRCConsoleCommandSender(this, target, plugin, joinResponseType, "CONSOLE"), myMessage.trim().substring(1))); } else if (joinNoticeCtcp) { asyncCTCPMessage(target, myMessage); diff --git a/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_111.java b/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_111.java new file mode 100644 index 0000000..0ae99b9 --- /dev/null +++ b/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_111.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2015 cnaude + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.cnaude.purpleirc.Utilities; + +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedGameProfile; +import com.google.common.base.Charsets; +import com.mojang.authlib.GameProfile; +import java.util.UUID; +import net.minecraft.server.v1_11_R1.EntityPlayer; +import net.minecraft.server.v1_11_R1.MinecraftServer; +import net.minecraft.server.v1_11_R1.PacketPlayOutPlayerInfo; +import net.minecraft.server.v1_11_R1.PlayerInteractManager; + +/** + * + * @author Chris Naude + */ +public class NetPacket_111 { + + public static PacketContainer add(String displayName) { + UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + displayName).getBytes(Charsets.UTF_8)); + EntityPlayer pl = new EntityPlayer( + MinecraftServer.getServer(), + MinecraftServer.getServer().getWorldServer(0), + (GameProfile) (new WrappedGameProfile(uuid, displayName)).getHandle(), + new PlayerInteractManager(MinecraftServer.getServer().getWorldServer(0)) + ); + PacketPlayOutPlayerInfo pi + = new PacketPlayOutPlayerInfo( + PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, pl); + return PacketContainer.fromPacket(pi); + } + + public static PacketContainer rem(String displayName) { + UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + displayName).getBytes(Charsets.UTF_8)); + EntityPlayer pl = new EntityPlayer( + MinecraftServer.getServer(), + MinecraftServer.getServer().getWorldServer(0), + (GameProfile) (new WrappedGameProfile(uuid, displayName)).getHandle(), + new PlayerInteractManager(MinecraftServer.getServer().getWorldServer(0)) + ); + PacketPlayOutPlayerInfo pi + = new PacketPlayOutPlayerInfo( + PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, pl); + return PacketContainer.fromPacket(pi); + } + +} diff --git a/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java b/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java index b1220a8..8680ffd 100644 --- a/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java +++ b/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java @@ -183,6 +183,17 @@ public class NetPackets { } catch (Exception ex) { plugin.logError("tabPacket: " + ex.getMessage()); } + } else if (version.contains("MC: 1.11")) { + try { + if (add) { + return NetPacket_111.add(displayName); + } else { + plugin.logDebug("T111: Removing: " + name); + return NetPacket_111.rem(displayName); + } + } catch (Exception ex) { + plugin.logError("tabPacket: " + ex.getMessage()); + } } else { plugin.logDebug("tabPacket: deprecated "); playerListConstructor = protocolManager.createPacketConstructor(Packets.Server.PLAYER_INFO, "", false, (int) 0); diff --git a/src/main/resources/SampleBot.yml b/src/main/resources/SampleBot.yml index a1c1d28..74e1f6e 100644 --- a/src/main/resources/SampleBot.yml +++ b/src/main/resources/SampleBot.yml @@ -326,6 +326,8 @@ channels: private: true # If true then message will be sent via ctcp. if false then normal msg ctcp: true + # send a notice message (overrides ctcp) + notice: false # The actual message sent to the user when joining the channel. # If the message starts with a / then a command will be run and the output sent as the message. message: '/list' @@ -354,6 +356,7 @@ channels: modes: '*' private: false ctcp: false + notice: false game_command: '@chat' extras_commands: [] private_listen: true @@ -366,6 +369,7 @@ channels: modes: '*' private: false ctcp: false + notice: false game_command: '@ochat' extras_commands: [] private_listen: true @@ -378,6 +382,7 @@ channels: modes: '*' private: false ctcp: false + notice: false game_command: '@hchat' extras_commands: [] private_listen: true @@ -390,6 +395,7 @@ channels: modes: '*' private: true ctcp: false + notice: false game_command: '@msg' extras_commands: [] private_listen: true @@ -402,6 +408,7 @@ channels: modes: '*' private: 'true' ctcp: 'false' + notice: false game_command: '@r' private_listen: 'true' channel_listen: 'true' @@ -416,6 +423,7 @@ channels: modes: '*' private: false ctcp: false + notice: false game_command: '@list' extras_commands: [] private_listen: true @@ -428,6 +436,7 @@ channels: modes: '*' private: false ctcp: false + notice: false game_command: '@help' extras_commands: [] private_listen: true @@ -440,6 +449,7 @@ channels: modes: '*' private: false ctcp: false + notice: false game_command: '@uptime' extras_commands: [] private_listen: true @@ -452,6 +462,7 @@ channels: modes: '*' private: false ctcp: false + notice: false game_command: '@versionfull' extras_commands: [] private_listen: true @@ -464,6 +475,7 @@ channels: modes: '*' private: false ctcp: false + notice: false game_command: lag extras_commands: [] private_listen: true @@ -476,6 +488,7 @@ channels: modes: 'o' private: 'false' ctcp: 'false' + notice: false game_command: '@list' extra_commands: - '@version'