From 4a512e43bd19668c0e897b87d01bf5eacc839be4 Mon Sep 17 00:00:00 2001 From: FlorianMichael <60033407+FlorianMichael@users.noreply.github.com> Date: Tue, 24 Oct 2023 03:14:00 +0200 Subject: [PATCH] Delete Upstreamed fixes from VV Upstream has merged some of the existing VFP merges into itself, so we can delete them here --- gradle.properties | 2 +- .../signatures/AbstractChatSession.java | 45 ---- .../definition/signatures/MessageSigner.java | 47 ----- .../signatures/v1_19_0/ChatSession1_19_0.java | 54 ----- .../provider/CommandArgumentsProvider.java | 30 --- .../signatures/v1_19_0/util/JsonHelper.java | 98 --------- .../signatures/v1_19_2/ChatSession1_19_2.java | 49 ----- .../v1_19_2/model/MessageBodyModel.java | 71 ------- .../v1_19_2/model/MessageHeaderModel.java | 44 ---- .../v1_19_2/model/MessageMetadataModel.java | 21 -- .../model/SignatureUpdatableModel.java | 23 -- .../v1_19_2/model/SignatureUpdaterModel.java | 23 -- .../MixinClientLoginNetworkHandler.java | 44 ---- .../MixinClientPlayNetworkHandler.java | 11 - .../screen/MixinConnectScreen_1.java | 21 +- .../MixinInventoryPackets_2.java | 33 --- .../MixinProtocol1_19_1To1_19.java | 132 ------------ .../MixinProtocol1_19_3To1_19_1.java | 196 ------------------ .../MixinProtocol1_9_1To1_9.java | 41 ---- .../impl/ViaFabricPlusVLLoader.java | 12 +- ...ViaFabricPlusCommandArgumentsProvider.java | 22 +- src/main/resources/viafabricplus.mixins.json | 5 - 22 files changed, 29 insertions(+), 995 deletions(-) delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/AbstractChatSession.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/MessageSigner.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/ChatSession1_19_0.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/provider/CommandArgumentsProvider.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/util/JsonHelper.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/ChatSession1_19_2.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageBodyModel.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageHeaderModel.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageMetadataModel.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/SignatureUpdatableModel.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/SignatureUpdaterModel.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/network/MixinClientLoginNetworkHandler.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_14to1_13_2/MixinInventoryPackets_2.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19_1to1_19/MixinProtocol1_19_1To1_19.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19_3to1_19_1/MixinProtocol1_19_3To1_19_1.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_9_1to1_9/MixinProtocol1_9_1To1_9.java rename src/main/java/de/florianmichael/viafabricplus/protocolhack/provider/{ => viaversion}/ViaFabricPlusCommandArgumentsProvider.java (54%) diff --git a/gradle.properties b/gradle.properties index 79713c79..e5bedb91 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # gradle -org.gradle.jvmargs=-Xmx8G -XX:+UseG1GC +org.gradle.jvmargs=-Xmx8G org.gradle.parallel=true # minecraft and fabric diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/AbstractChatSession.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/AbstractChatSession.java deleted file mode 100644 index 5d3c347e..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/AbstractChatSession.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures; - -import com.viaversion.viaversion.api.connection.StoredObject; -import com.viaversion.viaversion.api.connection.UserConnection; -import com.viaversion.viaversion.api.minecraft.ProfileKey; - -import java.security.PrivateKey; - -public abstract class AbstractChatSession extends StoredObject { - private final ProfileKey profileKey; - - private final MessageSigner signer; - - public AbstractChatSession(UserConnection user, final ProfileKey profileKey, final PrivateKey privateKey) { - super(user); - this.profileKey = profileKey; - - this.signer = MessageSigner.create(privateKey, "SHA256withRSA"); - } - - public ProfileKey getProfileKey() { - return profileKey; - } - - public MessageSigner getSigner() { - return signer; - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/MessageSigner.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/MessageSigner.java deleted file mode 100644 index 85217270..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/MessageSigner.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures; - -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model.SignatureUpdatableModel; - -import java.security.*; - -public interface MessageSigner { - - byte[] sign(final SignatureUpdatableModel signer); - - static MessageSigner create(final PrivateKey privateKey, final String algorithm) { - return signer -> { - try { - final Signature signature = Signature.getInstance(algorithm); - signature.initSign(privateKey); - - signer.update(data -> { - try { - signature.update(data); - } catch (SignatureException e) { - throw new RuntimeException(e); - } - }); - return signature.sign(); - } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) { - throw new IllegalStateException("Failed to sign message", e); - } - }; - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/ChatSession1_19_0.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/ChatSession1_19_0.java deleted file mode 100644 index 1a27b96e..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/ChatSession1_19_0.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_0; - -import com.viaversion.viaversion.api.connection.UserConnection; -import com.viaversion.viaversion.api.minecraft.ProfileKey; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_0.util.JsonHelper; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model.MessageMetadataModel; -import de.florianmichael.viafabricplus.definition.signatures.AbstractChatSession; -import net.lenni0451.mcstructs.text.components.StringComponent; -import net.lenni0451.mcstructs.text.serializer.TextComponentSerializer; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.charset.StandardCharsets; -import java.security.PrivateKey; -import java.time.Instant; -import java.util.UUID; - -public class ChatSession1_19_0 extends AbstractChatSession { - - public ChatSession1_19_0(UserConnection user, ProfileKey profileKey, PrivateKey privateKey) { - super(user, profileKey, privateKey); - } - - public byte[] sign(final UUID sender, final MessageMetadataModel messageMetadata) { - return getSigner().sign(updater -> { - final byte[] data = new byte[32]; - final ByteBuffer buffer = ByteBuffer.wrap(data).order(ByteOrder.BIG_ENDIAN); - - buffer.putLong(messageMetadata.salt()); - buffer.putLong(sender.getMostSignificantBits()).putLong(sender.getLeastSignificantBits()); - buffer.putLong(Instant.ofEpochMilli(messageMetadata.timestamp()).getEpochSecond()); - - updater.update(data); - updater.update(JsonHelper.toSortedString(TextComponentSerializer.V1_18.serializeJson(new StringComponent(messageMetadata.plain()))).getBytes(StandardCharsets.UTF_8)); - }); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/provider/CommandArgumentsProvider.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/provider/CommandArgumentsProvider.java deleted file mode 100644 index 8fa3270c..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/provider/CommandArgumentsProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_0.provider; - -import com.viaversion.viaversion.api.platform.providers.Provider; -import com.viaversion.viaversion.util.Pair; - -import java.util.List; - -public class CommandArgumentsProvider implements Provider { - - public List> getSignedArguments(final String command) { - return null; - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/util/JsonHelper.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/util/JsonHelper.java deleted file mode 100644 index 9e75fcf9..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_0/util/JsonHelper.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_0.util; - -import com.google.gson.JsonElement; -import com.google.gson.JsonPrimitive; -import com.google.gson.stream.JsonWriter; -import org.jetbrains.annotations.Nullable; - -import java.io.IOException; -import java.io.StringWriter; -import java.util.*; - -public class JsonHelper { - - public static String toSortedString(JsonElement json) { - StringWriter stringWriter = new StringWriter(); - JsonWriter jsonWriter = new JsonWriter(stringWriter); - - try { - writeSorted(jsonWriter, json, Comparator.naturalOrder()); - } catch (IOException var4) { - throw new AssertionError(var4); - } - - return stringWriter.toString(); - } - - public static void writeSorted(JsonWriter writer, @Nullable JsonElement json, @Nullable Comparator comparator) throws IOException { - if (json != null && !json.isJsonNull()) { - if (json.isJsonPrimitive()) { - JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive(); - if (jsonPrimitive.isNumber()) { - writer.value(jsonPrimitive.getAsNumber()); - } else if (jsonPrimitive.isBoolean()) { - writer.value(jsonPrimitive.getAsBoolean()); - } else { - writer.value(jsonPrimitive.getAsString()); - } - } else { - Iterator var5; - if (json.isJsonArray()) { - writer.beginArray(); - var5 = json.getAsJsonArray().iterator(); - - while(var5.hasNext()) { - JsonElement jsonElement = (JsonElement)var5.next(); - writeSorted(writer, jsonElement, comparator); - } - - writer.endArray(); - } else { - if (!json.isJsonObject()) { - throw new IllegalArgumentException("Couldn't write " + json.getClass()); - } - - writer.beginObject(); - var5 = sort(json.getAsJsonObject().entrySet(), comparator).iterator(); - - while(var5.hasNext()) { - Map.Entry entry = (Map.Entry)var5.next(); - writer.name((String)entry.getKey()); - writeSorted(writer, (JsonElement)entry.getValue(), comparator); - } - - writer.endObject(); - } - } - } else { - writer.nullValue(); - } - } - - private static Collection> sort(Collection> entries, @Nullable Comparator comparator) { - if (comparator == null) { - return entries; - } else { - List> list = new ArrayList(entries); - list.sort(Map.Entry.comparingByKey(comparator)); - return list; - } - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/ChatSession1_19_2.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/ChatSession1_19_2.java deleted file mode 100644 index 23213327..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/ChatSession1_19_2.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_2; - -import com.viaversion.viaversion.api.connection.UserConnection; -import com.viaversion.viaversion.api.minecraft.PlayerMessageSignature; -import com.viaversion.viaversion.api.minecraft.ProfileKey; -import de.florianmichael.viafabricplus.definition.signatures.AbstractChatSession; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model.MessageMetadataModel; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model.MessageBodyModel; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model.MessageHeaderModel; - -import java.security.PrivateKey; -import java.security.SecureRandom; -import java.util.UUID; - -public class ChatSession1_19_2 extends AbstractChatSession { - public final static SecureRandom SECURE_RANDOM = new SecureRandom(); - - private byte[] precedingSignature = null; - - public ChatSession1_19_2(UserConnection user, ProfileKey profileKey, PrivateKey privateKey) { - super(user, profileKey, privateKey); - } - - public byte[] sign(final UUID sender, final MessageMetadataModel messageMetadata, final PlayerMessageSignature[] lastSeenMessages) { - final MessageHeaderModel header = new MessageHeaderModel(sender, precedingSignature); - final MessageBodyModel body = new MessageBodyModel(messageMetadata, lastSeenMessages); - - precedingSignature = getSigner().sign(updater -> header.updater(body.digestBytes(), updater)); - - return precedingSignature; - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageBodyModel.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageBodyModel.java deleted file mode 100644 index 9245b0bc..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageBodyModel.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model; - -import com.google.common.hash.Hashing; -import com.google.common.hash.HashingOutputStream; -import com.viaversion.viaversion.api.minecraft.PlayerMessageSignature; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.time.Instant; - -@SuppressWarnings("UnstableApiUsage") -public class MessageBodyModel { - private final MessageMetadataModel messageMetadata; - private final PlayerMessageSignature[] lastSeenMessages; - - public MessageBodyModel(MessageMetadataModel messageMetadata, PlayerMessageSignature[] lastSeenMessages) { - this.messageMetadata = messageMetadata; - this.lastSeenMessages = lastSeenMessages; - } - - public void writeLastSeenMessage(final DataOutput dataOutput) { - for (PlayerMessageSignature seenMessage : lastSeenMessages) { - try { - dataOutput.writeByte(70); - dataOutput.writeLong(seenMessage.uuid().getMostSignificantBits()); - dataOutput.writeLong(seenMessage.uuid().getLeastSignificantBits()); - dataOutput.write(seenMessage.signatureBytes()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - public byte[] digestBytes() { - final HashingOutputStream hashingOutputStream = new HashingOutputStream(Hashing.sha256(), OutputStream.nullOutputStream()); - final DataOutputStream dataOutputStream = new DataOutputStream(hashingOutputStream); - - try { - dataOutputStream.writeLong(messageMetadata.salt()); - dataOutputStream.writeLong(Instant.ofEpochMilli(messageMetadata.timestamp()).getEpochSecond()); - - final OutputStreamWriter outputStreamWriter = new OutputStreamWriter(dataOutputStream, StandardCharsets.UTF_8); - outputStreamWriter.write(messageMetadata.plain()); - outputStreamWriter.flush(); - - dataOutputStream.write(70); - writeLastSeenMessage(dataOutputStream); - } catch (IOException e) { - throw new RuntimeException(e); - } - - return hashingOutputStream.hash().asBytes(); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageHeaderModel.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageHeaderModel.java deleted file mode 100644 index cdeef45b..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageHeaderModel.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.util.UUID; - -public record MessageHeaderModel(UUID sender, byte[] precedingSignature) { - - public byte[] toByteArray(final UUID uuid) { - final byte[] data = new byte[16]; - final ByteBuffer byteBuffer = ByteBuffer.wrap(data).order(ByteOrder.BIG_ENDIAN); - - byteBuffer.putLong(uuid.getMostSignificantBits()); - byteBuffer.putLong(uuid.getLeastSignificantBits()); - - return data; - } - - public void updater(final byte[] bodyDigest, final SignatureUpdaterModel updater) { - if (precedingSignature != null) { - updater.update(precedingSignature); - } - - updater.update(toByteArray(sender())); - updater.update(bodyDigest); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageMetadataModel.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageMetadataModel.java deleted file mode 100644 index a60279e1..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/MessageMetadataModel.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model; - -public record MessageMetadataModel(String plain, long timestamp, long salt) { -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/SignatureUpdatableModel.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/SignatureUpdatableModel.java deleted file mode 100644 index 19170763..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/SignatureUpdatableModel.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model; - -public interface SignatureUpdatableModel { - - void update(final SignatureUpdaterModel updater); -} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/SignatureUpdaterModel.java b/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/SignatureUpdaterModel.java deleted file mode 100644 index 135be067..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/definition/signatures/v1_19_2/model/SignatureUpdaterModel.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model; - -public interface SignatureUpdaterModel { - - void update(final byte[] data); -} diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/network/MixinClientLoginNetworkHandler.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/network/MixinClientLoginNetworkHandler.java deleted file mode 100644 index 5cee6c8b..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/network/MixinClientLoginNetworkHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.network; - -import de.florianmichael.viafabricplus.protocolhack.ProtocolHack; -import net.minecraft.client.network.ClientLoginNetworkHandler; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.login.EnterConfigurationC2SPacket; -import net.raphimc.vialoader.util.VersionEnum; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(ClientLoginNetworkHandler.class) -public class MixinClientLoginNetworkHandler { - - @Shadow @Final private ClientConnection connection; - - @Redirect(method = "onSuccess", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V")) - public void sendPackets(ClientConnection instance, Packet packet) { - // Minecraft used to send these packets when the join game packet by the server is received - if (ProtocolHack.getTargetVersion(connection.channel).isOlderThanOrEqualTo(VersionEnum.r1_20tor1_20_1) && !(packet instanceof EnterConfigurationC2SPacket)) return; - - instance.send(packet); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/network/MixinClientPlayNetworkHandler.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/network/MixinClientPlayNetworkHandler.java index c118f2a2..ecdc5c02 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/network/MixinClientPlayNetworkHandler.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/network/MixinClientPlayNetworkHandler.java @@ -72,17 +72,6 @@ public abstract class MixinClientPlayNetworkHandler { } } - @Inject(method = "onGameJoin", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/GameOptions;setServerViewDistance(I)V", shift = At.Shift.AFTER)) - public void sendBrandAndOptionPackets(GameJoinS2CPacket packet, CallbackInfo ci) { - // Counterpart from MixinClientLoginNetworkHandler - if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(VersionEnum.r1_20tor1_20_1)) { - final var connection = this.getConnection(); - - connection.send(new ClientOptionsC2SPacket(MinecraftClient.getInstance().options.getSyncedOptions())); - connection.send(new CustomPayloadC2SPacket(new BrandCustomPayload(ClientBrandRetriever.getClientModName()))); - } - } - @Inject(method = "onChunkLoadDistance", at = @At("RETURN")) public void emulateSimulationDistance(ChunkLoadDistanceS2CPacket packet, CallbackInfo ci) { if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(VersionEnum.r1_17_1)) { diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinConnectScreen_1.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinConnectScreen_1.java index c28d7039..29e5d1bc 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinConnectScreen_1.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinConnectScreen_1.java @@ -19,14 +19,14 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.screen; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.ProfileKey; +import com.viaversion.viaversion.api.minecraft.signature.storage.ChatSession1_19_0; +import com.viaversion.viaversion.api.minecraft.signature.storage.ChatSession1_19_1; import net.raphimc.mcauth.util.MicrosoftConstants; import net.raphimc.vialoader.util.VersionEnum; import de.florianmichael.viafabricplus.ViaFabricPlus; import de.florianmichael.viafabricplus.definition.account.BedrockAccountHandler; import de.florianmichael.viafabricplus.definition.account.ClassiCubeAccountHandler; import de.florianmichael.viafabricplus.injection.access.IPublicKeyData; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_0.ChatSession1_19_0; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.ChatSession1_19_2; import de.florianmichael.viafabricplus.protocolhack.ProtocolHack; import de.florianmichael.viafabricplus.protocolhack.provider.vialegacy.ViaFabricPlusClassicMPPassProvider; import de.florianmichael.viafabricplus.base.settings.groups.AuthenticationSettings; @@ -49,7 +49,6 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.net.InetSocketAddress; -import java.util.Optional; import java.util.UUID; @Mixin(targets = "net.minecraft.client.gui.screen.ConnectScreen$1") @@ -120,20 +119,24 @@ public class MixinConnectScreen_1 { return; // This disables the chat session emulation for all versions <= 1.18.2 } if (targetVersion.isOlderThanOrEqualTo(VersionEnum.r1_19_1tor1_19_2)) { - MinecraftClient.getInstance().getProfileKeys().fetchKeyPair().thenAcceptAsync(optional -> optional.ifPresentOrElse(playerKeyPair -> { - final PlayerPublicKey.PublicKeyData publicKeyData = playerKeyPair.publicKey().data(); + final var profile = MinecraftClient.getInstance().getProfileKeys().fetchKeyPair().join().orElse(null); + if (profile != null) { + final PlayerPublicKey.PublicKeyData publicKeyData = profile.publicKey().data(); - userConnection.put(new ChatSession1_19_2(userConnection, new ProfileKey(publicKeyData.expiresAt().toEpochMilli(), publicKeyData.key().getEncoded(), publicKeyData.keySignature()), playerKeyPair.privateKey())); + final UUID playerUuid = MinecraftClient.getInstance().getSession().getUuidOrNull(); + userConnection.put(new ChatSession1_19_1(playerUuid, profile.privateKey(), new ProfileKey(publicKeyData.expiresAt().toEpochMilli(), publicKeyData.key().getEncoded(), publicKeyData.keySignature()))); if (targetVersion == VersionEnum.r1_19) { final var legacyKey = ((IPublicKeyData) (Object) publicKeyData).viafabricplus_getV1Key(); if (legacyKey != null) { - userConnection.put(new ChatSession1_19_0(userConnection, new ProfileKey(publicKeyData.expiresAt().toEpochMilli(), publicKeyData.key().getEncoded(), legacyKey.array()), playerKeyPair.privateKey())); + userConnection.put(new ChatSession1_19_0(playerUuid, profile.privateKey(), new ProfileKey(publicKeyData.expiresAt().toEpochMilli(), publicKeyData.key().getEncoded(), legacyKey.array()))); } else { - ViaFabricPlus.LOGGER.error("Failed to get v1 key, can't setup ChatSession_0"); + ViaFabricPlus.LOGGER.error("Failed to fetch legacy key, can't setup ChatSession"); } } - }, () -> ViaFabricPlus.LOGGER.error("Failed to fetch keyPair, can't setup ChatSession"))); + } else { + ViaFabricPlus.LOGGER.error("Failed to fetch keyPair, can't setup ChatSession"); + } } } } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_14to1_13_2/MixinInventoryPackets_2.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_14to1_13_2/MixinInventoryPackets_2.java deleted file mode 100644 index b177fd02..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_14to1_13_2/MixinInventoryPackets_2.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion.protocol1_14to1_13_2; - -import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; -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; - -@Mixin(targets = "com.viaversion.viaversion.protocols.protocol1_14to1_13_2.packets.InventoryPackets$2", remap = false) -public class MixinInventoryPackets_2 { - - @Inject(method = "lambda$register$0", at = @At(value = "FIELD", target = "Lcom/viaversion/viaversion/api/type/Type;BOOLEAN:Lcom/viaversion/viaversion/api/type/types/BooleanType;", ordinal = 2, shift = At.Shift.BEFORE)) - public void removeWrongData(PacketWrapper wrapper, CallbackInfo ci) { - wrapper.clearInputBuffer(); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19_1to1_19/MixinProtocol1_19_1To1_19.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19_1to1_19/MixinProtocol1_19_1To1_19.java deleted file mode 100644 index e65bbeac..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19_1to1_19/MixinProtocol1_19_1To1_19.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion.protocol1_19_1to1_19; - -import com.viaversion.viaversion.api.Via; -import com.viaversion.viaversion.api.protocol.AbstractProtocol; -import com.viaversion.viaversion.api.protocol.packet.State; -import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; -import com.viaversion.viaversion.api.type.Type; -import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets; -import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets; -import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ClientboundPackets1_19_1; -import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.Protocol1_19_1To1_19; -import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ServerboundPackets1_19_1; -import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ClientboundPackets1_19; -import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ServerboundPackets1_19; -import com.viaversion.viaversion.util.Pair; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model.MessageMetadataModel; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_0.provider.CommandArgumentsProvider; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_0.ChatSession1_19_0; -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 java.util.UUID; - -@Mixin(Protocol1_19_1To1_19.class) -public class MixinProtocol1_19_1To1_19 extends AbstractProtocol { - - @Inject(method = "registerPackets", at = @At("RETURN"), remap = false) - public void injectRegisterPackets(CallbackInfo ci) { - this.registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketHandlers() { - public void register() { - map(Type.STRING); - read(Type.OPTIONAL_PROFILE_KEY); - handler(wrapper -> { - final ChatSession1_19_0 chatSession1190 = wrapper.user().get(ChatSession1_19_0.class); - - wrapper.write(Type.OPTIONAL_PROFILE_KEY, chatSession1190 == null ? null : chatSession1190.getProfileKey()); - }); - read(Type.OPTIONAL_UUID); - } - }, true); - this.registerClientbound(State.LOGIN, ClientboundLoginPackets.HELLO.getId(), ClientboundLoginPackets.HELLO.getId(), new PacketHandlers() { - public void register() { - } - }, true); - this.registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketHandlers() { - public void register() { - } - }, true); - this.registerServerbound(ServerboundPackets1_19_1.CHAT_MESSAGE, ServerboundPackets1_19.CHAT_MESSAGE, new PacketHandlers() { - @Override - public void register() { - map(Type.STRING); // Message - map(Type.LONG); // Timestamp - map(Type.LONG); // Salt - map(Type.BYTE_ARRAY_PRIMITIVE); // Signature - handler(wrapper -> { - final UUID sender = wrapper.user().getProtocolInfo().getUuid(); - final String message = wrapper.get(Type.STRING, 0); - final long timestamp = wrapper.get(Type.LONG, 0); - final long salt = wrapper.get(Type.LONG, 1); - - final ChatSession1_19_0 chatSession1190 = wrapper.user().get(ChatSession1_19_0.class); - if (chatSession1190 != null) { - wrapper.set(Type.BYTE_ARRAY_PRIMITIVE, 0, chatSession1190.sign(sender, new MessageMetadataModel(message, timestamp, salt))); - } - }); - map(Type.BOOLEAN); // Signed preview - read(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY); // Last seen messages - read(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE); // Last received message - } - }, true); - this.registerServerbound(ServerboundPackets1_19_1.CHAT_COMMAND, ServerboundPackets1_19.CHAT_COMMAND, new PacketHandlers() { - @Override - public void register() { - map(Type.STRING); // Command - map(Type.LONG); // Timestamp - map(Type.LONG); // Salt - map(Type.VAR_INT); // Signatures - - // Emulating old signatures - handler(wrapper -> { - final UUID sender = wrapper.user().getProtocolInfo().getUuid(); - final String command = wrapper.get(Type.STRING, 0); - final long timestamp = wrapper.get(Type.LONG, 0); - final long salt = wrapper.get(Type.LONG, 1); - - final ChatSession1_19_0 chatSession1190 = wrapper.user().get(ChatSession1_19_0.class); - final CommandArgumentsProvider commandArgumentsProvider = Via.getManager().getProviders().get(CommandArgumentsProvider.class); - - if (chatSession1190 != null) { - if (commandArgumentsProvider != null) { - final int signatures = wrapper.get(Type.VAR_INT, 0); - for (int i = 0; i < signatures; i++) { - wrapper.read(Type.STRING); // Argument name - wrapper.read(Type.BYTE_ARRAY_PRIMITIVE); // Signature - } - - for (Pair argument : commandArgumentsProvider.getSignedArguments(command)) { - final byte[] signature = chatSession1190.sign(sender, new MessageMetadataModel(argument.value(), timestamp, salt)); - - wrapper.write(Type.STRING, argument.key()); - wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); - } - } - } - }); - map(Type.BOOLEAN); // Signed preview - read(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY); // Last seen messages - read(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE); // Last received message - } - }, true); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19_3to1_19_1/MixinProtocol1_19_3To1_19_1.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19_3to1_19_1/MixinProtocol1_19_3To1_19_1.java deleted file mode 100644 index a877f59f..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19_3to1_19_1/MixinProtocol1_19_3To1_19_1.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion.protocol1_19_3to1_19_1; - -import com.google.common.primitives.Longs; -import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.storage.NonceStorage; -import com.viaversion.viaversion.api.Via; -import com.viaversion.viaversion.api.protocol.AbstractProtocol; -import com.viaversion.viaversion.api.protocol.packet.State; -import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; -import com.viaversion.viaversion.api.type.Type; -import com.viaversion.viaversion.api.type.types.BitSetType; -import com.viaversion.viaversion.api.type.types.ByteArrayType; -import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets; -import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets; -import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ClientboundPackets1_19_1; -import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ServerboundPackets1_19_1; -import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3; -import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.Protocol1_19_3To1_19_1; -import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ServerboundPackets1_19_3; -import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.storage.ReceivedMessagesStorage; -import com.viaversion.viaversion.util.Pair; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.model.MessageMetadataModel; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_0.provider.CommandArgumentsProvider; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.ChatSession1_19_2; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.UUID; - -@Mixin(value = Protocol1_19_3To1_19_1.class, remap = false) -public class MixinProtocol1_19_3To1_19_1 extends AbstractProtocol { - - @Unique - private final static BitSetType ACKNOWLEDGED_BIT_SET_TYPE = new BitSetType(20); - - @Inject(method = "registerPackets", at = @At("RETURN")) - public void fixKeys(CallbackInfo ci) { - this.registerClientbound(State.LOGIN, ClientboundLoginPackets.HELLO.getId(), ClientboundLoginPackets.HELLO.getId(), new PacketHandlers() { - @Override - public void register() { - map(Type.STRING); // Server-ID - map(Type.BYTE_ARRAY_PRIMITIVE); // Public Key - map(Type.BYTE_ARRAY_PRIMITIVE); // Nonce - handler(wrapper -> wrapper.user().put(new NonceStorage(wrapper.get(Type.BYTE_ARRAY_PRIMITIVE, 1)))); - } - }, true); - this.registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketHandlers() { - @Override - public void register() { - map(Type.STRING); // Name - handler(wrapper -> { - final ChatSession1_19_2 chatSession1192 = wrapper.user().get(ChatSession1_19_2.class); - wrapper.write(Type.OPTIONAL_PROFILE_KEY, chatSession1192 != null ? chatSession1192.getProfileKey() : null); // Profile Key - }); - map(Type.OPTIONAL_UUID); // UUID - } - }, true); - - this.registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketHandlers() { - @Override - public void register() { - map(Type.BYTE_ARRAY_PRIMITIVE); // Keys - - handler(wrapper -> { - final ChatSession1_19_2 chatSession1192 = wrapper.user().get(ChatSession1_19_2.class); - final byte[] encryptedNonce = wrapper.read(Type.BYTE_ARRAY_PRIMITIVE); - - wrapper.write(Type.BOOLEAN, chatSession1192 == null); - if (chatSession1192 != null) { - final long salt = ChatSession1_19_2.SECURE_RANDOM.nextLong(); - final byte[] signedNonce = chatSession1192.getSigner().sign(updater -> { - updater.update(wrapper.user().get(NonceStorage.class).nonce()); - updater.update(Longs.toByteArray(salt)); - }); - - wrapper.write(Type.LONG, salt); - wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signedNonce); - } else { - wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, encryptedNonce); - } - }); - } - }, true); - - registerServerbound(ServerboundPackets1_19_3.CHAT_COMMAND, ServerboundPackets1_19_1.CHAT_COMMAND, new PacketHandlers() { - @Override - public void register() { - map(Type.STRING); // Command - map(Type.LONG); // Timestamp - map(Type.LONG); // Salt - map(Type.VAR_INT); // Signatures - handler(wrapper -> { - final int signatures = wrapper.get(Type.VAR_INT, 0); - - final ChatSession1_19_2 chatSession1192 = wrapper.user().get(ChatSession1_19_2.class); - final CommandArgumentsProvider commandArgumentsProvider = Via.getManager().getProviders().get(CommandArgumentsProvider.class); - - final boolean signingEnabled = chatSession1192 != null && commandArgumentsProvider != null; - - for (int i = 0; i < signatures; i++) { - if (signingEnabled) { - wrapper.read(Type.STRING); // Argument name - wrapper.read(Type.SIGNATURE_BYTES); // Signature - } else { - wrapper.passthrough(Type.STRING); // Argument name - - // Signature - wrapper.read(Type.SIGNATURE_BYTES); - wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, new byte[0]); - } - } - - if (chatSession1192 != null) { - final UUID sender = wrapper.user().getProtocolInfo().getUuid(); - final String command = wrapper.get(Type.STRING, 0); - final long timestamp = wrapper.get(Type.LONG, 0); - final long salt = wrapper.get(Type.LONG, 1); - - final ReceivedMessagesStorage messagesStorage = wrapper.user().get(ReceivedMessagesStorage.class); - - for (Pair argument : commandArgumentsProvider.getSignedArguments(command)) { - final byte[] signature = chatSession1192.sign(sender, new MessageMetadataModel(argument.value(), timestamp, salt), messagesStorage.lastSignatures()); - - wrapper.write(Type.STRING, argument.key()); - wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); - } - } - - wrapper.write(Type.BOOLEAN, false); // No signed preview - - final ReceivedMessagesStorage messagesStorage = wrapper.user().get(ReceivedMessagesStorage.class); - messagesStorage.resetUnacknowledgedCount(); - wrapper.write(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY, messagesStorage.lastSignatures()); - wrapper.write(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE, null); - }); - - read(Type.VAR_INT); // Offset - read(ACKNOWLEDGED_BIT_SET_TYPE); // Acknowledged - } - }, true); - registerServerbound(ServerboundPackets1_19_3.CHAT_MESSAGE, ServerboundPackets1_19_1.CHAT_MESSAGE, new PacketHandlers() { - @Override - public void register() { - map(Type.STRING); // Command - map(Type.LONG); // Timestamp - map(Type.LONG); // Salt - read(Type.OPTIONAL_SIGNATURE_BYTES); // Signature - handler(wrapper -> { - final ChatSession1_19_2 chatSession1192 = wrapper.user().get(ChatSession1_19_2.class); - final ReceivedMessagesStorage messagesStorage = wrapper.user().get(ReceivedMessagesStorage.class); - - if (chatSession1192 != null) { - final UUID sender = wrapper.user().getProtocolInfo().getUuid(); - final String message = wrapper.get(Type.STRING, 0); - final long timestamp = wrapper.get(Type.LONG, 0); - final long salt = wrapper.get(Type.LONG, 1); - - final byte[] signature = chatSession1192.sign(sender, new MessageMetadataModel(message, timestamp, salt), messagesStorage.lastSignatures()); - - wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); - wrapper.write(Type.BOOLEAN, false); // Signed Preview - not implemented yet, but I could do it - } else { - wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, new byte[0]); // Signature - wrapper.write(Type.BOOLEAN, false); // No signed preview - } - - messagesStorage.resetUnacknowledgedCount(); - wrapper.write(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY, messagesStorage.lastSignatures()); - wrapper.write(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE, null); - }); - - read(Type.VAR_INT); // Offset - read(ACKNOWLEDGED_BIT_SET_TYPE); // Acknowledged - } - }, true); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_9_1to1_9/MixinProtocol1_9_1To1_9.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_9_1to1_9/MixinProtocol1_9_1To1_9.java deleted file mode 100644 index 211f39f0..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_9_1to1_9/MixinProtocol1_9_1To1_9.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus - * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion.protocol1_9_1to1_9; - -import com.viaversion.viaversion.api.minecraft.ClientWorld; -import com.viaversion.viaversion.api.protocol.AbstractProtocol; -import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_9_1; -import com.viaversion.viaversion.protocols.protocol1_9_1to1_9.Protocol1_9_1To1_9; -import com.viaversion.viaversion.protocols.protocol1_9to1_8.ClientboundPackets1_9; -import com.viaversion.viaversion.protocols.protocol1_9to1_8.ServerboundPackets1_9; -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; - -@Mixin(value = Protocol1_9_1To1_9.class, remap = false) -public class MixinProtocol1_9_1To1_9 extends AbstractProtocol { - - @Inject(method = "registerPackets", at = @At("RETURN")) - public void clearInputBuffer(CallbackInfo ci) { - registerClientbound(ClientboundPackets1_9.CHUNK_DATA, wrapper -> { - wrapper.passthrough(ChunkType1_9_1.forEnvironment(wrapper.user().get(ClientWorld.class).getEnvironment())); - wrapper.clearInputBuffer(); - }); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/protocolhack/impl/ViaFabricPlusVLLoader.java b/src/main/java/de/florianmichael/viafabricplus/protocolhack/impl/ViaFabricPlusVLLoader.java index 3dbda640..7dd7001b 100644 --- a/src/main/java/de/florianmichael/viafabricplus/protocolhack/impl/ViaFabricPlusVLLoader.java +++ b/src/main/java/de/florianmichael/viafabricplus/protocolhack/impl/ViaFabricPlusVLLoader.java @@ -18,23 +18,18 @@ package de.florianmichael.viafabricplus.protocolhack.impl; import com.viaversion.viaversion.api.Via; +import com.viaversion.viaversion.api.minecraft.signature.SignableCommandArgumentsProvider; import com.viaversion.viaversion.api.platform.providers.ViaProviders; import com.viaversion.viaversion.api.protocol.version.VersionProvider; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.PlayerLookTargetProvider; import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.provider.PlayerAbilitiesProvider; import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.HandItemProvider; import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.MovementTransmitterProvider; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_0.provider.CommandArgumentsProvider; -import de.florianmichael.viafabricplus.protocolhack.provider.ViaFabricPlusCommandArgumentsProvider; import de.florianmichael.viafabricplus.protocolhack.provider.viabedrock.ViaFabricPlusBlobCacheProvider; import de.florianmichael.viafabricplus.protocolhack.provider.viabedrock.ViaFabricPlusNettyPipelineProvider; import de.florianmichael.viafabricplus.protocolhack.provider.viabedrock.ViaFabricPlusTransferProvider; import de.florianmichael.viafabricplus.protocolhack.provider.vialegacy.*; -import de.florianmichael.viafabricplus.protocolhack.provider.viaversion.ViaFabricPlusBaseVersionProvider; -import de.florianmichael.viafabricplus.protocolhack.provider.viaversion.ViaFabricPlusHandItemProvider; -import de.florianmichael.viafabricplus.protocolhack.provider.viaversion.ViaFabricPlusMovementTransmitterProvider; -import de.florianmichael.viafabricplus.protocolhack.provider.viaversion.ViaFabricPlusPlayerAbilitiesProvider; -import de.florianmichael.viafabricplus.protocolhack.provider.viaversion.ViaFabricPlusPlayerLookTargetProvider; +import de.florianmichael.viafabricplus.protocolhack.provider.viaversion.*; import net.raphimc.viabedrock.protocol.providers.BlobCacheProvider; import net.raphimc.viabedrock.protocol.providers.NettyPipelineProvider; import net.raphimc.viabedrock.protocol.providers.TransferProvider; @@ -60,8 +55,7 @@ public class ViaFabricPlusVLLoader extends VLLoader { providers.use(HandItemProvider.class, new ViaFabricPlusHandItemProvider()); providers.use(PlayerLookTargetProvider.class, new ViaFabricPlusPlayerLookTargetProvider()); providers.use(PlayerAbilitiesProvider.class, new ViaFabricPlusPlayerAbilitiesProvider()); - - providers.use(CommandArgumentsProvider.class, new ViaFabricPlusCommandArgumentsProvider()); + providers.use(SignableCommandArgumentsProvider.class, new ViaFabricPlusCommandArgumentsProvider()); providers.use(OldAuthProvider.class, new ViaFabricPlusOldAuthProvider()); providers.use(ClassicWorldHeightProvider.class, new ViaFabricPlusClassicWorldHeightProvider()); diff --git a/src/main/java/de/florianmichael/viafabricplus/protocolhack/provider/ViaFabricPlusCommandArgumentsProvider.java b/src/main/java/de/florianmichael/viafabricplus/protocolhack/provider/viaversion/ViaFabricPlusCommandArgumentsProvider.java similarity index 54% rename from src/main/java/de/florianmichael/viafabricplus/protocolhack/provider/ViaFabricPlusCommandArgumentsProvider.java rename to src/main/java/de/florianmichael/viafabricplus/protocolhack/provider/viaversion/ViaFabricPlusCommandArgumentsProvider.java index 49c28de5..833406b9 100644 --- a/src/main/java/de/florianmichael/viafabricplus/protocolhack/provider/ViaFabricPlusCommandArgumentsProvider.java +++ b/src/main/java/de/florianmichael/viafabricplus/protocolhack/provider/viaversion/ViaFabricPlusCommandArgumentsProvider.java @@ -15,25 +15,29 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package de.florianmichael.viafabricplus.protocolhack.provider; +package de.florianmichael.viafabricplus.protocolhack.provider.viaversion; +import com.viaversion.viaversion.api.minecraft.signature.SignableCommandArgumentsProvider; import com.viaversion.viaversion.util.Pair; -import de.florianmichael.viafabricplus.definition.signatures.v1_19_0.provider.CommandArgumentsProvider; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.command.argument.SignedArgumentList; +import java.util.Collections; import java.util.List; -public class ViaFabricPlusCommandArgumentsProvider extends CommandArgumentsProvider { +public class ViaFabricPlusCommandArgumentsProvider extends SignableCommandArgumentsProvider { @Override - public List> getSignedArguments(String command) { - final ClientPlayNetworkHandler clientPlayNetworkHandler = MinecraftClient.getInstance().getNetworkHandler(); + public List> getSignableArguments(String command) { + final var network = MinecraftClient.getInstance().getNetworkHandler(); + if (network != null) { + return SignedArgumentList.of( + network.getCommandDispatcher().parse(command, network.getCommandSource())). + arguments().stream(). + map(function -> new Pair<>(function.getNodeName(), function.value())). + toList(); - if (clientPlayNetworkHandler != null) { - return SignedArgumentList.of(clientPlayNetworkHandler.getCommandDispatcher().parse(command, clientPlayNetworkHandler.getCommandSource())).arguments().stream().map(function -> new Pair<>(function.getNodeName(), function.value())).toList(); } - return super.getSignedArguments(command); + return Collections.emptyList(); } } diff --git a/src/main/resources/viafabricplus.mixins.json b/src/main/resources/viafabricplus.mixins.json index b43c3086..5c99f455 100644 --- a/src/main/resources/viafabricplus.mixins.json +++ b/src/main/resources/viafabricplus.mixins.json @@ -115,7 +115,6 @@ "fixes.minecraft.item.MixinShovelItem", "fixes.minecraft.item.MixinSwordItem", "fixes.minecraft.network.MixinClientCommonNetworkHandler", - "fixes.minecraft.network.MixinClientLoginNetworkHandler", "fixes.minecraft.network.MixinClientPlayNetworkHandler", "fixes.minecraft.packet.MixinChatMessageC2SPacket", "fixes.minecraft.packet.MixinPacketByteBuf", @@ -157,16 +156,12 @@ "fixes.viaversion.protocol1_13to1_12_2.MixinSkullHandler", "fixes.viaversion.protocol1_13to1_12_2.MixinWorldPackets1_13", "fixes.viaversion.protocol1_14to1_13_2.MixinInventoryPackets", - "fixes.viaversion.protocol1_14to1_13_2.MixinInventoryPackets_2", "fixes.viaversion.protocol1_15to1_14_4.MixinMetadataRewriter1_15To1_14_4", "fixes.viaversion.protocol1_16_2to1_16_1.MixinWorldPackets_2", "fixes.viaversion.protocol1_17to1_16_4.MixinEntityPackets1_17", "fixes.viaversion.protocol1_17to1_16_4.MixinInventoryAcknowledgements", "fixes.viaversion.protocol1_17to1_16_4.MixinWorldPackets1_17", - "fixes.viaversion.protocol1_19_1to1_19.MixinProtocol1_19_1To1_19", - "fixes.viaversion.protocol1_19_3to1_19_1.MixinProtocol1_19_3To1_19_1", "fixes.viaversion.protocol1_19to1_18_2.MixinWorldPackets", - "fixes.viaversion.protocol1_9_1to1_9.MixinProtocol1_9_1To1_9", "fixes.viaversion.protocol1_9to1_8.MixinChunkType1_8", "fixes.viaversion.protocol1_9to1_8.MixinCommandBlockProvider", "fixes.viaversion.protocol1_9to1_8.MixinEntityPackets_6_1",