Remove any tracked bossbars when a client switches servers.

This commit is contained in:
Youri Kersten
2016-03-03 18:36:56 +11:00
committed by md_5
parent 0294fc5f20
commit a7664a5559
6 changed files with 158 additions and 6 deletions

View File

@@ -1,13 +1,12 @@
package net.md_5.bungee;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import java.util.List;
import java.util.Queue;
import java.util.Set;
import java.util.UUID;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.ChatColor;
@@ -31,7 +30,7 @@ import net.md_5.bungee.netty.HandlerBoss;
import net.md_5.bungee.netty.PacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.Protocol;
import net.md_5.bungee.protocol.ProtocolConstants;
import net.md_5.bungee.protocol.packet.BossBar;
import net.md_5.bungee.protocol.packet.EncryptionRequest;
import net.md_5.bungee.protocol.packet.Handshake;
import net.md_5.bungee.protocol.packet.Kick;
@@ -218,6 +217,13 @@ public class ServerConnector extends PacketHandler
}
serverScoreboard.clear();
for ( UUID bossbar : user.getSentBossBars() )
{
// Send remove bossbar packet
user.unsafe().sendPacket( new net.md_5.bungee.protocol.packet.BossBar( bossbar, 1 ) );
}
user.getSentBossBars().clear();
user.sendDimensionSwitch();
user.setServerEntityId( login.getEntityId() );

View File

@@ -11,6 +11,7 @@ import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.util.internal.PlatformDependent;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -124,6 +125,8 @@ public final class UserConnection implements ProxiedPlayer
private ClientSettings settings;
@Getter
private final Scoreboard serverSentScoreboard = new Scoreboard();
@Getter
private final Collection<UUID> sentBossBars = new HashSet<>();
/*========================================================================*/
@Getter
private String displayName;

View File

@@ -29,7 +29,7 @@ import net.md_5.bungee.netty.ChannelWrapper;
import net.md_5.bungee.netty.PacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.PacketWrapper;
import net.md_5.bungee.protocol.ProtocolConstants;
import net.md_5.bungee.protocol.packet.BossBar;
import net.md_5.bungee.protocol.packet.KeepAlive;
import net.md_5.bungee.protocol.packet.PlayerListItem;
import net.md_5.bungee.protocol.packet.ScoreboardObjective;
@@ -484,6 +484,22 @@ public class DownstreamBridge extends PacketHandler
throw CancelSendSignal.INSTANCE;
}
@Override
public void handle(BossBar bossBar)
{
switch ( bossBar.getAction() )
{
// Handle add bossbar
case 0:
con.getSentBossBars().add( bossBar.getUuid() );
break;
// Handle remove bossbar
case 1:
con.getSentBossBars().remove( bossBar.getUuid() );
break;
}
}
@Override
public String toString()
{