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.
This commit is contained in:
Andreas Troelsen
2018-08-11 00:16:21 +02:00
parent 51fa78acd9
commit 548d8c7e4f
3 changed files with 31 additions and 0 deletions
@@ -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);
@@ -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());