package emasher.packethandling; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import emasher.api.SideConfig; import emasher.tileentities.TileSocket; import emasher.tileentities.TileAdapterBase; import emasher.tileentities.TileDirectionChanger; import emasher.tileentities.TilePipeBase; import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTSizeTracker; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; public class Handlers { public static void onSocketStateMessage( SocketStateMessage message, MessageContext ctx ) { World world = Minecraft.getMinecraft().theWorld; int x = NetworkUtilities.toInteger( message.msg, 10 ); int y = NetworkUtilities.toInteger( message.msg, 14 ); int z = NetworkUtilities.toInteger( message.msg, 18 ); int side = message.msg[1]; TileEntity te = world.getTileEntity( x, y, z ); if( te != null && te instanceof TileSocket ) { TileSocket ts = ( TileSocket ) te; SideConfig c = ts.configs[side]; c.meta = NetworkUtilities.toInteger( message.msg, 6 ); ts.sides[side] = NetworkUtilities.toInteger( message.msg, 22 ); c.tank = ( int ) message.msg[2]; c.inventory = ( int ) message.msg[3]; c.rsControl[0] = ( message.msg[4] & 1 ) != 0; c.rsControl[1] = ( message.msg[4] & 2 ) != 0; c.rsControl[2] = ( message.msg[4] & 4 ) != 0; c.rsLatch[0] = ( message.msg[5] & 1 ) != 0; c.rsLatch[1] = ( message.msg[5] & 2 ) != 0; c.rsLatch[2] = ( message.msg[5] & 4 ) != 0; ts.sides[side] = NetworkUtilities.toInteger( message.msg, 22 ); ts.sideLocked[side] = NetworkUtilities.byteToBool( message.msg[26] ); ts.facID[side] = NetworkUtilities.toInteger( message.msg, 27 ); ts.facMeta[side] = NetworkUtilities.toInteger( message.msg, 31 ); world.markBlockForUpdate( x, y, z ); world.notifyBlockChange( x, y, z, emasher.blocks.Blocks.socket() ); } } public static void onSocketItemMessage( SocketItemMessage message, MessageContext ctx ) { World world = Minecraft.getMinecraft().theWorld; int x = NetworkUtilities.toInteger( message.msg, 9 ); int y = NetworkUtilities.toInteger( message.msg, 13 ); int z = NetworkUtilities.toInteger( message.msg, 17 ); int id = NetworkUtilities.toInteger( message.msg, 1 ); int damage = NetworkUtilities.toInteger( message.msg, 5 ); int inventory = message.msg[22]; int size = NetworkUtilities.toInteger( message.msg, 23 ); ItemStack s = null; if( id != -1 ) { s = new ItemStack( Item.getItemById( id ), size, damage ); if( message.msg.length > 27 ) { NBTTagCompound NBTData = null; byte[] NBTArray = new byte[message.msg.length - 27]; for( int i = 0; i < message.msg.length - 27; i++ ) { NBTArray[i] = message.msg[i + 27]; } try { NBTData = CompressedStreamTools.func_152457_a( NBTArray, NBTSizeTracker.field_152451_a ); if( NBTData != null ) s.setTagCompound( NBTData ); } catch( Exception e ) { e.printStackTrace(); } } } TileEntity te = world.getTileEntity( x, y, z ); if( te != null && te instanceof TileSocket ) { TileSocket ts = ( TileSocket ) te; if( id != -1 ) ts.inventory.setInventorySlotContents( inventory, new ItemStack( Item.getItemById( id ), size, damage ) ); else ts.inventory.setInventorySlotContents( inventory, null ); world.markBlockForUpdate( x, y, z ); world.notifyBlockChange( x, y, z, emasher.blocks.Blocks.socket() ); } } public static void onSocketFluidMessage( SocketFluidMessage message, MessageContext ctx ) { World world = Minecraft.getMinecraft().theWorld; int x = NetworkUtilities.toInteger( message.msg, 1 ); int y = NetworkUtilities.toInteger( message.msg, 5 ); int z = NetworkUtilities.toInteger( message.msg, 9 ); int id = NetworkUtilities.toInteger( message.msg, 13 ); int meta = NetworkUtilities.toInteger( message.msg, 17 ); int amnt = NetworkUtilities.toInteger( message.msg, 22 ); int tank = ( int ) message.msg[26]; TileEntity te = world.getTileEntity( x, y, z ); if( te != null && te instanceof TileSocket ) { TileSocket ts = ( TileSocket ) te; if( tank > -1 && tank < 3 ) { if (id != -1) { ts.tanks[tank].setFluid(new FluidStack(FluidRegistry.getFluid(id), amnt)); } else { ts.tanks[tank].setFluid( null ); } } world.markBlockForUpdate( x, y, z ); world.notifyBlockChange( x, y, z, emasher.blocks.Blocks.socket() ); } } public static void onPipeColourMessage( PipeColourMessage message, MessageContext ctx ) { World world = Minecraft.getMinecraft().theWorld; int x = NetworkUtilities.toInteger( message.msg, 1 ); int y = NetworkUtilities.toInteger( message.msg, 5 ); int z = NetworkUtilities.toInteger( message.msg, 9 ); int id = NetworkUtilities.toInteger( message.msg, 13 ); int colour = message.msg[17]; TileEntity te = world.getTileEntity( x, y, z ); if( te != null && te instanceof TilePipeBase ) { TilePipeBase p = ( TilePipeBase ) te; p.colour = colour; world.markBlockForUpdate( x, y, z ); world.notifyBlockChange( x, y, z, world.getBlock( x, y, z ) ); } } public static void onAdapterSideMessage( AdapterSideMessage message, MessageContext ctx ) { World world = Minecraft.getMinecraft().theWorld; int x = NetworkUtilities.toInteger( message.msg, 1 ); int y = NetworkUtilities.toInteger( message.msg, 5 ); int z = NetworkUtilities.toInteger( message.msg, 9 ); int id = NetworkUtilities.toInteger( message.msg, 13 ); boolean output = false; if( message.msg[17] != 0 ) output = true; int side = ( int ) message.msg[18]; TileEntity te = world.getTileEntity( x, y, z ); if( te != null && te instanceof TileAdapterBase ) { TileAdapterBase t = ( TileAdapterBase ) te; t.outputs[side] = output; world.markBlockForUpdate( x, y, z ); world.notifyBlockChange( x, y, z, world.getBlock( x, y, z ) ); } } public static void onChangeSideMessage( ChangerSideMessage message, MessageContext ctx ) { World world = Minecraft.getMinecraft().theWorld; int x = NetworkUtilities.toInteger( message.msg, 1 ); int y = NetworkUtilities.toInteger( message.msg, 5 ); int z = NetworkUtilities.toInteger( message.msg, 9 ); int id = NetworkUtilities.toInteger( message.msg, 13 ); ForgeDirection dir = ForgeDirection.getOrientation( message.msg[17] ); int side = ( int ) message.msg[18]; TileEntity te = world.getTileEntity( x, y, z ); if( te != null && te instanceof TileDirectionChanger ) { TileDirectionChanger t = ( TileDirectionChanger ) te; t.directions[side] = dir; world.markBlockForUpdate( x, y, z ); world.notifyBlockChange( x, y, z, world.getBlock( x, y, z ) ); } } }