diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java index 2862be33..2e8238ab 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -340,6 +340,7 @@ public class PlayerGameListener implements Listener { public void onPlayerGamemodeSwitch(PlayerGameModeChangeEvent event) { CosmeticUser user = CosmeticUsers.getUser(event.getPlayer()); if (user == null) return; + if (user.isInWardrobe()) user.leaveWardrobe(true); if (Settings.isDisabledGamemodesEnabled()) { if (Settings.getDisabledGamemodes().contains(event.getNewGameMode().toString())) { diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java index f3235336..00fd4bd8 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java @@ -209,7 +209,9 @@ public class CosmeticUser { } public ItemStack getUserCosmeticItem(CosmeticSlot slot) { - return getUserCosmeticItem(getCosmetic(slot)); + Cosmetic cosmetic = getCosmetic(slot); + if (cosmetic == null) return new ItemStack(Material.AIR); + return getUserCosmeticItem(cosmetic); } public ItemStack getUserCosmeticItem(Cosmetic cosmetic) { @@ -335,7 +337,7 @@ public class CosmeticUser { leaveWardrobe(false); } - public void leaveWardrobe(boolean disconnecting) { + public void leaveWardrobe(boolean ejected) { PlayerWardrobeLeaveEvent event = new PlayerWardrobeLeaveEvent(this); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -346,7 +348,7 @@ public class CosmeticUser { getWardrobeManager().setWardrobeStatus(UserWardrobeManager.WardrobeStatus.STOPPING); - if (WardrobeSettings.isEnabledTransition() && !disconnecting) { + if (WardrobeSettings.isEnabledTransition() && !ejected) { MessagesUtil.sendTitle( getPlayer(), WardrobeSettings.getTransitionText(), @@ -413,6 +415,7 @@ public class CosmeticUser { if (!hasCosmeticInSlot(CosmeticSlot.BACKPACK)) return; final Cosmetic cosmetic = getCosmetic(CosmeticSlot.BACKPACK); despawnBackpack(); + if (hideCosmetics) return; spawnBackpack((CosmeticBackpackType) cosmetic); MessagesUtil.sendDebugMessages("Respawned Backpack for " + getEntity().getName()); } @@ -512,7 +515,7 @@ public class CosmeticUser { getBalloonManager().sendRemoveLeashPacket(); } if (hasCosmeticInSlot(CosmeticSlot.BACKPACK)) { - userBackpackManager.clearItems(); + despawnBackpack(); } updateCosmetic(); MessagesUtil.sendDebugMessages("HideCosmetics"); @@ -535,7 +538,8 @@ public class CosmeticUser { List viewer = HMCCPlayerUtils.getNearbyPlayers(getEntity().getLocation()); HMCCPacketManager.sendLeashPacket(getBalloonManager().getPufferfishBalloonId(), getPlayer().getEntityId(), viewer); } - if (hasCosmeticInSlot(CosmeticSlot.BACKPACK) && isBackpackSpawned()) { + if (hasCosmeticInSlot(CosmeticSlot.BACKPACK)) { + if (!isBackpackSpawned()) respawnBackpack(); CosmeticBackpackType cosmeticBackpackType = (CosmeticBackpackType) getCosmetic(CosmeticSlot.BACKPACK); ItemStack item = getUserCosmeticItem(cosmeticBackpackType); userBackpackManager.setItem(item); 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 17a67dbc..9944c329 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 @@ -136,9 +136,11 @@ public class UserWardrobeManager { if (user.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) { // Maybe null as backpack maybe despawned before entering if (user.getUserBackpackManager() == null) user.respawnBackpack(); - user.getUserBackpackManager().getEntityManager().teleport(npcLocation.clone().add(0, 2, 0)); - PacketManager.equipmentSlotUpdate(user.getUserBackpackManager().getFirstArmorStandId(), EquipmentSlot.HEAD, user.getUserCosmeticItem(user.getCosmetic(CosmeticSlot.BACKPACK)), viewer); - HMCCPacketManager.ridingMountPacket(NPC_ID, user.getUserBackpackManager().getFirstArmorStandId(), viewer); + if (user.isBackpackSpawned()) { + user.getUserBackpackManager().getEntityManager().teleport(npcLocation.clone().add(0, 2, 0)); + PacketManager.equipmentSlotUpdate(user.getUserBackpackManager().getFirstArmorStandId(), EquipmentSlot.HEAD, user.getUserCosmeticItem(user.getCosmetic(CosmeticSlot.BACKPACK)), viewer); + HMCCPacketManager.ridingMountPacket(NPC_ID, user.getUserBackpackManager().getFirstArmorStandId(), viewer); + } } if (user.hasCosmeticInSlot(CosmeticSlot.BALLOON)) {