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);