diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java index 9530977c..1a2e2301 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java @@ -39,7 +39,9 @@ public class Data { public String steralizeData(CosmeticUser user) { String data = ""; if (user.getHidden()) { - data = "HIDDEN=" + user.getHiddenReason(); + if (shouldHiddenSave(user.getHiddenReason())) { + data = "HIDDEN=" + user.getHiddenReason(); + } } for (Cosmetic cosmetic : user.getCosmetic()) { Color color = user.getCosmeticColor(cosmetic.getSlot()); @@ -99,4 +101,15 @@ public class Data { } return cosmetics; } + + private boolean shouldHiddenSave(CosmeticUser.HiddenReason reason) { + switch (reason) { + case EMOTE, NONE -> { + return false; + } + default -> { + return true; + } + } + } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerConnectionListener.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerConnectionListener.java index f48c3655..cd40fd1c 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerConnectionListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerConnectionListener.java @@ -58,7 +58,10 @@ public class PlayerConnectionListener implements Listener { } } if (user.isInWardrobe()) user.leaveWardrobe(); - if (user.getUserEmoteManager().isPlayingEmote()) user.getUserEmoteManager().stopEmote(); + if (user.getUserEmoteManager().isPlayingEmote()) { + user.getUserEmoteManager().stopEmote(); + event.getPlayer().setInvisible(false); + } Database.save(user); user.destroy(); CosmeticUsers.removeUser(user.getUniqueId()); 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 348f4f42..93adcc85 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -14,6 +14,7 @@ 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.CosmeticBalloonType; +import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticEmoteType; import com.hibiscusmc.hmccosmetics.gui.Menu; import com.hibiscusmc.hmccosmetics.gui.Menus; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; @@ -80,8 +81,12 @@ public class PlayerGameListener implements Listener { public void onPlayerShift(PlayerToggleSneakEvent event) { CosmeticUser user = CosmeticUsers.getUser(event.getPlayer().getUniqueId()); - if (!event.isSneaking()) return; if (user == null) return; + if (event.isSneaking()) { + user.getUserEmoteManager().stopEmote(); + } + + if (!event.isSneaking()) return; if (!user.isInWardrobe()) return; user.leaveWardrobe(); @@ -197,6 +202,10 @@ public class PlayerGameListener implements Listener { CosmeticUser user = CosmeticUsers.getUser(event.getPlayer().getUniqueId()); if (user == null) return; // Really need to look into optimization of this + if (user.hasCosmeticInSlot(CosmeticSlot.EMOTE) && event.getPlayer().isSneaking()) { + CosmeticEmoteType cosmeticEmoteType = (CosmeticEmoteType) user.getCosmetic(CosmeticSlot.EMOTE); + cosmeticEmoteType.run(user); + } Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), () -> { user.updateCosmetic(CosmeticSlot.OFFHAND); }, 2); diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEmoteManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEmoteManager.java index 9dbe42b6..2c64d1b4 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEmoteManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEmoteManager.java @@ -15,6 +15,8 @@ public class UserEmoteManager { public void playEmote(CosmeticEmoteType cosmeticEmoteType) { MessagesUtil.sendDebugMessages("playEmote " + cosmeticEmoteType.getAnimationId()); + if (isPlayingEmote()) return; + if (user.isInWardrobe()) return; try { model = new UserEmoteModel(user); model.playAnimation(cosmeticEmoteType.getAnimationId()); @@ -25,10 +27,11 @@ public class UserEmoteManager { public boolean isPlayingEmote() { if (model == null) return false; - return true; + return model.isPlayingAnimation(); } public void stopEmote() { + if (!isPlayingEmote()) return; model.stopAnimation(); } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEmoteModel.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEmoteModel.java index 9e232e5e..0269922a 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEmoteModel.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEmoteModel.java @@ -81,9 +81,12 @@ public class UserEmoteModel extends PlayerModel { public void stopAnimation() { emotePlaying = null; despawn(); - List viewer = List.of(user.getPlayer()); Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> { - PacketManager.sendCameraPacket(user.getPlayer().getEntityId(), viewer); + if (user.getPlayer() == null) return; + List viewer = List.of(user.getPlayer()); + if (viewer == null) return; + int entityId = user.getPlayer().getEntityId(); + PacketManager.sendCameraPacket(entityId, viewer); PacketManager.sendEntityDestroyPacket(armorstandId, viewer); if (this.originalGamemode != null) { PacketManager.gamemodeChangePacket(user.getPlayer(), ServerUtils.convertGamemode(this.originalGamemode));