9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2025-12-19 14:59:32 +00:00
Files
LeavesMC/leaves-server/minecraft-patches/features/0120-Tripwire-behavior-modifier.patch
2025-08-16 22:08:16 +08:00

86 lines
5.0 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
Date: Sat, 17 May 2025 21:03:00 +0800
Subject: [PATCH] Tripwire behavior modifier
diff --git a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java
index dfe8b815987a0ee385846616e4845428a81f2782..63bbee85d18537760c876cdab5bcac5798bf918b 100644
--- a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java
+++ b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java
@@ -28,14 +28,40 @@ public class EndPlatformFeature extends Feature<NoneFeatureConfiguration> {
// CraftBukkit end
BlockPos.MutableBlockPos mutableBlockPos = pos.mutable();
+ // Leaves start - tripwire behavior modifier
+ java.util.List<BlockPos> blockList1 = new java.util.ArrayList<>();
+ java.util.List<BlockPos> blockList2 = new java.util.ArrayList<>();
+ boolean flag21 = org.leavesmc.leaves.LeavesConfig.modify.oldMC.tripwire.tripwireBehavior == org.leavesmc.leaves.LeavesConfig.ModifyConfig.MinecraftOLDConfig.TripwireConfig.TripwireBehavior.VANILLA_21;
for (int i = -2; i <= 2; i++) {
for (int i1 = -2; i1 <= 2; i1++) {
for (int i2 = -1; i2 < 3; i2++) {
BlockPos blockPos = mutableBlockPos.set(pos).move(i1, i2, i);
Block block = i2 == -1 ? Blocks.OBSIDIAN : Blocks.AIR;
- if (!blockList.getBlockState(blockPos).is(block)) { // CraftBukkit
+ if (!blockList.getBlockState(blockPos).is(block)) {
if (dropBlocks) {
- blockList.destroyBlock(blockPos, true, null); // CraftBukkit
+ boolean flag = false;
+ if (org.leavesmc.leaves.LeavesConfig.modify.oldMC.tripwire.stringTripwireHookDuplicate) {
+ switch (org.leavesmc.leaves.LeavesConfig.modify.oldMC.tripwire.tripwireBehavior) {
+ case org.leavesmc.leaves.LeavesConfig.ModifyConfig.MinecraftOLDConfig.TripwireConfig.TripwireBehavior.VANILLA_20 -> {
+ flag = true;
+ }
+ case org.leavesmc.leaves.LeavesConfig.ModifyConfig.MinecraftOLDConfig.TripwireConfig.TripwireBehavior.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 -> {} // Leaves - 1.21 & default Logic - default empty
+ }
+ }
+ if (flag) blockList1.add(blockPos.immutable());
+ else blockList.destroyBlock(blockPos, true, null);
}
blockList.setBlock(blockPos, block.defaultBlockState(), 3); // CraftBukkit
@@ -53,11 +79,29 @@ public class EndPlatformFeature extends Feature<NoneFeatureConfiguration> {
if (portalEvent.isCancelled()) return;
}
- if (dropBlocks) {
- blockList.placeBlocks(state -> level.destroyBlock(state.getPosition(), true, null));
+ if (flag21 || !org.leavesmc.leaves.LeavesConfig.modify.oldMC.tripwire.stringTripwireHookDuplicate) {
+ if (dropBlocks) {
+ blockList.placeBlocks(state -> level.destroyBlock(state.getPosition(), !blockList1.contains(state.getPosition()), null));
+ } else {
+ blockList.placeBlocks();
+ }
} else {
+ if (dropBlocks) {
+ blockList.getSnapshotBlocks().forEach((state) -> {
+ level.destroyBlock(state.getPosition(), !blockList1.contains(state.getPosition()), null);
+ });
+ }
blockList.placeBlocks();
}
// CraftBukkit end
}
+
+ private static boolean checkString(java.util.List<BlockPos> 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;
+ }
+ // Leaves end - tripwire behavior modifier
}