package com.bioxx.tfc2.handlers.client;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.RayTraceResult.Type;
import net.minecraft.util.math.Vec3d;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import com.bioxx.tfc2.TFC;
import com.bioxx.tfc2.api.interfaces.IFoodStatsTFC;
import com.bioxx.tfc2.networking.client.CFoodPacket;
public class DrinkWaterHandler
{
@SubscribeEvent
public void onRightClick(PlayerInteractEvent.RightClickEmpty event)
{
if(event.getSide() == Side.CLIENT)
{
RayTraceResult result = rayTrace(event.getEntityPlayer(), 5, 1.0f);
if(result != null && result.typeOfHit == Type.MISS)
{
BlockPos blockpos = result.getBlockPos();
IBlockState state = event.getWorld().getBlockState(blockpos);
if(state.getBlock() == Blocks.WATER)
{
Minecraft.getMinecraft().playerController.processRightClickBlock((EntityPlayerSP)event.getEntityPlayer(),
(WorldClient)event.getWorld(), event.getItemStack(), blockpos, result.sideHit, result.hitVec, event.getHand());
}
}
else if(result != null && result.typeOfHit == Type.BLOCK)
{
BlockPos blockpos = result.getBlockPos().offset(result.sideHit);
IBlockState state = event.getWorld().getBlockState(blockpos);
if(state.getBlock() == Blocks.WATER)
{
Minecraft.getMinecraft().playerController.processRightClickBlock((EntityPlayerSP)event.getEntityPlayer(),
(WorldClient)event.getWorld(), event.getItemStack(), blockpos, result.sideHit, result.hitVec, event.getHand());
}
}
}
}
@SubscribeEvent
public void onRightClick(PlayerInteractEvent.RightClickBlock event)
{
if(event.getSide() == Side.CLIENT)
{
if(event.getHitVec() == null || event.getItemStack() != null)
{
return;
}
BlockPos blockpos = event.getPos().offset(event.getFace());
IBlockState state = event.getWorld().getBlockState(blockpos);
if(state.getBlock() == Blocks.WATER)
{
Minecraft.getMinecraft().playerController.processRightClickBlock((EntityPlayerSP)event.getEntityPlayer(),
(WorldClient)event.getWorld(), event.getItemStack(), blockpos, event.getFace(), event.getHitVec(), event.getHand());
}
}
else
{
IFoodStatsTFC food = (IFoodStatsTFC)event.getEntityPlayer().getFoodStats();
food.setWaterLevel((Math.min(food.getWaterLevel()+0.1f, 20)));
TFC.network.sendTo(new CFoodPacket(food), (EntityPlayerMP) event.getEntityPlayer());
return;
}
}
public RayTraceResult rayTrace(EntityPlayer player, double blockReachDistance, float partialTicks)
{
Vec3d vec3d = player.getPositionEyes(partialTicks);
Vec3d vec3d1 = player.getLook(partialTicks);
Vec3d vec3d2 = vec3d.addVector(vec3d1.xCoord * blockReachDistance, vec3d1.yCoord * blockReachDistance, vec3d1.zCoord * blockReachDistance);
return player.worldObj.rayTraceBlocks(vec3d, vec3d2, false, false, true);
}
}