From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Helvetica Volubi Date: Sun, 18 May 2025 03:48:53 +0800 Subject: [PATCH] Add config to modify tripwire behavior diff --git a/net/minecraft/world/level/block/TripWireHookBlock.java b/net/minecraft/world/level/block/TripWireHookBlock.java index 8a3a8b0fdf9545a41501dc992c6982d9c8ce7b66..8f9f5b0bf098a32a732e3ff9f636e3ea828e5f43 100644 --- a/net/minecraft/world/level/block/TripWireHookBlock.java +++ b/net/minecraft/world/level/block/TripWireHookBlock.java @@ -200,10 +200,17 @@ public class TripWireHookBlock extends Block { BlockPos blockPos1 = pos.relative(direction, i2); BlockState blockState2 = blockStates[i2]; if (blockState2 != null) { - BlockState blockState3 = level.getBlockState(blockPos1); - if (blockState3.is(Blocks.TRIPWIRE) || blockState3.is(Blocks.TRIPWIRE_HOOK)) { - if (!io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates || !blockState3.is(Blocks.TRIPWIRE)) level.setBlock(blockPos1, blockState2.trySetValue(ATTACHED, flag2), 3); // Paper - prevent tripwire from updating + // Luminol start - tripwire and tripwireHook dupe + if (me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.enabled) { + level.setBlock(blockPos1, blockState2.trySetValue(ATTACHED, flag2), 3); + level.getBlockState(blockPos1); + } else { + BlockState blockState3 = level.getBlockState(blockPos1); + if (blockState3.is(Blocks.TRIPWIRE) || blockState3.is(Blocks.TRIPWIRE_HOOK)) { + if (!io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates || !blockState3.is(Blocks.TRIPWIRE)) level.setBlock(blockPos1, blockState2.trySetValue(ATTACHED, flag2), 3); // Paper - prevent tripwire from updating + } } + // Luminol end - tripwire and tripwireHook dupe } } } diff --git a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java index 49b810ae9d9a8d0718a5f8c512e15a5573ed04fd..7d5fc6860ed426c4906f8c3eb2c10fd6db4296e5 100644 --- a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java +++ b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java @@ -28,6 +28,11 @@ public class EndPlatformFeature extends Feature { // CraftBukkit end BlockPos.MutableBlockPos mutableBlockPos = pos.mutable(); + // Luminol start - tripwire behavior modifier + java.util.List blockList1 = new java.util.ArrayList<>(); + java.util.List blockList2 = new java.util.ArrayList<>(); + boolean flag21 = !java.util.Objects.equals(me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.behaviorMode, "VANILLA20") + && !java.util.Objects.equals(me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.behaviorMode, "MIXED"); for (int i = -2; i <= 2; i++) { for (int i1 = -2; i1 <= 2; i1++) { for (int i2 = -1; i2 < 3; i2++) { @@ -35,7 +40,29 @@ public class EndPlatformFeature extends Feature { Block block = i2 == -1 ? Blocks.OBSIDIAN : Blocks.AIR; if (!blockList.getBlockState(blockPos).is(block)) { // CraftBukkit if (dropBlocks) { - blockList.destroyBlock(blockPos, true, null); // CraftBukkit + boolean flag = false; + if (me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.enabled) { + switch (me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.behaviorMode) { + case "VANILLA20": { + flag = true; + } + case "MIXED": { + net.minecraft.world.level.block.state.BlockState state = level.getBlockState(blockPos); + if (state.is(Blocks.TRIPWIRE)) { + if (state.getValue(net.minecraft.world.level.block.TripWireBlock.DISARMED)) { + flag = true; + blockList2.add(blockPos.immutable()); + } + if (!flag) { + flag = checkString(blockList2, blockPos); + } + } + } + default: {} // Luminol - 1.21 & default Logic - default empty + } + } + if (flag) blockList1.add(blockPos.immutable()); + else blockList.destroyBlock(blockPos, true, null); // CraftBukkit } blockList.setBlock(blockPos, block.defaultBlockState(), 3); // CraftBukkit @@ -53,11 +80,30 @@ public class EndPlatformFeature extends Feature { if (portalEvent.isCancelled()) return; } - if (dropBlocks) { - blockList.placeBlocks(state -> level.destroyBlock(state.getPosition(), true, null)); + if (flag21 || !me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.enabled) { + if (dropBlocks) { + blockList.placeBlocks(state -> level.destroyBlock(state.getPosition(), true, null)); + } else { + blockList.placeBlocks(); + } } else { + if (dropBlocks) { + blockList.getSnapshotBlocks().forEach((state) -> { + level.destroyBlock(state.getPosition(), !blockList1.contains(state.getPosition()), null); + }); + // Luminol - prevent tripwire dupe in end platform generate + } blockList.placeBlocks(); } // CraftBukkit end } + + private static boolean checkString(java.util.List blockList, BlockPos blockPos) { + for (BlockPos pos : blockList) { + if (pos.getY() != blockPos.getY()) continue; + if (pos.getX() == blockPos.getX() || pos.getZ() == blockPos.getZ()) return true; + } + return false; + } + // Luminol end - tripwire behavior modifier }