package net.tropicraft.event;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.client.event.EntityViewRenderEvent;
import net.minecraftforge.event.entity.player.FillBucketEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.tropicraft.item.tool.IUnderwaterTool;
import net.tropicraft.item.tool.ItemUnderwaterShovel;
import net.tropicraft.registry.TCBlockRegistry;
import net.tropicraft.registry.TCFluidRegistry;
import net.tropicraft.registry.TCItemRegistry;
import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class TCItemEvents {
@SubscribeEvent
public void handleBucketFillEvent(FillBucketEvent event) {
ItemStack iHazBucket = new ItemStack(TCItemRegistry.bucketTropicsWater);
World world = event.world;
int x = event.target.blockX;
int y = event.target.blockY;
int z = event.target.blockZ;
int meta = world.getBlockMetadata(x, y, z);
Fluid fluid = FluidRegistry.lookupFluidForBlock(world.getBlock(x, y, z));
if (fluid != null) {
if (fluid == TCFluidRegistry.tropicsWater && meta == 0) {
TCItemRegistry.bucketTropicsWater.fill(iHazBucket, new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME), true);
world.setBlockToAir(x, y, z);
event.result = iHazBucket;
event.setResult(Result.ALLOW);
}
}
}
@SubscribeEvent
@SideOnly(Side.CLIENT)
public void changeTropicsWaterFogDensity(EntityViewRenderEvent.FogDensity event) {
int x = MathHelper.floor_double(event.entity.posX);
int y = MathHelper.ceiling_double_int(event.entity.posY + event.entity.height - 0.5F);
int z = MathHelper.floor_double(event.entity.posZ);
if (event.block.getMaterial().isLiquid() && event.block.getUnlocalizedName().equals(TCBlockRegistry.tropicsWater.getUnlocalizedName())) {
// System.out.println("hello?");
event.density = 0.0115F;
event.setCanceled(true);
}
}
@SubscribeEvent
@SideOnly(Side.CLIENT)
public void changeTropicsWaterFogColor(EntityViewRenderEvent.FogColors event) {
int x = MathHelper.floor_double(event.entity.posX);
int y = MathHelper.ceiling_double_int(event.entity.posY + event.entity.height - 0.5F);
int z = MathHelper.floor_double(event.entity.posZ);
if (event.block.getMaterial().isLiquid() && event.block.getUnlocalizedName().equals(TCBlockRegistry.tropicsWater.getUnlocalizedName())) {
event.red = 0.2F;
event.green = 0.8F;
event.blue = 0.5F;
}
}
@SubscribeEvent
public void handleUnderwaterTools(PlayerEvent.BreakSpeed event) {
EntityPlayer player = (EntityPlayer)event.entityPlayer;
ItemStack itemstack = player.getHeldItem();
if (itemstack != null && itemstack.getItem() != null) {
if (itemstack.getItem() instanceof IUnderwaterTool) {
if (isFullyUnderwater(player.worldObj, player)) {
event.newSpeed = event.originalSpeed * (player.onGround ? 5F : 10F);
} else { // Nerf underwater tools above water
event.newSpeed = event.originalSpeed / 14F;
if (itemstack.getItem() instanceof ItemUnderwaterShovel)
event.newSpeed /= 5F;
}
}
}
}
private boolean isFullyUnderwater(World world, EntityPlayer player) {
return player.isInsideOfMaterial(Material.water);
}
}