diff --git a/patches/server/0016-Try-fixing-folia-off-region-POI-accessing-issue.patch b/patches/server/0016-Try-fixing-folia-off-region-POI-accessing-issue.patch new file mode 100644 index 0000000..1045b86 --- /dev/null +++ b/patches/server/0016-Try-fixing-folia-off-region-POI-accessing-issue.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrHua269 +Date: Mon, 10 Jun 2024 10:51:08 +0000 +Subject: [PATCH] Try fixing folia off region POI accessing issue + + +diff --git a/src/main/java/me/earthme/luminol/config/modules/fixes/FoliaPOIAccessOffRegionFixConfig.java b/src/main/java/me/earthme/luminol/config/modules/fixes/FoliaPOIAccessOffRegionFixConfig.java +new file mode 100644 +index 0000000000000000000000000000000000000000..343c85ded7e7abc22fac0aaeb7be786e9bd7b39a +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/config/modules/fixes/FoliaPOIAccessOffRegionFixConfig.java +@@ -0,0 +1,20 @@ ++package me.earthme.luminol.config.modules.fixes; ++ ++import me.earthme.luminol.config.ConfigInfo; ++import me.earthme.luminol.config.EnumConfigCategory; ++import me.earthme.luminol.config.IConfigModule; ++ ++public class FoliaPOIAccessOffRegionFixConfig implements IConfigModule { ++ @ConfigInfo(baseName = "enabled") ++ public static boolean enabled = false; ++ ++ @Override ++ public EnumConfigCategory getCategory() { ++ return EnumConfigCategory.FIXES; ++ } ++ ++ @Override ++ public String getBaseName() { ++ return "folia.fix_poi_access_off_region"; ++ } ++} +diff --git a/src/main/java/net/minecraft/world/entity/ai/village/poi/PoiManager.java b/src/main/java/net/minecraft/world/entity/ai/village/poi/PoiManager.java +index cf69b4ed4a40015a23d053230c3f326a700788ef..5fdcad0038aad61d68cd329e72c8db309c5e3926 100644 +--- a/src/main/java/net/minecraft/world/entity/ai/village/poi/PoiManager.java ++++ b/src/main/java/net/minecraft/world/entity/ai/village/poi/PoiManager.java +@@ -96,7 +96,7 @@ public class PoiManager extends SectionStorage { + + public Stream getInSquare(Predicate> typePredicate, BlockPos pos, int radius, PoiManager.Occupancy occupationStatus) { + int i = Math.floorDiv(radius, 16) + 1; +- return ChunkPos.rangeClosed(new ChunkPos(pos), i).flatMap(chunkPos -> this.getInChunk(typePredicate, chunkPos, occupationStatus)).filter(poi -> { ++ return ChunkPos.rangeClosed(new ChunkPos(pos), i).filter(cpos -> me.earthme.luminol.config.modules.fixes.FoliaPOIAccessOffRegionFixConfig.enabled ? io.papermc.paper.util.TickThread.isTickThreadFor(this.world,cpos) : true).flatMap(chunkPos -> this.getInChunk(typePredicate, chunkPos, occupationStatus)).filter(poi -> { //Luminol - Fix off region POI access + BlockPos blockPos2 = poi.getPos(); + return Math.abs(blockPos2.getX() - pos.getX()) <= radius && Math.abs(blockPos2.getZ() - pos.getZ()) <= radius; + }); diff --git a/patches/server/0016-Prevent-teleportAsync-calling-during-moving-event-be.patch b/patches/server/0017-Prevent-teleportAsync-calling-during-moving-event-be.patch similarity index 97% rename from patches/server/0016-Prevent-teleportAsync-calling-during-moving-event-be.patch rename to patches/server/0017-Prevent-teleportAsync-calling-during-moving-event-be.patch index fb04cb7..26feb75 100644 --- a/patches/server/0016-Prevent-teleportAsync-calling-during-moving-event-be.patch +++ b/patches/server/0017-Prevent-teleportAsync-calling-during-moving-event-be.patch @@ -33,7 +33,7 @@ index 0000000000000000000000000000000000000000..b8aceab54bb60000e7c5681014027102 + } +} diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 90f4cc0bd3722400411e6b1aa2d03205a350ee8a..f87c7a77b8d5748c08488470bf60ea84ab95a819 100644 +index 20f8c9bfdde62f1572e22319ebb752d12d9d5bac..24f4370b35d2cc50340de36d81b6c6d9aa250e4c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -347,6 +347,10 @@ public class ServerPlayer extends Player { @@ -48,7 +48,7 @@ index 90f4cc0bd3722400411e6b1aa2d03205a350ee8a..f87c7a77b8d5748c08488470bf60ea84 super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); this.chatVisibility = ChatVisiblity.FULL; diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 2c65527fa7bc2fce769e15f35a45ebae381c6bac..c13e3da32415607b3f0f88b6c34630a28af75128 100644 +index b4c4e72ddd09231747f82962a9d2883c6415ce30..bd666d03324291ec847136bab905f0aec726a211 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -695,7 +695,9 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl diff --git a/patches/server/0017-Kaiiju-Don-t-pathfind-outside-region.patch b/patches/server/0018-Kaiiju-Don-t-pathfind-outside-region.patch similarity index 100% rename from patches/server/0017-Kaiiju-Don-t-pathfind-outside-region.patch rename to patches/server/0018-Kaiiju-Don-t-pathfind-outside-region.patch diff --git a/patches/server/0018-Kaiiju-Vanilla-end-portal-teleportation.patch b/patches/server/0019-Kaiiju-Vanilla-end-portal-teleportation.patch similarity index 100% rename from patches/server/0018-Kaiiju-Vanilla-end-portal-teleportation.patch rename to patches/server/0019-Kaiiju-Vanilla-end-portal-teleportation.patch diff --git a/patches/server/0019-Petal-Reduce-sensor-work.patch b/patches/server/0020-Petal-Reduce-sensor-work.patch similarity index 100% rename from patches/server/0019-Petal-Reduce-sensor-work.patch rename to patches/server/0020-Petal-Reduce-sensor-work.patch diff --git a/patches/server/0020-Pufferfish-Optimize-entity-coordinate-key.patch b/patches/server/0021-Pufferfish-Optimize-entity-coordinate-key.patch similarity index 90% rename from patches/server/0020-Pufferfish-Optimize-entity-coordinate-key.patch rename to patches/server/0021-Pufferfish-Optimize-entity-coordinate-key.patch index 2217f79..d6dbf83 100644 --- a/patches/server/0020-Pufferfish-Optimize-entity-coordinate-key.patch +++ b/patches/server/0021-Pufferfish-Optimize-entity-coordinate-key.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Pufferfish Optimize entity coordinate key diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java -index 08d282400644be5949f28eb879b333cc221da2cc..49ccb27a17bec1d4ff31bc8d72e4724d65adc20c 100644 +index bb915f30997059f22c9002b1ddc1c3aecbf4e979..2034c67f5702b7b8d093ef2dd7601901c5fef363 100644 --- a/src/main/java/io/papermc/paper/util/MCUtil.java +++ b/src/main/java/io/papermc/paper/util/MCUtil.java @@ -215,7 +215,7 @@ public final class MCUtil { diff --git a/patches/server/0021-Pufferfish-Cache-climbing-check-for-activation.patch b/patches/server/0022-Pufferfish-Cache-climbing-check-for-activation.patch similarity index 100% rename from patches/server/0021-Pufferfish-Cache-climbing-check-for-activation.patch rename to patches/server/0022-Pufferfish-Cache-climbing-check-for-activation.patch diff --git a/patches/server/0022-Pufferfish-Improve-fluid-direction-caching.patch b/patches/server/0023-Pufferfish-Improve-fluid-direction-caching.patch similarity index 98% rename from patches/server/0022-Pufferfish-Improve-fluid-direction-caching.patch rename to patches/server/0023-Pufferfish-Improve-fluid-direction-caching.patch index dc57e9e..b15db66 100644 --- a/patches/server/0022-Pufferfish-Improve-fluid-direction-caching.patch +++ b/patches/server/0023-Pufferfish-Improve-fluid-direction-caching.patch @@ -147,7 +147,7 @@ index 0000000000000000000000000000000000000000..aa8467b9dda1f7707e41f50ac7b3e9d7 + } +} diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index 6d8ff6c06af5545634f255ed17dc1e489ece2548..6411aa4ff6bd4cabb25c426fa8f4a7eedb969c03 100644 +index c2943d892b067b3f1fb3b93301a092e912d71f08..58296b67f80587af485b0068e461cfd3d8d6f96f 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java @@ -45,6 +45,8 @@ public abstract class FlowingFluid extends Fluid { diff --git a/patches/server/0023-Pufferfish-Optimize-suffocation.patch b/patches/server/0024-Pufferfish-Optimize-suffocation.patch similarity index 100% rename from patches/server/0023-Pufferfish-Optimize-suffocation.patch rename to patches/server/0024-Pufferfish-Optimize-suffocation.patch diff --git a/patches/server/0024-Pufferfish-Early-return-optimization-for-target-find.patch b/patches/server/0025-Pufferfish-Early-return-optimization-for-target-find.patch similarity index 100% rename from patches/server/0024-Pufferfish-Early-return-optimization-for-target-find.patch rename to patches/server/0025-Pufferfish-Early-return-optimization-for-target-find.patch diff --git a/patches/server/0025-Pufferfish-Reduce-chunk-loading-lookups.patch b/patches/server/0026-Pufferfish-Reduce-chunk-loading-lookups.patch similarity index 100% rename from patches/server/0025-Pufferfish-Reduce-chunk-loading-lookups.patch rename to patches/server/0026-Pufferfish-Reduce-chunk-loading-lookups.patch diff --git a/patches/server/0026-Pufferfish-Fix-Paper-6045-block-goal-shouldn-t-load-.patch b/patches/server/0027-Pufferfish-Fix-Paper-6045-block-goal-shouldn-t-load-.patch similarity index 100% rename from patches/server/0026-Pufferfish-Fix-Paper-6045-block-goal-shouldn-t-load-.patch rename to patches/server/0027-Pufferfish-Fix-Paper-6045-block-goal-shouldn-t-load-.patch diff --git a/patches/server/0027-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch b/patches/server/0028-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch similarity index 100% rename from patches/server/0027-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch rename to patches/server/0028-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch diff --git a/patches/server/0028-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch b/patches/server/0029-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch similarity index 100% rename from patches/server/0028-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch rename to patches/server/0029-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch diff --git a/patches/server/0029-Pufferfish-Entity-TTL.patch b/patches/server/0030-Pufferfish-Entity-TTL.patch similarity index 100% rename from patches/server/0029-Pufferfish-Entity-TTL.patch rename to patches/server/0030-Pufferfish-Entity-TTL.patch diff --git a/patches/server/0030-Pufferfish-Reduce-projectile-chunk-loading.patch b/patches/server/0031-Pufferfish-Reduce-projectile-chunk-loading.patch similarity index 100% rename from patches/server/0030-Pufferfish-Reduce-projectile-chunk-loading.patch rename to patches/server/0031-Pufferfish-Reduce-projectile-chunk-loading.patch diff --git a/patches/server/0031-Pufferfish-Dynamic-Activation-of-Brain.patch b/patches/server/0032-Pufferfish-Dynamic-Activation-of-Brain.patch similarity index 100% rename from patches/server/0031-Pufferfish-Dynamic-Activation-of-Brain.patch rename to patches/server/0032-Pufferfish-Dynamic-Activation-of-Brain.patch diff --git a/patches/server/0032-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch b/patches/server/0033-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch similarity index 100% rename from patches/server/0032-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch rename to patches/server/0033-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch diff --git a/patches/server/0033-Pufferfish-Reduce-entity-allocations.patch b/patches/server/0034-Pufferfish-Reduce-entity-allocations.patch similarity index 100% rename from patches/server/0033-Pufferfish-Reduce-entity-allocations.patch rename to patches/server/0034-Pufferfish-Reduce-entity-allocations.patch diff --git a/patches/server/0034-Pufferfish-Improve-container-checking-with-a-bitset.patch b/patches/server/0035-Pufferfish-Improve-container-checking-with-a-bitset.patch similarity index 99% rename from patches/server/0034-Pufferfish-Improve-container-checking-with-a-bitset.patch rename to patches/server/0035-Pufferfish-Improve-container-checking-with-a-bitset.patch index bddab08..e988c15 100644 --- a/patches/server/0034-Pufferfish-Improve-container-checking-with-a-bitset.patch +++ b/patches/server/0035-Pufferfish-Improve-container-checking-with-a-bitset.patch @@ -387,7 +387,7 @@ index b88aa184cd06a0485146f58a5b61a56a50911209..7b64c57795fe27d8397500bfa41f71f9 @Override diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index f24a50b39393e5cdbb3b995d4a90faea142068f8..c2b40b0676a557c789ff3ce0ac1cb07345dee4b9 100644 +index 1280c358748bbb08f0361acd4ebc095bf6bc3496..957c217653a664bab26db476724d288b18d87102 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java @@ -47,7 +47,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen diff --git a/patches/server/0035-Gale-Variable-entity-wake-up-duration.patch b/patches/server/0036-Gale-Variable-entity-wake-up-duration.patch similarity index 100% rename from patches/server/0035-Gale-Variable-entity-wake-up-duration.patch rename to patches/server/0036-Gale-Variable-entity-wake-up-duration.patch diff --git a/patches/server/0036-Gale-Don-t-load-chunks-to-activate-climbing-entities.patch b/patches/server/0037-Gale-Don-t-load-chunks-to-activate-climbing-entities.patch similarity index 100% rename from patches/server/0036-Gale-Don-t-load-chunks-to-activate-climbing-entities.patch rename to patches/server/0037-Gale-Don-t-load-chunks-to-activate-climbing-entities.patch diff --git a/patches/server/0037-Gale-Optimize-sun-burn-tick.patch b/patches/server/0038-Gale-Optimize-sun-burn-tick.patch similarity index 100% rename from patches/server/0037-Gale-Optimize-sun-burn-tick.patch rename to patches/server/0038-Gale-Optimize-sun-burn-tick.patch diff --git a/patches/server/0038-Gale-Check-frozen-ticks-before-landing-block.patch b/patches/server/0039-Gale-Check-frozen-ticks-before-landing-block.patch similarity index 100% rename from patches/server/0038-Gale-Check-frozen-ticks-before-landing-block.patch rename to patches/server/0039-Gale-Check-frozen-ticks-before-landing-block.patch diff --git a/patches/server/0039-Gale-Don-t-trigger-lootable-refresh-for-non-player-i.patch b/patches/server/0040-Gale-Don-t-trigger-lootable-refresh-for-non-player-i.patch similarity index 100% rename from patches/server/0039-Gale-Don-t-trigger-lootable-refresh-for-non-player-i.patch rename to patches/server/0040-Gale-Don-t-trigger-lootable-refresh-for-non-player-i.patch diff --git a/patches/server/0040-Gale-Use-platform-math-functions.patch b/patches/server/0041-Gale-Use-platform-math-functions.patch similarity index 100% rename from patches/server/0040-Gale-Use-platform-math-functions.patch rename to patches/server/0041-Gale-Use-platform-math-functions.patch diff --git a/patches/server/0041-Gale-Skip-entity-move-if-movement-is-zero.patch b/patches/server/0042-Gale-Skip-entity-move-if-movement-is-zero.patch similarity index 100% rename from patches/server/0041-Gale-Skip-entity-move-if-movement-is-zero.patch rename to patches/server/0042-Gale-Skip-entity-move-if-movement-is-zero.patch diff --git a/patches/server/0042-Gale-Optimize-world-generation-chunk-and-block-acces.patch b/patches/server/0043-Gale-Optimize-world-generation-chunk-and-block-acces.patch similarity index 100% rename from patches/server/0042-Gale-Optimize-world-generation-chunk-and-block-acces.patch rename to patches/server/0043-Gale-Optimize-world-generation-chunk-and-block-acces.patch diff --git a/patches/server/0043-Gale-Optimize-noise-generation.patch b/patches/server/0044-Gale-Optimize-noise-generation.patch similarity index 100% rename from patches/server/0043-Gale-Optimize-noise-generation.patch rename to patches/server/0044-Gale-Optimize-noise-generation.patch diff --git a/patches/server/0044-Gale-Faster-chunk-serialization.patch b/patches/server/0045-Gale-Faster-chunk-serialization.patch similarity index 99% rename from patches/server/0044-Gale-Faster-chunk-serialization.patch rename to patches/server/0045-Gale-Faster-chunk-serialization.patch index 9660661..bd4c2af 100644 --- a/patches/server/0044-Gale-Faster-chunk-serialization.patch +++ b/patches/server/0045-Gale-Faster-chunk-serialization.patch @@ -286,7 +286,7 @@ index acae3eb30e0689048937f479dc3070f0688abdad..4b79f0474a9013dd4fdb68c6363ca194 int onResize(int newBits, T object); } diff --git a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java -index adfbdca12fbdee2602feb0158674166d5256e49e..9990e60f61d678e20cfffe22848eb5cc7c554b8a 100644 +index 81368bf186365878db2e1ed305bb7bf36c26f61f..ee7ce575a80b47da752f1cc722b7f4dc3b1b1314 100644 --- a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java +++ b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java @@ -25,6 +25,22 @@ import net.minecraft.util.ThreadingDetector; diff --git a/patches/server/0045-Gale-Reduce-lambda-and-Optional-allocation-in-Entity.patch b/patches/server/0046-Gale-Reduce-lambda-and-Optional-allocation-in-Entity.patch similarity index 100% rename from patches/server/0045-Gale-Reduce-lambda-and-Optional-allocation-in-Entity.patch rename to patches/server/0046-Gale-Reduce-lambda-and-Optional-allocation-in-Entity.patch diff --git a/patches/server/0046-Gale-Replace-throttle-tracker-map-with-optimized-col.patch b/patches/server/0047-Gale-Replace-throttle-tracker-map-with-optimized-col.patch similarity index 100% rename from patches/server/0046-Gale-Replace-throttle-tracker-map-with-optimized-col.patch rename to patches/server/0047-Gale-Replace-throttle-tracker-map-with-optimized-col.patch diff --git a/patches/server/0047-Sparkly-Paper-Optimize-canSee-checks.patch b/patches/server/0048-Sparkly-Paper-Optimize-canSee-checks.patch similarity index 100% rename from patches/server/0047-Sparkly-Paper-Optimize-canSee-checks.patch rename to patches/server/0048-Sparkly-Paper-Optimize-canSee-checks.patch diff --git a/patches/server/0048-Threaded-region-start-tick-and-finished-tick-event.patch b/patches/server/0049-Threaded-region-start-tick-and-finished-tick-event.patch similarity index 100% rename from patches/server/0048-Threaded-region-start-tick-and-finished-tick-event.patch rename to patches/server/0049-Threaded-region-start-tick-and-finished-tick-event.patch diff --git a/patches/server/0049-Purpur-use-alternative-keep-alive.patch b/patches/server/0050-Purpur-use-alternative-keep-alive.patch similarity index 100% rename from patches/server/0049-Purpur-use-alternative-keep-alive.patch rename to patches/server/0050-Purpur-use-alternative-keep-alive.patch diff --git a/patches/server/0050-Fix-MC-2025.patch b/patches/server/0051-Fix-MC-2025.patch similarity index 100% rename from patches/server/0050-Fix-MC-2025.patch rename to patches/server/0051-Fix-MC-2025.patch diff --git a/patches/server/0051-KioCG-Chunk-API.patch b/patches/server/0052-KioCG-Chunk-API.patch similarity index 100% rename from patches/server/0051-KioCG-Chunk-API.patch rename to patches/server/0052-KioCG-Chunk-API.patch diff --git a/patches/server/0052-Added-chunkhot-to-tpsbar.patch b/patches/server/0053-Added-chunkhot-to-tpsbar.patch similarity index 100% rename from patches/server/0052-Added-chunkhot-to-tpsbar.patch rename to patches/server/0053-Added-chunkhot-to-tpsbar.patch diff --git a/patches/server/0054-Ram-bar.patch b/patches/server/0054-Ram-bar.patch new file mode 100644 index 0000000..7f3f664 --- /dev/null +++ b/patches/server/0054-Ram-bar.patch @@ -0,0 +1,267 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrHua269 +Date: Sun, 2 Jun 2024 12:18:05 +0000 +Subject: [PATCH] Ram bar + + +diff --git a/src/main/java/me/earthme/luminol/config/modules/misc/MembarConfig.java b/src/main/java/me/earthme/luminol/config/modules/misc/MembarConfig.java +new file mode 100644 +index 0000000000000000000000000000000000000000..b177d6b0b01af233f7b10200748bc791a912ddb0 +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/config/modules/misc/MembarConfig.java +@@ -0,0 +1,39 @@ ++package me.earthme.luminol.config.modules.misc; ++ ++import com.electronwill.nightconfig.core.file.CommentedFileConfig; ++import me.earthme.luminol.config.ConfigInfo; ++import me.earthme.luminol.config.EnumConfigCategory; ++import me.earthme.luminol.config.IConfigModule; ++import me.earthme.luminol.functions.GlobalServerMemoryBar; ++ ++import java.util.List; ++ ++public class MembarConfig implements IConfigModule { ++ @ConfigInfo(baseName = "enabled") ++ public static boolean memoryBarEnabled = false; ++ @ConfigInfo(baseName = "format") ++ public static String memBarFormat = "Memory usage : MB/MB"; ++ @ConfigInfo(baseName = "memory_color_list") ++ public static List memColors = List.of("GREEN","YELLOW","RED","PURPLE"); ++ @ConfigInfo(baseName = "update_interval_ticks") ++ public static int updateInterval = 15; ++ ++ @Override ++ public EnumConfigCategory getCategory() { ++ return EnumConfigCategory.MISC; ++ } ++ ++ @Override ++ public String getBaseName() { ++ return "membar"; ++ } ++ ++ @Override ++ public void onLoaded(CommentedFileConfig configInstance){ ++ if (memoryBarEnabled){ ++ GlobalServerMemoryBar.init(); ++ }else{ ++ GlobalServerMemoryBar.cancelBarUpdateTask(); ++ } ++ } ++} +diff --git a/src/main/java/me/earthme/luminol/functions/GlobalServerMemoryBar.java b/src/main/java/me/earthme/luminol/functions/GlobalServerMemoryBar.java +new file mode 100644 +index 0000000000000000000000000000000000000000..fdd57d5825aced511a65ee056a773c1fbe4f12bd +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/functions/GlobalServerMemoryBar.java +@@ -0,0 +1,186 @@ ++package me.earthme.luminol.functions; ++ ++import io.papermc.paper.threadedregions.ThreadedRegionizer; ++import io.papermc.paper.threadedregions.TickRegions; ++import io.papermc.paper.threadedregions.scheduler.ScheduledTask; ++import me.earthme.luminol.config.modules.misc.MembarConfig; ++import net.kyori.adventure.bossbar.BossBar; ++import net.kyori.adventure.text.Component; ++import net.kyori.adventure.text.minimessage.MiniMessage; ++import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; ++import net.minecraft.server.level.ServerLevel; ++import net.minecraft.server.level.ServerPlayer; ++import org.apache.logging.log4j.LogManager; ++import org.apache.logging.log4j.Logger; ++import org.bukkit.Bukkit; ++import org.bukkit.craftbukkit.entity.CraftPlayer; ++import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin; ++import org.bukkit.entity.Player; ++import org.jetbrains.annotations.NotNull; ++ ++import java.lang.management.ManagementFactory; ++import java.lang.management.MemoryUsage; ++import java.util.*; ++ ++public class GlobalServerMemoryBar { ++ protected static final MinecraftInternalPlugin NULL_PLUGIN = new MinecraftInternalPlugin(); ++ protected static final Map uuid2Bossbars = new HashMap<>(); ++ protected static volatile ScheduledTask tpsbarTask = null; ++ private static final Logger logger = LogManager.getLogger(); ++ ++ public static void init(){ ++ cancelBarUpdateTask(); ++ ++ Bukkit.getGlobalRegionScheduler().runAtFixedRate(NULL_PLUGIN, c -> { ++ tpsbarTask = c; ++ try { ++ update(); ++ }catch (Exception e){ ++ logger.error(e); ++ } ++ },1, MembarConfig.updateInterval); ++ } ++ ++ public static void removeAllBars(){ ++ for (Map.Entry barEntry : uuid2Bossbars.entrySet()){ ++ final UUID playerUUID = barEntry.getKey(); ++ final BossBar tpsBar = barEntry.getValue(); ++ ++ final Player targetPlayer = Bukkit.getPlayer(playerUUID);{ ++ if (targetPlayer != null){ ++ targetPlayer.hideBossBar(tpsBar); ++ } ++ } ++ } ++ ++ uuid2Bossbars.clear(); ++ } ++ ++ public static void cancelBarUpdateTask(){ ++ removeAllBars(); ++ ++ if (tpsbarTask == null || tpsbarTask.isCancelled()){ ++ return; ++ } ++ ++ tpsbarTask.cancel(); ++ } ++ ++ public static boolean isPlayerVisible(Player player){ ++ return ((CraftPlayer) player).getHandle().isMemBarVisible; ++ } ++ ++ public static void setVisibilityForPlayer(Player target,boolean canSee){ ++ ((CraftPlayer) target).getHandle().isMemBarVisible = canSee; ++ } ++ ++ private static void update(){ ++ updateBarValues(); ++ cleanUpPlayers(); ++ } ++ ++ private static void cleanUpPlayers(){ ++ final List toRemove = new ArrayList<>(); ++ ++ for (Map.Entry bossBarEntry : uuid2Bossbars.entrySet()){ ++ final UUID uuid = bossBarEntry.getKey(); ++ boolean shouldRemove = true; ++ ++ final Player target = Bukkit.getPlayer(uuid); ++ if (target != null){ ++ shouldRemove = !isPlayerVisible(target); ++ } ++ ++ if (shouldRemove){ ++ toRemove.add(uuid); ++ } ++ } ++ ++ for (UUID uuid : toRemove){ ++ final BossBar removed = uuid2Bossbars.remove(uuid); ++ if (removed != null){ ++ final Player targetPlayer = Bukkit.getPlayer(uuid); ++ if (targetPlayer != null){ ++ targetPlayer.hideBossBar(removed); ++ } ++ } ++ } ++ } ++ ++ private static void updateBarValues(){ ++ MemoryUsage heap = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); ++ ++ long used = heap.getUsed(); ++ long xmx = heap.getMax(); ++ ++ ++ ++ for (Player apiPlayer : Bukkit.getOnlinePlayers()){ ++ final ServerPlayer nmsPlayer = ((CraftPlayer) apiPlayer).getHandle(); ++ final ThreadedRegionizer.ThreadedRegion region = ((ServerLevel) nmsPlayer.level()).regioniser.getRegionAtUnsynchronised(nmsPlayer.sectionX,nmsPlayer.sectionZ); ++ ++ if (region == null){ ++ continue; ++ } ++ ++ BossBar targetBossbar = uuid2Bossbars.get(nmsPlayer.getUUID()); ++ ++ if (targetBossbar == null && isPlayerVisible(apiPlayer)){ ++ targetBossbar = BossBar.bossBar(Component.text(""),0.0F, BossBar.Color.valueOf(MembarConfig.memColors.get(3)), BossBar.Overlay.NOTCHED_20); ++ uuid2Bossbars.put(nmsPlayer.getUUID(),targetBossbar); ++ apiPlayer.showBossBar(targetBossbar); ++ } ++ ++ if (targetBossbar != null){ ++ updateTpsBar(targetBossbar,used,xmx); ++ } ++ } ++ } ++ ++ private static void updateTpsBar(@NotNull BossBar bar,long used,long xmx){ ++ double percent = Math.max(Math.min((float) used / xmx, 1.0F), 0.0F); ++ bar.name(MiniMessage.miniMessage().deserialize( ++ MembarConfig.memBarFormat, ++ Placeholder.component("used", getMemoryComponent(used,xmx)), ++ Placeholder.component("available",getMaxMemComponent(xmx)) ++ )); ++ bar.color(barColorFromMemory(percent)); ++ bar.progress((float) percent); ++ } ++ ++ private static @NotNull Component getMaxMemComponent(double max){ ++ final BossBar.Color colorBukkit = BossBar.Color.GREEN; ++ final String colorString = colorBukkit.name(); ++ ++ final String content = "<%s>"; ++ final String replaced = String.format(content,colorString,colorString); ++ ++ return MiniMessage.miniMessage().deserialize(replaced,Placeholder.parsed("text", String.valueOf(max))); ++ } ++ ++ private static @NotNull Component getMemoryComponent(long used,long max){ ++ final BossBar.Color colorBukkit = barColorFromMemory(Math.max(Math.min((float) used / max, 1.0F), 0.0F)); ++ final String colorString = colorBukkit.name(); ++ ++ final String content = "<%s>"; ++ final String replaced = String.format(content,colorString,colorString); ++ ++ return MiniMessage.miniMessage().deserialize(replaced,Placeholder.parsed("text", String.valueOf(used / 1024 * 1024))); ++ } ++ ++ private static BossBar.Color barColorFromMemory(double memPercent){ ++ if (memPercent == -1){ ++ return BossBar.Color.valueOf(MembarConfig.memColors.get(3)); ++ } ++ ++ if (memPercent <= 50){ ++ return BossBar.Color.valueOf(MembarConfig.memColors.getFirst()); ++ } ++ ++ if (memPercent <= 70){ ++ return BossBar.Color.valueOf(MembarConfig.memColors.get(1)); ++ } ++ ++ return BossBar.Color.valueOf(MembarConfig.memColors.get(2)); ++ } ++} +diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +index 6f86f25efbd4e6e79476c1563dc8f4c114c10695..67f1205ec362bbb191b642641c45c7bcc53c7625 100644 +--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java ++++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +@@ -851,6 +851,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + @Override + public void stopServer() { + me.earthme.luminol.functions.GlobalServerTpsBar.cancelBarUpdateTask(); //Luminol - Tpsbar ++ me.earthme.luminol.functions.GlobalServerMemoryBar.cancelBarUpdateTask(); //Luminol - Memory bar + super.stopServer(); + //Util.shutdownExecutors(); // Paper - moved into super + SkullBlockEntity.clear(); +diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java +index c04058a95dc4990cd8034b381f95affcdc77dd93..71bc115203933f3992315caf4e10ec8dc44955ba 100644 +--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java ++++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +@@ -303,6 +303,7 @@ public class ServerPlayer extends Player { + private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); + public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; + public volatile boolean isTpsBarVisible = false; //Luminol - Tps bar ++ public volatile boolean isMemBarVisible = false; //Luminol - Memory bar + + public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances getViewDistances() { + return this.viewDistances.get();