package org.bukkit.craftbukkit.block; import net.minecraft.server.BlockPosition; import net.minecraft.server.TileEntityEndGateway; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.EndGateway; import org.bukkit.craftbukkit.CraftWorld; public class CraftEndGateway extends CraftBlockState implements EndGateway { private final CraftWorld world; private final TileEntityEndGateway gateway; public CraftEndGateway(Block block) { super(block); world = (CraftWorld) block.getWorld(); gateway = (TileEntityEndGateway) world.getTileEntityAt(getX(), getY(), getZ()); } public CraftEndGateway(final Material material, TileEntityEndGateway te) { super(material); world = null; this.gateway = te; } @Override public Location getExitLocation() { BlockPosition pos = gateway.exitPortal; return pos == null ? null : new Location(world, pos.getX(), pos.getY(), pos.getZ()); } @Override public void setExitLocation(Location location) { if (location == null) { gateway.exitPortal = null; } else if (location.getWorld() != world) { throw new IllegalArgumentException("Cannot set exit location to different world"); } else { gateway.exitPortal = new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()); } } @Override public boolean isExactTeleport() { return gateway.exactTeleport; } @Override public void setExactTeleport(boolean exact) { gateway.exactTeleport = exact; } @Override public boolean update(boolean force, boolean applyPhysics) { boolean result = super.update(force, applyPhysics); if (result) { gateway.update(); } return result; } @Override public TileEntityEndGateway getTileEntity() { return gateway; } }