@SubscribeEvent(priority = EventPriority.LOWEST) public void onFillBucket(FillBucketEvent event) { if (event.isCanceled() || event.getResult() != Event.Result.DEFAULT) return; if (event.getTarget() == null) return; Block block = event.getWorld().getBlockState(event.getTarget().getBlockPos()).getBlock(); // if we've gotten this far, then it shouldn't be able to be picked up by a bucket // ItemBucketGeneric would have handled it if it was possible to pick it up // this stops BlockFluidGenerics creating water buckets if they don't have a bucket item if (block instanceof BlockFluidClassic) { event.setCanceled(true); event.setResult(Event.Result.DENY); } }
@SubscribeEvent public void onRightClickHoldingBucket(FillBucketEvent event) { // check we're using a bucket, on a block we can modify if (event.getEmptyBucket().getItem() != Items.BUCKET) {return;} if (event.getTarget() == null || event.getTarget().typeOfHit != RayTraceResult.Type.BLOCK) {return;} BlockPos blockpos = event.getTarget().getBlockPos(); if (!event.getWorld().isBlockModifiable(event.getEntityPlayer(), blockpos)) {return;} if (!event.getEntityPlayer().canPlayerEdit(blockpos.offset(event.getTarget().sideHit), event.getTarget().sideHit, event.getEmptyBucket())) {return;} // determine if the block is one of our TAN fluids IBlockState iblockstate = event.getWorld().getBlockState(blockpos); Fluid filled_fluid = null; if (iblockstate.getBlock() == TANBlocks.purified_water && iblockstate.getValue(BlockPurifiedWaterFluid.LEVEL).intValue() == 0) { filled_fluid = PurifiedWaterFluid.instance; } else { return; } // remove the fluid and return the appropriate filled bucket event.setResult(Result.ALLOW); event.setFilledBucket(UniversalBucket.getFilledBucket(ForgeModContainer.getInstance().universalBucket, filled_fluid)); event.getWorld().setBlockToAir(blockpos); //TODO: event.entityPlayer.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(event.getEmptyBucket().getItem())]); } }
private void stopFillWithEternalWaterBlock(FillBucketEvent event) { if (Configs.isEnabled(EternalWaterBlockConfig.class) && event.getTarget() != null) { Block block = event.getWorld().getBlockState(event.getTarget().getBlockPos()).getBlock(); if (block == EternalWaterBlockConfig._instance.getBlockInstance()) { event.setCanceled(true); } } }
@SubscribeEvent(priority = EventPriority.HIGH) public void onBucketFill(FillBucketEvent evt) { if (evt.getResult() != Result.DEFAULT) return; if (evt.getEmptyBucket().getItem() != EMPTY_BUCKET) return; final RayTraceResult target = evt.getTarget(); if (target == null || target.typeOfHit != RayTraceResult.Type.BLOCK) return; final TileEntity te = evt.getWorld().getTileEntity(target.getBlockPos()); if (te == null) return; if (te.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, target.sideHit)) { final IFluidHandler source = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, target.sideHit); final FluidStack drained = source.drain(containedFluid, false); if (containedFluid.isFluidStackIdentical(drained)) { source.drain(containedFluid, true); evt.setFilledBucket(filledBucket.copy()); evt.setResult(Result.ALLOW); } } }
/** * FillBucketEvent handler. * <p> * Check, if a player tries to fill a bucket. * Deny if: * - If the fill happens in the colony * - player is neutral or hostile to colony * * @param event EntityItemPickupEvent */ @SubscribeEvent public void on(final FillBucketEvent event) { @Nullable BlockPos targetBlockPos = null; if (null != event.getTarget()) { targetBlockPos = event.getTarget().getBlockPos(); } checkEventCancelation(Action.FILL_BUCKET, event.getEntityPlayer(), event.getEntityPlayer().getEntityWorld(), event, targetBlockPos); }
@SubscribeEvent public void onBucketFill(FillBucketEvent evt) { if (evt.getResult() != Result.DEFAULT) return; if (evt.getEmptyBucket().getItem() != EMPTY_BUCKET) return; final RayTraceResult target = evt.getTarget(); if (target == null || target.typeOfHit != RayTraceResult.Type.BLOCK) return; final TileEntity te = evt.getWorld().getTileEntity(target.getBlockPos()); if (te == null) return; if (!canFill(evt.getWorld(), target.getBlockPos(), te)) { return; } if (te.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, target.sideHit)) { final IFluidHandler source = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, target.sideHit); final FluidStack fluidInContainer = source.drain(Fluid.BUCKET_VOLUME, false); if (fluidInContainer != null) { final ItemStack filledBucket = getFilledBucket(fluidInContainer); if (!filledBucket.isEmpty()) { final IFluidHandlerItem container = FluidUtil.getFluidHandler(filledBucket); if (container != null) { final FluidStack fluidInBucket = container.drain(Integer.MAX_VALUE, false); if (fluidInBucket != null && fluidInBucket.isFluidStackIdentical(source.drain(fluidInBucket, false))) { source.drain(fluidInBucket, true); evt.setFilledBucket(filledBucket.copy()); evt.setResult(Result.ALLOW); } } } } } }