3
0
Mirror von https://github.com/ViaVersion/ViaVersion.git synchronisiert 2024-07-30 10:58:02 +02:00

Bossbar fix for delay-switch-until-joingame Velocity branch

Dieser Commit ist enthalten in:
creeper123123321 2019-04-22 20:11:54 -03:00
Ursprung d699000dc3
Commit 1b7b3d1d28
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 0AC57D54786721D1
2 geänderte Dateien mit 32 neuen und 12 gelöschten Zeilen

Datei anzeigen

@ -102,8 +102,6 @@ public class VelocityServerHandler {
VelocityStorage storage = user.get(VelocityStorage.class);
if (storage.getBossbar() == null) storage.saveServerBossBars();
if (e.getServer() != null) {
if (!e.getServer().getServerInfo().getName().equals(storage.getCurrentServer())) {
String serverName = e.getServer().getServerInfo().getName();

Datei anzeigen

@ -8,6 +8,7 @@ import us.myles.ViaVersion.api.data.UserConnection;
import us.myles.ViaVersion.util.ReflectionUtil;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.UUID;
@ -16,7 +17,22 @@ import java.util.UUID;
public class VelocityStorage extends StoredObject {
private Player player;
private String currentServer;
private List<UUID> bossbar;
private List<UUID> cachedBossbar;
private static Method getServerBossBars;
private static Class<?> clientPlaySessionHandler;
private static Method getMinecraftConnection;
static {
try {
clientPlaySessionHandler = Class.forName("com.velocitypowered.proxy.connection.client.ClientPlaySessionHandler");
getServerBossBars = clientPlaySessionHandler
.getDeclaredMethod("getServerBossBars");
getMinecraftConnection = Class.forName("com.velocitypowered.proxy.connection.client.ConnectedPlayer")
.getDeclaredMethod("getMinecraftConnection");
} catch (NoSuchMethodException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public VelocityStorage(UserConnection user, Player player) {
super(user);
@ -24,16 +40,22 @@ public class VelocityStorage extends StoredObject {
this.currentServer = "";
}
public void saveServerBossBars() {
// Get bossbar list if it's supported
try {
Object connection = ReflectionUtil.invoke(player, "getMinecraftConnection");
Object sessionHandler = ReflectionUtil.invoke(connection, "getSessionHandler");
if (sessionHandler.getClass().getSimpleName().contains("Play")) {
bossbar = (List<UUID>) ReflectionUtil.invoke(sessionHandler, "getServerBossBars");
public List<UUID> getBossbar() {
if (cachedBossbar == null) {
if (clientPlaySessionHandler == null) return null;
if (getServerBossBars == null) return null;
if (getMinecraftConnection == null) return null;
// Get bossbar list if it's supported
try {
Object connection = getMinecraftConnection.invoke(player);
Object sessionHandler = ReflectionUtil.invoke(connection, "getSessionHandler");
if (clientPlaySessionHandler.isInstance(sessionHandler)) {
cachedBossbar = (List<UUID>) getServerBossBars.invoke(sessionHandler);
}
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
return cachedBossbar;
}
}