From d1fc84b5bc2529a0f4a1e12fc7152a3a17e79b61 Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Fri, 25 Aug 2023 15:27:42 -0500 Subject: [PATCH] fix: non-thirdperson backpacks interactable --- .../cosmetic/types/CosmeticBackpackType.java | 2 +- .../user/manager/UserBackpackManager.java | 2 +- .../user/manager/UserWardrobeManager.java | 2 +- .../util/packets/PacketManager.java | 24 ++++++++++++------- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java index 5cf58abd..33b58b05 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java @@ -56,7 +56,7 @@ public class CosmeticBackpackType extends Cosmetic { user.getUserBackpackManager().getEntityManager().setRotation((int) loc.getYaw()); PacketManager.sendEntitySpawnPacket(user.getEntity().getLocation(), user.getUserBackpackManager().getFirstArmorStandId(), EntityType.ARMOR_STAND, UUID.randomUUID(), outsideViewers); - PacketManager.sendInvisibilityPacket(user.getUserBackpackManager().getFirstArmorStandId(), outsideViewers); + PacketManager.sendArmorstandMetadata(user.getUserBackpackManager().getFirstArmorStandId(), outsideViewers); NMSHandlers.getHandler().equipmentSlotUpdate(user.getUserBackpackManager().getFirstArmorStandId(), EquipmentSlot.HEAD, user.getUserCosmeticItem(this, getItem()), outsideViewers); // If true, it will send the riding packet to all players. If false, it will send the riding packet only to new players if (Settings.isBackpackForceRidingEnabled()) PacketManager.sendRidingPacket(entity.getEntityId(), user.getUserBackpackManager().getFirstArmorStandId(), user.getUserBackpackManager().getEntityManager().getViewers()); diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java index ac09bdcc..b7854b2a 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java @@ -56,7 +56,7 @@ public class UserBackpackManager { getEntityManager().teleport(user.getEntity().getLocation()); List outsideViewers = getEntityManager().getViewers(); PacketManager.sendEntitySpawnPacket(user.getEntity().getLocation(), getFirstArmorStandId(), EntityType.ARMOR_STAND, UUID.randomUUID(), getEntityManager().getViewers()); - PacketManager.sendInvisibilityPacket(getFirstArmorStandId(), outsideViewers); + PacketManager.sendArmorstandMetadata(getFirstArmorStandId(), outsideViewers); Entity entity = user.getEntity(); diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java index 904855f8..c50ebec8 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java @@ -101,7 +101,7 @@ public class UserWardrobeManager { Runnable run = () -> { // Armorstand PacketManager.sendEntitySpawnPacket(viewingLocation, ARMORSTAND_ID, EntityType.ARMOR_STAND, UUID.randomUUID(), viewer); - PacketManager.sendInvisibilityPacket(ARMORSTAND_ID, viewer); + PacketManager.sendArmorstandMetadata(ARMORSTAND_ID, viewer); PacketManager.sendLookPacket(ARMORSTAND_ID, viewingLocation, viewer); // Player diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/packets/PacketManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/packets/PacketManager.java index 7e4dcfeb..6be44ad1 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/packets/PacketManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/packets/PacketManager.java @@ -122,19 +122,25 @@ public class PacketManager extends BasePacket { NMSHandlers.getHandler().equipmentSlotUpdate(entityId, InventoryUtils.getEquipmentSlot(cosmeticSlot), user.getUserCosmeticItem(cosmeticSlot), sendTo); } - public static void armorStandMetaPacket( - @NotNull Entity entity, + public static void sendArmorstandMetadata( + int entityId, List sendTo ) { PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA); packet.getModifier().writeDefaults(); - packet.getIntegers().write(0, entity.getEntityId()); - WrappedDataWatcher metadata = new WrappedDataWatcher(); - if (metadata == null) return; - // 0x10 & 0x20 - metadata.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class)), (byte) 0x20); - metadata.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(15, WrappedDataWatcher.Registry.get(Byte.class)), (byte) 0x10); - packet.getWatchableCollectionModifier().write(0, metadata.getWatchableObjects()); + packet.getIntegers().write(0, entityId); + WrappedDataWatcher wrapper = new WrappedDataWatcher(); + + if (NMSHandlers.getVersion().contains("v1_18_R2") || NMSHandlers.getVersion().contains("v1_19_R1")) { + wrapper.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class)), (byte) 0x20); + wrapper.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(15, WrappedDataWatcher.Registry.get(Byte.class)), (byte) 0x10); + packet.getWatchableCollectionModifier().write(0, wrapper.getWatchableObjects()); + } else { + final List wrappedDataValueList = Lists.newArrayList(); + wrappedDataValueList.add(new WrappedDataValue(0, WrappedDataWatcher.Registry.get(Byte.class), (byte) 0x20)); + wrapper.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(15, WrappedDataWatcher.Registry.get(Byte.class)), (byte) 0x10); + packet.getDataValueCollectionModifier().write(0, wrappedDataValueList); + } for (Player p : sendTo) sendPacket(p, packet); }