Store placer on Block when placed

This commit is contained in:
William Blake Galbreath
2025-01-12 11:12:58 -08:00
committed by granny
parent ab27287ecb
commit 305d99234b
3 changed files with 35 additions and 49 deletions

View File

@@ -1,5 +1,21 @@
--- a/net/minecraft/world/item/ItemStack.java
+++ b/net/minecraft/world/item/ItemStack.java
@@ -461,6 +_,7 @@
serverLevel.isBlockPlaceCancelled = true; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent
for (org.bukkit.block.BlockState blockstate : blocks) {
blockstate.update(true, false);
+ ((org.bukkit.craftbukkit.block.CraftBlock) blockstate.getBlock()).getNMS().getBlock().forgetPlacer(); // Purpur - Store placer on Block when placed
}
serverLevel.isBlockPlaceCancelled = false; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent
serverLevel.preventPoiUpdated = false;
@@ -486,6 +_,7 @@
if (!(block.getBlock() instanceof net.minecraft.world.level.block.BaseEntityBlock)) { // Containers get placed automatically
block.onPlace(serverLevel, newPos, oldBlock, true, context);
}
+ block.getBlock().forgetPlacer(); // Purpur - Store placer on Block when placed
serverLevel.notifyAndUpdatePhysics(newPos, null, oldBlock, block, serverLevel.getBlockState(newPos), updateFlag, net.minecraft.world.level.block.Block.UPDATE_LIMIT); // send null chunk as chunk.k() returns false by this point
}
@@ -627,6 +_,26 @@
return this.isDamageableItem() && this.getDamageValue() > 0;
}

View File

@@ -0,0 +1,19 @@
--- a/net/minecraft/world/level/block/Block.java
+++ b/net/minecraft/world/level/block/Block.java
@@ -412,7 +_,15 @@
}
public void setPlacedBy(Level level, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) {
- }
+ this.placer = placer; // Purpur - Store placer on Block when placed
+ }
+
+ // Purpur start - Store placer on Block when placed
+ @Nullable protected LivingEntity placer = null;
+ public void forgetPlacer() {
+ this.placer = null;
+ }
+ // Purpur end - Store placer on Block when placed
public boolean isPossibleToRespawnInThis(BlockState state) {
return !state.isSolid() && !state.liquid();