Stefan e1070b9fbb SPIGOT-206 Further checks and fixes for Hanging entities.
Adds an check for existing entities before selecting the location allowing
for hanging entities to be spawned in blocks where there already is an
hanging entity at the default rotation.
Fixes the CraftHanging setRotation function to use the new 1.8 logic.
2014-12-15 14:42:00 +00:00

79 lines
2.1 KiB
Java

package org.bukkit.craftbukkit.entity;
import net.minecraft.server.BlockPosition;
import net.minecraft.server.EntityHanging;
import net.minecraft.server.EnumDirection;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Hanging;
public class CraftHanging extends CraftEntity implements Hanging {
public CraftHanging(CraftServer server, EntityHanging entity) {
super(server, entity);
}
public BlockFace getAttachedFace() {
return getFacing().getOppositeFace();
}
public void setFacingDirection(BlockFace face) {
setFacingDirection(face, false);
}
public boolean setFacingDirection(BlockFace face, boolean force) {
EntityHanging hanging = getHandle();
EnumDirection dir = hanging.direction;
switch (face) {
case SOUTH:
default:
getHandle().setDirection(EnumDirection.SOUTH);
break;
case WEST:
getHandle().setDirection(EnumDirection.WEST);
break;
case NORTH:
getHandle().setDirection(EnumDirection.NORTH);
break;
case EAST:
getHandle().setDirection(EnumDirection.EAST);
break;
}
if (!force && !hanging.survives()) {
// Revert since it doesn't fit
hanging.setDirection(dir);
return false;
}
return true;
}
public BlockFace getFacing() {
switch (this.getHandle().direction) {
case SOUTH:
default:
return BlockFace.SOUTH;
case WEST:
return BlockFace.WEST;
case NORTH:
return BlockFace.NORTH;
case EAST:
return BlockFace.EAST;
}
}
@Override
public EntityHanging getHandle() {
return (EntityHanging) entity;
}
@Override
public String toString() {
return "CraftHanging";
}
public EntityType getType() {
return EntityType.UNKNOWN;
}
}