diff --git a/luminol-server/minecraft-patches/features/0016-Add-config-for-tripwire-dupe.patch b/luminol-server/minecraft-patches/features/0016-Add-config-for-tripwire-dupe.patch deleted file mode 100644 index 1a018c4..0000000 --- a/luminol-server/minecraft-patches/features/0016-Add-config-for-tripwire-dupe.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> -Date: Mon, 24 Feb 2025 06:00:00 -0800 -Subject: [PATCH] Add config for tripwire dupe - - -diff --git a/net/minecraft/world/level/block/TripWireHookBlock.java b/net/minecraft/world/level/block/TripWireHookBlock.java -index 9aace993c6c18f1a50610e4766225485984b8167..07ffe289b9556b45a9ef7db5357d85b14fe23feb 100644 ---- a/net/minecraft/world/level/block/TripWireHookBlock.java -+++ b/net/minecraft/world/level/block/TripWireHookBlock.java -@@ -215,7 +215,7 @@ public class TripWireHookBlock extends Block { - BlockState blockState2 = blockStates[i2]; - if (blockState2 != null) { - BlockState blockState3 = level.getBlockState(blockPos1); -- if (blockState3.is(Blocks.TRIPWIRE) || blockState3.is(Blocks.TRIPWIRE_HOOK)) { -+ if (me.earthme.luminol.config.modules.misc.AllowTripwireDupe.enabled || 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, Boolean.valueOf(flag2)), 3); // Paper - prevent tripwire from updating - } - } -diff --git a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java -index f96fc1391167dea48cac1caa464b9026657df89a..016595dd37f74902f926da4c9edf1eabdfe781bc 100644 ---- a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java -+++ b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java -@@ -27,6 +27,9 @@ public class EndPlatformFeature extends Feature { - // CraftBukkit end - BlockPos.MutableBlockPos mutableBlockPos = pos.mutable(); - -+ // Luminol start - prevent tripwire dupe in end platform generate -+ java.util.List blockList1 = new java.util.ArrayList<>(); -+ java.util.List blockList2 = new java.util.ArrayList<>(); - for (int i = -2; i <= 2; i++) { - for (int i1 = -2; i1 <= 2; i1++) { - for (int i2 = -1; i2 < 3; i2++) { -@@ -34,9 +37,22 @@ public class EndPlatformFeature extends Feature { - Block block = i2 == -1 ? Blocks.OBSIDIAN : Blocks.AIR; - // CraftBukkit start - if (!blockList.getBlockState(blockPos).is(block)) { -- if (dropBlocks) { -- blockList.destroyBlock(blockPos, true, null); -+ boolean flag = !dropBlocks; -+ if (me.earthme.luminol.config.modules.misc.AllowTripwireDupe.preventPlatformBreakString && me.earthme.luminol.config.modules.misc.AllowTripwireDupe.enabled && dropBlocks) { -+ 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); -+ } -+ } - } -+ if (flag) blockList1.add(blockPos.immutable()); -+ else blockList.destroyBlock(blockPos, true, null); -+ // Luminol end - prevent tripwire dupe in end platform generate - - blockList.setBlock(blockPos, block.defaultBlockState(), 3); - // CraftBukkit end -@@ -56,9 +72,19 @@ public class EndPlatformFeature extends Feature { - - // SPIGOT-7856: End platform not dropping items after replacing blocks - if (dropBlocks) { -- blockList.getList().forEach((state) -> level.destroyBlock(state.getPosition(), true, null)); -+ blockList.getList().forEach((state) -> level.destroyBlock(state.getPosition(), !blockList1.contains(state.getPosition()), null)); // Luminol - prevent tripwire dupe in end platform generate - } - blockList.updateList(); - // CraftBukkit end - } -+ -+ // Luminol start - prevent tripwire dupe in end platform generate -+ 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 - prevent tripwire dupe in end platform generate - } diff --git a/luminol-server/minecraft-patches/features/0016-Add-config-to-modify-tripwire-behavior.patch b/luminol-server/minecraft-patches/features/0016-Add-config-to-modify-tripwire-behavior.patch new file mode 100644 index 0000000..5ec7781 --- /dev/null +++ b/luminol-server/minecraft-patches/features/0016-Add-config-to-modify-tripwire-behavior.patch @@ -0,0 +1,126 @@ +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 9aace993c6c18f1a50610e4766225485984b8167..419c1c7e14691a472b70ed548ecb928cb289b939 100644 +--- a/net/minecraft/world/level/block/TripWireHookBlock.java ++++ b/net/minecraft/world/level/block/TripWireHookBlock.java +@@ -214,10 +214,18 @@ 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, Boolean.valueOf(flag2)), 3); // Paper - prevent tripwire from updating ++ // Luminol start - tripwire and tripwireHook dupe ++ if (me.earthme.luminol.config.modules.misc.AllowTripwireDupe.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, Boolean.valueOf(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 f96fc1391167dea48cac1caa464b9026657df89a..5485d02c1eff4d0dcc69cf74f4ce5e485e3a95bf 100644 +--- a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java ++++ b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java +@@ -27,15 +27,43 @@ 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.AllowTripwireDupe.behaviorMode, "VANILLA20") ++ && !java.util.Objects.equals(me.earthme.luminol.config.modules.misc.AllowTripwireDupe.behaviorMode, "MIXED"); + 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; +- // CraftBukkit start + if (!blockList.getBlockState(blockPos).is(block)) { + if (dropBlocks) { +- blockList.destroyBlock(blockPos, true, null); ++ boolean flag = false; ++ if (me.earthme.luminol.config.modules.misc.AllowTripwireDupe.enabled) { ++ switch (me.earthme.luminol.config.modules.misc.AllowTripwireDupe.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 Logic - default empty ++ } ++ } ++ if (flag) blockList1.add(blockPos.immutable()); ++ else blockList.destroyBlock(blockPos, true, null); + } + + blockList.setBlock(blockPos, block.defaultBlockState(), 3); +@@ -54,11 +82,39 @@ public class EndPlatformFeature extends Feature { + if (portalEvent.isCancelled()) return; + } + +- // SPIGOT-7856: End platform not dropping items after replacing blocks +- if (dropBlocks) { +- blockList.getList().forEach((state) -> level.destroyBlock(state.getPosition(), true, null)); ++ if (flag21) { ++ // Luminol start - When updated replace it with newer code ++ if (dropBlocks) { ++ java.util.function.Consumer beforeRun = state -> level.destroyBlock(state.getPosition(), !blockList1.contains(state.getPosition()), null); ++ java.util.function.Predicate filter = $ -> true; ++ for (org.bukkit.craftbukkit.block.CraftBlockState state : blockList.getList()) { ++ if (filter.test(state)) { ++ beforeRun.accept(state); ++ if (state.isPlaced()) { ++ state.getWorldHandle().setBlock(state.getPosition(), state.getHandle(), state.getFlag()); ++ } ++ } ++ } ++ } else { ++ blockList.updateList(); ++ } ++ // Luminol end - When updated replace it with newer code ++ } else { ++ // SPIGOT-7856: End platform not dropping items after replacing blocks ++ if (dropBlocks) { ++ blockList.getList().forEach((state) -> level.destroyBlock(state.getPosition(), !blockList1.contains(state.getPosition()), null)); // Luminol - prevent tripwire dupe in end platform generate ++ } ++ blockList.updateList(); + } +- blockList.updateList(); + // 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 + } diff --git a/luminol-server/paper-patches/files/src/main/java/me/earthme/luminol/config/modules/misc/AllowTripwireDupe.java.patch b/luminol-server/paper-patches/files/src/main/java/me/earthme/luminol/config/modules/misc/AllowTripwireDupe.java.patch index 2c2f3e8..62ea500 100644 --- a/luminol-server/paper-patches/files/src/main/java/me/earthme/luminol/config/modules/misc/AllowTripwireDupe.java.patch +++ b/luminol-server/paper-patches/files/src/main/java/me/earthme/luminol/config/modules/misc/AllowTripwireDupe.java.patch @@ -1,6 +1,6 @@ --- /dev/null +++ b/src/main/java/me/earthme/luminol/config/modules/misc/AllowTripwireDupe.java -@@ -1,0 +_,24 @@ +@@ -1,0 +_,27 @@ +package me.earthme.luminol.config.modules.misc; + +import me.earthme.luminol.config.ConfigInfo; @@ -10,10 +10,13 @@ +public class AllowTripwireDupe implements IConfigModule { + @ConfigInfo(baseName = "enabled") + public static boolean enabled = false; -+ @ConfigInfo(baseName = "prevent_platform_break_string", comments = ++ @ConfigInfo(baseName = "behavior-mode", comments = + """ -+ Prevent string drop when platform generate""") -+ public static boolean preventPlatformBreakString = false; ++ Allowed Value: ++ VANILLA20 ++ VANILLA21 ++ MIXED""") ++ public static String behaviorMode = "VANILLA21"; + + @Override + public EnumConfigCategory getCategory() {