From 8220473836597c62777188a07d3d37a11859c5f2 Mon Sep 17 00:00:00 2001 From: HeroBrineGoat <76707404+MasterOfTheFish@users.noreply.github.com> Date: Fri, 12 Nov 2021 13:48:36 -0500 Subject: [PATCH] Fixed teleport issue --- .../fisher2911/hmccosmetics/HMCCosmetics.java | 4 ++- .../listener/TeleportListener.java | 27 +++++++++++++++++++ .../fisher2911/hmccosmetics/user/User.java | 19 ++++++++++++- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/github/fisher2911/hmccosmetics/listener/TeleportListener.java diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/HMCCosmetics.java b/src/main/java/io/github/fisher2911/hmccosmetics/HMCCosmetics.java index 4206bec1..3822aa8c 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/HMCCosmetics.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/HMCCosmetics.java @@ -7,6 +7,7 @@ import io.github.fisher2911.hmccosmetics.command.CosmeticsCommand; import io.github.fisher2911.hmccosmetics.gui.CosmeticsMenu; import io.github.fisher2911.hmccosmetics.listener.ClickListener; import io.github.fisher2911.hmccosmetics.listener.JoinListener; +import io.github.fisher2911.hmccosmetics.listener.TeleportListener; import io.github.fisher2911.hmccosmetics.message.MessageHandler; import io.github.fisher2911.hmccosmetics.message.Messages; import io.github.fisher2911.hmccosmetics.user.UserManager; @@ -46,7 +47,8 @@ public class HMCCosmetics extends JavaPlugin { private void registerListeners() { List.of(new JoinListener(this), - new ClickListener(this)). + new ClickListener(this), + new TeleportListener(this)). forEach(listener -> this.getServer().getPluginManager().registerEvents(listener, this) ); diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/listener/TeleportListener.java b/src/main/java/io/github/fisher2911/hmccosmetics/listener/TeleportListener.java new file mode 100644 index 00000000..c3d44c57 --- /dev/null +++ b/src/main/java/io/github/fisher2911/hmccosmetics/listener/TeleportListener.java @@ -0,0 +1,27 @@ +package io.github.fisher2911.hmccosmetics.listener; + +import io.github.fisher2911.hmccosmetics.HMCCosmetics; +import io.github.fisher2911.hmccosmetics.user.User; +import io.github.fisher2911.hmccosmetics.user.UserManager; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTeleportEvent; + +public class TeleportListener implements Listener { + + private final HMCCosmetics plugin; + private final UserManager userManager; + + public TeleportListener(final HMCCosmetics plugin) { + this.plugin = plugin; + this.userManager = this.plugin.getUserManager(); + } + + @EventHandler + public void onPlayerTeleport(final PlayerTeleportEvent event) { + final Player player = event.getPlayer(); + + this.userManager.get(player.getUniqueId()).ifPresent(User::despawnAttached); + } +} diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java index 9317ba40..4731f835 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java @@ -137,18 +137,21 @@ public class User { public void updateArmorStand() { final ArmorItem backpackArmorItem = this.playerArmor.getBackpack(); if (backpackArmorItem == null ) { + this.despawnAttached(); return; } final ItemStack backpackItem = backpackArmorItem.getItemStack(); - if (backpackItem == null) { + if (backpackItem == null || backpackItem.getType() == Material.AIR) { + this.despawnAttached(); return; } final Player player = this.getPlayer(); if (player == null) { + this.despawnAttached(); return; } @@ -168,6 +171,11 @@ public class User { final EntityEquipment equipment = this.attached.getEquipment(); + if (equipment == null) { + this.despawnAttached(); + return; + } + if (!backpackItem.equals(equipment.getHelmet())) { equipment.setHelmet(backpackItem); } @@ -178,6 +186,15 @@ public class User { player.getLocation().getPitch()); } + public void despawnAttached() { + if (this.attached == null) { + return; + } + + this.attached.remove(); + this.attached = null; + } + public ArmorItem getLastSetItem() { return lastSetItem; }