diff --git a/bungee/pom.xml b/bungee/pom.xml
index 384d30083..3d86a4c12 100644
--- a/bungee/pom.xml
+++ b/bungee/pom.xml
@@ -11,6 +11,11 @@
viaversion-bungee
+
+ 1.8
+ 1.8
+
+
@@ -29,7 +34,7 @@
net.md-5
bungeecord-api
- 1.10-SNAPSHOT
+ 1.13-SNAPSHOT
provided
diff --git a/bungee/src/main/java/us/myles/ViaVersion/bungee/handlers/BungeeServerHandler.java b/bungee/src/main/java/us/myles/ViaVersion/bungee/handlers/BungeeServerHandler.java
index 8383e73ca..0bc890ae4 100644
--- a/bungee/src/main/java/us/myles/ViaVersion/bungee/handlers/BungeeServerHandler.java
+++ b/bungee/src/main/java/us/myles/ViaVersion/bungee/handlers/BungeeServerHandler.java
@@ -5,6 +5,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.ServerConnectEvent;
import net.md_5.bungee.api.event.ServerConnectedEvent;
import net.md_5.bungee.api.plugin.Listener;
+import net.md_5.bungee.api.score.Team;
import net.md_5.bungee.event.EventHandler;
import net.md_5.bungee.event.EventPriority;
import net.md_5.bungee.protocol.packet.PluginMessage;
@@ -22,6 +23,7 @@ import us.myles.ViaVersion.bungee.storage.BungeeStorage;
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.InventoryPackets;
import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8;
+import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.EntityTracker;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
@@ -88,6 +90,7 @@ public class BungeeServerHandler implements Listener {
public void checkServerChange(ServerConnectedEvent e, UserConnection user) throws Exception {
if (user == null) return;
+ // Auto-team handling
// Handle server/version change
if (user.has(BungeeStorage.class)) {
BungeeStorage storage = user.get(BungeeStorage.class);
@@ -95,6 +98,14 @@ public class BungeeServerHandler implements Listener {
if (e.getServer() != null) {
if (!e.getServer().getInfo().getName().equals(storage.getCurrentServer())) {
+ // Clear auto-team
+ EntityTracker oldEntityTracker = user.get(EntityTracker.class);
+ if (oldEntityTracker != null) {
+ if (oldEntityTracker.isAutoTeam() && oldEntityTracker.isTeamExists()) {
+ oldEntityTracker.sendTeamPacket(false, true);
+ }
+ }
+
String serverName = e.getServer().getInfo().getName();
storage.setCurrentServer(serverName);
@@ -174,6 +185,31 @@ public class BungeeServerHandler implements Listener {
protocol.init(user);
}
+ EntityTracker newTracker = user.get(EntityTracker.class);
+ if (newTracker != null) {
+ if (Via.getConfig().isAutoTeam()) {
+ String currentTeam = null;
+ for (Team team : player.getScoreboard().getTeams()) {
+ if (team.getPlayers().contains(info.getUsername())) {
+ currentTeam = team.getName();
+
+ }
+ }
+
+ // Reinitialize auto-team
+ newTracker.setAutoTeam(true);
+ if (currentTeam == null) {
+ // Send auto-team as it was cleared above
+ newTracker.sendTeamPacket(true, true);
+ newTracker.setCurrentTeam("viaversion");
+ } else {
+ // Auto-team will be sent when bungee send remove packet
+ newTracker.setAutoTeam(Via.getConfig().isAutoTeam());
+ newTracker.setCurrentTeam(currentTeam);
+ }
+ }
+ }
+
Object wrapper = channelWrapper.get(player);
setVersion.invoke(wrapper, protocolId);
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java
index 62da996c7..4825adf82 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java
@@ -42,7 +42,7 @@ public class ConnectionData {
blockUpdatePacket.write(Type.POSITION, pos);
blockUpdatePacket.write(Type.VAR_INT, newBlockState);
try {
- blockUpdatePacket.send(Protocol1_13To1_12_2.class, true, false);
+ blockUpdatePacket.send(Protocol1_13To1_12_2.class, true, true);
} catch (Exception ex) {
ex.printStackTrace();
}
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java
index 63bbe1613..fdd0089fb 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java
@@ -173,19 +173,23 @@ public class WorldPackets {
Position position = wrapper.get(Type.POSITION, 0);
int newId = toNewId(wrapper.get(Type.VAR_INT, 0));
+ UserConnection userConnection = wrapper.user();
if (Via.getConfig().isServersideBlockConnections()) {
- UserConnection userConnection = wrapper.user();
ConnectionData.updateBlockStorage(userConnection, position, newId);
if (ConnectionData.connects(newId)) {
newId = ConnectionData.connect(userConnection, position, newId);
}
-
+ }
+ wrapper.set(Type.VAR_INT, 0, checkStorage(wrapper.user(), position, newId));
+ if (Via.getConfig().isServersideBlockConnections()) {
+ // Workaround for packet order issue
+ wrapper.send(Protocol1_13To1_12_2.class, true, true);
+ wrapper.cancel();
ConnectionData.update(userConnection, position);
}
- wrapper.set(Type.VAR_INT, 0, checkStorage(wrapper.user(), position, newId));
}
});
}
@@ -204,8 +208,9 @@ public class WorldPackets {
int chunkX = wrapper.get(Type.INT, 0);
int chunkZ = wrapper.get(Type.INT, 1);
UserConnection userConnection = wrapper.user();
+ BlockChangeRecord[] records = wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0);
// Convert ids
- for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
+ for (BlockChangeRecord record : records) {
int newBlock = toNewId(record.getBlockId());
Position position = new Position(
(long) (record.getHorizontal() >> 4 & 15) + (chunkX * 16),
@@ -218,23 +223,33 @@ public class WorldPackets {
record.setBlockId(checkStorage(wrapper.user(), position, newBlock));
}
- for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
- int blockState = record.getBlockId();
+ if (Via.getConfig().isServersideBlockConnections()) {
+ for (BlockChangeRecord record : records) {
+ int blockState = record.getBlockId();
- Position position = new Position(
- (long) (record.getHorizontal() >> 4 & 15) + (chunkX * 16),
- (long) record.getY(),
- (long) (record.getHorizontal() & 15) + (chunkZ * 16));
+ Position position = new Position(
+ (long) (record.getHorizontal() >> 4 & 15) + (chunkX * 16),
+ (long) record.getY(),
+ (long) (record.getHorizontal() & 15) + (chunkZ * 16));
- if (Via.getConfig().isServersideBlockConnections()) {
if (ConnectionData.connects(blockState)) {
blockState = ConnectionData.connect(userConnection, position, blockState);
record.setBlockId(blockState);
}
+ }
+ // Workaround for packet order issue
+ wrapper.send(Protocol1_13To1_12_2.class, true, true);
+ wrapper.cancel();
+ for (BlockChangeRecord record : records) {
+ Position position = new Position(
+ (long) (record.getHorizontal() >> 4 & 15) + (chunkX * 16),
+ (long) record.getY(),
+ (long) (record.getHorizontal() & 15) + (chunkZ * 16));
ConnectionData.update(userConnection, position);
}
}
+
}
});
}
@@ -308,7 +323,7 @@ public class WorldPackets {
}
boolean willSaveConnection = false;
- if (ConnectionData.needStoreBlocks() && Via.getConfig().isServersideBlockConnections()) {
+ if (Via.getConfig().isServersideBlockConnections() && ConnectionData.needStoreBlocks()) {
for (int p = 0; p < section.getPaletteSize(); p++) {
int newId = section.getPaletteEntry(p);
if (ConnectionData.isWelcome(newId)) {
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/packets/PlayerPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/packets/PlayerPackets.java
index 37f9439f5..84cabf12d 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/packets/PlayerPackets.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/packets/PlayerPackets.java
@@ -129,7 +129,7 @@ public class PlayerPackets {
}
if (mode == 0 || mode == 3 || mode == 4) {
- String[] players = wrapper.read(Type.STRING_ARRAY); // Players
+ String[] players = wrapper.passthrough(Type.STRING_ARRAY); // Players
final EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
String myName = wrapper.user().get(ProtocolInfo.class).getUsername();
String teamName = wrapper.get(Type.STRING, 0);
@@ -137,7 +137,10 @@ public class PlayerPackets {
if (entityTracker.isAutoTeam() && player.equalsIgnoreCase(myName)) {
if (mode == 4) {
// since removing add to auto team
- entityTracker.sendTeamPacket(true, false);
+ // Workaround for packet order issue
+ wrapper.send(Protocol1_9TO1_8.class, true, true);
+ wrapper.cancel();
+ entityTracker.sendTeamPacket(true, true);
entityTracker.setCurrentTeam("viaversion");
} else {
// since adding remove from auto team
@@ -146,7 +149,6 @@ public class PlayerPackets {
}
}
}
- wrapper.write(Type.STRING_ARRAY, players);
}
if (mode == 1) { // Remove team
@@ -155,7 +157,10 @@ public class PlayerPackets {
if (entityTracker.isAutoTeam()
&& teamName.equals(entityTracker.getCurrentTeam())) {
// team was removed
- entityTracker.sendTeamPacket(true, false);
+ // Workaround for packet order issue
+ wrapper.send(Protocol1_9TO1_8.class, true, true);
+ wrapper.cancel();
+ entityTracker.sendTeamPacket(true, true);
entityTracker.setCurrentTeam("viaversion");
}
}
@@ -211,7 +216,10 @@ public class PlayerPackets {
EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
if (Via.getConfig().isAutoTeam()) {
entityTracker.setAutoTeam(true);
- entityTracker.sendTeamPacket(true, false);
+ // Workaround for packet order issue
+ wrapper.send(Protocol1_9TO1_8.class, true, true);
+ wrapper.cancel();
+ entityTracker.sendTeamPacket(true, true);
entityTracker.setCurrentTeam("viaversion");
} else {
entityTracker.setAutoTeam(false);