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

View File

@ -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

View File

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

View File

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