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",