package com.minemaarten.signals.network;

import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.NetworkRegistry;

/**
 * MineChess
 * 
 * @author MineMaarten www.minemaarten.com
 * @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html)
 */

public abstract class LocationIntPacket<REQ extends AbstractPacket<REQ>> extends AbstractPacket<REQ>{

    public BlockPos pos;

    public LocationIntPacket(){

    }

    public LocationIntPacket(BlockPos pos){

        this.pos = pos;
    }

    @Override
    public void toBytes(ByteBuf buf){

        NetworkUtils.writeBlockPos(buf, pos);
    }

    @Override
    public void fromBytes(ByteBuf buf){

        pos = NetworkUtils.readBlockPos(buf);
    }

    public NetworkRegistry.TargetPoint getTargetPoint(World world){

        return getTargetPoint(world, 64);
    }

    public NetworkRegistry.TargetPoint getTargetPoint(World world, double updateDistance){

        return new NetworkRegistry.TargetPoint(world.provider.getDimension(), pos.getX(), pos.getY(), pos.getZ(), updateDistance);
    }

    protected Block getBlock(World world){

        return world.getBlockState(pos).getBlock();
    }

    protected TileEntity getTileEntity(World world){

        return world.getTileEntity(pos);
    }
}