From 548d8c7e4fe670e857f27c9b484f897e6f38df77 Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Sat, 11 Aug 2018 00:16:21 +0200 Subject: [PATCH] Allow armor stands in arenas and lobbies. This commit adds an event handler for the PlayerArmorStandManipulateEvent and cancels it if the arena protection is on, we aren't in edit mode, and the region contains the armor stand. The same logic applies to the armor stand damage event. --- changelog.md | 1 + .../garbagemule/MobArena/ArenaListener.java | 22 +++++++++++++++++++ .../MobArena/listeners/MAGlobalListener.java | 8 +++++++ 3 files changed, 31 insertions(+) diff --git a/changelog.md b/changelog.md index 3488179..7ee600d 100644 --- a/changelog.md +++ b/changelog.md @@ -19,6 +19,7 @@ These changes will (most likely) be included in the next version. - If MobArena fails to load due to config-file errors, it now enters a type of "error state". In this state, it responds to all commands (except for the reload command) with a short message explaining why it's disabled. - It is now possible to reload config-files with `/ma reload`. - The reload command now also reloads global settings, e.g. the global messenger prefix. +- Armor stands can now be placed in arenas and lobbies. Thanks to: - PrinceIonia and Nesseley for help with test of dev builds diff --git a/src/main/java/com/garbagemule/MobArena/ArenaListener.java b/src/main/java/com/garbagemule/MobArena/ArenaListener.java index e22ee03..f37d0cd 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaListener.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaListener.java @@ -26,7 +26,9 @@ import org.bukkit.block.Sign; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.AbstractHorse; import org.bukkit.entity.AnimalTamer; +import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Horse; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Ocelot; @@ -69,6 +71,7 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.player.PlayerAnimationEvent; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; @@ -454,6 +457,10 @@ public class ArenaListener return; } + if (arena.inEditMode() && event.getEntityType() == EntityType.ARMOR_STAND) { + return; + } + if (event.getSpawnReason() != SpawnReason.CUSTOM) { if (event.getSpawnReason() == SpawnReason.BUILD_IRONGOLEM || event.getSpawnReason() == SpawnReason.BUILD_SNOWMAN) { monsters.addGolem(event.getEntity()); @@ -717,6 +724,9 @@ public class ArenaListener else if (damagee instanceof Ocelot && arena.hasPet(damagee)) { onPetDamage(event, (Ocelot) damagee, damager); } + else if (damagee instanceof ArmorStand) { + onArmorStandDamage(event); + } // Mount else if (damagee instanceof AbstractHorse && monsters.hasMount(damagee)) { onMountDamage(event, (Horse) damagee, damager); @@ -772,6 +782,12 @@ public class ArenaListener event.setCancelled(true); } + private void onArmorStandDamage(EntityDamageEvent event) { + if (protect && !arena.inEditMode() && region.contains(event.getEntity().getLocation())) { + event.setCancelled(true); + } + } + private void onMountDamage(EntityDamageEvent event, Horse mount, Entity damager) { event.setCancelled(true); } @@ -1101,6 +1117,12 @@ public class ArenaListener } } + public void onPlayerArmorStandManipulate(PlayerArmorStandManipulateEvent event) { + if (protect && !arena.inEditMode() && region.contains(event.getRightClicked().getLocation())) { + event.setCancelled(true); + } + } + private void handleReadyBlock(Player p) { if (arena.getArenaPlayer(p).getArenaClass() != null) { arena.getMessenger().tell(p, Msg.LOBBY_PLAYER_READY); diff --git a/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java b/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java index 8ce0a38..3de8e30 100644 --- a/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java +++ b/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java @@ -33,6 +33,7 @@ import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerAnimationEvent; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; @@ -304,6 +305,13 @@ public class MAGlobalListener implements Listener arena.getEventListener().onPlayerInteract(event); } + @EventHandler(priority = EventPriority.NORMAL) + public void playerArmorStandManipulate(PlayerArmorStandManipulateEvent event) { + if (!am.isEnabled()) return; + for (Arena arena : am.getArenas()) + arena.getEventListener().onPlayerArmorStandManipulate(event); + } + @EventHandler(priority = EventPriority.NORMAL) public void playerJoin(PlayerJoinEvent event) { InventoryManager.restoreFromFile(plugin, event.getPlayer());