From ad85413c9e25bf7c5883efddeb09ab80b2fe1aee Mon Sep 17 00:00:00 2001 From: Helvetica Volubi Date: Sat, 24 May 2025 00:35:23 +0800 Subject: [PATCH] ci: test --- .github/workflows/build_1.21.5.yml | 13 +- .../features/0002-KioCG-Chunk-API.patch | 6 +- ...isable-timings-warn-msg-and-commands.patch | 10 +- .../0004-Force-disable-reload-command.patch | 8 +- .../0005-Pufferfish-Sentry.patch | 0 .../0006-Pufferfish-SIMD-Utilities.patch | 202 +++++++++++++++++ .../features/0007-Tick-regions-api.patch | 206 ++++++++++++++++++ .../dedicated/DedicatedServer.java.patch | 2 +- .../features/0001-Rebrand-to-Luminol.patch | 8 +- 9 files changed, 430 insertions(+), 25 deletions(-) rename luminol-api/paper-patches/{needupdate => features}/0003-Disable-timings-warn-msg-and-commands.patch (88%) rename luminol-api/paper-patches/{needupdate => features}/0004-Force-disable-reload-command.patch (73%) rename luminol-api/paper-patches/{needupdate => features}/0005-Pufferfish-Sentry.patch (100%) create mode 100644 luminol-api/paper-patches/features/0006-Pufferfish-SIMD-Utilities.patch create mode 100644 luminol-api/paper-patches/features/0007-Tick-regions-api.patch diff --git a/.github/workflows/build_1.21.5.yml b/.github/workflows/build_1.21.5.yml index 9dc609b..ccf6452 100644 --- a/.github/workflows/build_1.21.5.yml +++ b/.github/workflows/build_1.21.5.yml @@ -15,19 +15,16 @@ jobs: steps: - name: Checkout Git Repository uses: actions/checkout@v4 - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - + - name: Set up JDK uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: '22' - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: Configure Git User Details run: git config --global user.email "ci@luminolmc.com" && git config --global user.name "LuminolMC CI" diff --git a/luminol-api/paper-patches/features/0002-KioCG-Chunk-API.patch b/luminol-api/paper-patches/features/0002-KioCG-Chunk-API.patch index 360b181..412f2b6 100644 --- a/luminol-api/paper-patches/features/0002-KioCG-Chunk-API.patch +++ b/luminol-api/paper-patches/features/0002-KioCG-Chunk-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] KioCG Chunk API diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chunk.java -index d434277342b2db19f98e032d3a316b27d728b840..e188353ad193f6203533790ae52fafc0554df63f 100644 +index 9f8414f854646ad7429fe806e35a13e32a07ddaa..9a0995bf82830b45b2d72b2a1cff2bfdd4f7a638 100644 --- a/src/main/java/org/bukkit/Chunk.java +++ b/src/main/java/org/bukkit/Chunk.java @@ -388,4 +388,6 @@ public interface Chunk extends PersistentDataHolder { @@ -16,10 +16,10 @@ index d434277342b2db19f98e032d3a316b27d728b840..e188353ad193f6203533790ae52fafc0 + long getChunkHotAvg(); // KioCG } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 494dca2ee48a03953d47050b178496df12bc48c5..a65d64b1ef64cf1cf213cec00e7f73cc7ad2b79c 100644 +index c3dfe3471d33c5e24985a883bdead48597dd9da0..ec428b10ced4279d8b4d22838840dd1f80fca28a 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3918,4 +3918,6 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3910,4 +3910,6 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param score New death screen score of player */ void setDeathScreenScore(int score); diff --git a/luminol-api/paper-patches/needupdate/0003-Disable-timings-warn-msg-and-commands.patch b/luminol-api/paper-patches/features/0003-Disable-timings-warn-msg-and-commands.patch similarity index 88% rename from luminol-api/paper-patches/needupdate/0003-Disable-timings-warn-msg-and-commands.patch rename to luminol-api/paper-patches/features/0003-Disable-timings-warn-msg-and-commands.patch index cee04fa..9ea504f 100644 --- a/luminol-api/paper-patches/needupdate/0003-Disable-timings-warn-msg-and-commands.patch +++ b/luminol-api/paper-patches/features/0003-Disable-timings-warn-msg-and-commands.patch @@ -18,14 +18,14 @@ index 89017af09ce32e7a66014fc3aeb50155921252a5..b862779b48176dd7e67a2f1a3e7f24bc } } diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index 5df19bd701c67506689fc7f49d91f99ebfbc83f0..baf0cbd2f995ebe2e4382244eff6e15ec125d790 100644 +index 4acda947b7d69ab4133b4cc94e76d945e4d148d5..8093eff77c80be2c2e97bf6700a69d879d4c62a5 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -39,7 +39,7 @@ public class SimpleCommandMap implements CommandMap { - register("bukkit", new VersionCommand("version")); +@@ -32,7 +32,7 @@ public class SimpleCommandMap implements CommandMap { + + private void setDefaultCommands() { register("bukkit", new ReloadCommand("reload")); - //register("bukkit", new PluginsCommand("plugins")); // Paper -- register("bukkit", new co.aikar.timings.TimingsCommand("timings")); // Paper +- register("bukkit", new co.aikar.timings.TimingsCommand("timings")); + //register("bukkit", new co.aikar.timings.TimingsCommand("timings")); // Paper // Luminol - Disable timings warn msg and commands } diff --git a/luminol-api/paper-patches/needupdate/0004-Force-disable-reload-command.patch b/luminol-api/paper-patches/features/0004-Force-disable-reload-command.patch similarity index 73% rename from luminol-api/paper-patches/needupdate/0004-Force-disable-reload-command.patch rename to luminol-api/paper-patches/features/0004-Force-disable-reload-command.patch index 1038489..16298ca 100644 --- a/luminol-api/paper-patches/needupdate/0004-Force-disable-reload-command.patch +++ b/luminol-api/paper-patches/features/0004-Force-disable-reload-command.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Force disable reload command diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index baf0cbd2f995ebe2e4382244eff6e15ec125d790..0d354eb5e7df427faff2d6c816c297c3d39a6e63 100644 +index 8093eff77c80be2c2e97bf6700a69d879d4c62a5..c51bc888011091925d73945a52b252aef3e2b384 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -37,7 +37,7 @@ public class SimpleCommandMap implements CommandMap { +@@ -31,7 +31,7 @@ public class SimpleCommandMap implements CommandMap { + } private void setDefaultCommands() { - register("bukkit", new VersionCommand("version")); - register("bukkit", new ReloadCommand("reload")); + //register("bukkit", new ReloadCommand("reload")); // Luminol - Force disable reload command - //register("bukkit", new PluginsCommand("plugins")); // Paper //register("bukkit", new co.aikar.timings.TimingsCommand("timings")); // Paper // Luminol - Disable timings warn msg and commands } + diff --git a/luminol-api/paper-patches/needupdate/0005-Pufferfish-Sentry.patch b/luminol-api/paper-patches/features/0005-Pufferfish-Sentry.patch similarity index 100% rename from luminol-api/paper-patches/needupdate/0005-Pufferfish-Sentry.patch rename to luminol-api/paper-patches/features/0005-Pufferfish-Sentry.patch diff --git a/luminol-api/paper-patches/features/0006-Pufferfish-SIMD-Utilities.patch b/luminol-api/paper-patches/features/0006-Pufferfish-SIMD-Utilities.patch new file mode 100644 index 0000000..1632d93 --- /dev/null +++ b/luminol-api/paper-patches/features/0006-Pufferfish-SIMD-Utilities.patch @@ -0,0 +1,202 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrHua269 +Date: Sun, 12 Jan 2025 14:00:28 +0800 +Subject: [PATCH] Pufferfish SIMD Utilities + + +diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java +new file mode 100644 +index 0000000000000000000000000000000000000000..856de1331b15542c00e01990f471fa5152722c11 +--- /dev/null ++++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java +@@ -0,0 +1,35 @@ ++package gg.pufferfish.pufferfish.simd; ++ ++import jdk.incubator.vector.FloatVector; ++import jdk.incubator.vector.IntVector; ++import jdk.incubator.vector.VectorSpecies; ++import org.slf4j.Logger; ++ ++/** ++ * Basically, java is annoying and we have to push this out to its own class. ++ */ ++@Deprecated ++public class SIMDChecker { ++ ++ @Deprecated ++ public static boolean canEnable(Logger logger) { ++ try { ++ SIMDDetection.testRun = true; ++ ++ VectorSpecies ISPEC = IntVector.SPECIES_PREFERRED; ++ VectorSpecies FSPEC = FloatVector.SPECIES_PREFERRED; ++ ++ logger.info("Max SIMD vector size on this system is {} bits (int)", ISPEC.vectorBitSize()); ++ logger.info("Max SIMD vector size on this system is " + FSPEC.vectorBitSize() + " bits (float)"); ++ ++ if (ISPEC.elementSize() < 2 || FSPEC.elementSize() < 2) { ++ logger.warn("SIMD is not properly supported on this system!"); ++ return false; ++ } ++ ++ return true; ++ } catch (NoClassDefFoundError | Exception ignored) {} // Basically, we don't do anything. This lets us detect if it's not functional and disable it. ++ return false; ++ } ++ ++} +diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java +new file mode 100644 +index 0000000000000000000000000000000000000000..0a64cd0e88083ac4af6674ad0fb07b771109c737 +--- /dev/null ++++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java +@@ -0,0 +1,34 @@ ++package gg.pufferfish.pufferfish.simd; ++ ++import org.slf4j.Logger; ++ ++@Deprecated ++public class SIMDDetection { ++ ++ public static boolean isEnabled = false; ++ public static boolean testRun = false; ++ ++ @Deprecated ++ public static boolean canEnable(Logger logger) { ++ try { ++ return SIMDChecker.canEnable(logger); ++ } catch (NoClassDefFoundError | Exception ignored) { ++ return false; ++ } ++ } ++ ++ @Deprecated ++ public static int getJavaVersion() { ++ // https://stackoverflow.com/a/2591122 ++ String version = System.getProperty("java.version"); ++ if(version.startsWith("1.")) { ++ version = version.substring(2, 3); ++ } else { ++ int dot = version.indexOf("."); ++ if(dot != -1) { version = version.substring(0, dot); } ++ } ++ version = version.split("-")[0]; // Azul is stupid ++ return Integer.parseInt(version); ++ } ++ ++} +diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java +new file mode 100644 +index 0000000000000000000000000000000000000000..c26dcaaa2e85882730c854099df80d69eec70f33 +--- /dev/null ++++ b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java +@@ -0,0 +1,84 @@ ++package gg.pufferfish.pufferfish.simd; ++ ++import jdk.incubator.vector.FloatVector; ++import jdk.incubator.vector.IntVector; ++import jdk.incubator.vector.VectorMask; ++import jdk.incubator.vector.VectorSpecies; ++import org.bukkit.map.MapPalette; ++ ++import java.awt.*; ++ ++@Deprecated ++public class VectorMapPalette { ++ ++ private static final VectorSpecies I_SPEC = IntVector.SPECIES_PREFERRED; ++ private static final VectorSpecies F_SPEC = FloatVector.SPECIES_PREFERRED; ++ ++ @Deprecated ++ public static void matchColorVectorized(int[] in, byte[] out) { ++ int speciesLength = I_SPEC.length(); ++ int i; ++ for (i = 0; i < in.length - speciesLength; i += speciesLength) { ++ float[] redsArr = new float[speciesLength]; ++ float[] bluesArr = new float[speciesLength]; ++ float[] greensArr = new float[speciesLength]; ++ int[] alphasArr = new int[speciesLength]; ++ ++ for (int j = 0; j < speciesLength; j++) { ++ alphasArr[j] = (in[i + j] >> 24) & 0xFF; ++ redsArr[j] = (in[i + j] >> 16) & 0xFF; ++ greensArr[j] = (in[i + j] >> 8) & 0xFF; ++ bluesArr[j] = (in[i + j] >> 0) & 0xFF; ++ } ++ ++ IntVector alphas = IntVector.fromArray(I_SPEC, alphasArr, 0); ++ FloatVector reds = FloatVector.fromArray(F_SPEC, redsArr, 0); ++ FloatVector greens = FloatVector.fromArray(F_SPEC, greensArr, 0); ++ FloatVector blues = FloatVector.fromArray(F_SPEC, bluesArr, 0); ++ IntVector resultIndex = IntVector.zero(I_SPEC); ++ VectorMask modificationMask = VectorMask.fromLong(I_SPEC, 0xffffffff); ++ ++ modificationMask = modificationMask.and(alphas.lt(128).not()); ++ FloatVector bestDistances = FloatVector.broadcast(F_SPEC, Float.MAX_VALUE); ++ ++ for (int c = 4; c < MapPalette.colors.length; c++) { ++ // We're using 32-bit floats here because it's 2x faster and nobody will know the difference. ++ // For correctness, the original algorithm uses 64-bit floats instead. Completely unnecessary. ++ FloatVector compReds = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getRed()); ++ FloatVector compGreens = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getGreen()); ++ FloatVector compBlues = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getBlue()); ++ ++ FloatVector rMean = reds.add(compReds).div(2.0f); ++ FloatVector rDiff = reds.sub(compReds); ++ FloatVector gDiff = greens.sub(compGreens); ++ FloatVector bDiff = blues.sub(compBlues); ++ ++ FloatVector weightR = rMean.div(256.0f).add(2); ++ FloatVector weightG = FloatVector.broadcast(F_SPEC, 4.0f); ++ FloatVector weightB = FloatVector.broadcast(F_SPEC, 255.0f).sub(rMean).div(256.0f).add(2.0f); ++ ++ FloatVector distance = weightR.mul(rDiff).mul(rDiff).add(weightG.mul(gDiff).mul(gDiff)).add(weightB.mul(bDiff).mul(bDiff)); ++ ++ // Now we compare to the best distance we've found. ++ // This mask contains a "1" if better, and a "0" otherwise. ++ VectorMask bestDistanceMask = distance.lt(bestDistances); ++ bestDistances = bestDistances.blend(distance, bestDistanceMask); // Update the best distances ++ ++ // Update the result array ++ // We also AND with the modification mask because we don't want to interfere if the alpha value isn't large enough. ++ resultIndex = resultIndex.blend(c, bestDistanceMask.cast(I_SPEC).and(modificationMask)); // Update the results ++ } ++ ++ for (int j = 0; j < speciesLength; j++) { ++ int index = resultIndex.lane(j); ++ out[i + j] = (byte) (index < 128 ? index : -129 + (index - 127)); ++ } ++ } ++ ++ // For the final ones, fall back to the regular method ++ for (; i < in.length; i++) { ++ out[i] = MapPalette.matchColor(new Color(in[i], true)); ++ } ++ } ++ ++} +diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java +index fc9728342de7605da69813fb44b008c1343124c0..d322e6c47d751b41e4b2f2fc45bb8d7498bff21d 100644 +--- a/src/main/java/org/bukkit/map/MapPalette.java ++++ b/src/main/java/org/bukkit/map/MapPalette.java +@@ -35,7 +35,7 @@ public final class MapPalette { + } + + @NotNull +- static final Color[] colors = { ++ public static final Color[] colors = { // Luminol - package-private -> public + // Start generate - MapPalette#colors + // @GeneratedFrom 1.21.5 + new Color(0x00000000, true), +@@ -395,9 +395,11 @@ public final class MapPalette { + temp.getRGB(0, 0, temp.getWidth(), temp.getHeight(), pixels, 0, temp.getWidth()); + + byte[] result = new byte[temp.getWidth() * temp.getHeight()]; ++ if ((mapColorCache != null && mapColorCache.isCached()) || !gg.pufferfish.pufferfish.simd.SIMDDetection.isEnabled) { // Luminol - Pufferfish - vectorized map color conversion + for (int i = 0; i < pixels.length; i++) { + result[i] = matchColor(new Color(pixels[i], true)); + } ++ } else gg.pufferfish.pufferfish.simd.VectorMapPalette.matchColorVectorized(pixels, result); // Luminol - Pufferfish - vectorized map color conversion + return result; + } + diff --git a/luminol-api/paper-patches/features/0007-Tick-regions-api.patch b/luminol-api/paper-patches/features/0007-Tick-regions-api.patch new file mode 100644 index 0000000..cb55dfc --- /dev/null +++ b/luminol-api/paper-patches/features/0007-Tick-regions-api.patch @@ -0,0 +1,206 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrHua269 +Date: Mon, 27 Jan 2025 13:01:59 +0800 +Subject: [PATCH] Tick regions api + + +diff --git a/src/main/java/me/earthme/luminol/api/RegionStats.java b/src/main/java/me/earthme/luminol/api/RegionStats.java +new file mode 100644 +index 0000000000000000000000000000000000000000..96147cace1550d14c682258dab0397587dcf76a4 +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/api/RegionStats.java +@@ -0,0 +1,25 @@ ++package me.earthme.luminol.api; ++ ++/** ++ * A simple package of folia's tick region state.It linked to the RegionStats of the nms part so that
++ * You could call these methods to get the status of this tick region
++ */ ++public interface RegionStats { ++ /** ++ * Get the entity count in this tick region ++ * @return the entity count ++ */ ++ int getEntityCount(); ++ ++ /** ++ * Get the player count in this tick region ++ * @return the player count ++ */ ++ int getPlayerCount(); ++ ++ /** ++ * Get the chunk count in this tick region ++ * @return the chunk count ++ */ ++ int getChunkCount(); ++} +diff --git a/src/main/java/me/earthme/luminol/api/ThreadedRegion.java b/src/main/java/me/earthme/luminol/api/ThreadedRegion.java +new file mode 100644 +index 0000000000000000000000000000000000000000..01dac0602b5f66f80c0adfbb779666fe0325a24f +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/api/ThreadedRegion.java +@@ -0,0 +1,56 @@ ++package me.earthme.luminol.api; ++ ++import org.bukkit.Location; ++import org.bukkit.World; ++ ++import javax.annotation.Nullable; ++ ++/** ++ * A mirror of folia's ThreadedRegion
++ * Including some handy methods to get the information of the tick region
++ * Note: You should call these methods inside this tick region's thread context ++ */ ++public interface ThreadedRegion { ++ /** ++ * Get the center chunk pos of this tick region
++ * Note:
++ * 1.Global region will return a null value(But we don't finish the global region yet()
++ * 2.You should call these methods inside this tick region's thread context ++ * @return The center chunk pos ++ */ ++ @Nullable ++ Location getCenterChunkPos(); ++ ++ /** ++ * Get the dead section percent of this tick region ++ * Note:
++ * 1.Dead percent is mean the percent of the unloaded chunk count of this tick region, which is also used for determine ++ * that the tick region should or not check for splitting
++ * 2.You should call these methods inside this tick region's thread context ++ * @return The dead section percent ++ */ ++ double getDeadSectionPercent(); ++ ++ /** ++ * Get the tick region data of this tick region
++ * Note:
++ * 1.You should call this method inside this tick region's thread context
++ * 2.You should call these methods inside this tick region's thread context ++ * @return The tick region data ++ */ ++ TickRegionData getTickRegionData(); ++ ++ /** ++ * Get the world of this tick region
++ * Note: Global region will return a null value too ++ * @return The world of this tick region ++ */ ++ @Nullable ++ World getWorld(); ++ ++ /** ++ * Get the id of the tick region
++ * @return The id of the tick region ++ */ ++ long getId(); ++} +diff --git a/src/main/java/me/earthme/luminol/api/ThreadedRegionizer.java b/src/main/java/me/earthme/luminol/api/ThreadedRegionizer.java +new file mode 100644 +index 0000000000000000000000000000000000000000..ff31a68a019fd9e5e687e6818f8729f4950bc060 +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/api/ThreadedRegionizer.java +@@ -0,0 +1,56 @@ ++package me.earthme.luminol.api; ++ ++import org.bukkit.Location; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++ ++import java.util.Collection; ++ ++/** ++ * A mirror of folia's ThreadedRegionizer ++ */ ++public interface ThreadedRegionizer { ++ /** ++ * Get all the tick regions ++ * @return Temporary copied collection of all tick regions ++ */ ++ Collection getAllRegions(); ++ ++ /** ++ * Get the tick region at the given chunk coordinates ++ * @param chunkX Chunk X ++ * @param chunkZ Chunk Z ++ * @return The tick region at the given chunk coordinates ++ */ ++ @Nullable ++ ThreadedRegion getAtSynchronized(int chunkX, int chunkZ); ++ ++ /** ++ * Get the tick region at the given chunk coordinates ++ * @param chunkX Chunk X ++ * @param chunkZ Chunk Z ++ * @return The tick region at the given chunk coordinates ++ */ ++ @Nullable ++ ThreadedRegion getAtUnSynchronized(int chunkX, int chunkZ); ++ ++ /** ++ * Get the tick region at the given location ++ * @param pos The location ++ * @return The tick region at the given location ++ */ ++ @Nullable ++ default ThreadedRegion getAtSynchronized(@NotNull Location pos) { ++ return this.getAtSynchronized(pos.getBlockX() >> 4, pos.getBlockZ() >> 4); ++ } ++ ++ /** ++ * Get the tick region at the given location ++ * @param pos The location ++ * @return The tick region at the given location ++ */ ++ @Nullable ++ default ThreadedRegion getAtUnSynchronized(@NotNull Location pos) { ++ return this.getAtUnSynchronized(pos.getBlockX() >> 4, pos.getBlockZ() >> 4); ++ } ++} +diff --git a/src/main/java/me/earthme/luminol/api/TickRegionData.java b/src/main/java/me/earthme/luminol/api/TickRegionData.java +new file mode 100644 +index 0000000000000000000000000000000000000000..ecde4462b08d701b8bff9f26902f17754cf791dd +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/api/TickRegionData.java +@@ -0,0 +1,26 @@ ++package me.earthme.luminol.api; ++ ++import org.bukkit.World; ++ ++/** ++ * A mirror of folia's tick region data ++ */ ++public interface TickRegionData { ++ /** ++ * Get the world it's currently holding ++ * @return the world ++ */ ++ World getWorld(); ++ ++ /** ++ * Get the current tick count ++ * @return the current tick count ++ */ ++ long getCurrentTickCount(); ++ ++ /** ++ * Get the region stats ++ * @return the region stats ++ */ ++ RegionStats getRegionStats(); ++} +diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java +index a8b64f78bf3c453094074b4b4d3c8fd07b9eb273..7927012c1afe5289d22879353a88a4574da91e01 100644 +--- a/src/main/java/org/bukkit/World.java ++++ b/src/main/java/org/bukkit/World.java +@@ -4444,4 +4444,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient + } + } + } ++ ++ // Luminol start - Tick regions api ++ me.earthme.luminol.api.ThreadedRegionizer getThreadedRegionizer(); ++ // Luminol end - Tick regions api + } diff --git a/luminol-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch b/luminol-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch index 6c8b9ba..939ef4d 100644 --- a/luminol-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch +++ b/luminol-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -212,6 +_,8 @@ +@@ -171,6 +_,8 @@ this.paperConfigurations.initializeGlobalConfiguration(this.registryAccess()); this.paperConfigurations.initializeWorldDefaultsConfiguration(this.registryAccess()); // Paper end - initialize global and world-defaults configuration diff --git a/luminol-server/paper-patches/features/0001-Rebrand-to-Luminol.patch b/luminol-server/paper-patches/features/0001-Rebrand-to-Luminol.patch index 66dc452..71052fe 100644 --- a/luminol-server/paper-patches/features/0001-Rebrand-to-Luminol.patch +++ b/luminol-server/paper-patches/features/0001-Rebrand-to-Luminol.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Rebrand to Luminol diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index f5ff71e31516327be71924926938f1c9f0e503df..338e61f5cfa0c556245228462df45954ac52bc4f 100644 +index 90a5178b5025378197b69514d782de5d6090cb6b..22c038e6556d9911e1eaedf71d7b86843af89c16 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java -@@ -592,7 +592,7 @@ public class Metrics { +@@ -593,7 +593,7 @@ public class Metrics { boolean logFailedRequests = config.getBoolean("logFailedRequests", false); // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { @@ -17,7 +17,7 @@ index f5ff71e31516327be71924926938f1c9f0e503df..338e61f5cfa0c556245228462df45954 metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); -@@ -606,11 +606,11 @@ public class Metrics { +@@ -607,11 +607,11 @@ public class Metrics { final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); if (implVersion != null) { final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); @@ -32,7 +32,7 @@ index f5ff71e31516327be71924926938f1c9f0e503df..338e61f5cfa0c556245228462df45954 metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 29bd788ae8bc61c1e62a4f84b9e259931a7041ce..1676ac5e6c8369836bf719f338603fbbc3105b1e 100644 +index 1783f9ea48154dcc8971fc5ef088f5a8c0f0b2ff..22125dbe1765f930fe10fe420be1c275ec553139 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java @@ -35,7 +35,7 @@ public class PaperVersionFetcher implements VersionFetcher {