9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2025-12-22 16:39:30 +00:00
Files
LeavesMC/patches/server/0077-Bladeren-mspt-sync-protocol.patch
2023-09-04 00:17:42 +08:00

130 lines
6.2 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 5c09e2164a045346e0e2d4ce64408ac9209cf501..d47e29850462356e843591deba7e8a83f59faba0 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1611,6 +1611,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/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 13356860e13374227ac5559daf77fc4dc60e378d..163827eb405e407bca16b890c4ae3f8a4a927320 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -618,6 +618,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/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 47b27712c6ed11fc5c2cd7de04482870207545e7..93054a59f14fee933a908944e93b462b5dae2ce6 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -470,6 +470,7 @@ public final class CraftServer implements Server {
datapackManager = new io.papermc.paper.datapack.PaperDatapackManager(console.getPackRepository()); // Paper
top.leavesmc.leaves.protocol.PcaSyncProtocol.init(); // Leaves - pca
top.leavesmc.leaves.protocol.JadeProtocol.init(); // Leaves - Jade
+ top.leavesmc.leaves.protocol.bladeren.MsptSyncProtocol.init(); // Leaves - mspt
}
public boolean getCommandBlockOverride(String command) {
diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java
index f87479eb24fb244c5f2c4ee2f307b43187a0f33c..8356766f2bc1b1f53f4912feb507bab61328c0d3 100644
--- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java
+++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java
@@ -845,6 +845,7 @@ public final class LeavesConfig {
}
public static void registerLeavesFeatures() {
+ LeavesFeatureSet.register(LeavesFeature.of("mspt_sync", msptSyncProtocol));
}
public static boolean hopperCounter = false;
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..5c206ecc6aba1ef632467f85ea83f909486ced29
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java
@@ -0,0 +1,69 @@
+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 = 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 init() {
+ LeavesProtocol.registerFeature("mspt_sync", (player, compoundTag) -> {
+ if (compoundTag.getString("Value").equals("true")) {
+ onPlayerSubmit(player);
+ } else {
+ onPlayerLoggedOut(player);
+ }
+ });
+ }
+
+ public static void onPlayerSubmit(@NotNull ServerPlayer player) {
+ if (LeavesConfig.msptSyncProtocol) {
+ 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));
+ }
+ }
+ }
+}