package com.bioxx.tfc2.networking.server; import java.util.UUID; import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IThreadListener; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldServer; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import com.bioxx.tfc2.tileentities.TileAnvil; public class SAnvilCraftingPacket implements IMessage { public BlockPos pos;//Position of the anvil public int recipe = 0; public boolean startedCrafting = false; public UUID smithID; public SAnvilCraftingPacket() { } public SAnvilCraftingPacket(BlockPos pos, int recipe, boolean start, UUID id) { this.pos = pos; this.recipe = recipe; startedCrafting = start; smithID = id; } @Override public void toBytes(ByteBuf buffer) { buffer.writeLong(pos.toLong()); buffer.writeInt(recipe); buffer.writeBoolean(startedCrafting); if(startedCrafting) { buffer.writeLong(smithID.getMostSignificantBits()); buffer.writeLong(smithID.getLeastSignificantBits()); } } @Override public void fromBytes(ByteBuf buffer) { this.pos = BlockPos.fromLong(buffer.readLong()); this.recipe = buffer.readInt(); startedCrafting = buffer.readBoolean(); if(startedCrafting) smithID = new UUID(buffer.readLong(), buffer.readLong()); } public static class Handler implements IMessageHandler<SAnvilCraftingPacket, IMessage> { @Override public IMessage onMessage(final SAnvilCraftingPacket message, final MessageContext ctx) { final IThreadListener mainThread = (WorldServer) ctx.getServerHandler().playerEntity.worldObj; // or Minecraft.getMinecraft() on the client mainThread.addScheduledTask(new Runnable() { @Override public void run() { TileEntity te = ((WorldServer)mainThread).getTileEntity(message.pos); if(te != null && te instanceof TileAnvil) { ((TileAnvil)te).setAnvilRecipeIndex(message.recipe); if(message.startedCrafting) { ((TileAnvil)te).startCrafting(message.smithID); } } } }); return null; // no response in this case } } }