From 2f9e8a40adaa624d4c31c8d52a88cdea3122f6d4 Mon Sep 17 00:00:00 2001
From: RaphiMC <50594595+RaphiMC@users.noreply.github.com>
Date: Sat, 7 Oct 2023 18:51:12 +0200
Subject: [PATCH] Made <= 1.6.4 protocols stateless (Finished Via 4.8.1 update)
---
.../protocol}/EmptyBaseProtocol.java | 2 +-
.../protocol}/PreNettyBaseProtocol.java | 2 +-
.../api/protocol/StatelessProtocol.java | 34 ++
.../protocol/StatelessTransitionProtocol.java | 67 ++++
.../vialegacy/platform/ViaLegacyPlatform.java | 2 +-
.../Protocola1_0_16_2toa1_0_15.java | 8 +-
.../Protocola1_0_17_1_0_17_4toa1_0_16_2.java | 4 +-
...tocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4.java | 4 +-
...rotocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1.java | 7 +-
.../Protocola1_2_2toa1_2_0_1_2_1_1.java | 4 +-
.../Protocola1_2_3_1_2_3_4toa1_2_2.java | 4 +-
...rotocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4.java | 4 +-
.../Protocolb1_0_1_1_1toa1_2_3_5_1_2_6.java | 4 +-
.../Protocol1_0_0_1tob1_8_0_1.java | 4 +-
.../Protocolb1_1_2tob1_0_1_1.java | 4 +-
.../Protocolb1_2_0_2tob1_1_2.java | 4 +-
.../Protocolb1_3_0_1tob1_2_0_2.java | 4 +-
.../Protocolb1_4_0_1tob1_3_0_1.java | 4 +-
.../Protocolb1_5_0_2tob1_4_0_1.java | 23 +-
.../Protocolb1_6_0_6tob1_5_0_2.java | 4 +-
.../Protocolb1_7_0_3tob1_6_0_6.java | 4 +-
.../Protocolb1_8_0_1tob1_7_0_3.java | 9 +-
.../Protocola1_0_15toc0_30.java | 14 +-
.../Protocolc0_0_16a_02to0_0_15a_1.java | 7 +-
.../Protocolc0_0_18a_02toc0_0_16a_02.java | 4 +-
.../Protocolc0_0_19a_06toc0_0_18a_02.java | 4 +-
.../Protocolc0_27toc0_0_19a_06.java | 7 +-
.../Protocolc0_30toc0_27.java | 4 +-
.../Protocolc0_30toc0_30cpe.java | 10 +-
.../Protocol1_1to1_0_0_1.java | 7 +-
.../Protocol1_2_1_3to1_1.java | 9 +-
.../Protocol1_2_4_5to1_2_1_3.java | 4 +-
.../Protocol1_3_1_2to1_2_4_5.java | 88 +++--
.../Protocol1_4_2to1_3_1_2.java | 9 +-
.../Protocol1_4_4_5to1_4_2.java | 4 +-
.../Protocol1_4_6_7to1_4_4_5.java | 4 +-
.../Protocol1_5_0_1to1_4_6_7.java | 4 +-
.../Protocol1_5_2to1_5_0_1.java | 4 +-
.../Protocol1_6_1to1_5_2.java | 7 +-
.../Protocol1_6_2to1_6_1.java | 7 +-
.../Protocol1_6_4to1_6_2.java | 4 +-
.../Protocol1_7_2_5to1_6_4.java | 302 +++++++++---------
42 files changed, 386 insertions(+), 323 deletions(-)
rename src/main/java/net/raphimc/vialegacy/{protocols/release/protocol1_7_2_5to1_6_4/baseprotocols => api/protocol}/EmptyBaseProtocol.java (92%)
rename src/main/java/net/raphimc/vialegacy/{protocols/release/protocol1_7_2_5to1_6_4/baseprotocols => api/protocol}/PreNettyBaseProtocol.java (97%)
create mode 100644 src/main/java/net/raphimc/vialegacy/api/protocol/StatelessProtocol.java
create mode 100644 src/main/java/net/raphimc/vialegacy/api/protocol/StatelessTransitionProtocol.java
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/baseprotocols/EmptyBaseProtocol.java b/src/main/java/net/raphimc/vialegacy/api/protocol/EmptyBaseProtocol.java
similarity index 92%
rename from src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/baseprotocols/EmptyBaseProtocol.java
rename to src/main/java/net/raphimc/vialegacy/api/protocol/EmptyBaseProtocol.java
index ca31c08..c27cb6c 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/baseprotocols/EmptyBaseProtocol.java
+++ b/src/main/java/net/raphimc/vialegacy/api/protocol/EmptyBaseProtocol.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.baseprotocols;
+package net.raphimc.vialegacy.api.protocol;
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol;
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/baseprotocols/PreNettyBaseProtocol.java b/src/main/java/net/raphimc/vialegacy/api/protocol/PreNettyBaseProtocol.java
similarity index 97%
rename from src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/baseprotocols/PreNettyBaseProtocol.java
rename to src/main/java/net/raphimc/vialegacy/api/protocol/PreNettyBaseProtocol.java
index f41e71d..cef9a78 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/baseprotocols/PreNettyBaseProtocol.java
+++ b/src/main/java/net/raphimc/vialegacy/api/protocol/PreNettyBaseProtocol.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.baseprotocols;
+package net.raphimc.vialegacy.api.protocol;
import com.viaversion.viaversion.api.connection.ProtocolInfo;
import com.viaversion.viaversion.api.connection.UserConnection;
diff --git a/src/main/java/net/raphimc/vialegacy/api/protocol/StatelessProtocol.java b/src/main/java/net/raphimc/vialegacy/api/protocol/StatelessProtocol.java
new file mode 100644
index 0000000..79acf37
--- /dev/null
+++ b/src/main/java/net/raphimc/vialegacy/api/protocol/StatelessProtocol.java
@@ -0,0 +1,34 @@
+/*
+ * This file is part of ViaLegacy - https://github.com/RaphiMC/ViaLegacy
+ * Copyright (C) 2023 RK_01/RaphiMC 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 net.raphimc.vialegacy.api.protocol;
+
+import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import com.viaversion.viaversion.api.protocol.packet.*;
+
+public abstract class StatelessProtocol extends AbstractProtocol {
+
+ public StatelessProtocol(final Class unmappedClientboundPacketType, final Class mappedClientboundPacketType, final Class mappedServerboundPacketType, final Class unmappedServerboundPacketType) {
+ super(unmappedClientboundPacketType, mappedClientboundPacketType, mappedServerboundPacketType, unmappedServerboundPacketType);
+ }
+
+ @Override
+ public void transform(Direction direction, State state, PacketWrapper packetWrapper) throws Exception {
+ super.transform(direction, direction == Direction.SERVERBOUND ? state : State.PLAY, packetWrapper);
+ }
+
+}
diff --git a/src/main/java/net/raphimc/vialegacy/api/protocol/StatelessTransitionProtocol.java b/src/main/java/net/raphimc/vialegacy/api/protocol/StatelessTransitionProtocol.java
new file mode 100644
index 0000000..74c5035
--- /dev/null
+++ b/src/main/java/net/raphimc/vialegacy/api/protocol/StatelessTransitionProtocol.java
@@ -0,0 +1,67 @@
+/*
+ * This file is part of ViaLegacy - https://github.com/RaphiMC/ViaLegacy
+ * Copyright (C) 2023 RK_01/RaphiMC 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 net.raphimc.vialegacy.api.protocol;
+
+import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
+import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
+import com.viaversion.viaversion.api.protocol.packet.State;
+import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
+
+public abstract class StatelessTransitionProtocol extends StatelessProtocol {
+
+ public StatelessTransitionProtocol(final Class unmappedClientboundPacketType, final Class mappedClientboundPacketType, final Class mappedServerboundPacketType, final Class unmappedServerboundPacketType) {
+ super(unmappedClientboundPacketType, mappedClientboundPacketType, mappedServerboundPacketType, unmappedServerboundPacketType);
+ }
+
+ public void registerServerboundTransition(final ServerboundPacketType unmappedPacketType, final SM mappedPacketType, final PacketHandler handler) {
+ this.registerServerbound(unmappedPacketType.state(), unmappedPacketType.getId(), mappedPacketType != null ? mappedPacketType.getId() : -1, wrapper -> {
+ wrapper.setPacketType(mappedPacketType);
+ if (handler != null) {
+ handler.handle(wrapper);
+ }
+ });
+ }
+
+ public void registerClientboundTransition(final CU unmappedPacketType, final Object... handlers) {
+ if (handlers.length % 2 != 0) throw new IllegalArgumentException("handlers.length % 2 != 0");
+
+ this.registerClientbound(unmappedPacketType.state(), unmappedPacketType.getId(), -1, wrapper -> {
+ final State currentState = wrapper.user().getProtocolInfo().getServerState();
+
+ for (int i = 0; i < handlers.length; i += 2) {
+ if (handlers[i] instanceof State) {
+ final State state = (State) handlers[i];
+ if (state != currentState) continue;
+ } else {
+ final ClientboundPacketType mappedPacketType = (ClientboundPacketType) handlers[i];
+ if (mappedPacketType.state() != currentState) continue;
+ wrapper.setPacketType(mappedPacketType);
+ }
+
+ final PacketHandler handler = (PacketHandler) handlers[i + 1];
+ if (handler != null) {
+ handler.handle(wrapper);
+ }
+ return;
+ }
+
+ throw new IllegalStateException("No handler found for packet " + unmappedPacketType + " in state " + currentState);
+ });
+ }
+
+}
diff --git a/src/main/java/net/raphimc/vialegacy/platform/ViaLegacyPlatform.java b/src/main/java/net/raphimc/vialegacy/platform/ViaLegacyPlatform.java
index 12ce286..fcfb23c 100644
--- a/src/main/java/net/raphimc/vialegacy/platform/ViaLegacyPlatform.java
+++ b/src/main/java/net/raphimc/vialegacy/platform/ViaLegacyPlatform.java
@@ -24,6 +24,7 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import net.raphimc.vialegacy.ViaLegacy;
import net.raphimc.vialegacy.ViaLegacyConfig;
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
+import net.raphimc.vialegacy.api.protocol.EmptyBaseProtocol;
import net.raphimc.vialegacy.protocols.alpha.protocola1_0_16_2toa1_0_15.Protocola1_0_16_2toa1_0_15;
import net.raphimc.vialegacy.protocols.alpha.protocola1_0_17_1_0_17_4toa1_0_16_2.Protocola1_0_17_1_0_17_4toa1_0_16_2;
import net.raphimc.vialegacy.protocols.alpha.protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4.Protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4;
@@ -61,7 +62,6 @@ import net.raphimc.vialegacy.protocols.release.protocol1_6_1to1_5_2.Protocol1_6_
import net.raphimc.vialegacy.protocols.release.protocol1_6_2to1_6_1.Protocol1_6_2to1_6_1;
import net.raphimc.vialegacy.protocols.release.protocol1_6_4to1_6_2.Protocol1_6_4to1_6_2;
import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.Protocol1_7_2_5to1_6_4;
-import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.baseprotocols.EmptyBaseProtocol;
import net.raphimc.vialegacy.protocols.release.protocol1_7_6_10to1_7_2_5.Protocol1_7_6_10to1_7_2_5;
import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.Protocol1_8to1_7_6_10;
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_0_16_2toa1_0_15/Protocola1_0_16_2toa1_0_15.java b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_0_16_2toa1_0_15/Protocola1_0_16_2toa1_0_15.java
index 8bd0a2e..9f4aef3 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_0_16_2toa1_0_15/Protocola1_0_16_2toa1_0_15.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_0_16_2toa1_0_15/Protocola1_0_16_2toa1_0_15.java
@@ -18,16 +18,15 @@
package net.raphimc.vialegacy.protocols.alpha.protocola1_0_16_2toa1_0_15;
import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
-import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.alpha.protocola1_0_17_1_0_17_4toa1_0_16_2.ClientboundPacketsa1_0_16;
import net.raphimc.vialegacy.protocols.alpha.protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4.ServerboundPacketsa1_0_17;
import net.raphimc.vialegacy.protocols.beta.protocolb1_8_0_1tob1_7_0_3.types.Typesb1_7_0_3;
-public class Protocola1_0_16_2toa1_0_15 extends AbstractProtocol {
+public class Protocola1_0_16_2toa1_0_15 extends StatelessProtocol {
public Protocola1_0_16_2toa1_0_15() {
super(ClientboundPacketsa1_0_15.class, ClientboundPacketsa1_0_16.class, ServerboundPacketsa1_0_15.class, ServerboundPacketsa1_0_17.class);
@@ -35,7 +34,7 @@ public class Protocola1_0_16_2toa1_0_15 extends AbstractProtocol {
@@ -46,7 +45,6 @@ public class Protocola1_0_16_2toa1_0_15 extends AbstractProtocol {
+public class Protocola1_0_17_1_0_17_4toa1_0_16_2 extends StatelessProtocol {
public Protocola1_0_17_1_0_17_4toa1_0_16_2() {
super(ClientboundPacketsa1_0_16.class, ClientboundPacketsa1_0_17.class, ServerboundPacketsa1_0_17.class, ServerboundPacketsa1_0_17.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4/Protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4.java b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4/Protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4.java
index 7984155..6eebdbd 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4/Protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4/Protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4.java
@@ -18,12 +18,12 @@
package net.raphimc.vialegacy.protocols.alpha.protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4;
import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.alpha.protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1.ClientboundPacketsa1_1_0;
import net.raphimc.vialegacy.protocols.alpha.protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1.ServerboundPacketsa1_1_0;
-public class Protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4 extends AbstractProtocol {
+public class Protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4 extends StatelessProtocol {
public Protocola1_1_0_1_1_2_1toa1_0_17_1_0_17_4() {
super(ClientboundPacketsa1_0_17.class, ClientboundPacketsa1_1_0.class, ServerboundPacketsa1_0_17.class, ServerboundPacketsa1_1_0.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1/Protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1.java b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1/Protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1.java
index c720e66..ca56b9a 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1/Protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1/Protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1.java
@@ -18,16 +18,15 @@
package net.raphimc.vialegacy.protocols.alpha.protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1;
import com.viaversion.viaversion.api.connection.UserConnection;
-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 net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.alpha.protocola1_2_2toa1_2_0_1_2_1_1.ClientboundPacketsa1_2_0;
import net.raphimc.vialegacy.protocols.alpha.protocola1_2_2toa1_2_0_1_2_1_1.ServerboundPacketsa1_2_0;
import net.raphimc.vialegacy.protocols.beta.protocolb1_8_0_1tob1_7_0_3.types.Typesb1_7_0_3;
-public class Protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1 extends AbstractProtocol {
+public class Protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1 extends StatelessProtocol {
public Protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1() {
super(ClientboundPacketsa1_1_0.class, ClientboundPacketsa1_2_0.class, ServerboundPacketsa1_1_0.class, ServerboundPacketsa1_2_0.class);
@@ -46,7 +45,7 @@ public class Protocola1_2_0_1_2_1_1toa1_1_0_1_1_2_1 extends AbstractProtocol {
+public class Protocola1_2_2toa1_2_0_1_2_1_1 extends StatelessProtocol {
public Protocola1_2_2toa1_2_0_1_2_1_1() {
super(ClientboundPacketsa1_2_0.class, ClientboundPacketsa1_2_2.class, ServerboundPacketsa1_2_0.class, ServerboundPacketsa1_2_2.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_3_1_2_3_4toa1_2_2/Protocola1_2_3_1_2_3_4toa1_2_2.java b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_3_1_2_3_4toa1_2_2/Protocola1_2_3_1_2_3_4toa1_2_2.java
index 2f6e738..0a997d8 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_3_1_2_3_4toa1_2_2/Protocola1_2_3_1_2_3_4toa1_2_2.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_3_1_2_3_4toa1_2_2/Protocola1_2_3_1_2_3_4toa1_2_2.java
@@ -18,15 +18,15 @@
package net.raphimc.vialegacy.protocols.alpha.protocola1_2_3_1_2_3_4toa1_2_2;
import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.alpha.protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4.ClientboundPacketsa1_2_3;
import net.raphimc.vialegacy.protocols.alpha.protocolb1_0_1_1_1toa1_2_3_5_1_2_6.ServerboundPacketsa1_2_6;
-public class Protocola1_2_3_1_2_3_4toa1_2_2 extends AbstractProtocol {
+public class Protocola1_2_3_1_2_3_4toa1_2_2 extends StatelessProtocol {
public Protocola1_2_3_1_2_3_4toa1_2_2() {
super(ClientboundPacketsa1_2_2.class, ClientboundPacketsa1_2_3.class, ServerboundPacketsa1_2_2.class, ServerboundPacketsa1_2_6.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4/Protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4.java b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4/Protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4.java
index 3d86600..c046bb6 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4/Protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4/Protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4.java
@@ -18,14 +18,14 @@
package net.raphimc.vialegacy.protocols.alpha.protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4;
import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.alpha.protocolb1_0_1_1_1toa1_2_3_5_1_2_6.ClientboundPacketsa1_2_6;
import net.raphimc.vialegacy.protocols.alpha.protocolb1_0_1_1_1toa1_2_3_5_1_2_6.ServerboundPacketsa1_2_6;
-public class Protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4 extends AbstractProtocol {
+public class Protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4 extends StatelessProtocol {
public Protocola1_2_3_5_1_2_6toa1_2_3_1_2_3_4() {
super(ClientboundPacketsa1_2_3.class, ClientboundPacketsa1_2_6.class, ServerboundPacketsa1_2_6.class, ServerboundPacketsa1_2_6.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocolb1_0_1_1_1toa1_2_3_5_1_2_6/Protocolb1_0_1_1_1toa1_2_3_5_1_2_6.java b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocolb1_0_1_1_1toa1_2_3_5_1_2_6/Protocolb1_0_1_1_1toa1_2_3_5_1_2_6.java
index bdf1608..0fabad9 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocolb1_0_1_1_1toa1_2_3_5_1_2_6/Protocolb1_0_1_1_1toa1_2_3_5_1_2_6.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/alpha/protocolb1_0_1_1_1toa1_2_3_5_1_2_6/Protocolb1_0_1_1_1toa1_2_3_5_1_2_6.java
@@ -23,7 +23,6 @@ import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
@@ -32,6 +31,7 @@ import net.raphimc.vialegacy.ViaLegacy;
import net.raphimc.vialegacy.api.data.BlockList1_6;
import net.raphimc.vialegacy.api.data.ItemList1_6;
import net.raphimc.vialegacy.api.model.IdAndData;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.alpha.protocolb1_0_1_1_1toa1_2_3_5_1_2_6.data.AlphaItems;
import net.raphimc.vialegacy.protocols.alpha.protocolb1_0_1_1_1toa1_2_3_5_1_2_6.providers.AlphaInventoryProvider;
@@ -56,7 +56,7 @@ import java.util.Arrays;
import java.util.Objects;
import java.util.concurrent.ThreadLocalRandom;
-public class Protocolb1_0_1_1_1toa1_2_3_5_1_2_6 extends AbstractProtocol {
+public class Protocolb1_0_1_1_1toa1_2_3_5_1_2_6 extends StatelessProtocol {
public Protocolb1_0_1_1_1toa1_2_3_5_1_2_6() {
super(ClientboundPacketsa1_2_6.class, ClientboundPacketsb1_1.class, ServerboundPacketsa1_2_6.class, ServerboundPacketsb1_1.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocol1_0_0_1tob1_8_0_1/Protocol1_0_0_1tob1_8_0_1.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocol1_0_0_1tob1_8_0_1/Protocol1_0_0_1tob1_8_0_1.java
index edbd5cb..149016a 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocol1_0_0_1tob1_8_0_1/Protocol1_0_0_1tob1_8_0_1.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocol1_0_0_1tob1_8_0_1/Protocol1_0_0_1tob1_8_0_1.java
@@ -20,9 +20,9 @@ package net.raphimc.vialegacy.protocols.beta.protocol1_0_0_1tob1_8_0_1;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.remapper.LegacyItemRewriter;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.beta.protocol1_0_0_1tob1_8_0_1.rewriter.ItemRewriter;
@@ -35,7 +35,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_3_1_2to1_2_4_5.types.Ty
import net.raphimc.vialegacy.protocols.release.protocol1_4_4_5to1_4_2.types.Types1_4_2;
import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types1_7_6;
-public class Protocol1_0_0_1tob1_8_0_1 extends AbstractProtocol {
+public class Protocol1_0_0_1tob1_8_0_1 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_1_2tob1_0_1_1/Protocolb1_1_2tob1_0_1_1.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_1_2tob1_0_1_1/Protocolb1_1_2tob1_0_1_1.java
index a6791e5..22214a6 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_1_2tob1_0_1_1/Protocolb1_1_2tob1_0_1_1.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_1_2tob1_0_1_1/Protocolb1_1_2tob1_0_1_1.java
@@ -17,11 +17,11 @@
*/
package net.raphimc.vialegacy.protocols.beta.protocolb1_1_2tob1_0_1_1;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.protocols.beta.protocolb1_2_0_2tob1_1_2.ClientboundPacketsb1_1;
import net.raphimc.vialegacy.protocols.beta.protocolb1_2_0_2tob1_1_2.ServerboundPacketsb1_1;
-public class Protocolb1_1_2tob1_0_1_1 extends AbstractProtocol {
+public class Protocolb1_1_2tob1_0_1_1 extends StatelessProtocol {
public Protocolb1_1_2tob1_0_1_1() {
super(ClientboundPacketsb1_1.class, ClientboundPacketsb1_1.class, ServerboundPacketsb1_1.class, ServerboundPacketsb1_1.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_2_0_2tob1_1_2/Protocolb1_2_0_2tob1_1_2.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_2_0_2tob1_1_2/Protocolb1_2_0_2tob1_1_2.java
index aa23f41..16d7f30 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_2_0_2tob1_1_2/Protocolb1_2_0_2tob1_1_2.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_2_0_2tob1_1_2/Protocolb1_2_0_2tob1_1_2.java
@@ -21,12 +21,12 @@ import com.google.common.collect.Lists;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
import net.raphimc.vialegacy.api.model.IdAndData;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.beta.protocolb1_2_0_2tob1_1_2.rewriter.BlockDataRewriter;
import net.raphimc.vialegacy.protocols.beta.protocolb1_2_0_2tob1_1_2.storage.EntityFlagStorage;
@@ -40,7 +40,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_4_2to1_3_1_2.types.Type
import net.raphimc.vialegacy.protocols.release.protocol1_4_4_5to1_4_2.types.Types1_4_2;
import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types1_7_6;
-public class Protocolb1_2_0_2tob1_1_2 extends AbstractProtocol {
+public class Protocolb1_2_0_2tob1_1_2 extends StatelessProtocol {
private final BlockDataRewriter BLOCK_DATA_REWRITER = new BlockDataRewriter();
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_3_0_1tob1_2_0_2/Protocolb1_3_0_1tob1_2_0_2.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_3_0_1tob1_2_0_2/Protocolb1_3_0_1tob1_2_0_2.java
index 49d2603..dc66e3e 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_3_0_1tob1_2_0_2/Protocolb1_3_0_1tob1_2_0_2.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_3_0_1tob1_2_0_2/Protocolb1_3_0_1tob1_2_0_2.java
@@ -22,11 +22,11 @@ import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
import net.raphimc.vialegacy.api.model.IdAndData;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.beta.protocolb1_3_0_1tob1_2_0_2.data.BlockHardnessList;
import net.raphimc.vialegacy.protocols.beta.protocolb1_3_0_1tob1_2_0_2.storage.BlockDigStorage;
@@ -41,7 +41,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types
import java.util.List;
-public class Protocolb1_3_0_1tob1_2_0_2 extends AbstractProtocol {
+public class Protocolb1_3_0_1tob1_2_0_2 extends StatelessProtocol {
public Protocolb1_3_0_1tob1_2_0_2() {
super(ClientboundPacketsb1_2.class, ClientboundPacketsb1_3.class, ServerboundPacketsb1_2.class, ServerboundPacketsb1_4.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_4_0_1tob1_3_0_1/Protocolb1_4_0_1tob1_3_0_1.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_4_0_1tob1_3_0_1/Protocolb1_4_0_1tob1_3_0_1.java
index 0d2af06..98583c9 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_4_0_1tob1_3_0_1/Protocolb1_4_0_1tob1_3_0_1.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_4_0_1tob1_3_0_1/Protocolb1_4_0_1tob1_3_0_1.java
@@ -18,12 +18,12 @@
package net.raphimc.vialegacy.protocols.beta.protocolb1_4_0_1tob1_3_0_1;
import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.beta.protocolb1_5_0_2tob1_4_0_1.ClientboundPacketsb1_4;
import net.raphimc.vialegacy.protocols.beta.protocolb1_5_0_2tob1_4_0_1.ServerboundPacketsb1_4;
-public class Protocolb1_4_0_1tob1_3_0_1 extends AbstractProtocol {
+public class Protocolb1_4_0_1tob1_3_0_1 extends StatelessProtocol {
public Protocolb1_4_0_1tob1_3_0_1() {
super(ClientboundPacketsb1_3.class, ClientboundPacketsb1_4.class, ServerboundPacketsb1_4.class, ServerboundPacketsb1_4.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_5_0_2tob1_4_0_1/Protocolb1_5_0_2tob1_4_0_1.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_5_0_2tob1_4_0_1/Protocolb1_5_0_2tob1_4_0_1.java
index 97ef01d..bb88989 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_5_0_2tob1_4_0_1/Protocolb1_5_0_2tob1_4_0_1.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_5_0_2tob1_4_0_1/Protocolb1_5_0_2tob1_4_0_1.java
@@ -19,10 +19,9 @@ package net.raphimc.vialegacy.protocols.beta.protocolb1_5_0_2tob1_4_0_1;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
-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 net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.beta.protocolb1_5_0_2tob1_4_0_1.types.Typesb1_4;
import net.raphimc.vialegacy.protocols.beta.protocolb1_6_0_6tob1_5_0_2.ClientboundPacketsb1_5;
@@ -36,7 +35,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types
import java.util.List;
-public class Protocolb1_5_0_2tob1_4_0_1 extends AbstractProtocol {
+public class Protocolb1_5_0_2tob1_4_0_1 extends StatelessProtocol {
public Protocolb1_5_0_2tob1_4_0_1() {
super(ClientboundPacketsb1_4.class, ClientboundPacketsb1_5.class, ServerboundPacketsb1_4.class, ServerboundPacketsb1_5.class);
@@ -44,24 +43,12 @@ public class Protocolb1_5_0_2tob1_4_0_1 extends AbstractProtocol {
+public class Protocolb1_6_0_6tob1_5_0_2 extends StatelessProtocol {
public Protocolb1_6_0_6tob1_5_0_2() {
super(ClientboundPacketsb1_5.class, ClientboundPacketsb1_7.class, ServerboundPacketsb1_5.class, ServerboundPacketsb1_7.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_7_0_3tob1_6_0_6/Protocolb1_7_0_3tob1_6_0_6.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_7_0_3tob1_6_0_6/Protocolb1_7_0_3tob1_6_0_6.java
index 1291606..1aef59f 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_7_0_3tob1_6_0_6/Protocolb1_7_0_3tob1_6_0_6.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_7_0_3tob1_6_0_6/Protocolb1_7_0_3tob1_6_0_6.java
@@ -17,11 +17,11 @@
*/
package net.raphimc.vialegacy.protocols.beta.protocolb1_7_0_3tob1_6_0_6;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.protocols.beta.protocolb1_8_0_1tob1_7_0_3.ClientboundPacketsb1_7;
import net.raphimc.vialegacy.protocols.beta.protocolb1_8_0_1tob1_7_0_3.ServerboundPacketsb1_7;
-public class Protocolb1_7_0_3tob1_6_0_6 extends AbstractProtocol {
+public class Protocolb1_7_0_3tob1_6_0_6 extends StatelessProtocol {
public Protocolb1_7_0_3tob1_6_0_6() {
super(ClientboundPacketsb1_7.class, ClientboundPacketsb1_7.class, ServerboundPacketsb1_7.class, ServerboundPacketsb1_7.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_8_0_1tob1_7_0_3/Protocolb1_8_0_1tob1_7_0_3.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_8_0_1tob1_7_0_3/Protocolb1_8_0_1tob1_7_0_3.java
index b0994a2..5cff9f5 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_8_0_1tob1_7_0_3/Protocolb1_8_0_1tob1_7_0_3.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_8_0_1tob1_7_0_3/Protocolb1_8_0_1tob1_7_0_3.java
@@ -23,13 +23,13 @@ import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
import com.viaversion.viaversion.api.minecraft.item.Item;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
import net.raphimc.vialegacy.api.data.BlockList1_6;
import net.raphimc.vialegacy.api.data.ItemList1_6;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.alpha.protocolb1_0_1_1_1toa1_2_3_5_1_2_6.storage.AlphaInventoryTracker;
import net.raphimc.vialegacy.protocols.beta.protocol1_0_0_1tob1_8_0_1.ClientboundPacketsb1_8;
@@ -51,7 +51,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types
import java.util.concurrent.ThreadLocalRandom;
-public class Protocolb1_8_0_1tob1_7_0_3 extends AbstractProtocol {
+public class Protocolb1_8_0_1tob1_7_0_3 extends StatelessProtocol {
public Protocolb1_8_0_1tob1_7_0_3() {
super(ClientboundPacketsb1_7.class, ClientboundPacketsb1_8.class, ServerboundPacketsb1_7.class, ServerboundPacketsb1_8.class);
@@ -228,7 +228,7 @@ public class Protocolb1_8_0_1tob1_7_0_3 extends AbstractProtocol {
@@ -247,8 +247,7 @@ public class Protocolb1_8_0_1tob1_7_0_3 extends AbstractProtocol {
+public class Protocola1_0_15toc0_30 extends StatelessProtocol {
public Protocola1_0_15toc0_30() {
super(ClientboundPacketsc0_28.class, ClientboundPacketsa1_0_15.class, ServerboundPacketsc0_28.class, ServerboundPacketsa1_0_15.class);
@@ -68,13 +67,6 @@ public class Protocola1_0_15toc0_30 extends AbstractProtocol s.replace("&", "ยง")); // reason
- }
- });
-
this.registerClientbound(ClientboundPacketsc0_28.JOIN_GAME, new PacketHandlers() {
@Override
public void register() {
@@ -365,7 +357,7 @@ public class Protocola1_0_15toc0_30 extends AbstractProtocol {
+public class Protocolc0_0_16a_02to0_0_15a_1 extends StatelessProtocol {
public Protocolc0_0_16a_02to0_0_15a_1() {
super(ClientboundPacketsc0_15a.class, ClientboundPacketsc0_19a.class, ServerboundPacketsc0_15a.class, ServerboundPacketsc0_19a.class);
@@ -74,7 +73,7 @@ public class Protocolc0_0_16a_02to0_0_15a_1 extends AbstractProtocol {
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_18a_02toc0_0_16a_02/Protocolc0_0_18a_02toc0_0_16a_02.java b/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_18a_02toc0_0_16a_02/Protocolc0_0_18a_02toc0_0_16a_02.java
index 9eb5dbe..2ce8217 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_18a_02toc0_0_16a_02/Protocolc0_0_18a_02toc0_0_16a_02.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_18a_02toc0_0_16a_02/Protocolc0_0_18a_02toc0_0_16a_02.java
@@ -17,11 +17,11 @@
*/
package net.raphimc.vialegacy.protocols.classic.protocolc0_0_18a_02toc0_0_16a_02;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.protocols.classic.protocolc0_0_20a_27toc0_0_19a_06.ClientboundPacketsc0_19a;
import net.raphimc.vialegacy.protocols.classic.protocolc0_0_20a_27toc0_0_19a_06.ServerboundPacketsc0_19a;
-public class Protocolc0_0_18a_02toc0_0_16a_02 extends AbstractProtocol {
+public class Protocolc0_0_18a_02toc0_0_16a_02 extends StatelessProtocol {
public Protocolc0_0_18a_02toc0_0_16a_02() {
super(ClientboundPacketsc0_19a.class, ClientboundPacketsc0_19a.class, ServerboundPacketsc0_19a.class, ServerboundPacketsc0_19a.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_19a_06toc0_0_18a_02/Protocolc0_0_19a_06toc0_0_18a_02.java b/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_19a_06toc0_0_18a_02/Protocolc0_0_19a_06toc0_0_18a_02.java
index 34a8853..dddcedc 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_19a_06toc0_0_18a_02/Protocolc0_0_19a_06toc0_0_18a_02.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_19a_06toc0_0_18a_02/Protocolc0_0_19a_06toc0_0_18a_02.java
@@ -18,13 +18,13 @@
package net.raphimc.vialegacy.protocols.classic.protocolc0_0_19a_06toc0_0_18a_02;
import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.data.ClassicBlocks;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.storage.ClassicBlockRemapper;
import net.raphimc.vialegacy.protocols.classic.protocolc0_0_20a_27toc0_0_19a_06.ClientboundPacketsc0_19a;
import net.raphimc.vialegacy.protocols.classic.protocolc0_0_20a_27toc0_0_19a_06.ServerboundPacketsc0_19a;
-public class Protocolc0_0_19a_06toc0_0_18a_02 extends AbstractProtocol {
+public class Protocolc0_0_19a_06toc0_0_18a_02 extends StatelessProtocol {
public Protocolc0_0_19a_06toc0_0_18a_02() {
super(ClientboundPacketsc0_19a.class, ClientboundPacketsc0_19a.class, ServerboundPacketsc0_19a.class, ServerboundPacketsc0_19a.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_20a_27toc0_0_19a_06/Protocolc0_27toc0_0_19a_06.java b/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_20a_27toc0_0_19a_06/Protocolc0_27toc0_0_19a_06.java
index 991796d..1ba4d22 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_20a_27toc0_0_19a_06/Protocolc0_27toc0_0_19a_06.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_0_20a_27toc0_0_19a_06/Protocolc0_27toc0_0_19a_06.java
@@ -18,10 +18,9 @@
package net.raphimc.vialegacy.protocols.classic.protocolc0_0_20a_27toc0_0_19a_06;
import com.viaversion.viaversion.api.connection.UserConnection;
-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 net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.ServerboundPacketsc0_28;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.data.ClassicBlocks;
@@ -30,7 +29,7 @@ import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.types.T
import net.raphimc.vialegacy.protocols.classic.protocolc0_0_19a_06toc0_0_18a_02.Protocolc0_0_19a_06toc0_0_18a_02;
import net.raphimc.vialegacy.protocols.classic.protocolc0_28_30toc0_0_20a_27.ClientboundPacketsc0_20a;
-public class Protocolc0_27toc0_0_19a_06 extends AbstractProtocol {
+public class Protocolc0_27toc0_0_19a_06 extends StatelessProtocol {
public Protocolc0_27toc0_0_19a_06() {
super(ClientboundPacketsc0_19a.class, ClientboundPacketsc0_20a.class, ServerboundPacketsc0_19a.class, ServerboundPacketsc0_28.class);
@@ -48,7 +47,7 @@ public class Protocolc0_27toc0_0_19a_06 extends AbstractProtocol {
+public class Protocolc0_30toc0_27 extends StatelessProtocol {
public Protocolc0_30toc0_27() {
super(ClientboundPacketsc0_20a.class, ClientboundPacketsc0_28.class, ServerboundPacketsc0_28.class, ServerboundPacketsc0_28.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_28_30toc0_28_30cpe/Protocolc0_30toc0_30cpe.java b/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_28_30toc0_28_30cpe/Protocolc0_30toc0_30cpe.java
index 933ca0c..bff12b5 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_28_30toc0_28_30cpe/Protocolc0_30toc0_30cpe.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/classic/protocolc0_28_30toc0_28_30cpe/Protocolc0_30toc0_30cpe.java
@@ -23,16 +23,16 @@ import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord1_8;
import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
-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.CustomByteType;
+import io.netty.buffer.Unpooled;
import net.raphimc.vialegacy.ViaLegacy;
import net.raphimc.vialegacy.api.data.BlockList1_6;
import net.raphimc.vialegacy.api.model.ChunkCoord;
import net.raphimc.vialegacy.api.model.IdAndData;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.alpha.protocola1_0_16_2toa1_0_15.ClientboundPacketsa1_0_15;
import net.raphimc.vialegacy.protocols.alpha.protocola1_0_16_2toa1_0_15.Protocola1_0_16_2toa1_0_15;
@@ -61,7 +61,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-public class Protocolc0_30toc0_30cpe extends AbstractProtocol {
+public class Protocolc0_30toc0_30cpe extends StatelessProtocol {
public Protocolc0_30toc0_30cpe() {
super(ClientboundPacketsc0_30cpe.class, ClientboundPacketsc0_28.class, ServerboundPacketsc0_30cpe.class, ServerboundPacketsc0_28.class);
@@ -75,7 +75,7 @@ public class Protocolc0_30toc0_30cpe extends AbstractProtocol {
if (wrapper.user().getProtocolInfo().getPipeline().contains(Protocol1_6_2to1_6_1.class)) {
final ExtensionProtocolMetadataStorage protocolMetadataStorage = wrapper.user().get(ExtensionProtocolMetadataStorage.class);
- final PacketWrapper brand = PacketWrapper.create(ClientboundPackets1_6_4.PLUGIN_MESSAGE, wrapper.user());
+ final PacketWrapper brand = PacketWrapper.create(ClientboundPackets1_6_4.PLUGIN_MESSAGE, Unpooled.buffer(), wrapper.user());
brand.write(Types1_6_4.STRING, "MC|Brand");
final byte[] brandBytes = protocolMetadataStorage.getServerSoftwareName().getBytes(StandardCharsets.UTF_8);
brand.write(Type.SHORT, (short) brandBytes.length); // data length
@@ -264,7 +264,7 @@ public class Protocolc0_30toc0_30cpe extends AbstractProtocol {
+public class Protocol1_1to1_0_0_1 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
@@ -43,7 +42,7 @@ public class Protocol1_1to1_0_0_1 extends AbstractProtocol {
+public class Protocol1_2_1_3to1_1 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
@@ -287,13 +286,13 @@ public class Protocol1_2_1_3to1_1 extends AbstractProtocol s.split(";")[0]); // info
}
});
- this.registerServerbound(State.LOGIN, ServerboundPackets1_2_1.LOGIN.getId(), ServerboundPackets1_1.LOGIN.getId(), new PacketHandlers() {
+ this.registerServerbound(ServerboundPackets1_2_1.LOGIN, new PacketHandlers() {
@Override
public void register() {
map(Type.INT); // protocol id
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_2_4_5to1_2_1_3/Protocol1_2_4_5to1_2_1_3.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_2_4_5to1_2_1_3/Protocol1_2_4_5to1_2_1_3.java
index e42f345..ef2cddc 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_2_4_5to1_2_1_3/Protocol1_2_4_5to1_2_1_3.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_2_4_5to1_2_1_3/Protocol1_2_4_5to1_2_1_3.java
@@ -18,14 +18,14 @@
package net.raphimc.vialegacy.protocols.release.protocol1_2_4_5to1_2_1_3;
import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.remapper.LegacyItemRewriter;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.release.protocol1_2_4_5to1_2_1_3.rewriter.ItemRewriter;
import net.raphimc.vialegacy.protocols.release.protocol1_3_1_2to1_2_4_5.ClientboundPackets1_2_4;
import net.raphimc.vialegacy.protocols.release.protocol1_3_1_2to1_2_4_5.ServerboundPackets1_2_4;
-public class Protocol1_2_4_5to1_2_1_3 extends AbstractProtocol {
+public class Protocol1_2_4_5to1_2_1_3 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_3_1_2to1_2_4_5/Protocol1_3_1_2to1_2_4_5.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_3_1_2to1_2_4_5/Protocol1_3_1_2to1_2_4_5.java
index 6004efb..57ef9e3 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_3_1_2to1_2_4_5/Protocol1_3_1_2to1_2_4_5.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_3_1_2to1_2_4_5/Protocol1_3_1_2to1_2_4_5.java
@@ -28,7 +28,6 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types;
import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
@@ -43,6 +42,7 @@ import net.raphimc.vialegacy.api.LegacyProtocolVersion;
import net.raphimc.vialegacy.api.data.BlockList1_6;
import net.raphimc.vialegacy.api.model.IdAndData;
import net.raphimc.vialegacy.api.model.Location;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.remapper.LegacyItemRewriter;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.release.protocol1_3_1_2to1_2_4_5.data.EntityList;
@@ -76,7 +76,7 @@ import java.util.List;
import java.util.Optional;
import java.util.logging.Level;
-public class Protocol1_3_1_2to1_2_4_5 extends AbstractProtocol {
+public class Protocol1_3_1_2to1_2_4_5 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
@@ -88,23 +88,44 @@ public class Protocol1_3_1_2to1_2_4_5 extends AbstractProtocol {
- handleHandshake(wrapper);
- wrapper.write(Type.SHORT_BYTE_ARRAY, new byte[0]);
- wrapper.write(Type.SHORT_BYTE_ARRAY, new byte[0]);
- wrapper.user().get(ProtocolMetadataStorage.class).skipEncryption = true;
- });
- }
- });
- this.registerClientbound(ClientboundPackets1_2_4.HANDSHAKE, null, new PacketHandlers() {
- @Override
- public void register() {
- handler(wrapper -> {
- handleHandshake(wrapper); // Very hacky but some servers expect the client to send back a Packet1Login
- wrapper.cancel();
+ final String serverHash = wrapper.read(Types1_6_4.STRING); // server hash
+ if (!serverHash.trim().isEmpty() && !serverHash.equalsIgnoreCase("-")) {
+ try {
+ Via.getManager().getProviders().get(OldAuthProvider.class).sendAuthRequest(wrapper.user(), serverHash);
+ } catch (Throwable e) {
+ ViaLegacy.getPlatform().getLogger().log(Level.WARNING, "Could not authenticate with mojang for joinserver request!", e);
+ wrapper.cancel();
+ final PacketWrapper kick = PacketWrapper.create(ClientboundPackets1_3_1.DISCONNECT, wrapper.user());
+ kick.write(Types1_6_4.STRING, "Failed to log in: Invalid session (Try restarting your game and the launcher)"); // reason
+ kick.send(Protocol1_3_1_2to1_2_4_5.class);
+ return;
+ }
+ }
+
+ final ProtocolInfo info = wrapper.user().getProtocolInfo();
+ final PacketWrapper login = PacketWrapper.create(ServerboundPackets1_2_4.LOGIN, wrapper.user());
+ login.write(Type.INT, LegacyProtocolVersion.getRealProtocolVersion(info.getServerProtocolVersion())); // protocol id
+ login.write(Types1_6_4.STRING, info.getUsername()); // username
+ login.write(Types1_6_4.STRING, ""); // level type
+ login.write(Type.INT, 0); // game mode
+ login.write(Type.INT, 0); // dimension id
+ login.write(Type.BYTE, (byte) 0); // difficulty
+ login.write(Type.BYTE, (byte) 0); // world height
+ login.write(Type.BYTE, (byte) 0); // max players
+ login.sendToServer(Protocol1_3_1_2to1_2_4_5.class);
+
+ final State currentState = wrapper.user().getProtocolInfo().getServerState();
+ if (currentState != State.LOGIN) { // Very hacky but some servers expect the client to send back a Packet1Login
+ wrapper.cancel();
+ } else {
+ wrapper.write(Type.SHORT_BYTE_ARRAY, new byte[0]);
+ wrapper.write(Type.SHORT_BYTE_ARRAY, new byte[0]);
+ wrapper.user().get(ProtocolMetadataStorage.class).skipEncryption = true;
+ }
});
}
});
@@ -645,7 +666,7 @@ public class Protocol1_3_1_2to1_2_4_5 extends AbstractProtocol {
@@ -657,7 +678,6 @@ public class Protocol1_3_1_2to1_2_4_5 extends AbstractProtocol {
+public class Protocol1_4_2to1_3_1_2 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
@@ -62,7 +61,7 @@ public class Protocol1_4_2to1_3_1_2 extends AbstractProtocol {
@@ -296,7 +295,7 @@ public class Protocol1_4_2to1_3_1_2 extends AbstractProtocol {
+public class Protocol1_4_4_5to1_4_2 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_4_6_7to1_4_4_5/Protocol1_4_6_7to1_4_4_5.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_4_6_7to1_4_4_5/Protocol1_4_6_7to1_4_4_5.java
index 1fc6a60..7ef219b 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_4_6_7to1_4_4_5/Protocol1_4_6_7to1_4_4_5.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_4_6_7to1_4_4_5/Protocol1_4_6_7to1_4_4_5.java
@@ -22,11 +22,11 @@ import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.remapper.LegacyItemRewriter;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.release.protocol1_4_6_7to1_4_4_5.rewriter.ItemRewriter;
@@ -39,7 +39,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.metadata.Me
import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.ChunkBulk1_7_6Type;
import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types1_7_6;
-public class Protocol1_4_6_7to1_4_4_5 extends AbstractProtocol {
+public class Protocol1_4_6_7to1_4_4_5 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_5_0_1to1_4_6_7/Protocol1_5_0_1to1_4_6_7.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_5_0_1to1_4_6_7/Protocol1_5_0_1to1_4_6_7.java
index 1fea4e9..7ba6340 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_5_0_1to1_4_6_7/Protocol1_5_0_1to1_4_6_7.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_5_0_1to1_4_6_7/Protocol1_5_0_1to1_4_6_7.java
@@ -20,10 +20,10 @@ package net.raphimc.vialegacy.protocols.release.protocol1_5_0_1to1_4_6_7;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types;
import com.viaversion.viaversion.api.minecraft.item.DataItem;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.remapper.LegacyItemRewriter;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.release.protocol1_5_0_1to1_4_6_7.rewriter.ItemRewriter;
@@ -32,7 +32,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_6_1to1_5_2.ServerboundP
import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.types.Types1_6_4;
import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types1_7_6;
-public class Protocol1_5_0_1to1_4_6_7 extends AbstractProtocol {
+public class Protocol1_5_0_1to1_4_6_7 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_5_2to1_5_0_1/Protocol1_5_2to1_5_0_1.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_5_2to1_5_0_1/Protocol1_5_2to1_5_0_1.java
index d8895b6..c257ebd 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_5_2to1_5_0_1/Protocol1_5_2to1_5_0_1.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_5_2to1_5_0_1/Protocol1_5_2to1_5_0_1.java
@@ -17,11 +17,11 @@
*/
package net.raphimc.vialegacy.protocols.release.protocol1_5_2to1_5_0_1;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.protocols.release.protocol1_6_1to1_5_2.ClientboundPackets1_5_2;
import net.raphimc.vialegacy.protocols.release.protocol1_6_1to1_5_2.ServerboundPackets1_5_2;
-public class Protocol1_5_2to1_5_0_1 extends AbstractProtocol {
+public class Protocol1_5_2to1_5_0_1 extends StatelessProtocol {
public Protocol1_5_2to1_5_0_1() {
super(ClientboundPackets1_5_2.class, ClientboundPackets1_5_2.class, ServerboundPackets1_5_2.class, ServerboundPackets1_5_2.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_1to1_5_2/Protocol1_6_1to1_5_2.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_1to1_5_2/Protocol1_6_1to1_5_2.java
index f2e1a90..153ea4c 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_1to1_5_2/Protocol1_6_1to1_5_2.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_1to1_5_2/Protocol1_6_1to1_5_2.java
@@ -20,14 +20,13 @@ package net.raphimc.vialegacy.protocols.release.protocol1_6_1to1_5_2;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
-import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
import net.lenni0451.mcstructs.text.components.StringComponent;
import net.lenni0451.mcstructs.text.serializer.TextComponentSerializer;
import net.raphimc.vialegacy.ViaLegacy;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.remapper.LegacyItemRewriter;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.release.protocol1_6_1to1_5_2.metadata.MetadataRewriter;
@@ -43,7 +42,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types
import java.util.List;
-public class Protocol1_6_1to1_5_2 extends AbstractProtocol {
+public class Protocol1_6_1to1_5_2 extends StatelessProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
@@ -297,7 +296,7 @@ public class Protocol1_6_1to1_5_2 extends AbstractProtocol {
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_2to1_6_1/Protocol1_6_2to1_6_1.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_2to1_6_1/Protocol1_6_2to1_6_1.java
index 1221f4c..76117c9 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_2to1_6_1/Protocol1_6_2to1_6_1.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_2to1_6_1/Protocol1_6_2to1_6_1.java
@@ -20,11 +20,12 @@ package net.raphimc.vialegacy.protocols.release.protocol1_6_2to1_6_1;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.api.minecraft.item.Item;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
+import io.netty.buffer.Unpooled;
import net.raphimc.vialegacy.api.data.ItemList1_6;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.api.util.BlockFaceUtil;
import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.ClientboundPackets1_6_4;
@@ -34,7 +35,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types
import java.nio.charset.StandardCharsets;
-public class Protocol1_6_2to1_6_1 extends AbstractProtocol {
+public class Protocol1_6_2to1_6_1 extends StatelessProtocol {
public Protocol1_6_2to1_6_1() {
super(ClientboundPackets1_6_1.class, ClientboundPackets1_6_4.class, ServerboundPackets1_6_4.class, ServerboundPackets1_6_4.class);
@@ -46,7 +47,7 @@ public class Protocol1_6_2to1_6_1 extends AbstractProtocol {
- final PacketWrapper brand = PacketWrapper.create(ClientboundPackets1_6_4.PLUGIN_MESSAGE, wrapper.user());
+ final PacketWrapper brand = PacketWrapper.create(ClientboundPackets1_6_4.PLUGIN_MESSAGE, Unpooled.buffer(), wrapper.user());
brand.write(Types1_6_4.STRING, "MC|Brand");
final byte[] brandBytes = "legacy".getBytes(StandardCharsets.UTF_8);
brand.write(Type.SHORT, (short) brandBytes.length); // data length
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_4to1_6_2/Protocol1_6_4to1_6_2.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_4to1_6_2/Protocol1_6_4to1_6_2.java
index f891082..93de197 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_4to1_6_2/Protocol1_6_4to1_6_2.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_6_4to1_6_2/Protocol1_6_4to1_6_2.java
@@ -17,11 +17,11 @@
*/
package net.raphimc.vialegacy.protocols.release.protocol1_6_4to1_6_2;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
+import net.raphimc.vialegacy.api.protocol.StatelessProtocol;
import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.ClientboundPackets1_6_4;
import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.ServerboundPackets1_6_4;
-public class Protocol1_6_4to1_6_2 extends AbstractProtocol {
+public class Protocol1_6_4to1_6_2 extends StatelessProtocol {
public Protocol1_6_4to1_6_2() {
super(ClientboundPackets1_6_4.class, ClientboundPackets1_6_4.class, ServerboundPackets1_6_4.class, ServerboundPackets1_6_4.class);
diff --git a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/Protocol1_7_2_5to1_6_4.java b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/Protocol1_7_2_5to1_6_4.java
index 05f8633..5229f83 100644
--- a/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/Protocol1_7_2_5to1_6_4.java
+++ b/src/main/java/net/raphimc/vialegacy/protocols/release/protocol1_7_2_5to1_6_4/Protocol1_7_2_5to1_6_4.java
@@ -29,9 +29,9 @@ import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.packet.State;
+import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
@@ -39,7 +39,10 @@ import com.viaversion.viaversion.libs.fastutil.ints.Int2IntMap;
import com.viaversion.viaversion.libs.fastutil.objects.Object2IntMap;
import com.viaversion.viaversion.libs.fastutil.objects.Object2IntOpenHashMap;
import com.viaversion.viaversion.libs.gson.JsonObject;
-import com.viaversion.viaversion.protocols.base.*;
+import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets;
+import com.viaversion.viaversion.protocols.base.ClientboundStatusPackets;
+import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets;
+import com.viaversion.viaversion.protocols.base.ServerboundStatusPackets;
import com.viaversion.viaversion.protocols.protocol1_8.ClientboundPackets1_8;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
import io.netty.buffer.ByteBuf;
@@ -50,6 +53,7 @@ import io.netty.channel.ChannelPromise;
import net.raphimc.vialegacy.ViaLegacy;
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
import net.raphimc.vialegacy.api.model.IdAndData;
+import net.raphimc.vialegacy.api.protocol.StatelessTransitionProtocol;
import net.raphimc.vialegacy.api.remapper.LegacyItemRewriter;
import net.raphimc.vialegacy.api.splitter.PreNettySplitter;
import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.providers.EncryptionProvider;
@@ -70,7 +74,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.types.Types
import java.util.List;
import java.util.logging.Level;
-public class Protocol1_7_2_5to1_6_4 extends AbstractProtocol {
+public class Protocol1_7_2_5to1_6_4 extends StatelessTransitionProtocol {
private final LegacyItemRewriter itemRewriter = new ItemRewriter(this);
@@ -82,135 +86,52 @@ public class Protocol1_7_2_5to1_6_4 extends AbstractProtocol {
- final String reason = wrapper.read(Types1_6_4.STRING); // reason
- try {
- final String[] motdParts = reason.split("\0");
- final JsonObject rootObject = new JsonObject();
- final JsonObject descriptionObject = new JsonObject();
- final JsonObject playersObject = new JsonObject();
- final JsonObject versionObject = new JsonObject();
+ this.registerClientboundTransition(ClientboundPackets1_6_4.JOIN_GAME,
+ ClientboundPackets1_7_2.JOIN_GAME, new PacketHandlers() {
+ @Override
+ public void register() {
+ map(Type.INT); // entity id
+ handler(wrapper -> {
+ wrapper.user().get(PlayerInfoStorage.class).entityId = wrapper.get(Type.INT, 0);
+ final String terrainType = wrapper.read(Types1_6_4.STRING); // level type
+ final short gameType = wrapper.read(Type.BYTE); // game mode
+ final byte dimension = wrapper.read(Type.BYTE); // dimension id
+ final short difficulty = wrapper.read(Type.BYTE); // difficulty
+ wrapper.read(Type.BYTE); // world height
+ final short maxPlayers = wrapper.read(Type.BYTE); // max players
- descriptionObject.addProperty("text", motdParts[3]);
- playersObject.addProperty("max", Integer.parseInt(motdParts[5]));
- playersObject.addProperty("online", Integer.parseInt(motdParts[4]));
- versionObject.addProperty("name", motdParts[2]);
- versionObject.addProperty("protocol", Integer.parseInt(motdParts[1]));
- rootObject.add("description", descriptionObject);
- rootObject.add("players", playersObject);
- rootObject.add("version", versionObject);
+ wrapper.write(Type.UNSIGNED_BYTE, gameType);
+ wrapper.write(Type.BYTE, dimension);
+ wrapper.write(Type.UNSIGNED_BYTE, difficulty);
+ wrapper.write(Type.UNSIGNED_BYTE, maxPlayers);
+ wrapper.write(Type.STRING, terrainType);
+ });
+ handler(wrapper -> {
+ final byte dimensionId = wrapper.get(Type.BYTE, 0);
+ wrapper.user().get(DimensionTracker.class).setDimension(dimensionId);
+ wrapper.user().get(ClientWorld.class).setEnvironment(dimensionId);
- wrapper.write(Type.STRING, rootObject.toString());
- } catch (Throwable e) {
- ViaLegacy.getPlatform().getLogger().log(Level.WARNING, "Could not parse 1.6.4 ping: " + reason, e);
- wrapper.cancel();
+ wrapper.user().put(new ChunkTracker(wrapper.user()));
+ });
}
- });
- }
- });
- this.registerClientbound(State.LOGIN, ClientboundPackets1_6_4.SHARED_KEY.getId(), ClientboundLoginPackets.GAME_PROFILE.getId(), new PacketHandlers() {
- @Override
- public void register() {
- handler(wrapper -> {
- final ProtocolInfo info = wrapper.user().getProtocolInfo();
- final ProtocolMetadataStorage protocolMetadata = wrapper.user().get(ProtocolMetadataStorage.class);
- wrapper.read(Type.SHORT_BYTE_ARRAY); // shared secret
- wrapper.read(Type.SHORT_BYTE_ARRAY); // verify token
- wrapper.write(Type.STRING, info.getUuid().toString().replace("-", "")); // uuid
- wrapper.write(Type.STRING, info.getUsername()); // user name
+ }, State.LOGIN, new PacketHandlers() {
+ @Override
+ protected void register() {
+ handler(wrapper -> {
+ ViaLegacy.getPlatform().getLogger().warning("Server skipped LOGIN state");
+ final PacketWrapper sharedKey = PacketWrapper.create(ClientboundPackets1_6_4.SHARED_KEY, wrapper.user());
+ sharedKey.write(Type.SHORT_BYTE_ARRAY, new byte[0]);
+ sharedKey.write(Type.SHORT_BYTE_ARRAY, new byte[0]);
+ wrapper.user().get(ProtocolMetadataStorage.class).skipEncryption = true;
+ sharedKey.send(Protocol1_7_2_5to1_6_4.class, false); // switch to play state
+ wrapper.user().get(ProtocolMetadataStorage.class).skipEncryption = false;
- if (!protocolMetadata.skipEncryption) {
- Via.getManager().getProviders().get(EncryptionProvider.class).enableDecryption(wrapper.user());
+ wrapper.send(Protocol1_7_2_5to1_6_4.class, false);
+ wrapper.cancel();
+ });
}
-
- // Parts of BaseProtocol1_7 GAME_PROFILE handler
- if (info.getProtocolVersion() < ProtocolVersion.v1_20_2.getVersion()) {
- info.setState(State.PLAY);
- }
- Via.getManager().getConnectionManager().onLoginSuccess(wrapper.user());
- if (!info.getPipeline().hasNonBaseProtocols()) {
- wrapper.user().setActive(false);
- }
- if (Via.getManager().isDebug()) {
- ViaLegacy.getPlatform().getLogger().log(Level.INFO, "{0} logged in with protocol {1}, Route: {2}", new Object[]{info.getUsername(), info.getProtocolVersion(), Joiner.on(", ").join(info.getPipeline().pipes(), ", ")});
- }
-
- final PacketWrapper respawn = PacketWrapper.create(ServerboundPackets1_6_4.CLIENT_STATUS, wrapper.user());
- respawn.write(Type.BYTE, (byte) 0); // force respawn
- respawn.sendToServer(Protocol1_7_2_5to1_6_4.class);
- });
- }
- });
- this.cancelClientbound(ClientboundPackets1_6_4.SHARED_KEY);
- this.registerClientbound(State.LOGIN, ClientboundPackets1_6_4.SERVER_AUTH_DATA.getId(), ClientboundLoginPackets.HELLO.getId(), new PacketHandlers() {
- @Override
- public void register() {
- map(Types1_6_4.STRING, Type.STRING); // server hash
- map(Type.SHORT_BYTE_ARRAY); // public key
- map(Type.SHORT_BYTE_ARRAY); // verify token
- handler(wrapper -> {
- final ProtocolMetadataStorage protocolMetadata = wrapper.user().get(ProtocolMetadataStorage.class);
- final String serverHash = wrapper.get(Type.STRING, 0);
- protocolMetadata.authenticate = !serverHash.equals("-");
- });
- }
- });
- this.cancelClientbound(ClientboundPackets1_6_4.SERVER_AUTH_DATA);
- this.registerClientbound(State.LOGIN, ClientboundPackets1_6_4.DISCONNECT.getId(), ClientboundLoginPackets.LOGIN_DISCONNECT.getId(), new PacketHandlers() {
- @Override
- public void register() {
- map(Types1_6_4.STRING, Type.STRING, ChatComponentRewriter::toClientDisconnect); // reason
- }
- });
- this.cancelClientbound(State.LOGIN, ClientboundPackets1_6_4.PLUGIN_MESSAGE.getId());
- this.registerClientbound(State.LOGIN, ClientboundPackets1_6_4.JOIN_GAME.getId(), ClientboundPackets1_6_4.JOIN_GAME.getId(), new PacketHandlers() {
- @Override
- public void register() {
- handler(wrapper -> {
- ViaLegacy.getPlatform().getLogger().warning("Server skipped LOGIN state");
- final PacketWrapper sharedKey = PacketWrapper.create(ClientboundPackets1_6_4.SHARED_KEY, wrapper.user());
- sharedKey.write(Type.SHORT_BYTE_ARRAY, new byte[0]);
- sharedKey.write(Type.SHORT_BYTE_ARRAY, new byte[0]);
- wrapper.user().get(ProtocolMetadataStorage.class).skipEncryption = true;
- sharedKey.send(BaseProtocol.class); // switch to play state
- wrapper.user().get(ProtocolMetadataStorage.class).skipEncryption = false;
-
- wrapper.send(BaseProtocol.class);
- wrapper.cancel();
- });
- }
- });
- this.registerClientbound(ClientboundPackets1_6_4.JOIN_GAME, new PacketHandlers() {
- @Override
- public void register() {
- map(Type.INT); // entity id
- handler(wrapper -> {
- wrapper.user().get(PlayerInfoStorage.class).entityId = wrapper.get(Type.INT, 0);
- final String terrainType = wrapper.read(Types1_6_4.STRING); // level type
- final short gameType = wrapper.read(Type.BYTE); // game mode
- final byte dimension = wrapper.read(Type.BYTE); // dimension id
- final short difficulty = wrapper.read(Type.BYTE); // difficulty
- wrapper.read(Type.BYTE); // world height
- final short maxPlayers = wrapper.read(Type.BYTE); // max players
-
- wrapper.write(Type.UNSIGNED_BYTE, gameType);
- wrapper.write(Type.BYTE, dimension);
- wrapper.write(Type.UNSIGNED_BYTE, difficulty);
- wrapper.write(Type.UNSIGNED_BYTE, maxPlayers);
- wrapper.write(Type.STRING, terrainType);
- });
- handler(wrapper -> {
- final byte dimensionId = wrapper.get(Type.BYTE, 0);
- wrapper.user().get(DimensionTracker.class).setDimension(dimensionId);
- wrapper.user().get(ClientWorld.class).setEnvironment(dimensionId);
-
- wrapper.user().put(new ChunkTracker(wrapper.user()));
- });
- }
- });
+ }
+ );
this.registerClientbound(ClientboundPackets1_6_4.CHAT_MESSAGE, new PacketHandlers() {
@Override
public void register() {
@@ -865,37 +786,120 @@ public class Protocol1_7_2_5to1_6_4 extends AbstractProtocol {
+ final String channel = wrapper.get(Type.STRING, 0);
+ wrapper.passthrough(Type.SHORT); // length
+ if (channel.equals("MC|TrList")) {
+ wrapper.passthrough(Type.INT); // window id
+ final int count = wrapper.passthrough(Type.UNSIGNED_BYTE); // count
+ for (int i = 0; i < count; i++) {
+ itemRewriter.handleItemToClient(wrapper.passthrough(Types1_7_6.COMPRESSED_ITEM)); // item 1
+ itemRewriter.handleItemToClient(wrapper.passthrough(Types1_7_6.COMPRESSED_ITEM)); // item 3
+ if (wrapper.passthrough(Type.BOOLEAN)) { // has 3 items
+ itemRewriter.handleItemToClient(wrapper.passthrough(Types1_7_6.COMPRESSED_ITEM)); // item 2
+ }
+ wrapper.passthrough(Type.BOOLEAN); // unavailable
+ }
+ }
+ });
+ }
+ }, State.LOGIN, (PacketHandler) PacketWrapper::cancel
+ );
+ this.registerClientboundTransition(ClientboundPackets1_6_4.SHARED_KEY, ClientboundLoginPackets.GAME_PROFILE, new PacketHandlers() {
@Override
public void register() {
- map(Types1_6_4.STRING, Type.STRING); // channel
handler(wrapper -> {
- final String channel = wrapper.get(Type.STRING, 0);
- wrapper.passthrough(Type.SHORT); // length
- if (channel.equals("MC|TrList")) {
- wrapper.passthrough(Type.INT); // window id
- final int count = wrapper.passthrough(Type.UNSIGNED_BYTE); // count
- for (int i = 0; i < count; i++) {
- itemRewriter.handleItemToClient(wrapper.passthrough(Types1_7_6.COMPRESSED_ITEM)); // item 1
- itemRewriter.handleItemToClient(wrapper.passthrough(Types1_7_6.COMPRESSED_ITEM)); // item 3
- if (wrapper.passthrough(Type.BOOLEAN)) { // has 3 items
- itemRewriter.handleItemToClient(wrapper.passthrough(Types1_7_6.COMPRESSED_ITEM)); // item 2
- }
- wrapper.passthrough(Type.BOOLEAN); // unavailable
- }
+ final ProtocolInfo info = wrapper.user().getProtocolInfo();
+ final ProtocolMetadataStorage protocolMetadata = wrapper.user().get(ProtocolMetadataStorage.class);
+ wrapper.read(Type.SHORT_BYTE_ARRAY); // shared secret
+ wrapper.read(Type.SHORT_BYTE_ARRAY); // verify token
+ wrapper.write(Type.STRING, info.getUuid().toString().replace("-", "")); // uuid
+ wrapper.write(Type.STRING, info.getUsername()); // user name
+
+ if (!protocolMetadata.skipEncryption) {
+ Via.getManager().getProviders().get(EncryptionProvider.class).enableDecryption(wrapper.user());
}
+
+ // Parts of BaseProtocol1_7 GAME_PROFILE handler
+ if (info.getProtocolVersion() < ProtocolVersion.v1_20_2.getVersion()) {
+ info.setState(State.PLAY);
+ }
+ Via.getManager().getConnectionManager().onLoginSuccess(wrapper.user());
+ if (!info.getPipeline().hasNonBaseProtocols()) {
+ wrapper.user().setActive(false);
+ }
+ if (Via.getManager().isDebug()) {
+ ViaLegacy.getPlatform().getLogger().log(Level.INFO, "{0} logged in with protocol {1}, Route: {2}", new Object[]{info.getUsername(), info.getProtocolVersion(), Joiner.on(", ").join(info.getPipeline().pipes(), ", ")});
+ }
+
+ final PacketWrapper respawn = PacketWrapper.create(ServerboundPackets1_6_4.CLIENT_STATUS, wrapper.user());
+ respawn.write(Type.BYTE, (byte) 0); // force respawn
+ respawn.sendToServer(Protocol1_7_2_5to1_6_4.class);
});
}
});
- this.registerClientbound(ClientboundPackets1_6_4.DISCONNECT, new PacketHandlers() {
+ this.registerClientboundTransition(ClientboundPackets1_6_4.SERVER_AUTH_DATA, ClientboundLoginPackets.HELLO, new PacketHandlers() {
@Override
public void register() {
- map(Types1_6_4.STRING, Type.STRING, ChatComponentRewriter::toClientDisconnect); // reason
+ map(Types1_6_4.STRING, Type.STRING); // server hash
+ map(Type.SHORT_BYTE_ARRAY); // public key
+ map(Type.SHORT_BYTE_ARRAY); // verify token
+ handler(wrapper -> {
+ final ProtocolMetadataStorage protocolMetadata = wrapper.user().get(ProtocolMetadataStorage.class);
+ final String serverHash = wrapper.get(Type.STRING, 0);
+ protocolMetadata.authenticate = !serverHash.equals("-");
+ });
}
});
+ this.registerClientboundTransition(ClientboundPackets1_6_4.DISCONNECT,
+ ClientboundStatusPackets.STATUS_RESPONSE, new PacketHandlers() {
+ @Override
+ protected void register() {
+ handler(wrapper -> {
+ final String reason = wrapper.read(Types1_6_4.STRING); // reason
+ try {
+ final String[] motdParts = reason.split("\0");
+ final JsonObject rootObject = new JsonObject();
+ final JsonObject descriptionObject = new JsonObject();
+ final JsonObject playersObject = new JsonObject();
+ final JsonObject versionObject = new JsonObject();
+
+ descriptionObject.addProperty("text", motdParts[3]);
+ playersObject.addProperty("max", Integer.parseInt(motdParts[5]));
+ playersObject.addProperty("online", Integer.parseInt(motdParts[4]));
+ versionObject.addProperty("name", motdParts[2]);
+ versionObject.addProperty("protocol", Integer.parseInt(motdParts[1]));
+ rootObject.add("description", descriptionObject);
+ rootObject.add("players", playersObject);
+ rootObject.add("version", versionObject);
+
+ wrapper.write(Type.STRING, rootObject.toString());
+ } catch (Throwable e) {
+ ViaLegacy.getPlatform().getLogger().log(Level.WARNING, "Could not parse 1.6.4 ping: " + reason, e);
+ wrapper.cancel();
+ }
+ });
+ }
+ }, ClientboundLoginPackets.LOGIN_DISCONNECT, new PacketHandlers() {
+ @Override
+ protected void register() {
+ map(Types1_6_4.STRING, Type.STRING, ChatComponentRewriter::toClientDisconnect); // reason
+ }
+ }, ClientboundPackets1_7_2.DISCONNECT, new PacketHandlers() {
+ @Override
+ public void register() {
+ map(Types1_6_4.STRING, Type.STRING, ChatComponentRewriter::toClientDisconnect); // reason
+ }
+ }
+ );
this.cancelClientbound(ClientboundPackets1_6_4.CREATIVE_INVENTORY_ACTION);
- this.registerServerbound(State.STATUS, ServerboundStatusPackets.STATUS_REQUEST.getId(), ServerboundPackets1_6_4.SERVER_PING.getId(), new PacketHandlers() {
+ this.registerServerboundTransition(ServerboundStatusPackets.STATUS_REQUEST, ServerboundPackets1_6_4.SERVER_PING, new PacketHandlers() {
@Override
public void register() {
handler(wrapper -> {
@@ -903,7 +907,7 @@ public class Protocol1_7_2_5to1_6_4 extends AbstractProtocol {
@@ -923,7 +927,7 @@ public class Protocol1_7_2_5to1_6_4 extends AbstractProtocol {
@@ -940,7 +944,7 @@ public class Protocol1_7_2_5to1_6_4 extends AbstractProtocol