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 909c38bd..b0576341 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 @@ -78,20 +78,10 @@ public class CosmeticBackpackType extends Cosmetic { if (Settings.isBackpackForceRidingEnabled()) HMCCPacketManager.sendRidingPacket(entity.getEntityId(), firstArmorStandId, entityManager.getViewers()); else HMCCPacketManager.sendRidingPacket(entity.getEntityId(), firstArmorStandId, outsideViewers); - if (!user.isInWardrobe() && isFirstPersonCompadible() && user.getPlayer() != null) { + if (isFirstPersonCompadible() && !user.isInWardrobe() && user.getPlayer() != null) { List owner = List.of(user.getPlayer()); ArrayList particleCloud = backpackManager.getAreaEffectEntityId(); - /* - // Was playing around with an alternative way to handle the backpacks with it all being one long passenger list, - // however, that does not work, it's just a really up there backpack - areaCloud.add(user.getUserBackpackManager().getFirstArmorStandId()); - int[] passengers = areaCloud - .stream() - .mapToInt(Integer::intValue) - .toArray(); - PacketManager.sendRidingPacket(entity.getEntityId(), passengers, owner); - */ for (int i = 0; i < particleCloud.size(); i++) { if (i == 0) { HMCCPacketManager.sendRidingPacket(entity.getEntityId(), particleCloud.get(i), owner); @@ -99,7 +89,7 @@ public class CosmeticBackpackType extends Cosmetic { HMCCPacketManager.sendRidingPacket(particleCloud.get(i - 1), particleCloud.get(i) , owner); } } - HMCCPacketManager.sendRidingPacket(particleCloud.get(particleCloud.size() - 1), firstArmorStandId, owner); + HMCCPacketManager.sendRidingPacket(particleCloud.getLast(), firstArmorStandId, owner); if (!user.isHidden()) { //if (loc.getPitch() < -70) NMSHandlers.getHandler().equipmentSlotUpdate(user.getUserBackpackManager().getFirstArmorStandId(), EquipmentSlot.HEAD, new ItemStack(Material.AIR), owner); //else NMSHandlers.getHandler().equipmentSlotUpdate(user.getUserBackpackManager().getFirstArmorStandId(), EquipmentSlot.HEAD, firstPersonBackpack, owner); diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/packets/CosmeticPacketInterface.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/packets/CosmeticPacketInterface.java index 65954ae7..98f19c06 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/packets/CosmeticPacketInterface.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/packets/CosmeticPacketInterface.java @@ -5,6 +5,7 @@ import com.hibiscusmc.hmccosmetics.config.Settings; import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticArmorType; +import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBackpackType; import com.hibiscusmc.hmccosmetics.gui.Menu; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; @@ -124,28 +125,37 @@ public class CosmeticPacketInterface implements PacketInterface { @Override public @NotNull PacketAction writePassengerContent(@NotNull Player player, @NotNull PassengerWrapper wrapper) { - //return PacketAction.NOTHING; // TODO: Figure out what to do with this, because with it in, it ruins backpacks (they keep getting thrown to random locations). - // Appears to work fine atm? CosmeticUser viewerUser = CosmeticUsers.getUser(player); if (viewerUser == null || viewerUser.isInWardrobe()) return PacketAction.NOTHING; int ownerId = wrapper.getOwner(); List originalPassengers = wrapper.getPassengers(); - MessagesUtil.sendDebugMessages("Mount Packet Read - EntityID: " + ownerId); + //MessagesUtil.sendDebugMessages("Mount Packet Read - EntityID: " + ownerId); Optional optionalCosmeticUser = CosmeticUsers.values().stream().filter(user -> user.getPlayer() != null).filter(user -> ownerId == user.getPlayer().getEntityId()).findFirst(); if (optionalCosmeticUser.isEmpty()) return PacketAction.NOTHING; CosmeticUser user = optionalCosmeticUser.get(); - MessagesUtil.sendDebugMessages("Mount Packet Sent - " + user.getUniqueId()); + //MessagesUtil.sendDebugMessages("Mount Packet Sent - " + user.getUniqueId()); + + Cosmetic backpackCosmetic = user.getCosmetic(CosmeticSlot.BACKPACK); + if (backpackCosmetic == null) return PacketAction.NOTHING; + if (!(backpackCosmetic instanceof CosmeticBackpackType cosmeticBackpackType)) return PacketAction.NOTHING; + if (user.getUniqueId().equals(viewerUser.getUniqueId())) { + if (cosmeticBackpackType.isFirstPersonCompadible()) return PacketAction.NOTHING; + } - if (!user.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) return PacketAction.NOTHING; if (user.getUserBackpackManager() == null) return PacketAction.NOTHING; List passengers = new ArrayList<>(user.getUserBackpackManager().getEntityManager().getIds()); - passengers.addAll(originalPassengers); + // Prevent duplicates + for (int i : originalPassengers) { + if (passengers.contains(i)) continue; + passengers.add(i); + } wrapper.setPassengers(passengers); + MessagesUtil.sendDebugMessages("Passenger List: " + passengers + " (origin/destination) " + user.getUniqueId().equals(viewerUser.getUniqueId())); return PacketAction.CHANGED; }