112 lines
6.9 KiB
Diff
112 lines
6.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
|
|
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<NoneFeatureConfiguration> {
|
|
// CraftBukkit end
|
|
BlockPos.MutableBlockPos mutableBlockPos = pos.mutable();
|
|
|
|
+ // Luminol start - tripwire behavior modifier
|
|
+ java.util.List<BlockPos> blockList1 = new java.util.ArrayList<>();
|
|
+ java.util.List<BlockPos> 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<NoneFeatureConfiguration> {
|
|
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<NoneFeatureConfiguration> {
|
|
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<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;
|
|
+ }
|
|
+ // Luminol end - tripwire behavior modifier
|
|
}
|