Update to 1.16
This commit is contained in:
@@ -50,7 +50,8 @@ public class PacketHandlerAttributes implements IPacketHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
if (disguise.isMiscDisguise()) {
|
||||
// Skip if its 1.16, PL can't handle it atm
|
||||
if (disguise.isMiscDisguise() || NmsVersion.v1_16.isSupported()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -4,12 +4,14 @@ import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.packets.IPacketHandler;
|
||||
import me.libraryaddict.disguise.utilities.packets.LibsPackets;
|
||||
import me.libraryaddict.disguise.utilities.packets.PacketsHandler;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Entity;
|
||||
@@ -38,6 +40,107 @@ public class PacketHandlerEquipment implements IPacketHandler {
|
||||
@Override
|
||||
public void handle(Disguise disguise, PacketContainer sentPacket, LibsPackets packets, Player observer,
|
||||
Entity entity) {
|
||||
if (NmsVersion.v1_16.isSupported()) {
|
||||
handleNew(disguise, sentPacket, packets, observer, entity);
|
||||
} else {
|
||||
handleOld(disguise, sentPacket, packets, observer, entity);
|
||||
}
|
||||
}
|
||||
|
||||
public void handleNew(Disguise disguise, PacketContainer sentPacket, LibsPackets packets, Player observer,
|
||||
Entity entity) {
|
||||
// Else if the disguise is updating equipment
|
||||
|
||||
List<Pair<Object, Object>> slots = (List<Pair<Object, Object>>) packets.getPackets().get(0).getModifier()
|
||||
.read(1);
|
||||
List<Pair<Object, Object>> newSlots = new ArrayList<>();
|
||||
boolean constructed = false;
|
||||
|
||||
for (Pair<Object, Object> pair : slots) {
|
||||
EquipmentSlot slot = ReflectionManager.createEquipmentSlot(pair.getFirst());
|
||||
|
||||
org.bukkit.inventory.ItemStack itemStack = disguise.getWatcher().getItemStack(slot);
|
||||
|
||||
if (itemStack != null) {
|
||||
if (!constructed) {
|
||||
constructed = true;
|
||||
|
||||
if (packets.getPackets().size() > 1) {
|
||||
packets.getPackets().remove(1);
|
||||
} else {
|
||||
packets.clear();
|
||||
}
|
||||
|
||||
PacketContainer equipPacket = sentPacket.shallowClone();
|
||||
|
||||
packets.getPackets().add(1, equipPacket);
|
||||
|
||||
equipPacket.getModifier().write(1, newSlots);
|
||||
}
|
||||
|
||||
newSlots.add(Pair.of(pair.getFirst(),
|
||||
ReflectionManager.getNmsItem(itemStack.getType() == Material.AIR ? null : itemStack)));
|
||||
} else {
|
||||
newSlots.add(pair);
|
||||
}
|
||||
|
||||
if (disguise.getWatcher().isRightClicking() && slot == EquipmentSlot.HAND) {
|
||||
ItemStack heldItem = packets.getPackets().get(0).getItemModifier().read(0);
|
||||
|
||||
if (heldItem != null && heldItem.getType() != Material.AIR) {
|
||||
// Convert the datawatcher
|
||||
List<WrappedWatchableObject> list = new ArrayList<>();
|
||||
|
||||
if (DisguiseConfig.isMetaPacketsEnabled()) {
|
||||
WrappedWatchableObject watch = ReflectionManager.createWatchable(MetaIndex.ENTITY_META,
|
||||
WrappedDataWatcher.getEntityWatcher(entity).getByte(0));
|
||||
|
||||
if (watch != null)
|
||||
list.add(watch);
|
||||
|
||||
list = disguise.getWatcher().convert(list);
|
||||
} else {
|
||||
for (WrappedWatchableObject obj : disguise.getWatcher().getWatchableObjects()) {
|
||||
if (obj.getIndex() == 0) {
|
||||
list.add(obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Construct the packets to return
|
||||
PacketContainer packetBlock = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
|
||||
|
||||
packetBlock.getModifier().write(0, entity.getEntityId());
|
||||
packetBlock.getWatchableCollectionModifier().write(0, list);
|
||||
|
||||
PacketContainer packetUnblock = packetBlock.deepClone();
|
||||
// Make a packet to send the 'unblock'
|
||||
for (WrappedWatchableObject watcher : packetUnblock.getWatchableCollectionModifier().read(0)) {
|
||||
watcher.setValue((byte) ((byte) watcher.getValue() & ~(1 << 4)));
|
||||
}
|
||||
|
||||
// Send the unblock before the itemstack change so that the 2nd metadata packet works. Why?
|
||||
// Scheduler
|
||||
// delay.
|
||||
|
||||
PacketContainer packet1 = packets.getPackets().get(0);
|
||||
|
||||
packets.clear();
|
||||
|
||||
packets.addPacket(packetUnblock);
|
||||
packets.addPacket(packet1);
|
||||
packets.addPacket(packetBlock);
|
||||
// Silly mojang made the right clicking datawatcher value only valid for one use. So I have
|
||||
// to reset
|
||||
// it.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void handleOld(Disguise disguise, PacketContainer sentPacket, LibsPackets packets, Player observer,
|
||||
Entity entity) {
|
||||
// Else if the disguise is updating equipment
|
||||
|
||||
EquipmentSlot slot = ReflectionManager.createEquipmentSlot(packets.getPackets().get(0).getModifier().read(1));
|
||||
|
@@ -74,8 +74,7 @@ public class PacketHandlerSpawn implements IPacketHandler {
|
||||
Disguise disguise = packets.getDisguise();
|
||||
|
||||
if (DisguiseConfig.isMiscDisguisesForLivingEnabled()) {
|
||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||
|
||||
if (disguise.getWatcher() instanceof LivingWatcher && !NmsVersion.v1_16.isSupported()) {
|
||||
ArrayList<WrappedAttribute> attributes = new ArrayList<>();
|
||||
|
||||
WrappedAttribute.Builder builder = WrappedAttribute.newBuilder().attributeKey("generic.maxHealth");
|
||||
|
@@ -14,7 +14,6 @@ import io.netty.buffer.Unpooled;
|
||||
import io.netty.handler.codec.DecoderException;
|
||||
import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.libraryaddict.disguise.utilities.modded.ModdedManager;
|
||||
import net.minecraft.server.v1_15_R1.PacketDataSerializer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@@ -141,15 +140,16 @@ public class PacketListenerModdedClient extends PacketAdapter {
|
||||
PacketContainer packet1 = new PacketContainer(PacketType.Login.Server.CUSTOM_PAYLOAD);
|
||||
packet1.getIntegers().write(0, packetId1);
|
||||
packet1.getMinecraftKeys().write(0, new com.comphenix.protocol.wrappers.MinecraftKey("fml", "handshake"));
|
||||
packet1.getModifier()
|
||||
.write(2, new PacketDataSerializer(Unpooled.wrappedBuffer(ModdedManager.getFmlHandshake())));
|
||||
// packet1.getModifier()
|
||||
// .write(2, new PacketDataSerializer(Unpooled.wrappedBuffer(ModdedManager.getFmlHandshake())));
|
||||
|
||||
PacketContainer packet2 = new PacketContainer(PacketType.Login.Server.CUSTOM_PAYLOAD);
|
||||
packet2.getIntegers().write(0, packetId2);
|
||||
packet2.getMinecraftKeys().write(0, new MinecraftKey("fml", "handshake"));
|
||||
packet2.getModifier()
|
||||
.write(2, new PacketDataSerializer(Unpooled.wrappedBuffer(ModdedManager.getFmlRegistries())));
|
||||
// packet2.getModifier()
|
||||
// .write(2, new PacketDataSerializer(Unpooled.wrappedBuffer(ModdedManager.getFmlRegistries())));
|
||||
|
||||
//TODO
|
||||
try {
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet1);
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet2);
|
||||
|
Reference in New Issue
Block a user