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());