Hopefully fix an invisibility issue

This commit is contained in:
libraryaddict 2020-10-16 19:22:51 +13:00
parent a20d0fbaed
commit c7d54fa701
2 changed files with 21 additions and 13 deletions

View File

@ -6,6 +6,7 @@ import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.EnumWrappers;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.RemovalCause; import com.google.common.cache.RemovalCause;
@ -21,6 +22,7 @@ import me.libraryaddict.disguise.events.UndisguiseEvent;
import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.packets.LibsPackets; import me.libraryaddict.disguise.utilities.packets.LibsPackets;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -229,6 +231,19 @@ public class PlayerSkinHandler implements Listener {
} }
} }
private void addMetadata(Player player, PlayerSkin skin) {
PlayerDisguise disguise = skin.getDisguise().get();
Entity entity = disguise.getEntity();
WrappedDataWatcher watcher = DisguiseUtilities
.createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(entity), disguise.getWatcher());
PacketContainer metaPacket = ProtocolLibrary.getProtocolManager()
.createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, entity.getEntityId(), watcher, true)
.createPacket(entity.getEntityId(), watcher, true);
skin.getSleptPackets().computeIfAbsent(4, (a) -> new ArrayList<>()).add(metaPacket);
}
private void addTeleport(Player player, PlayerSkin skin) { private void addTeleport(Player player, PlayerSkin skin) {
PlayerDisguise disguise = skin.getDisguise().get(); PlayerDisguise disguise = skin.getDisguise().get();
@ -281,6 +296,7 @@ public class PlayerSkinHandler implements Listener {
if (skin.isSleepPackets()) { if (skin.isSleepPackets()) {
addTeleport(player, skin); addTeleport(player, skin);
addMetadata(player, skin);
} }
try { try {

View File

@ -233,11 +233,7 @@ public class PacketHandlerSpawn implements IPacketHandler {
packets.addPacket(spawnPlayer); packets.addPacket(spawnPlayer);
WrappedDataWatcher dataWatcher = DisguiseUtilities WrappedDataWatcher toSend;
.createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(disguisedEntity),
disguise.getWatcher());
WrappedDataWatcher toSend = dataWatcher;
if (!normalPlayerDisguise) { if (!normalPlayerDisguise) {
toSend = new WrappedDataWatcher(); toSend = new WrappedDataWatcher();
@ -246,6 +242,10 @@ public class PacketHandlerSpawn implements IPacketHandler {
// Set invis // Set invis
toSend.setObject(obj, (byte) 32); toSend.setObject(obj, (byte) 32);
} else {
toSend = DisguiseUtilities
.createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(disguisedEntity),
disguise.getWatcher());
} }
if (NmsVersion.v1_15.isSupported()) { if (NmsVersion.v1_15.isSupported()) {
@ -257,14 +257,6 @@ public class PacketHandlerSpawn implements IPacketHandler {
} else { } else {
spawnPlayer.getDataWatcherModifier().write(0, toSend); spawnPlayer.getDataWatcherModifier().write(0, toSend);
} }
if (!normalPlayerDisguise) {
PacketContainer metaPacket = ProtocolLibrary.getProtocolManager()
.createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, entityId, dataWatcher, true)
.createPacket(entityId, dataWatcher, true);
skin.getSleptPackets().computeIfAbsent(4, (a) -> new ArrayList<>()).add(metaPacket);
}
} else if (disguise.isMobDisguise() || disguise.getType() == DisguiseType.ARMOR_STAND) { } else if (disguise.isMobDisguise() || disguise.getType() == DisguiseType.ARMOR_STAND) {
Vector vec = disguisedEntity.getVelocity(); Vector vec = disguisedEntity.getVelocity();