diff options
author | Jonas Gunz <himself@jonasgunz.de> | 2020-04-18 02:20:31 +0200 |
---|---|---|
committer | Jonas Gunz <himself@jonasgunz.de> | 2020-04-18 02:20:31 +0200 |
commit | 931f0f04e802d38926958dd4dc17ccad9867ab16 (patch) | |
tree | f91dc8c2068c69bb4e423b652aeb49af06c1ed58 /src/main/java/re/jag/parquet/GlassBottleDispenserBehavior.java | |
parent | d163af77f66ef998f3689e57fe58c8f125f626cb (diff) | |
download | parquet-931f0f04e802d38926958dd4dc17ccad9867ab16.tar.gz |
Made Cauldron usable with Dispenser
Buckets and Bottles can empty Dispenser,
Shulkerboxes can be Cleaned.
Diffstat (limited to 'src/main/java/re/jag/parquet/GlassBottleDispenserBehavior.java')
-rw-r--r-- | src/main/java/re/jag/parquet/GlassBottleDispenserBehavior.java | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/main/java/re/jag/parquet/GlassBottleDispenserBehavior.java b/src/main/java/re/jag/parquet/GlassBottleDispenserBehavior.java new file mode 100644 index 0000000..851a769 --- /dev/null +++ b/src/main/java/re/jag/parquet/GlassBottleDispenserBehavior.java @@ -0,0 +1,63 @@ +package re.jag.parquet; + +import net.minecraft.block.BeehiveBlock; +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.block.entity.BeehiveBlockEntity; +import net.minecraft.block.entity.DispenserBlockEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.potion.PotionUtil; +import net.minecraft.potion.Potions; +import net.minecraft.tag.BlockTags; +import net.minecraft.tag.FluidTags; +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 GlassBottleDispenserBehavior extends FallibleItemDispenserBehavior { + + //TODO Port over to bucket? + private ItemStack insert_first_free_or_drop(BlockPointer blockPointer, ItemStack emptyBottleStack, ItemStack filledBottleStack) { + emptyBottleStack.decrement(1); + if (emptyBottleStack.isEmpty()) { + return filledBottleStack.copy(); + } + if (((DispenserBlockEntity)blockPointer.getBlockEntity()).addToFirstFreeSlot(filledBottleStack.copy()) < 0) { + this.dispense(blockPointer, filledBottleStack.copy()); + } + return emptyBottleStack; + } + + public ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) { + this.success = false; + World world = pointer.getWorld(); + BlockPos block_pos = pointer.getBlockPos().offset((Direction)pointer.getBlockState().get(DispenserBlock.FACING)); + BlockState state = world.getBlockState(block_pos); + Block block = state.getBlock(); + if (block.matches(BlockTags.BEEHIVES) && ((Integer)state.get(BeehiveBlock.HONEY_LEVEL)).intValue() >= 5) { + ((BeehiveBlock)state.getBlock()).takeHoney(world, state, block_pos, null, BeehiveBlockEntity.BeeState.BEE_RELEASED); + this.success = true; + return insert_first_free_or_drop(pointer, stack, new ItemStack(Items.HONEY_BOTTLE)); + } + if (block instanceof CauldronBlock) { + int fill_level = state.get(CauldronBlock.LEVEL); + if(fill_level > 0) { + ((CauldronBlock)block).setLevel(world, block_pos, state, fill_level - 1); + this.success = true; + return insert_first_free_or_drop(pointer, stack, PotionUtil.setPotion( new ItemStack(Items.POTION), Potions.WATER ) ); + } + return stack; + } + if (world.getFluidState(block_pos).matches(FluidTags.WATER)) { + this.success = true; + return insert_first_free_or_drop(pointer, stack, PotionUtil.setPotion(new ItemStack(Items.POTION), Potions.WATER)); + } + return super.dispenseSilently(pointer, stack); + } +} + |