diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/hooks/worldguard/WGListener.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/hooks/worldguard/WGListener.java index 284b02cd..834018a1 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/hooks/worldguard/WGListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/hooks/worldguard/WGListener.java @@ -7,10 +7,12 @@ import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.RegionContainer; import com.sk89q.worldguard.protection.regions.RegionQuery; import org.bukkit.Location; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -18,32 +20,44 @@ import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.jetbrains.annotations.NotNull; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * Contains {@link com.sk89q.worldguard.WorldGuard WorldGuard} related event listeners */ public class WGListener implements Listener { - @EventHandler(priority = EventPriority.MONITOR) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerMove(@NotNull PlayerMoveEvent event) { - CosmeticUser user = CosmeticUsers.getUser(event.getPlayer()); + Player player = event.getPlayer(); + Location from = event.getFrom(); + Location to = event.getTo(); + if (from.getBlockX() == to.getBlockX() && from.getBlockY() == to.getBlockY() && from.getBlockZ() == to.getBlockZ()) return; + + CosmeticUser user = CosmeticUsers.getUser(player); if (user == null) return; - Location location = event.getPlayer().getLocation(); + Location location = player.getLocation(); ApplicableRegionSet set = getRegions(location); - if (user.isHidden()) { - if (set.getRegions().isEmpty()) { - user.showCosmetics(CosmeticUser.HiddenReason.WORLDGUARD); - } + if (user.isHidden() && set.getRegions().isEmpty()) { + user.showCosmetics(CosmeticUser.HiddenReason.WORLDGUARD); } + + Set wardrobeNames = WardrobeSettings.getWardrobeNames(); for (ProtectedRegion protectedRegion : set.getRegions()) { - if (protectedRegion.getFlags().containsKey(WGHook.getCosmeticEnableFlag())) { - if (protectedRegion.getFlags().get(WGHook.getCosmeticEnableFlag()).toString().equalsIgnoreCase("ALLOW")) { + Map, Object> flags = protectedRegion.getFlags(); + if (flags.containsKey(WGHook.getCosmeticEnableFlag())) { + if (flags.get(WGHook.getCosmeticEnableFlag()).toString().equalsIgnoreCase("ALLOW")) { user.showCosmetics(CosmeticUser.HiddenReason.WORLDGUARD); } else { user.hideCosmetics(CosmeticUser.HiddenReason.WORLDGUARD); } } - if (protectedRegion.getFlags().containsKey(WGHook.getCosmeticWardrobeFlag())) { - if (!WardrobeSettings.getWardrobeNames().contains(protectedRegion.getFlags().get(WGHook.getCosmeticWardrobeFlag()).toString())) return; - Wardrobe wardrobe = WardrobeSettings.getWardrobe(protectedRegion.getFlags().get(WGHook.getCosmeticWardrobeFlag()).toString()); + if (flags.containsKey(WGHook.getCosmeticWardrobeFlag())) { + String wardrobeName = flags.getOrDefault(WGHook.getCosmeticWardrobeFlag(), "").toString(); + if (wardrobeName.isEmpty() || !wardrobeNames.contains(wardrobeName)) return; + Wardrobe wardrobe = WardrobeSettings.getWardrobe(wardrobeName); + if (wardrobe == null) return; user.enterWardrobe(wardrobe, true); } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java index 51d3b7d4..3f544010 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBackpackManager.java @@ -84,7 +84,7 @@ public class UserBackpackManager { if (i == 0) HMCCPacketManager.sendRidingPacket(entity.getEntityId(), particleCloud.get(i), owner); else HMCCPacketManager.sendRidingPacket(particleCloud.get(i - 1), particleCloud.get(i) , owner); } - HMCCPacketManager.sendRidingPacket(particleCloud.get(particleCloud.size() - 1), user.getUserBackpackManager().getFirstArmorStandId(), owner); + HMCCPacketManager.sendRidingPacket(particleCloud.getLast(), user.getUserBackpackManager().getFirstArmorStandId(), owner); if (!user.isHidden()) PacketManager.equipmentSlotUpdate(user.getUserBackpackManager().getFirstArmorStandId(), EquipmentSlot.HEAD, user.getUserCosmeticItem(cosmeticBackpackType, cosmeticBackpackType.getFirstPersonBackpack()), owner); } PacketManager.equipmentSlotUpdate(getFirstArmorStandId(), EquipmentSlot.HEAD, user.getUserCosmeticItem(cosmeticBackpackType), outsideViewers);