mirror of
https://github.com/essentials/Essentials.git
synced 2025-08-21 14:03:54 +02:00
Merge pull request #429 from GunfighterJ/master
[Fix] Update Essentials Protect
This commit is contained in:
@@ -11,27 +11,33 @@ import net.ess3.storage.StorageObject;
|
|||||||
public class Prevent implements StorageObject
|
public class Prevent implements StorageObject
|
||||||
{
|
{
|
||||||
|
|
||||||
private boolean lavaFlow = false;
|
private boolean lavaFlow = false;
|
||||||
private boolean waterFlow = false;
|
private boolean waterFlow = false;
|
||||||
// private boolean waterbucketFlow = false; TODO: Test if this still works
|
// private boolean waterbucketFlow = false; TODO: Test if this still works
|
||||||
private boolean firespread = true;
|
private boolean firespread = true;
|
||||||
private boolean lavaFirespread = true;
|
private boolean lavaFirespread = true;
|
||||||
private boolean lightningFirespread = true;
|
private boolean lightningFirespread = true;
|
||||||
private boolean portalCreation = false;
|
private boolean portalCreation = false;
|
||||||
private boolean tntExplosion = false;
|
private boolean tntBlockdamage = false;
|
||||||
private boolean fireballExplosion = false;
|
private boolean tntPlayerdamage = false;
|
||||||
private boolean fireballFire = false;
|
private boolean tntMinecartBlockdamage = false;
|
||||||
private boolean creeperExplosion = false;
|
private boolean tntMinecartPlayerdamage = false;
|
||||||
private boolean creeperBlockdamage = false;
|
private boolean fireballBlockdamage = false;
|
||||||
private boolean enderdragonBlockdamage = false;
|
private boolean fireballPlayerdamage = false;
|
||||||
private boolean witherSpawnExplosion = false;
|
private boolean fireballFire = false;
|
||||||
private boolean witherskullExplosion = false;
|
private boolean creeperBlockdamage = false;
|
||||||
private boolean witherBlockreplace = false;
|
private boolean creeperPlayerdamage = false;
|
||||||
private boolean endermanPickup = false;
|
private boolean enderdragonBlockdamage = false;
|
||||||
private boolean villagerDeath = false;
|
private boolean witherSpawnBlockdamage = false;
|
||||||
@Comment(
|
private boolean witherSpawnPlayerdamage = false;
|
||||||
{
|
private boolean witherskullBlockdamage = false;
|
||||||
"Monsters won't follow players", "permission essentials.protect.entitytarget.bypass disables this"
|
private boolean witherskullPlayerdamage = false;
|
||||||
})
|
private boolean witherBlockreplace = false;
|
||||||
private boolean entitytarget = false;
|
private boolean endermanPickup = false;
|
||||||
|
private boolean villagerDeath = false;
|
||||||
|
@Comment(
|
||||||
|
{
|
||||||
|
"Monsters won't follow players", "permission essentials.protect.entitytarget.bypass disables this"
|
||||||
|
})
|
||||||
|
private boolean entitytarget = false;
|
||||||
}
|
}
|
@@ -10,7 +10,7 @@ import net.ess3.storage.StorageObject;
|
|||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
public class Protect implements StorageObject
|
public class Protect implements StorageObject
|
||||||
{
|
{
|
||||||
@Comment("General physics/behavior modifications")
|
@Comment("General entity/physics behavior.")
|
||||||
private Prevent prevent = new Prevent();
|
private Prevent prevent = new Prevent();
|
||||||
@Comment(
|
@Comment(
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
package net.ess3.protect;
|
package net.ess3.protect;
|
||||||
|
|
||||||
|
import net.ess3.settings.protect.Prevent;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
|
import org.bukkit.entity.minecart.ExplosiveMinecart;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@@ -10,236 +12,255 @@ import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
|
|||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||||
|
|
||||||
//TODO: remove unnecessary return statements
|
|
||||||
public class EssentialsProtectEntityListener implements Listener
|
public class EssentialsProtectEntityListener implements Listener
|
||||||
{
|
{
|
||||||
private final IProtect prot;
|
private final IProtect prot;
|
||||||
|
|
||||||
public EssentialsProtectEntityListener(final IProtect prot)
|
public EssentialsProtectEntityListener(final IProtect prot)
|
||||||
{
|
|
||||||
super();
|
|
||||||
this.prot = prot;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
||||||
public void onEntityDamage(final EntityDamageEvent event)
|
|
||||||
{
|
|
||||||
final ProtectHolder settings = prot.getSettings();
|
|
||||||
final Entity target = event.getEntity();
|
|
||||||
|
|
||||||
if (target instanceof Villager && settings.getData().getPrevent().isVillagerDeath())
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Player user = target instanceof Player ? (Player)target : null;
|
|
||||||
if (target instanceof Player && event instanceof EntityDamageByBlockEvent)
|
|
||||||
{
|
|
||||||
final DamageCause cause = event.getCause();
|
|
||||||
|
|
||||||
if (cause == DamageCause.CONTACT && (Permissions.PREVENTDAMAGE_CONTACT.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (cause == DamageCause.LAVA && (Permissions.PREVENTDAMAGE_LAVADAMAGE.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (cause == DamageCause.BLOCK_EXPLOSION && (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(
|
|
||||||
user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (target instanceof Player && event instanceof EntityDamageByEntityEvent)
|
|
||||||
{
|
|
||||||
final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event;
|
|
||||||
final Entity eAttack = edEvent.getDamager();
|
|
||||||
final Player attacker = eAttack instanceof Player ? (Player)eAttack : null;
|
|
||||||
|
|
||||||
// PVP Settings
|
|
||||||
if (target instanceof Player && eAttack instanceof Player && (!Permissions.PVP.isAuthorized(user) || !Permissions.PVP.isAuthorized(attacker)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Creeper explode prevention
|
|
||||||
if (eAttack instanceof Creeper && settings.getData().getPrevent().isCreeperExplosion() || (Permissions.PREVENTDAMAGE_CREEPER.isAuthorized(
|
|
||||||
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) && (Permissions.PREVENTDAMAGE_FIREBALL.isAuthorized(
|
|
||||||
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((event.getEntity() instanceof WitherSkull && Permissions.PREVENTDAMAGE_WITHERSKULL.isAuthorized(
|
|
||||||
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (eAttack instanceof TNTPrimed && (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (edEvent.getDamager() instanceof Projectile && ((Permissions.PREVENTDAMAGE_PROJECTILES.isAuthorized(
|
|
||||||
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(
|
|
||||||
user)) || (((Projectile)edEvent.getDamager()).getShooter() instanceof Player && (!Permissions.PVP.isAuthorized(
|
|
||||||
user) || !Permissions.PVP.isAuthorized((Player)((Projectile)edEvent.getDamager()).getShooter())))))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final DamageCause cause = event.getCause();
|
|
||||||
if (target instanceof Player)
|
|
||||||
{
|
|
||||||
if (cause == DamageCause.FALL && (Permissions.PREVENTDAMAGE_FALL.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cause == DamageCause.SUFFOCATION && (Permissions.PREVENTDAMAGE_SUFFOCATION.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(
|
|
||||||
user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ((cause == DamageCause.FIRE || cause == DamageCause.FIRE_TICK) && (Permissions.PREVENTDAMAGE_FIRE.isAuthorized(
|
|
||||||
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (cause == DamageCause.DROWNING && (Permissions.PREVENTDAMAGE_DROWNING.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (cause == DamageCause.LIGHTNING && (Permissions.PREVENTDAMAGE_LIGHTNING.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(
|
|
||||||
user)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (cause == DamageCause.WITHER && (Permissions.PREVENTDAMAGE_WITHER.isAuthorized(user)) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// return statements are probably not needed here
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
||||||
public void onEntityExplode(final EntityExplodeEvent event)
|
|
||||||
{
|
|
||||||
final ProtectHolder settings = prot.getSettings();
|
|
||||||
final int maxHeight = settings.getData().getCreeperMaxHeight();
|
|
||||||
|
|
||||||
if (event.getEntity() instanceof EnderDragon && settings.getData().getPrevent().isEnderdragonBlockdamage())
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (event.getEntity() instanceof Wither && settings.getData().getPrevent().isWitherSpawnExplosion())
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (event.getEntity() instanceof Creeper && (settings.getData().getPrevent().isCreeperExplosion() || settings.getData().getPrevent().isCreeperBlockdamage() || (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (event.getEntity() instanceof TNTPrimed && settings.getData().getPrevent().isTntExplosion())
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) && settings.getData().getPrevent().isFireballExplosion())
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if ((event.getEntity() instanceof WitherSkull) && settings.getData().getPrevent().isWitherskullExplosion())
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
||||||
public void onEntityTarget(final EntityTargetEvent event)
|
|
||||||
{
|
|
||||||
final Entity entity = event.getTarget();
|
|
||||||
if (entity == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entity.getType() == EntityType.PLAYER)
|
|
||||||
{
|
|
||||||
final Player user = (Player)event.getTarget();
|
|
||||||
if ((event.getReason() == TargetReason.CLOSEST_PLAYER || event.getReason() == TargetReason.TARGET_ATTACKED_ENTITY || event.getReason() == TargetReason.PIG_ZOMBIE_TARGET || event.getReason() == TargetReason.RANDOM_TARGET || event.getReason() == TargetReason.TARGET_ATTACKED_OWNER || event.getReason() == TargetReason.OWNER_ATTACKED_TARGET) && !prot.getSettings().getData().getPrevent().isEntitytarget() && !Permissions.ENTITY_TARGET_BYPASS.isAuthorized(
|
|
||||||
user, event.getEntity().getType().getName().toLowerCase()))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onExplosionPrime(final ExplosionPrimeEvent event)
|
|
||||||
{
|
|
||||||
final ProtectHolder settings = prot.getSettings();
|
|
||||||
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) && settings.getData().getPrevent().isFireballFire())
|
|
||||||
{
|
|
||||||
event.setFire(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
||||||
public void onEntityChangeBlock(final EntityChangeBlockEvent event)
|
|
||||||
{
|
|
||||||
final ProtectHolder settings = prot.getSettings();
|
|
||||||
if (event.getEntityType() == EntityType.ENDERMAN && settings.getData().getPrevent().isEndermanPickup())
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (event.getEntityType() == EntityType.WITHER && settings.getData().getPrevent().isWitherBlockreplace())
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled=true)
|
|
||||||
public void onPaintingBreak(final HangingBreakByEntityEvent event)
|
|
||||||
{
|
{
|
||||||
final ProtectHolder settings = prot.getSettings();
|
super();
|
||||||
if (event.getCause() == HangingBreakEvent.RemoveCause.ENTITY
|
this.prot = prot;
|
||||||
&& event.getRemover() instanceof Creeper
|
}
|
||||||
&& settings.getData().getPrevent().isCreeperBlockdamage() )
|
|
||||||
|
private Prevent getSettings()
|
||||||
|
{
|
||||||
|
return prot.getSettings().getData().getPrevent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onEntityDamage(final EntityDamageEvent event)
|
||||||
|
{
|
||||||
|
final Entity target = event.getEntity();
|
||||||
|
|
||||||
|
if (target instanceof Villager && getSettings().isVillagerDeath())
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Player user = target instanceof Player ? (Player) target : null;
|
||||||
|
if (target instanceof Player && event instanceof EntityDamageByBlockEvent)
|
||||||
|
{
|
||||||
|
final DamageCause cause = event.getCause();
|
||||||
|
|
||||||
|
if (cause == DamageCause.CONTACT && (Permissions.PREVENTDAMAGE_CONTACT.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (cause == DamageCause.LAVA && (Permissions.PREVENTDAMAGE_LAVADAMAGE.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (cause == DamageCause.BLOCK_EXPLOSION && (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target instanceof Player && event instanceof EntityDamageByEntityEvent)
|
||||||
|
{
|
||||||
|
final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent) event;
|
||||||
|
final Entity eAttack = edEvent.getDamager();
|
||||||
|
final Player attacker = eAttack instanceof Player ? (Player) eAttack : null;
|
||||||
|
|
||||||
|
// PVP Settings
|
||||||
|
if (target instanceof Player && eAttack instanceof Player && (!Permissions.PVP.isAuthorized(user) || !Permissions.PVP.isAuthorized(attacker)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Player damage prevention section
|
||||||
|
if (eAttack instanceof Creeper && getSettings().isCreeperPlayerdamage() || (Permissions.PREVENTDAMAGE_CREEPER.isAuthorized(
|
||||||
|
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eAttack instanceof ExplosiveMinecart && getSettings().isTntMinecartPlayerdamage() || (Permissions.PREVENTDAMAGE_TNTMINECART.isAuthorized(
|
||||||
|
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball || event.getEntity() instanceof LargeFireball) && (Permissions.PREVENTDAMAGE_FIREBALL.isAuthorized(
|
||||||
|
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((eAttack instanceof WitherSkull && Permissions.PREVENTDAMAGE_WITHERSKULL.isAuthorized(
|
||||||
|
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((eAttack instanceof Wither && event.getCause() == DamageCause.ENTITY_EXPLOSION) && getSettings().isWitherSpawnPlayerdamage() || (Permissions.PREVENTDAMAGE_WITHER.isAuthorized(
|
||||||
|
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eAttack instanceof TNTPrimed && (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (edEvent.getDamager() instanceof Projectile && ((Permissions.PREVENTDAMAGE_PROJECTILES.isAuthorized(
|
||||||
|
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(
|
||||||
|
user)) || (((Projectile) edEvent.getDamager()).getShooter() instanceof Player && (!Permissions.PVP.isAuthorized(
|
||||||
|
user) || !Permissions.PVP.isAuthorized((Player) ((Projectile) edEvent.getDamager()).getShooter())))))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final DamageCause cause = event.getCause();
|
||||||
|
if (target instanceof Player)
|
||||||
|
{
|
||||||
|
if (cause == DamageCause.FALL && (Permissions.PREVENTDAMAGE_FALL.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cause == DamageCause.SUFFOCATION && (Permissions.PREVENTDAMAGE_SUFFOCATION.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(
|
||||||
|
user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((cause == DamageCause.FIRE || cause == DamageCause.FIRE_TICK) && (Permissions.PREVENTDAMAGE_FIRE.isAuthorized(
|
||||||
|
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (cause == DamageCause.DROWNING && (Permissions.PREVENTDAMAGE_DROWNING.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (cause == DamageCause.LIGHTNING && (Permissions.PREVENTDAMAGE_LIGHTNING.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(
|
||||||
|
user)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
if (cause == DamageCause.WITHER && (Permissions.PREVENTDAMAGE_WITHER.isAuthorized(user)) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onEntityExplode(final EntityExplodeEvent event)
|
||||||
|
{
|
||||||
|
final int maxHeight = prot.getSettings().getData().getCreeperMaxHeight();
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
|
||||||
|
//Block damage prevention section
|
||||||
|
if (entity instanceof EnderDragon && getSettings().isEnderdragonBlockdamage())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
else if (entity instanceof Wither && getSettings().isWitherSpawnBlockdamage())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
else if (entity instanceof Creeper && (getSettings().isCreeperBlockdamage() || getSettings().isCreeperBlockdamage()
|
||||||
|
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
|
||||||
|
}
|
||||||
|
else if (entity instanceof TNTPrimed && getSettings().isTntBlockdamage())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
else if ((entity instanceof Fireball || entity instanceof SmallFireball) && getSettings().isFireballBlockdamage())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
else if ((entity instanceof WitherSkull) && getSettings().isWitherskullBlockdamage())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
else if ((entity instanceof ExplosiveMinecart) && getSettings().isTntMinecartBlockdamage())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onEntityTarget(final EntityTargetEvent event)
|
||||||
|
{
|
||||||
|
final Entity entity = event.getTarget();
|
||||||
|
if (entity == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity.getType() == EntityType.PLAYER)
|
||||||
|
{
|
||||||
|
final Player user = (Player) event.getTarget();
|
||||||
|
if ((event.getReason() == TargetReason.CLOSEST_PLAYER || event.getReason() == TargetReason.TARGET_ATTACKED_ENTITY || event.getReason() == TargetReason.PIG_ZOMBIE_TARGET
|
||||||
|
|| event.getReason() == TargetReason.RANDOM_TARGET || event.getReason() == TargetReason.TARGET_ATTACKED_OWNER
|
||||||
|
|| event.getReason() == TargetReason.OWNER_ATTACKED_TARGET)
|
||||||
|
&& !prot.getSettings().getData().getPrevent().isEntitytarget() && !Permissions.ENTITY_TARGET_BYPASS.isAuthorized(
|
||||||
|
user, event.getEntity().getType().getName().toLowerCase()))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public void onExplosionPrime(final ExplosionPrimeEvent event)
|
||||||
|
{
|
||||||
|
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) && getSettings().isFireballFire())
|
||||||
|
{
|
||||||
|
event.setFire(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onEntityChangeBlock(final EntityChangeBlockEvent event)
|
||||||
|
{
|
||||||
|
if (event.getEntityType() == EntityType.ENDERMAN && getSettings().isEndermanPickup())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
if (event.getEntityType() == EntityType.WITHER && getSettings().isWitherBlockreplace())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onPaintingBreak(final HangingBreakByEntityEvent event)
|
||||||
|
{
|
||||||
|
final ProtectHolder settings = prot.getSettings();
|
||||||
|
Entity remover = event.getRemover();
|
||||||
|
if ((event.getCause() == HangingBreakEvent.RemoveCause.ENTITY)
|
||||||
|
&& ((remover instanceof Creeper) && getSettings().isCreeperBlockdamage())
|
||||||
|
|| ((remover instanceof Wither) && getSettings().isWitherSpawnBlockdamage())
|
||||||
|
|| ((remover instanceof Fireball) && getSettings().isFireballBlockdamage())
|
||||||
|
|| ((remover instanceof TNTPrimed) && getSettings().isTntBlockdamage())
|
||||||
|
|| ((remover instanceof WitherSkull) && getSettings().isWitherskullBlockdamage())
|
||||||
|
|| ((remover instanceof ExplosiveMinecart) && getSettings().isTntMinecartBlockdamage()))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,68 +10,69 @@ import org.bukkit.permissions.PermissionDefault;
|
|||||||
|
|
||||||
public enum Permissions implements IPermission
|
public enum Permissions implements IPermission
|
||||||
{
|
{
|
||||||
PVP(PermissionDefault.TRUE),
|
PVP(PermissionDefault.TRUE),
|
||||||
PREVENTDAMAGE_FALL(PermissionDefault.FALSE),
|
PREVENTDAMAGE_FALL(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_CREEPER(PermissionDefault.FALSE),
|
PREVENTDAMAGE_CREEPER(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_CONTACT(PermissionDefault.FALSE),
|
PREVENTDAMAGE_CONTACT(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_FIREBALL(PermissionDefault.FALSE),
|
PREVENTDAMAGE_FIREBALL(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_PROJECTILES(PermissionDefault.FALSE),
|
PREVENTDAMAGE_PROJECTILES(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_LAVADAMAGE(PermissionDefault.FALSE),
|
PREVENTDAMAGE_LAVADAMAGE(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_TNT(PermissionDefault.FALSE),
|
PREVENTDAMAGE_TNT(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_SUFFOCATION(PermissionDefault.FALSE),
|
PREVENTDAMAGE_TNTMINECART(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_FIRE(PermissionDefault.FALSE),
|
PREVENTDAMAGE_SUFFOCATION(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_DROWNING(PermissionDefault.FALSE),
|
PREVENTDAMAGE_FIRE(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_LIGHTNING(PermissionDefault.FALSE),
|
PREVENTDAMAGE_DROWNING(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_WITHER(PermissionDefault.FALSE),
|
PREVENTDAMAGE_LIGHTNING(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_WITHERSKULL(PermissionDefault.FALSE),
|
PREVENTDAMAGE_WITHER(PermissionDefault.FALSE),
|
||||||
PREVENTDAMAGE_NONE(PermissionDefault.FALSE),
|
PREVENTDAMAGE_WITHERSKULL(PermissionDefault.FALSE),
|
||||||
USEFLINTSTEEL(PermissionDefault.TRUE);
|
PREVENTDAMAGE_NONE(PermissionDefault.FALSE),
|
||||||
private static final String base = "essentials.protect.";
|
USEFLINTSTEEL(PermissionDefault.TRUE);
|
||||||
private final String permission;
|
private static final String base = "essentials.protect.";
|
||||||
private final PermissionDefault defaultPerm;
|
private final String permission;
|
||||||
private String parent = null;
|
private final PermissionDefault defaultPerm;
|
||||||
|
private String parent = null;
|
||||||
|
|
||||||
private Permissions()
|
private Permissions()
|
||||||
{
|
{
|
||||||
this(PermissionDefault.OP);
|
this(PermissionDefault.OP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Permissions(final PermissionDefault defaultPerm)
|
private Permissions(final PermissionDefault defaultPerm)
|
||||||
{
|
{
|
||||||
permission = base + toString().toLowerCase(Locale.ENGLISH).replace('_', '.');
|
permission = base + toString().toLowerCase(Locale.ENGLISH).replace('_', '.');
|
||||||
this.defaultPerm = defaultPerm;
|
this.defaultPerm = defaultPerm;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPermissionName()
|
public String getPermissionName()
|
||||||
{
|
{
|
||||||
return permission;
|
return permission;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getParentPermission()
|
public String getParentPermission()
|
||||||
{
|
{
|
||||||
if (parent != null)
|
if (parent != null)
|
||||||
{
|
{
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return PermissionFactory.registerParentPermission(getPermissionName());
|
return PermissionFactory.registerParentPermission(getPermissionName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PermissionDefault getPermissionDefault()
|
public PermissionDefault getPermissionDefault()
|
||||||
{
|
{
|
||||||
return this.defaultPerm;
|
return this.defaultPerm;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAuthorized(final CommandSender sender)
|
public boolean isAuthorized(final CommandSender sender)
|
||||||
{
|
{
|
||||||
return PermissionFactory.checkPermission(sender, this);
|
return PermissionFactory.checkPermission(sender, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DotStarPermission ENTITY_TARGET_BYPASS = new DotStarPermission("essentials.protect.entitytarget.bypass");
|
public static DotStarPermission ENTITY_TARGET_BYPASS = new DotStarPermission("essentials.protect.entitytarget.bypass");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user