added a bit to the "safe and open" and "painful" block-type lists for the function which teleports escapees back inside the border; removed code which force-loaded GroupManager if it was present since it could cause problems

This commit is contained in:
Brettflan 2011-06-28 20:24:49 -05:00
parent 302bc28d93
commit 40468fab36
3 changed files with 10 additions and 13 deletions

View File

@ -10,7 +10,7 @@ import org.bukkit.World;
public class BorderCheckTask implements Runnable
{
Server server = null;
private transient Server server = null;
public BorderCheckTask(Server theServer)
{
@ -57,7 +57,7 @@ public class BorderCheckTask implements Runnable
ride.teleport(newLoc);
}
else
{ // when riding a pig, player.getVehicle() returns null; so, we unfortunately need to eject player in this rare case
{ // when riding a pig, player.getVehicle() returns null on older Bukkit releases; in that case an eject is required
players[i].leaveVehicle();
players[i].teleport(newLoc);
}

View File

@ -178,23 +178,23 @@ public class BorderData
}
//these material IDs are acceptable for places to teleport player; breathable blocks and water
private static LinkedHashSet<Integer> acceptableBlocks = new LinkedHashSet<Integer>(Arrays.asList(
new Integer[] {0, 6, 8, 9, 37, 38, 39, 40, 50, 55, 59, 63, 64, 65, 66, 68, 69, 70, 71, 72, 75, 76, 77, 78, 83, 93, 94}
private static LinkedHashSet<Integer> safeOpenBlocks = new LinkedHashSet<Integer>(Arrays.asList(
new Integer[] {0, 6, 8, 9, 27, 28, 31, 32, 37, 38, 39, 40, 50, 55, 59, 63, 64, 65, 66, 68, 69, 70, 71, 72, 75, 76, 77, 78, 83, 90, 93, 94}
));
//these material IDs are ones we don't want to drop the player onto, like cactus or lava
//these material IDs are ones we don't want to drop the player onto, like cactus or lava or fire
private static LinkedHashSet<Integer> painfulBlocks = new LinkedHashSet<Integer>(Arrays.asList(
new Integer[] {10, 11, 81}
new Integer[] {10, 11, 51, 81}
));
// check if a particular spot consists of 2 breathable blocks over something relatively solid
private boolean isSafeSpot(World world, int X, int Y, int Z)
{
Integer below = (Integer)world.getBlockTypeIdAt(X, Y - 1, Z);
return (acceptableBlocks.contains((Integer)world.getBlockTypeIdAt(X, Y, Z)) // target block breathable, or is water
&& acceptableBlocks.contains((Integer)world.getBlockTypeIdAt(X, Y + 1, Z)) // above target block breathable, or is water
&& (!acceptableBlocks.contains(below) || below == 8 || below == 9) // below target block not breathable (probably solid), or is water
&& !painfulBlocks.contains(below) // below target block not something painful
return (safeOpenBlocks.contains((Integer)world.getBlockTypeIdAt(X, Y, Z)) // target block open and safe
&& safeOpenBlocks.contains((Integer)world.getBlockTypeIdAt(X, Y + 1, Z)) // above target block open and safe
&& (!safeOpenBlocks.contains(below) || below == 8 || below == 9) // below target block not open and safe (probably solid), or is water
&& !painfulBlocks.contains(below) // below target block not painful
);
}

View File

@ -201,9 +201,6 @@ public class Config
if (test != null)
{
if (!test.isEnabled()) {
plugin.getServer().getPluginManager().enablePlugin(test);
}
GroupPlugin = (GroupManager) test;
LogConfig("Will use plugin for permissions: "+((GroupManager)test).getDescription().getFullName());
return;