package pneumaticCraft.common.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import pneumaticCraft.common.block.tubes.TubeModule;
import pneumaticCraft.common.tileentity.TileEntityPressureTube;
public abstract class PacketUpdateTubeModule<REQ extends PacketUpdateTubeModule> extends LocationIntPacket<REQ>{
protected ForgeDirection moduleSide;
public PacketUpdateTubeModule(){}
public PacketUpdateTubeModule(TubeModule module){
super(module.getTube().x(), module.getTube().y(), module.getTube().z());
moduleSide = module.getDirection();
}
@Override
public void toBytes(ByteBuf buffer){
super.toBytes(buffer);
buffer.writeByte((byte)moduleSide.ordinal());
}
@Override
public void fromBytes(ByteBuf buffer){
super.fromBytes(buffer);
moduleSide = ForgeDirection.getOrientation(buffer.readByte());
}
@Override
public void handleClientSide(REQ message, EntityPlayer player){
handleServerSide(message, player);
}
@Override
public void handleServerSide(REQ message, EntityPlayer player){
TileEntity te = player.worldObj.getTileEntity(message.x, message.y, message.z);
//TODO add code for FMP support.
if(te instanceof TileEntityPressureTube) {
TubeModule module = ((TileEntityPressureTube)te).modules[message.moduleSide.ordinal()];
if(module != null) {
onModuleUpdate(module, message, player);
if(!player.worldObj.isRemote) NetworkHandler.sendToAllAround(message, player.worldObj);
}
}
}
protected abstract void onModuleUpdate(TubeModule module, REQ message, EntityPlayer player);
}