Now able to hide disguised players from tab, show player disguises tab
This commit is contained in:
@@ -278,8 +278,6 @@ public class DisguiseUtilities {
|
||||
// But the rest of the time.. Its going to conflict.
|
||||
// The below is debug output. Most people wouldn't care for it.
|
||||
|
||||
// System.out.print("Cannot set more than one " + TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS
|
||||
// + " on a entity. Removed the old disguise.");
|
||||
disguiseItel.remove();
|
||||
d.removeDisguise();
|
||||
}
|
||||
|
@@ -52,6 +52,7 @@ import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerClientI
|
||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerInventory;
|
||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerMain;
|
||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerSounds;
|
||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerTabList;
|
||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerViewDisguises;
|
||||
|
||||
public class PacketsManager {
|
||||
@@ -139,6 +140,7 @@ public class PacketsManager {
|
||||
private static PacketListener soundsListener;
|
||||
private static boolean soundsListenerEnabled;
|
||||
private static PacketListener viewDisguisesListener;
|
||||
private static PacketListener tabListListener;
|
||||
private static boolean viewDisguisesListenerEnabled;
|
||||
private static HashMap<Disguise, ArrayList<UUID>> _cancelMeta = new HashMap<Disguise, ArrayList<UUID>>();
|
||||
|
||||
@@ -148,8 +150,10 @@ public class PacketsManager {
|
||||
// Because it kicks you for hacking.
|
||||
|
||||
clientInteractEntityListener = new PacketListenerClientInteract(libsDisguises);
|
||||
tabListListener = new PacketListenerTabList(libsDisguises);
|
||||
|
||||
ProtocolLibrary.getProtocolManager().addPacketListener(clientInteractEntityListener);
|
||||
ProtocolLibrary.getProtocolManager().addPacketListener(tabListListener);
|
||||
|
||||
// Now I call this and the main listener is registered!
|
||||
setupMainPacketsListener();
|
||||
@@ -310,7 +314,9 @@ public class PacketsManager {
|
||||
|
||||
// Send player info along with the disguise
|
||||
PacketContainer sendTab = new PacketContainer(Server.PLAYER_INFO);
|
||||
packets.addPacket(sendTab);
|
||||
|
||||
if (!((PlayerDisguise) disguise).isDisplayedInTab())
|
||||
packets.addPacket(sendTab);
|
||||
|
||||
// Add player to the list, necessary to spawn them
|
||||
sendTab.getModifier().write(0, ReflectionManager.getEnumPlayerInfoAction(0));
|
||||
@@ -405,9 +411,11 @@ public class PacketsManager {
|
||||
|
||||
// Remove player from the list
|
||||
PacketContainer deleteTab = sendTab.shallowClone();
|
||||
packets.addDelayedPacket(deleteTab, 40);
|
||||
|
||||
deleteTab.getModifier().write(0, ReflectionManager.getEnumPlayerInfoAction(4));
|
||||
|
||||
if (!((PlayerDisguise) disguise).isDisplayedInTab()) {
|
||||
packets.addDelayedPacket(deleteTab, 40);
|
||||
}
|
||||
}
|
||||
else if (disguise.getType().isMob() || disguise.getType() == DisguiseType.ARMOR_STAND) {
|
||||
Vector vec = disguisedEntity.getVelocity();
|
||||
|
@@ -225,7 +225,7 @@ public class ReflectionFlagWatchers {
|
||||
}
|
||||
|
||||
for (String methodName : new String[] {
|
||||
"setViewSelfDisguise", "setHideHeldItemFromSelf", "setHideArmorFromSelf", "setHearSelfDisguise"
|
||||
"setViewSelfDisguise", "setHideHeldItemFromSelf", "setHideArmorFromSelf", "setHearSelfDisguise", "setHidePlayer"
|
||||
}) {
|
||||
try {
|
||||
methods.add(Disguise.class.getMethod(methodName, boolean.class));
|
||||
|
@@ -0,0 +1,65 @@
|
||||
package me.libraryaddict.disguise.utilities.packetlisteners;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.ListenerPriority;
|
||||
import com.comphenix.protocol.events.PacketAdapter;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
|
||||
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
||||
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
|
||||
public class PacketListenerTabList extends PacketAdapter {
|
||||
public PacketListenerTabList(LibsDisguises plugin) {
|
||||
super(plugin, ListenerPriority.NORMAL, PacketType.Play.Server.PLAYER_INFO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPacketSending(final PacketEvent event) {
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
|
||||
Player observer = event.getPlayer();
|
||||
|
||||
if (event.getPacket().getPlayerInfoAction().read(0) != PlayerInfoAction.ADD_PLAYER)
|
||||
return;
|
||||
|
||||
List<PlayerInfoData> list = event.getPacket().getPlayerInfoDataLists().read(0);
|
||||
Iterator<PlayerInfoData> itel = list.iterator();
|
||||
|
||||
while (itel.hasNext()) {
|
||||
PlayerInfoData data = itel.next();
|
||||
|
||||
Player player = Bukkit.getPlayer(data.getProfile().getUUID());
|
||||
|
||||
if (player == null)
|
||||
continue;
|
||||
|
||||
Disguise disguise = DisguiseAPI.getDisguise(observer, player);
|
||||
|
||||
if (disguise == null)
|
||||
continue;
|
||||
|
||||
if (!disguise.isHidePlayer())
|
||||
continue;
|
||||
|
||||
itel.remove();
|
||||
}
|
||||
|
||||
if (list.isEmpty()) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
else {
|
||||
event.getPacket().getPlayerInfoDataLists().write(0, list);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user