package joshie.harvest.fishing.item; import joshie.harvest.core.base.item.ItemBlockHF; import joshie.harvest.fishing.block.BlockFloating; import net.minecraft.block.BlockLiquid; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import javax.annotation.Nonnull; public class ItemBlockFishing extends ItemBlockHF<BlockFloating> { public ItemBlockFishing(BlockFloating block) { super(block); } @Override @Nonnull @SuppressWarnings({"ConstantConditions", "deprecation"}) public ActionResult<ItemStack> onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand) { IBlockState state = getBlock().getStateFromMeta(stack.getItemDamage()); RayTraceResult raytraceresult = rayTrace(world, player, true); if (raytraceresult == null) { return new ActionResult<>(EnumActionResult.PASS, stack); } else { if (raytraceresult.typeOfHit == RayTraceResult.Type.BLOCK) { BlockPos blockpos = raytraceresult.getBlockPos(); if (!world.isBlockModifiable(player, blockpos) || !player.canPlayerEdit(blockpos.offset(raytraceresult.sideHit), raytraceresult.sideHit, stack)) { return new ActionResult<>(EnumActionResult.FAIL, stack); } BlockPos blockpos1 = blockpos.up(); IBlockState iblockstate = world.getBlockState(blockpos); if (iblockstate.getMaterial() == Material.WATER && (iblockstate.getValue(BlockLiquid.LEVEL)) == 0 && world.isAirBlock(blockpos1)) { // special case for handling block placement with water lilies net.minecraftforge.common.util.BlockSnapshot blocksnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(world, blockpos1); world.setBlockState(blockpos1, state); if (net.minecraftforge.event.ForgeEventFactory.onPlayerBlockPlace(player, blocksnapshot, net.minecraft.util.EnumFacing.UP).isCanceled()) { blocksnapshot.restore(true, false); return new ActionResult<>(EnumActionResult.FAIL, stack); } world.setBlockState(blockpos1, state, 11); if (!player.capabilities.isCreativeMode) { --stack.stackSize; } player.addStat(StatList.getObjectUseStats(this)); world.playSound(player, blockpos, SoundEvents.BLOCK_WATERLILY_PLACE, SoundCategory.BLOCKS, 1.0F, 1.0F); return new ActionResult<>(EnumActionResult.SUCCESS, stack); } } return new ActionResult<>(EnumActionResult.FAIL, stack); } } @Override @Nonnull public EnumActionResult onItemUse(@Nonnull ItemStack stack, @Nonnull EntityPlayer playerIn, @Nonnull World worldIn, @Nonnull BlockPos pos, @Nonnull EnumHand hand, @Nonnull EnumFacing facing, float hitX, float hitY, float hitZ) { return EnumActionResult.PASS; } }