package com.bioxx.tfc2.networking.client; import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IThreadListener; import net.minecraft.util.math.BlockPos; 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; import com.bioxx.tfc2.tileentities.TileAnvil.AnvilStrikePoint; import com.bioxx.tfc2.tileentities.TileAnvil.AnvilStrikeType; public class CAnvilStrikePacket implements IMessage { public BlockPos pos;//Position of the anvil public int strikeIndex;//Index of the strike point in our array public AnvilStrikePoint strikePoint; public CAnvilStrikePacket() { } public CAnvilStrikePacket(BlockPos p, int index, AnvilStrikePoint strike) { pos = p; strikeIndex = index; strikePoint = strike; } @Override public void toBytes(ByteBuf buffer) { buffer.writeLong(pos.toLong()); buffer.writeInt(strikeIndex); buffer.writeLong(strikePoint.getBirthTime()); buffer.writeInt(strikePoint.getType().ordinal()); buffer.writeInt(strikePoint.getLifeTime()); } @Override public void fromBytes(ByteBuf buffer) { pos = BlockPos.fromLong(buffer.readLong()); strikeIndex = buffer.readInt(); strikePoint = new AnvilStrikePoint(); strikePoint.setBirthTime(buffer.readLong()); strikePoint.setType(AnvilStrikeType.values()[buffer.readInt()]); strikePoint.setLifeTime(buffer.readInt()); } public static class Handler implements IMessageHandler<CAnvilStrikePacket, IMessage> { @Override public IMessage onMessage(final CAnvilStrikePacket message, MessageContext ctx) { IThreadListener mainThread = net.minecraft.client.Minecraft.getMinecraft(); //(WorldServer) ctx.getServerHandler().playerEntity.worldObj; // or Minecraft.getMinecraft() on the client mainThread.addScheduledTask(new Runnable() { @Override public void run() { TileEntity te = net.minecraft.client.Minecraft.getMinecraft().theWorld.getTileEntity(message.pos); if(te != null) { TileAnvil anvil = (TileAnvil)te; anvil.setStrikePoint(message.strikeIndex, message.strikePoint); } } }); return null; // no response in this case } } }