From 5601fb53d11e520b55e88790e204d52b6472ac30 Mon Sep 17 00:00:00 2001 From: MrHua269 Date: Sat, 15 Jun 2024 13:12:55 +0000 Subject: [PATCH] Added a simple membar --- patches/server/0010-Add-a-simple-membar.patch | 331 ++++++++++++++++++ ... 0011-Add-config-for-username-check.patch} | 0 ...Add-config-for-offline-mode-warning.patch} | 2 +- ...config-for-out-of-order-chat-checks.patch} | 0 ...-a-simple-watchdog-for-tick-regions.patch} | 2 +- ...-fixing-folia-spector-teleportation.patch} | 4 +- ...-entity-was-moving-to-another-regio.patch} | 0 ...olia-off-region-POI-accessing-issue.patch} | 0 ...sync-calling-during-moving-event-be.patch} | 4 +- ...aiiju-Don-t-pathfind-outside-region.patch} | 0 ...ju-Vanilla-end-portal-teleportation.patch} | 0 ...ch => 0021-Petal-Reduce-sensor-work.patch} | 0 ...fish-Optimize-entity-coordinate-key.patch} | 0 ...Cache-climbing-check-for-activation.patch} | 0 ...ish-Improve-fluid-direction-caching.patch} | 0 ...025-Pufferfish-Optimize-suffocation.patch} | 0 ...return-optimization-for-target-find.patch} | 0 ...erfish-Reduce-chunk-loading-lookups.patch} | 0 ...per-6045-block-goal-shouldn-t-load-.patch} | 0 ...e-entity-fluid-lookups-if-no-fluids.patch} | 0 ...heck-for-spooky-season-once-an-hour.patch} | 0 ...patch => 0031-Pufferfish-Entity-TTL.patch} | 0 ...ish-Reduce-projectile-chunk-loading.patch} | 0 ...ferfish-Dynamic-Activation-of-Brain.patch} | 0 ...le-goal-selector-during-inactive-ti.patch} | 0 ...ufferfish-Reduce-entity-allocations.patch} | 0 ...ve-container-checking-with-a-bitset.patch} | 0 ...le-Variable-entity-wake-up-duration.patch} | 0 ...hunks-to-activate-climbing-entities.patch} | 0 ...=> 0039-Gale-Optimize-sun-burn-tick.patch} | 0 ...k-frozen-ticks-before-landing-block.patch} | 0 ...r-lootable-refresh-for-non-player-i.patch} | 0 ...42-Gale-Use-platform-math-functions.patch} | 0 ...kip-entity-move-if-movement-is-zero.patch} | 0 ...ld-generation-chunk-and-block-acces.patch} | 0 ...0045-Gale-Optimize-noise-generation.patch} | 0 ...046-Gale-Faster-chunk-serialization.patch} | 0 ...a-and-Optional-allocation-in-Entity.patch} | 0 ...-goal-set-with-optimized-collection.patch} | 0 ...ttributes-with-optimized-collection.patch} | 0 ...ttle-tracker-map-with-optimized-col.patch} | 0 ...parkly-Paper-Optimize-canSee-checks.patch} | 0 ...2-Purpur-use-alternative-keep-alive.patch} | 0 ...-start-tick-and-finished-tick-event.patch} | 0 ...patch => 0054-Leaves-Replay-Mod-API.patch} | 2 +- ...-172047.patch => 0055-Fix-MC-172047.patch} | 0 ...x-MC-2025.patch => 0056-Fix-MC-2025.patch} | 0 ...k-API.patch => 0057-KioCG-Chunk-API.patch} | 6 +- ...ch => 0058-Added-chunkhot-to-tpsbar.patch} | 0 49 files changed, 341 insertions(+), 10 deletions(-) create mode 100644 patches/server/0010-Add-a-simple-membar.patch rename patches/server/{0010-Add-config-for-username-check.patch => 0011-Add-config-for-username-check.patch} (100%) rename patches/server/{0011-Add-config-for-offline-mode-warning.patch => 0012-Add-config-for-offline-mode-warning.patch} (96%) rename patches/server/{0012-Add-config-for-out-of-order-chat-checks.patch => 0013-Add-config-for-out-of-order-chat-checks.patch} (100%) rename patches/server/{0013-Add-a-simple-watchdog-for-tick-regions.patch => 0014-Add-a-simple-watchdog-for-tick-regions.patch} (99%) rename patches/server/{0014-Try-fixing-folia-spector-teleportation.patch => 0015-Try-fixing-folia-spector-teleportation.patch} (93%) rename patches/server/{0015-Teleport-async-if-entity-was-moving-to-another-regio.patch => 0016-Teleport-async-if-entity-was-moving-to-another-regio.patch} (100%) rename patches/server/{0016-Try-fixing-folia-off-region-POI-accessing-issue.patch => 0017-Try-fixing-folia-off-region-POI-accessing-issue.patch} (100%) rename patches/server/{0017-Prevent-teleportAsync-calling-during-moving-event-be.patch => 0018-Prevent-teleportAsync-calling-during-moving-event-be.patch} (98%) rename patches/server/{0018-Kaiiju-Don-t-pathfind-outside-region.patch => 0019-Kaiiju-Don-t-pathfind-outside-region.patch} (100%) rename patches/server/{0019-Kaiiju-Vanilla-end-portal-teleportation.patch => 0020-Kaiiju-Vanilla-end-portal-teleportation.patch} (100%) rename patches/server/{0020-Petal-Reduce-sensor-work.patch => 0021-Petal-Reduce-sensor-work.patch} (100%) rename patches/server/{0021-Pufferfish-Optimize-entity-coordinate-key.patch => 0022-Pufferfish-Optimize-entity-coordinate-key.patch} (100%) rename patches/server/{0022-Pufferfish-Cache-climbing-check-for-activation.patch => 0023-Pufferfish-Cache-climbing-check-for-activation.patch} (100%) rename patches/server/{0023-Pufferfish-Improve-fluid-direction-caching.patch => 0024-Pufferfish-Improve-fluid-direction-caching.patch} (100%) rename patches/server/{0024-Pufferfish-Optimize-suffocation.patch => 0025-Pufferfish-Optimize-suffocation.patch} (100%) rename patches/server/{0025-Pufferfish-Early-return-optimization-for-target-find.patch => 0026-Pufferfish-Early-return-optimization-for-target-find.patch} (100%) rename patches/server/{0026-Pufferfish-Reduce-chunk-loading-lookups.patch => 0027-Pufferfish-Reduce-chunk-loading-lookups.patch} (100%) rename patches/server/{0027-Pufferfish-Fix-Paper-6045-block-goal-shouldn-t-load-.patch => 0028-Pufferfish-Fix-Paper-6045-block-goal-shouldn-t-load-.patch} (100%) rename patches/server/{0028-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch => 0029-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch} (100%) rename patches/server/{0029-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch => 0030-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch} (100%) rename patches/server/{0030-Pufferfish-Entity-TTL.patch => 0031-Pufferfish-Entity-TTL.patch} (100%) rename patches/server/{0031-Pufferfish-Reduce-projectile-chunk-loading.patch => 0032-Pufferfish-Reduce-projectile-chunk-loading.patch} (100%) rename patches/server/{0032-Pufferfish-Dynamic-Activation-of-Brain.patch => 0033-Pufferfish-Dynamic-Activation-of-Brain.patch} (100%) rename patches/server/{0033-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch => 0034-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch} (100%) rename patches/server/{0034-Pufferfish-Reduce-entity-allocations.patch => 0035-Pufferfish-Reduce-entity-allocations.patch} (100%) rename patches/server/{0035-Pufferfish-Improve-container-checking-with-a-bitset.patch => 0036-Pufferfish-Improve-container-checking-with-a-bitset.patch} (100%) rename patches/server/{0036-Gale-Variable-entity-wake-up-duration.patch => 0037-Gale-Variable-entity-wake-up-duration.patch} (100%) rename patches/server/{0037-Gale-Don-t-load-chunks-to-activate-climbing-entities.patch => 0038-Gale-Don-t-load-chunks-to-activate-climbing-entities.patch} (100%) rename patches/server/{0038-Gale-Optimize-sun-burn-tick.patch => 0039-Gale-Optimize-sun-burn-tick.patch} (100%) rename patches/server/{0039-Gale-Check-frozen-ticks-before-landing-block.patch => 0040-Gale-Check-frozen-ticks-before-landing-block.patch} (100%) rename patches/server/{0040-Gale-Don-t-trigger-lootable-refresh-for-non-player-i.patch => 0041-Gale-Don-t-trigger-lootable-refresh-for-non-player-i.patch} (100%) rename patches/server/{0041-Gale-Use-platform-math-functions.patch => 0042-Gale-Use-platform-math-functions.patch} (100%) rename patches/server/{0042-Gale-Skip-entity-move-if-movement-is-zero.patch => 0043-Gale-Skip-entity-move-if-movement-is-zero.patch} (100%) rename patches/server/{0043-Gale-Optimize-world-generation-chunk-and-block-acces.patch => 0044-Gale-Optimize-world-generation-chunk-and-block-acces.patch} (100%) rename patches/server/{0044-Gale-Optimize-noise-generation.patch => 0045-Gale-Optimize-noise-generation.patch} (100%) rename patches/server/{0045-Gale-Faster-chunk-serialization.patch => 0046-Gale-Faster-chunk-serialization.patch} (100%) rename patches/server/{0046-Gale-Reduce-lambda-and-Optional-allocation-in-Entity.patch => 0047-Gale-Reduce-lambda-and-Optional-allocation-in-Entity.patch} (100%) rename patches/server/{0047-Gale-Replace-AI-goal-set-with-optimized-collection.patch => 0048-Gale-Replace-AI-goal-set-with-optimized-collection.patch} (100%) rename patches/server/{0048-Gale-Replace-AI-attributes-with-optimized-collection.patch => 0049-Gale-Replace-AI-attributes-with-optimized-collection.patch} (100%) rename patches/server/{0049-Gale-Replace-throttle-tracker-map-with-optimized-col.patch => 0050-Gale-Replace-throttle-tracker-map-with-optimized-col.patch} (100%) rename patches/server/{0050-Sparkly-Paper-Optimize-canSee-checks.patch => 0051-Sparkly-Paper-Optimize-canSee-checks.patch} (100%) rename patches/server/{0051-Purpur-use-alternative-keep-alive.patch => 0052-Purpur-use-alternative-keep-alive.patch} (100%) rename patches/server/{0052-Threaded-region-start-tick-and-finished-tick-event.patch => 0053-Threaded-region-start-tick-and-finished-tick-event.patch} (100%) rename patches/server/{0053-Leaves-Replay-Mod-API.patch => 0054-Leaves-Replay-Mod-API.patch} (99%) rename patches/server/{0054-Fix-MC-172047.patch => 0055-Fix-MC-172047.patch} (100%) rename patches/server/{0055-Fix-MC-2025.patch => 0056-Fix-MC-2025.patch} (100%) rename patches/server/{0056-KioCG-Chunk-API.patch => 0057-KioCG-Chunk-API.patch} (98%) rename patches/server/{0057-Added-chunkhot-to-tpsbar.patch => 0058-Added-chunkhot-to-tpsbar.patch} (100%) diff --git a/patches/server/0010-Add-a-simple-membar.patch b/patches/server/0010-Add-a-simple-membar.patch new file mode 100644 index 0000000..354b5ee --- /dev/null +++ b/patches/server/0010-Add-a-simple-membar.patch @@ -0,0 +1,331 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrHua269 +Date: Sun, 2 Jun 2024 12:18:05 +0000 +Subject: [PATCH] Add a simple membar + + +diff --git a/src/main/java/me/earthme/luminol/commands/MembarCommand.java b/src/main/java/me/earthme/luminol/commands/MembarCommand.java +new file mode 100644 +index 0000000000000000000000000000000000000000..a5cbad6b947b1c3e1499bc6d311e17a5eb570c2f +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/commands/MembarCommand.java +@@ -0,0 +1,47 @@ ++package me.earthme.luminol.commands; ++ ++import me.earthme.luminol.config.modules.misc.MembarConfig; ++import me.earthme.luminol.functions.GlobalServerMemoryBar; ++import net.kyori.adventure.text.Component; ++import net.kyori.adventure.text.format.TextColor; ++import org.bukkit.command.Command; ++import org.bukkit.command.CommandSender; ++import org.bukkit.entity.Player; ++import org.jetbrains.annotations.NotNull; ++ ++public class MembarCommand extends Command { ++ public MembarCommand(@NotNull String name) { ++ super(name); ++ this.setPermission("luminol.commands.membar"); ++ this.setDescription("Show the memory usage through a bossbar"); ++ this.setUsage("/membar"); ++ } ++ ++ @Override ++ public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { ++ if (!testPermission(sender)){ ++ return true; ++ } ++ ++ if (!MembarConfig.memoryBarEnabled){ ++ sender.sendMessage(Component.text("Membar was already disabled!").color(TextColor.color(255,0,0))); ++ return true; ++ } ++ ++ if (!(sender instanceof Player player)){ ++ sender.sendMessage(Component.text("Only player can use this command!").color(TextColor.color(255,0,0))); ++ return true; ++ } ++ ++ if (GlobalServerMemoryBar.isPlayerVisible(player)) { ++ player.sendMessage(Component.text("Disabled mem bar").color(TextColor.color(0,255,0))); ++ GlobalServerMemoryBar.setVisibilityForPlayer(player,false); ++ return true; ++ } ++ ++ player.sendMessage(Component.text("Enabled mem bar").color(TextColor.color(0,255,0))); ++ GlobalServerMemoryBar.setVisibilityForPlayer(player,true); ++ ++ return true; ++ } ++} +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..b632c4a636974535bf001f010de1dcb6b25868c0 +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/config/modules/misc/MembarConfig.java +@@ -0,0 +1,50 @@ ++package me.earthme.luminol.config.modules.misc; ++ ++import com.electronwill.nightconfig.core.file.CommentedFileConfig; ++import me.earthme.luminol.commands.MembarCommand; ++import me.earthme.luminol.config.ConfigInfo; ++import me.earthme.luminol.config.DoNotLoad; ++import me.earthme.luminol.config.EnumConfigCategory; ++import me.earthme.luminol.config.IConfigModule; ++import me.earthme.luminol.functions.GlobalServerMemoryBar; ++import org.bukkit.Bukkit; ++ ++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; ++ ++ @DoNotLoad ++ private static boolean inited = false; ++ ++ @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(); ++ } ++ ++ if (!inited){ ++ Bukkit.getCommandMap().register("membar","luminol",new MembarCommand("membar")); ++ inited = true; ++ } ++ } ++} +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..a33a45194273cc1b4e4157a5449c7994968a3480 +--- /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 membarTask = null; ++ private static final Logger logger = LogManager.getLogger(); ++ ++ public static void init(){ ++ cancelBarUpdateTask(); ++ ++ Bukkit.getGlobalRegionScheduler().runAtFixedRate(NULL_PLUGIN, c -> { ++ membarTask = 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 memBar = barEntry.getValue(); ++ ++ final Player targetPlayer = Bukkit.getPlayer(playerUUID);{ ++ if (targetPlayer != null){ ++ targetPlayer.hideBossBar(memBar); ++ } ++ } ++ } ++ ++ uuid2Bossbars.clear(); ++ } ++ ++ public static void cancelBarUpdateTask(){ ++ removeAllBars(); ++ ++ if (membarTask == null || membarTask.isCancelled()){ ++ return; ++ } ++ ++ membarTask.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){ ++ updateMembar(targetBossbar,used,xmx); ++ } ++ } ++ } ++ ++ private static void updateMembar(@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.format("%.2f", (double)max / (1024 * 1024)))); ++ } ++ ++ 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.format("%.2f", (double)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 c626018d786fe231cd74a28c83515715d896f214..49647526d81e269aaf7a375992e3b42765ef5f8a 100644 +--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java ++++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +@@ -831,6 +831,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 c8701a2a0a3cbd60e263fe5c069b5993b36842a6..4e500aea07278535467ab6a9eba5b4269e1bd6ac 100644 +--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java ++++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +@@ -286,6 +286,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(); diff --git a/patches/server/0010-Add-config-for-username-check.patch b/patches/server/0011-Add-config-for-username-check.patch similarity index 100% rename from patches/server/0010-Add-config-for-username-check.patch rename to patches/server/0011-Add-config-for-username-check.patch diff --git a/patches/server/0011-Add-config-for-offline-mode-warning.patch b/patches/server/0012-Add-config-for-offline-mode-warning.patch similarity index 96% rename from patches/server/0011-Add-config-for-offline-mode-warning.patch rename to patches/server/0012-Add-config-for-offline-mode-warning.patch index 4247a54..706bcfe 100644 --- a/patches/server/0011-Add-config-for-offline-mode-warning.patch +++ b/patches/server/0012-Add-config-for-offline-mode-warning.patch @@ -31,7 +31,7 @@ index 0000000000000000000000000000000000000000..502b93c7bda9e8577a1901a8777b7cf9 + } +} diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index c626018d786fe231cd74a28c83515715d896f214..49555381641e9cf9a5c3f00db1e193c9d992637b 100644 +index 49647526d81e269aaf7a375992e3b42765ef5f8a..b0c67dd56f6916ebf12d27850da5a99f4ee86010 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -282,7 +282,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface diff --git a/patches/server/0012-Add-config-for-out-of-order-chat-checks.patch b/patches/server/0013-Add-config-for-out-of-order-chat-checks.patch similarity index 100% rename from patches/server/0012-Add-config-for-out-of-order-chat-checks.patch rename to patches/server/0013-Add-config-for-out-of-order-chat-checks.patch diff --git a/patches/server/0013-Add-a-simple-watchdog-for-tick-regions.patch b/patches/server/0014-Add-a-simple-watchdog-for-tick-regions.patch similarity index 99% rename from patches/server/0013-Add-a-simple-watchdog-for-tick-regions.patch rename to patches/server/0014-Add-a-simple-watchdog-for-tick-regions.patch index fbd8a7c..f579d5b 100644 --- a/patches/server/0013-Add-a-simple-watchdog-for-tick-regions.patch +++ b/patches/server/0014-Add-a-simple-watchdog-for-tick-regions.patch @@ -243,7 +243,7 @@ index 0000000000000000000000000000000000000000..6b4368cdf9762ad981345fef0f26cd00 +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0d756dd5181a2444175184227bef648d07c17236..59b1da130e519cbe06ed5eedf9e4dc881e45ba36 100644 +index cb3ae17634dfc753dec75c7e2385a4ccdcba40d3..08b0d3b970a7c86f577d20487d5fe3930b8eae6e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1222,6 +1222,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop !playerList.isOp(player.getGameProfile())) .map(player -> player.getGameProfile().getName()), diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0086a1a4611b983eefd0cb7bf8e9cff677246d0f..dcbf18eb7fb9a37fcd7faf3efe023d2503b4091a 100644 +index 922ce7627bd0d546802ec6b013056f7aa6acbf33..6357440e89ffddfc61de767e4a1bfdbbb9d854b3 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -197,7 +197,7 @@ public class ServerPlayer extends Player { diff --git a/patches/server/0054-Fix-MC-172047.patch b/patches/server/0055-Fix-MC-172047.patch similarity index 100% rename from patches/server/0054-Fix-MC-172047.patch rename to patches/server/0055-Fix-MC-172047.patch diff --git a/patches/server/0055-Fix-MC-2025.patch b/patches/server/0056-Fix-MC-2025.patch similarity index 100% rename from patches/server/0055-Fix-MC-2025.patch rename to patches/server/0056-Fix-MC-2025.patch diff --git a/patches/server/0056-KioCG-Chunk-API.patch b/patches/server/0057-KioCG-Chunk-API.patch similarity index 98% rename from patches/server/0056-KioCG-Chunk-API.patch rename to patches/server/0057-KioCG-Chunk-API.patch index 8eb59ec..afd48eb 100644 --- a/patches/server/0056-KioCG-Chunk-API.patch +++ b/patches/server/0057-KioCG-Chunk-API.patch @@ -182,10 +182,10 @@ index 3f394934e64df09e65b86d61a1dcabd3c6031a38..ba33c107cfbe9920fc33375daf8e6b62 } else { passenger.stopRiding(); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index dcbf18eb7fb9a37fcd7faf3efe023d2503b4091a..c40ec90543bf51c9b16a7b63d8339020e7333b90 100644 +index 6357440e89ffddfc61de767e4a1bfdbbb9d854b3..c25261e2c5313aedeae813b5f439a5b29a0ffcbb 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -334,6 +334,25 @@ public class ServerPlayer extends Player { +@@ -335,6 +335,25 @@ public class ServerPlayer extends Player { public boolean handlingMoveEvent = false; //Luminol end @@ -211,7 +211,7 @@ index dcbf18eb7fb9a37fcd7faf3efe023d2503b4091a..c40ec90543bf51c9b16a7b63d8339020 public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); this.chatVisibility = ChatVisiblity.FULL; -@@ -872,6 +891,12 @@ public class ServerPlayer extends Player { +@@ -873,6 +892,12 @@ public class ServerPlayer extends Player { this.trackStartFallingPosition(); this.trackEnteredOrExitedLavaOnVehicle(); this.advancements.flushDirty(this); diff --git a/patches/server/0057-Added-chunkhot-to-tpsbar.patch b/patches/server/0058-Added-chunkhot-to-tpsbar.patch similarity index 100% rename from patches/server/0057-Added-chunkhot-to-tpsbar.patch rename to patches/server/0058-Added-chunkhot-to-tpsbar.patch