diff --git a/patches/server/0011-Add-a-simple-tpsbar.patch b/patches/server/0011-Add-a-simple-tpsbar.patch index 893523f..1196dfb 100644 --- a/patches/server/0011-Add-a-simple-tpsbar.patch +++ b/patches/server/0011-Add-a-simple-tpsbar.patch @@ -6,14 +6,19 @@ Subject: [PATCH] Add a simple tpsbar diff --git a/src/main/java/me/earthme/luminol/commands/TpsBarCommand.java b/src/main/java/me/earthme/luminol/commands/TpsBarCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..ac8f0e3bf130ba6dfd7202e2f480352218154cdc +index 0000000000000000000000000000000000000000..01677f210fae53a108bfe194189cb4c233e9fa47 --- /dev/null +++ b/src/main/java/me/earthme/luminol/commands/TpsBarCommand.java -@@ -0,0 +1,40 @@ +@@ -0,0 +1,50 @@ +package me.earthme.luminol.commands; + ++import me.earthme.luminol.config.modules.misc.TpsBarConfig; +import me.earthme.luminol.functions.GlobalServerTpsBar; ++import net.kyori.adventure.text.Component; ++import net.kyori.adventure.text.format.TextColor; ++import net.kyori.adventure.util.RGBLike; +import org.bukkit.ChatColor; ++import org.bukkit.Color; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; @@ -33,18 +38,23 @@ index 0000000000000000000000000000000000000000..ac8f0e3bf130ba6dfd7202e2f4803522 + return true; + } + ++ if (!TpsBarConfig.tpsbarEnabled){ ++ sender.sendMessage(Component.text("Tpsbar was already disabled!").color(TextColor.color(255,0,0))); ++ return true; ++ } ++ + if (!(sender instanceof Player player)){ -+ sender.sendMessage(ChatColor.RED+"Only player can use this command!"); ++ sender.sendMessage(Component.text("Only player can use this command!").color(TextColor.color(255,0,0))); + return true; + } + + if (GlobalServerTpsBar.isPlayerVisible(player)) { -+ player.sendMessage(ChatColor.BLUE + "Disabled tps bar"); ++ player.sendMessage(Component.text("Disabled tps bar").color(TextColor.color(0,255,0))); + GlobalServerTpsBar.setVisibilityForPlayer(player,false); + return true; + } + -+ player.sendMessage(ChatColor.GREEN + "Enabled tps bar"); ++ player.sendMessage(Component.text("Enabled tps bar").color(TextColor.color(0,255,0))); + GlobalServerTpsBar.setVisibilityForPlayer(player,true); + + return true; @@ -52,18 +62,15 @@ index 0000000000000000000000000000000000000000..ac8f0e3bf130ba6dfd7202e2f4803522 +} diff --git a/src/main/java/me/earthme/luminol/config/modules/misc/TpsBarConfig.java b/src/main/java/me/earthme/luminol/config/modules/misc/TpsBarConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..0179a5c8006d2dae3c61303f42f59a685efbd2c4 +index 0000000000000000000000000000000000000000..aafb2f5052c7c8e5971a47308253badb3027093c --- /dev/null +++ b/src/main/java/me/earthme/luminol/config/modules/misc/TpsBarConfig.java -@@ -0,0 +1,44 @@ +@@ -0,0 +1,49 @@ +package me.earthme.luminol.config.modules.misc; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import me.earthme.luminol.commands.TpsBarCommand; -+import me.earthme.luminol.config.ConfigInfo; -+import me.earthme.luminol.config.EnumConfigCategory; -+import me.earthme.luminol.config.IConfigModule; -+import me.earthme.luminol.config.LuminolConfig; ++import me.earthme.luminol.config.*; +import me.earthme.luminol.functions.GlobalServerTpsBar; +import org.bukkit.Bukkit; + @@ -78,6 +85,11 @@ index 0000000000000000000000000000000000000000..0179a5c8006d2dae3c61303f42f59a68 + public static List tpsColors = List.of("GREEN","YELLOW","RED","PURPLE"); + @ConfigInfo(baseName = "ping_color_list") + public static List pingColors = 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() { @@ -93,19 +105,22 @@ index 0000000000000000000000000000000000000000..0179a5c8006d2dae3c61303f42f59a68 + public void onLoaded(CommentedFileConfig configInstance){ + if (tpsbarEnabled){ + GlobalServerTpsBar.init(); ++ }else{ ++ GlobalServerTpsBar.cancelBarUpdateTask(); ++ } + -+ if (!LuminolConfig.alreadyInited){ -+ Bukkit.getCommandMap().register("tpsbar","luminol",new TpsBarCommand("tpsbar")); -+ } ++ if (!inited){ ++ Bukkit.getCommandMap().register("tpsbar","luminol",new TpsBarCommand("tpsbar")); ++ inited = true; + } + } +} diff --git a/src/main/java/me/earthme/luminol/functions/GlobalServerTpsBar.java b/src/main/java/me/earthme/luminol/functions/GlobalServerTpsBar.java new file mode 100644 -index 0000000000000000000000000000000000000000..a346af48f5b57ecac2484e799c8bbe525a9c0c05 +index 0000000000000000000000000000000000000000..3f1478dde900d671c4bfa43df80f629519cd602e --- /dev/null +++ b/src/main/java/me/earthme/luminol/functions/GlobalServerTpsBar.java -@@ -0,0 +1,210 @@ +@@ -0,0 +1,225 @@ +package me.earthme.luminol.functions; + +import io.papermc.paper.threadedregions.ThreadedRegionizer; @@ -137,21 +152,36 @@ index 0000000000000000000000000000000000000000..a346af48f5b57ecac2484e799c8bbe52 + private static final Logger logger = LogManager.getLogger(); + + public static void init(){ -+ if (tpsbarTask != null && !tpsbarTask.isCancelled()){ -+ tpsbarTask.cancel(); -+ } ++ cancelBarUpdateTask(); + -+ Bukkit.getAsyncScheduler().runAtFixedRate(NULL_PLUGIN,c -> { ++ Bukkit.getGlobalRegionScheduler().runAtFixedRate(NULL_PLUGIN,c -> { + tpsbarTask = c; + try { + update(); + }catch (Exception e){ + logger.error(e); + } -+ },1,1, TimeUnit.SECONDS); ++ },1,TpsBarConfig.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; + } diff --git a/patches/server/0052-Purpur-use-alternative-keep-alive.patch b/patches/server/0052-Purpur-use-alternative-keep-alive.patch index 9469999..7771a79 100644 --- a/patches/server/0052-Purpur-use-alternative-keep-alive.patch +++ b/patches/server/0052-Purpur-use-alternative-keep-alive.patch @@ -31,10 +31,10 @@ index 0000000000000000000000000000000000000000..43bbc2c30bdd3872a0179e0070403c3e + } +} diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 22f0d91df0a81040d72c499fbff32b3a9d41598f..c68910b2a2eb703406fb406a86783cf6ab48651e 100644 +index 43c8e48ecdf82a17b81fc91c6f602c953067d11c..38564ab781665aeb215734a367bc87271efd3d2a 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -51,6 +51,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -53,6 +53,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack private long keepAliveTime = Util.getMillis(); // Paper private boolean keepAlivePending; private long keepAliveChallenge; @@ -42,7 +42,7 @@ index 22f0d91df0a81040d72c499fbff32b3a9d41598f..c68910b2a2eb703406fb406a86783cf6 private int latency; private volatile boolean suspendFlushingOnServerThread = false; public final java.util.Map packCallbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - adventure resource pack callbacks -@@ -103,6 +104,16 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -105,6 +106,16 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @Override public void handleKeepAlive(ServerboundKeepAlivePacket packet) { @@ -59,7 +59,7 @@ index 22f0d91df0a81040d72c499fbff32b3a9d41598f..c68910b2a2eb703406fb406a86783cf6 //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // CraftBukkit // Paper - handle ServerboundKeepAlivePacket async if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { int i = (int) (Util.getMillis() - this.keepAliveTime); -@@ -221,6 +232,21 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -225,6 +236,21 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack long currentTime = Util.getMillis(); long elapsedTime = currentTime - this.keepAliveTime; diff --git a/patches/server/0053-Leaves-Protocol-Core.patch b/patches/server/0053-Leaves-Protocol-Core.patch index 0f29a80..cd12769 100644 --- a/patches/server/0053-Leaves-Protocol-Core.patch +++ b/patches/server/0053-Leaves-Protocol-Core.patch @@ -36,10 +36,10 @@ index af86f752c33a2990405fea058b7c41c437ba9d46..bada9fae1e7178162429e1f5a1608b9c } diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index c68910b2a2eb703406fb406a86783cf6ab48651e..f935214ed80fe54038a96a5cd668a072cdf406ec 100644 +index 38564ab781665aeb215734a367bc87271efd3d2a..f8ebb4349004e67d399e44588e159528d31c7be0 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -139,6 +139,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -141,6 +141,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @Override public void handleCustomPayload(ServerboundCustomPayloadPacket packet) { @@ -47,7 +47,7 @@ index c68910b2a2eb703406fb406a86783cf6ab48651e..f935214ed80fe54038a96a5cd668a072 // Paper start - Brand support if (packet.payload() instanceof net.minecraft.network.protocol.common.custom.BrandPayload brandPayload) { this.player.clientBrandName = brandPayload.brand(); -@@ -156,6 +157,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -160,6 +161,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack String channels = payload.toString(com.google.common.base.Charsets.UTF_8); for (String channel : channels.split("\0")) { this.getCraftPlayer().addChannel(channel); @@ -120,10 +120,10 @@ index 0000000000000000000000000000000000000000..64a1d25973b032e8cab64bbffa6824a1 +} diff --git a/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java b/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java new file mode 100644 -index 0000000000000000000000000000000000000000..055f044ce6cef4377f6f577efdbfad0ec9a2d57b +index 0000000000000000000000000000000000000000..8b7813c442733f5d4d3b2a072902099cbe596b37 --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java -@@ -0,0 +1,340 @@ +@@ -0,0 +1,344 @@ +package top.leavesmc.leaves.protocol.core; + +import net.minecraft.network.FriendlyByteBuf; @@ -167,7 +167,11 @@ index 0000000000000000000000000000000000000000..055f044ce6cef4377f6f577efdbfad0e + private static final Map> MINECRAFT_REGISTER = new HashMap<>(); + + public static void init() { -+ for (Class clazz : getClasses("top.leavesmc.leaves.protocol")) { ++ //Luminol start - For the protocol supports of luminol ++ final Set> allClazz = getClasses("org.leavesmc.leaves.protocol"); ++ allClazz.addAll(getClasses("me.earthme.luminol.protocols")); ++ //Luminol end ++ for (Class clazz : allClazz) { + final LeavesProtocol protocol = clazz.getAnnotation(LeavesProtocol.class); + if (protocol != null) { + Set methods; diff --git a/patches/server/0055-Leaves-Fix-Bladeren-Protocol.patch b/patches/server/0055-Leaves-Fix-Bladeren-Protocol.patch index b2eb343..57fa34d 100644 --- a/patches/server/0055-Leaves-Fix-Bladeren-Protocol.patch +++ b/patches/server/0055-Leaves-Fix-Bladeren-Protocol.patch @@ -21,10 +21,10 @@ index 64a1d25973b032e8cab64bbffa6824a131676773..57a563b3f2d01719d490578907411d25 } diff --git a/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java b/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java -index 055f044ce6cef4377f6f577efdbfad0ec9a2d57b..18fc0e2c890020bf587f5b1d2e097126d3e19999 100644 +index 8b7813c442733f5d4d3b2a072902099cbe596b37..1f5b37daa5cbb709eeacf3dc7a4f9b4a0dc05274 100644 --- a/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java +++ b/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java -@@ -56,7 +56,7 @@ public class LeavesProtocolManager { +@@ -60,7 +60,7 @@ public class LeavesProtocolManager { return; } @@ -33,7 +33,7 @@ index 055f044ce6cef4377f6f577efdbfad0ec9a2d57b..18fc0e2c890020bf587f5b1d2e097126 for (final Method method : methods) { if (method.isBridge() || method.isSynthetic() || !Modifier.isStatic(method.getModifiers())) { continue; -@@ -131,13 +131,13 @@ public class LeavesProtocolManager { +@@ -135,13 +135,13 @@ public class LeavesProtocolManager { public static CustomPacketPayload getPayload(ResourceLocation id, FriendlyByteBuf buf) { for (LeavesProtocol protocol : KNOWN_TYPES.keySet()) { @@ -49,7 +49,7 @@ index 055f044ce6cef4377f6f577efdbfad0ec9a2d57b..18fc0e2c890020bf587f5b1d2e097126 try { return map.get(receiver).newInstance(id, buf); } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) { -@@ -151,15 +151,14 @@ public class LeavesProtocolManager { +@@ -155,15 +155,14 @@ public class LeavesProtocolManager { public static void handlePayload(ServerPlayer player, CustomPacketPayload payload) { for (LeavesProtocol protocol : KNOW_RECEIVERS.keySet()) { @@ -67,7 +67,7 @@ index 055f044ce6cef4377f6f577efdbfad0ec9a2d57b..18fc0e2c890020bf587f5b1d2e097126 try { map.get(receiver).invoke(null, player, payload); } catch (InvocationTargetException | IllegalAccessException e) { -@@ -222,7 +221,7 @@ public class LeavesProtocolManager { +@@ -226,7 +225,7 @@ public class LeavesProtocolManager { public static void handleMinecraftRegister(String channelId, ServerPlayer player) { for (LeavesProtocol protocol : MINECRAFT_REGISTER.keySet()) { String[] channel = channelId.split(":");