From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Helvetica Volubi Date: Thu, 9 Jul 2026 10:05:46 +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 8bcc8b6f83ab4d5a472741185511b5d84f4974be..7e78e67c32f5b577518fe735eaba4ce2fba8023f 100644 --- a/net/minecraft/world/level/block/TripWireHookBlock.java +++ b/net/minecraft/world/level/block/TripWireHookBlock.java @@ -201,10 +201,17 @@ public class TripWireHookBlock extends Block { BlockPos testPos = pos.relative(direction, i); BlockState wireData = wireStates[i]; if (wireData != null) { - BlockState testPosState = level.getBlockState(testPos); - if (testPosState.is(Blocks.TRIPWIRE) || testPosState.is(Blocks.TRIPWIRE_HOOK)) { - if (!io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates || !testPosState.is(Blocks.TRIPWIRE)) level.setBlock(testPos, wireData.trySetValue(ATTACHED, attached), Block.UPDATE_ALL); // Paper - prevent tripwire from updating + // Camellia start - tripwire and tripwireHook dupe + if (moe.monnairealms.camellia.config.modules.function.TripwireBehaviorConfig.enabled) { + level.setBlock(testPos, wireData.trySetValue(ATTACHED, attached), 3); + level.getBlockState(testPos); + } else { + BlockState testPosState = level.getBlockState(testPos); + if (testPosState.is(Blocks.TRIPWIRE) || testPosState.is(Blocks.TRIPWIRE_HOOK)) { + if (!io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates || !testPosState.is(Blocks.TRIPWIRE)) level.setBlock(testPos, wireData.trySetValue(ATTACHED, attached), Block.UPDATE_ALL); // Paper - prevent tripwire from updating + } } + // Camellia 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 b67f5f7b76037ab77548c37a83e4d0918915223a..4407333785e8e76d08bb8b18510e6db95c954e36 100644 --- a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java +++ b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java @@ -28,15 +28,41 @@ public class EndPlatformFeature extends Feature { // CraftBukkit end BlockPos.MutableBlockPos pos = origin.mutable(); - for (int dz = -2; dz <= 2; dz++) { + // Camellia start - tripwire behavior modifier + java.util.List blockList1 = new java.util.ArrayList<>(); + java.util.List blockList2 = new java.util.ArrayList<>(); + boolean flag21 = moe.monnairealms.camellia.config.modules.function.TripwireBehaviorConfig.behaviorMode == moe.monnairealms.camellia.enums.EnumTripwireBehavior.VANILLA21; for (int dz = -2; dz <= 2; dz++) { for (int dx = -2; dx <= 2; dx++) { for (int dy = -1; dy < 3; dy++) { BlockPos blockPos = pos.set(origin).move(dx, dy, dz); Block block = dy == -1 ? Blocks.OBSIDIAN : Blocks.AIR; if (!blockList.getBlockState(blockPos).is(block)) { // CraftBukkit if (dropResources) { - blockList.destroyBlock(blockPos, true, null); // CraftBukkit + boolean flag = false; + if (moe.monnairealms.camellia.config.modules.function.TripwireBehaviorConfig.enabled) { + switch (moe.monnairealms.camellia.config.modules.function.TripwireBehaviorConfig.behaviorMode) { + case moe.monnairealms.camellia.enums.EnumTripwireBehavior.VANILLA20: { + flag = true; + } + case moe.monnairealms.camellia.enums.EnumTripwireBehavior.MIXED: { + net.minecraft.world.level.block.state.BlockState state = newLevel.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: {} // 1.21 & default Logic - default empty + } + } + if (flag) blockList1.add(blockPos.immutable()); + else blockList.destroyBlock(blockPos, true, null); // CraftBukkit } + // Camellia end - prevent tripwire dupe in end platform generate blockList.setBlock(blockPos, block.defaultBlockState(), Block.UPDATE_ALL); // CraftBukkit } @@ -53,11 +79,34 @@ public class EndPlatformFeature extends Feature { if (portalEvent.isCancelled()) return; } - if (dropResources) { - blockList.placeBlocks(state -> newLevel.destroyBlock(state.getPosition(), true, null)); + // Camellia start - prevent tripwire dupe in end platform generate + if (flag21 || !moe.monnairealms.camellia.config.modules.function.TripwireBehaviorConfig.enabled) { + if (dropResources) { + blockList.placeBlocks(state -> newLevel.destroyBlock(state.getPosition(), true, null)); + } else { + blockList.placeBlocks(); + } + // Camellia end - prevent tripwire dupe in end platform generate } else { + // Camellia start - prevent tripwire dupe in end platform generate + if (dropResources) { + blockList.getSnapshotBlocks().forEach((state) -> { + newLevel.destroyBlock(state.getPosition(), !blockList1.contains(state.getPosition()), null); + }); + } + // Camellia end - prevent tripwire dupe in end platform generate blockList.placeBlocks(); } // CraftBukkit end } + + // Camellia start - tripwire behavior modifier + 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; + } + // Camellia end - tripwire behavior modifier }