From 7b200ad2645c6f435484d13dfb32486c56fd3036 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Thu, 25 Jun 2020 10:50:34 -0300 Subject: [PATCH 1/8] dont use uuids for bossbars, use userconnection --- .../us/myles/ViaVersion/api/boss/BossBar.java | 32 ++++++++++-- .../us/myles/ViaVersion/boss/CommonBoss.java | 49 +++++++++++++++++-- .../storage/EntityTracker1_9.java | 5 +- 3 files changed, 74 insertions(+), 12 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java b/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java index a1aeb7b0f..46f797af8 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java +++ b/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java @@ -1,6 +1,7 @@ package us.myles.ViaVersion.api.boss; import us.myles.ViaVersion.api.Via; +import us.myles.ViaVersion.api.data.UserConnection; import java.util.Set; import java.util.UUID; @@ -80,13 +81,21 @@ public abstract class BossBar { } /** - * Show the bossbar to a player (uuid) + * Show the bossbar to a player (uuid). You can retrieve it later with #getPlayers() * * @param player uuid of the player * @return The BossBar object */ public abstract BossBar addPlayer(UUID player); + /** + * Show the bossbar to a player connection. You may retrieve it later with #getConnections() + * + * @param conn UserConnection of the connection + * @return The BossBar object + */ + public abstract BossBar addConnection(UserConnection conn); + /** * add multiple players * @@ -112,13 +121,21 @@ public abstract class BossBar { } /** - * Removes the bossbar from a player + * Removes the bossbar from a player. You shouldn't use this with #addConnection * - * @param uuid The platers YYUD + * @param uuid The players UUID * @return The BossBar object */ public abstract BossBar removePlayer(UUID uuid); + /** + * Removes the bossbar from a player connection. You shouldn't use this with #addPlayer + * + * @param conn The UserConnection + * @return The BossBar object + */ + public abstract BossBar removeConnection(UserConnection conn); + /** * Add flags * @@ -142,12 +159,19 @@ public abstract class BossBar { public abstract boolean hasFlag(BossFlag flag); /** - * Get players + * Get players. The storage is different from #getConnections() * * @return UUIDS from players (sorry I lied) */ public abstract Set getPlayers(); + /** + * Get UserConnections. The storage is different from #getPlayers() + * + * @return UserConnection from players + */ + public abstract Set getConnections(); + /** * Show the bossbar to everyone (In the getPlayer set) * diff --git a/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java b/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java index 201d39f63..b1ee0371e 100644 --- a/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java +++ b/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java @@ -12,11 +12,7 @@ import us.myles.ViaVersion.api.protocol.ProtocolVersion; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9To1_8; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; +import java.util.*; public abstract class CommonBoss extends BossBar { private final UUID uuid; @@ -25,6 +21,7 @@ public abstract class CommonBoss extends BossBar { private BossColor color; private BossStyle style; private final Set players; + private final Set connections; private boolean visible; private final Set flags; @@ -38,6 +35,7 @@ public abstract class CommonBoss extends BossBar { this.color = color == null ? BossColor.PURPLE : color; this.style = style == null ? BossStyle.SOLID : style; this.players = new HashSet<>(); + this.connections = Collections.newSetFromMap(new WeakHashMap<>()); this.flags = new HashSet<>(); visible = true; } @@ -91,6 +89,17 @@ public abstract class CommonBoss extends BossBar { return this; } + @Override + public BossBar addConnection(UserConnection conn) { + if (!connections.contains(conn)) { + connections.add(conn); + if (visible) { + sendPacketConnection(conn, getPacket(CommonBoss.UpdateAction.ADD, conn)); + } + } + return this; + } + @Override public BossBar removePlayer(UUID uuid) { if (players.contains(uuid)) { @@ -101,6 +110,15 @@ public abstract class CommonBoss extends BossBar { return this; } + @Override + public BossBar removeConnection(UserConnection conn) { + if (connections.contains(conn)) { + connections.remove(conn); + sendPacketConnection(conn, getPacket(UpdateAction.REMOVE, conn)); + } + return this; + } + @Override public BossBar addFlag(BossFlag flag) { Preconditions.checkNotNull(flag); @@ -130,6 +148,11 @@ public abstract class CommonBoss extends BossBar { return Collections.unmodifiableSet(players); } + @Override + public Set getConnections() { + return Collections.unmodifiableSet(connections); + } + @Override public BossBar show() { setVisible(true); @@ -188,6 +211,10 @@ public abstract class CommonBoss extends BossBar { PacketWrapper wrapper = getPacket(action, connection); sendPacket(uuid, wrapper); } + for (UserConnection conn : new ArrayList<>(connections)) { + PacketWrapper wrapper = getPacket(action, conn); + sendPacketConnection(conn, wrapper); + } } private void sendPacket(UUID uuid, PacketWrapper wrapper) { @@ -202,6 +229,18 @@ public abstract class CommonBoss extends BossBar { } } + private void sendPacketConnection(UserConnection conn, PacketWrapper wrapper) { + if (conn.getProtocolInfo() == null || conn.getProtocolInfo().getProtocolVersion() >= ProtocolVersion.v1_9.getId()) { + connections.remove(conn); + return; + } + try { + wrapper.send(Protocol1_9To1_8.class); + } catch (Exception e) { + e.printStackTrace(); + } + } + private PacketWrapper getPacket(UpdateAction action, UserConnection connection) { try { PacketWrapper wrapper = new PacketWrapper(0x0C, null, connection); // TODO don't use fixed packet ids for future support diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java index a4b21b775..a8d12f93e 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java @@ -191,7 +191,6 @@ public class EntityTracker1_9 extends EntityTracker { } } } - UUID uuid = getUser().getProtocolInfo().getUuid(); // Boss bar if (Via.getConfig().isBossbarPatch()) { if (type == EntityType.ENDER_DRAGON || type == EntityType.WITHER) { @@ -202,7 +201,7 @@ public class EntityTracker1_9 extends EntityTracker { if (bar == null) { bar = Via.getAPI().createBossBar(title, BossColor.PINK, BossStyle.SOLID); bossBarMap.put(entityId, bar); - bar.addPlayer(uuid); + bar.addConnection(getUser()); bar.show(); // Send to provider @@ -219,7 +218,7 @@ public class EntityTracker1_9 extends EntityTracker { String title = type == EntityType.ENDER_DRAGON ? "Ender Dragon" : "Wither"; bar = Via.getAPI().createBossBar(title, health, BossColor.PINK, BossStyle.SOLID); bossBarMap.put(entityId, bar); - bar.addPlayer(uuid); + bar.addConnection(getUser()); bar.show(); // Send to provider Via.getManager().getProviders().get(BossBarProvider.class).handleAdd(getUser(), bar.getId()); From 8bd982a412321031b53126e679732f7575d0d1e7 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Thu, 25 Jun 2020 11:00:43 -0300 Subject: [PATCH 2/8] fix number comparing --- common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java b/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java index b1ee0371e..ea682ecc9 100644 --- a/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java +++ b/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java @@ -230,7 +230,7 @@ public abstract class CommonBoss extends BossBar { } private void sendPacketConnection(UserConnection conn, PacketWrapper wrapper) { - if (conn.getProtocolInfo() == null || conn.getProtocolInfo().getProtocolVersion() >= ProtocolVersion.v1_9.getId()) { + if (conn.getProtocolInfo() == null || conn.getProtocolInfo().getProtocolVersion() < ProtocolVersion.v1_9.getId()) { connections.remove(conn); return; } From 3f93bb051d9e15a5758ced92ff9ae5d8fb72df26 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Thu, 25 Jun 2020 11:25:59 -0300 Subject: [PATCH 3/8] Redirect UUID to UserConnection bossbars --- .../java/us/myles/ViaVersion/ViaManager.java | 4 ++ .../us/myles/ViaVersion/api/boss/BossBar.java | 12 +++--- .../api/platform/ViaConnectionManager.java | 20 +++++++++ .../us/myles/ViaVersion/boss/CommonBoss.java | 41 +++---------------- 4 files changed, 36 insertions(+), 41 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/ViaManager.java b/common/src/main/java/us/myles/ViaVersion/ViaManager.java index 8be60ad18..ae68810f0 100644 --- a/common/src/main/java/us/myles/ViaVersion/ViaManager.java +++ b/common/src/main/java/us/myles/ViaVersion/ViaManager.java @@ -156,6 +156,10 @@ public class ViaManager { return platform.getConnectionManager().getConnectedClients(); } + public UUID getConnectedClientId(UserConnection conn) { + return platform.getConnectionManager().getConnectedClientId(conn); + } + /** * @see ViaConnectionManager#isClientConnected(UUID) */ diff --git a/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java b/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java index 46f797af8..da2e18527 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java +++ b/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java @@ -81,7 +81,7 @@ public abstract class BossBar { } /** - * Show the bossbar to a player (uuid). You can retrieve it later with #getPlayers() + * Show the bossbar to a player (uuid). * * @param player uuid of the player * @return The BossBar object @@ -89,7 +89,7 @@ public abstract class BossBar { public abstract BossBar addPlayer(UUID player); /** - * Show the bossbar to a player connection. You may retrieve it later with #getConnections() + * Show the bossbar to a player connection. * * @param conn UserConnection of the connection * @return The BossBar object @@ -121,7 +121,7 @@ public abstract class BossBar { } /** - * Removes the bossbar from a player. You shouldn't use this with #addConnection + * Removes the bossbar from a player. * * @param uuid The players UUID * @return The BossBar object @@ -129,7 +129,7 @@ public abstract class BossBar { public abstract BossBar removePlayer(UUID uuid); /** - * Removes the bossbar from a player connection. You shouldn't use this with #addPlayer + * Removes the bossbar from a player connection. * * @param conn The UserConnection * @return The BossBar object @@ -159,14 +159,14 @@ public abstract class BossBar { public abstract boolean hasFlag(BossFlag flag); /** - * Get players. The storage is different from #getConnections() + * Get players. Only returns UUIDs which are front-end. For all connections, use #getConnections() * * @return UUIDS from players (sorry I lied) */ public abstract Set getPlayers(); /** - * Get UserConnections. The storage is different from #getPlayers() + * Get UserConnections. * * @return UserConnection from players */ diff --git a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java index 77607708a..a09825fa2 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java +++ b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java @@ -57,6 +57,26 @@ public class ViaConnectionManager { return clients.get(clientIdentifier); } + /** + * Returns the UUID from the frontend connection to this proxy server + * Returns null when there isn't a server or frontend id was not found + * When ViaVersion is reloaded, this method may not return some players. + * May not return ProtocolSupport players. + *

+ * Note that connections are removed as soon as their channel is closed, + * so avoid using this method during player quits for example. + */ + @Nullable + public UUID getConnectedClientId(UserConnection conn) { + if (conn.getProtocolInfo() == null) return null; + UUID uuid = conn.getProtocolInfo().getUuid(); + if (clients.get(uuid).equals(conn)) { + // This is frontend + return uuid; + } + return null; + } + /** * Returns all UserConnections which are registered * May contain duplicated UUIDs on multiple ProtocolInfo. diff --git a/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java b/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java index ea682ecc9..809764705 100644 --- a/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java +++ b/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java @@ -13,6 +13,7 @@ import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9To1_8; import java.util.*; +import java.util.stream.Collectors; public abstract class CommonBoss extends BossBar { private final UUID uuid; @@ -20,7 +21,6 @@ public abstract class CommonBoss extends BossBar { private float health; private BossColor color; private BossStyle style; - private final Set players; private final Set connections; private boolean visible; private final Set flags; @@ -34,7 +34,6 @@ public abstract class CommonBoss extends BossBar { this.health = health; this.color = color == null ? BossColor.PURPLE : color; this.style = style == null ? BossStyle.SOLID : style; - this.players = new HashSet<>(); this.connections = Collections.newSetFromMap(new WeakHashMap<>()); this.flags = new HashSet<>(); visible = true; @@ -79,14 +78,7 @@ public abstract class CommonBoss extends BossBar { @Override public BossBar addPlayer(UUID player) { - if (!players.contains(player)) { - players.add(player); - if (visible) { - UserConnection user = Via.getManager().getConnection(player); - sendPacket(player, getPacket(CommonBoss.UpdateAction.ADD, user)); - } - } - return this; + return addConnection(Via.getManager().getConnection(player)); } @Override @@ -102,12 +94,7 @@ public abstract class CommonBoss extends BossBar { @Override public BossBar removePlayer(UUID uuid) { - if (players.contains(uuid)) { - players.remove(uuid); - UserConnection user = Via.getManager().getConnection(uuid); - sendPacket(uuid, getPacket(UpdateAction.REMOVE, user)); - } - return this; + return removeConnection(Via.getManager().getConnection(uuid)); } @Override @@ -145,7 +132,8 @@ public abstract class CommonBoss extends BossBar { @Override public Set getPlayers() { - return Collections.unmodifiableSet(players); + return connections.stream().map(conn -> Via.getManager().getConnectedClientId(conn)).filter(Objects::nonNull) + .collect(Collectors.toSet()); } @Override @@ -206,31 +194,14 @@ public abstract class CommonBoss extends BossBar { } private void sendPacket(UpdateAction action) { - for (UUID uuid : new ArrayList<>(players)) { - UserConnection connection = Via.getManager().getConnection(uuid); - PacketWrapper wrapper = getPacket(action, connection); - sendPacket(uuid, wrapper); - } for (UserConnection conn : new ArrayList<>(connections)) { PacketWrapper wrapper = getPacket(action, conn); sendPacketConnection(conn, wrapper); } } - private void sendPacket(UUID uuid, PacketWrapper wrapper) { - if (!Via.getAPI().isInjected(uuid) || !(Via.getAPI().getPlayerVersion(uuid) >= ProtocolVersion.v1_9.getId())) { - players.remove(uuid); - return; - } - try { - wrapper.send(Protocol1_9To1_8.class); - } catch (Exception e) { - e.printStackTrace(); - } - } - private void sendPacketConnection(UserConnection conn, PacketWrapper wrapper) { - if (conn.getProtocolInfo() == null || conn.getProtocolInfo().getProtocolVersion() < ProtocolVersion.v1_9.getId()) { + if (conn.getProtocolInfo() == null || conn.getProtocolInfo().getPipeline().contains(Protocol1_9To1_8.class)) { connections.remove(conn); return; } From 9df545483c0fd8f09bfdce24e22c4f9fb378d959 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Thu, 25 Jun 2020 11:28:30 -0300 Subject: [PATCH 4/8] Fix when client doesn't have id --- .../myles/ViaVersion/api/platform/ViaConnectionManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java index a09825fa2..e263f2bcb 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java +++ b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java @@ -59,7 +59,7 @@ public class ViaConnectionManager { /** * Returns the UUID from the frontend connection to this proxy server - * Returns null when there isn't a server or frontend id was not found + * Returns null when there isn't a server or this connection isn't frontend or it doesn't have an id * When ViaVersion is reloaded, this method may not return some players. * May not return ProtocolSupport players. *

@@ -70,7 +70,8 @@ public class ViaConnectionManager { public UUID getConnectedClientId(UserConnection conn) { if (conn.getProtocolInfo() == null) return null; UUID uuid = conn.getProtocolInfo().getUuid(); - if (clients.get(uuid).equals(conn)) { + UserConnection client = clients.get(uuid); + if (client != null && client.equals(conn)) { // This is frontend return uuid; } From 1ab0cd07af32a8fad687bac2b7830afb9e4c10f4 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Thu, 25 Jun 2020 11:40:15 -0300 Subject: [PATCH 5/8] Use return value from add/remove and add abstract isFrontEnd --- .../api/platform/ViaConnectionManager.java | 23 +++++++++++---- .../us/myles/ViaVersion/boss/CommonBoss.java | 29 ++++++++----------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java index e263f2bcb..ac91f0881 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java +++ b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java @@ -3,7 +3,6 @@ package us.myles.ViaVersion.api.platform; import io.netty.channel.ChannelFutureListener; import org.jetbrains.annotations.Nullable; import us.myles.ViaVersion.api.data.UserConnection; -import us.myles.ViaVersion.protocols.base.ProtocolInfo; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -17,9 +16,12 @@ public class ViaConnectionManager { public void onLoginSuccess(UserConnection connection) { Objects.requireNonNull(connection, "connection is null!"); - UUID id = connection.getProtocolInfo().getUuid(); connections.add(connection); - clients.put(id, connection); + + if (isFrontEnd(connection)) { + UUID id = connection.getProtocolInfo().getUuid(); + clients.put(id, connection); + } if (connection.getChannel() != null) { connection.getChannel().closeFuture().addListener((ChannelFutureListener) future -> onDisconnect(connection)); @@ -28,9 +30,20 @@ public class ViaConnectionManager { public void onDisconnect(UserConnection connection) { Objects.requireNonNull(connection, "connection is null!"); - UUID id = connection.getProtocolInfo().getUuid(); connections.remove(connection); - clients.remove(id); + + if (isFrontEnd(connection)) { + UUID id = connection.getProtocolInfo().getUuid(); + clients.remove(id); + } + } + + /** + * Frontend connections will have the UUID stored. Override this if your platform isn't always frontend. + * UUIDs can't be duplicate between frontend connections. + */ + protected boolean isFrontEnd(UserConnection conn) { + return true; } /** diff --git a/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java b/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java index 809764705..f3ea7c511 100644 --- a/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java +++ b/common/src/main/java/us/myles/ViaVersion/boss/CommonBoss.java @@ -8,7 +8,6 @@ import us.myles.ViaVersion.api.boss.BossColor; import us.myles.ViaVersion.api.boss.BossFlag; import us.myles.ViaVersion.api.boss.BossStyle; import us.myles.ViaVersion.api.data.UserConnection; -import us.myles.ViaVersion.api.protocol.ProtocolVersion; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9To1_8; @@ -17,13 +16,13 @@ import java.util.stream.Collectors; public abstract class CommonBoss extends BossBar { private final UUID uuid; + private final Set connections; + private final Set flags; private String title; private float health; private BossColor color; private BossStyle style; - private final Set connections; private boolean visible; - private final Set flags; public CommonBoss(String title, float health, BossColor color, BossStyle style) { Preconditions.checkNotNull(title, "Title cannot be null"); @@ -83,11 +82,8 @@ public abstract class CommonBoss extends BossBar { @Override public BossBar addConnection(UserConnection conn) { - if (!connections.contains(conn)) { - connections.add(conn); - if (visible) { - sendPacketConnection(conn, getPacket(CommonBoss.UpdateAction.ADD, conn)); - } + if (connections.add(conn) && visible) { + sendPacketConnection(conn, getPacket(CommonBoss.UpdateAction.ADD, conn)); } return this; } @@ -99,8 +95,7 @@ public abstract class CommonBoss extends BossBar { @Override public BossBar removeConnection(UserConnection conn) { - if (connections.contains(conn)) { - connections.remove(conn); + if (connections.remove(conn)) { sendPacketConnection(conn, getPacket(UpdateAction.REMOVE, conn)); } return this; @@ -158,6 +153,13 @@ public abstract class CommonBoss extends BossBar { return visible; } + private void setVisible(boolean value) { + if (visible != value) { + visible = value; + sendPacket(value ? CommonBoss.UpdateAction.ADD : CommonBoss.UpdateAction.REMOVE); + } + } + @Override public UUID getId() { return uuid; @@ -186,13 +188,6 @@ public abstract class CommonBoss extends BossBar { return flags; } - private void setVisible(boolean value) { - if (visible != value) { - visible = value; - sendPacket(value ? CommonBoss.UpdateAction.ADD : CommonBoss.UpdateAction.REMOVE); - } - } - private void sendPacket(UpdateAction action) { for (UserConnection conn : new ArrayList<>(connections)) { PacketWrapper wrapper = getPacket(action, conn); From 73eef1727a20b91787a454238dfc9368d05b656d Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Thu, 25 Jun 2020 11:41:38 -0300 Subject: [PATCH 6/8] make isFrontEnd public --- .../us/myles/ViaVersion/api/platform/ViaConnectionManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java index ac91f0881..e3f50aaa3 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java +++ b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java @@ -42,7 +42,7 @@ public class ViaConnectionManager { * Frontend connections will have the UUID stored. Override this if your platform isn't always frontend. * UUIDs can't be duplicate between frontend connections. */ - protected boolean isFrontEnd(UserConnection conn) { + public boolean isFrontEnd(UserConnection conn) { return true; } From 3df7f760a625f21f492b17d96ff1102993fbcece Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Thu, 25 Jun 2020 11:50:12 -0300 Subject: [PATCH 7/8] warn about duplicate uuids --- .../myles/ViaVersion/api/platform/ViaConnectionManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java index e3f50aaa3..d26eabff1 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java +++ b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaConnectionManager.java @@ -2,6 +2,7 @@ package us.myles.ViaVersion.api.platform; import io.netty.channel.ChannelFutureListener; import org.jetbrains.annotations.Nullable; +import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; import java.util.*; @@ -20,7 +21,9 @@ public class ViaConnectionManager { if (isFrontEnd(connection)) { UUID id = connection.getProtocolInfo().getUuid(); - clients.put(id, connection); + if (clients.put(id, connection) != null) { + Via.getPlatform().getLogger().warning("Duplicate UUID on frontend connection! ("+id+")"); + } } if (connection.getChannel() != null) { From 7ff42400c0c0020ee5dc5138e527264b80133d6e Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Thu, 25 Jun 2020 12:07:30 -0300 Subject: [PATCH 8/8] javadc --- .../src/main/java/us/myles/ViaVersion/api/boss/BossBar.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java b/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java index da2e18527..91e0962fa 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java +++ b/common/src/main/java/us/myles/ViaVersion/api/boss/BossBar.java @@ -81,7 +81,7 @@ public abstract class BossBar { } /** - * Show the bossbar to a player (uuid). + * Show the bossbar to a player (uuid). This only works for frontend connections. Use #addConnection(UserConnection) for other types. * * @param player uuid of the player * @return The BossBar object @@ -121,7 +121,7 @@ public abstract class BossBar { } /** - * Removes the bossbar from a player. + * Removes the bossbar from a player. This only works for frontend connections. For others types, use #removeConnection(UserConnection) * * @param uuid The players UUID * @return The BossBar object