package crazypants.enderio.conduit.packet;
import io.netty.buffer.ByteBuf;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.IConduitBundle;
public class AbstractConduitPacket<T extends IConduit> extends AbstractConduitBundlePacket {
protected ConTypeEnum conType;
public AbstractConduitPacket() {
}
public AbstractConduitPacket(TileEntity tile, ConTypeEnum conType) {
super(tile);
this.conType = conType;
}
protected Class<? extends IConduit> getConType() {
return conType.getBaseType();
}
@Override
public void toBytes(ByteBuf buf) {
super.toBytes(buf);
buf.writeShort(conType.ordinal());
}
@Override
public void fromBytes(ByteBuf buf) {
super.fromBytes(buf);
short ordinal = buf.readShort();
conType = ConTypeEnum.values()[ordinal];
}
@SuppressWarnings("unchecked")
protected T getTileCasted(MessageContext ctx) {
World world = getWorld(ctx);
if(world == null) {
return null;
}
TileEntity te = world.getTileEntity(x, y, z);
if( ! (te instanceof IConduitBundle)) {
return null;
}
IConduitBundle bundle = (IConduitBundle)te;
return (T) bundle.getConduit(getConType());
}
}