61990fd9e9
Register a new lophine_carpet config and add Carpet feature patches and protocol classes. Adds luminol and minecraft Carpet feature patches, plus CarpetLoggerProtocol and TISCMProtocol Java files. Updates many Leaves-related patch files (metadata and authors/dates) and applies Leaves behaviour changes across numerous block classes (onRemove handling, affectNeighborsAfterRemoval wiring, Containers.dropContentsOnDestroy, etc.) to preserve pre-1.21.1 behaviour and compatibility. These changes enable Carpet integration and ensure Leaves patches are consistently applied across the codebase.
844 lines
43 KiB
Diff
844 lines
43 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 1311d4936f84652c5ffc51544f99cb98fc293906..3a62831838a60776159dcb1ca783d3f00e6cd35e 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 5332fd32fa7a0d3fc3be1b0a7c2ca5dee8e402c6..37667a8e512bdba385c563e950d8c5d5cdd18832 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 c2fbf44e93e44c36423465d406b5e4d3db029a80..a28a453f139295834c77aa908027c74c8dfd7aba 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 bc79a7c2cb18237dad15432ae7e1238125108696..5ef16955c69f0e0fecc772067a0fb006e6413011 100644
|
|
--- a/net/minecraft/world/level/block/BaseRailBlock.java
|
|
+++ b/net/minecraft/world/level/block/BaseRailBlock.java
|
|
@@ -123,6 +123,24 @@ 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(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 aea12aad3270b966eed7779eaf77d26052f8a21f..6c39edf98f33df437880a77450557082ea9b0f6c 100644
|
|
--- a/net/minecraft/world/level/block/BrewingStandBlock.java
|
|
+++ b/net/minecraft/world/level/block/BrewingStandBlock.java
|
|
@@ -80,6 +80,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 86f4dcd959bb83247c6d2c5e947c79230aed3189..1b0223f1d533d1a8db5497ab9104052bc799f691 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 8b706b34914326c039b761387f25e488f30fe6c8..b816594fcd83d26037734ec051f2c5d7f7dbde9f 100644
|
|
--- a/net/minecraft/world/level/block/CampfireBlock.java
|
|
+++ b/net/minecraft/world/level/block/CampfireBlock.java
|
|
@@ -111,6 +111,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 d3f0680d59ec87990b54dc3dbce27706bfadf5f1..b5595d87339e4d313c5691a06c2b1b3d1b40b6de 100644
|
|
--- a/net/minecraft/world/level/block/ChestBlock.java
|
|
+++ b/net/minecraft/world/level/block/ChestBlock.java
|
|
@@ -257,6 +257,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 0682acaae12650549eea3c291d8cde7bb17766bd..ac12ef0c99c82d771e5275ec7ced7f76c76f5938 100644
|
|
--- a/net/minecraft/world/level/block/ChiseledBookShelfBlock.java
|
|
+++ b/net/minecraft/world/level/block/ChiseledBookShelfBlock.java
|
|
@@ -168,6 +168,28 @@ 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(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 2b97fd6af1c4956eb173b8c66c2a3efc8772a798..90326fe95673edbf5ed8c1a5d9020735fdd4d53e 100644
|
|
--- a/net/minecraft/world/level/block/CrafterBlock.java
|
|
+++ b/net/minecraft/world/level/block/CrafterBlock.java
|
|
@@ -130,6 +130,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 3dd5f8c20ad68e0bd6222c8ba1687df0b2ad3b0d..b2e1e78cd70e20dd1c17ef0199059fc2b4e513b5 100644
|
|
--- a/net/minecraft/world/level/block/CreakingHeartBlock.java
|
|
+++ b/net/minecraft/world/level/block/CreakingHeartBlock.java
|
|
@@ -152,6 +152,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 3ce41ce3f9d2bf7a79e4b9811e043a69e0dedb13..2856b4081cddb38bac5c1d7199649a7531ef077f 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 3457a1fa8f5efc4bf173bf155165ab5e5ae9f303..1342607e3bf28ca085f51ade22efaf34f19da170 100644
|
|
--- a/net/minecraft/world/level/block/DiodeBlock.java
|
|
+++ b/net/minecraft/world/level/block/DiodeBlock.java
|
|
@@ -180,6 +180,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 dca954bd076fa917512af91e0b93d449eb5cac6d..7f880ba7cdd08be392dd4fe5a06fffbf6962318b 100644
|
|
--- a/net/minecraft/world/level/block/DispenserBlock.java
|
|
+++ b/net/minecraft/world/level/block/DispenserBlock.java
|
|
@@ -159,6 +159,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 88606b84ea3a33ffbb0cfa6e073eb8f59d7188d0..c3ccebd7f27fd4d313cbcd616d58180a70f5f574 100644
|
|
--- a/net/minecraft/world/level/block/HopperBlock.java
|
|
+++ b/net/minecraft/world/level/block/HopperBlock.java
|
|
@@ -139,6 +139,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 a9e46a66ffc868c3b4ef2bb6257f23a20f12b1a6..cee96a825f0e0e740ede8df0bf6dc5256b9fb8d3 100644
|
|
--- a/net/minecraft/world/level/block/JukeboxBlock.java
|
|
+++ b/net/minecraft/world/level/block/JukeboxBlock.java
|
|
@@ -82,6 +82,20 @@ 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(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 75660fb19c25444e35dbbe58cd20f9b3d3f7ad32..196051c80baa489f43065a11a61f22a8c61251e7 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 341960ef67a689f660d0dcf61aaf5bf52bdc9074..6fc372e782f2a34a34a9ef1faed41ace6db5ec1b 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 47ca45518df306cc4368983eefb89294e56b015a..31be8864aa28eff804b507efdab614b35e3fea6f 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 6a3413ca875ce78f48cd8d3ce2cfe7798be1a19e..be572eff561ffdd961a9602eaa6136761c4d48a4 100644
|
|
--- a/net/minecraft/world/level/block/ObserverBlock.java
|
|
+++ b/net/minecraft/world/level/block/ObserverBlock.java
|
|
@@ -128,6 +128,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 66a05f099a263b0c9220f1416f3cf1221422cc20..1de86856f4a27346d7003ca9eb24a36074a2a4a3 100644
|
|
--- a/net/minecraft/world/level/block/RedStoneWireBlock.java
|
|
+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java
|
|
@@ -378,6 +378,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 0d0b5443c5c56825e88fd64c02c993eca6044d45..e2e5552008547fa1782b0a5ed3129162e94647c9 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 2bbce50d9dd0ca65f9e3bc90c8de098473039bc5..9a9fcb593c4b5f2bb0c57f9268dfdc9eb21d38ea 100644
|
|
--- a/net/minecraft/world/level/block/SculkSensorBlock.java
|
|
+++ b/net/minecraft/world/level/block/SculkSensorBlock.java
|
|
@@ -129,6 +129,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 d7e5ec23c64b60c47ab6b54cbf282e88c3a4a045..037aa3592a963bbb142465d31040f60e95cb146e 100644
|
|
--- a/net/minecraft/world/level/block/SculkShriekerBlock.java
|
|
+++ b/net/minecraft/world/level/block/SculkShriekerBlock.java
|
|
@@ -68,6 +68,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, 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(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 ffa76dc1338c6c892a42b2148f9f01c933660b98..7bf2cde59c112f4babb87476585207dacebef341 100644
|
|
--- a/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
|
+++ b/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
|
@@ -150,6 +150,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 04e5995409a3532947dfab1c8ef05bd546a6f66d..6bf811477a27bbbeeeba6c9d768d33fc677ea5e7 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 fd808353181e05f2fc527a391ce7bb990f61b4c7..836eae0c3e0891a3e3309b684f15d65f891215cf 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 ac58bbed01edaf5dfe4839c89649ca865c339c8a..caead1012ff3b5b5f78c24a3baf20b7d00b84cf6 100644
|
|
--- a/net/minecraft/world/level/block/entity/BlockEntityType.java
|
|
+++ b/net/minecraft/world/level/block/entity/BlockEntityType.java
|
|
@@ -301,7 +301,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 2b6ad989e1e1424d0283bae39e5dae33eba44923..0f47fb528422d591bd03434a089ea69c7f27bf8c 100644
|
|
--- a/net/minecraft/world/level/block/piston/MovingPistonBlock.java
|
|
+++ b/net/minecraft/world/level/block/piston/MovingPistonBlock.java
|
|
@@ -70,6 +70,19 @@ public class MovingPistonBlock extends BaseEntityBlock {
|
|
return createTickerHelper(type, 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(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 0fbdf810c785c8a596d461e7651361fdedbb6217..ff1471f40b73582df68efbf2996a854c6aa37d65 100644
|
|
--- a/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
+++ b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
@@ -174,6 +174,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) {
|
|
}
|
|
|
|
@@ -889,6 +899,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 b7ba4d8ed2cc65ba0e85a3cdf8b6568a7c9c02f1..6b5ad391eda92cdbb47ab78a4c27d7e6a3b098a8 100644
|
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
|
@@ -408,22 +408,28 @@ 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;
|
|
- if (blockChanged && oldState.hasBlockEntity() && !state.shouldChangedStateKeepBlockEntity(oldState)) {
|
|
- if (!this.level.isClientSide() && sideEffects) {
|
|
- BlockEntity blockEntity = this.level.getBlockEntity(pos);
|
|
- if (blockEntity != null) {
|
|
- blockEntity.preRemoveSideEffects(pos, oldState);
|
|
+ // 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);
|
|
+ if (blockEntity != null) {
|
|
+ blockEntity.preRemoveSideEffects(pos, oldState);
|
|
+ }
|
|
}
|
|
- }
|
|
|
|
- this.removeBlockEntity(pos);
|
|
- }
|
|
+ this.removeBlockEntity(pos);
|
|
+ }
|
|
|
|
- if ((blockChanged || newBlock instanceof BaseRailBlock)
|
|
- && this.level instanceof ServerLevel serverLevel
|
|
- && ((flags & Block.UPDATE_NEIGHBORS) != 0 || movedByPiston)) {
|
|
- oldState.affectNeighborsAfterRemoval(serverLevel, pos, movedByPiston);
|
|
+ if ((blockChanged || newBlock instanceof BaseRailBlock)
|
|
+ && this.level instanceof ServerLevel serverLevel
|
|
+ && ((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;
|