Andrew Ardill 2759809ecb Fix Craft Entity constructors and toStrings.
Also, standardise getHandle and clean up in general.
getHandle is now using the 'entity' member variable instead of
super.getHandle, as this reduces the number of chained calls needed.
2011-11-29 21:22:35 +11:00

128 lines
3.6 KiB
Java

package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityPainting;
import net.minecraft.server.EnumArt;
import net.minecraft.server.Packet25EntityPainting;
import net.minecraft.server.Packet29DestroyEntity;
import net.minecraft.server.WorldServer;
import org.bukkit.Art;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.CraftArt;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.entity.Painting;
public class CraftPainting extends CraftEntity implements Painting {
public CraftPainting(CraftServer server, EntityPainting entity) {
super(server, entity);
}
public Art getArt() {
EnumArt art = getHandle().e;
return CraftArt.NotchToBukkit(art);
}
public boolean setArt(Art art) {
return setArt(art, false);
}
public boolean setArt(Art art, boolean force) {
EntityPainting painting = this.getHandle();
EnumArt oldArt = painting.e;
EnumArt newArt = CraftArt.BukkitToNotch(art);
painting.e = newArt;
painting.b(painting.a);
if (!force && !painting.j()) {
// Revert painting since it doesn't fit
painting.e = oldArt;
painting.b(painting.a);
return false;
}
this.update();
return true;
}
public BlockFace getAttachedFace() {
return getFacing().getOppositeFace();
}
public void setFacingDirection(BlockFace face) {
setFacingDirection(face, false);
}
public boolean setFacingDirection(BlockFace face, boolean force) {
Block block = getLocation().getBlock().getRelative(getAttachedFace()).getRelative(face.getOppositeFace()).getRelative(getFacing());
EntityPainting painting = getHandle();
int x = painting.b, y = painting.c, z = painting.d, dir = painting.a;
painting.b = block.getX();
painting.c = block.getY();
painting.d = block.getZ();
switch (face) {
case EAST:
default:
getHandle().b(0);
break;
case NORTH:
getHandle().b(1);
break;
case WEST:
getHandle().b(2);
break;
case SOUTH:
getHandle().b(3);
break;
}
if (!force && !painting.j()) {
// Revert painting since it doesn't fit
painting.b = x;
painting.c = y;
painting.d = z;
painting.b(dir);
return false;
}
this.update();
return true;
}
public BlockFace getFacing() {
switch (this.getHandle().a) {
case 0:
default:
return BlockFace.EAST;
case 1:
return BlockFace.NORTH;
case 2:
return BlockFace.WEST;
case 3:
return BlockFace.SOUTH;
}
}
private void update() {
WorldServer world = ((CraftWorld)getWorld()).getHandle();
EntityPainting painting = new EntityPainting(world);
painting.b = getHandle().b;
painting.c = getHandle().c;
painting.d = getHandle().d;
painting.e = getHandle().e;
painting.b(getHandle().a);
getHandle().die();
getHandle().velocityChanged = true; // because this occurs when the painting is broken, so it might be important
world.addEntity(painting);
this.entity = painting;
}
@Override
public EntityPainting getHandle() {
return (EntityPainting) entity;
}
@Override
public String toString() {
return "CraftPainting{art=" + getArt() + "}";
}
}