From 01dc9fa79cf7972d9b8e886ea1e7480939d1824d Mon Sep 17 00:00:00 2001 From: Ap_Tx <3045929398@qq.com> Date: Sun, 4 Oct 2026 20:36:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=90=BD=E6=B2=99=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E6=94=B9=E5=9B=9E=E5=9B=BA=E5=AE=9A=E7=9B=AE=E6=A0=87=E7=89=88?= =?UTF-8?q?=EF=BC=8C=E7=A7=BB=E9=99=A4=E8=AE=B0=E5=BD=95=E5=99=A8mixin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 记录+回放方案会把沙子替换成自己(记录命中沙子自身变更),不可用。改为沙子下落直接变legacyFallingBlockTarget。移除LevelChunkMixin。 --- .../mixin/legacy/FallingBlockEntityMixin.java | 30 +++++++++------- .../mixin/legacy/FallingBlockMixin.java | 2 -- .../mixin/legacy/LevelChunkMixin.java | 35 ------------------- src/main/resources/slsaddition.mixins.json | 1 - 4 files changed, 18 insertions(+), 50 deletions(-) delete mode 100644 src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/LevelChunkMixin.java diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/FallingBlockEntityMixin.java b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/FallingBlockEntityMixin.java index e9b2433..861a9c4 100644 --- a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/FallingBlockEntityMixin.java +++ b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/FallingBlockEntityMixin.java @@ -2,18 +2,22 @@ package com.github.zly2006.carpetslsaddition.mixin.legacy; import com.github.zly2006.carpetslsaddition.SLSCarpetSettings; import com.github.zly2006.carpetslsaddition.ServerMain; -import com.github.zly2006.carpetslsaddition.util.LegacyBlockChangeRecorder; import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; /** - * [旧版] 落沙替换的核心注入点——重建 1.12 的"替换窗口"(记录+回放版)。 + * [旧版] 落沙替换——固定目标版。 * - *
当 {@code legacyFallingBlockReplace} 开启时,若该位置在最近 {@code WINDOW_TICKS} 内被改动过, - * 就用记录的新方块作为下落实体的内容。这样玩家搭建的装置(改变世界方块)会决定下落实体的内容。 + *
26.1.2 单线程下 1.12 的"替换窗口"物理不存在,本 mixin 采用直接方案:
+ * 当 {@code legacyFallingBlockReplace} 开启且配置了 {@code legacyFallingBlockTarget} 时,
+ * 把下落实体的方块状态替换为目标方块的默认状态——沙子下落即变目标方块。
*/
@Mixin(net.minecraft.world.entity.item.FallingBlockEntity.class)
public class FallingBlockEntityMixin {
@@ -24,17 +28,19 @@ public class FallingBlockEntityMixin {
argsOnly = true,
index = 2
)
- private static BlockState legacyReplaceFallingState(BlockState original, net.minecraft.world.level.Level level, BlockPos pos, BlockState state) {
+ private static BlockState legacyReplaceFallingState(BlockState original, Level level, BlockPos pos, BlockState state) {
if (!SLSCarpetSettings.legacyExploitMode || !SLSCarpetSettings.legacyFallingBlockReplace) {
return original;
}
- ServerMain.LOGGER.info("[SLSA-DEBUG] fall() pos={} original={}", pos, original.getBlock());
- BlockState recent = LegacyBlockChangeRecorder.getRecentChange(pos);
- if (recent != null && !recent.isAir()) {
- ServerMain.LOGGER.info("[SLSA-DEBUG] >>> REPLACE at {}: {} -> {}", pos, original.getBlock(), recent.getBlock());
- return recent;
+ String target = SLSCarpetSettings.legacyFallingBlockTarget;
+ if (target == null || target.isEmpty() || "#none".equals(target)) {
+ return original;
}
- ServerMain.LOGGER.info("[SLSA-DEBUG] no recent change at {}, recent={}", pos, recent);
- return original;
+ Block block = BuiltInRegistries.BLOCK.getOptional(Identifier.withDefaultNamespace(target)).orElse(null);
+ if (block == null) {
+ return original;
+ }
+ ServerMain.LOGGER.info("[SLSA-DEBUG] >>> REPLACE at {}: {} -> {}", pos, original.getBlock(), block);
+ return block.defaultBlockState();
}
}
\ No newline at end of file
diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/FallingBlockMixin.java b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/FallingBlockMixin.java
index 5a74839..1bd88be 100644
--- a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/FallingBlockMixin.java
+++ b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/legacy/FallingBlockMixin.java
@@ -34,7 +34,6 @@ public abstract class FallingBlockMixin {
@Inject(method = "getDelayAfterPlace", at = @At("HEAD"), cancellable = true)
private void legacyDelayAfterPlace(CallbackInfoReturnable hook {@link LevelChunk#setBlockState}:当规则开启时,记录每次方块变更(位置 + 新状态 + 当前 tick)。
- * 重力方块下落时({@code FallingBlockEntityMixin})会查询此记录,
- * 若该位置"刚被改过",就用记录的新方块作为下落实体内容——重建 1.12 的窗口替换效果。
- *
- * 仅在 {@code legacyExploitMode} + {@code legacyFallingBlockReplace} 同时开启时记录,避免性能损耗。
- */
-@Mixin(LevelChunk.class)
-public abstract class LevelChunkMixin {
-
- @Inject(method = "setBlockState", at = @At("RETURN"))
- private void legacyRecordBlockChange(BlockPos pos, BlockState newState, int flags, CallbackInfoReturnable