package com.bergerkiller.bukkit.common.reflection.classes;
import net.minecraft.server.TileEntity;
import org.bukkit.World;
import org.bukkit.block.Block;
import com.bergerkiller.bukkit.common.conversion.Conversion;
import com.bergerkiller.bukkit.common.conversion.ConversionPairs;
import com.bergerkiller.bukkit.common.internal.CommonNMS;
import com.bergerkiller.bukkit.common.protocol.CommonPacket;
import com.bergerkiller.bukkit.common.reflection.ClassTemplate;
import com.bergerkiller.bukkit.common.reflection.FieldAccessor;
import com.bergerkiller.bukkit.common.reflection.MethodAccessor;
import com.bergerkiller.bukkit.common.reflection.NMSClassTemplate;
import com.bergerkiller.bukkit.common.reflection.TranslatorFieldAccessor;
public class TileEntityRef {
public static final ClassTemplate<?> TEMPLATE = NMSClassTemplate.create("TileEntity");
public static final TranslatorFieldAccessor<World> world = TEMPLATE.getField("world").translate(ConversionPairs.world);
public static final FieldAccessor<Integer> x = TEMPLATE.getField("x");
public static final FieldAccessor<Integer> y = TEMPLATE.getField("y");
public static final FieldAccessor<Integer> z = TEMPLATE.getField("z");
private static final MethodAccessor<Object> getUpdatePacket = TEMPLATE.getMethod("getUpdatePacket");
public static boolean hasWorld(Object tileEntity) {
return ((TileEntity) tileEntity).getWorld() != null;
}
public static Object getFromWorld(Block block) {
return getFromWorld(block.getWorld(), block.getX(), block.getY(), block.getZ());
}
public static Object getFromWorld(World world, int x, int y, int z) {
return CommonNMS.getNative(world).getTileEntity(x, y, z);
}
public static CommonPacket getUpdatePacket(Object tileEntity) {
return Conversion.toCommonPacket.convert(getUpdatePacket.invoke(tileEntity));
}
public static Block getBlock(Object tileEntity) {
TileEntity tile = (TileEntity) tileEntity;
return tile.getWorld().getWorld().getBlockAt(tile.x, tile.y, tile.z);
}
}