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 3ff743370..9cceec838 100644 Binary files a/common-files/src/main/resources/resources/internal/resourcepack/assets/minecraft/textures/font/gui/custom/stonecutting_recipe.png and b/common-files/src/main/resources/resources/internal/resourcepack/assets/minecraft/textures/font/gui/custom/stonecutting_recipe.png differ