Skip to content

Commit

Permalink
Finish base block patches
Browse files Browse the repository at this point in the history
  • Loading branch information
TonimatasDEV committed Nov 17, 2023
1 parent be0b45a commit 0646b4e
Showing 1 changed file with 43 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
--- a/net/minecraft/world/level/block/DropperBlock.java
+++ b/net/minecraft/world/level/block/DropperBlock.java
@@ -45,7 +_,7 @@
@@ -16,11 +_,13 @@
import net.minecraft.world.level.block.entity.HopperBlockEntity;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
+import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack;
+import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.slf4j.Logger;

public class DropperBlock extends DispenserBlock {
private static final Logger LOGGER = LogUtils.getLogger();
- private static final DispenseItemBehavior DISPENSE_BEHAVIOUR = new DefaultDispenseItemBehavior();
+ private static final DispenseItemBehavior DISPENSE_BEHAVIOUR = new DefaultDispenseItemBehavior(true); // CraftBukkit

public DropperBlock(BlockBehaviour.Properties p_52942_) {
super(p_52942_);
@@ -45,15 +_,32 @@
p_52944_.levelEvent(1001, p_52945_, 0);
} else {
ItemStack itemstack = dispenserblockentity.getItem(i);
Expand All @@ -9,3 +24,30 @@
Direction direction = p_52944_.getBlockState(p_52945_).getValue(FACING);
Container container = HopperBlockEntity.getContainerAt(p_52944_, p_52945_.relative(direction));
ItemStack itemstack1;
if (container == null) {
itemstack1 = DISPENSE_BEHAVIOUR.dispense(blocksource, itemstack);
} else {
- itemstack1 = HopperBlockEntity.addItem(dispenserblockentity, container, itemstack.copy().split(1), direction.getOpposite());
- if (itemstack1.isEmpty()) {
+ // CraftBukkit start - Fire event when pushing items into other inventories
+ CraftItemStack oitemstack = CraftItemStack.asCraftMirror(itemstack.copy().split(1));
+
+ org.bukkit.inventory.Inventory destinationInventory;
+ // Have to special case large chests as they work oddly
+ if (container instanceof ChestBlock.DoubleInventory) {
+ destinationInventory = new org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryDoubleChest((ChestBlock.DoubleInventory) container);
+ } else {
+ destinationInventory = container.getOwner().getInventory();
+ }
+
+ InventoryMoveItemEvent event = new InventoryMoveItemEvent(dispenserblockentity.getOwner().getInventory(), oitemstack.clone(), destinationInventory, true);
+ p_52944_.getCraftServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ return;
+ }
+ itemstack1 = HopperBlockEntity.addItem(dispenserblockentity, container, CraftItemStack.asNMSCopy(event.getItem()), direction.getOpposite());
+ if (event.getItem().equals(oitemstack) && itemstack1.isEmpty()) {
+ // CraftBukkit end
itemstack1 = itemstack.copy();
itemstack1.shrink(1);
} else {

0 comments on commit 0646b4e

Please sign in to comment.