diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 89c052f50..6a1734549 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -194,17 +194,30 @@ public void onEntityInteract(EntityInteractEvent event) { return; if (plugin.isDisabledWorldListener(block.getWorld())) return; - CMIMaterial mat = CMIMaterial.get(block); - Entity entity = event.getEntity(); + + if (event.getEntity().getType() != EntityType.FALLING_BLOCK) + return; + + if (CMIMaterial.get(block.getType()) != CMIMaterial.FARMLAND) + return; + FlagPermissions perms = FlagPermissions.getPerms(block.getLocation()); - boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); - if (!hastrample && entity.getType() != EntityType.FALLING_BLOCK && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { - event.setCancelled(true); - } + if (perms.has(Flags.trample, perms.has(Flags.build, true))) + return; + + event.setCancelled(true); + } public static boolean isMonster(Entity ent) { - return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast || Version.isCurrentEqualOrHigher(Version.v1_11_R1) && ent instanceof org.bukkit.entity.Shulker); + if (ent == null) { + return false; + } + CMIEntityType type = CMIEntityType.get(ent); + return (ent instanceof Monster || + ent instanceof Slime || + ent instanceof Ghast || + type == CMIEntityType.SHULKER); } private static boolean isTamed(Entity ent) { @@ -392,7 +405,7 @@ public void VehicleDestroy(VehicleDestroyEvent event) { Vehicle vehicle = event.getVehicle(); - if (!vehicleDamageable(damager, vehicle)) + if (shouldBlockVehicleDestroy(damager, vehicle)) event.setCancelled(true); } @@ -419,39 +432,31 @@ public void vehicleCombust(EntityCombustByEntityEvent event) { Vehicle vehicle = (Vehicle) event.getEntity(); - if (!vehicleDamageable(damager, vehicle)) + if (shouldBlockVehicleDestroy(damager, vehicle)) event.setCancelled(true); } - private boolean vehicleDamageable(Entity damager, Vehicle vehicle) { + private boolean shouldBlockVehicleDestroy(Entity damager, Vehicle vehicle) { if (vehicle == null) - return true; + return false; Player cause = Utils.potentialProjectileToPlayer(damager); - if (cause == null) { - FlagPermissions perms = FlagPermissions.getPerms(vehicle.getLocation()); - if (!perms.has(Flags.vehicledestroy, true)) { - return false; - } - return true; - } + if (cause != null) { - if (ResAdmin.isResAdmin(cause)) - return true; + if (ResAdmin.isResAdmin(cause)) + return false; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(vehicle.getLocation()); + if (FlagPermissions.has(vehicle.getLocation(), cause, Flags.vehicledestroy, FlagCombo.OnlyFalse)) { + lm.Flag_Deny.sendMessage(cause, Flags.vehicledestroy); + return true; + } - if (res == null) + } else if (FlagPermissions.has(vehicle.getLocation(), Flags.vehicledestroy, FlagCombo.OnlyFalse)) { return true; - - if (res.getPermissions().playerHas(cause, Flags.vehicledestroy, FlagCombo.OnlyFalse)) { - lm.Residence_FlagDeny.sendMessage(cause, Flags.vehicledestroy, res.getName()); - return false; } - - return true; + return false; } @EventHandler(priority = EventPriority.LOWEST) @@ -494,13 +499,15 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void AnimalLeash(PlayerLeashEntityEvent event) { - - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + public void PlayerLeashEntityEvent(PlayerLeashEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.leash.isGlobalyEnabled()) return; Entity entity = event.getEntity(); + // disabling event on world + if (plugin.isDisabledWorldListener(entity.getWorld())) + return; Player player = event.getPlayer(); @@ -518,17 +525,19 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFenceLeashInteract(PlayerInteractEntityEvent event) { - - // disabling event on world - if (plugin.isDisabledWorldListener(event.getRightClicked().getWorld())) + // Disabling listener if flag disabled globally + if (!Flags.leash.isGlobalyEnabled()) return; - Player player = event.getPlayer(); Entity entity = event.getRightClicked(); + // disabling event on world + if (plugin.isDisabledWorldListener(entity.getWorld())) + return; if (CMIEntityType.get(entity.getType()) != CMIEntityType.LEASH_KNOT) return; + Player player = event.getPlayer(); if (ResAdmin.isResAdmin(player)) return; @@ -686,7 +695,9 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingPlace(HangingPlaceEvent event) { - + // Disabling listener if flag disabled globally + if (!Flags.place.isGlobalyEnabled()) + return; // disabling event on world Player player = event.getPlayer(); if (player == null) @@ -732,7 +743,9 @@ public void onProjectileLaunch(ProjectileLaunchEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakByEntityEvent event) { - + // Disabling listener if flag disabled globally + if (!Flags.destroy.isGlobalyEnabled()) + return; // disabling event on world Hanging ent = event.getEntity(); if (ent == null) @@ -759,6 +772,9 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakEventByExplosion(HangingBreakEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + return; // disabling event on world Hanging ent = event.getEntity(); if (ent == null) @@ -777,6 +793,9 @@ public void onHangingBreakEventByExplosion(HangingBreakEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakEvent(HangingBreakEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.destroy.isGlobalyEnabled()) + return; // disabling event on world Hanging ent = event.getEntity(); if (ent == null) @@ -800,6 +819,9 @@ public void onHangingBreakEvent(HangingBreakEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.destroy.isGlobalyEnabled()) + return; // disabling event on world Hanging ent = event.getEntity(); if (ent == null) @@ -956,8 +978,6 @@ public void onEntityExplode(EntityExplodeEvent event) { Location loc = event.getLocation(); if (plugin.isDisabledWorldListener(loc.getWorld())) return; - if (event.isCancelled()) - return; Entity ent = event.getEntity(); @@ -1143,38 +1163,36 @@ public void onEntityExplode(EntityExplodeEvent event) { // Various zombies break the door @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityBreakDoor(EntityBreakDoorEvent event) { - - Block block = event.getBlock(); - if (block == null) + // Disabling listener if flag disabled globally + if (!Flags.destroy.isGlobalyEnabled()) return; + Block block = event.getBlock(); // disabling event on world if (plugin.isDisabledWorldListener(block.getWorld())) return; - if (plugin.getPermsByLoc(block.getLocation()).has(Flags.destroy, true)) + if (FlagPermissions.has(block.getLocation(), Flags.destroy, true)) return; event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onSplashPotion(EntityChangeBlockEvent event) { + public void onWitherBreakBlock(EntityChangeBlockEvent event) { // Disabling listener if flag disabled globally if (!Flags.witherdestruction.isGlobalyEnabled()) return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; Entity ent = event.getEntity(); + // disabling event on world + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; if (ent.getType() != EntityType.WITHER) return; - if (!plugin.getPermsByLoc(event.getBlock().getLocation()).has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + if (FlagPermissions.has(event.getBlock().getLocation(), Flags.witherdestruction, true)) return; event.setCancelled(true); @@ -1188,8 +1206,6 @@ public void onSplashPotion(PotionSplashEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (event.isCancelled()) - return; ProjectileSource shooter = event.getPotion().getShooter(); @@ -1236,20 +1252,14 @@ public void onSplashPotion(PotionSplashEvent event) { ClaimedResidence area = plugin.getResidenceManager().getByLoc(target.getLocation()); - if ((target instanceof Player) && (shooter instanceof Player)) { - Player attacker = null; - if (shooter instanceof Player) { - attacker = (Player) shooter; - } - if (attacker != null) { - if (!(target instanceof Player)) - return; - ClaimedResidence srcarea = plugin.getResidenceManager().getByLoc(attacker.getLocation()); - if (srcarea != null && area != null && srcarea.equals(area) && srcarea.getPermissions().playerHas((Player) target, Flags.friendlyfire, FlagCombo.OnlyFalse) && - srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - CMIActionBar.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); - event.setIntensity(target, 0); - } + if (target instanceof Player && shooter instanceof Player) { + Player attacker = (Player) shooter; + ClaimedResidence srcarea = plugin.getResidenceManager().getByLoc(attacker.getLocation()); + if (srcarea != null && area != null && srcarea.equals(area) + && srcarea.getPermissions().playerHas((Player) target, Flags.friendlyfire, FlagCombo.OnlyFalse) + && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { + CMIActionBar.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + event.setIntensity(target, 0); } } } @@ -1259,20 +1269,18 @@ public void onSplashPotion(PotionSplashEvent event) { } } - @EventHandler(priority = EventPriority.LOWEST) + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { // Disabling listener if flag disabled globally if (!Flags.pvp.isGlobalyEnabled()) return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; + Entity entity = event.getEntity(); - if (entity == null) + // disabling event on world + if (plugin.isDisabledWorldListener(entity.getWorld())) return; + if (!(entity instanceof Player)) return; @@ -1300,7 +1308,7 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { event.setCancelled(true); } - @EventHandler + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void OnFallDamage(EntityDamageEvent event) { // Disabling listener if flag disabled globally @@ -1309,8 +1317,7 @@ public void OnFallDamage(EntityDamageEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (event.isCancelled()) - return; + if (event.getCause() != DamageCause.FALL) return; Entity ent = event.getEntity(); @@ -1322,18 +1329,20 @@ public void OnFallDamage(EntityDamageEvent event) { } } - @EventHandler + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void OnArmorStandFlameDamage(EntityDamageEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + // Disabling listener if flag disabled globally + if (!Flags.destroy.isGlobalyEnabled()) return; - if (event.isCancelled()) + + Entity ent = event.getEntity(); + // disabling event on world + if (plugin.isDisabledWorldListener(ent.getWorld())) return; if (event.getCause() != DamageCause.FIRE_TICK) return; - Entity ent = event.getEntity(); if (!Utils.isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) return; @@ -1343,18 +1352,20 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { } } - @EventHandler + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void OnArmorStandExplosion(EntityDamageEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + // Disabling listener if flag disabled globally + if (!Flags.destroy.isGlobalyEnabled()) return; - if (event.isCancelled()) + Entity ent = event.getEntity(); + // disabling event on world + if (plugin.isDisabledWorldListener(ent.getWorld())) return; if (event.getCause() != DamageCause.BLOCK_EXPLOSION && event.getCause() != DamageCause.ENTITY_EXPLOSION) return; - Entity ent = event.getEntity(); + if (!Utils.isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) return; @@ -1376,7 +1387,7 @@ public void onEntityCatchingFire(EntityDamageByEntityEvent event) { if (!damageableProjectile(event.getDamager())) return; - if (event.getEntity() == null || !(event.getEntity() instanceof Player)) + if (!(event.getEntity() instanceof Player)) return; Projectile projectile = (Projectile) event.getDamager(); @@ -1387,7 +1398,7 @@ public void onEntityCatchingFire(EntityDamageByEntityEvent event) { projectile.setFireTicks(0); } - @EventHandler + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void OnPlayerDamageByLightning(EntityDamageEvent event) { // Disabling listener if flag disabled globally if (!Flags.pvp.isGlobalyEnabled()) @@ -1395,8 +1406,7 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (event.isCancelled()) - return; + if (event.getCause() != DamageCause.LIGHTNING) return; Entity ent = event.getEntity(); @@ -1414,8 +1424,6 @@ public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (event.isCancelled()) - return; Entity dmgr = event.getDamager(); if (dmgr.getType() != EntityType.SMALL_FIREBALL && dmgr.getType() != EntityType.FIREBALL) @@ -1436,8 +1444,6 @@ public void onEntityDamageByWitherEvent(EntityDamageByEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (event.isCancelled()) - return; Entity dmgr = event.getDamager(); if (dmgr.getType() != EntityType.WITHER && dmgr.getType() != EntityType.WITHER_SKULL) @@ -1456,8 +1462,6 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (event.isCancelled()) - return; if (CMIEntityType.get(event.getEntityType()) != CMIEntityType.ENDER_CRYSTAL && !CMIEntity.isItemFrame(event.getEntity()) && !Utils.isArmorStandEntity(event.getEntityType())) return; @@ -1826,32 +1830,4 @@ public void onEntityDamage(EntityDamageEvent event) { } } } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractAtFish(PlayerInteractEntityEvent event) { - - if (Version.isCurrentLower(Version.v1_12_R1)) - return; - Player player = event.getPlayer(); - if (ResAdmin.isResAdmin(player)) - return; - - Entity ent = event.getRightClicked(); - if (!(ent instanceof org.bukkit.entity.Fish)) - return; - - ItemStack iih = CMIItemStack.getItemInMainHand(player); - if (iih == null) - return; - - if (!CMIMaterial.get(iih).equals(CMIMaterial.WATER_BUCKET)) - return; - - FlagPermissions perms = FlagPermissions.getPerms(ent.getLocation(), player); - - if (!perms.playerHas(player, Flags.animalkilling, FlagCombo.TrueOrNone)) { - event.setCancelled(true); - lm.Flag_Deny.sendMessage(player, Flags.animalkilling); - } - } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_09.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_09.java index e92d48331..93050c07f 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_09.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_09.java @@ -131,8 +131,6 @@ public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { // disabling event on world if (Residence.getInstance().isDisabledWorldListener(potion.getWorld())) return; - if (event.isCancelled()) - return; boolean harmfull = false; mein: for (PotionEffect one : potion.getEffects()) { @@ -220,8 +218,9 @@ public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { } } + // FrostWalker form frosted_ice, Wither form wither_rose @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onFrostWalker(EntityBlockFormEvent event) { + public void onEntityBlockFormEvent(EntityBlockFormEvent event) { // Disabling listener if flag disabled globally if (!Flags.build.isGlobalyEnabled()) return; @@ -247,18 +246,18 @@ public void onFrostWalker(EntityBlockFormEvent event) { return; event.setCancelled(true); - return; - } - // SnowGolem already has SnowTrail Flag - // Check all entity trigger FrostWalker - // ArmorStand Skeleton Zombies .. - if (!(entity instanceof Snowman)) { + // SnowGolem already has SnowTrail Flag + // Check all entity trigger FrostWalker + // ArmorStand Skeleton Zombies ... + } else if (!(entity instanceof Snowman)) { + FlagPermissions perms = FlagPermissions.getPerms(event.getBlock().getLocation()); if (perms.has(Flags.build, true)) return; event.setCancelled(true); + } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_12.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_12.java index 6ff614d97..558e3cd37 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_12.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_12.java @@ -1,23 +1,20 @@ package com.bekvon.bukkit.residence.listeners; -import org.bukkit.Location; -import org.bukkit.Material; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.player.PlayerItemDamageEvent; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import net.Zrips.CMILib.Items.CMIItemStack; +import net.Zrips.CMILib.Items.CMIMaterial; public class ResidenceListener1_12 implements Listener { @@ -28,52 +25,62 @@ public ResidenceListener1_12(Residence plugin) { } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onPlayerPickupItemEvent(EntityPickupItemEvent event) { + public void onEntityPickupItemEvent(EntityPickupItemEvent event) { // Disabling listener if flag disabled globally if (!Flags.itempickup.isGlobalyEnabled()) return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); - if (res == null) + + // disabling event on world + if (plugin.isDisabledWorldListener(event.getItem().getWorld())) return; - if (event.getEntity().hasMetadata("NPC")) + + Entity entity = event.getEntity(); + if (entity.hasMetadata("NPC")) return; - if (event.getEntity() instanceof Player) { - Player player = (Player) event.getEntity(); - if (!res.getPermissions().playerHas(player, Flags.itempickup, FlagCombo.OnlyFalse)) + if (entity instanceof Player) { + + Player player = (Player) entity; + + if (FlagPermissions.has(event.getItem().getLocation(), player, Flags.itempickup, true)) return; + if (ResPerm.bypass_itempickup.hasPermission(player, 10000L)) return; + } else { - if (!res.getPermissions().has(Flags.itempickup, FlagCombo.OnlyFalse)) + + if (FlagPermissions.has(event.getItem().getLocation(), Flags.itempickup, true)) return; + } + event.setCancelled(true); event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onItemDamage(PlayerItemDamageEvent event) { + public void onPlayerItemDamageEvent(PlayerItemDamageEvent event) { // Disabling listener if flag disabled globally if (!Flags.nodurability.isGlobalyEnabled()) return; - // disabling event on world - if (Residence.getInstance().isDisabledWorldListener(event.getPlayer().getWorld())) - return; + Player player = event.getPlayer(); - Location loc = player.getLocation(); - if (!FlagPermissions.has(loc, Flags.nodurability, false)) + // disabling event on world + if (plugin.isDisabledWorldListener(player.getWorld())) return; - ItemStack held = CMIItemStack.getItemInMainHand(player); - - if (held.getType() == Material.AIR) + if (FlagPermissions.has(player.getLocation(), Flags.nodurability, FlagCombo.FalseOrNone)) return; - if (held.getType().toString().equalsIgnoreCase("TRIDENT")) + CMIMaterial held = CMIMaterial.get(event.getItem()); + // https://github.com/Zrips/Residence/issues/359 + // not sure if we need to keep this check line + if (held == CMIMaterial.TRIDENT) return; - event.setDamage(0); event.setCancelled(true); + } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_13.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_13.java index f0a957657..8c1c6c708 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_13.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_13.java @@ -5,6 +5,7 @@ import org.bukkit.block.data.BlockData; import org.bukkit.block.data.type.Farmland; import org.bukkit.entity.Entity; +import org.bukkit.entity.Fish; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; @@ -16,7 +17,9 @@ import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -27,7 +30,9 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.Utils; +import net.Zrips.CMILib.Items.CMIMC; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Version; public class ResidenceListener1_13 implements Listener { @@ -111,9 +116,17 @@ public void onEntityTouchButtonPlateDenyMsg(ProjectileHitEvent event) { Block block = hitBlock.getLocation().clone().add(event.getHitBlockFace().getDirection()).getBlock(); + Flags flag = null; + CMIMaterial cmat = CMIMaterial.get(block.getType()); - if (!cmat.isButton() && !cmat.isPlate()) + if (cmat.containsCriteria(CMIMC.BUTTON)) { + flag = Flags.button; + } else if (cmat.containsCriteria(CMIMC.PRESSUREPLATE)) { + flag = Flags.pressure; + } + + if (flag == null) return; Player player = Utils.potentialProjectileToPlayer(event.getEntity()); @@ -124,23 +137,13 @@ public void onEntityTouchButtonPlateDenyMsg(ProjectileHitEvent event) { return; FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - boolean hasUse = perms.playerHas(player, Flags.use, true); - - if (cmat.isButton()) { - if (perms.playerHas(player, Flags.button, hasUse)) - return; - - // The perfect spot, the earlier check sends exactly one deny msgs - // Deny msgs for the EntityInteractEvent below to avoid chat spam - lm.Flag_Deny.sendMessage(player, Flags.button); - - } else { - if (perms.playerHas(player, Flags.pressure, hasUse)) - return; + if (perms.playerHas(player, flag, perms.playerHas(player, Flags.use, true))) + return; - lm.Flag_Deny.sendMessage(player, Flags.pressure); + // The perfect spot, the earlier check sends exactly one deny msg + // for the EntityInteractEvent below to avoid chat spam + lm.Flag_Deny.sendMessage(player, flag); - } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -150,8 +153,6 @@ public void onEntityTouchButtonPlate(EntityInteractEvent event) { return; Block block = event.getBlock(); - if (block == null) - return; // disabling event on world if (plugin.isDisabledWorldListener(block.getWorld())) return; @@ -161,13 +162,19 @@ public void onEntityTouchButtonPlate(EntityInteractEvent event) { if (!(entity instanceof Projectile) && !(entity instanceof Item)) return; + Flags flag = null; + CMIMaterial cmat = CMIMaterial.get(block.getType()); - // Only check Button and Plate - if (!cmat.isButton() && !cmat.isPlate()) + if (cmat.containsCriteria(CMIMC.BUTTON)) { + flag = Flags.button; + } else if (cmat.containsCriteria(CMIMC.PRESSUREPLATE)) { + flag = Flags.pressure; + } + + if (flag == null) return; - // Only get projectile player source Player player = Utils.potentialProjectileToPlayer(entity); if (player != null) { @@ -175,39 +182,58 @@ public void onEntityTouchButtonPlate(EntityInteractEvent event) { return; FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - boolean hasUse = perms.playerHas(player, Flags.use, true); - - if (cmat.isButton()) { - if (perms.playerHas(player, Flags.button, hasUse)) - return; - - } else { - if (perms.playerHas(player, Flags.pressure, hasUse)) - return; - - } + if (perms.playerHas(player, flag, perms.playerHas(player, Flags.use, true))) + return; } else { - // Entity not player source // Check potential block as a shooter which should be allowed if its inside same // residence if (Utils.isSourceBlockInsideSameResidence(entity, ClaimedResidence.getByLoc(block.getLocation()))) return; FlagPermissions perms = FlagPermissions.getPerms(block.getLocation()); - boolean hasUse = perms.has(Flags.use, true); + if (perms.has(flag, perms.has(Flags.use, true))) + return; + + } - if (cmat.isButton()) { - if (perms.has(Flags.button, hasUse)) - return; + event.setCancelled(true); - } else { - if (perms.has(Flags.pressure, hasUse)) - return; + } - } - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractAtFish(PlayerInteractEntityEvent event) { + + if (Version.isCurrentEqualOrHigher(Version.v1_17_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.animalkilling.isGlobalyEnabled()) + return; + + Entity ent = event.getRightClicked(); + // disabling event on world + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (!(ent instanceof Fish)) + return; + + Player player = event.getPlayer(); + + Material held = (event.getHand() == EquipmentSlot.OFF_HAND) + ? player.getInventory().getItemInOffHand().getType() + : player.getInventory().getItemInMainHand().getType(); + + if (held != Material.WATER_BUCKET) + return; + + if (ResAdmin.isResAdmin(player)) + return; + + if (FlagPermissions.has(ent.getLocation(), player, Flags.animalkilling, true)) + return; + lm.Flag_Deny.sendMessage(player, Flags.animalkilling); event.setCancelled(true); } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_14.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_14.java index e35440a4b..3e3350b77 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_14.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_14.java @@ -178,7 +178,7 @@ public void onProjectileHitBell(ProjectileHitEvent event) { } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onPlayerharvest(PlayerInteractEvent event) { + public void onPlayerInteractHarvest(PlayerInteractEvent event) { // Disabling listener if flag disabled globally if (!Flags.harvest.isGlobalyEnabled()) return; diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_15.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_15.java index c88a30f85..610dd07c8 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_15.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_15.java @@ -47,35 +47,33 @@ public void onPlayerInteractBeeHive(PlayerInteractEvent event) { if (mat != Material.BEE_NEST && mat != Material.BEEHIVE) return; - Player player = event.getPlayer(); - if (ResAdmin.isResAdmin(player)) - return; + Flags flag = null; CMIMaterial heldItem = CMIMaterial.get(event.getItem()); if (heldItem == CMIMaterial.GLASS_BOTTLE) { - if (CMILib.getInstance().getReflectionManager().getHoneyLevel(block) < CMILib.getInstance().getReflectionManager().getMaxHoneyLevel(block)) { - return; - } + flag = Flags.honey; + } else if (heldItem == CMIMaterial.SHEARS) { + flag = Flags.honeycomb; + } - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.honey, perms.playerHas(player, Flags.build, true))) - return; + if (flag == null) + return; - lm.Flag_Deny.sendMessage(player, Flags.honey); - event.setCancelled(true); + if (CMILib.getInstance().getReflectionManager().getHoneyLevel(block) < CMILib.getInstance().getReflectionManager().getMaxHoneyLevel(block)) { + return; + } - } else if (heldItem == CMIMaterial.SHEARS) { - if (CMILib.getInstance().getReflectionManager().getHoneyLevel(block) < CMILib.getInstance().getReflectionManager().getMaxHoneyLevel(block)) { - return; - } + Player player = event.getPlayer(); + if (ResAdmin.isResAdmin(player)) + return; - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.honeycomb, perms.playerHas(player, Flags.build, true))) - return; + FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); + if (perms.playerHas(player, flag, perms.playerHas(player, Flags.build, true))) + return; + + lm.Flag_Deny.sendMessage(player, flag); + event.setCancelled(true); - lm.Flag_Deny.sendMessage(player, Flags.honeycomb); - event.setCancelled(true); - } } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_16.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_16.java index aae4f791e..0c089a97c 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_16.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_16.java @@ -31,13 +31,13 @@ public void onLightningStrikeEvent(LightningStrikeEvent event) { // Disabling listener if flag disabled globally if (!Flags.animalkilling.isGlobalyEnabled()) return; - - if (!event.getCause().equals(LightningStrikeEvent.Cause.TRIDENT)) - return; // disabling event on world if (plugin.isDisabledWorldListener(event.getWorld())) return; + if (event.getCause() != LightningStrikeEvent.Cause.TRIDENT) + return; + Player player = Version.isCurrentEqualOrHigher(Version.v1_20_R2) ? event.getLightning().getCausingPlayer() : null; @@ -59,7 +59,7 @@ public void onLightningStrikeEvent(LightningStrikeEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onPlayerInteractRespawn(PlayerInteractEvent event) { // Disabling listener if flag disabled globally - if (!Flags.destroy.isGlobalyEnabled()) + if (!Flags.anchor.isGlobalyEnabled()) return; Block block = event.getClickedBlock(); @@ -72,30 +72,19 @@ public void onPlayerInteractRespawn(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; + if (block.getType() != Material.RESPAWN_ANCHOR) + return; + Player player = event.getPlayer(); if (ResAdmin.isResAdmin(player)) return; - Material mat = block.getType(); - - if (mat == Material.RESPAWN_ANCHOR) { - - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.anchor, perms.playerHas(player, Flags.destroy, true))) - return; - - lm.Flag_Deny.sendMessage(player, Flags.anchor); - event.setCancelled(true); - - } else if (mat == Material.REDSTONE_WIRE) { - - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.build, true)) - return; + FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); + if (perms.playerHas(player, Flags.anchor, perms.playerHas(player, Flags.destroy, true))) + return; - lm.Flag_Deny.sendMessage(player, Flags.build); - event.setCancelled(true); + lm.Flag_Deny.sendMessage(player, Flags.anchor); + event.setCancelled(true); - } } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_17.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_17.java index 469b1c0dc..c30f5c190 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_17.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_17.java @@ -19,7 +19,6 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.player.PlayerBucketEntityEvent; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -84,17 +83,13 @@ public void onPlayerBucketEntityEvent(PlayerBucketEntityEvent event) { if (!Flags.animalkilling.isGlobalyEnabled()) return; - Player player = event.getPlayer(); - if (ResAdmin.isResAdmin(player)) - return; - Entity ent = event.getEntity(); - - ItemStack iih = event.getOriginalBucket(); - if (iih == null) + // disabling event on world + if (plugin.isDisabledWorldListener(ent.getWorld())) return; - if (!CMIMaterial.get(iih).equals(CMIMaterial.WATER_BUCKET)) + Player player = event.getPlayer(); + if (ResAdmin.isResAdmin(player)) return; if (FlagPermissions.has(ent.getLocation(), player, Flags.animalkilling, FlagCombo.OnlyFalse)) { @@ -110,9 +105,6 @@ public void onPlayerChangeCopper(EntityChangeBlockEvent event) { return; Block block = event.getBlock(); - if (block == null) - return; - // disabling event on world if (plugin.isDisabledWorldListener(block.getWorld())) return; @@ -175,8 +167,6 @@ public void onBlockFertilizeEvent(BlockFertilizeEvent event) { if (!Flags.build.isGlobalyEnabled()) return; Block block = event.getBlock(); - if (block == null) - return; // disabling event on world if (plugin.isDisabledWorldListener(block.getWorld())) return; diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_19.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_19.java index addfd0c69..f083f4729 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_19.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_19.java @@ -8,13 +8,12 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.block.Action; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -24,6 +23,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Version.Version; public class ResidenceListener1_19 implements Listener { @@ -34,31 +34,24 @@ public ResidenceListener1_19(Residence plugin) { this.plugin = plugin; } - @EventHandler(priority = EventPriority.NORMAL) + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onUseGoatHorn(PlayerInteractEvent event) { // Disabling listener if flag disabled globally if (!Flags.goathorn.isGlobalyEnabled()) return; Player player = event.getPlayer(); - if (player == null) - return; // disabling event on world if (plugin.isDisabledWorldListener(player.getWorld())) return; - if (player.hasMetadata("NPC")) - return; - - ItemStack horn = event.getItem(); - - if (horn == null) + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; - if (!horn.getType().equals(Material.GOAT_HORN)) + if (CMIMaterial.get(event.getItem()) != CMIMaterial.GOAT_HORN) return; - if (ResAdmin.isResAdmin(player)) + if (player.hasMetadata("NPC") || ResAdmin.isResAdmin(player)) return; FlagPermissions perms = FlagPermissions.getPerms(player.getLocation(), player); @@ -94,13 +87,8 @@ public void onHopperCrossRes(InventoryMoveItemEvent event) { if (!Flags.container.isGlobalyEnabled()) return; - Inventory source = event.getSource(); - Inventory dest = event.getDestination(); - if (source == null || dest == null) - return; - - ClaimedResidence sourceRes = ClaimedResidence.getByLoc(source.getLocation()); - ClaimedResidence destRes = ClaimedResidence.getByLoc(dest.getLocation()); + ClaimedResidence sourceRes = ClaimedResidence.getByLoc(event.getSource().getLocation()); + ClaimedResidence destRes = ClaimedResidence.getByLoc(event.getDestination().getLocation()); // source & dest not in Res if (sourceRes == null && destRes == null) @@ -171,7 +159,9 @@ public static boolean canHaveContainer1_19(Entity entity) { return false; } if(Version.isCurrentEqualOrHigher(Version.v1_21_R7)) { - return (entity instanceof AbstractHorse || entity instanceof ChestBoat || entity instanceof org.bukkit.entity.AbstractNautilus); + return (entity instanceof AbstractHorse || + entity instanceof ChestBoat || + entity instanceof org.bukkit.entity.AbstractNautilus); } return (entity instanceof AbstractHorse || entity instanceof ChestBoat); } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_20.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_20.java index f0fdd6a54..9b280b9fd 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_20.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_20.java @@ -8,16 +8,13 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerSignOpenEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResAdmin; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; @@ -33,44 +30,6 @@ public ResidenceListener1_20(Residence plugin) { this.plugin = plugin; } - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onSignWax(PlayerInteractEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.build.isGlobalyEnabled()) - return; - - Player player = event.getPlayer(); - if (player == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(player.getWorld())) - return; - - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - if (event.getItem() == null || event.getItem().getType() != Material.HONEYCOMB) - return; - - Block block = event.getClickedBlock(); - if (block == null) - return; - - if (!CMIMaterial.isSign(block.getType())) - return; - - if (ResPerm.bypass_build.hasPermission(player, 10000L)) - return; - - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - - if (perms.playerHas(player, Flags.build, true)) - return; - - lm.Flag_Deny.sendMessage(player, Flags.build); - event.setCancelled(true); - } - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignInteract(PlayerSignOpenEvent event) { // Disabling listener if flag disabled globally @@ -78,8 +37,6 @@ public void onSignInteract(PlayerSignOpenEvent event) { return; Player player = event.getPlayer(); - if (player == null) - return; // disabling event on world if (plugin.isDisabledWorldListener(player.getWorld())) return; @@ -104,84 +61,79 @@ public void onSignInteract(PlayerSignOpenEvent event) { } - // Projectile hit chorus_flower decorated_pot pointed_dripstone - // Sweep SuspiciousBlocks + // Projectile hit chorus_flower,decorated_pot,pointed_dripstone @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onProjectilePlayerChangeBlock(EntityChangeBlockEvent event) { + public void onProjectileChangeBlock(EntityChangeBlockEvent event) { // Disabling listener if flag disabled globally if (!Flags.destroy.isGlobalyEnabled()) return; Block block = event.getBlock(); - if (block == null) - return; - // disabling event on world if (plugin.isDisabledWorldListener(block.getWorld())) return; Entity entity = event.getEntity(); - // Only check projectile - if (entity instanceof Projectile) { - Projectile projectile = (Projectile) entity; - Player player = null; - - // Get projectile player source - if (projectile.getShooter() instanceof Player) { - player = (Player) projectile.getShooter(); - } + if (!(entity instanceof Projectile)) + return; - // have player source - if (player != null) { + Player player = Utils.potentialProjectileToPlayer(entity); - if (ResAdmin.isResAdmin(player)) - return; + if (player != null) { - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.destroy, true)) - return; + if (ResAdmin.isResAdmin(player)) + return; - lm.Flag_Deny.sendMessage(player, Flags.destroy); - event.setCancelled(true); + if (FlagPermissions.has(block.getLocation(), player, Flags.destroy, true)) return; - } - // Not player source + lm.Flag_Deny.sendMessage(player, Flags.destroy); + event.setCancelled(true); + + } else { // Check potential block as a shooter which should be allowed if its inside same // residence if (Utils.isSourceBlockInsideSameResidence(entity, ClaimedResidence.getByLoc(block.getLocation()))) return; - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation()); - if (perms.has(Flags.destroy, true)) + if (FlagPermissions.has(block.getLocation(), Flags.destroy, true)) return; event.setCancelled(true); - return; } - // Event not triggered by projectile - // Only check SuspiciousBlocks - CMIMaterial blockM = CMIMaterial.get(block.getType()); - if (blockM != CMIMaterial.SUSPICIOUS_SAND && - blockM != CMIMaterial.SUSPICIOUS_GRAVEL) + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerChangeSuspiciousBlock(EntityChangeBlockEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.brush.isGlobalyEnabled()) + return; + + Block block = event.getBlock(); + // disabling event on world + if (plugin.isDisabledWorldListener(block.getWorld())) return; - // Only check player - if (!(entity instanceof Player)) + if (!(event.getEntity() instanceof Player)) return; - Player player = (Player) entity; + Material mat = block.getType(); + if (mat != Material.SUSPICIOUS_GRAVEL && mat != Material.SUSPICIOUS_SAND) + return; + + Player player = (Player) event.getEntity(); if (ResAdmin.isResAdmin(player)) return; FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.brush, perms.playerHas(player, Flags.destroy, true))) + if (perms.playerHas(player, Flags.brush, perms.playerHas(player, Flags.build, true))) return; lm.Flag_Deny.sendMessage(player, Flags.brush); event.setCancelled(true); + } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_21.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_21.java index 7ae99f182..63d21c0a5 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_21.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_21.java @@ -7,6 +7,7 @@ import org.bukkit.Material; import org.bukkit.entity.AbstractHorse; import org.bukkit.entity.Animals; +import org.bukkit.entity.Boat; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Pig; @@ -38,6 +39,7 @@ import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIMC; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Version; public class ResidenceListener1_21 implements Listener { @@ -49,31 +51,45 @@ public ResidenceListener1_21(Residence plugin) { HashMap boats = new HashMap(); - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerQuitEvent(PlayerQuitEvent event) { boats.remove(event.getPlayer().getUniqueId()); } - @EventHandler(priority = EventPriority.LOWEST) - public void OnVehicleEnterEvent(VehicleEnterEvent event) { + // Prevent player from taking away animals in Residence by pulling boat + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onAnimalEntersLeashedBoat(VehicleEnterEvent event) { // Disabling listener if flag disabled globally - if (!Flags.boarding.isGlobalyEnabled()) + if (!Flags.leash.isGlobalyEnabled()) return; + + Entity vehicle = event.getVehicle(); // disabling event on world - if (plugin.isDisabledWorldListener(event.getVehicle().getWorld())) + if (plugin.isDisabledWorldListener(vehicle.getWorld())) + return; + + if (!(vehicle instanceof Boat)) return; Entity entity = event.getEntered(); - if (!(entity instanceof LivingEntity)) + if (!(entity instanceof LivingEntity) || !Utils.isAnimal(entity)) return; - if (!Utils.isAnimal(entity)) - return; + if (Version.isPaperBranch()) { + // if vehicle is not leashed, skip check + if (vehicle instanceof io.papermc.paper.entity.Leashable + && !((io.papermc.paper.entity.Leashable) vehicle).isLeashed()) { + return; + } + + } else if (Version.isCurrentEqualOrHigher(Version.v1_21_R7)) { + // spigot + if (vehicle instanceof org.bukkit.entity.Leashable + && !((org.bukkit.entity.Leashable) vehicle).isLeashed()) { + return; + } - if (FlagPermissions.getPerms(entity.getLocation()).has(Flags.boarding, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; } ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); @@ -108,6 +124,28 @@ public void OnVehicleEnterEvent(VehicleEnterEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onAnimalEnterVehicle(VehicleEnterEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.boarding.isGlobalyEnabled()) + return; + + Entity entity = event.getEntered(); + // disabling event on world + if (plugin.isDisabledWorldListener(entity.getWorld())) + return; + + if (!(entity instanceof LivingEntity)) + return; + + if (!Utils.isAnimal(entity)) + return; + + if (FlagPermissions.getPerms(entity.getLocation()).has(Flags.boarding, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST) public void OnEntityDeath(EntityDeathEvent event) { // Disabling listener if flag disabled globally diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_21_9_Paper.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_21_9_Paper.java index 036e8d577..e616dea56 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_21_9_Paper.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceListener1_21_9_Paper.java @@ -1,15 +1,18 @@ package com.bekvon.bukkit.residence.listeners; -import org.bukkit.entity.Entity; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityChangeBlockEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions; - -import net.Zrips.CMILib.Entities.CMIEntityType; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; import io.papermc.paper.event.entity.ItemTransportingEntityValidateTargetEvent; @@ -23,19 +26,18 @@ public ResidenceListener1_21_9_Paper(Residence plugin) { @EventHandler(priority = EventPriority.LOWEST) public void onCopperGolemInteract(ItemTransportingEntityValidateTargetEvent event) { + + if (!event.isAllowed()) + return; // Disabling listener if flag disabled globally if (!Flags.golemopenchest.isGlobalyEnabled()) return; - Entity entity = event.getEntity(); - if (entity == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(entity.getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (CMIEntityType.get(entity) != CMIEntityType.COPPER_GOLEM) + if (event.getEntityType() != EntityType.COPPER_GOLEM) return; FlagPermissions perms = FlagPermissions.getPerms(event.getBlock().getLocation()); @@ -45,4 +47,43 @@ public void onCopperGolemInteract(ItemTransportingEntityValidateTargetEvent even event.setAllowed(false); } + + // Prevent external copper golems from forming statues inside Residence + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onCopperGolemStatueForm(EntityChangeBlockEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.build.isGlobalyEnabled()) + return; + + Block block = event.getBlock(); + // disabling event on world + if (plugin.isDisabledWorldListener(block.getWorld())) + return; + + if (event.getEntityType() != EntityType.COPPER_GOLEM) + return; + + if (event.getTo() != Material.OXIDIZED_COPPER_GOLEM_STATUE) + return; + + ClaimedResidence statueRes = ClaimedResidence.getByLoc(block.getLocation()); + if (statueRes == null) + return; + + Location entSpawnLoc = event.getEntity().getOrigin(); + if (entSpawnLoc != null) { + + ClaimedResidence entSpawnRes = ClaimedResidence.getByLoc(entSpawnLoc); + + if (entSpawnRes != null && (entSpawnRes == statueRes || entSpawnRes.isOwner(statueRes.getOwner()))) + return; + + } + + if (statueRes.getPermissions().has(Flags.build, true)) + return; + + event.setCancelled(true); + + } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5f77087cd..1070d56c4 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -982,6 +982,73 @@ public static boolean isEmptyBlock(Block block) { return false; } + private boolean isBlockFertilizable(CMIMaterial block) { + if (block.containsCriteria(CMIMC.SAPLING)) { + return true; + } + // 1.17+ has BlockFertilizeEvent, only need to check the Sapling above + if (Version.isCurrentEqualOrHigher(Version.v1_17_R1)) { + return false; + } + switch (block) { + case COCOA: + case GRASS_BLOCK: + case KELP: + case KELP_PLANT: + case SEAGRASS: + case SEA_PICKLE: + case SHORT_GRASS: + return true; + default: + break; + } + return false; + } + + private boolean isBuildClickBlock(CMIMaterial block, CMIMaterial held) { + if(held == CMIMaterial.BONE_MEAL) { + return isBlockFertilizable(block); + } + if (block.containsCriteria(CMIMC.SIGN)) { + return held.containsCriteria(CMIMC.DYE) || held == CMIMaterial.HONEYCOMB; + } + switch (block) { + case PUMPKIN: + return held == CMIMaterial.SHEARS; + case REDSTONE_WIRE: + return true; + case ROOTED_DIRT: + // check Hoe interact Rooted_Dirt, Fix upstream dupe + // bug(https://github.com/PaperMC/Paper/issues/13536) + return held.name().contains("_HOE"); + case SPAWNER: + case TRIAL_SPAWNER: + return held.containsCriteria(CMIMC.SPAWNEGG); + default: + break; + } + return false; + } + + private boolean isBuildClickBlockFace(CMIMaterial block, CMIMaterial held) { + switch (held) { + case ARMOR_STAND: + return true; + case COCOA_BEANS: + return block == CMIMaterial.JUNGLE_LOG || block == CMIMaterial.JUNGLE_WOOD; + default: + break; + } + return false; + } + + private boolean isBuildClickBlockTop(CMIMaterial block, CMIMaterial held) { + if (held == CMIMaterial.END_CRYSTAL) { + return block == CMIMaterial.BEDROCK || block == CMIMaterial.OBSIDIAN; + } + return false; + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBuildWithSpecificItems(PlayerInteractEvent event) { // Disabling listener if flag disabled globally @@ -995,101 +1062,53 @@ public void onPlayerBuildWithSpecificItems(PlayerInteractEvent event) { if (plugin.isDisabledWorldListener(block.getWorld())) return; - Player player = event.getPlayer(); - if (player.hasMetadata("NPC") || ResAdmin.isResAdmin(player)) - return; - - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + Location loc = null; + switch (event.getAction()) { + case RIGHT_CLICK_BLOCK: + CMIMaterial blockType = CMIMaterial.get(block.getType()); CMIMaterial heldItem = CMIMaterial.get(event.getItem()); - CMIMaterial bType = CMIMaterial.get(block.getType()); + if (isBuildClickBlock(blockType, heldItem)) { + loc = block.getLocation(); - // Dye Interact Sign, change Monster_Spawner or Pumpkin - // check Hoe Interact Rooted_Dirt, Fix upstream dupe - // bug(https://github.com/PaperMC/Paper/issues/13536) - if ((bType.containsCriteria(CMIMC.SIGN) && heldItem.containsCriteria(CMIMC.DYE)) - || - ((bType == CMIMaterial.SPAWNER || bType == CMIMaterial.TRIAL_SPAWNER) && heldItem.containsCriteria(CMIMC.SPAWNEGG)) - || - (bType == CMIMaterial.PUMPKIN && heldItem == CMIMaterial.SHEARS) - || - (bType == CMIMaterial.ROOTED_DIRT && heldItem.name().contains("_HOE"))) { - - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true))) - return; + } else if (isBuildClickBlockFace(blockType, heldItem)) { + loc = block.getRelative(event.getBlockFace()).getLocation(); - lm.Flag_Deny.sendMessage(player, Flags.build); - event.setCancelled(true); - return; - } + } else if (isBuildClickBlockTop(blockType, heldItem)) { + loc = block.getLocation().clone().add(0, 1, 0); - // place Armor_Stand or End_Crystal - // Bone_Meal Interact block, Cocoa_BeansS checks maybe for lower versions - if (heldItem == CMIMaterial.ARMOR_STAND - || - (heldItem == CMIMaterial.END_CRYSTAL && (bType == CMIMaterial.BEDROCK || bType == CMIMaterial.OBSIDIAN)) - || - (heldItem == CMIMaterial.COCOA_BEANS && (bType == CMIMaterial.JUNGLE_LOG || bType == CMIMaterial.JUNGLE_WOOD)) - || - (heldItem == CMIMaterial.BONE_MEAL && (bType == CMIMaterial.GRASS_BLOCK || - bType == CMIMaterial.SHORT_GRASS || - bType == CMIMaterial.TALL_SEAGRASS || - bType == CMIMaterial.MOSS_BLOCK || - bType == CMIMaterial.BIG_DRIPLEAF_STEM || - bType == CMIMaterial.BIG_DRIPLEAF || - bType == CMIMaterial.SMALL_DRIPLEAF || - bType == CMIMaterial.COCOA || - bType.containsCriteria(CMIMC.SAPLING)))) { - - FlagPermissions perms = FlagPermissions.getPerms(block.getRelative(event.getBlockFace()).getLocation(), player); - if (perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true))) - return; - - lm.Flag_Deny.sendMessage(player, Flags.build); - event.setCancelled(true); - return; } + break; + case LEFT_CLICK_BLOCK: + if (block.getRelative(event.getBlockFace()).getType() == Material.FIRE) { + loc = block.getLocation(); + } + break; + default: + return; + } - // place Boat or Minecart - if (Flags.vehicleplacing.isGlobalyEnabled()) { - - if (heldItem.containsCriteria(CMIMC.BOAT)) { - FlagPermissions perms = FlagPermissions.getPerms(block.getRelative(event.getBlockFace()).getLocation(), player); - if (perms.playerHas(player, Flags.vehicleplacing, perms.playerHas(player, Flags.build, true))) - return; - - lm.Flag_Deny.sendMessage(player, Flags.vehicleplacing); - event.setCancelled(true); - return; - } - if (heldItem.containsCriteria(CMIMC.MINECART) && bType.containsCriteria(CMIMC.RAIL)) { - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.vehicleplacing, perms.playerHas(player, Flags.build, true))) - return; + if (loc == null) + return; - lm.Flag_Deny.sendMessage(player, Flags.vehicleplacing); - event.setCancelled(true); - return; - } - } + Player player = event.getPlayer(); + if (player.hasMetadata("NPC") || ResAdmin.isResAdmin(player)) + return; - } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - // Check extinguish Fire by hand, this checks maybe for lower versions - if (Material.FIRE != block.getRelative(event.getBlockFace()).getType()) - return; + FlagPermissions perms = FlagPermissions.getPerms(loc, player); + if (perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true))) + return; - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true))) - return; + lm.Flag_Deny.sendMessage(player, Flags.build); + event.setCancelled(true); - lm.Flag_Deny.sendMessage(player, Flags.build); - event.setCancelled(true); - } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerStepOn(PlayerInteractEvent event) { + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerStepOnPressurePlate(PlayerInteractEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.pressure.isGlobalyEnabled()) + return; Block block = event.getClickedBlock(); if (block == null) @@ -1101,31 +1120,48 @@ public void onPlayerStepOn(PlayerInteractEvent event) { if (event.getAction() != Action.PHYSICAL) return; + if (!CMIMaterial.get(block.getType()).containsCriteria(CMIMC.PRESSUREPLATE)) + return; + Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) + if (player.hasMetadata("NPC") || ResAdmin.isResAdmin(player)) return; - CMIMaterial mat = CMIMaterial.get(block.getType()); - if (mat.isPlate()) { + FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); + if (perms.playerHas(player, Flags.pressure, (perms.playerHas(player, Flags.use, true)))) + return; - if (ResAdmin.isResAdmin(player)) - return; + event.setCancelled(true); + } - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.pressure, (perms.playerHas(player, Flags.use, true)))) - return; + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerStepOnFarmland(PlayerInteractEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.trample.isGlobalyEnabled()) + return; - event.setCancelled(true); + Block block = event.getClickedBlock(); + if (block == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(block.getWorld())) + return; - } else if (mat == CMIMaterial.FARMLAND) { + if (event.getAction() != Action.PHYSICAL) + return; - FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); - if (perms.playerHas(player, Flags.trample, (perms.playerHas(player, Flags.build, true)))) - return; + if (CMIMaterial.get(block.getType()) != CMIMaterial.FARMLAND) + return; - event.setCancelled(true); + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; - } + FlagPermissions perms = FlagPermissions.getPerms(block.getLocation(), player); + if (perms.playerHas(player, Flags.trample, (perms.playerHas(player, Flags.build, true)))) + return; + + event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST) @@ -1444,12 +1480,29 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { } } - private static boolean canHaveContainer(Entity entity) { - - if (Version.isCurrentEqualOrHigher(Version.v1_19_R1)) { - return ResidenceListener1_19.canHaveContainer1_19(entity); + private boolean canHaveContainer(Entity entity, Player player) { + CMIEntityType type = CMIEntityType.get(entity); + if (type != null) { + // Click to open container entities + switch (type) { + case ALLAY: + case CHEST_MINECART: + case FURNACE_MINECART: + case HOPPER_MINECART: + return true; + default: + break; + } } - return entity instanceof AbstractHorse; + // Click requires sneaking to open these entity containers + // Avoid overriding Flags.riding + if (player.isSneaking()) { + if (Version.isCurrentEqualOrHigher(Version.v1_19_R1)) { + return ResidenceListener1_19.canHaveContainer1_19(entity); + } + return entity instanceof AbstractHorse; + } + return false; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1467,14 +1520,8 @@ public void onPlayerInteractEntityInv(PlayerInteractEntityEvent event) { return; Entity entity = event.getRightClicked(); - CMIEntityType type = CMIEntityType.get(entity); - if ((player.isSneaking() && canHaveContainer(entity)) - || - (type == CMIEntityType.CHEST_MINECART || - type == CMIEntityType.FURNACE_MINECART || - type == CMIEntityType.HOPPER_MINECART || - type == CMIEntityType.ALLAY)) { + if (canHaveContainer(entity, player)) { if (FlagPermissions.has(entity.getLocation(), player, Flags.container, true)) return; @@ -1514,6 +1561,9 @@ public void onPlayerInteractEntityInv(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerRideVehicle(PlayerInteractEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.riding.isGlobalyEnabled()) + return; Entity entity = event.getRightClicked(); // disabling event on world @@ -1523,41 +1573,96 @@ public void onPlayerRideVehicle(PlayerInteractEntityEvent event) { if (!(entity instanceof Vehicle)) return; + CMIEntityType type = CMIEntityType.get(entity); + if (type != null) { + // Non-rideable Vehicles + switch (type) { + case CHEST_MINECART: + case COMMAND_BLOCK_MINECART: + case FURNACE_MINECART: + case HOPPER_MINECART: + case SPAWNER_MINECART: + case TNT_MINECART: + return; + default: + break; + } + } + Player player = event.getPlayer(); if (ResAdmin.isResAdmin(player)) return; - CMIEntityType type = CMIEntityType.get(entity); + if (FlagPermissions.has(entity.getLocation(), player, Flags.riding, true)) + return; - if (type == CMIEntityType.COMMAND_BLOCK_MINECART) { - // Disabling listener if flag disabled globally - if (!Flags.commandblock.isGlobalyEnabled()) - return; + lm.Flag_Deny.sendMessage(player, Flags.riding); + event.setCancelled(true); - if (FlagPermissions.has(entity.getLocation(), player, Flags.commandblock, true)) - return; + } - lm.Flag_Deny.sendMessage(player, Flags.commandblock); - event.setCancelled(true); + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractCommandBlockMinecart(PlayerInteractEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.commandblock.isGlobalyEnabled()) return; - } + Entity entity = event.getRightClicked(); + // disabling event on world + if (plugin.isDisabledWorldListener(entity.getWorld())) + return; + if (CMIEntityType.get(entity) != CMIEntityType.COMMAND_BLOCK_MINECART) + return; + + Player player = event.getPlayer(); + if (ResAdmin.isResAdmin(player)) + return; + + if (FlagPermissions.has(entity.getLocation(), player, Flags.commandblock, true)) + return; + + lm.Flag_Deny.sendMessage(player, Flags.commandblock); + event.setCancelled(true); + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerPlaceVehicle(PlayerInteractEvent event) { // Disabling listener if flag disabled globally - if (!Flags.riding.isGlobalyEnabled()) + if (!Flags.vehicleplacing.isGlobalyEnabled()) return; - // Non-rideable Vehicles - if (type == CMIEntityType.CHEST_MINECART || - type == CMIEntityType.FURNACE_MINECART || - type == CMIEntityType.HOPPER_MINECART || - type == CMIEntityType.TNT_MINECART) { + Block block = event.getClickedBlock(); + if (block == null) return; + // disabling event on world + if (plugin.isDisabledWorldListener(block.getWorld())) + return; + + Location loc = null; + + CMIMaterial heldItem = CMIMaterial.get(event.getItem()); + + if (heldItem.containsCriteria(CMIMC.BOAT)) { + loc = block.getRelative(event.getBlockFace()).getLocation(); + } else if (heldItem.containsCriteria(CMIMC.MINECART) + && CMIMaterial.get(block.getType()).containsCriteria(CMIMC.RAIL)) { + loc = block.getLocation(); } - if (FlagPermissions.has(entity.getLocation(), player, Flags.riding, true)) + + if (loc == null) return; - lm.Flag_Deny.sendMessage(player, Flags.riding); + Player player = event.getPlayer(); + if (ResAdmin.isResAdmin(player)) + return; + + FlagPermissions perms = FlagPermissions.getPerms(loc, player); + if (perms.playerHas(player, Flags.vehicleplacing, perms.playerHas(player, Flags.build, true))) + return; + + lm.Flag_Deny.sendMessage(player, Flags.vehicleplacing); event.setCancelled(true); } diff --git a/src/main/java/com/bekvon/bukkit/residence/utils/Utils.java b/src/main/java/com/bekvon/bukkit/residence/utils/Utils.java index ba87e3779..b5a4f9afb 100644 --- a/src/main/java/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/main/java/com/bekvon/bukkit/residence/utils/Utils.java @@ -258,13 +258,18 @@ public static Location convertStringToLocation(String map) { } public static boolean isAnimal(Entity ent) { + if (ent == null) { + return false; + } + CMIEntityType type = CMIEntityType.get(ent); return (ent instanceof Animals || ent instanceof WaterMob || ent instanceof NPC || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || - (ent != null && (CMIEntityType.get(ent) == CMIEntityType.ALLAY || CMIEntityType.get(ent) == CMIEntityType.COPPER_GOLEM))); + type == CMIEntityType.ALLAY || + type == CMIEntityType.COPPER_GOLEM); } public static boolean isArmorStandEntity(EntityType ent) {