mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
8868dd196d
*still waiting for leaf to port datafixer to 1.18 so i can do entity serialization
86 lines
5.4 KiB
Diff
86 lines
5.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Sun, 3 Jan 2021 17:58:11 -0800
|
|
Subject: [PATCH] Add BlockBreakBlockEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/Block.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/Block.java
|
|
@@ -0,0 +0,0 @@ public class Block extends BlockBehaviour implements ItemLike {
|
|
}
|
|
|
|
}
|
|
+ // Paper start
|
|
+ public static boolean dropResources(BlockState state, LevelAccessor world, BlockPos pos, @Nullable BlockEntity blockEntity, BlockPos source) {
|
|
+ if (world instanceof ServerLevel) {
|
|
+ List<org.bukkit.inventory.ItemStack> items = com.google.common.collect.Lists.newArrayList();
|
|
+ for (net.minecraft.world.item.ItemStack drop : net.minecraft.world.level.block.Block.getDrops(state, world.getMinecraftWorld(), pos, blockEntity)) {
|
|
+ items.add(org.bukkit.craftbukkit.inventory.CraftItemStack.asBukkitCopy(drop));
|
|
+ }
|
|
+ io.papermc.paper.event.block.BlockBreakBlockEvent event = new io.papermc.paper.event.block.BlockBreakBlockEvent(org.bukkit.craftbukkit.block.CraftBlock.at(world, pos), org.bukkit.craftbukkit.block.CraftBlock.at(world, source), items);
|
|
+ event.callEvent();
|
|
+ for (var drop : event.getDrops()) {
|
|
+ popResource(world.getMinecraftWorld(), pos, org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(drop));
|
|
+ }
|
|
+ state.spawnAfterBreak(world.getMinecraftWorld(), pos, ItemStack.EMPTY);
|
|
+ }
|
|
+ return true;
|
|
+ }
|
|
+ // Paper end
|
|
|
|
public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, Entity entity, ItemStack stack) {
|
|
if (world instanceof ServerLevel) {
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java b/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java
|
|
@@ -0,0 +0,0 @@ public class PistonBaseBlock extends DirectionalBlock {
|
|
iblockdata1 = world.getBlockState(blockposition3);
|
|
BlockEntity tileentity = iblockdata1.hasBlockEntity() ? world.getBlockEntity(blockposition3) : null;
|
|
|
|
- dropResources(iblockdata1, world, blockposition3, tileentity);
|
|
+ dropResources(iblockdata1, world, blockposition3, tileentity, pos); // Paper
|
|
world.setBlock(blockposition3, Blocks.AIR.defaultBlockState(), 18);
|
|
if (!iblockdata1.is((Tag) BlockTags.FIRE)) {
|
|
world.addDestroyBlockEffect(blockposition3, iblockdata1);
|
|
diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
|
|
+++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
|
|
@@ -0,0 +0,0 @@ public abstract class FlowingFluid extends Fluid {
|
|
((LiquidBlockContainer) state.getBlock()).placeLiquid(world, pos, state, fluidState);
|
|
} else {
|
|
if (!state.isAir()) {
|
|
- this.beforeDestroyingBlock(world, pos, state);
|
|
+ this.beforeDestroyingBlock(world, pos, state, pos.relative(direction.getOpposite())); // Paper
|
|
}
|
|
|
|
world.setBlock(pos, fluidState.createLegacyBlock(), 3);
|
|
@@ -0,0 +0,0 @@ public abstract class FlowingFluid extends Fluid {
|
|
|
|
}
|
|
|
|
+ protected void beforeDestroyingBlock(LevelAccessor world, BlockPos pos, BlockState state, BlockPos source) { beforeDestroyingBlock(world, pos, state); } // Paper - add source parameter
|
|
protected abstract void beforeDestroyingBlock(LevelAccessor world, BlockPos pos, BlockState state);
|
|
|
|
private static short getCacheKey(BlockPos blockposition, BlockPos blockposition1) {
|
|
diff --git a/src/main/java/net/minecraft/world/level/material/WaterFluid.java b/src/main/java/net/minecraft/world/level/material/WaterFluid.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/world/level/material/WaterFluid.java
|
|
+++ b/src/main/java/net/minecraft/world/level/material/WaterFluid.java
|
|
@@ -0,0 +0,0 @@ public abstract class WaterFluid extends FlowingFluid {
|
|
return true;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ protected void beforeDestroyingBlock(LevelAccessor world, BlockPos pos, BlockState state, BlockPos source) {
|
|
+ BlockEntity tileentity = state.hasBlockEntity() ? world.getBlockEntity(pos) : null;
|
|
+ Block.dropResources(state, world, pos, tileentity, source);
|
|
+ }
|
|
+ // Paper end
|
|
@Override
|
|
protected void beforeDestroyingBlock(LevelAccessor world, BlockPos pos, BlockState state) {
|
|
BlockEntity blockEntity = state.hasBlockEntity() ? world.getBlockEntity(pos) : null;
|