diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index 443b452..b9be69c 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -133,13 +133,19 @@
org.bukkit
spigot-api
+ 1.8.4
+ provided
+
+
+ org.bukkit
+ spigot-183
1.8.3
provided
org.bukkit
- spigot
- 1.8.3
+ spigot-184
+ 1.8.4
provided
@@ -356,7 +362,7 @@
SNAPSHOT
UTF-8
- 1.8.3
+ 1.8.4
diff --git a/pom.xml b/pom.xml
index 9f1ad25..6d8ed86 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
UTF-8
- 1.8.3
+ 1.8.4
SNAPSHOT
@@ -79,8 +79,16 @@
org.bukkit
- spigot
- ${bukkit.version}
+ spigot-183
+ 1.8.3
+ jar
+ provided
+
+
+
+ org.bukkit
+ spigot-184
+ 1.8.4
jar
provided
diff --git a/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_183.java b/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_183.java
new file mode 100644
index 0000000..1bca744
--- /dev/null
+++ b/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_183.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_8_R2.EntityPlayer;
+import net.minecraft.server.v1_8_R2.MinecraftServer;
+import net.minecraft.server.v1_8_R2.PacketPlayOutPlayerInfo;
+import net.minecraft.server.v1_8_R2.PlayerInteractManager;
+
+/**
+ *
+ * @author cnaude
+ */
+public class NetPacket_183 {
+
+ 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/NetPacket_184.java b/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_184.java
new file mode 100644
index 0000000..8643b8a
--- /dev/null
+++ b/src/main/java/com/cnaude/purpleirc/Utilities/NetPacket_184.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_8_R2.EntityPlayer;
+import net.minecraft.server.v1_8_R2.MinecraftServer;
+import net.minecraft.server.v1_8_R2.PacketPlayOutPlayerInfo;
+import net.minecraft.server.v1_8_R2.PlayerInteractManager;
+
+/**
+ *
+ * @author cnaude
+ */
+public class NetPacket_184 {
+
+ 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 acfffab..c626ce1 100644
--- a/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java
+++ b/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java
@@ -18,19 +18,16 @@ package com.cnaude.purpleirc.Utilities;
import com.cnaude.purpleirc.PurpleBot;
import com.cnaude.purpleirc.PurpleIRC;
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.Packets;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.injector.PacketConstructor;
import com.comphenix.protocol.reflect.FieldAccessException;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
import com.google.common.base.Charsets;
-import com.mojang.authlib.GameProfile;
import java.lang.reflect.InvocationTargetException;
-import java.util.UUID;
-import net.minecraft.server.v1_8_R2.EntityPlayer;
-import net.minecraft.server.v1_8_R2.MinecraftServer;
-import net.minecraft.server.v1_8_R2.PacketPlayOutPlayerInfo;
-import net.minecraft.server.v1_8_R2.PlayerInteractManager;
import org.bukkit.entity.Player;
import org.pircbotx.Channel;
import org.pircbotx.User;
@@ -43,6 +40,7 @@ public class NetPackets {
PurpleIRC plugin;
private final ProtocolManager protocolManager;
+ private PacketConstructor playerListConstructor;
/**
*
@@ -63,6 +61,9 @@ public class NetPackets {
if (!plugin.customTabList) {
return;
}
+ if (isPlayerOnline(name, ircBot, channel.getName())) {
+ return;
+ }
String channelName = channel.getName();
if (ircBot.tabIgnoreNicks.containsKey(channelName)) {
for (String s : ircBot.tabIgnoreNicks.get(channelName)) {
@@ -112,39 +113,43 @@ public class NetPackets {
String displayName = truncateName(plugin.customTabPrefix + name);
PacketContainer packet = null;
String version = plugin.getServer().getVersion();
- if (version.contains("MC: 1.8.3")) {
+ if (version.contains("MC: 1.7.10")) {
+ try {
+ packet = protocolManager.createPacket(PacketType.Play.Server.PLAYER_INFO);
+ packet.getIntegers().write(0, (add ? 0 : 4));
+ packet.getGameProfiles().write(0, new WrappedGameProfile(java.util.UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)), displayName));
+ packet.getIntegers().write(1, 0);
+ packet.getIntegers().write(2, 0);
+ packet.getStrings().write(0, displayName);
+ } catch (Exception ex) {
+ plugin.logError("tabPacket: " + ex.getMessage());
+ }
+ } else if (version.contains("MC: 1.8.3")) {
try {
- UUID uuid = null; // = plugin.getPlayerUuid(name);
- if (uuid == null) {
- uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + displayName).getBytes(Charsets.UTF_8));
- }
if (add) {
- 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);
+ return NetPacket_183.add(displayName);
} else {
plugin.logDebug("T: Removing: " + name);
- 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);
+ return NetPacket_183.rem(displayName);
}
} catch (Exception ex) {
plugin.logError("tabPacket: " + ex.getMessage());
}
+ } else if (version.contains("MC: 1.8.4")) {
+ try {
+ if (add) {
+ return NetPacket_184.add(displayName);
+ } else {
+ plugin.logDebug("T: Removing: " + name);
+ return NetPacket_184.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);
+ packet = playerListConstructor.createPacket(displayName, add, 0);
}
return packet;
}
@@ -193,4 +198,18 @@ public class NetPackets {
return name;
}
}
+
+ private boolean isPlayerOnline(String name, PurpleBot ircBot, String channel) {
+ if (ircBot.tabIgnoreDuplicates.containsKey(channel)) {
+ if (ircBot.tabIgnoreDuplicates.get(channel)) {
+ for (Player player : plugin.getServer().getOnlinePlayers()) {
+ if (name.equalsIgnoreCase(player.getName())) {
+ plugin.logDebug("Not adidng to tab list due to player with same name.");
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
}