package com.mcmoddev.communitymod.commoble.gnomes;

import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
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;

public class PacketBreakParticle implements IMessage
{
	private Block block;
	private BlockPos pos;
	
	/**
	 * Order of bytebuffer data is:
	 * block ID
	 * posx
	 * posy
	 * posz
	 */
	
	public PacketBreakParticle()
	{
		
	}
	
	public PacketBreakParticle(Block block, BlockPos pos)
	{
		this.block = block;
		this.pos = pos;
	}
	
	// read data from incoming bytes
	@Override
	public void fromBytes(ByteBuf buf)
	{
		this.block = Block.getBlockById(buf.readInt());
		this.pos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt());
	}
	
	// write data to outgoing bytes
	@Override
	public void toBytes(ByteBuf buf)
	{
		buf.writeInt(Block.getIdFromBlock(this.block));
		buf.writeInt(this.pos.getX());
		buf.writeInt(this.pos.getY());
		buf.writeInt(this.pos.getZ());
	}
	
	// format is <REQ, REPLY>
	// <message received, message sent in response>
	
	public static class PacketBreakParticleReceiver implements IMessageHandler<PacketBreakParticle, IMessage>
	{

		@Override
		public IMessage onMessage(PacketBreakParticle message,
				MessageContext ctx)
		{
			// when packet is received, create block-breakage particle at location
			Minecraft.getMinecraft().effectRenderer.addBlockDestroyEffects(message.pos, message.block.getDefaultState());
			return null;
		}
		
	}
}