summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Essentials/src/com/earth2me/essentials/Teleport.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandantioch.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java6
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandjump.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandspawner.java6
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java12
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandtree.java6
-rw-r--r--Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java4
-rw-r--r--Essentials/src/com/earth2me/essentials/utils/LocationUtil.java142
-rw-r--r--Essentials/src/com/earth2me/essentials/utils/Util.java131
10 files changed, 168 insertions, 151 deletions
diff --git a/Essentials/src/com/earth2me/essentials/Teleport.java b/Essentials/src/com/earth2me/essentials/Teleport.java
index 1ead9fa0f..0966395fc 100644
--- a/Essentials/src/com/earth2me/essentials/Teleport.java
+++ b/Essentials/src/com/earth2me/essentials/Teleport.java
@@ -9,6 +9,8 @@ import com.earth2me.essentials.commands.NotEnoughArgumentsException;
import com.earth2me.essentials.permissions.Permissions;
import com.earth2me.essentials.user.CooldownException;
import com.earth2me.essentials.user.UserData.TimestampType;
+import com.earth2me.essentials.utils.DateUtil;
+import com.earth2me.essentials.utils.LocationUtil;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Logger;
@@ -237,7 +239,7 @@ public class Teleport implements Runnable, ITeleport
{
cancel();
user.setLastLocation();
- user.getBase().teleport(Util.getSafeDestination(target.getLocation()), cause);
+ user.getBase().teleport(LocationUtil.getSafeDestination(target.getLocation()), cause);
}
public void now(Location loc, boolean cooldown, TeleportCause cause) throws Exception
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java
index 0edf29cf4..eea30448d 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java
@@ -1,7 +1,7 @@
package com.earth2me.essentials.commands;
-import com.earth2me.essentials.utils.Util;
import com.earth2me.essentials.api.IUser;
+import com.earth2me.essentials.utils.LocationUtil;
import org.bukkit.Location;
import org.bukkit.entity.TNTPrimed;
@@ -17,7 +17,7 @@ public class Commandantioch extends EssentialsCommand
ess.broadcastMessage(user, "who being naughty in My sight, shall snuff it.");
}
- final Location loc = Util.getTarget(user);
+ final Location loc = LocationUtil.getTarget(user);
loc.getWorld().spawn(loc, TNTPrimed.class);
}
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java b/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java
index c9a7ad95d..7c31c87c1 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java
@@ -1,8 +1,8 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.utils.Util;
import com.earth2me.essentials.api.IUser;
+import com.earth2me.essentials.utils.LocationUtil;
import org.bukkit.Location;
import org.bukkit.TreeType;
@@ -26,8 +26,8 @@ public class Commandbigtree extends EssentialsCommand
throw new NotEnoughArgumentsException();
}
- final Location loc = Util.getTarget(user);
- final Location safeLocation = Util.getSafeDestination(loc);
+ final Location loc = LocationUtil.getTarget(user);
+ final Location safeLocation = LocationUtil.getSafeDestination(loc);
final boolean success = user.getWorld().generateTree(safeLocation, tree);
if (success)
{
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandjump.java b/Essentials/src/com/earth2me/essentials/commands/Commandjump.java
index 06af83895..d9523e2a9 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandjump.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandjump.java
@@ -2,8 +2,8 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Trade;
-import com.earth2me.essentials.utils.Util;
import com.earth2me.essentials.api.IUser;
+import com.earth2me.essentials.utils.LocationUtil;
import org.bukkit.Location;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
@@ -18,7 +18,7 @@ public class Commandjump extends EssentialsCommand
try
{
- loc = Util.getTarget(user);
+ loc = LocationUtil.getTarget(user);
loc.setYaw(cloc.getYaw());
loc.setPitch(cloc.getPitch());
loc.setY(loc.getY() + 1);
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java
index 1eed9978c..1f263ba85 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java
@@ -3,14 +3,14 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Mob;
import com.earth2me.essentials.Trade;
-import com.earth2me.essentials.utils.Util;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.permissions.SpawnerPermissions;
+import com.earth2me.essentials.utils.LocationUtil;
+import com.earth2me.essentials.utils.Util;
import java.util.Locale;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.CreatureSpawner;
-import org.bukkit.entity.EntityType;
public class Commandspawner extends EssentialsCommand
@@ -23,7 +23,7 @@ public class Commandspawner extends EssentialsCommand
throw new NotEnoughArgumentsException(_("mobsAvailable", Util.joinList(Mob.getMobList())));
}
- final Location target = Util.getTarget(user);
+ final Location target = LocationUtil.getTarget(user);
if (target == null || target.getBlock().getType() != Material.MOB_SPAWNER)
{
throw new Exception(_("mobSpawnTarget"));
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
index 15730869f..84607c99b 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
@@ -3,11 +3,15 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Mob;
import com.earth2me.essentials.Mob.MobException;
-import com.earth2me.essentials.utils.Util;
import com.earth2me.essentials.api.ISettings;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.permissions.SpawnmobPermissions;
-import java.util.*;
+import com.earth2me.essentials.utils.LocationUtil;
+import com.earth2me.essentials.utils.Util;
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Random;
+import java.util.Set;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.block.Block;
@@ -75,7 +79,7 @@ public class Commandspawnmob extends EssentialsCommand
throw new Exception(_("noPermToSpawnMob"));
}
- final Block block = Util.getTarget(user).getBlock();
+ final Block block = LocationUtil.getTarget(user).getBlock();
if (block == null)
{
throw new Exception(_("unableToSpawnMob"));
@@ -86,7 +90,7 @@ public class Commandspawnmob extends EssentialsCommand
otherUser = getPlayer(args, 2);
}
final Location loc = (otherUser == null) ? block.getLocation() : otherUser.getLocation();
- final Location sloc = Util.getSafeDestination(loc);
+ final Location sloc = LocationUtil.getSafeDestination(loc);
try
{
spawnedMob = mob.spawn(user, server, sloc);
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtree.java b/Essentials/src/com/earth2me/essentials/commands/Commandtree.java
index ea58eb221..b4e47fbb6 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandtree.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandtree.java
@@ -1,8 +1,8 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.utils.Util;
import com.earth2me.essentials.api.IUser;
+import com.earth2me.essentials.utils.LocationUtil;
import org.bukkit.Location;
import org.bukkit.TreeType;
@@ -42,8 +42,8 @@ public class Commandtree extends EssentialsCommand
throw new NotEnoughArgumentsException();
}
- final Location loc = Util.getTarget(user);
- final Location safeLocation = Util.getSafeDestination(loc);
+ final Location loc = LocationUtil.getTarget(user);
+ final Location safeLocation = LocationUtil.getSafeDestination(loc);
final boolean success = user.getWorld().generateTree(safeLocation, tree);
if (success)
{
diff --git a/Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java
index 06ccb9067..0040dd50e 100644
--- a/Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java
+++ b/Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java
@@ -1,7 +1,6 @@
package com.earth2me.essentials.listener;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.utils.Util;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.ISettings;
import com.earth2me.essentials.api.IUser;
@@ -11,6 +10,7 @@ import com.earth2me.essentials.textreader.KeywordReplacer;
import com.earth2me.essentials.textreader.TextInput;
import com.earth2me.essentials.textreader.TextPager;
import com.earth2me.essentials.user.UserData.TimestampType;
+import com.earth2me.essentials.utils.LocationUtil;
import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
@@ -97,7 +97,7 @@ public class EssentialsPlayerListener implements Listener
to.setZ(from.getZ());
try
{
- event.setTo(Util.getSafeDestination(to));
+ event.setTo(LocationUtil.getSafeDestination(to));
}
catch (Exception ex)
{
diff --git a/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java
new file mode 100644
index 000000000..49b256417
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/utils/LocationUtil.java
@@ -0,0 +1,142 @@
+package com.earth2me.essentials.utils;
+
+import static com.earth2me.essentials.I18n._;
+import java.util.HashSet;
+import java.util.Set;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.entity.LivingEntity;
+
+public class LocationUtil {
+ // The player can stand inside these materials
+ private static final Set<Integer> AIR_MATERIALS = new HashSet<Integer>();
+ private static final HashSet<Byte> AIR_MATERIALS_TARGET = new HashSet<Byte>();
+
+ static
+ {
+ AIR_MATERIALS.add(Material.AIR.getId());
+ AIR_MATERIALS.add(Material.SAPLING.getId());
+ AIR_MATERIALS.add(Material.POWERED_RAIL.getId());
+ AIR_MATERIALS.add(Material.DETECTOR_RAIL.getId());
+ AIR_MATERIALS.add(Material.LONG_GRASS.getId());
+ AIR_MATERIALS.add(Material.DEAD_BUSH.getId());
+ AIR_MATERIALS.add(Material.YELLOW_FLOWER.getId());
+ AIR_MATERIALS.add(Material.RED_ROSE.getId());
+ AIR_MATERIALS.add(Material.BROWN_MUSHROOM.getId());
+ AIR_MATERIALS.add(Material.RED_MUSHROOM.getId());
+ AIR_MATERIALS.add(Material.TORCH.getId());
+ AIR_MATERIALS.add(Material.REDSTONE_WIRE.getId());
+ AIR_MATERIALS.add(Material.SEEDS.getId());
+ AIR_MATERIALS.add(Material.SIGN_POST.getId());
+ AIR_MATERIALS.add(Material.WOODEN_DOOR.getId());
+ AIR_MATERIALS.add(Material.LADDER.getId());
+ AIR_MATERIALS.add(Material.RAILS.getId());
+ AIR_MATERIALS.add(Material.WALL_SIGN.getId());
+ AIR_MATERIALS.add(Material.LEVER.getId());
+ AIR_MATERIALS.add(Material.STONE_PLATE.getId());
+ AIR_MATERIALS.add(Material.IRON_DOOR_BLOCK.getId());
+ AIR_MATERIALS.add(Material.WOOD_PLATE.getId());
+ AIR_MATERIALS.add(Material.REDSTONE_TORCH_OFF.getId());
+ AIR_MATERIALS.add(Material.REDSTONE_TORCH_ON.getId());
+ AIR_MATERIALS.add(Material.STONE_BUTTON.getId());
+ AIR_MATERIALS.add(Material.SUGAR_CANE_BLOCK.getId());
+ AIR_MATERIALS.add(Material.DIODE_BLOCK_OFF.getId());
+ AIR_MATERIALS.add(Material.DIODE_BLOCK_ON.getId());
+ AIR_MATERIALS.add(Material.TRAP_DOOR.getId());
+ AIR_MATERIALS.add(Material.PUMPKIN_STEM.getId());
+ AIR_MATERIALS.add(Material.MELON_STEM.getId());
+ AIR_MATERIALS.add(Material.VINE.getId());
+ AIR_MATERIALS.add(Material.NETHER_WARTS.getId());
+ AIR_MATERIALS.add(Material.WATER_LILY.getId());
+
+ for (Integer integer : AIR_MATERIALS)
+ {
+ AIR_MATERIALS_TARGET.add(integer.byteValue());
+ }
+ AIR_MATERIALS_TARGET.add((byte)Material.WATER.getId());
+ AIR_MATERIALS_TARGET.add((byte)Material.STATIONARY_WATER.getId());
+ }
+
+ public static Location getTarget(final LivingEntity entity) throws Exception
+ {
+ final Block block = entity.getTargetBlock(AIR_MATERIALS_TARGET, 300);
+ if (block == null)
+ {
+ throw new Exception("Not targeting a block");
+ }
+ return block.getLocation();
+ }
+
+ public static Location getSafeDestination(final Location loc) throws Exception
+ {
+ if (loc == null || loc.getWorld() == null)
+ {
+ throw new Exception(_("destinationNotSet"));
+ }
+ final World world = loc.getWorld();
+ int x = loc.getBlockX();
+ int y = (int)Math.round(loc.getY());
+ int z = loc.getBlockZ();
+
+ while (isBlockAboveAir(world, x, y, z))
+ {
+ y -= 1;
+ if (y < 0)
+ {
+ break;
+ }
+ }
+
+ while (isBlockUnsafe(world, x, y, z))
+ {
+ y += 1;
+ if (y >= world.getHighestBlockYAt(x, z))
+ {
+ x += 1;
+ break;
+ }
+ }
+ while (isBlockUnsafe(world, x, y, z))
+ {
+ y -= 1;
+ if (y <= 1)
+ {
+ x += 1;
+ y = world.getHighestBlockYAt(x, z);
+ if (x - 32 > loc.getBlockX())
+ {
+ throw new Exception(_("holeInFloor"));
+ }
+ }
+ }
+ return new Location(world, x + 0.5D, y, z + 0.5D, loc.getYaw(), loc.getPitch());
+ }
+
+ private static boolean isBlockAboveAir(final World world, final int x, final int y, final int z)
+ {
+ return AIR_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType().getId());
+ }
+
+ public static boolean isBlockUnsafe(final World world, final int x, final int y, final int z)
+ {
+ final Block below = world.getBlockAt(x, y - 1, z);
+ if (below.getType() == Material.LAVA || below.getType() == Material.STATIONARY_LAVA)
+ {
+ return true;
+ }
+
+ if (below.getType() == Material.FIRE)
+ {
+ return true;
+ }
+
+ if ((!AIR_MATERIALS.contains(world.getBlockAt(x, y, z).getType().getId()))
+ || (!AIR_MATERIALS.contains(world.getBlockAt(x, y + 1, z).getType().getId())))
+ {
+ return true;
+ }
+ return isBlockAboveAir(world, x, y, z);
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/utils/Util.java b/Essentials/src/com/earth2me/essentials/utils/Util.java
index 3135f5d33..249a77ef7 100644
--- a/Essentials/src/com/earth2me/essentials/utils/Util.java
+++ b/Essentials/src/com/earth2me/essentials/utils/Util.java
@@ -93,137 +93,6 @@ public final class Util
return INVALIDCHARS.matcher(string).replaceAll("");
}
-
- // The player can stand inside these materials
- private static final Set<Integer> AIR_MATERIALS = new HashSet<Integer>();
- private static final HashSet<Byte> AIR_MATERIALS_TARGET = new HashSet<Byte>();
-
- static
- {
- AIR_MATERIALS.add(Material.AIR.getId());
- AIR_MATERIALS.add(Material.SAPLING.getId());
- AIR_MATERIALS.add(Material.POWERED_RAIL.getId());
- AIR_MATERIALS.add(Material.DETECTOR_RAIL.getId());
- AIR_MATERIALS.add(Material.LONG_GRASS.getId());
- AIR_MATERIALS.add(Material.DEAD_BUSH.getId());
- AIR_MATERIALS.add(Material.YELLOW_FLOWER.getId());
- AIR_MATERIALS.add(Material.RED_ROSE.getId());
- AIR_MATERIALS.add(Material.BROWN_MUSHROOM.getId());
- AIR_MATERIALS.add(Material.RED_MUSHROOM.getId());
- AIR_MATERIALS.add(Material.TORCH.getId());
- AIR_MATERIALS.add(Material.REDSTONE_WIRE.getId());
- AIR_MATERIALS.add(Material.SEEDS.getId());
- AIR_MATERIALS.add(Material.SIGN_POST.getId());
- AIR_MATERIALS.add(Material.WOODEN_DOOR.getId());
- AIR_MATERIALS.add(Material.LADDER.getId());
- AIR_MATERIALS.add(Material.RAILS.getId());
- AIR_MATERIALS.add(Material.WALL_SIGN.getId());
- AIR_MATERIALS.add(Material.LEVER.getId());
- AIR_MATERIALS.add(Material.STONE_PLATE.getId());
- AIR_MATERIALS.add(Material.IRON_DOOR_BLOCK.getId());
- AIR_MATERIALS.add(Material.WOOD_PLATE.getId());
- AIR_MATERIALS.add(Material.REDSTONE_TORCH_OFF.getId());
- AIR_MATERIALS.add(Material.REDSTONE_TORCH_ON.getId());
- AIR_MATERIALS.add(Material.STONE_BUTTON.getId());
- AIR_MATERIALS.add(Material.SUGAR_CANE_BLOCK.getId());
- AIR_MATERIALS.add(Material.DIODE_BLOCK_OFF.getId());
- AIR_MATERIALS.add(Material.DIODE_BLOCK_ON.getId());
- AIR_MATERIALS.add(Material.TRAP_DOOR.getId());
- AIR_MATERIALS.add(Material.PUMPKIN_STEM.getId());
- AIR_MATERIALS.add(Material.MELON_STEM.getId());
- AIR_MATERIALS.add(Material.VINE.getId());
- AIR_MATERIALS.add(Material.NETHER_WARTS.getId());
- AIR_MATERIALS.add(Material.WATER_LILY.getId());
-
- for (Integer integer : AIR_MATERIALS)
- {
- AIR_MATERIALS_TARGET.add(integer.byteValue());
- }
- AIR_MATERIALS_TARGET.add((byte)Material.WATER.getId());
- AIR_MATERIALS_TARGET.add((byte)Material.STATIONARY_WATER.getId());
- }
-
- public static Location getTarget(final LivingEntity entity) throws Exception
- {
- final Block block = entity.getTargetBlock(AIR_MATERIALS_TARGET, 300);
- if (block == null)
- {
- throw new Exception("Not targeting a block");
- }
- return block.getLocation();
- }
-
- public static Location getSafeDestination(final Location loc) throws Exception
- {
- if (loc == null || loc.getWorld() == null)
- {
- throw new Exception(_("destinationNotSet"));
- }
- final World world = loc.getWorld();
- int x = loc.getBlockX();
- int y = (int)Math.round(loc.getY());
- int z = loc.getBlockZ();
-
- while (isBlockAboveAir(world, x, y, z))
- {
- y -= 1;
- if (y < 0)
- {
- break;
- }
- }
-
- while (isBlockUnsafe(world, x, y, z))
- {
- y += 1;
- if (y >= world.getHighestBlockYAt(x, z))
- {
- x += 1;
- break;
- }
- }
- while (isBlockUnsafe(world, x, y, z))
- {
- y -= 1;
- if (y <= 1)
- {
- x += 1;
- y = world.getHighestBlockYAt(x, z);
- if (x - 32 > loc.getBlockX())
- {
- throw new Exception(_("holeInFloor"));
- }
- }
- }
- return new Location(world, x + 0.5D, y, z + 0.5D, loc.getYaw(), loc.getPitch());
- }
-
- private static boolean isBlockAboveAir(final World world, final int x, final int y, final int z)
- {
- return AIR_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType().getId());
- }
-
- public static boolean isBlockUnsafe(final World world, final int x, final int y, final int z)
- {
- final Block below = world.getBlockAt(x, y - 1, z);
- if (below.getType() == Material.LAVA || below.getType() == Material.STATIONARY_LAVA)
- {
- return true;
- }
-
- if (below.getType() == Material.FIRE)
- {
- return true;
- }
-
- if ((!AIR_MATERIALS.contains(world.getBlockAt(x, y, z).getType().getId()))
- || (!AIR_MATERIALS.contains(world.getBlockAt(x, y + 1, z).getType().getId())))
- {
- return true;
- }
- return isBlockAboveAir(world, x, y, z);
- }
-
public static ItemStack convertBlockToItem(final Block block)
{
final ItemStack is = new ItemStack(block.getType(), 1, (short)0, block.getData());