diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/PacketBoolSettingScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/PacketBoolSettingScreen.java index abbb97f341..81815a2523 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/PacketBoolSettingScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/PacketBoolSettingScreen.java @@ -12,33 +12,34 @@ import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.utils.network.PacketUtils; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketType; +import org.jetbrains.annotations.NotNull; import java.util.Set; import java.util.function.Predicate; -public class PacketBoolSettingScreen extends CollectionListSettingScreen>> { - public PacketBoolSettingScreen(GuiTheme theme, Setting>>> setting) { - super(theme, "Select Packets", setting, setting.get(), PacketUtils.PACKETS); +public class PacketBoolSettingScreen extends CollectionListSettingScreen>> { + public PacketBoolSettingScreen(GuiTheme theme, Setting>>> setting) { + super(theme, "Select Packets", setting, setting.get(), PacketUtils.getPackets()); } @Override - protected boolean includeValue(Class> value) { - Predicate>> filter = ((PacketListSetting) setting).filter; + protected boolean includeValue(PacketType> value) { + Predicate>> filter = ((PacketListSetting) setting).filter; if (filter == null) return true; return filter.test(value); } @Override - protected WWidget getValueWidget(Class> value) { - return theme.label(PacketUtils.getName(value)); + protected WWidget getValueWidget(PacketType> value) { + return theme.label(value.toString()); } @Override - protected String[] getValueNames(Class> value) { + protected String[] getValueNames(PacketType> value) { return new String[]{ - PacketUtils.getName(value), - value.getSimpleName() + value.toString() }; } } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java index 4256d465f4..5626ca2d9a 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java @@ -12,18 +12,19 @@ import net.minecraft.nbt.StringTag; import net.minecraft.nbt.Tag; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketFlow; +import net.minecraft.network.protocol.PacketType; +import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.function.Consumer; import java.util.function.Predicate; -public class PacketListSetting extends Setting>>> { - public final Predicate>> filter; - private static List suggestions; +public class PacketListSetting extends Setting>>> { + public final Predicate>> filter; - public PacketListSetting(String name, String description, Set>> defaultValue, Consumer>>> onChanged, Consumer>>>> onModuleActivated, Predicate>> filter, IVisible visible) { + public PacketListSetting(String name, String description, Set>> defaultValue, Consumer>>> onChanged, Consumer>>>> onModuleActivated, Predicate>> filter, IVisible visible) { super(name, description, defaultValue, onChanged, onModuleActivated, visible); this.filter = filter; @@ -35,13 +36,13 @@ public void resetImpl() { } @Override - protected Set>> parseImpl(String str) { + protected Set>> parseImpl(String str) { String[] values = str.split(","); - Set>> packets = new ObjectOpenHashSet<>(values.length); + Set>> packets = new ObjectOpenHashSet<>(values.length); try { for (String value : values) { - Class> packet = PacketUtils.getPacket(value.trim()); + PacketType> packet = PacketUtils.getPacket(value.trim()); if (packet != null && (filter == null || filter.test(packet))) packets.add(packet); } } catch (Exception _) { @@ -51,32 +52,22 @@ protected Set>> parseImpl(String str) { } @Override - protected boolean isValueValid(Set>> value) { + protected boolean isValueValid(Set>> value) { return true; } @Override public List getSuggestions() { - if (suggestions == null) { - suggestions = new ArrayList<>(PacketUtils.getC2SPackets().size() + PacketUtils.getS2CPackets().size()); - - for (Class> packet : PacketUtils.getC2SPackets()) { - suggestions.add(PacketUtils.getName(packet)); - } - - for (Class> packet : PacketUtils.getS2CPackets()) { - suggestions.add(PacketUtils.getName(packet)); - } - } - - return suggestions; + return filter == null + ? PacketUtils.getPackets().stream().map(PacketType::toString).toList() + : PacketUtils.getPackets().stream().filter(filter).map(PacketType::toString).toList(); } @Override public CompoundTag save(CompoundTag tag) { ListTag valueTag = new ListTag(); - for (Class> packet : get()) { - valueTag.add(StringTag.valueOf(PacketUtils.getName(packet))); + for (PacketType> packet : get()) { + valueTag.add(StringTag.valueOf(packet.toString())); } tag.put("value", valueTag); @@ -84,13 +75,13 @@ public CompoundTag save(CompoundTag tag) { } @Override - public Set>> load(CompoundTag tag) { + public Set>> load(CompoundTag tag) { get().clear(); Tag valueTag = tag.get("value"); if (valueTag instanceof ListTag listTag) { for (Tag t : listTag) { - Class> packet = PacketUtils.getPacket(t.asString().orElse("")); + PacketType> packet = PacketUtils.getPacket(t.asString().orElse("")); if (packet != null && (filter == null || filter.test(packet))) get().add(packet); } } @@ -98,18 +89,26 @@ public Set>> load(CompoundTag tag) { return get(); } - public static class Builder extends SettingBuilder>>, PacketListSetting> { - private Predicate>> filter; + public static class Builder extends SettingBuilder>>, PacketListSetting> { + private Predicate>> filter; public Builder() { super(new ObjectOpenHashSet<>(0)); } - public Builder filter(Predicate>> filter) { + public Builder filter(Predicate>> filter) { this.filter = filter; return this; } + public Builder clientbound() { + return filter(type -> type.flow() == PacketFlow.CLIENTBOUND); + } + + public Builder serverbound() { + return filter(type -> type.flow() == PacketFlow.SERVERBOUND); + } + @Override public PacketListSetting build() { return new PacketListSetting(name, description, defaultValue, onChanged, onModuleActivated, filter, visible); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/PacketCanceller.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/PacketCanceller.java index 4ca990098e..5586603ae2 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/PacketCanceller.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/PacketCanceller.java @@ -11,27 +11,28 @@ import meteordevelopment.meteorclient.settings.SettingGroup; import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; -import meteordevelopment.meteorclient.utils.network.PacketUtils; import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketType; +import org.jetbrains.annotations.NotNull; import java.util.Set; public class PacketCanceller extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); - private final Setting>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder() + private final Setting>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder() .name("S2C-packets") .description("Server-to-client packets to cancel.") - .filter(aClass -> PacketUtils.getS2CPackets().contains(aClass)) + .clientbound() .build() ); - private final Setting>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder() + private final Setting>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder() .name("C2S-packets") .description("Client-to-server packets to cancel.") - .filter(aClass -> PacketUtils.getC2SPackets().contains(aClass)) + .serverbound() .build() ); @@ -42,11 +43,11 @@ public PacketCanceller() { @EventHandler(priority = EventPriority.HIGHEST + 1) private void onReceivePacket(PacketEvent.Receive event) { - if (s2cPackets.get().contains(event.packet.getClass())) event.cancel(); + if (s2cPackets.get().contains(event.packet.type())) event.cancel(); } @EventHandler(priority = EventPriority.HIGHEST + 1) private void onSendPacket(PacketEvent.Send event) { - if (c2sPackets.get().contains(event.packet.getClass())) event.cancel(); + if (c2sPackets.get().contains(event.packet.type())) event.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/PacketLogger.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/PacketLogger.java index 8c8271e2d2..22f2418bbe 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/PacketLogger.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/PacketLogger.java @@ -5,16 +5,16 @@ package meteordevelopment.meteorclient.systems.modules.misc; -import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.packets.PacketEvent; import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; -import meteordevelopment.meteorclient.utils.network.PacketUtils; import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketType; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; @@ -36,17 +36,17 @@ public class PacketLogger extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgOutput = settings.createGroup("Output"); - private final Setting>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder() + private final Setting>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder() .name("S2C-packets") .description("Server-to-client packets to log.") - .filter(aClass -> PacketUtils.getS2CPackets().contains(aClass)) + .clientbound() .build() ); - private final Setting>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder() + private final Setting>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder() .name("C2S-packets") .description("Client-to-server packets to log.") - .filter(aClass -> PacketUtils.getC2SPackets().contains(aClass)) + .serverbound() .build() ); @@ -128,7 +128,7 @@ public class PacketLogger extends Module { private static final int LINE_SEPARATOR_BYTES = System.lineSeparator().getBytes(StandardCharsets.UTF_8).length; private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss.SSS"); private static final DateTimeFormatter FILE_NAME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"); - private final Reference2IntOpenHashMap>> packetCounts = new Reference2IntOpenHashMap<>(); + private final Object2IntOpenHashMap>> packetCounts = new Object2IntOpenHashMap<>(); private @Nullable BufferedWriter fileWriter; private long lastFlushMs; private long currentFileSizeBytes; @@ -173,17 +173,14 @@ public void onDeactivate() { private void logPacket(String direction, Packet packet) { if (!logToChat.get() && !logToFile.get()) return; - @SuppressWarnings("unchecked") - Class> packetClass = (Class>) packet.getClass(); - // Update count - packetCounts.addTo(packetClass, 1); + packetCounts.addTo(packet.type(), 1); // Build log message StringBuilder msg = new StringBuilder(128); if (showTimestamp.get()) msg.append("[").append(LocalDateTime.now().format(TIME_FORMATTER)).append("] "); - msg.append(direction).append(" ").append(PacketUtils.getName(packetClass)); - if (showCount.get()) msg.append(" (#").append(packetCounts.getInt(packetClass)).append(")"); + msg.append(direction).append(" ").append(packet.type()); + if (showCount.get()) msg.append(" (#").append(packetCounts.getInt(packet.type())).append(")"); if (showPacketData.get()) msg.append("\n Data: ").append(packet); // Log to chat and/or file @@ -199,9 +196,9 @@ private void logSummary() { lines.add("--- SUMMARY ---"); lines.add("Final packet counts (total " + totalPackets + "):"); - packetCounts.reference2IntEntrySet().stream() + packetCounts.object2IntEntrySet().stream() .sorted((a, b) -> Integer.compare(b.getIntValue(), a.getIntValue())) - .forEach(e -> lines.add(" %s: %d".formatted(PacketUtils.getName(e.getKey()), e.getIntValue()))); + .forEach(e -> lines.add(" %s: %d".formatted(e.getKey().toString(), e.getIntValue()))); for (String line : lines) { if (logToChat.get()) info(line); @@ -290,11 +287,11 @@ private record LogFileEntry(Path path, long size, long lastModified) { @EventHandler(priority = EventPriority.HIGHEST + 1) private void onReceivePacket(PacketEvent.Receive event) { - if (s2cPackets.get().contains(event.packet.getClass())) logPacket("<- S2C", event.packet); + if (s2cPackets.get().contains(event.packet.type())) logPacket("<- S2C", event.packet); } @EventHandler(priority = EventPriority.HIGHEST + 1) private void onSendPacket(PacketEvent.Send event) { - if (c2sPackets.get().contains(event.packet.getClass())) logPacket("-> C2S", event.packet); + if (c2sPackets.get().contains(event.packet.type())) logPacket("-> C2S", event.packet); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java index d0a69edd03..5bbfa544f4 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java @@ -5,511 +5,354 @@ package meteordevelopment.meteorclient.utils.network; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; -import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; -import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; +import net.minecraft.network.ProtocolInfo; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketType; +import net.minecraft.network.protocol.common.CommonPacketTypes; +import net.minecraft.network.protocol.configuration.ConfigurationPacketTypes; +import net.minecraft.network.protocol.configuration.ConfigurationProtocols; +import net.minecraft.network.protocol.cookie.CookiePacketTypes; +import net.minecraft.network.protocol.game.GamePacketTypes; +import net.minecraft.network.protocol.game.GameProtocols; +import net.minecraft.network.protocol.handshake.HandshakePacketTypes; +import net.minecraft.network.protocol.handshake.HandshakeProtocols; +import net.minecraft.network.protocol.login.LoginPacketTypes; +import net.minecraft.network.protocol.login.LoginProtocols; +import net.minecraft.network.protocol.ping.PingPacketTypes; +import net.minecraft.network.protocol.status.StatusPacketTypes; +import net.minecraft.network.protocol.status.StatusProtocols; +import net.minecraft.resources.Identifier; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Map; import java.util.Set; +import java.util.stream.Stream; +@SuppressWarnings("unused") public class PacketUtils { - private static final Map>, String> S2C_PACKETS = new Reference2ObjectOpenHashMap<>(); - private static final Map>, String> C2S_PACKETS = new Reference2ObjectOpenHashMap<>(); + private static final Map>> CLIENTBOUND_PACKETS_MAP; + private static final Map>> SERVERBOUND_PACKETS_MAP; + private static final Set>> CLIENTBOUND_PACKETS; + private static final Set>> SERVERBOUND_PACKETS; - private static final Map>> S2C_PACKETS_R = new Object2ReferenceOpenHashMap<>(); - private static final Map>> C2S_PACKETS_R = new Object2ReferenceOpenHashMap<>(); + public static Set>> getPackets() { + return Sets.union(CLIENTBOUND_PACKETS, SERVERBOUND_PACKETS); + } - public static final Set>> PACKETS = Sets.union(getC2SPackets(), getS2CPackets()); + public static Set>> getClientboundPackets() { + return CLIENTBOUND_PACKETS; + } - static { - C2S_PACKETS.put(net.minecraft.network.protocol.handshake.ClientIntentionPacket.class, "ClientIntentionPacket"); - C2S_PACKETS_R.put("ClientIntentionPacket", net.minecraft.network.protocol.handshake.ClientIntentionPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.Pos.class, "ServerboundMovePlayerPacket.Pos"); - C2S_PACKETS_R.put("ServerboundMovePlayerPacket.Pos", net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.Pos.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.PosRot.class, "ServerboundMovePlayerPacket.PosRot"); - C2S_PACKETS_R.put("ServerboundMovePlayerPacket.PosRot", net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.PosRot.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.Rot.class, "ServerboundMovePlayerPacket.Rot"); - C2S_PACKETS_R.put("ServerboundMovePlayerPacket.Rot", net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.Rot.class); - C2S_PACKETS.put(net.minecraft.network.protocol.configuration.ServerboundAcceptCodeOfConductPacket.class, "ServerboundAcceptCodeOfConductPacket"); - C2S_PACKETS_R.put("ServerboundAcceptCodeOfConductPacket", net.minecraft.network.protocol.configuration.ServerboundAcceptCodeOfConductPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket.class, "ServerboundAcceptTeleportationPacket"); - C2S_PACKETS_R.put("ServerboundAcceptTeleportationPacket", net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundAttackPacket.class, "ServerboundAttackPacket"); - C2S_PACKETS_R.put("ServerboundAttackPacket", net.minecraft.network.protocol.game.ServerboundAttackPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundBlockEntityTagQueryPacket.class, "ServerboundBlockEntityTagQueryPacket"); - C2S_PACKETS_R.put("ServerboundBlockEntityTagQueryPacket", net.minecraft.network.protocol.game.ServerboundBlockEntityTagQueryPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundChangeDifficultyPacket.class, "ServerboundChangeDifficultyPacket"); - C2S_PACKETS_R.put("ServerboundChangeDifficultyPacket", net.minecraft.network.protocol.game.ServerboundChangeDifficultyPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundChangeGameModePacket.class, "ServerboundChangeGameModePacket"); - C2S_PACKETS_R.put("ServerboundChangeGameModePacket", net.minecraft.network.protocol.game.ServerboundChangeGameModePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundChatAckPacket.class, "ServerboundChatAckPacket"); - C2S_PACKETS_R.put("ServerboundChatAckPacket", net.minecraft.network.protocol.game.ServerboundChatAckPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundChatCommandPacket.class, "ServerboundChatCommandPacket"); - C2S_PACKETS_R.put("ServerboundChatCommandPacket", net.minecraft.network.protocol.game.ServerboundChatCommandPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundChatCommandSignedPacket.class, "ServerboundChatCommandSignedPacket"); - C2S_PACKETS_R.put("ServerboundChatCommandSignedPacket", net.minecraft.network.protocol.game.ServerboundChatCommandSignedPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundChatPacket.class, "ServerboundChatPacket"); - C2S_PACKETS_R.put("ServerboundChatPacket", net.minecraft.network.protocol.game.ServerboundChatPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundChatSessionUpdatePacket.class, "ServerboundChatSessionUpdatePacket"); - C2S_PACKETS_R.put("ServerboundChatSessionUpdatePacket", net.minecraft.network.protocol.game.ServerboundChatSessionUpdatePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundChunkBatchReceivedPacket.class, "ServerboundChunkBatchReceivedPacket"); - C2S_PACKETS_R.put("ServerboundChunkBatchReceivedPacket", net.minecraft.network.protocol.game.ServerboundChunkBatchReceivedPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundClientCommandPacket.class, "ServerboundClientCommandPacket"); - C2S_PACKETS_R.put("ServerboundClientCommandPacket", net.minecraft.network.protocol.game.ServerboundClientCommandPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.common.ServerboundClientInformationPacket.class, "ServerboundClientInformationPacket"); - C2S_PACKETS_R.put("ServerboundClientInformationPacket", net.minecraft.network.protocol.common.ServerboundClientInformationPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundClientTickEndPacket.class, "ServerboundClientTickEndPacket"); - C2S_PACKETS_R.put("ServerboundClientTickEndPacket", net.minecraft.network.protocol.game.ServerboundClientTickEndPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundCommandSuggestionPacket.class, "ServerboundCommandSuggestionPacket"); - C2S_PACKETS_R.put("ServerboundCommandSuggestionPacket", net.minecraft.network.protocol.game.ServerboundCommandSuggestionPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundConfigurationAcknowledgedPacket.class, "ServerboundConfigurationAcknowledgedPacket"); - C2S_PACKETS_R.put("ServerboundConfigurationAcknowledgedPacket", net.minecraft.network.protocol.game.ServerboundConfigurationAcknowledgedPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundContainerButtonClickPacket.class, "ServerboundContainerButtonClickPacket"); - C2S_PACKETS_R.put("ServerboundContainerButtonClickPacket", net.minecraft.network.protocol.game.ServerboundContainerButtonClickPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundContainerClickPacket.class, "ServerboundContainerClickPacket"); - C2S_PACKETS_R.put("ServerboundContainerClickPacket", net.minecraft.network.protocol.game.ServerboundContainerClickPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundContainerClosePacket.class, "ServerboundContainerClosePacket"); - C2S_PACKETS_R.put("ServerboundContainerClosePacket", net.minecraft.network.protocol.game.ServerboundContainerClosePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundContainerSlotStateChangedPacket.class, "ServerboundContainerSlotStateChangedPacket"); - C2S_PACKETS_R.put("ServerboundContainerSlotStateChangedPacket", net.minecraft.network.protocol.game.ServerboundContainerSlotStateChangedPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.cookie.ServerboundCookieResponsePacket.class, "ServerboundCookieResponsePacket"); - C2S_PACKETS_R.put("ServerboundCookieResponsePacket", net.minecraft.network.protocol.cookie.ServerboundCookieResponsePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.common.ServerboundCustomClickActionPacket.class, "ServerboundCustomClickActionPacket"); - C2S_PACKETS_R.put("ServerboundCustomClickActionPacket", net.minecraft.network.protocol.common.ServerboundCustomClickActionPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket.class, "ServerboundCustomPayloadPacket"); - C2S_PACKETS_R.put("ServerboundCustomPayloadPacket", net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket.class, "ServerboundCustomQueryAnswerPacket"); - C2S_PACKETS_R.put("ServerboundCustomQueryAnswerPacket", net.minecraft.network.protocol.login.ServerboundCustomQueryAnswerPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundDebugSubscriptionRequestPacket.class, "ServerboundDebugSubscriptionRequestPacket"); - C2S_PACKETS_R.put("ServerboundDebugSubscriptionRequestPacket", net.minecraft.network.protocol.game.ServerboundDebugSubscriptionRequestPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundEditBookPacket.class, "ServerboundEditBookPacket"); - C2S_PACKETS_R.put("ServerboundEditBookPacket", net.minecraft.network.protocol.game.ServerboundEditBookPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundEntityTagQueryPacket.class, "ServerboundEntityTagQueryPacket"); - C2S_PACKETS_R.put("ServerboundEntityTagQueryPacket", net.minecraft.network.protocol.game.ServerboundEntityTagQueryPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.configuration.ServerboundFinishConfigurationPacket.class, "ServerboundFinishConfigurationPacket"); - C2S_PACKETS_R.put("ServerboundFinishConfigurationPacket", net.minecraft.network.protocol.configuration.ServerboundFinishConfigurationPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.login.ServerboundHelloPacket.class, "ServerboundHelloPacket"); - C2S_PACKETS_R.put("ServerboundHelloPacket", net.minecraft.network.protocol.login.ServerboundHelloPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundInteractPacket.class, "ServerboundInteractPacket"); - C2S_PACKETS_R.put("ServerboundInteractPacket", net.minecraft.network.protocol.game.ServerboundInteractPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundJigsawGeneratePacket.class, "ServerboundJigsawGeneratePacket"); - C2S_PACKETS_R.put("ServerboundJigsawGeneratePacket", net.minecraft.network.protocol.game.ServerboundJigsawGeneratePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.common.ServerboundKeepAlivePacket.class, "ServerboundKeepAlivePacket"); - C2S_PACKETS_R.put("ServerboundKeepAlivePacket", net.minecraft.network.protocol.common.ServerboundKeepAlivePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.login.ServerboundKeyPacket.class, "ServerboundKeyPacket"); - C2S_PACKETS_R.put("ServerboundKeyPacket", net.minecraft.network.protocol.login.ServerboundKeyPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundLockDifficultyPacket.class, "ServerboundLockDifficultyPacket"); - C2S_PACKETS_R.put("ServerboundLockDifficultyPacket", net.minecraft.network.protocol.game.ServerboundLockDifficultyPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.login.ServerboundLoginAcknowledgedPacket.class, "ServerboundLoginAcknowledgedPacket"); - C2S_PACKETS_R.put("ServerboundLoginAcknowledgedPacket", net.minecraft.network.protocol.login.ServerboundLoginAcknowledgedPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundMoveVehiclePacket.class, "ServerboundMoveVehiclePacket"); - C2S_PACKETS_R.put("ServerboundMoveVehiclePacket", net.minecraft.network.protocol.game.ServerboundMoveVehiclePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPaddleBoatPacket.class, "ServerboundPaddleBoatPacket"); - C2S_PACKETS_R.put("ServerboundPaddleBoatPacket", net.minecraft.network.protocol.game.ServerboundPaddleBoatPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPickItemFromBlockPacket.class, "ServerboundPickItemFromBlockPacket"); - C2S_PACKETS_R.put("ServerboundPickItemFromBlockPacket", net.minecraft.network.protocol.game.ServerboundPickItemFromBlockPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPickItemFromEntityPacket.class, "ServerboundPickItemFromEntityPacket"); - C2S_PACKETS_R.put("ServerboundPickItemFromEntityPacket", net.minecraft.network.protocol.game.ServerboundPickItemFromEntityPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.ping.ServerboundPingRequestPacket.class, "ServerboundPingRequestPacket"); - C2S_PACKETS_R.put("ServerboundPingRequestPacket", net.minecraft.network.protocol.ping.ServerboundPingRequestPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPlaceRecipePacket.class, "ServerboundPlaceRecipePacket"); - C2S_PACKETS_R.put("ServerboundPlaceRecipePacket", net.minecraft.network.protocol.game.ServerboundPlaceRecipePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPlayerAbilitiesPacket.class, "ServerboundPlayerAbilitiesPacket"); - C2S_PACKETS_R.put("ServerboundPlayerAbilitiesPacket", net.minecraft.network.protocol.game.ServerboundPlayerAbilitiesPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPlayerActionPacket.class, "ServerboundPlayerActionPacket"); - C2S_PACKETS_R.put("ServerboundPlayerActionPacket", net.minecraft.network.protocol.game.ServerboundPlayerActionPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket.class, "ServerboundPlayerCommandPacket"); - C2S_PACKETS_R.put("ServerboundPlayerCommandPacket", net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPlayerInputPacket.class, "ServerboundPlayerInputPacket"); - C2S_PACKETS_R.put("ServerboundPlayerInputPacket", net.minecraft.network.protocol.game.ServerboundPlayerInputPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundPlayerLoadedPacket.class, "ServerboundPlayerLoadedPacket"); - C2S_PACKETS_R.put("ServerboundPlayerLoadedPacket", net.minecraft.network.protocol.game.ServerboundPlayerLoadedPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.common.ServerboundPongPacket.class, "ServerboundPongPacket"); - C2S_PACKETS_R.put("ServerboundPongPacket", net.minecraft.network.protocol.common.ServerboundPongPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundRecipeBookChangeSettingsPacket.class, "ServerboundRecipeBookChangeSettingsPacket"); - C2S_PACKETS_R.put("ServerboundRecipeBookChangeSettingsPacket", net.minecraft.network.protocol.game.ServerboundRecipeBookChangeSettingsPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundRecipeBookSeenRecipePacket.class, "ServerboundRecipeBookSeenRecipePacket"); - C2S_PACKETS_R.put("ServerboundRecipeBookSeenRecipePacket", net.minecraft.network.protocol.game.ServerboundRecipeBookSeenRecipePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundRenameItemPacket.class, "ServerboundRenameItemPacket"); - C2S_PACKETS_R.put("ServerboundRenameItemPacket", net.minecraft.network.protocol.game.ServerboundRenameItemPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.common.ServerboundResourcePackPacket.class, "ServerboundResourcePackPacket"); - C2S_PACKETS_R.put("ServerboundResourcePackPacket", net.minecraft.network.protocol.common.ServerboundResourcePackPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSeenAdvancementsPacket.class, "ServerboundSeenAdvancementsPacket"); - C2S_PACKETS_R.put("ServerboundSeenAdvancementsPacket", net.minecraft.network.protocol.game.ServerboundSeenAdvancementsPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSelectBundleItemPacket.class, "ServerboundSelectBundleItemPacket"); - C2S_PACKETS_R.put("ServerboundSelectBundleItemPacket", net.minecraft.network.protocol.game.ServerboundSelectBundleItemPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.configuration.ServerboundSelectKnownPacks.class, "ServerboundSelectKnownPacks"); - C2S_PACKETS_R.put("ServerboundSelectKnownPacks", net.minecraft.network.protocol.configuration.ServerboundSelectKnownPacks.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSelectTradePacket.class, "ServerboundSelectTradePacket"); - C2S_PACKETS_R.put("ServerboundSelectTradePacket", net.minecraft.network.protocol.game.ServerboundSelectTradePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetBeaconPacket.class, "ServerboundSetBeaconPacket"); - C2S_PACKETS_R.put("ServerboundSetBeaconPacket", net.minecraft.network.protocol.game.ServerboundSetBeaconPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetCarriedItemPacket.class, "ServerboundSetCarriedItemPacket"); - C2S_PACKETS_R.put("ServerboundSetCarriedItemPacket", net.minecraft.network.protocol.game.ServerboundSetCarriedItemPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetCommandBlockPacket.class, "ServerboundSetCommandBlockPacket"); - C2S_PACKETS_R.put("ServerboundSetCommandBlockPacket", net.minecraft.network.protocol.game.ServerboundSetCommandBlockPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetCommandMinecartPacket.class, "ServerboundSetCommandMinecartPacket"); - C2S_PACKETS_R.put("ServerboundSetCommandMinecartPacket", net.minecraft.network.protocol.game.ServerboundSetCommandMinecartPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetCreativeModeSlotPacket.class, "ServerboundSetCreativeModeSlotPacket"); - C2S_PACKETS_R.put("ServerboundSetCreativeModeSlotPacket", net.minecraft.network.protocol.game.ServerboundSetCreativeModeSlotPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetGameRulePacket.class, "ServerboundSetGameRulePacket"); - C2S_PACKETS_R.put("ServerboundSetGameRulePacket", net.minecraft.network.protocol.game.ServerboundSetGameRulePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetJigsawBlockPacket.class, "ServerboundSetJigsawBlockPacket"); - C2S_PACKETS_R.put("ServerboundSetJigsawBlockPacket", net.minecraft.network.protocol.game.ServerboundSetJigsawBlockPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetStructureBlockPacket.class, "ServerboundSetStructureBlockPacket"); - C2S_PACKETS_R.put("ServerboundSetStructureBlockPacket", net.minecraft.network.protocol.game.ServerboundSetStructureBlockPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSetTestBlockPacket.class, "ServerboundSetTestBlockPacket"); - C2S_PACKETS_R.put("ServerboundSetTestBlockPacket", net.minecraft.network.protocol.game.ServerboundSetTestBlockPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSignUpdatePacket.class, "ServerboundSignUpdatePacket"); - C2S_PACKETS_R.put("ServerboundSignUpdatePacket", net.minecraft.network.protocol.game.ServerboundSignUpdatePacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSpectateEntityPacket.class, "ServerboundSpectateEntityPacket"); - C2S_PACKETS_R.put("ServerboundSpectateEntityPacket", net.minecraft.network.protocol.game.ServerboundSpectateEntityPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.status.ServerboundStatusRequestPacket.class, "ServerboundStatusRequestPacket"); - C2S_PACKETS_R.put("ServerboundStatusRequestPacket", net.minecraft.network.protocol.status.ServerboundStatusRequestPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundSwingPacket.class, "ServerboundSwingPacket"); - C2S_PACKETS_R.put("ServerboundSwingPacket", net.minecraft.network.protocol.game.ServerboundSwingPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundTeleportToEntityPacket.class, "ServerboundTeleportToEntityPacket"); - C2S_PACKETS_R.put("ServerboundTeleportToEntityPacket", net.minecraft.network.protocol.game.ServerboundTeleportToEntityPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundTestInstanceBlockActionPacket.class, "ServerboundTestInstanceBlockActionPacket"); - C2S_PACKETS_R.put("ServerboundTestInstanceBlockActionPacket", net.minecraft.network.protocol.game.ServerboundTestInstanceBlockActionPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.class, "ServerboundUseItemOnPacket"); - C2S_PACKETS_R.put("ServerboundUseItemOnPacket", net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundUseItemPacket.class, "ServerboundUseItemPacket"); - C2S_PACKETS_R.put("ServerboundUseItemPacket", net.minecraft.network.protocol.game.ServerboundUseItemPacket.class); - C2S_PACKETS.put(net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.StatusOnly.class, "ServerboundMovePlayerPacket.StatusOnly"); - C2S_PACKETS_R.put("ServerboundMovePlayerPacket.StatusOnly", net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.StatusOnly.class); + public static Set>> getServerboundPackets() { + return SERVERBOUND_PACKETS; + } - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundAddEntityPacket.class, "ClientboundAddEntityPacket"); - S2C_PACKETS_R.put("ClientboundAddEntityPacket", net.minecraft.network.protocol.game.ClientboundAddEntityPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundAnimatePacket.class, "ClientboundAnimatePacket"); - S2C_PACKETS_R.put("ClientboundAnimatePacket", net.minecraft.network.protocol.game.ClientboundAnimatePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundAwardStatsPacket.class, "ClientboundAwardStatsPacket"); - S2C_PACKETS_R.put("ClientboundAwardStatsPacket", net.minecraft.network.protocol.game.ClientboundAwardStatsPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundBlockChangedAckPacket.class, "ClientboundBlockChangedAckPacket"); - S2C_PACKETS_R.put("ClientboundBlockChangedAckPacket", net.minecraft.network.protocol.game.ClientboundBlockChangedAckPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundBlockDestructionPacket.class, "ClientboundBlockDestructionPacket"); - S2C_PACKETS_R.put("ClientboundBlockDestructionPacket", net.minecraft.network.protocol.game.ClientboundBlockDestructionPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket.class, "ClientboundBlockEntityDataPacket"); - S2C_PACKETS_R.put("ClientboundBlockEntityDataPacket", net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundBlockEventPacket.class, "ClientboundBlockEventPacket"); - S2C_PACKETS_R.put("ClientboundBlockEventPacket", net.minecraft.network.protocol.game.ClientboundBlockEventPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket.class, "ClientboundBlockUpdatePacket"); - S2C_PACKETS_R.put("ClientboundBlockUpdatePacket", net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundBossEventPacket.class, "ClientboundBossEventPacket"); - S2C_PACKETS_R.put("ClientboundBossEventPacket", net.minecraft.network.protocol.game.ClientboundBossEventPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundBundleDelimiterPacket.class, "ClientboundBundleDelimiterPacket"); - S2C_PACKETS_R.put("ClientboundBundleDelimiterPacket", net.minecraft.network.protocol.game.ClientboundBundleDelimiterPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundBundlePacket.class, "ClientboundBundlePacket"); - S2C_PACKETS_R.put("ClientboundBundlePacket", net.minecraft.network.protocol.game.ClientboundBundlePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundChangeDifficultyPacket.class, "ClientboundChangeDifficultyPacket"); - S2C_PACKETS_R.put("ClientboundChangeDifficultyPacket", net.minecraft.network.protocol.game.ClientboundChangeDifficultyPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundChunkBatchFinishedPacket.class, "ClientboundChunkBatchFinishedPacket"); - S2C_PACKETS_R.put("ClientboundChunkBatchFinishedPacket", net.minecraft.network.protocol.game.ClientboundChunkBatchFinishedPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundChunkBatchStartPacket.class, "ClientboundChunkBatchStartPacket"); - S2C_PACKETS_R.put("ClientboundChunkBatchStartPacket", net.minecraft.network.protocol.game.ClientboundChunkBatchStartPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundChunksBiomesPacket.class, "ClientboundChunksBiomesPacket"); - S2C_PACKETS_R.put("ClientboundChunksBiomesPacket", net.minecraft.network.protocol.game.ClientboundChunksBiomesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundClearDialogPacket.class, "ClientboundClearDialogPacket"); - S2C_PACKETS_R.put("ClientboundClearDialogPacket", net.minecraft.network.protocol.common.ClientboundClearDialogPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundClearTitlesPacket.class, "ClientboundClearTitlesPacket"); - S2C_PACKETS_R.put("ClientboundClearTitlesPacket", net.minecraft.network.protocol.game.ClientboundClearTitlesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.configuration.ClientboundCodeOfConductPacket.class, "ClientboundCodeOfConductPacket"); - S2C_PACKETS_R.put("ClientboundCodeOfConductPacket", net.minecraft.network.protocol.configuration.ClientboundCodeOfConductPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundCommandSuggestionsPacket.class, "ClientboundCommandSuggestionsPacket"); - S2C_PACKETS_R.put("ClientboundCommandSuggestionsPacket", net.minecraft.network.protocol.game.ClientboundCommandSuggestionsPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundCommandsPacket.class, "ClientboundCommandsPacket"); - S2C_PACKETS_R.put("ClientboundCommandsPacket", net.minecraft.network.protocol.game.ClientboundCommandsPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundContainerClosePacket.class, "ClientboundContainerClosePacket"); - S2C_PACKETS_R.put("ClientboundContainerClosePacket", net.minecraft.network.protocol.game.ClientboundContainerClosePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket.class, "ClientboundContainerSetContentPacket"); - S2C_PACKETS_R.put("ClientboundContainerSetContentPacket", net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundContainerSetDataPacket.class, "ClientboundContainerSetDataPacket"); - S2C_PACKETS_R.put("ClientboundContainerSetDataPacket", net.minecraft.network.protocol.game.ClientboundContainerSetDataPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket.class, "ClientboundContainerSetSlotPacket"); - S2C_PACKETS_R.put("ClientboundContainerSetSlotPacket", net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.cookie.ClientboundCookieRequestPacket.class, "ClientboundCookieRequestPacket"); - S2C_PACKETS_R.put("ClientboundCookieRequestPacket", net.minecraft.network.protocol.cookie.ClientboundCookieRequestPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundCooldownPacket.class, "ClientboundCooldownPacket"); - S2C_PACKETS_R.put("ClientboundCooldownPacket", net.minecraft.network.protocol.game.ClientboundCooldownPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundCustomChatCompletionsPacket.class, "ClientboundCustomChatCompletionsPacket"); - S2C_PACKETS_R.put("ClientboundCustomChatCompletionsPacket", net.minecraft.network.protocol.game.ClientboundCustomChatCompletionsPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket.class, "ClientboundCustomPayloadPacket"); - S2C_PACKETS_R.put("ClientboundCustomPayloadPacket", net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.login.ClientboundCustomQueryPacket.class, "ClientboundCustomQueryPacket"); - S2C_PACKETS_R.put("ClientboundCustomQueryPacket", net.minecraft.network.protocol.login.ClientboundCustomQueryPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundCustomReportDetailsPacket.class, "ClientboundCustomReportDetailsPacket"); - S2C_PACKETS_R.put("ClientboundCustomReportDetailsPacket", net.minecraft.network.protocol.common.ClientboundCustomReportDetailsPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundDamageEventPacket.class, "ClientboundDamageEventPacket"); - S2C_PACKETS_R.put("ClientboundDamageEventPacket", net.minecraft.network.protocol.game.ClientboundDamageEventPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundDebugBlockValuePacket.class, "ClientboundDebugBlockValuePacket"); - S2C_PACKETS_R.put("ClientboundDebugBlockValuePacket", net.minecraft.network.protocol.game.ClientboundDebugBlockValuePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundDebugChunkValuePacket.class, "ClientboundDebugChunkValuePacket"); - S2C_PACKETS_R.put("ClientboundDebugChunkValuePacket", net.minecraft.network.protocol.game.ClientboundDebugChunkValuePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundDebugEntityValuePacket.class, "ClientboundDebugEntityValuePacket"); - S2C_PACKETS_R.put("ClientboundDebugEntityValuePacket", net.minecraft.network.protocol.game.ClientboundDebugEntityValuePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundDebugEventPacket.class, "ClientboundDebugEventPacket"); - S2C_PACKETS_R.put("ClientboundDebugEventPacket", net.minecraft.network.protocol.game.ClientboundDebugEventPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundDebugSamplePacket.class, "ClientboundDebugSamplePacket"); - S2C_PACKETS_R.put("ClientboundDebugSamplePacket", net.minecraft.network.protocol.game.ClientboundDebugSamplePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundDeleteChatPacket.class, "ClientboundDeleteChatPacket"); - S2C_PACKETS_R.put("ClientboundDeleteChatPacket", net.minecraft.network.protocol.game.ClientboundDeleteChatPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundDisconnectPacket.class, "ClientboundDisconnectPacket"); - S2C_PACKETS_R.put("ClientboundDisconnectPacket", net.minecraft.network.protocol.common.ClientboundDisconnectPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket.class, "ClientboundDisguisedChatPacket"); - S2C_PACKETS_R.put("ClientboundDisguisedChatPacket", net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundEntityEventPacket.class, "ClientboundEntityEventPacket"); - S2C_PACKETS_R.put("ClientboundEntityEventPacket", net.minecraft.network.protocol.game.ClientboundEntityEventPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundEntityPositionSyncPacket.class, "ClientboundEntityPositionSyncPacket"); - S2C_PACKETS_R.put("ClientboundEntityPositionSyncPacket", net.minecraft.network.protocol.game.ClientboundEntityPositionSyncPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundExplodePacket.class, "ClientboundExplodePacket"); - S2C_PACKETS_R.put("ClientboundExplodePacket", net.minecraft.network.protocol.game.ClientboundExplodePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.configuration.ClientboundFinishConfigurationPacket.class, "ClientboundFinishConfigurationPacket"); - S2C_PACKETS_R.put("ClientboundFinishConfigurationPacket", net.minecraft.network.protocol.configuration.ClientboundFinishConfigurationPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundForgetLevelChunkPacket.class, "ClientboundForgetLevelChunkPacket"); - S2C_PACKETS_R.put("ClientboundForgetLevelChunkPacket", net.minecraft.network.protocol.game.ClientboundForgetLevelChunkPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundGameEventPacket.class, "ClientboundGameEventPacket"); - S2C_PACKETS_R.put("ClientboundGameEventPacket", net.minecraft.network.protocol.game.ClientboundGameEventPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundGameRuleValuesPacket.class, "ClientboundGameRuleValuesPacket"); - S2C_PACKETS_R.put("ClientboundGameRuleValuesPacket", net.minecraft.network.protocol.game.ClientboundGameRuleValuesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundGameTestHighlightPosPacket.class, "ClientboundGameTestHighlightPosPacket"); - S2C_PACKETS_R.put("ClientboundGameTestHighlightPosPacket", net.minecraft.network.protocol.game.ClientboundGameTestHighlightPosPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.login.ClientboundHelloPacket.class, "ClientboundHelloPacket"); - S2C_PACKETS_R.put("ClientboundHelloPacket", net.minecraft.network.protocol.login.ClientboundHelloPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundHurtAnimationPacket.class, "ClientboundHurtAnimationPacket"); - S2C_PACKETS_R.put("ClientboundHurtAnimationPacket", net.minecraft.network.protocol.game.ClientboundHurtAnimationPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket.class, "ClientboundInitializeBorderPacket"); - S2C_PACKETS_R.put("ClientboundInitializeBorderPacket", net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundKeepAlivePacket.class, "ClientboundKeepAlivePacket"); - S2C_PACKETS_R.put("ClientboundKeepAlivePacket", net.minecraft.network.protocol.common.ClientboundKeepAlivePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket.class, "ClientboundLevelChunkWithLightPacket"); - S2C_PACKETS_R.put("ClientboundLevelChunkWithLightPacket", net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundLevelEventPacket.class, "ClientboundLevelEventPacket"); - S2C_PACKETS_R.put("ClientboundLevelEventPacket", net.minecraft.network.protocol.game.ClientboundLevelEventPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket.class, "ClientboundLevelParticlesPacket"); - S2C_PACKETS_R.put("ClientboundLevelParticlesPacket", net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundLightUpdatePacket.class, "ClientboundLightUpdatePacket"); - S2C_PACKETS_R.put("ClientboundLightUpdatePacket", net.minecraft.network.protocol.game.ClientboundLightUpdatePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket.class, "ClientboundLoginCompressionPacket"); - S2C_PACKETS_R.put("ClientboundLoginCompressionPacket", net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket.class, "ClientboundLoginDisconnectPacket"); - S2C_PACKETS_R.put("ClientboundLoginDisconnectPacket", net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket.class, "ClientboundLoginFinishedPacket"); - S2C_PACKETS_R.put("ClientboundLoginFinishedPacket", net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundLoginPacket.class, "ClientboundLoginPacket"); - S2C_PACKETS_R.put("ClientboundLoginPacket", net.minecraft.network.protocol.game.ClientboundLoginPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundLowDiskSpaceWarningPacket.class, "ClientboundLowDiskSpaceWarningPacket"); - S2C_PACKETS_R.put("ClientboundLowDiskSpaceWarningPacket", net.minecraft.network.protocol.game.ClientboundLowDiskSpaceWarningPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundMapItemDataPacket.class, "ClientboundMapItemDataPacket"); - S2C_PACKETS_R.put("ClientboundMapItemDataPacket", net.minecraft.network.protocol.game.ClientboundMapItemDataPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundMerchantOffersPacket.class, "ClientboundMerchantOffersPacket"); - S2C_PACKETS_R.put("ClientboundMerchantOffersPacket", net.minecraft.network.protocol.game.ClientboundMerchantOffersPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundMountScreenOpenPacket.class, "ClientboundMountScreenOpenPacket"); - S2C_PACKETS_R.put("ClientboundMountScreenOpenPacket", net.minecraft.network.protocol.game.ClientboundMountScreenOpenPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundMoveMinecartPacket.class, "ClientboundMoveMinecartPacket"); - S2C_PACKETS_R.put("ClientboundMoveMinecartPacket", net.minecraft.network.protocol.game.ClientboundMoveMinecartPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundMoveVehiclePacket.class, "ClientboundMoveVehiclePacket"); - S2C_PACKETS_R.put("ClientboundMoveVehiclePacket", net.minecraft.network.protocol.game.ClientboundMoveVehiclePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundOpenBookPacket.class, "ClientboundOpenBookPacket"); - S2C_PACKETS_R.put("ClientboundOpenBookPacket", net.minecraft.network.protocol.game.ClientboundOpenBookPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundOpenScreenPacket.class, "ClientboundOpenScreenPacket"); - S2C_PACKETS_R.put("ClientboundOpenScreenPacket", net.minecraft.network.protocol.game.ClientboundOpenScreenPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundOpenSignEditorPacket.class, "ClientboundOpenSignEditorPacket"); - S2C_PACKETS_R.put("ClientboundOpenSignEditorPacket", net.minecraft.network.protocol.game.ClientboundOpenSignEditorPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundPingPacket.class, "ClientboundPingPacket"); - S2C_PACKETS_R.put("ClientboundPingPacket", net.minecraft.network.protocol.common.ClientboundPingPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlaceGhostRecipePacket.class, "ClientboundPlaceGhostRecipePacket"); - S2C_PACKETS_R.put("ClientboundPlaceGhostRecipePacket", net.minecraft.network.protocol.game.ClientboundPlaceGhostRecipePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket.class, "ClientboundPlayerAbilitiesPacket"); - S2C_PACKETS_R.put("ClientboundPlayerAbilitiesPacket", net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerChatPacket.class, "ClientboundPlayerChatPacket"); - S2C_PACKETS_R.put("ClientboundPlayerChatPacket", net.minecraft.network.protocol.game.ClientboundPlayerChatPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerCombatEndPacket.class, "ClientboundPlayerCombatEndPacket"); - S2C_PACKETS_R.put("ClientboundPlayerCombatEndPacket", net.minecraft.network.protocol.game.ClientboundPlayerCombatEndPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerCombatEnterPacket.class, "ClientboundPlayerCombatEnterPacket"); - S2C_PACKETS_R.put("ClientboundPlayerCombatEnterPacket", net.minecraft.network.protocol.game.ClientboundPlayerCombatEnterPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket.class, "ClientboundPlayerCombatKillPacket"); - S2C_PACKETS_R.put("ClientboundPlayerCombatKillPacket", net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket.class, "ClientboundPlayerInfoRemovePacket"); - S2C_PACKETS_R.put("ClientboundPlayerInfoRemovePacket", net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket.class, "ClientboundPlayerInfoUpdatePacket"); - S2C_PACKETS_R.put("ClientboundPlayerInfoUpdatePacket", net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerLookAtPacket.class, "ClientboundPlayerLookAtPacket"); - S2C_PACKETS_R.put("ClientboundPlayerLookAtPacket", net.minecraft.network.protocol.game.ClientboundPlayerLookAtPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket.class, "ClientboundPlayerPositionPacket"); - S2C_PACKETS_R.put("ClientboundPlayerPositionPacket", net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundPlayerRotationPacket.class, "ClientboundPlayerRotationPacket"); - S2C_PACKETS_R.put("ClientboundPlayerRotationPacket", net.minecraft.network.protocol.game.ClientboundPlayerRotationPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.ping.ClientboundPongResponsePacket.class, "ClientboundPongResponsePacket"); - S2C_PACKETS_R.put("ClientboundPongResponsePacket", net.minecraft.network.protocol.ping.ClientboundPongResponsePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundProjectilePowerPacket.class, "ClientboundProjectilePowerPacket"); - S2C_PACKETS_R.put("ClientboundProjectilePowerPacket", net.minecraft.network.protocol.game.ClientboundProjectilePowerPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundRecipeBookAddPacket.class, "ClientboundRecipeBookAddPacket"); - S2C_PACKETS_R.put("ClientboundRecipeBookAddPacket", net.minecraft.network.protocol.game.ClientboundRecipeBookAddPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundRecipeBookRemovePacket.class, "ClientboundRecipeBookRemovePacket"); - S2C_PACKETS_R.put("ClientboundRecipeBookRemovePacket", net.minecraft.network.protocol.game.ClientboundRecipeBookRemovePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundRecipeBookSettingsPacket.class, "ClientboundRecipeBookSettingsPacket"); - S2C_PACKETS_R.put("ClientboundRecipeBookSettingsPacket", net.minecraft.network.protocol.game.ClientboundRecipeBookSettingsPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.configuration.ClientboundRegistryDataPacket.class, "ClientboundRegistryDataPacket"); - S2C_PACKETS_R.put("ClientboundRegistryDataPacket", net.minecraft.network.protocol.configuration.ClientboundRegistryDataPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket.class, "ClientboundRemoveEntitiesPacket"); - S2C_PACKETS_R.put("ClientboundRemoveEntitiesPacket", net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundRemoveMobEffectPacket.class, "ClientboundRemoveMobEffectPacket"); - S2C_PACKETS_R.put("ClientboundRemoveMobEffectPacket", net.minecraft.network.protocol.game.ClientboundRemoveMobEffectPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.configuration.ClientboundResetChatPacket.class, "ClientboundResetChatPacket"); - S2C_PACKETS_R.put("ClientboundResetChatPacket", net.minecraft.network.protocol.configuration.ClientboundResetChatPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundResetScorePacket.class, "ClientboundResetScorePacket"); - S2C_PACKETS_R.put("ClientboundResetScorePacket", net.minecraft.network.protocol.game.ClientboundResetScorePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket.class, "ClientboundResourcePackPopPacket"); - S2C_PACKETS_R.put("ClientboundResourcePackPopPacket", net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundResourcePackPushPacket.class, "ClientboundResourcePackPushPacket"); - S2C_PACKETS_R.put("ClientboundResourcePackPushPacket", net.minecraft.network.protocol.common.ClientboundResourcePackPushPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundRespawnPacket.class, "ClientboundRespawnPacket"); - S2C_PACKETS_R.put("ClientboundRespawnPacket", net.minecraft.network.protocol.game.ClientboundRespawnPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundRotateHeadPacket.class, "ClientboundRotateHeadPacket"); - S2C_PACKETS_R.put("ClientboundRotateHeadPacket", net.minecraft.network.protocol.game.ClientboundRotateHeadPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket.class, "ClientboundSectionBlocksUpdatePacket"); - S2C_PACKETS_R.put("ClientboundSectionBlocksUpdatePacket", net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSelectAdvancementsTabPacket.class, "ClientboundSelectAdvancementsTabPacket"); - S2C_PACKETS_R.put("ClientboundSelectAdvancementsTabPacket", net.minecraft.network.protocol.game.ClientboundSelectAdvancementsTabPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.configuration.ClientboundSelectKnownPacks.class, "ClientboundSelectKnownPacks"); - S2C_PACKETS_R.put("ClientboundSelectKnownPacks", net.minecraft.network.protocol.configuration.ClientboundSelectKnownPacks.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundServerDataPacket.class, "ClientboundServerDataPacket"); - S2C_PACKETS_R.put("ClientboundServerDataPacket", net.minecraft.network.protocol.game.ClientboundServerDataPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundServerLinksPacket.class, "ClientboundServerLinksPacket"); - S2C_PACKETS_R.put("ClientboundServerLinksPacket", net.minecraft.network.protocol.common.ClientboundServerLinksPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetActionBarTextPacket.class, "ClientboundSetActionBarTextPacket"); - S2C_PACKETS_R.put("ClientboundSetActionBarTextPacket", net.minecraft.network.protocol.game.ClientboundSetActionBarTextPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetBorderCenterPacket.class, "ClientboundSetBorderCenterPacket"); - S2C_PACKETS_R.put("ClientboundSetBorderCenterPacket", net.minecraft.network.protocol.game.ClientboundSetBorderCenterPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetBorderLerpSizePacket.class, "ClientboundSetBorderLerpSizePacket"); - S2C_PACKETS_R.put("ClientboundSetBorderLerpSizePacket", net.minecraft.network.protocol.game.ClientboundSetBorderLerpSizePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetBorderSizePacket.class, "ClientboundSetBorderSizePacket"); - S2C_PACKETS_R.put("ClientboundSetBorderSizePacket", net.minecraft.network.protocol.game.ClientboundSetBorderSizePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetBorderWarningDelayPacket.class, "ClientboundSetBorderWarningDelayPacket"); - S2C_PACKETS_R.put("ClientboundSetBorderWarningDelayPacket", net.minecraft.network.protocol.game.ClientboundSetBorderWarningDelayPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetBorderWarningDistancePacket.class, "ClientboundSetBorderWarningDistancePacket"); - S2C_PACKETS_R.put("ClientboundSetBorderWarningDistancePacket", net.minecraft.network.protocol.game.ClientboundSetBorderWarningDistancePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetCameraPacket.class, "ClientboundSetCameraPacket"); - S2C_PACKETS_R.put("ClientboundSetCameraPacket", net.minecraft.network.protocol.game.ClientboundSetCameraPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket.class, "ClientboundSetChunkCacheCenterPacket"); - S2C_PACKETS_R.put("ClientboundSetChunkCacheCenterPacket", net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetChunkCacheRadiusPacket.class, "ClientboundSetChunkCacheRadiusPacket"); - S2C_PACKETS_R.put("ClientboundSetChunkCacheRadiusPacket", net.minecraft.network.protocol.game.ClientboundSetChunkCacheRadiusPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetCursorItemPacket.class, "ClientboundSetCursorItemPacket"); - S2C_PACKETS_R.put("ClientboundSetCursorItemPacket", net.minecraft.network.protocol.game.ClientboundSetCursorItemPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetDefaultSpawnPositionPacket.class, "ClientboundSetDefaultSpawnPositionPacket"); - S2C_PACKETS_R.put("ClientboundSetDefaultSpawnPositionPacket", net.minecraft.network.protocol.game.ClientboundSetDefaultSpawnPositionPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetDisplayObjectivePacket.class, "ClientboundSetDisplayObjectivePacket"); - S2C_PACKETS_R.put("ClientboundSetDisplayObjectivePacket", net.minecraft.network.protocol.game.ClientboundSetDisplayObjectivePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket.class, "ClientboundSetEntityDataPacket"); - S2C_PACKETS_R.put("ClientboundSetEntityDataPacket", net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetEntityLinkPacket.class, "ClientboundSetEntityLinkPacket"); - S2C_PACKETS_R.put("ClientboundSetEntityLinkPacket", net.minecraft.network.protocol.game.ClientboundSetEntityLinkPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket.class, "ClientboundSetEntityMotionPacket"); - S2C_PACKETS_R.put("ClientboundSetEntityMotionPacket", net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket.class, "ClientboundSetEquipmentPacket"); - S2C_PACKETS_R.put("ClientboundSetEquipmentPacket", net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetExperiencePacket.class, "ClientboundSetExperiencePacket"); - S2C_PACKETS_R.put("ClientboundSetExperiencePacket", net.minecraft.network.protocol.game.ClientboundSetExperiencePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetHealthPacket.class, "ClientboundSetHealthPacket"); - S2C_PACKETS_R.put("ClientboundSetHealthPacket", net.minecraft.network.protocol.game.ClientboundSetHealthPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetHeldSlotPacket.class, "ClientboundSetHeldSlotPacket"); - S2C_PACKETS_R.put("ClientboundSetHeldSlotPacket", net.minecraft.network.protocol.game.ClientboundSetHeldSlotPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetObjectivePacket.class, "ClientboundSetObjectivePacket"); - S2C_PACKETS_R.put("ClientboundSetObjectivePacket", net.minecraft.network.protocol.game.ClientboundSetObjectivePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetPassengersPacket.class, "ClientboundSetPassengersPacket"); - S2C_PACKETS_R.put("ClientboundSetPassengersPacket", net.minecraft.network.protocol.game.ClientboundSetPassengersPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetPlayerInventoryPacket.class, "ClientboundSetPlayerInventoryPacket"); - S2C_PACKETS_R.put("ClientboundSetPlayerInventoryPacket", net.minecraft.network.protocol.game.ClientboundSetPlayerInventoryPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket.class, "ClientboundSetPlayerTeamPacket"); - S2C_PACKETS_R.put("ClientboundSetPlayerTeamPacket", net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetScorePacket.class, "ClientboundSetScorePacket"); - S2C_PACKETS_R.put("ClientboundSetScorePacket", net.minecraft.network.protocol.game.ClientboundSetScorePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetSimulationDistancePacket.class, "ClientboundSetSimulationDistancePacket"); - S2C_PACKETS_R.put("ClientboundSetSimulationDistancePacket", net.minecraft.network.protocol.game.ClientboundSetSimulationDistancePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket.class, "ClientboundSetSubtitleTextPacket"); - S2C_PACKETS_R.put("ClientboundSetSubtitleTextPacket", net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetTimePacket.class, "ClientboundSetTimePacket"); - S2C_PACKETS_R.put("ClientboundSetTimePacket", net.minecraft.network.protocol.game.ClientboundSetTimePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetTitleTextPacket.class, "ClientboundSetTitleTextPacket"); - S2C_PACKETS_R.put("ClientboundSetTitleTextPacket", net.minecraft.network.protocol.game.ClientboundSetTitleTextPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSetTitlesAnimationPacket.class, "ClientboundSetTitlesAnimationPacket"); - S2C_PACKETS_R.put("ClientboundSetTitlesAnimationPacket", net.minecraft.network.protocol.game.ClientboundSetTitlesAnimationPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundShowDialogPacket.class, "ClientboundShowDialogPacket"); - S2C_PACKETS_R.put("ClientboundShowDialogPacket", net.minecraft.network.protocol.common.ClientboundShowDialogPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSoundEntityPacket.class, "ClientboundSoundEntityPacket"); - S2C_PACKETS_R.put("ClientboundSoundEntityPacket", net.minecraft.network.protocol.game.ClientboundSoundEntityPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSoundPacket.class, "ClientboundSoundPacket"); - S2C_PACKETS_R.put("ClientboundSoundPacket", net.minecraft.network.protocol.game.ClientboundSoundPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundStartConfigurationPacket.class, "ClientboundStartConfigurationPacket"); - S2C_PACKETS_R.put("ClientboundStartConfigurationPacket", net.minecraft.network.protocol.game.ClientboundStartConfigurationPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.status.ClientboundStatusResponsePacket.class, "ClientboundStatusResponsePacket"); - S2C_PACKETS_R.put("ClientboundStatusResponsePacket", net.minecraft.network.protocol.status.ClientboundStatusResponsePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundStopSoundPacket.class, "ClientboundStopSoundPacket"); - S2C_PACKETS_R.put("ClientboundStopSoundPacket", net.minecraft.network.protocol.game.ClientboundStopSoundPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundStoreCookiePacket.class, "ClientboundStoreCookiePacket"); - S2C_PACKETS_R.put("ClientboundStoreCookiePacket", net.minecraft.network.protocol.common.ClientboundStoreCookiePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundSystemChatPacket.class, "ClientboundSystemChatPacket"); - S2C_PACKETS_R.put("ClientboundSystemChatPacket", net.minecraft.network.protocol.game.ClientboundSystemChatPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundTabListPacket.class, "ClientboundTabListPacket"); - S2C_PACKETS_R.put("ClientboundTabListPacket", net.minecraft.network.protocol.game.ClientboundTabListPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundTagQueryPacket.class, "ClientboundTagQueryPacket"); - S2C_PACKETS_R.put("ClientboundTagQueryPacket", net.minecraft.network.protocol.game.ClientboundTagQueryPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundTakeItemEntityPacket.class, "ClientboundTakeItemEntityPacket"); - S2C_PACKETS_R.put("ClientboundTakeItemEntityPacket", net.minecraft.network.protocol.game.ClientboundTakeItemEntityPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket.class, "ClientboundTeleportEntityPacket"); - S2C_PACKETS_R.put("ClientboundTeleportEntityPacket", net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundTestInstanceBlockStatus.class, "ClientboundTestInstanceBlockStatus"); - S2C_PACKETS_R.put("ClientboundTestInstanceBlockStatus", net.minecraft.network.protocol.game.ClientboundTestInstanceBlockStatus.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundTickingStatePacket.class, "ClientboundTickingStatePacket"); - S2C_PACKETS_R.put("ClientboundTickingStatePacket", net.minecraft.network.protocol.game.ClientboundTickingStatePacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundTickingStepPacket.class, "ClientboundTickingStepPacket"); - S2C_PACKETS_R.put("ClientboundTickingStepPacket", net.minecraft.network.protocol.game.ClientboundTickingStepPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundTrackedWaypointPacket.class, "ClientboundTrackedWaypointPacket"); - S2C_PACKETS_R.put("ClientboundTrackedWaypointPacket", net.minecraft.network.protocol.game.ClientboundTrackedWaypointPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundTransferPacket.class, "ClientboundTransferPacket"); - S2C_PACKETS_R.put("ClientboundTransferPacket", net.minecraft.network.protocol.common.ClientboundTransferPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket.class, "ClientboundUpdateAdvancementsPacket"); - S2C_PACKETS_R.put("ClientboundUpdateAdvancementsPacket", net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundUpdateAttributesPacket.class, "ClientboundUpdateAttributesPacket"); - S2C_PACKETS_R.put("ClientboundUpdateAttributesPacket", net.minecraft.network.protocol.game.ClientboundUpdateAttributesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.configuration.ClientboundUpdateEnabledFeaturesPacket.class, "ClientboundUpdateEnabledFeaturesPacket"); - S2C_PACKETS_R.put("ClientboundUpdateEnabledFeaturesPacket", net.minecraft.network.protocol.configuration.ClientboundUpdateEnabledFeaturesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundUpdateMobEffectPacket.class, "ClientboundUpdateMobEffectPacket"); - S2C_PACKETS_R.put("ClientboundUpdateMobEffectPacket", net.minecraft.network.protocol.game.ClientboundUpdateMobEffectPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket.class, "ClientboundUpdateRecipesPacket"); - S2C_PACKETS_R.put("ClientboundUpdateRecipesPacket", net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.common.ClientboundUpdateTagsPacket.class, "ClientboundUpdateTagsPacket"); - S2C_PACKETS_R.put("ClientboundUpdateTagsPacket", net.minecraft.network.protocol.common.ClientboundUpdateTagsPacket.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.Pos.class, "ClientboundMoveEntityPacket.Pos"); - S2C_PACKETS_R.put("ClientboundMoveEntityPacket.Pos", net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.Pos.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.PosRot.class, "ClientboundMoveEntityPacket.PosRot"); - S2C_PACKETS_R.put("ClientboundMoveEntityPacket.PosRot", net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.PosRot.class); - S2C_PACKETS.put(net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.Rot.class, "ClientboundMoveEntityPacket.Rot"); - S2C_PACKETS_R.put("ClientboundMoveEntityPacket.Rot", net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.Rot.class); + public static @Nullable PacketType> getClientboundPacket(Identifier id) { + return CLIENTBOUND_PACKETS_MAP.get(id); } - private PacketUtils() { + public static @Nullable PacketType> getServerboundPacket(Identifier id) { + return SERVERBOUND_PACKETS_MAP.get(id); } - public static String getName(Class> packetClass) { - String name = S2C_PACKETS.get(packetClass); - if (name != null) return name; - return C2S_PACKETS.get(packetClass); + public static @Nullable PacketType> getPacket(Identifier id) { + @Nullable PacketType> clientbound = getClientboundPacket(id); + return clientbound != null ? clientbound : getServerboundPacket(id); } - public static Class> getPacket(String name) { - Class> packet = S2C_PACKETS_R.get(name); - if (packet != null) return packet; - return C2S_PACKETS_R.get(name); + public static @Nullable PacketType> getPacket(String name) { + if (name.startsWith("clientbound/")) { + @Nullable Identifier identifier = Identifier.tryParse(name.substring(12)); + return CLIENTBOUND_PACKETS_MAP.get(identifier); + } + + if (name.startsWith("serverbound/")) { + @Nullable Identifier identifier = Identifier.tryParse(name.substring(12)); + return SERVERBOUND_PACKETS_MAP.get(identifier); + } + + @Nullable Identifier identifier = Identifier.tryParse(name); + if (identifier != null) { + @Nullable PacketType> type = getPacket(identifier); + if (type != null) return type; + } + + return LEGACY_PACKET_MAPPINGS.get(name); } - public static Set>> getS2CPackets() { - return S2C_PACKETS.keySet(); + static { + ImmutableMap.Builder<@NotNull Identifier, @NotNull PacketType>> clientbound = ImmutableMap.builder(); + ImmutableMap.Builder<@NotNull Identifier, @NotNull PacketType>> serverbound = ImmutableMap.builder(); + + Stream.of( + StatusProtocols.CLIENTBOUND_TEMPLATE, + LoginProtocols.CLIENTBOUND_TEMPLATE, + ConfigurationProtocols.CLIENTBOUND_TEMPLATE, + GameProtocols.CLIENTBOUND_TEMPLATE + ).map(ProtocolInfo.DetailsProvider::details) + .forEach(details -> details.listPackets((type, _) -> clientbound.put(type.id(), type))); + + Stream.of( + HandshakeProtocols.SERVERBOUND_TEMPLATE, + StatusProtocols.SERVERBOUND_TEMPLATE, + LoginProtocols.SERVERBOUND_TEMPLATE, + ConfigurationProtocols.SERVERBOUND_TEMPLATE, + GameProtocols.SERVERBOUND_TEMPLATE + ).map(ProtocolInfo.DetailsProvider::details) + .forEach(details -> details.listPackets((type, _) -> serverbound.put(type.id(), type))); + + CLIENTBOUND_PACKETS_MAP = clientbound.buildKeepingLast(); + SERVERBOUND_PACKETS_MAP = serverbound.buildKeepingLast(); + + CLIENTBOUND_PACKETS = Set.copyOf(CLIENTBOUND_PACKETS_MAP.values()); + SERVERBOUND_PACKETS = Set.copyOf(SERVERBOUND_PACKETS_MAP.values()); } - public static Set>> getC2SPackets() { - return C2S_PACKETS.keySet(); + /** + * Maps our legacy packet names to modern packet types. + * @implNote Do not update keys or add entries, only update values. + */ + private static final Map>> LEGACY_PACKET_MAPPINGS; + + static { + ImmutableMap.Builder<@NotNull String, @NotNull PacketType>> builder = ImmutableMap.builder(); + builder.put("ClientIntentionPacket", HandshakePacketTypes.CLIENT_INTENTION); + builder.put("ServerboundMovePlayerPacket.Pos", GamePacketTypes.SERVERBOUND_MOVE_PLAYER_POS); + builder.put("ServerboundMovePlayerPacket.PosRot", GamePacketTypes.SERVERBOUND_MOVE_PLAYER_POS_ROT); + builder.put("ServerboundMovePlayerPacket.Rot", GamePacketTypes.SERVERBOUND_MOVE_PLAYER_ROT); + builder.put("ServerboundAcceptCodeOfConductPacket", ConfigurationPacketTypes.SERVERBOUND_ACCEPT_CODE_OF_CONDUCT); + builder.put("ServerboundAcceptTeleportationPacket", GamePacketTypes.SERVERBOUND_ACCEPT_TELEPORTATION); + builder.put("ServerboundAttackPacket", GamePacketTypes.SERVERBOUND_ATTACK); + builder.put("ServerboundBlockEntityTagQueryPacket", GamePacketTypes.SERVERBOUND_BLOCK_ENTITY_TAG_QUERY); + builder.put("ServerboundChangeDifficultyPacket", GamePacketTypes.SERVERBOUND_CHANGE_DIFFICULTY); + builder.put("ServerboundChangeGameModePacket", GamePacketTypes.SERVERBOUND_CHANGE_GAME_MODE); + builder.put("ServerboundChatAckPacket", GamePacketTypes.SERVERBOUND_CHAT_ACK); + builder.put("ServerboundChatCommandPacket", GamePacketTypes.SERVERBOUND_CHAT_COMMAND); + builder.put("ServerboundChatCommandSignedPacket", GamePacketTypes.SERVERBOUND_CHAT_COMMAND_SIGNED); + builder.put("ServerboundChatPacket", GamePacketTypes.SERVERBOUND_CHAT); + builder.put("ServerboundChatSessionUpdatePacket", GamePacketTypes.SERVERBOUND_CHAT_SESSION_UPDATE); + builder.put("ServerboundChunkBatchReceivedPacket", GamePacketTypes.SERVERBOUND_CHUNK_BATCH_RECEIVED); + builder.put("ServerboundClientCommandPacket", GamePacketTypes.SERVERBOUND_CLIENT_COMMAND); + builder.put("ServerboundClientInformationPacket", CommonPacketTypes.SERVERBOUND_CLIENT_INFORMATION); + builder.put("ServerboundClientTickEndPacket", GamePacketTypes.SERVERBOUND_CLIENT_TICK_END); + builder.put("ServerboundCommandSuggestionPacket", GamePacketTypes.SERVERBOUND_COMMAND_SUGGESTION); + builder.put("ServerboundConfigurationAcknowledgedPacket", GamePacketTypes.SERVERBOUND_CONFIGURATION_ACKNOWLEDGED); + builder.put("ServerboundContainerButtonClickPacket", GamePacketTypes.SERVERBOUND_CONTAINER_BUTTON_CLICK); + builder.put("ServerboundContainerClickPacket", GamePacketTypes.SERVERBOUND_CONTAINER_CLICK); + builder.put("ServerboundContainerClosePacket", GamePacketTypes.SERVERBOUND_CONTAINER_CLOSE); + builder.put("ServerboundContainerSlotStateChangedPacket", GamePacketTypes.SERVERBOUND_CONTAINER_SLOT_STATE_CHANGED); + builder.put("ServerboundCookieResponsePacket", CookiePacketTypes.SERVERBOUND_COOKIE_RESPONSE); + builder.put("ServerboundCustomClickActionPacket", CommonPacketTypes.SERVERBOUND_CUSTOM_CLICK_ACTION); + builder.put("ServerboundCustomPayloadPacket", CommonPacketTypes.SERVERBOUND_CUSTOM_PAYLOAD); + builder.put("ServerboundCustomQueryAnswerPacket", LoginPacketTypes.SERVERBOUND_CUSTOM_QUERY_ANSWER); + builder.put("ServerboundDebugSubscriptionRequestPacket", GamePacketTypes.SERVERBOUND_DEBUG_SUBSCRIPTION_REQUEST); + builder.put("ServerboundEditBookPacket", GamePacketTypes.SERVERBOUND_EDIT_BOOK); + builder.put("ServerboundEntityTagQueryPacket", GamePacketTypes.SERVERBOUND_ENTITY_TAG_QUERY); + builder.put("ServerboundFinishConfigurationPacket", ConfigurationPacketTypes.SERVERBOUND_FINISH_CONFIGURATION); + builder.put("ServerboundHelloPacket", LoginPacketTypes.SERVERBOUND_HELLO); + builder.put("ServerboundInteractPacket", GamePacketTypes.SERVERBOUND_INTERACT); + builder.put("ServerboundJigsawGeneratePacket", GamePacketTypes.SERVERBOUND_JIGSAW_GENERATE); + builder.put("ServerboundKeepAlivePacket", CommonPacketTypes.SERVERBOUND_KEEP_ALIVE); + builder.put("ServerboundKeyPacket", LoginPacketTypes.SERVERBOUND_KEY); + builder.put("ServerboundLockDifficultyPacket", GamePacketTypes.SERVERBOUND_LOCK_DIFFICULTY); + builder.put("ServerboundLoginAcknowledgedPacket", LoginPacketTypes.SERVERBOUND_LOGIN_ACKNOWLEDGED); + builder.put("ServerboundMoveVehiclePacket", GamePacketTypes.SERVERBOUND_MOVE_VEHICLE); + builder.put("ServerboundPaddleBoatPacket", GamePacketTypes.SERVERBOUND_PADDLE_BOAT); + builder.put("ServerboundPickItemFromBlockPacket", GamePacketTypes.SERVERBOUND_PICK_ITEM_FROM_BLOCK); + builder.put("ServerboundPickItemFromEntityPacket", GamePacketTypes.SERVERBOUND_PICK_ITEM_FROM_ENTITY); + builder.put("ServerboundPingRequestPacket", PingPacketTypes.SERVERBOUND_PING_REQUEST); + builder.put("ServerboundPlaceRecipePacket", GamePacketTypes.SERVERBOUND_PLACE_RECIPE); + builder.put("ServerboundPlayerAbilitiesPacket", GamePacketTypes.SERVERBOUND_PLAYER_ABILITIES); + builder.put("ServerboundPlayerActionPacket", GamePacketTypes.SERVERBOUND_PLAYER_ACTION); + builder.put("ServerboundPlayerCommandPacket", GamePacketTypes.SERVERBOUND_PLAYER_COMMAND); + builder.put("ServerboundPlayerInputPacket", GamePacketTypes.SERVERBOUND_PLAYER_INPUT); + builder.put("ServerboundPlayerLoadedPacket", GamePacketTypes.SERVERBOUND_PLAYER_LOADED); + builder.put("ServerboundPongPacket", CommonPacketTypes.SERVERBOUND_PONG); + builder.put("ServerboundRecipeBookChangeSettingsPacket", GamePacketTypes.SERVERBOUND_RECIPE_BOOK_CHANGE_SETTINGS); + builder.put("ServerboundRecipeBookSeenRecipePacket", GamePacketTypes.SERVERBOUND_RECIPE_BOOK_SEEN_RECIPE); + builder.put("ServerboundRenameItemPacket", GamePacketTypes.SERVERBOUND_RENAME_ITEM); + builder.put("ServerboundResourcePackPacket", CommonPacketTypes.SERVERBOUND_RESOURCE_PACK); + builder.put("ServerboundSeenAdvancementsPacket", GamePacketTypes.SERVERBOUND_SEEN_ADVANCEMENTS); + builder.put("ServerboundSelectBundleItemPacket", GamePacketTypes.SERVERBOUND_BUNDLE_ITEM_SELECTED); + builder.put("ServerboundSelectKnownPacks", ConfigurationPacketTypes.SERVERBOUND_SELECT_KNOWN_PACKS); + builder.put("ServerboundSelectTradePacket", GamePacketTypes.SERVERBOUND_SELECT_TRADE); + builder.put("ServerboundSetBeaconPacket", GamePacketTypes.SERVERBOUND_SET_BEACON); + builder.put("ServerboundSetCarriedItemPacket", GamePacketTypes.SERVERBOUND_SET_CARRIED_ITEM); + builder.put("ServerboundSetCommandBlockPacket", GamePacketTypes.SERVERBOUND_SET_COMMAND_BLOCK); + builder.put("ServerboundSetCommandMinecartPacket", GamePacketTypes.SERVERBOUND_SET_COMMAND_MINECART); + builder.put("ServerboundSetCreativeModeSlotPacket", GamePacketTypes.SERVERBOUND_SET_CREATIVE_MODE_SLOT); + builder.put("ServerboundSetGameRulePacket", GamePacketTypes.SERVERBOUND_SET_GAME_RULE); + builder.put("ServerboundSetJigsawBlockPacket", GamePacketTypes.SERVERBOUND_SET_JIGSAW_BLOCK); + builder.put("ServerboundSetStructureBlockPacket", GamePacketTypes.SERVERBOUND_SET_STRUCTURE_BLOCK); + builder.put("ServerboundSetTestBlockPacket", GamePacketTypes.SERVERBOUND_SET_TEST_BLOCK); + builder.put("ServerboundSignUpdatePacket", GamePacketTypes.SERVERBOUND_SIGN_UPDATE); + builder.put("ServerboundSpectateEntityPacket", GamePacketTypes.SERVERBOUND_SPECTATE_ENTITY); + builder.put("ServerboundStatusRequestPacket", StatusPacketTypes.SERVERBOUND_STATUS_REQUEST); + builder.put("ServerboundSwingPacket", GamePacketTypes.SERVERBOUND_SWING); + builder.put("ServerboundTeleportToEntityPacket", GamePacketTypes.SERVERBOUND_TELEPORT_TO_ENTITY); + builder.put("ServerboundTestInstanceBlockActionPacket", GamePacketTypes.SERVERBOUND_TEST_INSTANCE_BLOCK_ACTION); + builder.put("ServerboundUseItemOnPacket", GamePacketTypes.SERVERBOUND_USE_ITEM_ON); + builder.put("ServerboundUseItemPacket", GamePacketTypes.SERVERBOUND_USE_ITEM); + builder.put("ServerboundMovePlayerPacket.StatusOnly", GamePacketTypes.SERVERBOUND_MOVE_PLAYER_STATUS_ONLY); + builder.put("ClientboundAddEntityPacket", GamePacketTypes.CLIENTBOUND_ADD_ENTITY); + builder.put("ClientboundAnimatePacket", GamePacketTypes.CLIENTBOUND_ANIMATE); + builder.put("ClientboundAwardStatsPacket", GamePacketTypes.CLIENTBOUND_AWARD_STATS); + builder.put("ClientboundBlockChangedAckPacket", GamePacketTypes.CLIENTBOUND_BLOCK_CHANGED_ACK); + builder.put("ClientboundBlockDestructionPacket", GamePacketTypes.CLIENTBOUND_BLOCK_DESTRUCTION); + builder.put("ClientboundBlockEntityDataPacket", GamePacketTypes.CLIENTBOUND_BLOCK_ENTITY_DATA); + builder.put("ClientboundBlockEventPacket", GamePacketTypes.CLIENTBOUND_BLOCK_EVENT); + builder.put("ClientboundBlockUpdatePacket", GamePacketTypes.CLIENTBOUND_BLOCK_UPDATE); + builder.put("ClientboundBossEventPacket", GamePacketTypes.CLIENTBOUND_BOSS_EVENT); + builder.put("ClientboundBundleDelimiterPacket", GamePacketTypes.CLIENTBOUND_BUNDLE_DELIMITER); + builder.put("ClientboundBundlePacket", GamePacketTypes.CLIENTBOUND_BUNDLE); + builder.put("ClientboundChangeDifficultyPacket", GamePacketTypes.CLIENTBOUND_CHANGE_DIFFICULTY); + builder.put("ClientboundChunkBatchFinishedPacket", GamePacketTypes.CLIENTBOUND_CHUNK_BATCH_FINISHED); + builder.put("ClientboundChunkBatchStartPacket", GamePacketTypes.CLIENTBOUND_CHUNK_BATCH_START); + builder.put("ClientboundChunksBiomesPacket", GamePacketTypes.CLIENTBOUND_CHUNKS_BIOMES); + builder.put("ClientboundClearDialogPacket", CommonPacketTypes.CLIENTBOUND_CLEAR_DIALOG); + builder.put("ClientboundClearTitlesPacket", GamePacketTypes.CLIENTBOUND_CLEAR_TITLES); + builder.put("ClientboundCodeOfConductPacket", ConfigurationPacketTypes.CLIENTBOUND_CODE_OF_CONDUCT); + builder.put("ClientboundCommandSuggestionsPacket", GamePacketTypes.CLIENTBOUND_COMMAND_SUGGESTIONS); + builder.put("ClientboundCommandsPacket", GamePacketTypes.CLIENTBOUND_COMMANDS); + builder.put("ClientboundContainerClosePacket", GamePacketTypes.CLIENTBOUND_CONTAINER_CLOSE); + builder.put("ClientboundContainerSetContentPacket", GamePacketTypes.CLIENTBOUND_CONTAINER_SET_CONTENT); + builder.put("ClientboundContainerSetDataPacket", GamePacketTypes.CLIENTBOUND_CONTAINER_SET_DATA); + builder.put("ClientboundContainerSetSlotPacket", GamePacketTypes.CLIENTBOUND_CONTAINER_SET_SLOT); + builder.put("ClientboundCookieRequestPacket", CookiePacketTypes.CLIENTBOUND_COOKIE_REQUEST); + builder.put("ClientboundCooldownPacket", GamePacketTypes.CLIENTBOUND_COOLDOWN); + builder.put("ClientboundCustomChatCompletionsPacket", GamePacketTypes.CLIENTBOUND_CUSTOM_CHAT_COMPLETIONS); + builder.put("ClientboundCustomPayloadPacket", CommonPacketTypes.CLIENTBOUND_CUSTOM_PAYLOAD); + builder.put("ClientboundCustomQueryPacket", LoginPacketTypes.CLIENTBOUND_CUSTOM_QUERY); + builder.put("ClientboundCustomReportDetailsPacket", CommonPacketTypes.CLIENTBOUND_CUSTOM_REPORT_DETAILS); + builder.put("ClientboundDamageEventPacket", GamePacketTypes.CLIENTBOUND_DAMAGE_EVENT); + builder.put("ClientboundDebugBlockValuePacket", GamePacketTypes.CLIENTBOUND_DEBUG_BLOCK_VALUE); + builder.put("ClientboundDebugChunkValuePacket", GamePacketTypes.CLIENTBOUND_DEBUG_CHUNK_VALUE); + builder.put("ClientboundDebugEntityValuePacket", GamePacketTypes.CLIENTBOUND_DEBUG_ENTITY_VALUE); + builder.put("ClientboundDebugEventPacket", GamePacketTypes.CLIENTBOUND_DEBUG_EVENT); + builder.put("ClientboundDebugSamplePacket", GamePacketTypes.CLIENTBOUND_DEBUG_SAMPLE); + builder.put("ClientboundDeleteChatPacket", GamePacketTypes.CLIENTBOUND_DELETE_CHAT); + builder.put("ClientboundDisconnectPacket", CommonPacketTypes.CLIENTBOUND_DISCONNECT); + builder.put("ClientboundDisguisedChatPacket", GamePacketTypes.CLIENTBOUND_DISGUISED_CHAT); + builder.put("ClientboundEntityEventPacket", GamePacketTypes.CLIENTBOUND_ENTITY_EVENT); + builder.put("ClientboundEntityPositionSyncPacket", GamePacketTypes.CLIENTBOUND_ENTITY_POSITION_SYNC); + builder.put("ClientboundExplodePacket", GamePacketTypes.CLIENTBOUND_EXPLODE); + builder.put("ClientboundFinishConfigurationPacket", ConfigurationPacketTypes.CLIENTBOUND_FINISH_CONFIGURATION); + builder.put("ClientboundForgetLevelChunkPacket", GamePacketTypes.CLIENTBOUND_FORGET_LEVEL_CHUNK); + builder.put("ClientboundGameEventPacket", GamePacketTypes.CLIENTBOUND_GAME_EVENT); + builder.put("ClientboundGameRuleValuesPacket", GamePacketTypes.CLIENTBOUND_GAME_RULE_VALUES); + builder.put("ClientboundGameTestHighlightPosPacket", GamePacketTypes.CLIENTBOUND_GAME_TEST_HIGHLIGHT_POS); + builder.put("ClientboundHelloPacket", LoginPacketTypes.CLIENTBOUND_HELLO); + builder.put("ClientboundHurtAnimationPacket", GamePacketTypes.CLIENTBOUND_HURT_ANIMATION); + builder.put("ClientboundInitializeBorderPacket", GamePacketTypes.CLIENTBOUND_INITIALIZE_BORDER); + builder.put("ClientboundKeepAlivePacket", CommonPacketTypes.CLIENTBOUND_KEEP_ALIVE); + builder.put("ClientboundLevelChunkWithLightPacket", GamePacketTypes.CLIENTBOUND_LEVEL_CHUNK_WITH_LIGHT); + builder.put("ClientboundLevelEventPacket", GamePacketTypes.CLIENTBOUND_LEVEL_EVENT); + builder.put("ClientboundLevelParticlesPacket", GamePacketTypes.CLIENTBOUND_LEVEL_PARTICLES); + builder.put("ClientboundLightUpdatePacket", GamePacketTypes.CLIENTBOUND_LIGHT_UPDATE); + builder.put("ClientboundLoginCompressionPacket", LoginPacketTypes.CLIENTBOUND_LOGIN_COMPRESSION); + builder.put("ClientboundLoginDisconnectPacket", LoginPacketTypes.CLIENTBOUND_LOGIN_DISCONNECT); + builder.put("ClientboundLoginFinishedPacket", LoginPacketTypes.CLIENTBOUND_LOGIN_FINISHED); + builder.put("ClientboundLoginPacket", GamePacketTypes.CLIENTBOUND_LOGIN); + builder.put("ClientboundLowDiskSpaceWarningPacket", GamePacketTypes.CLIENTBOUND_LOW_DISK_SPACE_WARNING); + builder.put("ClientboundMapItemDataPacket", GamePacketTypes.CLIENTBOUND_MAP_ITEM_DATA); + builder.put("ClientboundMerchantOffersPacket", GamePacketTypes.CLIENTBOUND_MERCHANT_OFFERS); + builder.put("ClientboundMountScreenOpenPacket", GamePacketTypes.CLIENTBOUND_MOUNT_SCREEN_OPEN); + builder.put("ClientboundMoveMinecartPacket", GamePacketTypes.CLIENTBOUND_MOVE_MINECART_ALONG_TRACK); + builder.put("ClientboundMoveVehiclePacket", GamePacketTypes.CLIENTBOUND_MOVE_VEHICLE); + builder.put("ClientboundOpenBookPacket", GamePacketTypes.CLIENTBOUND_OPEN_BOOK); + builder.put("ClientboundOpenScreenPacket", GamePacketTypes.CLIENTBOUND_OPEN_SCREEN); + builder.put("ClientboundOpenSignEditorPacket", GamePacketTypes.CLIENTBOUND_OPEN_SIGN_EDITOR); + builder.put("ClientboundPingPacket", CommonPacketTypes.CLIENTBOUND_PING); + builder.put("ClientboundPlaceGhostRecipePacket", GamePacketTypes.CLIENTBOUND_PLACE_GHOST_RECIPE); + builder.put("ClientboundPlayerAbilitiesPacket", GamePacketTypes.CLIENTBOUND_PLAYER_ABILITIES); + builder.put("ClientboundPlayerChatPacket", GamePacketTypes.CLIENTBOUND_PLAYER_CHAT); + builder.put("ClientboundPlayerCombatEndPacket", GamePacketTypes.CLIENTBOUND_PLAYER_COMBAT_END); + builder.put("ClientboundPlayerCombatEnterPacket", GamePacketTypes.CLIENTBOUND_PLAYER_COMBAT_ENTER); + builder.put("ClientboundPlayerCombatKillPacket", GamePacketTypes.CLIENTBOUND_PLAYER_COMBAT_KILL); + builder.put("ClientboundPlayerInfoRemovePacket", GamePacketTypes.CLIENTBOUND_PLAYER_INFO_REMOVE); + builder.put("ClientboundPlayerInfoUpdatePacket", GamePacketTypes.CLIENTBOUND_PLAYER_INFO_UPDATE); + builder.put("ClientboundPlayerLookAtPacket", GamePacketTypes.CLIENTBOUND_PLAYER_LOOK_AT); + builder.put("ClientboundPlayerPositionPacket", GamePacketTypes.CLIENTBOUND_PLAYER_POSITION); + builder.put("ClientboundPlayerRotationPacket", GamePacketTypes.CLIENTBOUND_PLAYER_ROTATION); + builder.put("ClientboundPongResponsePacket", PingPacketTypes.CLIENTBOUND_PONG_RESPONSE); + builder.put("ClientboundProjectilePowerPacket", GamePacketTypes.CLIENTBOUND_PROJECTILE_POWER); + builder.put("ClientboundRecipeBookAddPacket", GamePacketTypes.CLIENTBOUND_RECIPE_BOOK_ADD); + builder.put("ClientboundRecipeBookRemovePacket", GamePacketTypes.CLIENTBOUND_RECIPE_BOOK_REMOVE); + builder.put("ClientboundRecipeBookSettingsPacket", GamePacketTypes.CLIENTBOUND_RECIPE_BOOK_SETTINGS); + builder.put("ClientboundRegistryDataPacket", ConfigurationPacketTypes.CLIENTBOUND_REGISTRY_DATA); + builder.put("ClientboundRemoveEntitiesPacket", GamePacketTypes.CLIENTBOUND_REMOVE_ENTITIES); + builder.put("ClientboundRemoveMobEffectPacket", GamePacketTypes.CLIENTBOUND_REMOVE_MOB_EFFECT); + builder.put("ClientboundResetChatPacket", ConfigurationPacketTypes.CLIENTBOUND_RESET_CHAT); + builder.put("ClientboundResetScorePacket", GamePacketTypes.CLIENTBOUND_RESET_SCORE); + builder.put("ClientboundResourcePackPopPacket", CommonPacketTypes.CLIENTBOUND_RESOURCE_PACK_POP); + builder.put("ClientboundResourcePackPushPacket", CommonPacketTypes.CLIENTBOUND_RESOURCE_PACK_PUSH); + builder.put("ClientboundRespawnPacket", GamePacketTypes.CLIENTBOUND_RESPAWN); + builder.put("ClientboundRotateHeadPacket", GamePacketTypes.CLIENTBOUND_ROTATE_HEAD); + builder.put("ClientboundSectionBlocksUpdatePacket", GamePacketTypes.CLIENTBOUND_SECTION_BLOCKS_UPDATE); + builder.put("ClientboundSelectAdvancementsTabPacket", GamePacketTypes.CLIENTBOUND_SELECT_ADVANCEMENTS_TAB); + builder.put("ClientboundSelectKnownPacks", ConfigurationPacketTypes.CLIENTBOUND_SELECT_KNOWN_PACKS); + builder.put("ClientboundServerDataPacket", GamePacketTypes.CLIENTBOUND_SERVER_DATA); + builder.put("ClientboundServerLinksPacket", CommonPacketTypes.CLIENTBOUND_SERVER_LINKS); + builder.put("ClientboundSetActionBarTextPacket", GamePacketTypes.CLIENTBOUND_SET_ACTION_BAR_TEXT); + builder.put("ClientboundSetBorderCenterPacket", GamePacketTypes.CLIENTBOUND_SET_BORDER_CENTER); + builder.put("ClientboundSetBorderLerpSizePacket", GamePacketTypes.CLIENTBOUND_SET_BORDER_LERP_SIZE); + builder.put("ClientboundSetBorderSizePacket", GamePacketTypes.CLIENTBOUND_SET_BORDER_SIZE); + builder.put("ClientboundSetBorderWarningDelayPacket", GamePacketTypes.CLIENTBOUND_SET_BORDER_WARNING_DELAY); + builder.put("ClientboundSetBorderWarningDistancePacket", GamePacketTypes.CLIENTBOUND_SET_BORDER_WARNING_DISTANCE); + builder.put("ClientboundSetCameraPacket", GamePacketTypes.CLIENTBOUND_SET_CAMERA); + builder.put("ClientboundSetChunkCacheCenterPacket", GamePacketTypes.CLIENTBOUND_SET_CHUNK_CACHE_CENTER); + builder.put("ClientboundSetChunkCacheRadiusPacket", GamePacketTypes.CLIENTBOUND_SET_CHUNK_CACHE_RADIUS); + builder.put("ClientboundSetCursorItemPacket", GamePacketTypes.CLIENTBOUND_SET_CURSOR_ITEM); + builder.put("ClientboundSetDefaultSpawnPositionPacket", GamePacketTypes.CLIENTBOUND_SET_DEFAULT_SPAWN_POSITION); + builder.put("ClientboundSetDisplayObjectivePacket", GamePacketTypes.CLIENTBOUND_SET_DISPLAY_OBJECTIVE); + builder.put("ClientboundSetEntityDataPacket", GamePacketTypes.CLIENTBOUND_SET_ENTITY_DATA); + builder.put("ClientboundSetEntityLinkPacket", GamePacketTypes.CLIENTBOUND_SET_ENTITY_LINK); + builder.put("ClientboundSetEntityMotionPacket", GamePacketTypes.CLIENTBOUND_SET_ENTITY_MOTION); + builder.put("ClientboundSetEquipmentPacket", GamePacketTypes.CLIENTBOUND_SET_EQUIPMENT); + builder.put("ClientboundSetExperiencePacket", GamePacketTypes.CLIENTBOUND_SET_EXPERIENCE); + builder.put("ClientboundSetHealthPacket", GamePacketTypes.CLIENTBOUND_SET_HEALTH); + builder.put("ClientboundSetHeldSlotPacket", GamePacketTypes.CLIENTBOUND_SET_HELD_SLOT); + builder.put("ClientboundSetObjectivePacket", GamePacketTypes.CLIENTBOUND_SET_OBJECTIVE); + builder.put("ClientboundSetPassengersPacket", GamePacketTypes.CLIENTBOUND_SET_PASSENGERS); + builder.put("ClientboundSetPlayerInventoryPacket", GamePacketTypes.CLIENTBOUND_SET_PLAYER_INVENTORY); + builder.put("ClientboundSetPlayerTeamPacket", GamePacketTypes.CLIENTBOUND_SET_PLAYER_TEAM); + builder.put("ClientboundSetScorePacket", GamePacketTypes.CLIENTBOUND_SET_SCORE); + builder.put("ClientboundSetSimulationDistancePacket", GamePacketTypes.CLIENTBOUND_SET_SIMULATION_DISTANCE); + builder.put("ClientboundSetSubtitleTextPacket", GamePacketTypes.CLIENTBOUND_SET_SUBTITLE_TEXT); + builder.put("ClientboundSetTimePacket", GamePacketTypes.CLIENTBOUND_SET_TIME); + builder.put("ClientboundSetTitleTextPacket", GamePacketTypes.CLIENTBOUND_SET_TITLE_TEXT); + builder.put("ClientboundSetTitlesAnimationPacket", GamePacketTypes.CLIENTBOUND_SET_TITLES_ANIMATION); + builder.put("ClientboundShowDialogPacket", CommonPacketTypes.CLIENTBOUND_SHOW_DIALOG); + builder.put("ClientboundSoundEntityPacket", GamePacketTypes.CLIENTBOUND_SOUND_ENTITY); + builder.put("ClientboundSoundPacket", GamePacketTypes.CLIENTBOUND_SOUND); + builder.put("ClientboundStartConfigurationPacket", GamePacketTypes.CLIENTBOUND_START_CONFIGURATION); + builder.put("ClientboundStatusResponsePacket", StatusPacketTypes.CLIENTBOUND_STATUS_RESPONSE); + builder.put("ClientboundStopSoundPacket", GamePacketTypes.CLIENTBOUND_STOP_SOUND); + builder.put("ClientboundStoreCookiePacket", CommonPacketTypes.CLIENTBOUND_STORE_COOKIE); + builder.put("ClientboundSystemChatPacket", GamePacketTypes.CLIENTBOUND_SYSTEM_CHAT); + builder.put("ClientboundTabListPacket", GamePacketTypes.CLIENTBOUND_TAB_LIST); + builder.put("ClientboundTagQueryPacket", GamePacketTypes.CLIENTBOUND_TAG_QUERY); + builder.put("ClientboundTakeItemEntityPacket", GamePacketTypes.CLIENTBOUND_TAKE_ITEM_ENTITY); + builder.put("ClientboundTeleportEntityPacket", GamePacketTypes.CLIENTBOUND_TELEPORT_ENTITY); + builder.put("ClientboundTestInstanceBlockStatus", GamePacketTypes.CLIENTBOUND_TEST_INSTANCE_BLOCK_STATUS); + builder.put("ClientboundTickingStatePacket", GamePacketTypes.CLIENTBOUND_TICKING_STATE); + builder.put("ClientboundTickingStepPacket", GamePacketTypes.CLIENTBOUND_TICKING_STEP); + builder.put("ClientboundTrackedWaypointPacket", GamePacketTypes.CLIENTBOUND_WAYPOINT); + builder.put("ClientboundTransferPacket", CommonPacketTypes.CLIENTBOUND_TRANSFER); + builder.put("ClientboundUpdateAdvancementsPacket", GamePacketTypes.CLIENTBOUND_UPDATE_ADVANCEMENTS); + builder.put("ClientboundUpdateAttributesPacket", GamePacketTypes.CLIENTBOUND_UPDATE_ATTRIBUTES); + builder.put("ClientboundUpdateEnabledFeaturesPacket", ConfigurationPacketTypes.CLIENTBOUND_UPDATE_ENABLED_FEATURES); + builder.put("ClientboundUpdateMobEffectPacket", GamePacketTypes.CLIENTBOUND_UPDATE_MOB_EFFECT); + builder.put("ClientboundUpdateRecipesPacket", GamePacketTypes.CLIENTBOUND_UPDATE_RECIPES); + builder.put("ClientboundUpdateTagsPacket", CommonPacketTypes.CLIENTBOUND_UPDATE_TAGS); + builder.put("ClientboundMoveEntityPacket.Pos", GamePacketTypes.CLIENTBOUND_MOVE_ENTITY_POS); + builder.put("ClientboundMoveEntityPacket.PosRot", GamePacketTypes.CLIENTBOUND_MOVE_ENTITY_POS_ROT); + builder.put("ClientboundMoveEntityPacket.Rot", GamePacketTypes.CLIENTBOUND_MOVE_ENTITY_ROT); + LEGACY_PACKET_MAPPINGS = builder.buildOrThrow(); } + + private PacketUtils() {} } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtilsUtil.java b/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtilsUtil.java deleted file mode 100644 index 3f6281ab09..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtilsUtil.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). - * Copyright (c) Meteor Development. - */ - -package meteordevelopment.meteorclient.utils.network; - -import net.minecraft.network.protocol.Packet; -import org.reflections.Reflections; -import org.reflections.scanners.Scanners; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.lang.reflect.Modifier; -import java.util.Comparator; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; - -public class PacketUtilsUtil { - private PacketUtilsUtil() { - } - - static void main() { - try { - init(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - @SuppressWarnings({"rawtypes"}) - public static void init() throws IOException { - Comparator> cmp = Comparator - ., String>comparing(Class::getSimpleName) - .thenComparing(Class::getName); - - Reflections reflections = new Reflections("net.minecraft.network.protocol", Scanners.SubTypes); - Set> all = reflections.getSubTypesOf(Packet.class); - - SortedSet> s2c = new TreeSet<>(cmp); - SortedSet> c2s = new TreeSet<>(cmp); - - for (Class packet : all) { - if (packet.isInterface() || Modifier.isAbstract(packet.getModifiers())) continue; - - // For inner classes, the direction prefix is on the enclosing class - Class namingClass = packet.getEnclosingClass() != null ? packet.getEnclosingClass() : packet; - String simpleName = namingClass.getSimpleName(); - - if (simpleName.startsWith("Clientbound")) s2c.add(packet); - else if (simpleName.startsWith("Serverbound")) c2s.add(packet); - // Fallback: ClientIntentionPacket and similar legacy-named packets - else if (simpleName.startsWith("Client")) c2s.add(packet); - else if (simpleName.startsWith("Server")) s2c.add(packet); - else System.err.printf("WARNING: Skipping unclassified packet: %s%n", packet.getName()); - } - - File file = new File("src/main/java/%s/PacketUtils.java".formatted(PacketUtilsUtil.class.getPackageName().replace('.', '/'))); - if (!file.exists()) { - file.getParentFile().mkdirs(); - file.createNewFile(); - } - - try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) { - // License header - writer.write("/*\n"); - writer.write(" * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client/).\n"); - writer.write(" * Copyright (c) Meteor Development.\n"); - writer.write(" */\n\n"); - - writer.write("package meteordevelopment.meteorclient.utils.network;\n\n"); - - // Imports - writer.write("import com.google.common.collect.Sets;\n"); - writer.write("import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap;\n"); - writer.write("import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;\n"); - writer.write("import net.minecraft.network.protocol.Packet;\n\n"); - writer.write("import java.util.Map;\n"); - writer.write("import java.util.Set;\n"); - - // Class - writer.write("\npublic class PacketUtils {\n"); - - // Fields - writer.write(" private static final Map>, String> S2C_PACKETS = new Reference2ObjectOpenHashMap<>();\n"); - writer.write(" private static final Map>, String> C2S_PACKETS = new Reference2ObjectOpenHashMap<>();\n\n"); - writer.write(" private static final Map>> S2C_PACKETS_R = new Object2ReferenceOpenHashMap<>();\n"); - writer.write(" private static final Map>> C2S_PACKETS_R = new Object2ReferenceOpenHashMap<>();\n\n"); - writer.write(" public static final Set>> PACKETS = Sets.union(getC2SPackets(), getS2CPackets());\n\n"); - - // Static block - writer.write(" static {\n"); - writePacketEntries(writer, c2s, "C2S_PACKETS", "C2S_PACKETS_R"); - writer.newLine(); - writePacketEntries(writer, s2c, "S2C_PACKETS", "S2C_PACKETS_R"); - writer.write(" }\n\n"); - - // Constructor - writer.write(" private PacketUtils() {\n"); - writer.write(" }\n\n"); - - // Methods - writer.write(" public static String getName(Class> packetClass) {\n"); - writer.write(" String name = S2C_PACKETS.get(packetClass);\n"); - writer.write(" if (name != null) return name;\n"); - writer.write(" return C2S_PACKETS.get(packetClass);\n"); - writer.write(" }\n\n"); - - // Write getPacket method - writer.write(" public static Class> getPacket(String name) {\n"); - writer.write(" Class> packet = S2C_PACKETS_R.get(name);\n"); - writer.write(" if (packet != null) return packet;\n"); - writer.write(" return C2S_PACKETS_R.get(name);\n"); - writer.write(" }\n\n"); - - // Write getS2CPackets method - writer.write(" public static Set>> getS2CPackets() {\n"); - writer.write(" return S2C_PACKETS.keySet();\n"); - writer.write(" }\n\n"); - - // Write getC2SPackets method - writer.write(" public static Set>> getC2SPackets() {\n"); - writer.write(" return C2S_PACKETS.keySet();\n"); - writer.write(" }\n"); - - // Write end class - writer.write("}\n"); - } - } - - @SuppressWarnings("rawtypes") - private static void writePacketEntries(BufferedWriter writer, SortedSet> packets, String mapName, String reverseMapName) throws IOException { - for (Class packet : packets) { - String fullName = packet.getName().replace('$', '.'); - // "ClientboundMoveEntityPacket.Pos" for inner, "ClientboundKeepAlivePacket" for top-level - String simpleName = packet.getEnclosingClass() != null - ? packet.getEnclosingClass().getSimpleName() + "." + packet.getSimpleName() - : packet.getSimpleName(); - - writer.write(" %s.put(%s.class, \"%s\");%n".formatted(mapName, fullName, simpleName)); - writer.write(" %s.put(\"%s\", %s.class);%n".formatted(reverseMapName, simpleName, fullName)); - } - } -}