--- a/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
@@ -43,12 +_,12 @@
     private int brushCount;
     private long brushCountResetsAtTick;
     private long coolDownEndsAtTick;
-    private ItemStack item = ItemStack.EMPTY;
+    public ItemStack item = ItemStack.EMPTY;
     @Nullable
     private Direction hitDirection;
     @Nullable
-    private ResourceKey<LootTable> lootTable;
-    private long lootTableSeed;
+    public ResourceKey<LootTable> lootTable;
+    public long lootTableSeed;
 
     public BrushableBlockEntity(BlockPos pos, BlockState blockState) {
         super(BlockEntityType.BRUSHABLE_BLOCK, pos, blockState);
@@ -138,7 +_,10 @@
             double d5 = blockPos.getZ() + 0.5 * d1 + d2;
             ItemEntity itemEntity = new ItemEntity(level, d3, d4, d5, this.item.split(level.random.nextInt(21) + 10));
             itemEntity.setDeltaMovement(Vec3.ZERO);
-            level.addFreshEntity(itemEntity);
+            // CraftBukkit start
+            org.bukkit.block.Block bblock = org.bukkit.craftbukkit.block.CraftBlock.at(this.level, this.worldPosition);
+            org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDropItemEvent(bblock, bblock.getState(), (ServerPlayer) player, java.util.List.of(itemEntity));
+            // CraftBukkit end
             this.item = ItemStack.EMPTY;
         }
     }
@@ -167,7 +_,7 @@
 
     private boolean tryLoadLootTable(CompoundTag tag) {
         if (tag.contains("LootTable", 8)) {
-            this.lootTable = ResourceKey.create(Registries.LOOT_TABLE, ResourceLocation.parse(tag.getString("LootTable")));
+            this.lootTable = net.minecraft.Optionull.map(ResourceLocation.tryParse(tag.getString("LootTable")), rl -> ResourceKey.create(Registries.LOOT_TABLE, rl)); // Paper - Validate ResourceLocation
             this.lootTableSeed = tag.getLong("LootTableSeed");
             return true;
         } else {
