Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-11-20 06:50:08 +01:00
Bungee auto-team, bump BungeeCord version, workaround for block connections
Dieser Commit ist enthalten in:
Ursprung
96366aae42
Commit
f46a2bb618
@ -11,6 +11,11 @@
|
|||||||
|
|
||||||
<artifactId>viaversion-bungee</artifactId>
|
<artifactId>viaversion-bungee</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<resources>
|
<resources>
|
||||||
<resource>
|
<resource>
|
||||||
@ -29,7 +34,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.md-5</groupId>
|
<groupId>net.md-5</groupId>
|
||||||
<artifactId>bungeecord-api</artifactId>
|
<artifactId>bungeecord-api</artifactId>
|
||||||
<version>1.10-SNAPSHOT</version>
|
<version>1.13-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
@ -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.ServerConnectEvent;
|
||||||
import net.md_5.bungee.api.event.ServerConnectedEvent;
|
import net.md_5.bungee.api.event.ServerConnectedEvent;
|
||||||
import net.md_5.bungee.api.plugin.Listener;
|
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.EventHandler;
|
||||||
import net.md_5.bungee.event.EventPriority;
|
import net.md_5.bungee.event.EventPriority;
|
||||||
import net.md_5.bungee.protocol.packet.PluginMessage;
|
import net.md_5.bungee.protocol.packet.PluginMessage;
|
||||||
@ -89,6 +90,7 @@ public class BungeeServerHandler implements Listener {
|
|||||||
|
|
||||||
public void checkServerChange(ServerConnectedEvent e, UserConnection user) throws Exception {
|
public void checkServerChange(ServerConnectedEvent e, UserConnection user) throws Exception {
|
||||||
if (user == null) return;
|
if (user == null) return;
|
||||||
|
// Auto-team handling
|
||||||
// Handle server/version change
|
// Handle server/version change
|
||||||
if (user.has(BungeeStorage.class)) {
|
if (user.has(BungeeStorage.class)) {
|
||||||
BungeeStorage storage = user.get(BungeeStorage.class);
|
BungeeStorage storage = user.get(BungeeStorage.class);
|
||||||
@ -96,7 +98,14 @@ public class BungeeServerHandler implements Listener {
|
|||||||
|
|
||||||
if (e.getServer() != null) {
|
if (e.getServer() != null) {
|
||||||
if (!e.getServer().getInfo().getName().equals(storage.getCurrentServer())) {
|
if (!e.getServer().getInfo().getName().equals(storage.getCurrentServer())) {
|
||||||
|
// Clear auto-team
|
||||||
EntityTracker oldEntityTracker = user.get(EntityTracker.class);
|
EntityTracker oldEntityTracker = user.get(EntityTracker.class);
|
||||||
|
if (oldEntityTracker != null) {
|
||||||
|
if (oldEntityTracker.isAutoTeam() && oldEntityTracker.isTeamExists()) {
|
||||||
|
oldEntityTracker.sendTeamPacket(false, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String serverName = e.getServer().getInfo().getName();
|
String serverName = e.getServer().getInfo().getName();
|
||||||
|
|
||||||
storage.setCurrentServer(serverName);
|
storage.setCurrentServer(serverName);
|
||||||
@ -177,9 +186,28 @@ public class BungeeServerHandler implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EntityTracker newTracker = user.get(EntityTracker.class);
|
EntityTracker newTracker = user.get(EntityTracker.class);
|
||||||
if (newTracker != null && oldEntityTracker != null) {
|
if (newTracker != null) {
|
||||||
newTracker.setAutoTeam(oldEntityTracker.isAutoTeam());
|
if (Via.getConfig().isAutoTeam()) {
|
||||||
newTracker.setCurrentTeam(oldEntityTracker.getCurrentTeam());
|
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);
|
Object wrapper = channelWrapper.get(player);
|
||||||
|
@ -42,7 +42,7 @@ public class ConnectionData {
|
|||||||
blockUpdatePacket.write(Type.POSITION, pos);
|
blockUpdatePacket.write(Type.POSITION, pos);
|
||||||
blockUpdatePacket.write(Type.VAR_INT, newBlockState);
|
blockUpdatePacket.write(Type.VAR_INT, newBlockState);
|
||||||
try {
|
try {
|
||||||
blockUpdatePacket.send(Protocol1_13To1_12_2.class, true, false);
|
blockUpdatePacket.send(Protocol1_13To1_12_2.class, true, true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -173,19 +173,23 @@ public class WorldPackets {
|
|||||||
Position position = wrapper.get(Type.POSITION, 0);
|
Position position = wrapper.get(Type.POSITION, 0);
|
||||||
int newId = toNewId(wrapper.get(Type.VAR_INT, 0));
|
int newId = toNewId(wrapper.get(Type.VAR_INT, 0));
|
||||||
|
|
||||||
if (Via.getConfig().isServersideBlockConnections()) {
|
|
||||||
UserConnection userConnection = wrapper.user();
|
UserConnection userConnection = wrapper.user();
|
||||||
|
if (Via.getConfig().isServersideBlockConnections()) {
|
||||||
|
|
||||||
ConnectionData.updateBlockStorage(userConnection, position, newId);
|
ConnectionData.updateBlockStorage(userConnection, position, newId);
|
||||||
|
|
||||||
if (ConnectionData.connects(newId)) {
|
if (ConnectionData.connects(newId)) {
|
||||||
newId = ConnectionData.connect(userConnection, position, newId);
|
newId = ConnectionData.connect(userConnection, position, newId);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
wrapper.set(Type.VAR_INT, 0, checkStorage(wrapper.user(), position, newId));
|
||||||
|
// Workaround for packet order issue
|
||||||
|
wrapper.send(Protocol1_13To1_12_2.class, true, true);
|
||||||
|
wrapper.cancel();
|
||||||
|
if (Via.getConfig().isServersideBlockConnections()) {
|
||||||
ConnectionData.update(userConnection, position);
|
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 chunkX = wrapper.get(Type.INT, 0);
|
||||||
int chunkZ = wrapper.get(Type.INT, 1);
|
int chunkZ = wrapper.get(Type.INT, 1);
|
||||||
UserConnection userConnection = wrapper.user();
|
UserConnection userConnection = wrapper.user();
|
||||||
|
BlockChangeRecord[] records = wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0);
|
||||||
// Convert ids
|
// Convert ids
|
||||||
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
for (BlockChangeRecord record : records) {
|
||||||
int newBlock = toNewId(record.getBlockId());
|
int newBlock = toNewId(record.getBlockId());
|
||||||
Position position = new Position(
|
Position position = new Position(
|
||||||
(long) (record.getHorizontal() >> 4 & 15) + (chunkX * 16),
|
(long) (record.getHorizontal() >> 4 & 15) + (chunkX * 16),
|
||||||
@ -218,7 +223,8 @@ public class WorldPackets {
|
|||||||
record.setBlockId(checkStorage(wrapper.user(), position, newBlock));
|
record.setBlockId(checkStorage(wrapper.user(), position, newBlock));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
if (Via.getConfig().isServersideBlockConnections()) {
|
||||||
|
for (BlockChangeRecord record : records) {
|
||||||
int blockState = record.getBlockId();
|
int blockState = record.getBlockId();
|
||||||
|
|
||||||
Position position = new Position(
|
Position position = new Position(
|
||||||
@ -226,15 +232,24 @@ public class WorldPackets {
|
|||||||
(long) record.getY(),
|
(long) record.getY(),
|
||||||
(long) (record.getHorizontal() & 15) + (chunkZ * 16));
|
(long) (record.getHorizontal() & 15) + (chunkZ * 16));
|
||||||
|
|
||||||
if (Via.getConfig().isServersideBlockConnections()) {
|
|
||||||
if (ConnectionData.connects(blockState)) {
|
if (ConnectionData.connects(blockState)) {
|
||||||
blockState = ConnectionData.connect(userConnection, position, blockState);
|
blockState = ConnectionData.connect(userConnection, position, blockState);
|
||||||
record.setBlockId(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);
|
ConnectionData.update(userConnection, position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -137,6 +137,7 @@ public class PlayerPackets {
|
|||||||
if (entityTracker.isAutoTeam() && player.equalsIgnoreCase(myName)) {
|
if (entityTracker.isAutoTeam() && player.equalsIgnoreCase(myName)) {
|
||||||
if (mode == 4) {
|
if (mode == 4) {
|
||||||
// since removing add to auto team
|
// since removing add to auto team
|
||||||
|
// Workaround for packet order issue
|
||||||
wrapper.send(Protocol1_9TO1_8.class, true, true);
|
wrapper.send(Protocol1_9TO1_8.class, true, true);
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
entityTracker.sendTeamPacket(true, true);
|
entityTracker.sendTeamPacket(true, true);
|
||||||
@ -157,6 +158,7 @@ public class PlayerPackets {
|
|||||||
if (entityTracker.isAutoTeam()
|
if (entityTracker.isAutoTeam()
|
||||||
&& teamName.equals(entityTracker.getCurrentTeam())) {
|
&& teamName.equals(entityTracker.getCurrentTeam())) {
|
||||||
// team was removed
|
// team was removed
|
||||||
|
// Workaround for packet order issue
|
||||||
wrapper.send(Protocol1_9TO1_8.class, true, true);
|
wrapper.send(Protocol1_9TO1_8.class, true, true);
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
entityTracker.sendTeamPacket(true, true);
|
entityTracker.sendTeamPacket(true, true);
|
||||||
@ -215,6 +217,7 @@ public class PlayerPackets {
|
|||||||
EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
|
EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
|
||||||
if (Via.getConfig().isAutoTeam()) {
|
if (Via.getConfig().isAutoTeam()) {
|
||||||
entityTracker.setAutoTeam(true);
|
entityTracker.setAutoTeam(true);
|
||||||
|
// Workaround for packet order issue
|
||||||
wrapper.send(Protocol1_9TO1_8.class, true, true);
|
wrapper.send(Protocol1_9TO1_8.class, true, true);
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
entityTracker.sendTeamPacket(true, true);
|
entityTracker.sendTeamPacket(true, true);
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren