Trapdoors should be treated as half blocks, not transparent blocks.

This commit is contained in:
KHobbits 2013-06-08 21:26:11 +01:00
parent a7b62c65b8
commit 7276bcccab

View File

@ -234,59 +234,58 @@ public class Util
return c.getTimeInMillis();
}
// 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>();
private static final Set<Integer> UNSAFE_MATERIALS = new HashSet<Integer>();
private static final HashSet<Byte> TRANSPARENT_MATERIALS = 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.SNOW.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.FENCE_GATE.getId());
AIR_MATERIALS.add(Material.WATER_LILY.getId());
AIR_MATERIALS.add(Material.NETHER_WARTS.getId());
UNSAFE_MATERIALS.add(Material.AIR.getId());
UNSAFE_MATERIALS.add(Material.SAPLING.getId());
UNSAFE_MATERIALS.add(Material.POWERED_RAIL.getId());
UNSAFE_MATERIALS.add(Material.DETECTOR_RAIL.getId());
UNSAFE_MATERIALS.add(Material.LONG_GRASS.getId());
UNSAFE_MATERIALS.add(Material.DEAD_BUSH.getId());
UNSAFE_MATERIALS.add(Material.YELLOW_FLOWER.getId());
UNSAFE_MATERIALS.add(Material.RED_ROSE.getId());
UNSAFE_MATERIALS.add(Material.BROWN_MUSHROOM.getId());
UNSAFE_MATERIALS.add(Material.RED_MUSHROOM.getId());
UNSAFE_MATERIALS.add(Material.TORCH.getId());
UNSAFE_MATERIALS.add(Material.REDSTONE_WIRE.getId());
UNSAFE_MATERIALS.add(Material.SEEDS.getId());
UNSAFE_MATERIALS.add(Material.SIGN_POST.getId());
UNSAFE_MATERIALS.add(Material.WOODEN_DOOR.getId());
UNSAFE_MATERIALS.add(Material.LADDER.getId());
UNSAFE_MATERIALS.add(Material.RAILS.getId());
UNSAFE_MATERIALS.add(Material.WALL_SIGN.getId());
UNSAFE_MATERIALS.add(Material.LEVER.getId());
UNSAFE_MATERIALS.add(Material.STONE_PLATE.getId());
UNSAFE_MATERIALS.add(Material.IRON_DOOR_BLOCK.getId());
UNSAFE_MATERIALS.add(Material.WOOD_PLATE.getId());
UNSAFE_MATERIALS.add(Material.REDSTONE_TORCH_OFF.getId());
UNSAFE_MATERIALS.add(Material.REDSTONE_TORCH_ON.getId());
UNSAFE_MATERIALS.add(Material.STONE_BUTTON.getId());
UNSAFE_MATERIALS.add(Material.SNOW.getId());
UNSAFE_MATERIALS.add(Material.SUGAR_CANE_BLOCK.getId());
UNSAFE_MATERIALS.add(Material.DIODE_BLOCK_OFF.getId());
UNSAFE_MATERIALS.add(Material.DIODE_BLOCK_ON.getId());
UNSAFE_MATERIALS.add(Material.PUMPKIN_STEM.getId());
UNSAFE_MATERIALS.add(Material.MELON_STEM.getId());
UNSAFE_MATERIALS.add(Material.VINE.getId());
UNSAFE_MATERIALS.add(Material.FENCE_GATE.getId());
UNSAFE_MATERIALS.add(Material.WATER_LILY.getId());
UNSAFE_MATERIALS.add(Material.NETHER_WARTS.getId());
for (Integer integer : AIR_MATERIALS)
for (Integer integer : UNSAFE_MATERIALS)
{
AIR_MATERIALS_TARGET.add(integer.byteValue());
TRANSPARENT_MATERIALS.add(integer.byteValue());
}
AIR_MATERIALS_TARGET.add((byte)Material.WATER.getId());
AIR_MATERIALS_TARGET.add((byte)Material.STATIONARY_WATER.getId());
TRANSPARENT_MATERIALS.add((byte)Material.WATER.getId());
TRANSPARENT_MATERIALS.add((byte)Material.STATIONARY_WATER.getId());
}
public static Location getTarget(final LivingEntity entity) throws Exception
{
final Block block = entity.getTargetBlock(AIR_MATERIALS_TARGET, 300);
final Block block = entity.getTargetBlock(TRANSPARENT_MATERIALS, 300);
if (block == null)
{
throw new Exception("Not targeting a block");
@ -408,7 +407,7 @@ public class Util
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());
return UNSAFE_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)
@ -438,8 +437,8 @@ public class Util
return true;
}
if ((!AIR_MATERIALS.contains(world.getBlockAt(x, y, z).getType().getId()))
|| (!AIR_MATERIALS.contains(world.getBlockAt(x, y + 1, z).getType().getId())))
if ((!UNSAFE_MATERIALS.contains(world.getBlockAt(x, y, z).getType().getId()))
|| (!UNSAFE_MATERIALS.contains(world.getBlockAt(x, y + 1, z).getType().getId())))
{
return true;
}