From 931f0f04e802d38926958dd4dc17ccad9867ab16 Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Sat, 18 Apr 2020 02:20:31 +0200 Subject: Made Cauldron usable with Dispenser Buckets and Bottles can empty Dispenser, Shulkerboxes can be Cleaned. --- .../jag/parquet/WaterBucketDispenserBehavior.java | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/re/jag/parquet/WaterBucketDispenserBehavior.java (limited to 'src/main/java/re/jag/parquet/WaterBucketDispenserBehavior.java') diff --git a/src/main/java/re/jag/parquet/WaterBucketDispenserBehavior.java b/src/main/java/re/jag/parquet/WaterBucketDispenserBehavior.java new file mode 100644 index 0000000..8d38645 --- /dev/null +++ b/src/main/java/re/jag/parquet/WaterBucketDispenserBehavior.java @@ -0,0 +1,46 @@ +package re.jag.parquet; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.CauldronBlock; +import net.minecraft.block.DispenserBlock; +import net.minecraft.block.dispenser.FallibleItemDispenserBehavior; +import net.minecraft.item.BucketItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.math.BlockPointer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; + +public class WaterBucketDispenserBehavior extends FallibleItemDispenserBehavior{ + + public ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) { + this.success = false; + + BucketItem bucket_item = (BucketItem)stack.getItem(); + BlockPos block_pos = pointer.getBlockPos().offset((Direction)pointer.getBlockState().get(DispenserBlock.FACING)); + World world = pointer.getWorld(); + if (bucket_item.placeFluid(null, world, block_pos, null)) { + bucket_item.onEmptied(world, stack, block_pos); + this.success = true; + return new ItemStack(Items.BUCKET); + } + + BlockState state = pointer.getWorld().getBlockState(block_pos); + Block facing_block = state.getBlock(); + + if ( facing_block instanceof CauldronBlock) { + if (state.get(CauldronBlock.LEVEL) >= 3) { + return stack; + } + ((CauldronBlock)facing_block).setLevel(world, block_pos, state, 3); + + this.success = true; + return new ItemStack(Items.BUCKET, 1); + } + + this.success = true; + return this.dispense(pointer, stack); + } +} -- cgit v1.2.3