diff options
Diffstat (limited to 'src/main/java/re/jag/parquet/dispenser/GlassBottleDispenserBehavior.java')
-rw-r--r-- | src/main/java/re/jag/parquet/dispenser/GlassBottleDispenserBehavior.java | 68 |
1 files changed, 35 insertions, 33 deletions
diff --git a/src/main/java/re/jag/parquet/dispenser/GlassBottleDispenserBehavior.java b/src/main/java/re/jag/parquet/dispenser/GlassBottleDispenserBehavior.java index a0c5844..24cb409 100644 --- a/src/main/java/re/jag/parquet/dispenser/GlassBottleDispenserBehavior.java +++ b/src/main/java/re/jag/parquet/dispenser/GlassBottleDispenserBehavior.java @@ -1,67 +1,69 @@ package re.jag.parquet.dispenser; -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.*; import net.minecraft.block.dispenser.FallibleItemDispenserBehavior; +import net.minecraft.block.dispenser.ItemDispenserBehavior; import net.minecraft.block.entity.BeehiveBlockEntity; import net.minecraft.block.entity.DispenserBlockEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.potion.PotionUtil; import net.minecraft.potion.Potions; +import net.minecraft.server.world.ServerWorld; 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; +import net.minecraft.world.event.GameEvent; public class GlassBottleDispenserBehavior extends FallibleItemDispenserBehavior { + private final ItemDispenserBehavior fallbackBehavior = new ItemDispenserBehavior(); - //TODO Port over to bucket? - private ItemStack insert_first_free_or_drop(BlockPointer blockPointer, ItemStack emptyBottleStack, ItemStack filledBottleStack) { + private ItemStack tryPutFilledBottle(BlockPointer pointer, ItemStack emptyBottleStack, ItemStack filledBottleStack) { emptyBottleStack.decrement(1); if (emptyBottleStack.isEmpty()) { + pointer.getWorld().emitGameEvent((Entity)null, GameEvent.FLUID_PICKUP, pointer.getPos()); return filledBottleStack.copy(); + } else { + if (((DispenserBlockEntity)pointer.getBlockEntity()).addToFirstFreeSlot(filledBottleStack.copy()) < 0) { + this.fallbackBehavior.dispense(pointer, filledBottleStack.copy()); + } + + return emptyBottleStack; } - 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)); + BlockPos block_pos = pointer.getPos().offset((Direction)pointer.getBlockState().get(DispenserBlock.FACING)); BlockState state = world.getBlockState(block_pos); Block block = state.getBlock(); - //if (block.matches(BlockTags.BEEHIVES) && ... - if (state.method_27851(BlockTags.BEEHIVES, (abstractBlockState) -> { return abstractBlockState.contains(BeehiveBlock.HONEY_LEVEL); }) - && ((Integer)state.get(BeehiveBlock.HONEY_LEVEL)).intValue() >= 5) { - ((BeehiveBlock)state.getBlock()).takeHoney(world, state, block_pos, null, BeehiveBlockEntity.BeeState.BEE_RELEASED); - //this.success = true; + + // Original Behavior + if (state.isIn(BlockTags.BEEHIVES, (bstate) -> { + return bstate.contains(BeehiveBlock.HONEY_LEVEL); + }) && (Integer)state.get(BeehiveBlock.HONEY_LEVEL) >= 5) { + ((BeehiveBlock)state.getBlock()).takeHoney(world, state, block_pos, (PlayerEntity)null, BeehiveBlockEntity.BeeState.BEE_RELEASED); this.setSuccess(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; - this.setSuccess(true); - return insert_first_free_or_drop(pointer, stack, PotionUtil.setPotion( new ItemStack(Items.POTION), Potions.WATER ) ); - } - return stack; + return this.tryPutFilledBottle(pointer, stack, new ItemStack(Items.HONEY_BOTTLE)); + } else if (world.getFluidState(block_pos).isIn(FluidTags.WATER)) { + this.setSuccess(true); + return this.tryPutFilledBottle(pointer, stack, PotionUtil.setPotion(new ItemStack(Items.POTION), Potions.WATER)); } - if (world.getFluidState(block_pos).isIn(FluidTags.WATER)) { - //this.success = true; + + // New behavior + if (block instanceof LeveledCauldronBlock) { + /* TODO Check for Water */ + LeveledCauldronBlock.decrementFluidLevel(state, world, block_pos); this.setSuccess(true); - return insert_first_free_or_drop(pointer, stack, PotionUtil.setPotion(new ItemStack(Items.POTION), Potions.WATER)); - } + return tryPutFilledBottle(pointer, stack, PotionUtil.setPotion( new ItemStack(Items.POTION), Potions.WATER ) ); + } + return super.dispenseSilently(pointer, stack); } } |