mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-23 08:59:31 +00:00
126 lines
6.8 KiB
Diff
126 lines
6.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: violetc <58360096+s-yh-china@users.noreply.github.com>
|
|
Date: Mon, 3 Jul 2023 22:12:16 +0800
|
|
Subject: [PATCH] Bladeren mspt sync protocol
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index ab008fdf7b7d9e3e17fbd8524729f4434aefc1f3..49fc9c750d7696789649081430b262b084a21022 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1612,6 +1612,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
top.leavesmc.leaves.protocol.BBORProtocol.tick(); // Leaves - bbor
|
|
top.leavesmc.leaves.protocol.AppleSkinProtocol.tick(); // Leaves - appleskin
|
|
top.leavesmc.leaves.util.BreakBedrockList.endTick(); // Leaves - break bedrock list
|
|
+ top.leavesmc.leaves.protocol.bladeren.MsptSyncProtocol.tick(this); // Leaves - mspt sync
|
|
|
|
MinecraftTimings.tickablesTimer.startTiming(); // Spigot // Paper
|
|
for (int i = 0; i < this.tickables.size(); ++i) {
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index 3d7e2654d67b9b61cf783e234e33576a03351413..6640cb8c04871bebeadc59f91db097124d06f801 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -3666,6 +3666,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
|
if (top.leavesmc.leaves.LeavesConfig.leavesCarpetSupport && ProtocolUtils.isNamespacePacket(packet, top.leavesmc.leaves.protocol.CarpetServerProtocol.PROTOCOL_ID)) {
|
|
top.leavesmc.leaves.protocol.CarpetServerProtocol.handlePacket(player, packet);
|
|
}
|
|
+ if (top.leavesmc.leaves.LeavesConfig.msptSyncProtocol && ProtocolUtils.isNamespacePacket(packet, top.leavesmc.leaves.protocol.bladeren.MsptSyncProtocol.PROTOCOL_ID)) {
|
|
+ top.leavesmc.leaves.protocol.bladeren.MsptSyncProtocol.handlePacket(player, packet);
|
|
+ }
|
|
} catch (Exception ex) {
|
|
ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t dispatch custom payload", ex);
|
|
this.disconnect("Invalid custom payload!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD);
|
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
index 13356860e13374227ac5559daf77fc4dc60e378d..9676ada06db5956cdc4489d07f4c031ae9372b06 100644
|
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
@@ -365,6 +365,7 @@ public abstract class PlayerList {
|
|
top.leavesmc.leaves.protocol.JadeProtocol.onPlayerJoin(player); // Leaves - Jade
|
|
top.leavesmc.leaves.protocol.AppleSkinProtocol.onPlayerLoggedIn(player); // Leaves - appleskin
|
|
top.leavesmc.leaves.protocol.CarpetServerProtocol.onPlayerJoin(player); // Leaves - carpet
|
|
+ top.leavesmc.leaves.protocol.bladeren.MsptSyncProtocol.onPlayerJoin(player); // Leaves - mspt sync
|
|
|
|
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
|
|
|
|
@@ -618,6 +619,7 @@ public abstract class PlayerList {
|
|
public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) {
|
|
top.leavesmc.leaves.protocol.BBORProtocol.onPlayerLoggedOut(entityplayer); // Leaves - bbor
|
|
top.leavesmc.leaves.protocol.AppleSkinProtocol.onPlayerLoggedOut(entityplayer); // Leaves - appleskin
|
|
+ top.leavesmc.leaves.protocol.bladeren.MsptSyncProtocol.onPlayerLoggedOut(entityplayer); // Leaves - mspt sync
|
|
// Paper end
|
|
ServerLevel worldserver = entityplayer.serverLevel();
|
|
|
|
diff --git a/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..f04ea3ad31ac8d9d820599a09c002d4c5db6104d
|
|
--- /dev/null
|
|
+++ b/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java
|
|
@@ -0,0 +1,67 @@
|
|
+package top.leavesmc.leaves.protocol.bladeren;
|
|
+
|
|
+import io.netty.buffer.Unpooled;
|
|
+import net.minecraft.network.FriendlyByteBuf;
|
|
+import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket;
|
|
+import net.minecraft.resources.ResourceLocation;
|
|
+import net.minecraft.server.MinecraftServer;
|
|
+import net.minecraft.server.level.ServerPlayer;
|
|
+import org.jetbrains.annotations.Contract;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+import top.leavesmc.leaves.LeavesConfig;
|
|
+import top.leavesmc.leaves.util.ProtocolUtils;
|
|
+
|
|
+import java.util.ArrayList;
|
|
+import java.util.Arrays;
|
|
+import java.util.List;
|
|
+
|
|
+public class MsptSyncProtocol {
|
|
+
|
|
+ public static final String PROTOCOL_ID = "bladeren";
|
|
+
|
|
+ private static final ResourceLocation MSPT_SYNC_ENABLE = id("mspt_sync_enable");
|
|
+ private static final ResourceLocation MSPT_SYNC = id("mspt_sync");
|
|
+
|
|
+ private static final List<ServerPlayer> players = new ArrayList<>();
|
|
+
|
|
+ @Contract("_ -> new")
|
|
+ public static @NotNull ResourceLocation id(String path) {
|
|
+ return new ResourceLocation(PROTOCOL_ID, path);
|
|
+ }
|
|
+
|
|
+ public static void onPlayerJoin(@NotNull ServerPlayer player) {
|
|
+ if (LeavesConfig.msptSyncProtocol) {
|
|
+ FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
|
|
+ ProtocolUtils.sendPayloadPacket(player, MSPT_SYNC_ENABLE, buf);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public static void handlePacket(ServerPlayer player, @NotNull ServerboundCustomPayloadPacket packet) {
|
|
+ if (packet.identifier.equals(MSPT_SYNC_ENABLE)) {
|
|
+ players.add(player);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public static void onPlayerLoggedOut(@NotNull ServerPlayer player) {
|
|
+ if (LeavesConfig.msptSyncProtocol) {
|
|
+ players.remove(player);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public static void tick(MinecraftServer server) {
|
|
+ if (LeavesConfig.msptSyncProtocol) {
|
|
+ if (players.isEmpty()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (server.getTickCount() % LeavesConfig.msptSyncTickInterval == 0) {
|
|
+ FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
|
|
+ double mspt = Arrays.stream(server.tickTimes).average().getAsDouble() * 1.0E-6D;
|
|
+ double tps = 1000.0D / Math.max(mspt, 50);
|
|
+ buf.writeDouble(mspt);
|
|
+ buf.writeDouble(tps);
|
|
+ players.forEach(player -> ProtocolUtils.sendPayloadPacket(player, MSPT_SYNC, buf));
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+}
|