diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 3dcf139..79bc30c 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -4,7 +4,7 @@ name: Java CI with Gradle concurrency: - group: "build-1.20" + group: "build" cancel-in-progress: true on: @@ -34,9 +34,9 @@ jobs: - uses: "marvinpinto/action-automatic-releases@latest" with: repo_token: "${{ secrets.GITHUB_TOKEN }}" - automatic_release_tag: "latest-1.20.1" + automatic_release_tag: "latest-1.20.2" prerelease: false - title: "1.20.1 Build" + title: "1.20.2 Build" files: | ./build/libs/*.jar diff --git a/gradle.properties b/gradle.properties index a759d22..36b4ffc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties -minecraft_version=1.20.1 -yarn_version=1.20.1+build.1 -loader_version=0.14.21 +minecraft_version=1.20.2 +yarn_version=1.20.2+build.4 +loader_version=0.14.24 # Mod Properties mod_version = 0.3 maven_group = anticope.rejects archives_base_name = meteor-rejects-addon -meteor_version=0.5.4 \ No newline at end of file +meteor_version=0.5.5 \ No newline at end of file diff --git a/src/main/java/anticope/rejects/commands/KickCommand.java b/src/main/java/anticope/rejects/commands/KickCommand.java index 7d55e52..3ee57d2 100644 --- a/src/main/java/anticope/rejects/commands/KickCommand.java +++ b/src/main/java/anticope/rejects/commands/KickCommand.java @@ -7,7 +7,7 @@ import net.minecraft.client.util.GlfwUtil; import net.minecraft.command.CommandSource; import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; -import net.minecraft.network.packet.s2c.play.DisconnectS2CPacket; +import net.minecraft.network.packet.s2c.common.DisconnectS2CPacket; import net.minecraft.text.Text; import org.apache.commons.lang3.SystemUtils; diff --git a/src/main/java/anticope/rejects/gui/servers/LegacyServerFinderScreen.java b/src/main/java/anticope/rejects/gui/servers/LegacyServerFinderScreen.java index 568fd2d..938a896 100644 --- a/src/main/java/anticope/rejects/gui/servers/LegacyServerFinderScreen.java +++ b/src/main/java/anticope/rejects/gui/servers/LegacyServerFinderScreen.java @@ -156,7 +156,7 @@ public class LegacyServerFinderScreen extends WindowScreen { if (!isServerInList(pingers.get(i).getServerIP())) { multiplayerScreen.getServerList() .add(new ServerInfo("Server discovery " + working, - pingers.get(i).getServerIP(), false), false); + pingers.get(i).getServerIP(), ServerInfo.ServerType.OTHER), false); multiplayerScreen.getServerList().saveFile(); ((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget() .setSelected(null); diff --git a/src/main/java/anticope/rejects/gui/servers/ServerFinderScreen.java b/src/main/java/anticope/rejects/gui/servers/ServerFinderScreen.java index af96dcf..564edee 100644 --- a/src/main/java/anticope/rejects/gui/servers/ServerFinderScreen.java +++ b/src/main/java/anticope/rejects/gui/servers/ServerFinderScreen.java @@ -241,7 +241,7 @@ public class ServerFinderScreen extends WindowScreen implements IServerFinderDon if (!isServerInList(pinger.getServerIP()) && filterPass(pinger.getServerInfo())) { synchronized (serverFinderLock) { working++; - multiplayerScreen.getServerList().add(new ServerInfo("Server discovery #" + working, pinger.getServerIP(), false), false); + multiplayerScreen.getServerList().add(new ServerInfo("Server discovery #" + working, pinger.getServerIP(), ServerInfo.ServerType.OTHER), false); multiplayerScreen.getServerList().saveFile(); ((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget().setSelected(null); ((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget().setServers(multiplayerScreen.getServerList()); diff --git a/src/main/java/anticope/rejects/gui/servers/ServerManagerScreen.java b/src/main/java/anticope/rejects/gui/servers/ServerManagerScreen.java index bda7b3c..a7ff64e 100644 --- a/src/main/java/anticope/rejects/gui/servers/ServerManagerScreen.java +++ b/src/main/java/anticope/rejects/gui/servers/ServerManagerScreen.java @@ -120,7 +120,7 @@ public class ServerManagerScreen extends WindowScreen { for (ServerInfo server : servers) presentAddresses.add(server.address); for (String addr : MinecraftClient.getInstance().keyboard.getClipboard().split("[\r\n]+")) { if (presentAddresses.add(addr = addr.split(" ")[0])) { - servers.add(new ServerInfo("Server discovery #" + presentAddresses.size(), addr, false)); + servers.add(new ServerInfo("Server discovery #" + presentAddresses.size(), addr, ServerInfo.ServerType.OTHER)); newIPs++; } } diff --git a/src/main/java/anticope/rejects/mixin/ClientCommonNetwokHandlerMixin.java b/src/main/java/anticope/rejects/mixin/ClientCommonNetwokHandlerMixin.java new file mode 100644 index 0000000..c890553 --- /dev/null +++ b/src/main/java/anticope/rejects/mixin/ClientCommonNetwokHandlerMixin.java @@ -0,0 +1,25 @@ +package anticope.rejects.mixin; + +import anticope.rejects.modules.SilentDisconnect; +import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.utils.player.ChatUtils; +import net.minecraft.client.network.ClientCommonNetworkHandler; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import static meteordevelopment.meteorclient.MeteorClient.mc; + +@Mixin(ClientCommonNetworkHandler.class) +public class ClientCommonNetwokHandlerMixin { + @Inject(method = "onDisconnected", at = @At("HEAD"), cancellable = true) + private void onDisconnected(Text reason, CallbackInfo info) { + if (Modules.get().isActive(SilentDisconnect.class) && mc.world != null && mc.player != null) { + ChatUtils.info(Text.translatable("disconnect.lost").getString() + ":"); + ChatUtils.sendMsg(reason); + info.cancel(); + } + } +} diff --git a/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java index 5073e64..725d5d1 100644 --- a/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java @@ -1,20 +1,14 @@ package anticope.rejects.mixin; import anticope.rejects.events.PlayerRespawnEvent; -import anticope.rejects.modules.SilentDisconnect; import meteordevelopment.meteorclient.MeteorClient; -import meteordevelopment.meteorclient.systems.modules.Modules; -import meteordevelopment.meteorclient.utils.player.ChatUtils; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.network.packet.s2c.play.PlayerRespawnS2CPacket; -import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import static meteordevelopment.meteorclient.MeteorClient.mc; - @Mixin(ClientPlayNetworkHandler.class) public class ClientPlayNetworkHandlerMixin { @@ -23,13 +17,4 @@ public class ClientPlayNetworkHandlerMixin { public void onPlayerRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) { MeteorClient.EVENT_BUS.post(PlayerRespawnEvent.get()); } - - @Inject(method = "onDisconnected", at = @At("HEAD"), cancellable = true) - private void onDisconnected(Text reason, CallbackInfo info) { - if (Modules.get().isActive(SilentDisconnect.class) && mc.world != null && mc.player != null) { - ChatUtils.info(Text.translatable("disconnect.lost").getString() + ":"); - ChatUtils.sendMsg(reason); - info.cancel(); - } - } } diff --git a/src/main/java/anticope/rejects/modules/AutoCraft.java b/src/main/java/anticope/rejects/modules/AutoCraft.java index a5a1781..5551e83 100644 --- a/src/main/java/anticope/rejects/modules/AutoCraft.java +++ b/src/main/java/anticope/rejects/modules/AutoCraft.java @@ -11,6 +11,7 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.client.gui.screen.recipebook.RecipeResultCollection; import net.minecraft.item.Item; import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeEntry; import net.minecraft.screen.CraftingScreenHandler; import net.minecraft.screen.slot.SlotActionType; @@ -70,8 +71,8 @@ public class AutoCraft extends Module { List itemList = items.get(); List recipeResultCollectionList = mc.player.getRecipeBook().getOrderedResults(); for (RecipeResultCollection recipeResultCollection : recipeResultCollectionList) { - for (Recipe recipe : recipeResultCollection.getRecipes(true)) { - if (!itemList.contains(recipe.getOutput(mc.world.getRegistryManager()).getItem())) continue; + for (RecipeEntry recipe : recipeResultCollection.getRecipes(true)) { + if (!itemList.contains(recipe.value().getResult(mc.world.getRegistryManager()).getItem())) continue; mc.interactionManager.clickRecipe(currentScreenHandler.syncId, recipe, craftAll.get()); mc.interactionManager.clickSlot(currentScreenHandler.syncId, 0, 1, drop.get() ? SlotActionType.THROW : SlotActionType.QUICK_MOVE, mc.player); diff --git a/src/main/java/anticope/rejects/modules/AutoGrind.java b/src/main/java/anticope/rejects/modules/AutoGrind.java index 168f123..483f1b8 100644 --- a/src/main/java/anticope/rejects/modules/AutoGrind.java +++ b/src/main/java/anticope/rejects/modules/AutoGrind.java @@ -63,7 +63,7 @@ public class AutoGrind extends Module { if (mc.currentScreen == null) break; - InvUtils.quickMove().slot(i); + InvUtils.quickSwap().slot(i); InvUtils.move().fromId(2).to(i); } } diff --git a/src/main/java/anticope/rejects/modules/AutoSoup.java b/src/main/java/anticope/rejects/modules/AutoSoup.java index ab16c68..3e5fc8f 100644 --- a/src/main/java/anticope/rejects/modules/AutoSoup.java +++ b/src/main/java/anticope/rejects/modules/AutoSoup.java @@ -104,7 +104,7 @@ public class AutoSoup extends Module { // move soup in inventory to hotbar if (soupInInventory != -1) - InvUtils.quickMove().slot(soupInInventory); + InvUtils.quickSwap().slot(soupInInventory); } private int findSoup(int startSlot, int endSlot) { diff --git a/src/main/java/anticope/rejects/modules/BungeeCordSpoof.java b/src/main/java/anticope/rejects/modules/BungeeCordSpoof.java index 956b8ca..b1e9bca 100644 --- a/src/main/java/anticope/rejects/modules/BungeeCordSpoof.java +++ b/src/main/java/anticope/rejects/modules/BungeeCordSpoof.java @@ -54,16 +54,16 @@ public class BungeeCordSpoof extends Module { @EventHandler private void onPacketSend(PacketEvent.Send event) { - if (event.packet instanceof HandshakeC2SPacket packet && packet.getIntendedState() == NetworkState.LOGIN) { + if (event.packet instanceof HandshakeC2SPacket packet && packet.getNewNetworkState() == NetworkState.LOGIN) { if (whitelist.get() && !whitelistedServers.get().contains(Utils.getWorldName())) return; - String address = packet.getAddress() + "\0" + forwardedIP + "\0" + mc.getSession().getUuid().replace("-", "") + String address = packet.address() + "\0" + forwardedIP + "\0" + mc.getSession().getUuidOrNull().toString().replace("-", "") + (spoofProfile.get() ? getProperty() : ""); - ((HandshakeC2SPacketAccessor) packet).setAddress(address); + ((HandshakeC2SPacketAccessor) (Object) packet).setAddress(address); } } private String getProperty() { - PropertyMap propertyMap = mc.getSession().getProfile().getProperties(); + PropertyMap propertyMap = mc.getGameProfile().getProperties(); return "\0" + GSON.toJson(propertyMap.values().toArray()); } } diff --git a/src/main/java/anticope/rejects/modules/ColorSigns.java b/src/main/java/anticope/rejects/modules/ColorSigns.java index b8a4ffb..87b80e9 100644 --- a/src/main/java/anticope/rejects/modules/ColorSigns.java +++ b/src/main/java/anticope/rejects/modules/ColorSigns.java @@ -35,7 +35,7 @@ public class ColorSigns extends Module { } private void checkWarning() { - String brand = mc.player.getServerBrand(); + String brand = mc.player.getServer().getServerModName(); if (brand == null) return; if (brand.contains("Paper")) warning("You are on a paper server. Color signs won't work here"); } diff --git a/src/main/java/anticope/rejects/modules/CustomPackets.java b/src/main/java/anticope/rejects/modules/CustomPackets.java index 37b1bc1..9cc649f 100644 --- a/src/main/java/anticope/rejects/modules/CustomPackets.java +++ b/src/main/java/anticope/rejects/modules/CustomPackets.java @@ -5,6 +5,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; +import io.netty.buffer.Unpooled; import meteordevelopment.meteorclient.events.packets.PacketEvent; import meteordevelopment.meteorclient.settings.BoolSetting; import meteordevelopment.meteorclient.settings.Setting; @@ -13,7 +14,7 @@ import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.utils.player.ChatUtils; import meteordevelopment.orbit.EventHandler; import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket; +import net.minecraft.network.packet.s2c.common.CustomPayloadS2CPacket; import net.minecraft.text.HoverEvent; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -53,27 +54,33 @@ public class CustomPackets extends Module { @EventHandler private void onCustomPayloadPacket(PacketEvent.Receive event) { if (event.packet instanceof CustomPayloadS2CPacket packet) { - switch (packet.getChannel().toString()) { + switch (packet.payload().id().toString()) { case "badlion:mods" -> event.setCancelled(onBadlionModsPacket(packet)); default -> onUnknownPacket(packet); } } } + PacketByteBuf buffer = new PacketByteBuf(Unpooled.buffer()); + private void onUnknownPacket(CustomPayloadS2CPacket packet) { if (!unknownPackets.get()) return; - MutableText text = Text.literal(packet.getChannel().toString()); + MutableText text = Text.literal(packet.payload().id().toString()); + buffer.clear(); + packet.payload().write(buffer); text.setStyle(text.getStyle() .withHoverEvent(new HoverEvent( HoverEvent.Action.SHOW_TEXT, - Text.literal(readString(packet.getData())) - ))); + Text.literal(readString(buffer) + )))); info(text); } private boolean onBadlionModsPacket(CustomPayloadS2CPacket packet) { if (!mods.get()) return false; - String json = readString(packet.getData()); + buffer.clear(); + packet.payload().write(buffer); + String json = readString(buffer); Map mods = GSON_NON_PRETTY.fromJson(json, BADLION_MODS_TYPE); ChatUtils.sendMsg("Badlion", format("Mods", formatMods(mods))); return true; diff --git a/src/main/java/anticope/rejects/modules/NewChunks.java b/src/main/java/anticope/rejects/modules/NewChunks.java index ebc2ac0..715315f 100644 --- a/src/main/java/anticope/rejects/modules/NewChunks.java +++ b/src/main/java/anticope/rejects/modules/NewChunks.java @@ -171,12 +171,12 @@ public class NewChunks extends Module { else if (event.packet instanceof ChunkDataS2CPacket && mc.world != null) { ChunkDataS2CPacket packet = (ChunkDataS2CPacket) event.packet; - ChunkPos pos = new ChunkPos(packet.getX(), packet.getZ()); + ChunkPos pos = new ChunkPos(packet.getChunkX(), packet.getChunkZ()); - if (!newChunks.contains(pos) && mc.world.getChunkManager().getChunk(packet.getX(), packet.getZ()) == null) { + if (!newChunks.contains(pos) && mc.world.getChunkManager().getChunk(packet.getChunkX(), packet.getChunkZ()) == null) { WorldChunk chunk = new WorldChunk(mc.world, pos); try { - chunk.loadFromPacket(packet.getChunkData().getSectionsDataBuf(), new NbtCompound(), packet.getChunkData().getBlockEntities(packet.getX(), packet.getZ())); + chunk.loadFromPacket(packet.getChunkData().getSectionsDataBuf(), new NbtCompound(), packet.getChunkData().getBlockEntities(packet.getChunkX(), packet.getChunkZ())); } catch (ArrayIndexOutOfBoundsException e) { return; } diff --git a/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilAccount.java b/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilAccount.java index 628aa67..83caa47 100644 --- a/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilAccount.java +++ b/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilAccount.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.mixin.MinecraftClientAccessor; import meteordevelopment.meteorclient.systems.accounts.Account; import meteordevelopment.meteorclient.systems.accounts.AccountType; import meteordevelopment.meteorclient.utils.misc.NbtException; -import net.minecraft.client.util.Session; +import net.minecraft.client.session.Session; import net.minecraft.nbt.NbtCompound; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -27,7 +27,7 @@ public class CustomYggdrasilAccount extends Account { Session session = CustomYggdrasilLogin.login(name, password, server); cache.username = session.getUsername(); - cache.uuid = session.getUuid(); + cache.uuid = session.getUuidOrNull().toString(); return true; } catch (AuthenticationException e) { diff --git a/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilLogin.java b/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilLogin.java index 7602726..9845a82 100644 --- a/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilLogin.java +++ b/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilLogin.java @@ -15,7 +15,7 @@ import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService; import com.mojang.authlib.yggdrasil.response.MinecraftTexturesPayload; import com.mojang.util.UUIDTypeAdapter; import meteordevelopment.meteorclient.utils.network.Http; -import net.minecraft.client.util.Session; +import net.minecraft.client.session.Session; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -28,7 +28,11 @@ import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.*; +import static meteordevelopment.meteorclient.MeteorClient.mc; + public class CustomYggdrasilLogin { + public static Environment localYggdrasilApi = new Environment("/api", "/sessionserver", "/minecraftservices", "Custom-Yggdrasil"); + public static Session login(String name, String password, String server) throws AuthenticationException { try { String url = server + "/authserver/authenticate"; @@ -47,7 +51,7 @@ public class CustomYggdrasilLogin { throw new AuthenticationException(json.get("errorMessage").getAsString()); } String token = json.get("accessToken").getAsString(); - String uuid = json.get("selectedProfile").getAsJsonObject().get("id").getAsString(); + UUID uuid = UUID.fromString(json.get("selectedProfile").getAsJsonObject().get("id").getAsString()); String username = json.get("selectedProfile").getAsJsonObject().get("name").getAsString(); return new Session(username, uuid, token, Optional.empty(), Optional.empty(), Session.AccountType.MOJANG); } catch (Exception e) { @@ -55,57 +59,13 @@ public class CustomYggdrasilLogin { } } - public static class LocalYggdrasilApi implements Environment { - private final String url; - - public LocalYggdrasilApi(String serverUrl) { - this.url = serverUrl; - } - - @Override - public String getAuthHost() { - return url + "/authserver"; - } - - @Override - public String getAccountsHost() { - return url + "/api"; - } - - @Override - public String getSessionHost() { - return url + "/sessionserver"; - } - - @Override - public String getServicesHost() { - return url + "/minecraftservices"; - } - - @Override - public String getName() { - return "Custom-Yggdrasil"; - } - - @Override - public String asString() { - return new StringJoiner(", ", "", "") - .add("authHost='" + getAuthHost() + "'") - .add("accountsHost='" + getAccountsHost() + "'") - .add("sessionHost='" + getSessionHost() + "'") - .add("servicesHost='" + getServicesHost() + "'") - .add("name='" + getName() + "'") - .toString(); - } - } - public static class LocalYggdrasilMinecraftSessionService extends YggdrasilMinecraftSessionService { private static final Logger LOGGER = LogManager.getLogger(); private final PublicKey publicKey; private final Gson gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create(); public LocalYggdrasilMinecraftSessionService(YggdrasilAuthenticationService service, String serverUrl) { - super(service, new LocalYggdrasilApi(serverUrl)); + super(service.getServicesKeySet(), mc.getNetworkProxy(), localYggdrasilApi); String data = Http.get(serverUrl).sendString(); JsonObject json = JsonParser.parseString(data).getAsJsonObject(); this.publicKey = getPublicKey(json.get("signaturePublickey").getAsString()); @@ -144,17 +104,17 @@ public class CustomYggdrasilLogin { final MinecraftTexturesPayload result; try { - final String json = new String(org.apache.commons.codec.binary.Base64.decodeBase64(textureProperty.getValue()), StandardCharsets.UTF_8); + final String json = new String(org.apache.commons.codec.binary.Base64.decodeBase64(textureProperty.value()), StandardCharsets.UTF_8); result = gson.fromJson(json, MinecraftTexturesPayload.class); } catch (final JsonParseException e) { LOGGER.error("Could not decode textures payload", e); return new HashMap<>(); } - if (result == null || result.getTextures() == null) + if (result == null || result.textures() == null) return new HashMap<>(); - return result.getTextures(); + return result.textures(); } } @@ -162,7 +122,7 @@ public class CustomYggdrasilLogin { public final String server; public LocalYggdrasilAuthenticationService(Proxy proxy, String server) { - super(proxy, new LocalYggdrasilApi(server)); + super(proxy, localYggdrasilApi); this.server = server; } } diff --git a/src/main/java/anticope/rejects/utils/server/LegacyServerPinger.java b/src/main/java/anticope/rejects/utils/server/LegacyServerPinger.java index 2f68c8a..d6e1daa 100644 --- a/src/main/java/anticope/rejects/utils/server/LegacyServerPinger.java +++ b/src/main/java/anticope/rejects/utils/server/LegacyServerPinger.java @@ -18,7 +18,7 @@ public class LegacyServerPinger { } public void ping(String ip, int port) { - server = new ServerInfo("", ip + ":" + port, false); + server = new ServerInfo("", ip + ":" + port, ServerInfo.ServerType.OTHER); new Thread(() -> pingInCurrentThread(ip, port), "Server Pinger #" + threadNumber.incrementAndGet()).start(); diff --git a/src/main/java/anticope/rejects/utils/server/ServerListPinger.java b/src/main/java/anticope/rejects/utils/server/ServerListPinger.java index a99152b..ffc7df8 100644 --- a/src/main/java/anticope/rejects/utils/server/ServerListPinger.java +++ b/src/main/java/anticope/rejects/utils/server/ServerListPinger.java @@ -16,12 +16,13 @@ import net.minecraft.network.listener.ClientQueryPacketListener; import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket; import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket; import net.minecraft.network.packet.c2s.query.QueryRequestC2SPacket; -import net.minecraft.network.packet.s2c.query.QueryPongS2CPacket; +import net.minecraft.network.packet.s2c.query.PingResultS2CPacket; import net.minecraft.network.packet.s2c.query.QueryResponseS2CPacket; import net.minecraft.server.ServerMetadata; import net.minecraft.text.Text; import net.minecraft.util.Util; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.profiler.PerformanceLog; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -74,13 +75,13 @@ public class ServerListPinger { notifyDisconnectListeners(); } }, 20000); - final ClientConnection clientConnection = ClientConnection.connect(new InetSocketAddress(InetAddress.getByName(serverAddress.getAddress()), serverAddress.getPort()), false); + final ClientConnection clientConnection = ClientConnection.connect(new InetSocketAddress(InetAddress.getByName(serverAddress.getAddress()), serverAddress.getPort()), false, (PerformanceLog) null); failedToConnect = false; this.clientConnections.add(clientConnection); entry.label = "multiplayer.status.pinging"; entry.ping = -1L; entry.playerListSummary = null; - clientConnection.setPacketListener(new ClientQueryPacketListener() { + ClientQueryPacketListener clientQueryPacketListener = new ClientQueryPacketListener() { private boolean sentQuery; private boolean received; private long startTime; @@ -135,7 +136,7 @@ public class ServerListPinger { } } - public void onPong(QueryPongS2CPacket packet) { + public void onPingResult(PingResultS2CPacket packet) { long l = this.startTime; long m = Util.getMeasuringTimeMs(); entry.ping = m - l; @@ -157,10 +158,12 @@ public class ServerListPinger { public boolean isConnectionOpen() { return clientConnection.isOpen(); } - }); + }; + + clientConnection.setPacketListener(clientQueryPacketListener); try { - clientConnection.send(new HandshakeC2SPacket(serverAddress.getAddress(), serverAddress.getPort(), NetworkState.STATUS)); + clientConnection.connect(serverAddress.getAddress(), serverAddress.getPort(), clientQueryPacketListener); clientConnection.send(new QueryRequestC2SPacket()); } catch (Throwable var8) { LOGGER.error("Failed to ping server {}", serverAddress, var8); diff --git a/src/main/resources/meteor-rejects.mixins.json b/src/main/resources/meteor-rejects.mixins.json index dfb50db..a349ba0 100644 --- a/src/main/resources/meteor-rejects.mixins.json +++ b/src/main/resources/meteor-rejects.mixins.json @@ -3,6 +3,7 @@ "package": "anticope.rejects.mixin", "compatibilityLevel": "JAVA_16", "client": [ + "ClientCommonNetwokHandlerMixin", "ClientPlayerInteractionManagerMixin", "ClientPlayNetworkHandlerMixin", "CommandSuggestorMixin",