mirror of
https://github.com/essentials/Essentials.git
synced 2025-07-31 20:00:47 +02:00
Less use of Craftbukkit code, so less things will break on MC update.
Added try/catch around the tnt and creeper protection code. The event will now always canceled, even if our fake explosion code fails.
This commit is contained in:
@@ -1,13 +1,10 @@
|
|||||||
package com.earth2me.essentials;
|
package com.earth2me.essentials;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.entity.EntityCombustEvent;
|
import org.bukkit.event.entity.EntityCombustEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageByProjectileEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
import org.bukkit.event.entity.EntityListener;
|
import org.bukkit.event.entity.EntityListener;
|
||||||
@@ -52,16 +49,12 @@ public class EssentialsEntityListener extends EntityListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (event instanceof EntityDamageEvent || event instanceof EntityDamageByBlockEvent || event instanceof EntityDamageByProjectileEvent)
|
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
|
||||||
{
|
{
|
||||||
|
final Player player = (Player)event.getEntity();
|
||||||
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
|
player.setFireTicks(0);
|
||||||
{
|
player.setRemainingAir(player.getMaximumAir());
|
||||||
CraftPlayer player = (CraftPlayer)event.getEntity();
|
event.setCancelled(true);
|
||||||
player.getHandle().fireTicks = 0;
|
|
||||||
player.setRemainingAir(player.getMaximumAir());
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,7 +3,6 @@ package com.earth2me.essentials;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@@ -130,7 +129,7 @@ public final class InventoryWorkaround
|
|||||||
// More than a single stack!
|
// More than a single stack!
|
||||||
if (item.getAmount() > item.getType().getMaxStackSize())
|
if (item.getAmount() > item.getType().getMaxStackSize())
|
||||||
{
|
{
|
||||||
cinventory.setItem(firstFree, new CraftItemStack(item.getTypeId(), item.getType().getMaxStackSize(), item.getDurability()));
|
cinventory.setItem(firstFree, new ItemStack(item.getTypeId(), item.getType().getMaxStackSize(), item.getDurability()));
|
||||||
item.setAmount(item.getAmount() - item.getType().getMaxStackSize());
|
item.setAmount(item.getAmount() - item.getType().getMaxStackSize());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -4,6 +4,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.ChunkPosition;
|
import net.minecraft.server.ChunkPosition;
|
||||||
import net.minecraft.server.Packet60Explosion;
|
import net.minecraft.server.Packet60Explosion;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -52,6 +54,7 @@ public class TNTExplodeListener extends EntityListener implements Runnable
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
final Set<ChunkPosition> set = new HashSet<ChunkPosition>(event.blockList().size());
|
final Set<ChunkPosition> set = new HashSet<ChunkPosition>(event.blockList().size());
|
||||||
final Player[] players = ess.getServer().getOnlinePlayers();
|
final Player[] players = ess.getServer().getOnlinePlayers();
|
||||||
final List<ChunkPosition> blocksUnderPlayers = new ArrayList<ChunkPosition>(players.length);
|
final List<ChunkPosition> blocksUnderPlayers = new ArrayList<ChunkPosition>(players.length);
|
||||||
@@ -72,6 +75,9 @@ public class TNTExplodeListener extends EntityListener implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0F, set));
|
((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0F, set));
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
|
||||||
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,8 +6,7 @@ import com.earth2me.essentials.Util;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.craftbukkit.block.CraftCreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
import org.bukkit.entity.CreatureType;
|
|
||||||
|
|
||||||
|
|
||||||
public class Commandspawner extends EssentialsCommand
|
public class Commandspawner extends EssentialsCommand
|
||||||
@@ -45,7 +44,7 @@ public class Commandspawner extends EssentialsCommand
|
|||||||
user.sendMessage(Util.i18n("invalidMob"));
|
user.sendMessage(Util.i18n("invalidMob"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
new CraftCreatureSpawner(target).setCreatureType(mob.getType());
|
((CreatureSpawner)target.getState()).setCreatureType(mob.getType());
|
||||||
user.sendMessage(Util.format("setSpawner", mob.name));
|
user.sendMessage(Util.format("setSpawner", mob.name));
|
||||||
}
|
}
|
||||||
catch (Throwable ex)
|
catch (Throwable ex)
|
||||||
|
@@ -8,16 +8,13 @@ import com.earth2me.essentials.Mob.MobException;
|
|||||||
import com.earth2me.essentials.TargetBlock;
|
import com.earth2me.essentials.TargetBlock;
|
||||||
import com.earth2me.essentials.Util;
|
import com.earth2me.essentials.Util;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import net.minecraft.server.EntityWolf;
|
|
||||||
import net.minecraft.server.PathEntity;
|
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.craftbukkit.entity.CraftCreeper;
|
import org.bukkit.entity.Creeper;
|
||||||
import org.bukkit.craftbukkit.entity.CraftSheep;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftSlime;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftWolf;
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Sheep;
|
||||||
|
import org.bukkit.entity.Slime;
|
||||||
|
import org.bukkit.entity.Wolf;
|
||||||
|
|
||||||
|
|
||||||
public class Commandspawnmob extends EssentialsCommand
|
public class Commandspawnmob extends EssentialsCommand
|
||||||
@@ -190,7 +187,7 @@ public class Commandspawnmob extends EssentialsCommand
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
((CraftSlime)spawned).setSize(Integer.parseInt(data));
|
((Slime)spawned).setSize(Integer.parseInt(data));
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -204,11 +201,11 @@ public class Commandspawnmob extends EssentialsCommand
|
|||||||
if (data.equalsIgnoreCase("random"))
|
if (data.equalsIgnoreCase("random"))
|
||||||
{
|
{
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
((CraftSheep)spawned).setColor(DyeColor.values()[rand.nextInt(DyeColor.values().length)]);
|
((Sheep)spawned).setColor(DyeColor.values()[rand.nextInt(DyeColor.values().length)]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
((CraftSheep)spawned).setColor(DyeColor.valueOf(data.toUpperCase()));
|
((Sheep)spawned).setColor(DyeColor.valueOf(data.toUpperCase()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -218,21 +215,18 @@ public class Commandspawnmob extends EssentialsCommand
|
|||||||
}
|
}
|
||||||
if ("Wolf".equalsIgnoreCase(type) && data.equalsIgnoreCase("tamed"))
|
if ("Wolf".equalsIgnoreCase(type) && data.equalsIgnoreCase("tamed"))
|
||||||
{
|
{
|
||||||
EntityWolf wolf = ((CraftWolf)spawned).getHandle();
|
Wolf wolf = ((Wolf)spawned);
|
||||||
wolf.setTamed(true);
|
wolf.setTamed(true);
|
||||||
wolf.setPathEntity((PathEntity)null);
|
wolf.setOwner(user);
|
||||||
wolf.setSitting(true);
|
wolf.setSitting(true);
|
||||||
wolf.health = 20;
|
|
||||||
wolf.setOwnerName(user.getName());
|
|
||||||
wolf.world.a(wolf, (byte)7);
|
|
||||||
}
|
}
|
||||||
if ("Wolf".equalsIgnoreCase(type) && data.equalsIgnoreCase("angry"))
|
if ("Wolf".equalsIgnoreCase(type) && data.equalsIgnoreCase("angry"))
|
||||||
{
|
{
|
||||||
((CraftWolf)spawned).setAngry(true);
|
((Wolf)spawned).setAngry(true);
|
||||||
}
|
}
|
||||||
if ("Creeper".equalsIgnoreCase(type) && data.equalsIgnoreCase("powered"))
|
if ("Creeper".equalsIgnoreCase(type) && data.equalsIgnoreCase("powered"))
|
||||||
{
|
{
|
||||||
((CraftCreeper)spawned).setPowered(true);
|
((Creeper)spawned).setPowered(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,7 +11,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.craftbukkit.block.CraftSign;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.block.SignChangeEvent;
|
import org.bukkit.event.block.SignChangeEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@@ -456,7 +455,7 @@ public class EssentialsSign
|
|||||||
public BlockSign(final Block block)
|
public BlockSign(final Block block)
|
||||||
{
|
{
|
||||||
this.block = block;
|
this.block = block;
|
||||||
this.sign = new CraftSign(block);
|
this.sign = (Sign)block.getState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String getLine(final int index)
|
public final String getLine(final int index)
|
||||||
|
@@ -7,7 +7,6 @@ import java.util.logging.Logger;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.craftbukkit.block.CraftSign;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.block.BlockBurnEvent;
|
import org.bukkit.event.block.BlockBurnEvent;
|
||||||
@@ -48,7 +47,7 @@ public class SignBlockListener extends BlockListener
|
|||||||
final int mat = block.getTypeId();
|
final int mat = block.getTypeId();
|
||||||
if (mat == Material.SIGN_POST.getId() || mat == Material.WALL_SIGN.getId())
|
if (mat == Material.SIGN_POST.getId() || mat == Material.WALL_SIGN.getId())
|
||||||
{
|
{
|
||||||
final Sign csign = new CraftSign(block);
|
final Sign csign = (Sign)block.getState();
|
||||||
for (Signs signs : Signs.values())
|
for (Signs signs : Signs.values())
|
||||||
{
|
{
|
||||||
final EssentialsSign sign = signs.getSign();
|
final EssentialsSign sign = signs.getSign();
|
||||||
|
@@ -4,7 +4,6 @@ import com.earth2me.essentials.IEssentials;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.craftbukkit.block.CraftSign;
|
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerListener;
|
import org.bukkit.event.player.PlayerListener;
|
||||||
@@ -39,7 +38,7 @@ public class SignPlayerListener extends PlayerListener
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Sign csign = new CraftSign(block);
|
final Sign csign = (Sign)block.getState();
|
||||||
for (Signs signs : Signs.values())
|
for (Signs signs : Signs.values())
|
||||||
{
|
{
|
||||||
final EssentialsSign sign = signs.getSign();
|
final EssentialsSign sign = signs.getSign();
|
||||||
|
@@ -15,7 +15,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.craftbukkit.block.CraftSign;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
|
||||||
@@ -204,7 +203,7 @@ public class SignProtection extends EssentialsSign
|
|||||||
{
|
{
|
||||||
if (b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN)
|
if (b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN)
|
||||||
{
|
{
|
||||||
final Sign sign = new CraftSign(b);
|
final Sign sign = (Sign)b.getState();
|
||||||
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]"))
|
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]"))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@@ -218,7 +217,7 @@ public class SignProtection extends EssentialsSign
|
|||||||
{
|
{
|
||||||
if (a.getType() == Material.SIGN_POST || a.getType() == Material.WALL_SIGN)
|
if (a.getType() == Material.SIGN_POST || a.getType() == Material.WALL_SIGN)
|
||||||
{
|
{
|
||||||
final Sign sign = new CraftSign(a);
|
final Sign sign = (Sign)a.getState();
|
||||||
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]"))
|
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]"))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@@ -4,6 +4,8 @@ import com.earth2me.essentials.IEssentials;
|
|||||||
import com.earth2me.essentials.User;
|
import com.earth2me.essentials.User;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.ChunkPosition;
|
import net.minecraft.server.ChunkPosition;
|
||||||
import net.minecraft.server.Packet60Explosion;
|
import net.minecraft.server.Packet60Explosion;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -12,9 +14,6 @@ import org.bukkit.block.Block;
|
|||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.craftbukkit.CraftServer;
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
import org.bukkit.craftbukkit.CraftWorld;
|
import org.bukkit.craftbukkit.CraftWorld;
|
||||||
import org.bukkit.craftbukkit.entity.CraftFireball;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftTNTPrimed;
|
|
||||||
import org.bukkit.entity.Creeper;
|
import org.bukkit.entity.Creeper;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Fireball;
|
import org.bukkit.entity.Fireball;
|
||||||
@@ -38,13 +37,13 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
{
|
{
|
||||||
private final transient IProtect prot;
|
private final transient IProtect prot;
|
||||||
private final transient IEssentials ess;
|
private final transient IEssentials ess;
|
||||||
|
|
||||||
public EssentialsProtectEntityListener(final IProtect prot)
|
public EssentialsProtectEntityListener(final IProtect prot)
|
||||||
{
|
{
|
||||||
this.prot = prot;
|
this.prot = prot;
|
||||||
this.ess = prot.getEssentials();
|
this.ess = prot.getEssentials();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEntityDamage(final EntityDamageEvent event)
|
public void onEntityDamage(final EntityDamageEvent event)
|
||||||
{
|
{
|
||||||
@@ -57,7 +56,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
if (event instanceof EntityDamageByBlockEvent)
|
if (event instanceof EntityDamageByBlockEvent)
|
||||||
{
|
{
|
||||||
final DamageCause cause = event.getCause();
|
final DamageCause cause = event.getCause();
|
||||||
|
|
||||||
if (prot.getSettingBool(ProtectConfig.disable_contactdmg)
|
if (prot.getSettingBool(ProtectConfig.disable_contactdmg)
|
||||||
&& cause == DamageCause.CONTACT
|
&& cause == DamageCause.CONTACT
|
||||||
&& !(target instanceof Player
|
&& !(target instanceof Player
|
||||||
@@ -86,7 +85,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event instanceof EntityDamageByEntityEvent)
|
if (event instanceof EntityDamageByEntityEvent)
|
||||||
{
|
{
|
||||||
final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event;
|
final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event;
|
||||||
@@ -111,7 +110,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eAttack instanceof Creeper && prot.getSettingBool(ProtectConfig.prevent_creeper_playerdmg)
|
if (eAttack instanceof Creeper && prot.getSettingBool(ProtectConfig.prevent_creeper_playerdmg)
|
||||||
&& !(target instanceof Player
|
&& !(target instanceof Player
|
||||||
&& user.isAuthorized("essentials.protect.damage.creeper")
|
&& user.isAuthorized("essentials.protect.damage.creeper")
|
||||||
@@ -120,7 +119,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eAttack instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_playerdmg)
|
if (eAttack instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_playerdmg)
|
||||||
&& !(target instanceof Player
|
&& !(target instanceof Player
|
||||||
&& user.isAuthorized("essentials.protect.damage.fireball")
|
&& user.isAuthorized("essentials.protect.damage.fireball")
|
||||||
@@ -129,7 +128,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eAttack instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_playerdmg)
|
if (eAttack instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_playerdmg)
|
||||||
&& !(target instanceof Player
|
&& !(target instanceof Player
|
||||||
&& user.isAuthorized("essentials.protect.damage.tnt")
|
&& user.isAuthorized("essentials.protect.damage.tnt")
|
||||||
@@ -138,7 +137,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edEvent.getDamager() instanceof Projectile
|
if (edEvent.getDamager() instanceof Projectile
|
||||||
&& target instanceof Player
|
&& target instanceof Player
|
||||||
&& ((prot.getSettingBool(ProtectConfig.disable_projectiles)
|
&& ((prot.getSettingBool(ProtectConfig.disable_projectiles)
|
||||||
@@ -153,7 +152,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final DamageCause cause = event.getCause();
|
final DamageCause cause = event.getCause();
|
||||||
if (target instanceof Player)
|
if (target instanceof Player)
|
||||||
{
|
{
|
||||||
@@ -165,7 +164,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cause == DamageCause.SUFFOCATION
|
if (cause == DamageCause.SUFFOCATION
|
||||||
&& prot.getSettingBool(ProtectConfig.disable_suffocate)
|
&& prot.getSettingBool(ProtectConfig.disable_suffocate)
|
||||||
&& !(user.isAuthorized("essentials.protect.damage.suffocation")
|
&& !(user.isAuthorized("essentials.protect.damage.suffocation")
|
||||||
@@ -201,7 +200,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEntityExplode(final EntityExplodeEvent event)
|
public void onEntityExplode(final EntityExplodeEvent event)
|
||||||
{
|
{
|
||||||
@@ -216,43 +215,50 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
|| prot.getSettingBool(ProtectConfig.prevent_creeper_blockdmg)
|
|| prot.getSettingBool(ProtectConfig.prevent_creeper_blockdmg)
|
||||||
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
|
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
|
||||||
{
|
{
|
||||||
final Set<ChunkPosition> set = new HashSet<ChunkPosition>(event.blockList().size());
|
try
|
||||||
final Player[] players = ess.getServer().getOnlinePlayers();
|
|
||||||
final Set<ChunkPosition> blocksUnderPlayers = new HashSet<ChunkPosition>(players.length);
|
|
||||||
final Location loc = event.getLocation();
|
|
||||||
for (Player player : players)
|
|
||||||
{
|
{
|
||||||
if (player.getWorld().equals(loc.getWorld()))
|
final Set<ChunkPosition> set = new HashSet<ChunkPosition>(event.blockList().size());
|
||||||
|
final Player[] players = ess.getServer().getOnlinePlayers();
|
||||||
|
final Set<ChunkPosition> blocksUnderPlayers = new HashSet<ChunkPosition>(players.length);
|
||||||
|
final Location loc = event.getLocation();
|
||||||
|
for (Player player : players)
|
||||||
{
|
{
|
||||||
blocksUnderPlayers.add(
|
if (player.getWorld().equals(loc.getWorld()))
|
||||||
new ChunkPosition(
|
{
|
||||||
player.getLocation().getBlockX(),
|
blocksUnderPlayers.add(
|
||||||
player.getLocation().getBlockY() - 1,
|
new ChunkPosition(
|
||||||
player.getLocation().getBlockZ()));
|
player.getLocation().getBlockX(),
|
||||||
|
player.getLocation().getBlockY() - 1,
|
||||||
|
player.getLocation().getBlockZ()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
ChunkPosition cp;
|
||||||
|
for (Block block : event.blockList())
|
||||||
|
{
|
||||||
|
cp = new ChunkPosition(block.getX(), block.getY(), block.getZ());
|
||||||
|
if (!blocksUnderPlayers.contains(cp))
|
||||||
|
{
|
||||||
|
set.add(cp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0D, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension,
|
||||||
|
new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set));
|
||||||
}
|
}
|
||||||
ChunkPosition cp;
|
catch (Throwable ex)
|
||||||
for (Block block : event.blockList())
|
|
||||||
{
|
{
|
||||||
cp = new ChunkPosition(block.getX(), block.getY(), block.getZ());
|
Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
|
||||||
if (!blocksUnderPlayers.contains(cp))
|
|
||||||
{
|
|
||||||
set.add(cp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0D, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension,
|
|
||||||
new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set));
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (event.getEntity() instanceof CraftTNTPrimed
|
else if (event.getEntity() instanceof TNTPrimed
|
||||||
&& prot.getSettingBool(ProtectConfig.prevent_tnt_explosion))
|
&& prot.getSettingBool(ProtectConfig.prevent_tnt_explosion))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (event.getEntity() instanceof CraftFireball
|
else if (event.getEntity() instanceof Fireball
|
||||||
&& prot.getSettingBool(ProtectConfig.prevent_fireball_explosion))
|
&& prot.getSettingBool(ProtectConfig.prevent_fireball_explosion))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@@ -264,10 +270,10 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
for (Block block : event.blockList())
|
for (Block block : event.blockList())
|
||||||
{
|
{
|
||||||
if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS
|
if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS
|
||||||
|| block.getType() == Material.RAILS
|
|| block.getType() == Material.RAILS
|
||||||
|| block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL
|
|| block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL
|
||||||
|| block.getType() == Material.POWERED_RAIL
|
|| block.getType() == Material.POWERED_RAIL
|
||||||
|| block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL
|
|| block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL
|
||||||
|| block.getType() == Material.DETECTOR_RAIL)
|
|| block.getType() == Material.DETECTOR_RAIL)
|
||||||
&& prot.getSettingBool(ProtectConfig.protect_rails))
|
&& prot.getSettingBool(ProtectConfig.protect_rails))
|
||||||
{
|
{
|
||||||
@@ -288,11 +294,11 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatureSpawn(final CreatureSpawnEvent event)
|
public void onCreatureSpawn(final CreatureSpawnEvent event)
|
||||||
{
|
{
|
||||||
if (event.getEntity() instanceof CraftPlayer)
|
if (event.getEntity() instanceof Player)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -310,7 +316,7 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEntityTarget(final EntityTargetEvent event)
|
public void onEntityTarget(final EntityTargetEvent event)
|
||||||
{
|
{
|
||||||
@@ -336,11 +342,11 @@ public class EssentialsProtectEntityListener extends EntityListener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onExplosionPrime(ExplosionPrimeEvent event)
|
public void onExplosionPrime(ExplosionPrimeEvent event)
|
||||||
{
|
{
|
||||||
if (event.getEntity() instanceof CraftFireball
|
if (event.getEntity() instanceof Fireball
|
||||||
&& prot.getSettingBool(ProtectConfig.prevent_fireball_fire))
|
&& prot.getSettingBool(ProtectConfig.prevent_fireball_fire))
|
||||||
{
|
{
|
||||||
event.setFire(false);
|
event.setFire(false);
|
||||||
|
Reference in New Issue
Block a user