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:
@@ -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()) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user