mirror of
https://github.com/LeavesMC/Leaves.git
synced 2026-01-04 15:41:31 +00:00
805 lines
41 KiB
Diff
805 lines
41 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: violetc <58360096+s-yh-china@users.noreply.github.com>
|
|
Date: Wed, 14 Aug 2024 01:48:14 +0800
|
|
Subject: [PATCH] Old Block remove behaviour
|
|
|
|
|
|
diff --git a/net/minecraft/world/Containers.java b/net/minecraft/world/Containers.java
|
|
index da10ca5ef12be1a834adda9243c082dadde24ec0..f682930f765d04f0a278b0648c2773ab5d4d740e 100644
|
|
--- a/net/minecraft/world/Containers.java
|
|
+++ b/net/minecraft/world/Containers.java
|
|
@@ -51,4 +51,15 @@ public class Containers {
|
|
public static void updateNeighboursAfterDestroy(BlockState state, Level level, BlockPos pos) {
|
|
level.updateNeighbourForOutputSignal(pos, state.getBlock());
|
|
}
|
|
+
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ public static void dropContentsOnDestroy(BlockState state, BlockState newState, Level level, BlockPos pos) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ if (level.getBlockEntity(pos) instanceof Container container) {
|
|
+ dropContents(level, pos, container);
|
|
+ level.updateNeighbourForOutputSignal(pos, state.getBlock());
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
}
|
|
diff --git a/net/minecraft/world/level/block/AbstractFurnaceBlock.java b/net/minecraft/world/level/block/AbstractFurnaceBlock.java
|
|
index 9cbc52312c065cc1e7a01368f3c3bd6f374f4e16..271a71aab53e206798c5e3a7be385da4e4f01e12 100644
|
|
--- a/net/minecraft/world/level/block/AbstractFurnaceBlock.java
|
|
+++ b/net/minecraft/world/level/block/AbstractFurnaceBlock.java
|
|
@@ -51,6 +51,26 @@ public abstract class AbstractFurnaceBlock extends BaseEntityBlock {
|
|
return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ BlockEntity blockEntity = level.getBlockEntity(pos);
|
|
+ if (blockEntity instanceof AbstractFurnaceBlockEntity) {
|
|
+ if (level instanceof ServerLevel) {
|
|
+ Containers.dropContents(level, pos, (AbstractFurnaceBlockEntity)blockEntity);
|
|
+ ((AbstractFurnaceBlockEntity)blockEntity).getRecipesToAwardAndPopExperience((ServerLevel)level, net.minecraft.world.phys.Vec3.atCenterOf(pos));
|
|
+ }
|
|
+
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ level.updateNeighbourForOutputSignal(pos, this);
|
|
+ } else {
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/BarrelBlock.java b/net/minecraft/world/level/block/BarrelBlock.java
|
|
index 95a1e4c332becb284af0e71c55f02e8e6338fdce..0597ec660c85c2ae5c50588016b2c15e951e2d56 100644
|
|
--- a/net/minecraft/world/level/block/BarrelBlock.java
|
|
+++ b/net/minecraft/world/level/block/BarrelBlock.java
|
|
@@ -49,6 +49,14 @@ public class BarrelBlock extends BaseEntityBlock {
|
|
return InteractionResult.SUCCESS;
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ Containers.dropContentsOnDestroy(state, newState, level, pos);
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/BasePressurePlateBlock.java b/net/minecraft/world/level/block/BasePressurePlateBlock.java
|
|
index 02289b88710f9305192e3fa7eed3e7c45eda1178..5fc859518c89bd0c3a9111b8d709a98d102c747b 100644
|
|
--- a/net/minecraft/world/level/block/BasePressurePlateBlock.java
|
|
+++ b/net/minecraft/world/level/block/BasePressurePlateBlock.java
|
|
@@ -125,6 +125,19 @@ public abstract class BasePressurePlateBlock extends Block {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!isMoving && !state.is(newState.getBlock())) {
|
|
+ if (this.getSignalForState(state) > 0) {
|
|
+ this.updateNeighbours(level, pos);
|
|
+ }
|
|
+
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (!movedByPiston && this.getSignalForState(state) > 0) {
|
|
diff --git a/net/minecraft/world/level/block/BaseRailBlock.java b/net/minecraft/world/level/block/BaseRailBlock.java
|
|
index 83ea4d44edfe98d2b2089d4d35caaa170575ab62..1e4df5fb66fd9d601a4ac95af6a3b6d32deef89b 100644
|
|
--- a/net/minecraft/world/level/block/BaseRailBlock.java
|
|
+++ b/net/minecraft/world/level/block/BaseRailBlock.java
|
|
@@ -121,6 +121,23 @@ public abstract class BaseRailBlock extends Block implements SimpleWaterloggedBl
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!isMoving) {
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ if (state.getValue(this.getShapeProperty()).isSlope()) {
|
|
+ level.updateNeighborsAt(pos.above(), this);
|
|
+ }
|
|
+
|
|
+ if (this.isStraight) {
|
|
+ level.updateNeighborsAt(pos, this);
|
|
+ level.updateNeighborsAt(pos.below(), this);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/BrewingStandBlock.java b/net/minecraft/world/level/block/BrewingStandBlock.java
|
|
index 265736cb7b96dae60e9c6c7911d10f9a430a548c..687ea91d4e18adf97a5277340af976d07bb4d13a 100644
|
|
--- a/net/minecraft/world/level/block/BrewingStandBlock.java
|
|
+++ b/net/minecraft/world/level/block/BrewingStandBlock.java
|
|
@@ -79,6 +79,14 @@ public class BrewingStandBlock extends BaseEntityBlock {
|
|
level.addParticle(ParticleTypes.SMOKE, d, d1, d2, 0.0, 0.0, 0.0);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ Containers.dropContentsOnDestroy(state, newState, level, pos);
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/ButtonBlock.java b/net/minecraft/world/level/block/ButtonBlock.java
|
|
index 969678cd1635b9579146577404fcc2ecc68a6e7b..60079ee02f32c0f04b58dda6bf5a96bb3cc2f247 100644
|
|
--- a/net/minecraft/world/level/block/ButtonBlock.java
|
|
+++ b/net/minecraft/world/level/block/ButtonBlock.java
|
|
@@ -132,6 +132,19 @@ public class ButtonBlock extends FaceAttachedHorizontalDirectionalBlock {
|
|
return isOn ? this.type.buttonClickOn() : this.type.buttonClickOff();
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!isMoving && !state.is(newState.getBlock())) {
|
|
+ if (state.getValue(POWERED)) {
|
|
+ this.updateNeighbours(state, level, pos);
|
|
+ }
|
|
+
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (!movedByPiston && state.getValue(POWERED)) {
|
|
diff --git a/net/minecraft/world/level/block/CampfireBlock.java b/net/minecraft/world/level/block/CampfireBlock.java
|
|
index f183f8e443e2183624288dcecdea587d51db6fae..af85c78c33ee05cdb444891f48e0627a86965f53 100644
|
|
--- a/net/minecraft/world/level/block/CampfireBlock.java
|
|
+++ b/net/minecraft/world/level/block/CampfireBlock.java
|
|
@@ -105,6 +105,20 @@ public class CampfireBlock extends BaseEntityBlock implements SimpleWaterloggedB
|
|
return InteractionResult.TRY_WITH_EMPTY_HAND;
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ BlockEntity blockEntity = level.getBlockEntity(pos);
|
|
+ if (blockEntity instanceof CampfireBlockEntity) {
|
|
+ net.minecraft.world.Containers.dropContents(level, pos, ((CampfireBlockEntity)blockEntity).getItems());
|
|
+ }
|
|
+
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) {
|
|
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
|
diff --git a/net/minecraft/world/level/block/ChestBlock.java b/net/minecraft/world/level/block/ChestBlock.java
|
|
index b4d190a2f6ff8d21635c20bb8c1940d789e5c254..9365a9adcc9900648a99dc4696f89154ace6dddb 100644
|
|
--- a/net/minecraft/world/level/block/ChestBlock.java
|
|
+++ b/net/minecraft/world/level/block/ChestBlock.java
|
|
@@ -276,6 +276,14 @@ public class ChestBlock extends AbstractChestBlock<ChestBlockEntity> implements
|
|
return this.chestCanConnectTo(blockState) && blockState.getValue(TYPE) == ChestType.SINGLE ? blockState.getValue(FACING) : null;
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ Containers.dropContentsOnDestroy(state, newState, level, pos);
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/ChiseledBookShelfBlock.java b/net/minecraft/world/level/block/ChiseledBookShelfBlock.java
|
|
index 77eee6728ecb0d5cb035a6a7969d5b3498a19b62..899508fbf9f59287d6ece9635e9cf071231d87b4 100644
|
|
--- a/net/minecraft/world/level/block/ChiseledBookShelfBlock.java
|
|
+++ b/net/minecraft/world/level/block/ChiseledBookShelfBlock.java
|
|
@@ -150,6 +150,27 @@ public class ChiseledBookShelfBlock extends BaseEntityBlock implements Selectabl
|
|
SLOT_OCCUPIED_PROPERTIES.forEach(property -> builder.add(property));
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ if (level.getBlockEntity(pos) instanceof ChiseledBookShelfBlockEntity chiseledBookShelfBlockEntity && !chiseledBookShelfBlockEntity.isEmpty()) {
|
|
+ for (int i = 0; i < 6; i++) {
|
|
+ ItemStack item = chiseledBookShelfBlockEntity.getItem(i);
|
|
+ if (!item.isEmpty()) {
|
|
+ Containers.dropItemStack(level, pos.getX(), pos.getY(), pos.getZ(), item);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ chiseledBookShelfBlockEntity.clearContent();
|
|
+ level.updateNeighbourForOutputSignal(pos, this);
|
|
+ }
|
|
+
|
|
+ super.onRemove(state, level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/CrafterBlock.java b/net/minecraft/world/level/block/CrafterBlock.java
|
|
index ad318cb7cd6d536d53ce9f911d5290bd9128b6f5..dbff3f9e20ed1fdadd596ce5ef3be196bdce2144 100644
|
|
--- a/net/minecraft/world/level/block/CrafterBlock.java
|
|
+++ b/net/minecraft/world/level/block/CrafterBlock.java
|
|
@@ -129,6 +129,14 @@ public class CrafterBlock extends BaseEntityBlock {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ Containers.dropContentsOnDestroy(state, newState, level, pos);
|
|
+ super.onRemove(state, level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/CreakingHeartBlock.java b/net/minecraft/world/level/block/CreakingHeartBlock.java
|
|
index a995afde495fc698e6881f272bf75e90fa4d2664..d2ce1e547ce72b263d1cef32a25848778c238bab 100644
|
|
--- a/net/minecraft/world/level/block/CreakingHeartBlock.java
|
|
+++ b/net/minecraft/world/level/block/CreakingHeartBlock.java
|
|
@@ -152,6 +152,16 @@ public class CreakingHeartBlock extends BaseEntityBlock {
|
|
builder.add(AXIS, STATE, NATURAL);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ if (level.getBlockEntity(pos) instanceof CreakingHeartBlockEntity creakingHeartBlockEntity) {
|
|
+ creakingHeartBlockEntity.removeProtector(null);
|
|
+ }
|
|
+ super.onRemove(state, level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/DecoratedPotBlock.java b/net/minecraft/world/level/block/DecoratedPotBlock.java
|
|
index beef5ba8bd0b12b0012c7d063515b5dee596bd6b..d0795c4f2f7e7c1428eed088f1e15760a3d2b5f5 100644
|
|
--- a/net/minecraft/world/level/block/DecoratedPotBlock.java
|
|
+++ b/net/minecraft/world/level/block/DecoratedPotBlock.java
|
|
@@ -165,6 +165,14 @@ public class DecoratedPotBlock extends BaseEntityBlock implements SimpleWaterlog
|
|
return new DecoratedPotBlockEntity(pos, state);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ Containers.dropContentsOnDestroy(state, newState, level, pos);
|
|
+ super.onRemove(state, level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/DiodeBlock.java b/net/minecraft/world/level/block/DiodeBlock.java
|
|
index 558751ade918a92a1173096ccfeacf238f4260d0..94d35e4812705771756a0ee1a9b0255be75e3770 100644
|
|
--- a/net/minecraft/world/level/block/DiodeBlock.java
|
|
+++ b/net/minecraft/world/level/block/DiodeBlock.java
|
|
@@ -175,6 +175,16 @@ public abstract class DiodeBlock extends HorizontalDirectionalBlock {
|
|
this.updateNeighborsInFront(level, pos, state);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!isMoving && !state.is(newState.getBlock())) {
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ this.updateNeighborsInFront(level, pos, state);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/DispenserBlock.java b/net/minecraft/world/level/block/DispenserBlock.java
|
|
index 3db7260752e5978c6a1c75e15ac78587949dac94..5b6cbc0adbbb32b30ea35c4a76b0fe29ed1cb0e5 100644
|
|
--- a/net/minecraft/world/level/block/DispenserBlock.java
|
|
+++ b/net/minecraft/world/level/block/DispenserBlock.java
|
|
@@ -147,6 +147,14 @@ public class DispenserBlock extends BaseEntityBlock {
|
|
return this.defaultBlockState().setValue(FACING, context.getNearestLookingDirection().getOpposite());
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ Containers.dropContentsOnDestroy(state, newState, level, pos);
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/HopperBlock.java b/net/minecraft/world/level/block/HopperBlock.java
|
|
index 73b602eee0da94f657b4b4cb654147f7ba41c1a4..cf3a1122a9581b1a322990c1660711c1c72df570 100644
|
|
--- a/net/minecraft/world/level/block/HopperBlock.java
|
|
+++ b/net/minecraft/world/level/block/HopperBlock.java
|
|
@@ -125,6 +125,14 @@ public class HopperBlock extends BaseEntityBlock {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ Containers.dropContentsOnDestroy(state, newState, level, pos);
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/JukeboxBlock.java b/net/minecraft/world/level/block/JukeboxBlock.java
|
|
index a1acd044d6f1ccd4f79e582d61d4dd8002854af3..5267f5349677cfa6370042e4fa82018ad89fc937 100644
|
|
--- a/net/minecraft/world/level/block/JukeboxBlock.java
|
|
+++ b/net/minecraft/world/level/block/JukeboxBlock.java
|
|
@@ -73,6 +73,19 @@ public class JukeboxBlock extends BaseEntityBlock {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ if (level.getBlockEntity(pos) instanceof JukeboxBlockEntity jukeboxBlockEntity) {
|
|
+ jukeboxBlockEntity.popOutTheItem();
|
|
+ }
|
|
+
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/LecternBlock.java b/net/minecraft/world/level/block/LecternBlock.java
|
|
index 31e793474a1787be2c737417b849d0e3bc79ed10..b7af47f00042de5c491809255d0d911c65747f25 100644
|
|
--- a/net/minecraft/world/level/block/LecternBlock.java
|
|
+++ b/net/minecraft/world/level/block/LecternBlock.java
|
|
@@ -198,6 +198,36 @@ public class LecternBlock extends BaseEntityBlock {
|
|
changePowered(level, pos, state, false);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ if (state.getValue(HAS_BOOK)) {
|
|
+ this.popBook(state, level, pos);
|
|
+ }
|
|
+
|
|
+ if (state.getValue(POWERED)) {
|
|
+ updateBelow(level, pos, state);
|
|
+ }
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private void popBook(BlockState state, Level level, BlockPos pos) {
|
|
+ if (level.getBlockEntity(pos) instanceof LecternBlockEntity lecternBlockEntity) { // CraftBukkit - don't validate, type may be changed already // Leaves - the method with validate arg already removed by paper...
|
|
+ Direction direction = state.getValue(FACING);
|
|
+ ItemStack itemStack = lecternBlockEntity.getBook().copy();
|
|
+ if (itemStack.isEmpty()) return; // CraftBukkit - SPIGOT-5500
|
|
+ float f = 0.25F * direction.getStepX();
|
|
+ float f1 = 0.25F * direction.getStepZ();
|
|
+ net.minecraft.world.entity.item.ItemEntity itemEntity = new net.minecraft.world.entity.item.ItemEntity(level, pos.getX() + 0.5 + f, pos.getY() + 1, pos.getZ() + 0.5 + f1, itemStack);
|
|
+ itemEntity.setDefaultPickUpDelay();
|
|
+ level.addFreshEntity(itemEntity);
|
|
+ lecternBlockEntity.clearContent();
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (state.getValue(POWERED)) {
|
|
diff --git a/net/minecraft/world/level/block/LeverBlock.java b/net/minecraft/world/level/block/LeverBlock.java
|
|
index 7639201a15dfef7ad84a63c2217aeacd626041c2..ad689677be3c6a331684a62b3687ed83718733a2 100644
|
|
--- a/net/minecraft/world/level/block/LeverBlock.java
|
|
+++ b/net/minecraft/world/level/block/LeverBlock.java
|
|
@@ -125,6 +125,19 @@ public class LeverBlock extends FaceAttachedHorizontalDirectionalBlock {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!isMoving && !state.is(newState.getBlock())) {
|
|
+ if (state.getValue(POWERED)) {
|
|
+ this.updateNeighbours(state, level, pos);
|
|
+ }
|
|
+
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (!movedByPiston && state.getValue(POWERED)) {
|
|
diff --git a/net/minecraft/world/level/block/LightningRodBlock.java b/net/minecraft/world/level/block/LightningRodBlock.java
|
|
index e33238331d9f7f421c05959fc6653f31b7a00704..62cd2cfc0456f07a9c5cebfe4f9410658bd3c689 100644
|
|
--- a/net/minecraft/world/level/block/LightningRodBlock.java
|
|
+++ b/net/minecraft/world/level/block/LightningRodBlock.java
|
|
@@ -120,6 +120,18 @@ public class LightningRodBlock extends RodBlock implements SimpleWaterloggedBloc
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ if (state.getValue(POWERED)) {
|
|
+ this.updateNeighbours(state, level, pos);
|
|
+ }
|
|
+ super.onRemove(state, level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (state.getValue(POWERED)) {
|
|
diff --git a/net/minecraft/world/level/block/ObserverBlock.java b/net/minecraft/world/level/block/ObserverBlock.java
|
|
index bd2aa00ce8b78c16f6107064dd00bfbb072df0df..6db3a21bcc37ae79f82b19ee0a851f539d4a654d 100644
|
|
--- a/net/minecraft/world/level/block/ObserverBlock.java
|
|
+++ b/net/minecraft/world/level/block/ObserverBlock.java
|
|
@@ -127,6 +127,17 @@ public class ObserverBlock extends DirectionalBlock {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ if (state.getValue(POWERED) && level.getBlockTicks().hasScheduledTick(pos, this)) {
|
|
+ this.updateNeighborsInFront(level, pos, state.setValue(POWERED, Boolean.FALSE));
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (state.getValue(POWERED) && level.getBlockTicks().hasScheduledTick(pos, this)) {
|
|
diff --git a/net/minecraft/world/level/block/RedStoneWireBlock.java b/net/minecraft/world/level/block/RedStoneWireBlock.java
|
|
index 813dbd68dc7b939444050399f881a938df116a56..0fee20208ca95ae4fcf3aeb73c11eee7860bab5e 100644
|
|
--- a/net/minecraft/world/level/block/RedStoneWireBlock.java
|
|
+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java
|
|
@@ -363,6 +363,27 @@ public class RedStoneWireBlock extends Block {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!isMoving && !state.is(newState.getBlock())) {
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ for (Direction direction : Direction.values()) {
|
|
+ level.updateNeighborsAt(pos.relative(direction), this);
|
|
+ }
|
|
+
|
|
+ // Paper start - optimize redstone - replace call to updatePowerStrength
|
|
+ if (level.paperConfig().misc.redstoneImplementation == io.papermc.paper.configuration.WorldConfiguration.Misc.RedstoneImplementation.ALTERNATE_CURRENT) {
|
|
+ level.getWireHandler().onWireRemoved(pos, state); // Alternate Current
|
|
+ } else {
|
|
+ this.updateSurroundingRedstone(level, pos, state, null, false); // Vanilla/Eigencraft
|
|
+ }
|
|
+ // Paper end - optimize redstone
|
|
+ this.updateNeighborsOfNeighboringWires(level, pos);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/RedstoneTorchBlock.java b/net/minecraft/world/level/block/RedstoneTorchBlock.java
|
|
index 33e2f2de19208b7af6551132887e310744b4b702..d36c3bdb59bf9b9467d1a9807ab789b4c180010d 100644
|
|
--- a/net/minecraft/world/level/block/RedstoneTorchBlock.java
|
|
+++ b/net/minecraft/world/level/block/RedstoneTorchBlock.java
|
|
@@ -53,6 +53,15 @@ public class RedstoneTorchBlock extends BaseTorchBlock {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!isMoving) {
|
|
+ this.notifyNeighbors(level, pos, state);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/SculkSensorBlock.java b/net/minecraft/world/level/block/SculkSensorBlock.java
|
|
index 8a6c7e3b7e0aa7f13373d5d860bdc2a06d4084e0..b4c5e16d23238ac89e739269e04e16be54394e66 100644
|
|
--- a/net/minecraft/world/level/block/SculkSensorBlock.java
|
|
+++ b/net/minecraft/world/level/block/SculkSensorBlock.java
|
|
@@ -129,6 +129,18 @@ public class SculkSensorBlock extends BaseEntityBlock implements SimpleWaterlogg
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ if (getPhase(state) == SculkSensorPhase.ACTIVE) {
|
|
+ updateNeighbours(level, pos, state);
|
|
+ }
|
|
+ super.onRemove(state, level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (getPhase(state) == SculkSensorPhase.ACTIVE) {
|
|
diff --git a/net/minecraft/world/level/block/SculkShriekerBlock.java b/net/minecraft/world/level/block/SculkShriekerBlock.java
|
|
index ef9f879e7819fcb977dadcfbb4b95b4f7b2f4266..15ca094bb0378fd4eaebf1b2f7626de53cf2e5ce 100644
|
|
--- a/net/minecraft/world/level/block/SculkShriekerBlock.java
|
|
+++ b/net/minecraft/world/level/block/SculkShriekerBlock.java
|
|
@@ -68,6 +68,16 @@ public class SculkShriekerBlock extends BaseEntityBlock implements SimpleWaterlo
|
|
super.stepOn(level, pos, state, entity);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ if (level instanceof ServerLevel serverLevel && state.getValue(SHRIEKING) && !state.is(newState.getBlock())) {
|
|
+ serverLevel.getBlockEntity(pos, BlockEntityType.SCULK_SHRIEKER).ifPresent(sculkShrieker -> sculkShrieker.tryRespond(serverLevel));
|
|
+ }
|
|
+ super.onRemove(state, level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
|
if (state.getValue(SHRIEKING)) {
|
|
diff --git a/net/minecraft/world/level/block/ShulkerBoxBlock.java b/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
|
index efb25d556f2192b1ee499c28d14aa7d11bcabef8..188fd15cce078db6eac14aff933a3c762397d602 100644
|
|
--- a/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
|
+++ b/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
|
@@ -152,6 +152,19 @@ public class ShulkerBoxBlock extends BaseEntityBlock {
|
|
// Paper end - re-set loot table if it was cleared
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ BlockEntity blockEntity = level.getBlockEntity(pos);
|
|
+ if (blockEntity instanceof ShulkerBoxBlockEntity) {
|
|
+ level.updateNeighbourForOutputSignal(pos, state.getBlock());
|
|
+ }
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
Containers.updateNeighboursAfterDestroy(state, level, pos);
|
|
diff --git a/net/minecraft/world/level/block/TripWireBlock.java b/net/minecraft/world/level/block/TripWireBlock.java
|
|
index 43b46d04634a96d373cf9adac15a6f61e42e821f..87a6a27c38408269c1f9740687de6625d3b0a6c1 100644
|
|
--- a/net/minecraft/world/level/block/TripWireBlock.java
|
|
+++ b/net/minecraft/world/level/block/TripWireBlock.java
|
|
@@ -108,6 +108,16 @@ public class TripWireBlock extends Block {
|
|
}
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates) return; // Paper - prevent adjacent tripwires from updating
|
|
+ if (!isMoving && !state.is(newState.getBlock())) {
|
|
+ this.updateSource(level, pos, state.setValue(POWERED, Boolean.TRUE));
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates) return; // Paper - prevent adjacent tripwires from updating
|
|
diff --git a/net/minecraft/world/level/block/TripWireHookBlock.java b/net/minecraft/world/level/block/TripWireHookBlock.java
|
|
index a92462c76a648e6c175b8c2ef3e925aba81ba774..b32760f1096581059418f479b060019f7dccbd67 100644
|
|
--- a/net/minecraft/world/level/block/TripWireHookBlock.java
|
|
+++ b/net/minecraft/world/level/block/TripWireHookBlock.java
|
|
@@ -245,6 +245,25 @@ public class TripWireHookBlock extends Block {
|
|
level.updateNeighborsAt(pos.relative(opposite), block, orientation);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!isMoving && !state.is(newState.getBlock())) {
|
|
+ boolean attachedValue = state.getValue(ATTACHED);
|
|
+ boolean poweredValue = state.getValue(POWERED);
|
|
+ if (attachedValue || poweredValue) {
|
|
+ calculateState(level, pos, state, true, false, -1, null);
|
|
+ }
|
|
+
|
|
+ if (poweredValue) {
|
|
+ notifyNeighbors(this, level, pos, state.getValue(FACING));
|
|
+ }
|
|
+
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/entity/BlockEntityType.java b/net/minecraft/world/level/block/entity/BlockEntityType.java
|
|
index 42865515fd8c6a321cc68f3c507738b86dc55d35..5577661dc430c11a692aec576c56c17cb8bef84c 100644
|
|
--- a/net/minecraft/world/level/block/entity/BlockEntityType.java
|
|
+++ b/net/minecraft/world/level/block/entity/BlockEntityType.java
|
|
@@ -303,7 +303,7 @@ public class BlockEntityType<T extends BlockEntity> {
|
|
}
|
|
|
|
public boolean isValid(BlockState state) {
|
|
- return this.validBlocks.contains(state.getBlock());
|
|
+ return org.leavesmc.leaves.LeavesConfig.modify.oldMC.updater.oldBlockRemoveBehaviour || this.validBlocks.contains(state.getBlock()); // Leaves - behaviour 1.21.1-
|
|
}
|
|
|
|
@Deprecated
|
|
diff --git a/net/minecraft/world/level/block/piston/MovingPistonBlock.java b/net/minecraft/world/level/block/piston/MovingPistonBlock.java
|
|
index 16f14dffcbca21e0c6d369d557ab6c036523b8bd..85ea573faf87f6c58ccbec69b77dbc981768c52e 100644
|
|
--- a/net/minecraft/world/level/block/piston/MovingPistonBlock.java
|
|
+++ b/net/minecraft/world/level/block/piston/MovingPistonBlock.java
|
|
@@ -67,6 +67,18 @@ public class MovingPistonBlock extends BaseEntityBlock {
|
|
return createTickerHelper(blockEntityType, BlockEntityType.PISTON, PistonMovingBlockEntity::tick);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ BlockEntity blockEntity = level.getBlockEntity(pos);
|
|
+ if (blockEntity instanceof PistonMovingBlockEntity) {
|
|
+ ((PistonMovingBlockEntity)blockEntity).finalTick();
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
public void destroy(LevelAccessor level, BlockPos pos, BlockState state) {
|
|
BlockPos blockPos = pos.relative(state.getValue(FACING).getOpposite());
|
|
diff --git a/net/minecraft/world/level/block/piston/PistonHeadBlock.java b/net/minecraft/world/level/block/piston/PistonHeadBlock.java
|
|
index 72e39ceeca8d684569c4250263b41034362f8abd..29cf6e44e328ffc3c311149f383c4bd390c515c4 100644
|
|
--- a/net/minecraft/world/level/block/piston/PistonHeadBlock.java
|
|
+++ b/net/minecraft/world/level/block/piston/PistonHeadBlock.java
|
|
@@ -78,6 +78,19 @@ public class PistonHeadBlock extends DirectionalBlock {
|
|
return super.playerWillDestroy(level, pos, state, player);
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ @Override
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
|
+ if (!state.is(newState.getBlock())) {
|
|
+ super.onRemove(state, level, pos, newState, isMoving);
|
|
+ BlockPos blockPos = pos.relative(state.getValue(FACING).getOpposite());
|
|
+ if (this.isFittingBase(state, level.getBlockState(blockPos))) {
|
|
+ level.destroyBlock(blockPos, true);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
@Override
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
BlockPos blockPos = pos.relative(state.getValue(FACING).getOpposite());
|
|
diff --git a/net/minecraft/world/level/block/state/BlockBehaviour.java b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
index 23a7c045b07b9b30b2c8fb99e254a65b390e6245..bf1842b30074cde4ad6ce4c95e48e9d831c9e055 100644
|
|
--- a/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
+++ b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
@@ -170,6 +170,15 @@ public abstract class BlockBehaviour implements FeatureElement {
|
|
org.spigotmc.AsyncCatcher.catchOp("block onPlace"); // Spigot
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ org.spigotmc.AsyncCatcher.catchOp("block remove"); // Spigot
|
|
+ if (state.hasBlockEntity() && !state.is(newState.getBlock())) {
|
|
+ level.removeBlockEntity(pos);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
}
|
|
|
|
@@ -869,6 +878,12 @@ public abstract class BlockBehaviour implements FeatureElement {
|
|
// CraftBukkit end
|
|
}
|
|
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ public void onRemove(Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
|
|
+ this.getBlock().onRemove(this.asState(), level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
public void affectNeighborsAfterRemoval(ServerLevel level, BlockPos pos, boolean movedByPiston) {
|
|
this.getBlock().affectNeighborsAfterRemoval(this.asState(), level, pos, movedByPiston);
|
|
}
|
|
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
|
index e96a7693eb0d94888a3b1db680378374e7aebb91..836aa1926079515df166cd76d27b2d24a2f99646 100644
|
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
|
@@ -403,20 +403,26 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
|
boolean flag = !blockState.is(block);
|
|
boolean flag1 = (flags & 64) != 0;
|
|
boolean flag2 = (flags & 256) == 0;
|
|
- if (flag && blockState.hasBlockEntity() && !state.shouldChangedStateKeepBlockEntity(blockState)) {
|
|
- if (!this.level.isClientSide() && flag2) {
|
|
- BlockEntity blockEntity = this.level.getBlockEntity(pos);
|
|
- if (blockEntity != null) {
|
|
- blockEntity.preRemoveSideEffects(pos, blockState);
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ if (!org.leavesmc.leaves.LeavesConfig.modify.oldMC.updater.oldBlockRemoveBehaviour) {
|
|
+ if (flag && blockState.hasBlockEntity()) {
|
|
+ if (!this.level.isClientSide() && flag2) {
|
|
+ BlockEntity blockEntity = this.level.getBlockEntity(pos);
|
|
+ if (blockEntity != null) {
|
|
+ blockEntity.preRemoveSideEffects(pos, blockState);
|
|
+ }
|
|
}
|
|
- }
|
|
|
|
- this.removeBlockEntity(pos);
|
|
- }
|
|
+ this.removeBlockEntity(pos);
|
|
+ }
|
|
|
|
- if ((flag || block instanceof BaseRailBlock) && this.level instanceof ServerLevel serverLevel && ((flags & 1) != 0 || flag1)) {
|
|
- blockState.affectNeighborsAfterRemoval(serverLevel, pos, flag1);
|
|
+ if ((flag || block instanceof BaseRailBlock) && this.level instanceof ServerLevel serverLevel && ((flags & 1) != 0 || flag1)) {
|
|
+ blockState.affectNeighborsAfterRemoval(serverLevel, pos, flag1);
|
|
+ }
|
|
+ } else {
|
|
+ blockState.onRemove(this.level, pos, state, flag1);
|
|
}
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
|
|
if (!section.getBlockState(i, i1, i2).is(block)) {
|
|
return null;
|