summaryrefslogtreecommitdiffstats
path: root/Essentials/src/com/earth2me/essentials/PlayerExtension.java
diff options
context:
space:
mode:
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/PlayerExtension.java')
-rw-r--r--Essentials/src/com/earth2me/essentials/PlayerExtension.java141
1 files changed, 141 insertions, 0 deletions
diff --git a/Essentials/src/com/earth2me/essentials/PlayerExtension.java b/Essentials/src/com/earth2me/essentials/PlayerExtension.java
new file mode 100644
index 000000000..758f8076d
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/PlayerExtension.java
@@ -0,0 +1,141 @@
+package com.earth2me.essentials;
+
+import org.bukkit.*;
+import org.bukkit.block.Block;
+import org.bukkit.craftbukkit.entity.CraftPlayer;
+import net.minecraft.server.EntityPlayer;
+import net.minecraft.server.IInventory;
+import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
+import org.bukkit.entity.*;
+
+
+public class PlayerExtension extends PlayerWrapper
+{
+ public PlayerExtension(Player base)
+ {
+ super(base);
+ }
+
+ public boolean isBanned()
+ {
+ return Essentials.getStatic().bans.contains(getName());
+ }
+
+ public boolean isIpBanned()
+ {
+ return Essentials.getStatic().bannedIps.contains(getAddress().getAddress().toString().replace("/", ""));
+ }
+
+ public float getCorrectedYaw()
+ {
+ float angle = (getLocation().getYaw() - 90) % 360;
+ if (angle < 0) angle += 360.0F;
+ return angle;
+ }
+
+ public void showInventory(IInventory inventory)
+ {
+ getHandle().a(inventory);
+ }
+
+ public void showInventory(CraftInventoryPlayer inventory)
+ {
+ showInventory((IInventory)inventory.getInventory());
+ }
+
+ public Location getSafeDestination(Location loc) throws Exception
+ {
+ World world = loc.getWorld();
+ double x = loc.getX();
+ double y = loc.getY();
+ double z = loc.getZ();
+
+ while (isBlockAboveAir(world, x, y, z))
+ {
+ y -= 1.0D;
+ if (y < 0) {
+ throw new Exception("Hole in floor");
+ }
+ }
+
+ while (isBlockUnsafe(world, x, y, z))
+ {
+ y += 1.0D;
+ if (y >= 110.0D) {
+ x += 1.0D;
+ break;
+ }
+ }
+ while (isBlockUnsafe(world, x, y, z))
+ {
+ y -= 1.0D;
+ if (y <= 1.0D)
+ {
+ y = 110.0D;
+ x += 1.0D;
+ }
+ }
+ return new Location(world, x, y, z, loc.getYaw(), loc.getPitch());
+ }
+
+ private boolean isBlockAboveAir(World world, double x, double y, double z)
+ {
+ return world.getBlockAt((int)Math.floor(x), (int)Math.floor(y - 1.0D), (int)Math.floor(z)).getType() == Material.AIR;
+ }
+
+ public boolean isBlockUnsafe(World world, double x, double y, double z)
+ {
+ Block below = world.getBlockAt((int)Math.floor(x), (int)Math.floor(y - 1.0D), (int)Math.floor(z));
+ if (below.getType() == Material.LAVA || below.getType() == Material.STATIONARY_LAVA)
+ return true;
+
+ if (below.getType() == Material.FIRE)
+ return true;
+
+ if ((world.getBlockAt((int)Math.floor(x), (int)Math.floor(y), (int)Math.floor(z)).getType() != Material.AIR)
+ || (world.getBlockAt((int)Math.floor(x), (int)Math.floor(y + 1.0D), (int)Math.floor(z)).getType() != Material.AIR))
+ {
+ return true;
+ }
+ return isBlockAboveAir(world, x, y, z);
+ }
+
+ public TargetBlock getTarget()
+ {
+ return new TargetBlock(getBase());
+ }
+
+ public String getGroup()
+ {
+ try
+ {
+ return com.nijikokun.bukkit.Permissions.Permissions.Security.getGroup(getWorld().getName(), getName());
+ }
+ catch (Throwable ex)
+ {
+ return "default";
+ }
+ }
+
+ public boolean canBuild()
+ {
+ try
+ {
+ return com.nijikokun.bukkit.Permissions.Permissions.Security.canGroupBuild(getWorld().getName(), getGroup());
+ }
+ catch (Throwable ex)
+ {
+ return true;
+ }
+ }
+
+ public EntityPlayer getHandle()
+ {
+ return (EntityPlayer)getCraftPlayer().getHandle();
+ }
+
+ public CraftPlayer getCraftPlayer()
+ {
+ return (CraftPlayer)base;
+ }
+}