823 lines
42 KiB
Diff
823 lines
42 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
|
|
Date: Tue, 18 Nov 2025 23:11:26 +0800
|
|
Subject: [PATCH] Leaves: Old Block remove behaviour
|
|
|
|
Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com>
|
|
As a part of : Leaves (https://github.com/LeavesMC/Leaves)
|
|
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
|
|
|
|
diff --git a/net/minecraft/world/Containers.java b/net/minecraft/world/Containers.java
|
|
index e9e2ef680cfc72cd47fa13d72c03619d2f1ca5fc..6370f0eb9039941687d37a0fe387fbd676ec151b 100644
|
|
--- a/net/minecraft/world/Containers.java
|
|
+++ b/net/minecraft/world/Containers.java
|
|
@@ -51,4 +51,16 @@ public class Containers {
|
|
public static void updateNeighboursAfterDestroy(final BlockState state, final Level level, final 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 98561dcc465ca9d5394e58b05ad3e8dc59773ebc..72e3d6c1ce3389972df21d5ff6e4d74bcf2ad300 100644
|
|
--- a/net/minecraft/world/level/block/AbstractFurnaceBlock.java
|
|
+++ b/net/minecraft/world/level/block/AbstractFurnaceBlock.java
|
|
@@ -53,6 +53,27 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 7bb880bfa9008a431acfd7c5d543f1e5a4bb67b2..58e92db685204660b41de9bfc0a5092383c8ec18 100644
|
|
--- a/net/minecraft/world/level/block/BarrelBlock.java
|
|
+++ b/net/minecraft/world/level/block/BarrelBlock.java
|
|
@@ -51,6 +51,15 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 f2d7c5fc0339a62c4fc56aa5871cd999e1136ca6..75d8bd8f7f3614dbdc89088fc12eb05b317ea0e0 100644
|
|
--- a/net/minecraft/world/level/block/BasePressurePlateBlock.java
|
|
+++ b/net/minecraft/world/level/block/BasePressurePlateBlock.java
|
|
@@ -133,6 +133,20 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 dff6c7868065c93c8b1a8b41a3323b3f1cec4e02..f7030ffad37e30c38a94e3672cd4872755319550 100644
|
|
--- a/net/minecraft/world/level/block/BaseRailBlock.java
|
|
+++ b/net/minecraft/world/level/block/BaseRailBlock.java
|
|
@@ -118,6 +118,24 @@ public abstract class BaseRailBlock extends Block implements SimpleWaterloggedBl
|
|
return new RailState(level, pos, state).place(level.hasNeighborSignal(pos), first, current).getState();
|
|
}
|
|
|
|
+ // 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(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/BrewingStandBlock.java b/net/minecraft/world/level/block/BrewingStandBlock.java
|
|
index 5f14be7cd9abe30292c4c6c614d048cd1e0a9c1f..73f1c44acc9d296b523d5b6ba5978d0e0a2659cc 100644
|
|
--- a/net/minecraft/world/level/block/BrewingStandBlock.java
|
|
+++ b/net/minecraft/world/level/block/BrewingStandBlock.java
|
|
@@ -81,6 +81,15 @@ public class BrewingStandBlock extends BaseEntityBlock {
|
|
level.addParticle(ParticleTypes.SMOKE, x, y, z, 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 9c859b04519f78988e765a164cf39cd8a99447df..2e6fb4f2021e6f008b85b7c0160f51c0e496ee8c 100644
|
|
--- a/net/minecraft/world/level/block/ButtonBlock.java
|
|
+++ b/net/minecraft/world/level/block/ButtonBlock.java
|
|
@@ -131,6 +131,20 @@ public class ButtonBlock extends FaceAttachedHorizontalDirectionalBlock {
|
|
return pressed ? 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 4a24a36e022356d44a77306028ef2c09cd221fa5..d882980c4a956bd4b6c7f2ad9e71634f4fda41e5 100644
|
|
--- a/net/minecraft/world/level/block/CampfireBlock.java
|
|
+++ b/net/minecraft/world/level/block/CampfireBlock.java
|
|
@@ -112,6 +112,21 @@ 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(
|
|
final BlockState state,
|
|
diff --git a/net/minecraft/world/level/block/ChestBlock.java b/net/minecraft/world/level/block/ChestBlock.java
|
|
index 4bd84b80199c7f625475ca62da02266d871a8639..70a0d30552d42d91778e0524bb89f6619c1fd0b0 100644
|
|
--- a/net/minecraft/world/level/block/ChestBlock.java
|
|
+++ b/net/minecraft/world/level/block/ChestBlock.java
|
|
@@ -253,6 +253,15 @@ public class ChestBlock extends AbstractChestBlock<ChestBlockEntity> implements
|
|
return this.chestCanConnectTo(state) && state.getValue(TYPE) == ChestType.SINGLE ? state.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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 b7d7f1acf8e5cb3dddb7fb39fe003d25a9a41840..2627dd2687c67301279dbbb10e36d4db72fceb8b 100644
|
|
--- a/net/minecraft/world/level/block/ChiseledBookShelfBlock.java
|
|
+++ b/net/minecraft/world/level/block/ChiseledBookShelfBlock.java
|
|
@@ -171,6 +171,28 @@ public class ChiseledBookShelfBlock extends BaseEntityBlock implements Selectabl
|
|
SLOT_OCCUPIED_PROPERTIES.forEach(xva$0 -> var2.add(xva$0));
|
|
}
|
|
|
|
+ // 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 08c67084b5347bb1d6e65f17f3365ff33b542ec0..a2f2f0af4dc1df950e6d76717757a52231884857 100644
|
|
--- a/net/minecraft/world/level/block/CrafterBlock.java
|
|
+++ b/net/minecraft/world/level/block/CrafterBlock.java
|
|
@@ -131,6 +131,15 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 57292f216052110c5f03e8f3fe51709c87b7995c..837c2dad0800577fd2dd5cfff25fe18bd7dd14e7 100644
|
|
--- a/net/minecraft/world/level/block/CreakingHeartBlock.java
|
|
+++ b/net/minecraft/world/level/block/CreakingHeartBlock.java
|
|
@@ -153,6 +153,17 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 1c131955ba7a01348d9d9d5cf733d107c2531915..b6f18ac0fa511d11c28e3fd2c020b70efabbe0c1 100644
|
|
--- a/net/minecraft/world/level/block/DecoratedPotBlock.java
|
|
+++ b/net/minecraft/world/level/block/DecoratedPotBlock.java
|
|
@@ -172,6 +172,15 @@ public class DecoratedPotBlock extends BaseEntityBlock implements SimpleWaterlog
|
|
return new DecoratedPotBlockEntity(worldPosition, blockState);
|
|
}
|
|
|
|
+ // 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 5e0bd45aad738b0bc15404494e5e004b375f8a71..b79b457f0e618e680b072f0263c7e0481876c748 100644
|
|
--- a/net/minecraft/world/level/block/DiodeBlock.java
|
|
+++ b/net/minecraft/world/level/block/DiodeBlock.java
|
|
@@ -182,6 +182,17 @@ public abstract class DiodeBlock extends HorizontalDirectionalBlock {
|
|
if (me.earthme.luminol.config.modules.optimizations.LeavesSleepingBlockEntityConfig.enabled && this instanceof ComparatorBlock && !oldState.is(Blocks.COMPARATOR)) org.leavesmc.leaves.lithium.common.block.entity.inventory_comparator_tracking.ComparatorTracking.notifyNearbyBlockEntitiesAboutNewComparator(level, pos); // Leaves - Lithium Sleeping Block Entity
|
|
}
|
|
|
|
+ // 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(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/DispenserBlock.java b/net/minecraft/world/level/block/DispenserBlock.java
|
|
index 754f2a541e80947553c56420bdc962dbcf80d36e..79bb8e34e7a7999b10e19cebc2a7b08ba3571684 100644
|
|
--- a/net/minecraft/world/level/block/DispenserBlock.java
|
|
+++ b/net/minecraft/world/level/block/DispenserBlock.java
|
|
@@ -161,6 +161,15 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 1095c94d7adb8e6baa51bf3cb8a31000592aa990..9cc6ca5b329f8cd62620b9cdbfcbf4c2b668d108 100644
|
|
--- a/net/minecraft/world/level/block/HopperBlock.java
|
|
+++ b/net/minecraft/world/level/block/HopperBlock.java
|
|
@@ -140,6 +140,15 @@ public class HopperBlock extends BaseEntityBlock implements org.leavesmc.leaves.
|
|
}
|
|
}
|
|
|
|
+ // 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 f202953a0eacfa61635ad1b13e4dbf9960e004ec..b544b959634e458f482ea863b7a4b28b5de61765 100644
|
|
--- a/net/minecraft/world/level/block/JukeboxBlock.java
|
|
+++ b/net/minecraft/world/level/block/JukeboxBlock.java
|
|
@@ -83,6 +83,20 @@ public class JukeboxBlock extends BaseEntityBlock {
|
|
return !result.consumesAction() ? InteractionResult.TRY_WITH_EMPTY_HAND : result;
|
|
}
|
|
|
|
+ // 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 b5ac0a094d7c67afe59716857cef425e11545054..b1fa698160e9ebd950758bfe04381d85ad253859 100644
|
|
--- a/net/minecraft/world/level/block/LecternBlock.java
|
|
+++ b/net/minecraft/world/level/block/LecternBlock.java
|
|
@@ -200,6 +200,37 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 772a1cb8b275506ed0310294369b985746f8f567..2a05139db15858991202b53e380b47cde43393b2 100644
|
|
--- a/net/minecraft/world/level/block/LeverBlock.java
|
|
+++ b/net/minecraft/world/level/block/LeverBlock.java
|
|
@@ -127,6 +127,20 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 c2001c9475e0773fb84b987afcf2d02ae136af3a..871a802fce141b3a36acab6b899349754f5d81e1 100644
|
|
--- a/net/minecraft/world/level/block/LightningRodBlock.java
|
|
+++ b/net/minecraft/world/level/block/LightningRodBlock.java
|
|
@@ -123,6 +123,19 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 680a357db27407e2dc21c615fadaf9754421c361..1d68ebf02f4e83a69fc30f36e0b9f688799210c3 100644
|
|
--- a/net/minecraft/world/level/block/ObserverBlock.java
|
|
+++ b/net/minecraft/world/level/block/ObserverBlock.java
|
|
@@ -133,6 +133,18 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 973d423a9ab5a6a3338f43c27f6d99d7b7d94301..1ccacb7ffa7e8b9c3fdd37910d3e8bded86a4d3a 100644
|
|
--- a/net/minecraft/world/level/block/RedStoneWireBlock.java
|
|
+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java
|
|
@@ -382,6 +382,28 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/RedstoneTorchBlock.java b/net/minecraft/world/level/block/RedstoneTorchBlock.java
|
|
index 1434dd70d443a6aa7312740d901e5dc40fd926d2..e41f4453e482874e66ec3f4ddfbfaf28de345c6d 100644
|
|
--- a/net/minecraft/world/level/block/RedstoneTorchBlock.java
|
|
+++ b/net/minecraft/world/level/block/RedstoneTorchBlock.java
|
|
@@ -54,6 +54,16 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) {
|
|
if (!movedByPiston) {
|
|
diff --git a/net/minecraft/world/level/block/SculkSensorBlock.java b/net/minecraft/world/level/block/SculkSensorBlock.java
|
|
index 10cff0f9db2910c543c20fa055c0c5b759becc15..cf349086b8d3faffbe971b3c47fd819b6c7b0502 100644
|
|
--- a/net/minecraft/world/level/block/SculkSensorBlock.java
|
|
+++ b/net/minecraft/world/level/block/SculkSensorBlock.java
|
|
@@ -130,6 +130,19 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 5a15671202a0129b1ce97fae5515ddefa5b3fb01..099a1e75f48ca6a2a8eb83571f5c06674b88f3d8 100644
|
|
--- a/net/minecraft/world/level/block/SculkShriekerBlock.java
|
|
+++ b/net/minecraft/world/level/block/SculkShriekerBlock.java
|
|
@@ -69,6 +69,17 @@ public class SculkShriekerBlock extends BaseEntityBlock implements SimpleWaterlo
|
|
super.stepOn(level, pos, onState, 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, BlockEntityTypes.SCULK_SHRIEKER).ifPresent(sculkShrieker -> sculkShrieker.tryRespond(serverLevel));
|
|
+ }
|
|
+ super.onRemove(state, level, pos, newState, movedByPiston);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
+
|
|
+
|
|
@Override
|
|
protected void tick(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 0dc80ee92f2aed4c8ca4bc60f4b189af764fe81d..a80535ebb7b4fcc3a6c7b84eb08e275461c7ae36 100644
|
|
--- a/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
|
+++ b/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
|
@@ -152,6 +152,20 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 e19a82ebb7b3be71e51ac28914de58fab32a708e..76aed7ac9fc908dc066001afcaf7e57355233143 100644
|
|
--- a/net/minecraft/world/level/block/TripWireBlock.java
|
|
+++ b/net/minecraft/world/level/block/TripWireBlock.java
|
|
@@ -107,6 +107,17 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 49b3f9e78ae9db257b653a6094619880784c6370..b451f8234e92c36fa1395a80b01dc8780824d88e 100644
|
|
--- a/net/minecraft/world/level/block/TripWireHookBlock.java
|
|
+++ b/net/minecraft/world/level/block/TripWireHookBlock.java
|
|
@@ -248,6 +248,26 @@ public class TripWireHookBlock extends Block {
|
|
level.updateNeighborsAt(pos.relative(front), 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(final BlockState state, final ServerLevel level, final BlockPos pos, final 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 ea48b6db56d06ddb12a3b16882e09f0e2eb26433..0a3fec59c53df270c6d7bcc2379e0f6b9d753afd 100644
|
|
--- a/net/minecraft/world/level/block/entity/BlockEntityType.java
|
|
+++ b/net/minecraft/world/level/block/entity/BlockEntityType.java
|
|
@@ -28,7 +28,7 @@ public class BlockEntityType<T extends BlockEntity> {
|
|
}
|
|
|
|
public boolean isValid(final BlockState state) {
|
|
- return this.validBlocks.contains(state.getBlock());
|
|
+ return fun.bm.lophine.config.modules.experiment.RedStoneConfig.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 6138c8bd76fc405b67282ac349d41e02a4f9deba..56a397e8a38a960e1334ce65ebb66703ed2e01a4 100644
|
|
--- a/net/minecraft/world/level/block/piston/MovingPistonBlock.java
|
|
+++ b/net/minecraft/world/level/block/piston/MovingPistonBlock.java
|
|
@@ -71,6 +71,19 @@ public class MovingPistonBlock extends BaseEntityBlock {
|
|
return createTickerHelper(type, BlockEntityTypes.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(final LevelAccessor level, final BlockPos pos, final BlockState state) {
|
|
BlockPos relative = 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 f8caa0b3c21766dbad73c524c1680346e4257188..b658d602953ade618d89c02745eb46be5d0175dd 100644
|
|
--- a/net/minecraft/world/level/block/piston/PistonHeadBlock.java
|
|
+++ b/net/minecraft/world/level/block/piston/PistonHeadBlock.java
|
|
@@ -78,6 +78,20 @@ 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(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) {
|
|
BlockPos basePos = 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 7358c75802a37e84e30b1b94a046251d2547a388..972b953a579120c1c05f2dc9bfc2b408d6071d26 100644
|
|
--- a/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
+++ b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
@@ -172,6 +172,16 @@ public abstract class BlockBehaviour implements FeatureElement, org.leavesmc.lea
|
|
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(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) {
|
|
}
|
|
|
|
@@ -900,6 +910,13 @@ public abstract class BlockBehaviour implements FeatureElement, org.leavesmc.lea
|
|
// 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(final ServerLevel level, final BlockPos pos, final 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 51e7c9287bc39d1ffaa60946c009711acdfa8572..c3b32f9c4c2fa17bef629453e3315c12387f5a92 100644
|
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
|
@@ -425,6 +425,8 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
|
boolean blockChanged = !oldState.is(newBlock);
|
|
boolean movedByPiston = (flags & Block.UPDATE_MOVE_BY_PISTON) != 0;
|
|
boolean sideEffects = (flags & Block.UPDATE_SKIP_BLOCK_ENTITY_SIDEEFFECTS) == 0;
|
|
+ // Leaves start - behaviour 1.21.1-
|
|
+ if (!fun.bm.lophine.config.modules.experiment.RedStoneConfig.oldBlockRemoveBehaviour) {
|
|
if (blockChanged && oldState.hasBlockEntity() && !state.shouldChangedStateKeepBlockEntity(oldState)) {
|
|
if (!this.level.isClientSide() && sideEffects) {
|
|
BlockEntity blockEntity = this.level.getBlockEntity(pos);
|
|
@@ -441,6 +443,10 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
|
&& ((flags & Block.UPDATE_NEIGHBORS) != 0 || movedByPiston)) {
|
|
oldState.affectNeighborsAfterRemoval(serverLevel, pos, movedByPiston);
|
|
}
|
|
+ } else {
|
|
+ oldState.onRemove(this.level, pos, state, movedByPiston);
|
|
+ }
|
|
+ // Leaves end - behaviour 1.21.1-
|
|
|
|
if (!section.getBlockState(localX, localY, localZ).is(newBlock)) {
|
|
return null;
|