package net.minecraft.server.level; import com.google.common.base.Objects; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import java.util.Collection; import java.util.Collections; import java.util.Set; import java.util.function.Function; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundBossEventPacket; import net.minecraft.util.Mth; import net.minecraft.world.BossEvent; public class ServerBossEvent extends BossEvent { private final Set players = Sets.newHashSet(); private final Set unmodifiablePlayers = Collections.unmodifiableSet(this.players); private boolean visible = true; public ServerBossEvent(Component p_8300_, BossEvent.BossBarColor p_8301_, BossEvent.BossBarOverlay p_8302_) { super(Mth.createInsecureUUID(), p_8300_, p_8301_, p_8302_); } @Override public void setProgress(float p_143223_) { if (p_143223_ != this.progress) { super.setProgress(p_143223_); this.broadcast(ClientboundBossEventPacket::createUpdateProgressPacket); } } @Override public void setColor(BossEvent.BossBarColor p_8307_) { if (p_8307_ != this.color) { super.setColor(p_8307_); this.broadcast(ClientboundBossEventPacket::createUpdateStylePacket); } } @Override public void setOverlay(BossEvent.BossBarOverlay p_8309_) { if (p_8309_ != this.overlay) { super.setOverlay(p_8309_); this.broadcast(ClientboundBossEventPacket::createUpdateStylePacket); } } @Override public BossEvent setDarkenScreen(boolean p_8315_) { if (p_8315_ != this.darkenScreen) { super.setDarkenScreen(p_8315_); this.broadcast(ClientboundBossEventPacket::createUpdatePropertiesPacket); } return this; } @Override public BossEvent setPlayBossMusic(boolean p_8318_) { if (p_8318_ != this.playBossMusic) { super.setPlayBossMusic(p_8318_); this.broadcast(ClientboundBossEventPacket::createUpdatePropertiesPacket); } return this; } @Override public BossEvent setCreateWorldFog(boolean p_8320_) { if (p_8320_ != this.createWorldFog) { super.setCreateWorldFog(p_8320_); this.broadcast(ClientboundBossEventPacket::createUpdatePropertiesPacket); } return this; } @Override public void setName(Component p_8311_) { if (!Objects.equal(p_8311_, this.name)) { super.setName(p_8311_); this.broadcast(ClientboundBossEventPacket::createUpdateNamePacket); } } private void broadcast(Function p_143225_) { if (this.visible) { ClientboundBossEventPacket clientboundbosseventpacket = p_143225_.apply(this); for (ServerPlayer serverplayer : this.players) { serverplayer.connection.send(clientboundbosseventpacket); } } } public void addPlayer(ServerPlayer p_8305_) { if (this.players.add(p_8305_) && this.visible) { p_8305_.connection.send(ClientboundBossEventPacket.createAddPacket(this)); } } public void removePlayer(ServerPlayer p_8316_) { if (this.players.remove(p_8316_) && this.visible) { p_8316_.connection.send(ClientboundBossEventPacket.createRemovePacket(this.getId())); } } public void removeAllPlayers() { if (!this.players.isEmpty()) { for (ServerPlayer serverplayer : Lists.newArrayList(this.players)) { this.removePlayer(serverplayer); } } } public boolean isVisible() { return this.visible; } public void setVisible(boolean p_8322_) { if (p_8322_ != this.visible) { this.visible = p_8322_; for (ServerPlayer serverplayer : this.players) { serverplayer.connection.send(p_8322_ ? ClientboundBossEventPacket.createAddPacket(this) : ClientboundBossEventPacket.createRemovePacket(this.getId())); } } } public Collection getPlayers() { return this.unmodifiablePlayers; } }