From d7624f3d6f7d27e82268c53fb4c56bdda1c2e2fb Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Wed, 9 Jul 2025 20:12:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=B4=B4=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 24 +++++++++--------- .../plugin/network/id/PacketIdFinder.java | 9 ++++--- .../minecraft/NetworkReflections.java | 5 ++++ .../font/gui/custom/stonecutting_recipe.png | Bin 4344 -> 1426 bytes 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index af8e452df..144d3f61e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -43,8 +43,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes private static BukkitNetworkManager instance; private static final Map, TriConsumer> NMS_PACKET_HANDLERS = new HashMap<>(); // only for game stage for the moment - private static BiConsumer[] S2C_BYTE_BUFFER_PACKET_HANDLERS; - private static BiConsumer[] C2S_BYTE_BUFFER_PACKET_HANDLERS; + private static BiConsumer[] S2C_GAME_BYTE_BUFFER_PACKET_HANDLERS; + private static BiConsumer[] C2S_GAME_BYTE_BUFFER_PACKET_HANDLERS; private static void registerNMSPacketConsumer(final TriConsumer function, @Nullable Class packet) { if (packet == null) return; @@ -53,18 +53,18 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes private static void registerS2CByteBufPacketConsumer(final BiConsumer function, int id) { if (id == -1) return; - if (id < 0 || id >= S2C_BYTE_BUFFER_PACKET_HANDLERS.length) { + if (id < 0 || id >= S2C_GAME_BYTE_BUFFER_PACKET_HANDLERS.length) { throw new IllegalArgumentException("Invalid packet id: " + id); } - S2C_BYTE_BUFFER_PACKET_HANDLERS[id] = function; + S2C_GAME_BYTE_BUFFER_PACKET_HANDLERS[id] = function; } private static void registerC2SByteBufPacketConsumer(final BiConsumer function, int id) { if (id == -1) return; - if (id < 0 || id >= C2S_BYTE_BUFFER_PACKET_HANDLERS.length) { + if (id < 0 || id >= C2S_GAME_BYTE_BUFFER_PACKET_HANDLERS.length) { throw new IllegalArgumentException("Invalid packet id: " + id); } - C2S_BYTE_BUFFER_PACKET_HANDLERS[id] = function; + C2S_GAME_BYTE_BUFFER_PACKET_HANDLERS[id] = function; } private final BiConsumer packetConsumer; @@ -92,10 +92,10 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes @SuppressWarnings("unchecked") public BukkitNetworkManager(BukkitCraftEngine plugin) { instance = this; - S2C_BYTE_BUFFER_PACKET_HANDLERS = new BiConsumer[PacketIdFinder.maxS2CPacketId()]; - C2S_BYTE_BUFFER_PACKET_HANDLERS = new BiConsumer[PacketIdFinder.maxC2SPacketId()]; - Arrays.fill(S2C_BYTE_BUFFER_PACKET_HANDLERS, Handlers.DO_NOTHING); - Arrays.fill(C2S_BYTE_BUFFER_PACKET_HANDLERS, Handlers.DO_NOTHING); + S2C_GAME_BYTE_BUFFER_PACKET_HANDLERS = new BiConsumer[PacketIdFinder.s2cGamePackets()]; + C2S_GAME_BYTE_BUFFER_PACKET_HANDLERS = new BiConsumer[PacketIdFinder.c2sGamePackets()]; + Arrays.fill(S2C_GAME_BYTE_BUFFER_PACKET_HANDLERS, Handlers.DO_NOTHING); + Arrays.fill(C2S_GAME_BYTE_BUFFER_PACKET_HANDLERS, Handlers.DO_NOTHING); hasModelEngine = Bukkit.getPluginManager().getPlugin("ModelEngine") != null; hasViaVersion = Bukkit.getPluginManager().getPlugin("ViaVersion") != null; this.plugin = plugin; @@ -665,13 +665,13 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes protected void handleS2CByteBufPacket(NetWorkUser user, ByteBufPacketEvent event) { int packetID = event.packetID(); - Optional.ofNullable(S2C_BYTE_BUFFER_PACKET_HANDLERS[packetID]) + Optional.ofNullable(S2C_GAME_BYTE_BUFFER_PACKET_HANDLERS[packetID]) .ifPresent(function -> function.accept(user, event)); } protected void handleC2SByteBufPacket(NetWorkUser user, ByteBufPacketEvent event) { int packetID = event.packetID(); - Optional.ofNullable(C2S_BYTE_BUFFER_PACKET_HANDLERS[packetID]) + Optional.ofNullable(C2S_GAME_BYTE_BUFFER_PACKET_HANDLERS[packetID]) .ifPresent(function -> function.accept(user, event)); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIdFinder.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIdFinder.java index 3bbe1f197..e8d383aec 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIdFinder.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/id/PacketIdFinder.java @@ -21,8 +21,8 @@ public class PacketIdFinder { if (VersionHelper.isOrAbove1_21()) { Object packetReport = CoreReflections.constructor$PacketReport.newInstance((Object) null); JsonElement jsonElement = (JsonElement) CoreReflections.method$PacketReport$serializePackets.invoke(packetReport); - var play = jsonElement.getAsJsonObject().get("play"); - for (var entry : play.getAsJsonObject().entrySet()) { + JsonElement play = jsonElement.getAsJsonObject().get("play"); + for (Map.Entry entry : play.getAsJsonObject().entrySet()) { Map ids = new HashMap<>(); gamePacketIdsByName.put(entry.getKey(), ids); for (var entry2 : entry.getValue().getAsJsonObject().entrySet()) { @@ -40,6 +40,7 @@ public class PacketIdFinder { maxS2CPacketId = calculateMaxId("clientbound"); maxC2SPacketId = calculateMaxId("serverbound"); } + private static int calculateMaxId(String direction) { if (VersionHelper.isOrAbove1_20_5()) { return gamePacketIdsByName.getOrDefault(direction, Collections.emptyMap()).size(); @@ -48,11 +49,11 @@ public class PacketIdFinder { } } - public static int maxC2SPacketId() { + public static int c2sGamePackets() { return maxC2SPacketId; } - public static int maxS2CPacketId() { + public static int s2cGamePackets() { return maxS2CPacketId; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java index 5ab685765..5f84d29ff 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java @@ -1561,4 +1561,9 @@ public final class NetworkReflections { List.of("network.protocol.login.ClientboundLoginFinishedPacket", "network.protocol.login.ClientboundGameProfilePacket") ) ); + + public static final Class clazz$ClientboundRecipeBookAddPacket = MiscUtils.requireNonNullIf(BukkitReflectionUtils.findReobfOrMojmapClass( + "network.protocol.game.ClientboundRecipeBookAddPacket", + "network.protocol.game.ClientboundRecipeBookAddPacket" + ), VersionHelper.isOrAbove1_21_2()); } diff --git a/common-files/src/main/resources/resources/internal/resourcepack/assets/minecraft/textures/font/gui/custom/stonecutting_recipe.png b/common-files/src/main/resources/resources/internal/resourcepack/assets/minecraft/textures/font/gui/custom/stonecutting_recipe.png index 3ff743370f1af8999af46f137cd6f99e1cdf8971..9cceec8386030b58bcbf9dead9f9cea257d125dc 100644 GIT binary patch delta 1419 zcmV;61$6rOA(9J_8Gi!+006580`>p^02y>eSaefwW^{L9a%BKPWN%_+AW3auXJt}l zVPtu6$z?nM001FSOjJcpNM_ETRC!^1;LV`Kq?-vQG+aJAxN|_4eTR}#JOBUyd8E@- z0000BbW%=J|NsC0|NsC0|Nj6=PXY1(00i(!L_t(|+U(tldVixJ5CC8ig3|YY;Bv`* z4B`=5=G)E2Cc^KCsA%2gr!79o_<1^(RyM{Yic#79aW|WgB?!_T7&o&UQz6(Z55kj< ziFkK88zNfxTCYXSCQ8lglkBB4{H+5b;_ST~Wc8L)u&tUWT(I}9Sc0u%C6yTfY_4Wb zD7IB!#rEo`xqs{IKrPv>8k2x6*5NM7#PV(MDu1rNlV?}mRd%SBY)>7qv1qHBw=8_h zdlg!&zf)k>+=iXo#zVErHj#}(HI|TVUa>c&rx%fNnfoGJxHI9iqpf?D@u5NJ4scf= z@2UfYv-d?d6`uQm9o3^Mh&vsh4c?u}^sajK>}!~9&VRy-e)Ygd+g`BwG}n_9s}I;4 zEF_yJSyjk;@IBZhRkPKNSAC#=AX>PZ@|(6~gR4K!-gOg^&1Ao(1MFZkraxr)(Cnke z%h-h~4JyqxUts|D(Y9r!{ZV3DR3H2DBfu`UX(SbP96_%Mh;Y&C>}(@3ah@IZ`$cOT zyV{c!*?-AO`{NZhyES0!ViE1Ry40O#voDOw?&iBAzq|Q%_he7@WKZ^FPxfR__GJHW zHd#ku%MoPF7S}ljVN17Si&5-R*mA^PvgO$OFl^zLYgRJqJ!^0R4on;E^EeOy|$6}yYk z;PscD-pY0^iQCHTVnEf@l+>B+4a#37`%DIUh)TZk*X>`z9E&e7lo-C){)XuZR%}7)i?lPoUtNn!AWXI(I zI`9*0wLNCoMfHXfZ6s9=eUwf8JVolwxXbJlZ5wbdDQbjNha$CZNR>tc>q%HEn`PNm z^@gHNGQ0TndNu>GW3^4UJ`~8ai%lhDLw^Pw@@<x8N_R)LSsR-cR<5ZE zsokGai!W=nm})8KAvU#a6a4+=O}@dVWj1x#Nd6J#%}g9@T5Q`j_qA;1vyFRmCMdE; ziVw3(dr6nQxy|F4K=uqMzn8p&oj;T^c|uwB!KRuWmjgQ{aoG&CN#+k+eRevKbAO$-U)#}tOOoyD4)h(+eoN?*hy(Xpe-X(MfjEMOv`1>V~-I_k8IKOdGtlu z4#twqM`s3IX)tOD8f`h%wmo+^rhj*8oYD;QqPFY@FM<76A{;1$qAV7sg~y_Mc{x;X<(C|4+brbHF8^D;^#DLi`Fa Z04+8aTIMX|5dZ)H07*qoL&G`TT literal 4344 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 YlbQO00xP|?`rm}5*)d$9iRZch0boH|YXATM