diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index 737d90a1f..fc72e208b 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 1.4.0-1.13-pre2
+ 1.4.0-1.13-pre3
4.0.0
diff --git a/bungee/pom.xml b/bungee/pom.xml
index ed6470b3e..91907b3e3 100644
--- a/bungee/pom.xml
+++ b/bungee/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 1.4.0-1.13-pre2
+ 1.4.0-1.13-pre3
4.0.0
diff --git a/common/pom.xml b/common/pom.xml
index ddb54a00f..9dd6a2f9f 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 1.4.0-1.13-pre2
+ 1.4.0-1.13-pre3
4.0.0
diff --git a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java
index db89b29ce..8839ea023 100644
--- a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java
+++ b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java
@@ -62,7 +62,7 @@ public class ProtocolVersion {
register(v1_12 = new ProtocolVersion(335, "1.12"));
register(v1_12_1 = new ProtocolVersion(338, "1.12.1"));
register(v1_12_2 = new ProtocolVersion(340, "1.12.2"));
- register(v1_13 = new ProtocolVersion(384, "1.13-pre2"));
+ register(v1_13 = new ProtocolVersion(385, "1.13-pre3"));
register(unknown = new ProtocolVersion(-1, "UNKNOWN"));
}
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/base/BaseProtocol.java b/common/src/main/java/us/myles/ViaVersion/protocols/base/BaseProtocol.java
index 519005b28..af5cf7b92 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/base/BaseProtocol.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/base/BaseProtocol.java
@@ -16,6 +16,7 @@ import us.myles.ViaVersion.api.platform.providers.ViaProviders;
import us.myles.ViaVersion.api.protocol.Protocol;
import us.myles.ViaVersion.api.protocol.ProtocolPipeline;
import us.myles.ViaVersion.api.protocol.ProtocolRegistry;
+import us.myles.ViaVersion.api.protocol.ProtocolVersion;
import us.myles.ViaVersion.api.remapper.PacketHandler;
import us.myles.ViaVersion.api.remapper.PacketRemapper;
import us.myles.ViaVersion.api.type.Type;
@@ -107,50 +108,51 @@ public class BaseProtocol extends Protocol {
registerOutgoing(State.STATUS, 0x01, 0x01); // Status Pong Packet
- registerOutgoing(State.LOGIN, 0x00, 0x00); // Login Disconnect Packet
- registerOutgoing(State.LOGIN, 0x01, 0x01); // Encryption Request Packet
- // Login Success Packet
+ // Login Disconnect Packet (1.12.2)
+ // Plugin Message (1.13)
+ registerOutgoing(State.LOGIN, 0x00, 0x00);
+
+ // Encryption Request Packet (1.12.2)
+ // Login Disconnect Packet (1.13)
+ registerOutgoing(State.LOGIN, 0x01, 0x01);
+
+ // Login Success Packet (1.12.2)
+ // Encryption Request Packet (1.13)
registerOutgoing(State.LOGIN, 0x02, 0x02, new PacketRemapper() {
@Override
public void registerMap() {
- map(Type.STRING); // 0 - UUID as String
- map(Type.STRING); // 1 - Player Username
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
- ProtocolInfo info = wrapper.user().get(ProtocolInfo.class);
- info.setState(State.PLAY);
- // Save other info
- String stringUUID = wrapper.get(Type.STRING, 0);
- if (stringUUID.length() == 32) { // Trimmed UUIDs are 32 characters
- // Trimmed
- stringUUID = addDashes(stringUUID);
- }
- UUID uuid = UUID.fromString(stringUUID);
- info.setUuid(uuid);
- info.setUsername(wrapper.get(Type.STRING, 1));
- // Add to ported clients
- Via.getManager().addPortedClient(wrapper.user());
-
- if (info.getPipeline().pipes().size() == 1 && info.getPipeline().pipes().get(0).getClass() == BaseProtocol.class) // Only base protocol
- wrapper.user().setActive(false);
-
- if (Via.getManager().isDebug()) {
- // Print out the route to console
- Via.getPlatform().getLogger().log(Level.INFO, "{0} logged in with protocol {1}, Route: {2}",
- new Object[]{
- wrapper.get(Type.STRING, 1),
- info.getProtocolVersion(),
- Joiner.on(", ").join(info.getPipeline().pipes(), ", ")
- });
- }
+ int protocol = wrapper.user().get(ProtocolInfo.class).getProtocolVersion();
+ if (protocol < ProtocolVersion.v1_13.getId())
+ handleLoginSuccess(wrapper);
}
});
}
});
- registerOutgoing(State.LOGIN, 0x03, 0x03); // Login Set Compression Packet
+ // Login Set Compression Packet (1.12.2)
+ // Login Success Packet (1.13)
+ registerOutgoing(State.LOGIN, 0x03, 0x03, new PacketRemapper() {
+ @Override
+ public void registerMap() {
+ handler(new PacketHandler() {
+ @Override
+ public void handle(PacketWrapper wrapper) throws Exception {
+ int protocol = wrapper.user().get(ProtocolInfo.class).getProtocolVersion();
+ if (protocol >= ProtocolVersion.v1_13.getId())
+ handleLoginSuccess(wrapper);
+ }
+ });
+ }
+ });
+
+ // Login Set Compression Packet (1.13)
+ registerOutgoing(State.LOGIN, 0x04, 0x04);
+
+
/* Incoming Packets */
// Handshake Packet
@@ -206,7 +208,8 @@ public class BaseProtocol extends Protocol {
registerIncoming(State.STATUS, 0x00, 0x00); // Status Request Packet
registerIncoming(State.STATUS, 0x01, 0x01); // Status Ping Packet
- // Login Start Packet
+ // Login Start Packet (1.12.2)
+ // Plugin Message (1.13)
registerIncoming(State.LOGIN, 0x00, 0x00, new PacketRemapper() {
@Override
public void registerMap() {
@@ -214,27 +217,81 @@ public class BaseProtocol extends Protocol {
@Override
public void handle(final PacketWrapper wrapper) throws Exception {
int protocol = wrapper.user().get(ProtocolInfo.class).getProtocolVersion();
- if (Via.getConfig().getBlockedProtocols().contains(protocol)) {
- if (!wrapper.user().getChannel().isOpen()) return;
-
- PacketWrapper disconnectPacket = new PacketWrapper(0x00, null, wrapper.user()); // Disconnect Packet
- Protocol1_9TO1_8.FIX_JSON.write(disconnectPacket, ChatColor.translateAlternateColorCodes('&', Via.getConfig().getBlockedDisconnectMsg()));
- wrapper.cancel(); // cancel current
-
- // Send and close
- ChannelFuture future = disconnectPacket.sendFuture(BaseProtocol.class);
- future.addListener(new GenericFutureListener>() {
- @Override
- public void operationComplete(Future super Void> future) throws Exception {
- wrapper.user().getChannel().close();
- }
- });
- }
+ if (protocol < ProtocolVersion.v1_13.getId())
+ handleLoginStart(wrapper);
}
});
}
- }); // Login Start Packet
- registerIncoming(State.LOGIN, 0x01, 0x01); // Encryption Response Packet
+ });
+
+ // Encryption Response Packet (1.12.2)
+ // Login Start Packet (1.13)
+ registerIncoming(State.LOGIN, 0x01, 0x01, new PacketRemapper() {
+ @Override
+ public void registerMap() {
+ handler(new PacketHandler() {
+ @Override
+ public void handle(PacketWrapper wrapper) throws Exception {
+ int protocol = wrapper.user().get(ProtocolInfo.class).getProtocolVersion();
+ if (protocol >= ProtocolVersion.v1_13.getId())
+ handleLoginStart(wrapper);
+ }
+ });
+ }
+ });
+
+ // Encryption Response Packet (1.13)
+ registerIncoming(State.LOGIN, 0x02, 0x02);
+ }
+
+ private void handleLoginStart(final PacketWrapper wrapper) throws Exception {
+ int protocol = wrapper.user().get(ProtocolInfo.class).getProtocolVersion();
+ if (Via.getConfig().getBlockedProtocols().contains(protocol)) {
+ if (!wrapper.user().getChannel().isOpen()) return;
+
+ PacketWrapper disconnectPacket = new PacketWrapper(0x00, null, wrapper.user()); // Disconnect Packet
+ Protocol1_9TO1_8.FIX_JSON.write(disconnectPacket, ChatColor.translateAlternateColorCodes('&', Via.getConfig().getBlockedDisconnectMsg()));
+ wrapper.cancel(); // cancel current
+
+ // Send and close
+ ChannelFuture future = disconnectPacket.sendFuture(BaseProtocol.class);
+ future.addListener(new GenericFutureListener>() {
+ @Override
+ public void operationComplete(Future super Void> future) throws Exception {
+ wrapper.user().getChannel().close();
+ }
+ });
+ }
+ }
+
+ private void handleLoginSuccess(final PacketWrapper wrapper) throws Exception {
+ ProtocolInfo info = wrapper.user().get(ProtocolInfo.class);
+ info.setState(State.PLAY);
+ // Save other info
+ String stringUUID = wrapper.passthrough(Type.STRING);
+ if (stringUUID.length() == 32) { // Trimmed UUIDs are 32 characters
+ // Trimmed
+ stringUUID = addDashes(stringUUID);
+ }
+ UUID uuid = UUID.fromString(stringUUID);
+ info.setUuid(uuid);
+ String username = wrapper.passthrough(Type.STRING);
+ info.setUsername(username);
+ // Add to ported clients
+ Via.getManager().addPortedClient(wrapper.user());
+
+ if (info.getPipeline().pipes().size() == 1 && info.getPipeline().pipes().get(0).getClass() == BaseProtocol.class) // Only base protocol
+ wrapper.user().setActive(false);
+
+ if (Via.getManager().isDebug()) {
+ // Print out the route to console
+ Via.getPlatform().getLogger().log(Level.INFO, "{0} logged in with protocol {1}, Route: {2}",
+ new Object[]{
+ username,
+ info.getProtocolVersion(),
+ Joiner.on(", ").join(info.getPipeline().pipes(), ", ")
+ });
+ }
}
@Override
@@ -259,7 +316,7 @@ public class BaseProtocol extends Protocol {
}
public static String addDashes(String trimmedUUID) {
- StringBuffer idBuff = new StringBuffer(trimmedUUID);
+ StringBuilder idBuff = new StringBuilder(trimmedUUID);
idBuff.insert(20, '-');
idBuff.insert(16, '-');
idBuff.insert(12, '-');
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_12_2/ProtocolSnapshotTo1_12_2.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_12_2/ProtocolSnapshotTo1_12_2.java
index 12d41049a..601b2d1a7 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_12_2/ProtocolSnapshotTo1_12_2.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_12_2/ProtocolSnapshotTo1_12_2.java
@@ -54,6 +54,12 @@ public class ProtocolSnapshotTo1_12_2 extends Protocol {
// Outgoing packets
+ // New packet 0x0 - Login Plugin Message
+ registerOutgoing(State.LOGIN, 0x0, 0x1);
+ registerOutgoing(State.LOGIN, 0x1, 0x2);
+ registerOutgoing(State.LOGIN, 0x2, 0x3);
+ registerOutgoing(State.LOGIN, 0x3, 0x4);
+
// Statistics
registerOutgoing(State.PLAY, 0x07, 0x07, new PacketRemapper() {
@Override
@@ -406,6 +412,22 @@ public class ProtocolSnapshotTo1_12_2 extends Protocol {
// New packet 0x53 - Tags
// Incoming packets
+
+ // New packet 0x0 - Login Plugin Message
+ registerIncoming(State.LOGIN, -1, 0x0, new PacketRemapper() {
+ @Override
+ public void registerMap() {
+ handler(new PacketHandler() {
+ @Override
+ public void handle(PacketWrapper wrapper) throws Exception {
+ wrapper.cancel();
+ }
+ });
+ }
+ });
+ registerIncoming(State.LOGIN, 0x0, 0x1);
+ registerIncoming(State.LOGIN, 0x1, 0x2);
+
registerIncoming(State.PLAY, 0x2, 0x1);
registerIncoming(State.PLAY, 0x3, 0x2);
registerIncoming(State.PLAY, 0x4, 0x3);
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_12_2/packets/InventoryPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_12_2/packets/InventoryPackets.java
index dfd4c5e2c..b0c34450b 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_12_2/packets/InventoryPackets.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_12_2/packets/InventoryPackets.java
@@ -100,34 +100,43 @@ public class InventoryPackets {
}
wrapper.set(Type.BYTE, 0, flags); // Update flags
- }
- if (channel.equalsIgnoreCase("MC|TrList")) {
+ return;
+ } else if (channel.equalsIgnoreCase("MC|TrList")) {
+ channel = "minecraft:trader_list";
wrapper.passthrough(Type.INT); // Passthrough Window ID
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
for (int i = 0; i < size; i++) {
// Input Item
- Item input = wrapper.read(Type.ITEM);
- toClient(input);
- wrapper.write(Type.ITEM, input);
+ Item input = wrapper.passthrough(Type.ITEM);
+ InventoryPackets.toClient(input);
// Output Item
- Item output = wrapper.read(Type.ITEM);
- toClient(output);
- wrapper.write(Type.ITEM, output);
+ Item output = wrapper.passthrough(Type.ITEM);
+ InventoryPackets.toClient(output);
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
if (secondItem) {
// Second Item
- Item second = wrapper.read(Type.ITEM);
- toClient(second);
- wrapper.write(Type.ITEM, second);
+ Item second = wrapper.passthrough(Type.ITEM);
+ InventoryPackets.toClient(second);
}
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
wrapper.passthrough(Type.INT); // Number of tools uses
wrapper.passthrough(Type.INT); // Maximum number of trade uses
}
+ } else if (channel.equalsIgnoreCase("MC|Brand")) {
+ channel = "minecraft:brand";
+ } else if (channel.equalsIgnoreCase("MC|BOpen")) {
+ channel = "minecraft:book_open";
+ } else if (channel.equalsIgnoreCase("MC|DebugPath")) {
+ channel = "minecraft:debug/paths";
+ } else if (channel.equalsIgnoreCase("MC|DebugNeighborsUpdate")) {
+ channel = "minecraft:debug/neighbors_update";
+ } else {
+ wrapper.cancel(); // TODO REGISTER channel removed?
}
+ wrapper.set(Type.STRING, 0, channel);
}
});
}
diff --git a/common/src/main/resources/assets/viaversion/data/mapping-1.13.json b/common/src/main/resources/assets/viaversion/data/mapping-1.13.json
index 08a67251c..a8b6d8583 100644
--- a/common/src/main/resources/assets/viaversion/data/mapping-1.13.json
+++ b/common/src/main/resources/assets/viaversion/data/mapping-1.13.json
@@ -8409,33 +8409,33 @@
"8406": "minecraft:green_concrete_powder",
"8407": "minecraft:red_concrete_powder",
"8408": "minecraft:black_concrete_powder",
- "8409": "minecraft:kelp_plant",
- "8410": "minecraft:kelp[age=0]",
- "8411": "minecraft:kelp[age=1]",
- "8412": "minecraft:kelp[age=2]",
- "8413": "minecraft:kelp[age=3]",
- "8414": "minecraft:kelp[age=4]",
- "8415": "minecraft:kelp[age=5]",
- "8416": "minecraft:kelp[age=6]",
- "8417": "minecraft:kelp[age=7]",
- "8418": "minecraft:kelp[age=8]",
- "8419": "minecraft:kelp[age=9]",
- "8420": "minecraft:kelp[age=10]",
- "8421": "minecraft:kelp[age=11]",
- "8422": "minecraft:kelp[age=12]",
- "8423": "minecraft:kelp[age=13]",
- "8424": "minecraft:kelp[age=14]",
- "8425": "minecraft:kelp[age=15]",
- "8426": "minecraft:kelp[age=16]",
- "8427": "minecraft:kelp[age=17]",
- "8428": "minecraft:kelp[age=18]",
- "8429": "minecraft:kelp[age=19]",
- "8430": "minecraft:kelp[age=20]",
- "8431": "minecraft:kelp[age=21]",
- "8432": "minecraft:kelp[age=22]",
- "8433": "minecraft:kelp[age=23]",
- "8434": "minecraft:kelp[age=24]",
- "8435": "minecraft:kelp[age=25]",
+ "8409": "minecraft:kelp[age=0]",
+ "8410": "minecraft:kelp[age=1]",
+ "8411": "minecraft:kelp[age=2]",
+ "8412": "minecraft:kelp[age=3]",
+ "8413": "minecraft:kelp[age=4]",
+ "8414": "minecraft:kelp[age=5]",
+ "8415": "minecraft:kelp[age=6]",
+ "8416": "minecraft:kelp[age=7]",
+ "8417": "minecraft:kelp[age=8]",
+ "8418": "minecraft:kelp[age=9]",
+ "8419": "minecraft:kelp[age=10]",
+ "8420": "minecraft:kelp[age=11]",
+ "8421": "minecraft:kelp[age=12]",
+ "8422": "minecraft:kelp[age=13]",
+ "8423": "minecraft:kelp[age=14]",
+ "8424": "minecraft:kelp[age=15]",
+ "8425": "minecraft:kelp[age=16]",
+ "8426": "minecraft:kelp[age=17]",
+ "8427": "minecraft:kelp[age=18]",
+ "8428": "minecraft:kelp[age=19]",
+ "8429": "minecraft:kelp[age=20]",
+ "8430": "minecraft:kelp[age=21]",
+ "8431": "minecraft:kelp[age=22]",
+ "8432": "minecraft:kelp[age=23]",
+ "8433": "minecraft:kelp[age=24]",
+ "8434": "minecraft:kelp[age=25]",
+ "8435": "minecraft:kelp_plant",
"8436": "minecraft:dried_kelp_block",
"8437": "minecraft:turtle_egg[eggs=1,hatch=0]",
"8438": "minecraft:turtle_egg[eggs=1,hatch=1]",
diff --git a/jar/pom.xml b/jar/pom.xml
index dacdd7bd1..2d4a5961b 100644
--- a/jar/pom.xml
+++ b/jar/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 1.4.0-1.13-pre2
+ 1.4.0-1.13-pre3
4.0.0
viaversion-jar
diff --git a/pom.xml b/pom.xml
index b2e5464f6..b5ebd6296 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
us.myles
viaversion-parent
- 1.4.0-1.13-pre2
+ 1.4.0-1.13-pre3
pom
viaversion-parent
diff --git a/sponge-legacy/pom.xml b/sponge-legacy/pom.xml
index 1dba5a1b8..ff8969f24 100644
--- a/sponge-legacy/pom.xml
+++ b/sponge-legacy/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 1.4.0-1.13-pre2
+ 1.4.0-1.13-pre3
4.0.0
diff --git a/sponge/pom.xml b/sponge/pom.xml
index 83a4fb6e8..4a1cda815 100644
--- a/sponge/pom.xml
+++ b/sponge/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 1.4.0-1.13-pre2
+ 1.4.0-1.13-pre3
4.0.0