
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.
79 lines
2.1 KiB
Java
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;
|
|
}
|
|
}
|