mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-24 03:25:15 +01:00
Fix the spawning of HangingEntities by picking the right direction
Related to SPIGOT-206. Currently HangingEntities should be located next to the block they are hanging on. With the direction set to the opposite of the block they are hanging from. This code is modified to find the correct direction.
This commit is contained in:
parent
354449ae9a
commit
01f0122a9e
@ -1018,31 +1018,17 @@ public class CraftWorld implements World {
|
||||
} else if (Hanging.class.isAssignableFrom(clazz)) {
|
||||
Block block = getBlockAt(location);
|
||||
BlockFace face = BlockFace.SELF;
|
||||
if (block.getRelative(BlockFace.EAST).getTypeId() == 0) {
|
||||
face = BlockFace.EAST;
|
||||
} else if (block.getRelative(BlockFace.NORTH).getTypeId() == 0) {
|
||||
face = BlockFace.NORTH;
|
||||
} else if (block.getRelative(BlockFace.WEST).getTypeId() == 0) {
|
||||
face = BlockFace.WEST;
|
||||
} else if (block.getRelative(BlockFace.SOUTH).getTypeId() == 0) {
|
||||
face = BlockFace.SOUTH;
|
||||
}
|
||||
EnumDirection dir;
|
||||
switch (face) {
|
||||
case SOUTH:
|
||||
default:
|
||||
dir = EnumDirection.SOUTH;
|
||||
break;
|
||||
case WEST:
|
||||
dir = EnumDirection.WEST;
|
||||
break;
|
||||
case NORTH:
|
||||
dir = EnumDirection.NORTH;
|
||||
break;
|
||||
case EAST:
|
||||
dir = EnumDirection.EAST;
|
||||
|
||||
BlockFace[] faces = new BlockFace[]{BlockFace.EAST,BlockFace.NORTH,BlockFace.WEST,BlockFace.SOUTH};
|
||||
for(BlockFace dir : faces){
|
||||
net.minecraft.server.Block nmsBlock = CraftMagicNumbers.getBlock(block.getRelative(dir));
|
||||
if(nmsBlock.getMaterial().isBuildable() || BlockDiodeAbstract.d(nmsBlock)) {
|
||||
face = dir;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
EnumDirection dir = CraftBlock.blockFaceToNotch(face).opposite();
|
||||
|
||||
if (Painting.class.isAssignableFrom(clazz)) {
|
||||
entity = new EntityPainting(world, new BlockPosition((int) x, (int) y, (int) z), dir);
|
||||
|
Loading…
Reference in New Issue
Block a user