Port to 1.20.2 (#305)

Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com>
This commit is contained in:
MonkeySaint
2023-11-14 15:03:57 -05:00
committed by GitHub
parent 1f0eef9e15
commit 3119a9145c
20 changed files with 86 additions and 104 deletions

View File

@@ -4,7 +4,7 @@
name: Java CI with Gradle name: Java CI with Gradle
concurrency: concurrency:
group: "build-1.20" group: "build"
cancel-in-progress: true cancel-in-progress: true
on: on:
@@ -34,9 +34,9 @@ jobs:
- uses: "marvinpinto/action-automatic-releases@latest" - uses: "marvinpinto/action-automatic-releases@latest"
with: with:
repo_token: "${{ secrets.GITHUB_TOKEN }}" repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest-1.20.1" automatic_release_tag: "latest-1.20.2"
prerelease: false prerelease: false
title: "1.20.1 Build" title: "1.20.2 Build"
files: | files: |
./build/libs/*.jar ./build/libs/*.jar

View File

@@ -2,13 +2,13 @@
org.gradle.jvmargs=-Xmx2G org.gradle.jvmargs=-Xmx2G
# Fabric Properties # Fabric Properties
minecraft_version=1.20.1 minecraft_version=1.20.2
yarn_version=1.20.1+build.1 yarn_version=1.20.2+build.4
loader_version=0.14.21 loader_version=0.14.24
# Mod Properties # Mod Properties
mod_version = 0.3 mod_version = 0.3
maven_group = anticope.rejects maven_group = anticope.rejects
archives_base_name = meteor-rejects-addon archives_base_name = meteor-rejects-addon
meteor_version=0.5.4 meteor_version=0.5.5

View File

@@ -7,7 +7,7 @@ import net.minecraft.client.util.GlfwUtil;
import net.minecraft.command.CommandSource; import net.minecraft.command.CommandSource;
import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; 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 net.minecraft.text.Text;
import org.apache.commons.lang3.SystemUtils; import org.apache.commons.lang3.SystemUtils;

View File

@@ -156,7 +156,7 @@ public class LegacyServerFinderScreen extends WindowScreen {
if (!isServerInList(pingers.get(i).getServerIP())) { if (!isServerInList(pingers.get(i).getServerIP())) {
multiplayerScreen.getServerList() multiplayerScreen.getServerList()
.add(new ServerInfo("Server discovery " + working, .add(new ServerInfo("Server discovery " + working,
pingers.get(i).getServerIP(), false), false); pingers.get(i).getServerIP(), ServerInfo.ServerType.OTHER), false);
multiplayerScreen.getServerList().saveFile(); multiplayerScreen.getServerList().saveFile();
((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget() ((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget()
.setSelected(null); .setSelected(null);

View File

@@ -241,7 +241,7 @@ public class ServerFinderScreen extends WindowScreen implements IServerFinderDon
if (!isServerInList(pinger.getServerIP()) && filterPass(pinger.getServerInfo())) { if (!isServerInList(pinger.getServerIP()) && filterPass(pinger.getServerInfo())) {
synchronized (serverFinderLock) { synchronized (serverFinderLock) {
working++; 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(); multiplayerScreen.getServerList().saveFile();
((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget().setSelected(null); ((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget().setSelected(null);
((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget().setServers(multiplayerScreen.getServerList()); ((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget().setServers(multiplayerScreen.getServerList());

View File

@@ -120,7 +120,7 @@ public class ServerManagerScreen extends WindowScreen {
for (ServerInfo server : servers) presentAddresses.add(server.address); for (ServerInfo server : servers) presentAddresses.add(server.address);
for (String addr : MinecraftClient.getInstance().keyboard.getClipboard().split("[\r\n]+")) { for (String addr : MinecraftClient.getInstance().keyboard.getClipboard().split("[\r\n]+")) {
if (presentAddresses.add(addr = addr.split(" ")[0])) { 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++; newIPs++;
} }
} }

View File

@@ -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();
}
}
}

View File

@@ -1,20 +1,14 @@
package anticope.rejects.mixin; package anticope.rejects.mixin;
import anticope.rejects.events.PlayerRespawnEvent; import anticope.rejects.events.PlayerRespawnEvent;
import anticope.rejects.modules.SilentDisconnect;
import meteordevelopment.meteorclient.MeteorClient; 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.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.packet.s2c.play.PlayerRespawnS2CPacket; import net.minecraft.network.packet.s2c.play.PlayerRespawnS2CPacket;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import static meteordevelopment.meteorclient.MeteorClient.mc;
@Mixin(ClientPlayNetworkHandler.class) @Mixin(ClientPlayNetworkHandler.class)
public class ClientPlayNetworkHandlerMixin { public class ClientPlayNetworkHandlerMixin {
@@ -23,13 +17,4 @@ public class ClientPlayNetworkHandlerMixin {
public void onPlayerRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) { public void onPlayerRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) {
MeteorClient.EVENT_BUS.post(PlayerRespawnEvent.get()); 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();
}
}
} }

View File

@@ -11,6 +11,7 @@ import meteordevelopment.orbit.EventHandler;
import net.minecraft.client.gui.screen.recipebook.RecipeResultCollection; import net.minecraft.client.gui.screen.recipebook.RecipeResultCollection;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.recipe.Recipe; import net.minecraft.recipe.Recipe;
import net.minecraft.recipe.RecipeEntry;
import net.minecraft.screen.CraftingScreenHandler; import net.minecraft.screen.CraftingScreenHandler;
import net.minecraft.screen.slot.SlotActionType; import net.minecraft.screen.slot.SlotActionType;
@@ -70,8 +71,8 @@ public class AutoCraft extends Module {
List<Item> itemList = items.get(); List<Item> itemList = items.get();
List<RecipeResultCollection> recipeResultCollectionList = mc.player.getRecipeBook().getOrderedResults(); List<RecipeResultCollection> recipeResultCollectionList = mc.player.getRecipeBook().getOrderedResults();
for (RecipeResultCollection recipeResultCollection : recipeResultCollectionList) { for (RecipeResultCollection recipeResultCollection : recipeResultCollectionList) {
for (Recipe<?> recipe : recipeResultCollection.getRecipes(true)) { for (RecipeEntry<?> recipe : recipeResultCollection.getRecipes(true)) {
if (!itemList.contains(recipe.getOutput(mc.world.getRegistryManager()).getItem())) continue; if (!itemList.contains(recipe.value().getResult(mc.world.getRegistryManager()).getItem())) continue;
mc.interactionManager.clickRecipe(currentScreenHandler.syncId, recipe, craftAll.get()); mc.interactionManager.clickRecipe(currentScreenHandler.syncId, recipe, craftAll.get());
mc.interactionManager.clickSlot(currentScreenHandler.syncId, 0, 1, mc.interactionManager.clickSlot(currentScreenHandler.syncId, 0, 1,
drop.get() ? SlotActionType.THROW : SlotActionType.QUICK_MOVE, mc.player); drop.get() ? SlotActionType.THROW : SlotActionType.QUICK_MOVE, mc.player);

View File

@@ -63,7 +63,7 @@ public class AutoGrind extends Module {
if (mc.currentScreen == null) break; if (mc.currentScreen == null) break;
InvUtils.quickMove().slot(i); InvUtils.quickSwap().slot(i);
InvUtils.move().fromId(2).to(i); InvUtils.move().fromId(2).to(i);
} }
} }

View File

@@ -104,7 +104,7 @@ public class AutoSoup extends Module {
// move soup in inventory to hotbar // move soup in inventory to hotbar
if (soupInInventory != -1) if (soupInInventory != -1)
InvUtils.quickMove().slot(soupInInventory); InvUtils.quickSwap().slot(soupInInventory);
} }
private int findSoup(int startSlot, int endSlot) { private int findSoup(int startSlot, int endSlot) {

View File

@@ -54,16 +54,16 @@ public class BungeeCordSpoof extends Module {
@EventHandler @EventHandler
private void onPacketSend(PacketEvent.Send event) { 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; 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() : ""); + (spoofProfile.get() ? getProperty() : "");
((HandshakeC2SPacketAccessor) packet).setAddress(address); ((HandshakeC2SPacketAccessor) (Object) packet).setAddress(address);
} }
} }
private String getProperty() { private String getProperty() {
PropertyMap propertyMap = mc.getSession().getProfile().getProperties(); PropertyMap propertyMap = mc.getGameProfile().getProperties();
return "\0" + GSON.toJson(propertyMap.values().toArray()); return "\0" + GSON.toJson(propertyMap.values().toArray());
} }
} }

View File

@@ -35,7 +35,7 @@ public class ColorSigns extends Module {
} }
private void checkWarning() { private void checkWarning() {
String brand = mc.player.getServerBrand(); String brand = mc.player.getServer().getServerModName();
if (brand == null) return; if (brand == null) return;
if (brand.contains("Paper")) warning("You are on a paper server. Color signs won't work here"); if (brand.contains("Paper")) warning("You are on a paper server. Color signs won't work here");
} }

View File

@@ -5,6 +5,7 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import io.netty.buffer.Unpooled;
import meteordevelopment.meteorclient.events.packets.PacketEvent; import meteordevelopment.meteorclient.events.packets.PacketEvent;
import meteordevelopment.meteorclient.settings.BoolSetting; import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.settings.Setting;
@@ -13,7 +14,7 @@ import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.player.ChatUtils; import meteordevelopment.meteorclient.utils.player.ChatUtils;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import net.minecraft.network.PacketByteBuf; 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.HoverEvent;
import net.minecraft.text.MutableText; import net.minecraft.text.MutableText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -53,27 +54,33 @@ public class CustomPackets extends Module {
@EventHandler @EventHandler
private void onCustomPayloadPacket(PacketEvent.Receive event) { private void onCustomPayloadPacket(PacketEvent.Receive event) {
if (event.packet instanceof CustomPayloadS2CPacket packet) { if (event.packet instanceof CustomPayloadS2CPacket packet) {
switch (packet.getChannel().toString()) { switch (packet.payload().id().toString()) {
case "badlion:mods" -> event.setCancelled(onBadlionModsPacket(packet)); case "badlion:mods" -> event.setCancelled(onBadlionModsPacket(packet));
default -> onUnknownPacket(packet); default -> onUnknownPacket(packet);
} }
} }
} }
PacketByteBuf buffer = new PacketByteBuf(Unpooled.buffer());
private void onUnknownPacket(CustomPayloadS2CPacket packet) { private void onUnknownPacket(CustomPayloadS2CPacket packet) {
if (!unknownPackets.get()) return; 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() text.setStyle(text.getStyle()
.withHoverEvent(new HoverEvent( .withHoverEvent(new HoverEvent(
HoverEvent.Action.SHOW_TEXT, HoverEvent.Action.SHOW_TEXT,
Text.literal(readString(packet.getData())) Text.literal(readString(buffer)
))); ))));
info(text); info(text);
} }
private boolean onBadlionModsPacket(CustomPayloadS2CPacket packet) { private boolean onBadlionModsPacket(CustomPayloadS2CPacket packet) {
if (!mods.get()) return false; if (!mods.get()) return false;
String json = readString(packet.getData()); buffer.clear();
packet.payload().write(buffer);
String json = readString(buffer);
Map<String, BadlionMod> mods = GSON_NON_PRETTY.fromJson(json, BADLION_MODS_TYPE); Map<String, BadlionMod> mods = GSON_NON_PRETTY.fromJson(json, BADLION_MODS_TYPE);
ChatUtils.sendMsg("Badlion", format("Mods", formatMods(mods))); ChatUtils.sendMsg("Badlion", format("Mods", formatMods(mods)));
return true; return true;

View File

@@ -171,12 +171,12 @@ public class NewChunks extends Module {
else if (event.packet instanceof ChunkDataS2CPacket && mc.world != null) { else if (event.packet instanceof ChunkDataS2CPacket && mc.world != null) {
ChunkDataS2CPacket packet = (ChunkDataS2CPacket) event.packet; 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); WorldChunk chunk = new WorldChunk(mc.world, pos);
try { 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) { } catch (ArrayIndexOutOfBoundsException e) {
return; return;
} }

View File

@@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.mixin.MinecraftClientAccessor;
import meteordevelopment.meteorclient.systems.accounts.Account; import meteordevelopment.meteorclient.systems.accounts.Account;
import meteordevelopment.meteorclient.systems.accounts.AccountType; import meteordevelopment.meteorclient.systems.accounts.AccountType;
import meteordevelopment.meteorclient.utils.misc.NbtException; import meteordevelopment.meteorclient.utils.misc.NbtException;
import net.minecraft.client.util.Session; import net.minecraft.client.session.Session;
import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtCompound;
import static meteordevelopment.meteorclient.MeteorClient.mc; import static meteordevelopment.meteorclient.MeteorClient.mc;
@@ -27,7 +27,7 @@ public class CustomYggdrasilAccount extends Account<CustomYggdrasilAccount> {
Session session = CustomYggdrasilLogin.login(name, password, server); Session session = CustomYggdrasilLogin.login(name, password, server);
cache.username = session.getUsername(); cache.username = session.getUsername();
cache.uuid = session.getUuid(); cache.uuid = session.getUuidOrNull().toString();
return true; return true;
} catch (AuthenticationException e) { } catch (AuthenticationException e) {

View File

@@ -15,7 +15,7 @@ import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService;
import com.mojang.authlib.yggdrasil.response.MinecraftTexturesPayload; import com.mojang.authlib.yggdrasil.response.MinecraftTexturesPayload;
import com.mojang.util.UUIDTypeAdapter; import com.mojang.util.UUIDTypeAdapter;
import meteordevelopment.meteorclient.utils.network.Http; 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.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@@ -28,7 +28,11 @@ import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;
import java.util.*; import java.util.*;
import static meteordevelopment.meteorclient.MeteorClient.mc;
public class CustomYggdrasilLogin { 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 { public static Session login(String name, String password, String server) throws AuthenticationException {
try { try {
String url = server + "/authserver/authenticate"; String url = server + "/authserver/authenticate";
@@ -47,7 +51,7 @@ public class CustomYggdrasilLogin {
throw new AuthenticationException(json.get("errorMessage").getAsString()); throw new AuthenticationException(json.get("errorMessage").getAsString());
} }
String token = json.get("accessToken").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(); String username = json.get("selectedProfile").getAsJsonObject().get("name").getAsString();
return new Session(username, uuid, token, Optional.empty(), Optional.empty(), Session.AccountType.MOJANG); return new Session(username, uuid, token, Optional.empty(), Optional.empty(), Session.AccountType.MOJANG);
} catch (Exception e) { } 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 { public static class LocalYggdrasilMinecraftSessionService extends YggdrasilMinecraftSessionService {
private static final Logger LOGGER = LogManager.getLogger(); private static final Logger LOGGER = LogManager.getLogger();
private final PublicKey publicKey; private final PublicKey publicKey;
private final Gson gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create(); private final Gson gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create();
public LocalYggdrasilMinecraftSessionService(YggdrasilAuthenticationService service, String serverUrl) { public LocalYggdrasilMinecraftSessionService(YggdrasilAuthenticationService service, String serverUrl) {
super(service, new LocalYggdrasilApi(serverUrl)); super(service.getServicesKeySet(), mc.getNetworkProxy(), localYggdrasilApi);
String data = Http.get(serverUrl).sendString(); String data = Http.get(serverUrl).sendString();
JsonObject json = JsonParser.parseString(data).getAsJsonObject(); JsonObject json = JsonParser.parseString(data).getAsJsonObject();
this.publicKey = getPublicKey(json.get("signaturePublickey").getAsString()); this.publicKey = getPublicKey(json.get("signaturePublickey").getAsString());
@@ -144,17 +104,17 @@ public class CustomYggdrasilLogin {
final MinecraftTexturesPayload result; final MinecraftTexturesPayload result;
try { 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); result = gson.fromJson(json, MinecraftTexturesPayload.class);
} catch (final JsonParseException e) { } catch (final JsonParseException e) {
LOGGER.error("Could not decode textures payload", e); LOGGER.error("Could not decode textures payload", e);
return new HashMap<>(); return new HashMap<>();
} }
if (result == null || result.getTextures() == null) if (result == null || result.textures() == null)
return new HashMap<>(); return new HashMap<>();
return result.getTextures(); return result.textures();
} }
} }
@@ -162,7 +122,7 @@ public class CustomYggdrasilLogin {
public final String server; public final String server;
public LocalYggdrasilAuthenticationService(Proxy proxy, String server) { public LocalYggdrasilAuthenticationService(Proxy proxy, String server) {
super(proxy, new LocalYggdrasilApi(server)); super(proxy, localYggdrasilApi);
this.server = server; this.server = server;
} }
} }

View File

@@ -18,7 +18,7 @@ public class LegacyServerPinger {
} }
public void ping(String ip, int port) { 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), new Thread(() -> pingInCurrentThread(ip, port),
"Server Pinger #" + threadNumber.incrementAndGet()).start(); "Server Pinger #" + threadNumber.incrementAndGet()).start();

View File

@@ -16,12 +16,13 @@ import net.minecraft.network.listener.ClientQueryPacketListener;
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket; import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket; import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket;
import net.minecraft.network.packet.c2s.query.QueryRequestC2SPacket; 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.network.packet.s2c.query.QueryResponseS2CPacket;
import net.minecraft.server.ServerMetadata; import net.minecraft.server.ServerMetadata;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.profiler.PerformanceLog;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@@ -74,13 +75,13 @@ public class ServerListPinger {
notifyDisconnectListeners(); notifyDisconnectListeners();
} }
}, 20000); }, 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; failedToConnect = false;
this.clientConnections.add(clientConnection); this.clientConnections.add(clientConnection);
entry.label = "multiplayer.status.pinging"; entry.label = "multiplayer.status.pinging";
entry.ping = -1L; entry.ping = -1L;
entry.playerListSummary = null; entry.playerListSummary = null;
clientConnection.setPacketListener(new ClientQueryPacketListener() { ClientQueryPacketListener clientQueryPacketListener = new ClientQueryPacketListener() {
private boolean sentQuery; private boolean sentQuery;
private boolean received; private boolean received;
private long startTime; 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 l = this.startTime;
long m = Util.getMeasuringTimeMs(); long m = Util.getMeasuringTimeMs();
entry.ping = m - l; entry.ping = m - l;
@@ -157,10 +158,12 @@ public class ServerListPinger {
public boolean isConnectionOpen() { public boolean isConnectionOpen() {
return clientConnection.isOpen(); return clientConnection.isOpen();
} }
}); };
clientConnection.setPacketListener(clientQueryPacketListener);
try { try {
clientConnection.send(new HandshakeC2SPacket(serverAddress.getAddress(), serverAddress.getPort(), NetworkState.STATUS)); clientConnection.connect(serverAddress.getAddress(), serverAddress.getPort(), clientQueryPacketListener);
clientConnection.send(new QueryRequestC2SPacket()); clientConnection.send(new QueryRequestC2SPacket());
} catch (Throwable var8) { } catch (Throwable var8) {
LOGGER.error("Failed to ping server {}", serverAddress, var8); LOGGER.error("Failed to ping server {}", serverAddress, var8);

View File

@@ -3,6 +3,7 @@
"package": "anticope.rejects.mixin", "package": "anticope.rejects.mixin",
"compatibilityLevel": "JAVA_16", "compatibilityLevel": "JAVA_16",
"client": [ "client": [
"ClientCommonNetwokHandlerMixin",
"ClientPlayerInteractionManagerMixin", "ClientPlayerInteractionManagerMixin",
"ClientPlayNetworkHandlerMixin", "ClientPlayNetworkHandlerMixin",
"CommandSuggestorMixin", "CommandSuggestorMixin",