9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 15:09:25 +00:00

Optimize leaves protocol manager & Fix diff

This commit is contained in:
Dreeam
2025-06-15 00:46:13 +08:00
parent ebd0c5d3ac
commit 03c04f0dcc
3 changed files with 45 additions and 29 deletions

View File

@@ -24,7 +24,7 @@ index 4d06587cd55af988eecdda5186577ab72ca3d533..6d1096d6cdf0ae23ab4cacabe4dbe531
@Override @Override
diff --git a/net/minecraft/commands/arguments/selector/EntitySelector.java b/net/minecraft/commands/arguments/selector/EntitySelector.java diff --git a/net/minecraft/commands/arguments/selector/EntitySelector.java b/net/minecraft/commands/arguments/selector/EntitySelector.java
index b305ba9bab617bf4e52d0e6ddf160bacc5751a94..853933618e67d7597c23b3099ea7a7a105c0483e 100644 index b305ba9bab617bf4e52d0e6ddf160bacc5751a94..bbaf1a29f86a9bfc13795249d545b6f7f1bb53eb 100644
--- a/net/minecraft/commands/arguments/selector/EntitySelector.java --- a/net/minecraft/commands/arguments/selector/EntitySelector.java
+++ b/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/net/minecraft/commands/arguments/selector/EntitySelector.java
@@ -128,11 +128,12 @@ public class EntitySelector { @@ -128,11 +128,12 @@ public class EntitySelector {
@@ -37,7 +37,7 @@ index b305ba9bab617bf4e52d0e6ddf160bacc5751a94..853933618e67d7597c23b3099ea7a7a1
for (ServerLevel serverLevel : source.getServer().getAllLevels()) { for (ServerLevel serverLevel : source.getServer().getAllLevels()) {
Entity entity = serverLevel.getEntity(this.entityUUID); Entity entity = serverLevel.getEntity(this.entityUUID);
- if (entity != null) { - if (entity != null) {
+ if (entity != null && !(entity instanceof org.leavesmc.leaves.replay.ServerPhotographer)) { + if (entity != null && !(entity instanceof org.leavesmc.leaves.replay.ServerPhotographer)) { // Leaves - skip photographer
if (entity.getType().isEnabled(source.enabledFeatures())) { if (entity.getType().isEnabled(source.enabledFeatures())) {
return List.of(entity); return List.of(entity);
} }
@@ -58,7 +58,7 @@ index b305ba9bab617bf4e52d0e6ddf160bacc5751a94..853933618e67d7597c23b3099ea7a7a1
return this.sortAndLimit(vec3, list); return this.sortAndLimit(vec3, list);
} }
@@ -192,9 +194,11 @@ public class EntitySelector { @@ -192,27 +194,29 @@ public class EntitySelector {
this.checkPermissions(source); this.checkPermissions(source);
if (this.playerName != null) { if (this.playerName != null) {
ServerPlayer playerByName = source.getServer().getPlayerList().getPlayerByName(this.playerName); ServerPlayer playerByName = source.getServer().getPlayerList().getPlayerByName(this.playerName);
@@ -70,7 +70,12 @@ index b305ba9bab617bf4e52d0e6ddf160bacc5751a94..853933618e67d7597c23b3099ea7a7a1
return playerByName == null || !canSee(source, playerByName) ? List.of() : List.of(playerByName); // Purpur - Hide hidden players from entity selector return playerByName == null || !canSee(source, playerByName) ? List.of() : List.of(playerByName); // Purpur - Hide hidden players from entity selector
} else { } else {
Vec3 vec3 = this.position.apply(source.getPosition()); Vec3 vec3 = this.position.apply(source.getPosition());
@@ -206,13 +210,13 @@ public class EntitySelector { AABB absoluteAabb = this.getAbsoluteAabb(vec3);
Predicate<Entity> predicate = this.getPredicate(vec3, absoluteAabb, null);
if (this.currentEntity) {
- return source.getEntity() instanceof ServerPlayer serverPlayer && predicate.test(serverPlayer) && canSee(source, serverPlayer) ? List.of(serverPlayer) : List.of(); // Purpur - Hide hidden players from entity selector
+ return source.getEntity() instanceof ServerPlayer serverPlayer && !(serverPlayer instanceof org.leavesmc.leaves.replay.ServerPhotographer) && predicate.test(serverPlayer) && canSee(source, serverPlayer) ? List.of(serverPlayer) : List.of(); // Purpur - Hide hidden players from entity selector // Leaves - skip photographer
} else {
int resultLimit = this.getResultLimit(); int resultLimit = this.getResultLimit();
List<ServerPlayer> players; List<ServerPlayer> players;
if (this.isWorldLimited()) { if (this.isWorldLimited()) {

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Do not place player if the server is full
Fix https://github.com/PaperMC/Paper/issues/10668 Fix https://github.com/PaperMC/Paper/issues/10668
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 8b7b60e2f143dcbb44f3084c3c4d2306b9708f0d..411ccee65f5658347839ca7d0fffeedc1f2814ce 100644 index 8b7b60e2f143dcbb44f3084c3c4d2306b9708f0d..75393b9cdd564e55ba173828c2f7b40498e8ecd7 100644
--- a/net/minecraft/server/players/PlayerList.java --- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java
@@ -342,6 +342,13 @@ public abstract class PlayerList { @@ -342,6 +342,13 @@ public abstract class PlayerList {
@@ -14,7 +14,7 @@ index 8b7b60e2f143dcbb44f3084c3c4d2306b9708f0d..411ccee65f5658347839ca7d0fffeedc
} }
// Gale end - MultiPaper - do not place player in world if kicked before being spawned in // Gale end - MultiPaper - do not place player in world if kicked before being spawned in
+ // Leaf start - Do not place player if the server is full - copied from canPlayerLogin + // Leaf start - Do not place player if the server is full - copied from canPlayerLogin
+ if (org.dreeam.leaf.config.modules.fixes.DontPlacePlayerIfFull.enabled && this.realPlayers.size() >= this.maxPlayers && !(player.getBukkitEntity().hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission + if (org.dreeam.leaf.config.modules.fixes.DontPlacePlayerIfFull.enabled && this.realPlayers.size() >= this.maxPlayers && !(player.getBukkitEntity().hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission // Leaves - only real player
+ connection.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage))); + connection.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)));
+ //playerconnection.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)), org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); + //playerconnection.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)), org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT);
+ return; + return;

View File

@@ -99,6 +99,18 @@ public class LeavesProtocolManager {
return; return;
} }
// Leaf start - optimize leaves protocol manager
boolean active = true;
try {
Method isActiveMethod = clazz.getDeclaredMethod("isActive");
isActiveMethod.setAccessible(true);
active = (Boolean) isActiveMethod.invoke(protocol);
} catch (Throwable e) {
LOGGER.warning("Failed to check isActive for " + clazz.getName() + ": " + e);
continue;
}
// Leaf end - optimize leaves protocol manager
for (final Method method : clazz.getDeclaredMethods()) { for (final Method method : clazz.getDeclaredMethods()) {
if (method.isBridge() || method.isSynthetic()) { if (method.isBridge() || method.isSynthetic()) {
continue; continue;
@@ -116,6 +128,22 @@ public class LeavesProtocolManager {
continue; continue;
} }
if (!active) continue; // Leaf - optimize leaves protocol manager
// Leaf start - optimize leaves protocol manager - move up
final ProtocolHandler.ReloadServer reloadServer = method.getAnnotation(ProtocolHandler.ReloadServer.class);
if (reloadServer != null) {
RELOAD_SERVER.add(new EmptyInvokerHolder<>(protocol, method, reloadServer));
continue;
}
final ProtocolHandler.ReloadDataPack reloadDataPack = method.getAnnotation(ProtocolHandler.ReloadDataPack.class);
if (reloadDataPack != null) {
RELOAD_DATAPACK.add(new EmptyInvokerHolder<>(protocol, method, reloadDataPack));
continue;
}
// Leaf end - optimize leaves protocol manager - move up
final ProtocolHandler.PayloadReceiver payloadReceiver = method.getAnnotation(ProtocolHandler.PayloadReceiver.class); final ProtocolHandler.PayloadReceiver payloadReceiver = method.getAnnotation(ProtocolHandler.PayloadReceiver.class);
if (payloadReceiver != null) { if (payloadReceiver != null) {
PAYLOAD_RECEIVERS.put(payloadReceiver.payload(), new PayloadReceiverInvokerHolder(protocol, method, payloadReceiver)); PAYLOAD_RECEIVERS.put(payloadReceiver.payload(), new PayloadReceiverInvokerHolder(protocol, method, payloadReceiver));
@@ -160,18 +188,6 @@ public class LeavesProtocolManager {
continue; continue;
} }
final ProtocolHandler.ReloadServer reloadServer = method.getAnnotation(ProtocolHandler.ReloadServer.class);
if (reloadServer != null) {
RELOAD_SERVER.add(new EmptyInvokerHolder<>(protocol, method, reloadServer));
continue;
}
final ProtocolHandler.ReloadDataPack reloadDataPack = method.getAnnotation(ProtocolHandler.ReloadDataPack.class);
if (reloadDataPack != null) {
RELOAD_DATAPACK.add(new EmptyInvokerHolder<>(protocol, method, reloadDataPack));
continue;
}
final ProtocolHandler.MinecraftRegister minecraftRegister = method.getAnnotation(ProtocolHandler.MinecraftRegister.class); final ProtocolHandler.MinecraftRegister minecraftRegister = method.getAnnotation(ProtocolHandler.MinecraftRegister.class);
if (minecraftRegister != null) { if (minecraftRegister != null) {
String key = minecraftRegister.key(); String key = minecraftRegister.key();
@@ -300,16 +316,11 @@ public class LeavesProtocolManager {
private static void sendKnownId(ServerPlayer player) { private static void sendKnownId(ServerPlayer player) {
Set<String> set = new HashSet<>(); Set<String> set = new HashSet<>();
PAYLOAD_RECEIVERS.forEach((clazz, holder) -> { // Leaf start - optimize leaves protocol manager
if (holder.owner().isActive()) { PAYLOAD_RECEIVERS.forEach((clazz, holder) -> set.add(IDS.get(clazz).toString()));
set.add(IDS.get(clazz).toString()); STRICT_BYTEBUF_RECEIVERS.forEach((key, holder) -> set.add(key));
} if (set.isEmpty()) return;
}); // Leaf end - optimize leaves protocol manager
STRICT_BYTEBUF_RECEIVERS.forEach((key, holder) -> {
if (holder.owner().isActive()) {
set.add(key);
}
});
ProtocolUtils.sendBytebufPacket(player, ResourceLocation.fromNamespaceAndPath("minecraft", "register"), buf -> { ProtocolUtils.sendBytebufPacket(player, ResourceLocation.fromNamespaceAndPath("minecraft", "register"), buf -> {
ResourceLocation channel; ResourceLocation channel;
for (Iterator<String> var3 = set.iterator(); var3.hasNext(); buf.writeBytes(channel.toString().getBytes(StandardCharsets.US_ASCII))) { for (Iterator<String> var3 = set.iterator(); var3.hasNext(); buf.writeBytes(channel.toString().getBytes(StandardCharsets.US_ASCII))) {