Compare commits

..

5 Commits

Author SHA1 Message Date
MrHua269
7b7fe5c62a Fully finish fix of chunk iteration self modification
A fix in another way of https://github.com/PaperMC/Folia/issues/363
2025-05-30 19:57:23 +08:00
Helvetica Volubi
0a00e23143 [ci skip]refactor: rename a config and edit some co-author's data 2025-05-30 00:59:42 +08:00
Helvetica Volubi
c935e6bdc8 [ci skip]docs: add a tip for long path support 2025-05-30 00:37:12 +08:00
Helvetica Volubi
31d22035f3 feat: add @TransformedConfig to auto transform config 2025-05-29 23:04:55 +08:00
MrHua269
064d0b5595 Updated Upstream(Folia) 2025-05-29 22:33:34 +08:00
14 changed files with 75 additions and 33 deletions

View File

@@ -23,6 +23,11 @@
- `git`
- `JDK 21 或更高版本`
特别提醒在操作前您需要启用系统和Git的长路径支持以下为部分平台的相关描述。
[`Windows`](https://learn.microsoft.com/windows/win32/fileio/maximum-file-path-limitation)
[`Git for Windows`](https://gitforwindows.org/faq.html#i-get-errors-trying-to-check-out-files-with-long-path-names)
## 了解补丁Patches
Luminol 使用和 Folia 一样的补丁系统,并为了针对不同部分的修改分成了两个目录:

View File

@@ -25,6 +25,11 @@ Before coding, you need these pieces of software / tools as Dev Environment.
- `git`
- `JDK 21 or higher`
PS: You need to enable long path support in your System and Git before start, some of the platform's resolution here.
[`Windows`](https://learn.microsoft.com/windows/win32/fileio/maximum-file-path-limitation)
[`Git for Windows`](https://gitforwindows.org/faq.html#i-get-errors-trying-to-check-out-files-with-long-path-names)
## Understanding "Patches"
Luminol uses as the same patching system as Paper,

View File

@@ -2,7 +2,7 @@ group = me.earthme.luminol
version=1.21.5-R0.1-SNAPSHOT
mcVersion=1.21.5
foliaRef=4f64c32b5cb3310020dd7880bb28c41e444b2c0c
foliaRef=da0d7cd1beb8eb7b84a5210dcefa6ffb4cce7415
org.gradle.configuration-cache=true
org.gradle.caching=true

View File

@@ -5,7 +5,7 @@ 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..8139387c1b0814c86d770f5ef6dda952140467ea 100644
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 {
@@ -16,7 +16,7 @@ index 8a3a8b0fdf9545a41501dc992c6982d9c8ce7b66..8139387c1b0814c86d770f5ef6dda952
- 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.AllowTripwireDupe.enabled) {
+ if (me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.enabled) {
+ level.setBlock(blockPos1, blockState2.trySetValue(ATTACHED, flag2), 3);
+ level.getBlockState(blockPos1);
+ } else {
@@ -30,7 +30,7 @@ index 8a3a8b0fdf9545a41501dc992c6982d9c8ce7b66..8139387c1b0814c86d770f5ef6dda952
}
}
diff --git a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java
index 49b810ae9d9a8d0718a5f8c512e15a5573ed04fd..ae48255ee384a7b4a44c8754601200d361665934 100644
index 49b810ae9d9a8d0718a5f8c512e15a5573ed04fd..37ebb23c9c053de0530254d98f2120058833f232 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> {
@@ -40,8 +40,8 @@ index 49b810ae9d9a8d0718a5f8c512e15a5573ed04fd..ae48255ee384a7b4a44c8754601200d3
+ // 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.AllowTripwireDupe.behaviorMode, "VANILLA20")
+ && !java.util.Objects.equals(me.earthme.luminol.config.modules.misc.AllowTripwireDupe.behaviorMode, "MIXED");
+ 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++) {
@@ -51,8 +51,8 @@ index 49b810ae9d9a8d0718a5f8c512e15a5573ed04fd..ae48255ee384a7b4a44c8754601200d3
if (dropBlocks) {
- blockList.destroyBlock(blockPos, true, null); // CraftBukkit
+ boolean flag = false;
+ if (me.earthme.luminol.config.modules.misc.AllowTripwireDupe.enabled) {
+ switch (me.earthme.luminol.config.modules.misc.AllowTripwireDupe.behaviorMode) {
+ if (me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.enabled) {
+ switch (me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.behaviorMode) {
+ case "VANILLA20": {
+ flag = true;
+ }
@@ -82,7 +82,7 @@ index 49b810ae9d9a8d0718a5f8c512e15a5573ed04fd..ae48255ee384a7b4a44c8754601200d3
- if (dropBlocks) {
- blockList.placeBlocks(state -> level.destroyBlock(state.getPosition(), true, null));
+ if (flag21 || !me.earthme.luminol.config.modules.misc.AllowTripwireDupe.enabled) {
+ if (flag21 || !me.earthme.luminol.config.modules.misc.TripwireBehaviorConfig.enabled) {
+ if (dropBlocks) {
+ blockList.placeBlocks(state -> level.destroyBlock(state.getPosition(), true, null));
+ } else {

View File

@@ -3,9 +3,11 @@ From: MrHua269 <wangxyper@163.com>
Date: Wed, 22 Jan 2025 17:23:16 +0800
Subject: [PATCH] Gale: Optimize noise generation
Co-authored by: Martijn Muijsers <martijnmuijsers@live.nl>, ishland <ishlandmc@yeah.net>
As part of: Gale (https://github.com/GaleMC/Gale/blob/276e903b2688f23b19bdc8d493c0bf87656d2400/patches/server/0106-Optimize-noise-generation.patch) and C2ME (https://github.com/RelativityMC/C2ME-fabric)
Licensed under: MIT (https://opensource.org/licenses/MIT)
Co-authored by: Martijn Muijsers <martijnmuijsers@live.nl>
ishland <ishlandmc@yeah.net>
As part of: Gale (https://github.com/GaleMC/Gale/blob/276e903b2688f23b19bdc8d493c0bf87656d2400/patches/server/0106-Optimize-noise-generation.patch)
C2ME (https://github.com/RelativityMC/C2ME-fabric)
Licensed under: MIT (https://opensource.org/licenses/MIT)
diff --git a/net/minecraft/world/level/levelgen/synth/ImprovedNoise.java b/net/minecraft/world/level/levelgen/synth/ImprovedNoise.java
index fb11a2eea540d55e50eab59f9857ca5d99f556f8..dcc1a3f8b611c9f103b848db90b077b984b60ada 100644

View File

@@ -3,8 +3,10 @@ From: MrHua269 <wangxyper@163.com>
Date: Wed, 22 Jan 2025 17:18:00 +0800
Subject: [PATCH] Gale: Replace AI attributes with optimized collections
Co-authored by: Martijn Muijsers <martijnmuijsers@live.nl>, 2No2Name <2No2Name@web.de>
As part of: Gale (https://github.com/GaleMC/Gale/blob/276e903b2688f23b19bdc8d493c0bf87656d2400/patches/server/0087-Replace-AI-attributes-with-optimized-collections.patch) and Lithium (https://github.com/CaffeineMC/lithium-fabric)
Co-authored by: Martijn Muijsers <martijnmuijsers@live.nl>
2No2Name <2No2Name@web.de>
As part of: Gale (https://github.com/GaleMC/Gale/blob/276e903b2688f23b19bdc8d493c0bf87656d2400/patches/server/0087-Replace-AI-attributes-with-optimized-collections.patch)
Lithium (https://github.com/CaffeineMC/lithium-fabric)
Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
diff --git a/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/net/minecraft/world/entity/ai/attributes/AttributeMap.java

View File

@@ -3,8 +3,10 @@ From: MrHua269 <wangxyper@163.com>
Date: Sun, 12 Jan 2025 15:35:15 +0800
Subject: [PATCH] Gale: Skip entity move if movement is zero
Co-authored by: Martijn Muijsers <martijnmuijsers@live.nl>, ishland <ishlandmc@yeah.net>
As part of: Gale (https://github.com/GaleMC/Gale/blob/276e903b2688f23b19bdc8d493c0bf87656d2400/patches/server/0103-Skip-entity-move-if-movement-is-zero.patch) and VMP (https://github.com/RelativityMC/VMP-fabric)
Co-authored by: Martijn Muijsers <martijnmuijsers@live.nl>
ishland <ishlandmc@yeah.net>
As part of: Gale (https://github.com/GaleMC/Gale/blob/276e903b2688f23b19bdc8d493c0bf87656d2400/patches/server/0103-Skip-entity-move-if-movement-is-zero.patch)
VMP (https://github.com/RelativityMC/VMP-fabric)
Licensed under: MIT (https://opensource.org/licenses/MIT)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java

View File

@@ -3,8 +3,10 @@ From: MrHua269 <wangxyper@163.com>
Date: Sun, 12 Jan 2025 14:15:24 +0800
Subject: [PATCH] Gale: Use platform math functions
Co-authored by: Martijn Muijsers <martijnmuijsers@live.nl>, Xymb <xymb@endcrystal.me>
As part of: Gale (https://github.com/GaleMC/Gale/blob/276e903b2688f23b19bdc8d493c0bf87656d2400/patches/server/0019-Use-platform-math-functions.patch) and Kaiiju(https://github.com/KaiijuMC/Kaiiju)
Co-authored by: Martijn Muijsers <martijnmuijsers@live.nl>
Xymb <xymb@endcrystal.me>
As part of: Gale (https://github.com/GaleMC/Gale/blob/276e903b2688f23b19bdc8d493c0bf87656d2400/patches/server/0019-Use-platform-math-functions.patch)
Kaiiju (https://github.com/KaiijuMC/Kaiiju)
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/util/Mth.java b/net/minecraft/util/Mth.java

View File

@@ -7,10 +7,10 @@ We use the old-like logics which is in 1.21.4.
Might fixes: https://github.com/PaperMC/Folia/issues/363
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
index 6dc5b1a8bdba998e11bcdf352bcc0fc7161a484c..753b36a7b1c2627540c62bea78565b880803a175 100644
index f8322334fb6a0cea38c4d1981862ba673fd1b100..0e08512ce94435ca90a2344eefc761fa4fcdeb18 100644
--- a/net/minecraft/server/level/ServerChunkCache.java
+++ b/net/minecraft/server/level/ServerChunkCache.java
@@ -173,10 +173,14 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
@@ -173,14 +173,26 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
// 2. _removes_ are impossible at this stage in the tick
final LevelChunk[] raw = entityTickingChunks.getRawDataUnchecked();
final int size = entityTickingChunks.size(); foliaProfiler.addCounter(ca.spottedleaf.leafprofiler.LProfilerRegistry.RANDOM_CHUNK_TICK_COUNT, (long)size); // Folia - profiler
@@ -20,10 +20,23 @@ index 6dc5b1a8bdba998e11bcdf352bcc0fc7161a484c..753b36a7b1c2627540c62bea78565b88
+ // Luminol end
- java.util.Objects.checkFromToIndex(0, size, raw.length);
+ this.level.getServer().moonrise$executeMidTickTasks(); // Luminol - Fix chunk iteration self modification - try executing mid-tick tasks for once chunk system task parsing
+ java.util.Objects.checkFromToIndex(0, size, rawCopy.length); // Luminol - Fix chunk iteration self modification - use copy of raw array
for (int i = 0; i < size; ++i) {
- world.tickChunk(raw[i], randomTickSpeed);
+ world.tickChunk(rawCopy[i], randomTickSpeed); // Luminol - Fix chunk iteration self modification - use copy of raw array
+ // Luminol start - Fix chunk iteration self modification
+ final LevelChunk chunk = rawCopy[i];
+
+ if (!chunk.getFullStatus().isOrAfter(FullChunkStatus.ENTITY_TICKING)) {
+ continue; // skip chunks which are not entity ticking(probably downgraded from last iteration)
+ }
+ // Luminol end
+ world.tickChunk(chunk, randomTickSpeed); // Luminol - Fix chunk iteration self modification - use copy of raw array
// call mid-tick tasks for chunk system
if ((i & 7) == 0) {
- //((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.level.getServer()).moonrise$executeMidTickTasks(); // Folia - TODO restore this
+ ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.level.getServer()).moonrise$executeMidTickTasks(); // Folia - TODO restore this // Luminol - Fix chunk iteration self modification - restore mid tasks here
continue;
}
}

View File

@@ -5,11 +5,11 @@ Subject: [PATCH] Add BlockPos transform to Position support
diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java
index eb94f71f626c1f89f1b9048a8e68ae09ff17effc..78fe4d49aa1108ceb180538aeea6d0cede31a58a 100644
index ff6d200c3c3ecb958086f11dff39357dc0bf70fc..16d95bd30c33d831fd495c65748f6633df5971aa 100644
--- a/src/main/java/io/papermc/paper/util/MCUtil.java
+++ b/src/main/java/io/papermc/paper/util/MCUtil.java
@@ -162,6 +162,12 @@ public final class MCUtil {
return new org.bukkit.Location(world.getWorld(), pos.x(), pos.y(), pos.z());
@@ -160,6 +160,12 @@ public final class MCUtil {
return new Location(world.getWorld(), pos.x(), pos.y(), pos.z());
}
+ // Luminol start - add BlockPos support
@@ -20,4 +20,4 @@ index eb94f71f626c1f89f1b9048a8e68ae09ff17effc..78fe4d49aa1108ceb180538aeea6d0ce
+
/**
* Converts a NMS World/Vector to Bukkit Location
* @param world
*/

View File

@@ -10,9 +10,9 @@
+@Retention(RetentionPolicy.RUNTIME)
+@Repeatable(TransformedConfig.List.class)
+public @interface TransformedConfig {
+ String name() default "";
+ String name();
+
+ String[] category() default "";
+ String[] category();
+
+ boolean transform() default true;
+

View File

@@ -1,13 +1,15 @@
--- /dev/null
+++ b/src/main/java/me/earthme/luminol/config/modules/experiment/EntityDamageSourceTraceConfig.java
@@ -1,0 +_,22 @@
@@ -1,0 +_,24 @@
+package me.earthme.luminol.config.modules.experiment;
+
+import me.earthme.luminol.config.ConfigInfo;
+import me.earthme.luminol.config.EnumConfigCategory;
+import me.earthme.luminol.config.IConfigModule;
+import me.earthme.luminol.config.TransformedConfig;
+
+public class EntityDamageSourceTraceConfig implements IConfigModule {
+ @TransformedConfig(name = "enabled", category = {"experiment", "entity-damage-source-trace"})
+ @ConfigInfo(baseName = "enabled", comments =
+ """
+ Allow trace damage source cross different Region Scheduler.""")

View File

@@ -1,31 +1,36 @@
--- /dev/null
+++ b/src/main/java/me/earthme/luminol/config/modules/misc/RaidChangesConfig.java
@@ -1,0 +_,54 @@
@@ -1,0 +_,61 @@
+package me.earthme.luminol.config.modules.misc;
+
+import me.earthme.luminol.config.ConfigInfo;
+import me.earthme.luminol.config.EnumConfigCategory;
+import me.earthme.luminol.config.IConfigModule;
+import me.earthme.luminol.config.TransformedConfig;
+
+public class RaidChangesConfig implements IConfigModule {
+ @TransformedConfig(name = "allow-bad-omen-trigger-raid", category = {"misc", "revert-raid-changes"})
+ @ConfigInfo(baseName = "allow_bad_omen_trigger_raid", comments =
+ """
+ Allow players with ominous signs to skip a\s
+ 30-second cooldown and trigger attacks directly""")
+ public static boolean trigger = false;
+
+ @TransformedConfig(name = "give-bad-omen-when-kill-patrol-leader", category = {"misc", "revert-raid-changes"})
+ @ConfigInfo(baseName = "give_bad_omen_when_kill_patrol_leader", comments =
+ """
+ Enable players to obtain an ominous omen\s
+ effect when killing the patrol team captain""")
+ public static boolean effect = false;
+
+ @TransformedConfig(name = "bad-omen-infinite", category = {"misc", "revert-raid-changes"})
+ @ConfigInfo(baseName = "bad_omen_infinite", comments =
+ """
+ Enable bad omen effect infinite time
+ --- this config is not old version's function""")
+ public static boolean infinite = false;
+
+ @TransformedConfig(name = "skip-height-check", category = {"misc", "revert-raid-changes"})
+ @ConfigInfo(baseName = "skip_height_check", comments =
+ """
+ Disable y <= 96 check.
@@ -33,12 +38,14 @@
+ and always behavior of enabled""")
+ public static boolean heightCheck = false;
+
+ @TransformedConfig(name = "skip-self-raid-check", category = {"misc", "revert-raid-changes"})
+ @ConfigInfo(baseName = "skip_self_raid_check", comments =
+ """
+ Disable raid self check\s
+ --- this config is not old version's function""")
+ public static boolean selfCheck = false;
+
+ @TransformedConfig(name = "revert-274911", category = {"misc", "revert-raid-changes"})
+ @ConfigInfo(baseName = "revert_274911", comments =
+ """
+ Revert Old raid's find spawn position logic

View File

@@ -1,18 +1,20 @@
--- /dev/null
+++ b/src/main/java/me/earthme/luminol/config/modules/misc/AllowTripwireDupe.java
@@ -1,0 +_,27 @@
+++ b/src/main/java/me/earthme/luminol/config/modules/misc/TripwireBehaviorConfig.java
@@ -1,0 +_,29 @@
+package me.earthme.luminol.config.modules.misc;
+
+import me.earthme.luminol.config.ConfigInfo;
+import me.earthme.luminol.config.EnumConfigCategory;
+import me.earthme.luminol.config.IConfigModule;
+import me.earthme.luminol.config.TransformedConfig;
+
+public class AllowTripwireDupe implements IConfigModule {
+public class TripwireBehaviorConfig implements IConfigModule {
+ @ConfigInfo(baseName = "enabled")
+ public static boolean enabled = false;
+ @TransformedConfig(name = "behavior-mode", category = {"misc", "tripwire_dupe"})
+ @ConfigInfo(baseName = "behavior_mode", comments =
+ """
+ Allowed Value:
+ Available Value:
+ VANILLA20
+ VANILLA21
+ MIXED""")