From 0e1c9b3f7e3198b05a9145580ab862db1d156314 Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Mon, 20 Feb 2023 18:41:11 -0600 Subject: [PATCH] Backpack no longer equipped on fly or swim --- .../cosmetic/types/CosmeticBackpackType.java | 2 +- .../listener/PlayerGameListener.java | 33 ++++++++++++++++--- .../hmccosmetics/user/CosmeticUser.java | 6 +++- 3 files changed, 34 insertions(+), 7 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 55461890..7f74ac31 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 @@ -26,7 +26,7 @@ public class CosmeticBackpackType extends Cosmetic { Location loc = player.getLocation().clone().add(0, 2, 0); if (user.isInWardrobe()) return; - + if (!user.isBackupSpawned()) return; if (loc.getWorld() != user.getUserBackpackManager().getArmorstand().getWorld()) { user.getUserBackpackManager().getArmorstand().teleport(loc); } 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 1b75f890..cd44794c 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -13,6 +13,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.cosmetic.types.CosmeticBalloonType; import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticEmoteType; import com.hibiscusmc.hmccosmetics.gui.Menu; @@ -28,12 +29,10 @@ import org.bukkit.NamespacedKey; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.Pose; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityPickupItemEvent; -import org.bukkit.event.entity.EntityPotionEffectEvent; -import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.entity.*; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.*; @@ -157,14 +156,38 @@ public class PlayerGameListener implements Listener { @EventHandler public void onPlayerLook(PlayerMoveEvent event) { if (event.isCancelled()) return; + Player player = event.getPlayer(); // TODO: Move to packets - CosmeticUser user = CosmeticUsers.getUser(event.getPlayer().getUniqueId()); + CosmeticUser user = CosmeticUsers.getUser(player); if (user == null) return; // Really need to look into optimization of this user.updateCosmetic(CosmeticSlot.BACKPACK); user.updateCosmetic(CosmeticSlot.BALLOON); } + @EventHandler + public void onPlayerPoseChange(EntityPoseChangeEvent event) { + MessagesUtil.sendDebugMessages("EntityPoseChangeEvent"); + if (!(event.getEntity() instanceof Player)) return; + Player player = ((Player) event.getEntity()).getPlayer(); + CosmeticUser user = CosmeticUsers.getUser(player); + if (user == null) return; + if (!user.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) return; + Pose pose = event.getPose(); + if (pose.equals(Pose.STANDING)) { + MessagesUtil.sendDebugMessages("Standing"); + if (!user.isBackupSpawned()) { + user.spawnBackpack((CosmeticBackpackType) user.getCosmetic(CosmeticSlot.BACKPACK)); + MessagesUtil.sendDebugMessages("backpack is not spawned"); + } + return; + } + if (pose.equals(Pose.SLEEPING) || pose.equals(Pose.SWIMMING) || pose.equals(Pose.FALL_FLYING)) { + MessagesUtil.sendDebugMessages("misc"); + user.despawnBackpack(); + } + } + @EventHandler public void onPlayerArmorDamage(PlayerItemDamageEvent event) { // Possibly look into cancelling the event, then handling the damage on our own. 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 f91af90f..397b9317 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java @@ -286,6 +286,7 @@ public class CosmeticUser { } public void spawnBackpack(CosmeticBackpackType cosmeticBackpackType) { + if (this.userBackpackManager != null) return; this.userBackpackManager = new UserBackpackManager(this); userBackpackManager.spawnBackpack(cosmeticBackpackType); } @@ -296,7 +297,10 @@ public class CosmeticUser { userBackpackManager = null; } - + public boolean isBackupSpawned() { + if (this.userBackpackManager == null) return false; + return true; + } public void spawnBalloon(CosmeticBalloonType cosmeticBalloonType) { Player player = Bukkit.getPlayer(getUniqueId());