package minefantasy.mf2.item; import java.util.Random; import minefantasy.mf2.api.heating.IQuenchBlock; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public class ItemHide extends ItemComponentMF { private final Item result; private float hardness; public ItemHide(String name, Item result, float hardness) { super(name, -1); this.result = result; this.hardness = hardness; } @Override public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) { MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, true); if (movingobjectposition == null) { return item; } else { if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { int i = movingobjectposition.blockX; int j = movingobjectposition.blockY; int k = movingobjectposition.blockZ; if (!world.canMineBlock(player, i, j, k)) { return item; } if (!player.canPlayerEdit(i, j, k, movingobjectposition.sideHit, item)) { return item; } if (isWaterSource(world, i, j, k)) { tryClean(item, world, player); } } return item; } } private Random rand = new Random(); private void tryClean(ItemStack item, World world, EntityPlayer player) { player.swingItem(); if (!world.isRemote) { world.playSoundAtEntity(player, "random.splash", 0.125F + rand.nextFloat()/4F, 0.5F + rand.nextFloat()); if (rand.nextFloat()*2*hardness < 1.0F) { item.stackSize--; EntityItem resultItem = new EntityItem(world, player.posX, player.posY, player.posZ, new ItemStack(result)); world.spawnEntityInWorld(resultItem); } } } private boolean isWaterSource(World world, int i, int j, int k) { if(world.getBlock(i, j, k).getMaterial() == Material.water) { return true; } if(isCauldron(world, i, j, k)) { return true; } if(isTrough(world, i, j, k)) { return true; } return false; } public boolean isTrough(World world, int x, int y, int z) { TileEntity tile = world.getTileEntity(x, y, z); return tile != null && tile instanceof IQuenchBlock; } public boolean isCauldron(World world, int x, int y, int z) { return world.getBlock(x, y, z) == Blocks.cauldron && world.getBlockMetadata(x, y, z)>0; } }