aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/re/jag/parquet/ShulkerPlacementDispenserBehavior.java
diff options
context:
space:
mode:
authorGravatar Jonas Gunz <himself@jonasgunz.de> 2020-04-18 02:20:31 +0200
committerGravatar Jonas Gunz <himself@jonasgunz.de> 2020-04-18 02:20:31 +0200
commit931f0f04e802d38926958dd4dc17ccad9867ab16 (patch)
treef91dc8c2068c69bb4e423b652aeb49af06c1ed58 /src/main/java/re/jag/parquet/ShulkerPlacementDispenserBehavior.java
parentd163af77f66ef998f3689e57fe58c8f125f626cb (diff)
downloadparquet-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/ShulkerPlacementDispenserBehavior.java')
-rw-r--r--src/main/java/re/jag/parquet/ShulkerPlacementDispenserBehavior.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/main/java/re/jag/parquet/ShulkerPlacementDispenserBehavior.java b/src/main/java/re/jag/parquet/ShulkerPlacementDispenserBehavior.java
new file mode 100644
index 0000000..20be74f
--- /dev/null
+++ b/src/main/java/re/jag/parquet/ShulkerPlacementDispenserBehavior.java
@@ -0,0 +1,54 @@
+package re.jag.parquet;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
+import net.minecraft.block.CauldronBlock;
+import net.minecraft.block.DispenserBlock;
+import net.minecraft.block.ShulkerBoxBlock;
+import net.minecraft.block.dispenser.BlockPlacementDispenserBehavior;
+import net.minecraft.item.AutomaticItemPlacementContext;
+import net.minecraft.item.BlockItem;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stat.Stats;
+import net.minecraft.util.ActionResult;
+import net.minecraft.util.math.BlockPointer;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+
+public class ShulkerPlacementDispenserBehavior extends BlockPlacementDispenserBehavior{
+ protected ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) {
+ this.success = false;
+
+ Item item = stack.getItem();
+
+ if (item instanceof BlockItem) {
+ Direction direction = (Direction)pointer.getBlockState().get(DispenserBlock.FACING);
+ BlockPos block_pos = pointer.getBlockPos().offset(direction);
+ Block block = ((BlockItem)item).getBlock();
+
+ if (block instanceof ShulkerBoxBlock && !pointer.getWorld().isClient()) {
+ BlockState state = pointer.getWorld().getBlockState(block_pos);
+ if (state.getBlock() instanceof CauldronBlock) {
+ int fill_level = state.get(CauldronBlock.LEVEL);
+ if (fill_level > 0) {
+ ItemStack itemStack5 = new ItemStack(Blocks.SHULKER_BOX, 1);
+ if (stack.hasTag()) {
+ itemStack5.setTag(stack.getTag().copy());
+ }
+ ((CauldronBlock)state.getBlock()).setLevel(pointer.getWorld(), block_pos, state, fill_level - 1);
+
+ this.success = true;
+ return itemStack5;
+ }
+
+ //fail if cauldron empty
+ return stack;
+ }
+ }
+ }
+
+ return super.dispenseSilently(pointer, stack);
+ }
+}