diff --git a/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java b/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java index dd0f1a1d..08481ab3 100644 --- a/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java +++ b/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticBackpackType.java @@ -33,7 +33,7 @@ public class CosmeticBackpackType extends Cosmetic { List sendTo = PlayerUtils.getNearbyPlayers(player.getLocation()); Location loc = player.getLocation(); - PacketManager.armorStandMetaPacket((Entity) user.getBackpackEntity(), sendTo); + PacketManager.armorStandMetaPacket(user.getBackpackEntity().getBukkitEntity(), sendTo); PacketManager.sendRotationPacket(user.getArmorstandId(), loc, false, sendTo); PacketManager.sendLookPacket(user.getArmorstandId(), loc, sendTo); diff --git a/src/main/java/com/hibiscusmc/hmccosmetics/entities/InvisibleArmorstand.java b/src/main/java/com/hibiscusmc/hmccosmetics/entities/InvisibleArmorstand.java index 3a10ce33..de7d470c 100644 --- a/src/main/java/com/hibiscusmc/hmccosmetics/entities/InvisibleArmorstand.java +++ b/src/main/java/com/hibiscusmc/hmccosmetics/entities/InvisibleArmorstand.java @@ -1,5 +1,6 @@ package com.hibiscusmc.hmccosmetics.entities; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.level.Level; import org.bukkit.Location; diff --git a/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerConnectionListener.java b/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerConnectionListener.java index c5f60643..39bb98fb 100644 --- a/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerConnectionListener.java +++ b/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerConnectionListener.java @@ -22,6 +22,7 @@ public class PlayerConnectionListener implements Listener { CosmeticUser user = CosmeticUsers.getUser(event.getPlayer()); if (user.isInWardrobe()) user.leaveWardrobe(); Database.save(user); + user.despawnBackpack(); CosmeticUsers.removeUser(user.getUniqueId()); } } diff --git a/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java b/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java index bcda398c..95840fd4 100644 --- a/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -24,6 +24,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; @@ -70,6 +71,13 @@ public class PlayerGameListener implements Listener { event.getPlayer().sendMessage("Left Wardrobe"); } + @EventHandler + public void onPlayerTeleport(PlayerTeleportEvent event) { + CosmeticUser user = CosmeticUsers.getUser(event.getPlayer().getUniqueId()); + + user.updateCosmetic(); + } + private void registerInventoryClickListener() { ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(HMCCosmeticsPlugin.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Client.WINDOW_CLICK) { @Override diff --git a/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java b/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java index 6eb95dc3..64e952f0 100644 --- a/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java +++ b/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java @@ -7,8 +7,10 @@ import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBackpackType; import com.hibiscusmc.hmccosmetics.entities.InvisibleArmorstand; import com.hibiscusmc.hmccosmetics.util.PlayerUtils; import com.hibiscusmc.hmccosmetics.util.packets.PacketManager; +import net.minecraft.world.entity.EquipmentSlot; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -52,7 +54,7 @@ public class CosmeticUser { playerCosmetics.put(cosmetic.getSlot(), cosmetic); if (cosmetic.getSlot() == CosmeticSlot.BACKPACK) { CosmeticBackpackType backpackType = (CosmeticBackpackType) cosmetic; - spawnBackpack(); + spawnBackpack(backpackType); } } @@ -121,15 +123,16 @@ public class CosmeticUser { } } - public void spawnBackpack() { + public void spawnBackpack(CosmeticBackpackType cosmeticBackpackType) { Player player = Bukkit.getPlayer(getUniqueId()); List sentTo = PlayerUtils.getNearbyPlayers(player.getLocation()); if (this.invisibleArmorstand != null) return; this.invisibleArmorstand = new InvisibleArmorstand(player.getLocation()); + invisibleArmorstand.setItemSlot(EquipmentSlot.HEAD, CraftItemStack.asNMSCopy(cosmeticBackpackType.getBackpackItem())); ((CraftWorld) player.getWorld()).getHandle().addFreshEntity(invisibleArmorstand, CreatureSpawnEvent.SpawnReason.CUSTOM); - PacketManager.armorStandMetaPacket((Entity) invisibleArmorstand, sentTo); + PacketManager.armorStandMetaPacket(invisibleArmorstand.getBukkitEntity(), sentTo); PacketManager.ridingMountPacket(player.getEntityId(), invisibleArmorstand.getId(), sentTo); player.addPassenger(invisibleArmorstand.getBukkitEntity());