ServerBossEvent.java

net.minecraft.server.level.ServerBossEvent

信息

  • 全限定名:net.minecraft.server.level.ServerBossEvent
  • 类型:public class
  • 包:net.minecraft.server.level
  • 源码路径:src/main/java/net/minecraft/server/level/ServerBossEvent.java
  • 起始行号:L15
  • 继承:BossEvent
  • 职责:

    TODO

字段/常量

  • players

    • 类型: Set<ServerPlayer>
    • 修饰符: private final
    • 源码定位: L16
    • 说明:

      TODO

  • unmodifiablePlayers

    • 类型: Set<ServerPlayer>
    • 修饰符: private final
    • 源码定位: L17
    • 说明:

      TODO

  • visible

    • 类型: boolean
    • 修饰符: private
    • 源码定位: L18
    • 说明:

      TODO

内部类/嵌套类型

构造器

public ServerBossEvent(UUID id, Component name, BossEvent.BossBarColor color, BossEvent.BossBarOverlay overlay) @ L20

  • 构造器名:ServerBossEvent
  • 源码定位:L20
  • 修饰符:public

参数:

  • id: UUID
  • name: Component
  • color: BossEvent.BossBarColor
  • overlay: BossEvent.BossBarOverlay

说明:

TODO

方法

下面的方法块按源码顺序生成。

public void setProgress(float progress) @ L24

  • 方法名:setProgress
  • 源码定位:L24
  • 返回类型:void
  • 修饰符:public

参数:

  • progress: float

说明:

TODO

public void setColor(BossEvent.BossBarColor color) @ L33

  • 方法名:setColor
  • 源码定位:L33
  • 返回类型:void
  • 修饰符:public

参数:

  • color: BossEvent.BossBarColor

说明:

TODO

public void setOverlay(BossEvent.BossBarOverlay overlay) @ L42

  • 方法名:setOverlay
  • 源码定位:L42
  • 返回类型:void
  • 修饰符:public

参数:

  • overlay: BossEvent.BossBarOverlay

说明:

TODO

public BossEvent setDarkenScreen(boolean darkenScreen) @ L51

  • 方法名:setDarkenScreen
  • 源码定位:L51
  • 返回类型:BossEvent
  • 修饰符:public

参数:

  • darkenScreen: boolean

说明:

TODO

public BossEvent setPlayBossMusic(boolean playBossMusic) @ L62

  • 方法名:setPlayBossMusic
  • 源码定位:L62
  • 返回类型:BossEvent
  • 修饰符:public

参数:

  • playBossMusic: boolean

说明:

TODO

public BossEvent setCreateWorldFog(boolean createWorldFog) @ L73

  • 方法名:setCreateWorldFog
  • 源码定位:L73
  • 返回类型:BossEvent
  • 修饰符:public

参数:

  • createWorldFog: boolean

说明:

TODO

public void setName(Component name) @ L84

  • 方法名:setName
  • 源码定位:L84
  • 返回类型:void
  • 修饰符:public

参数:

  • name: Component

说明:

TODO

private void broadcast(Function<BossEvent,ClientboundBossEventPacket> factory) @ L93

  • 方法名:broadcast
  • 源码定位:L93
  • 返回类型:void
  • 修饰符:private

参数:

  • factory: Function<BossEvent,ClientboundBossEventPacket>

说明:

TODO

public void addPlayer(ServerPlayer player) @ L103

  • 方法名:addPlayer
  • 源码定位:L103
  • 返回类型:void
  • 修饰符:public

参数:

  • player: ServerPlayer

说明:

TODO

public void removePlayer(ServerPlayer player) @ L109

  • 方法名:removePlayer
  • 源码定位:L109
  • 返回类型:void
  • 修饰符:public

参数:

  • player: ServerPlayer

说明:

TODO

public void removeAllPlayers() @ L115

  • 方法名:removeAllPlayers
  • 源码定位:L115
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public boolean isVisible() @ L123

  • 方法名:isVisible
  • 源码定位:L123
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public void setVisible(boolean visible) @ L127

  • 方法名:setVisible
  • 源码定位:L127
  • 返回类型:void
  • 修饰符:public

参数:

  • visible: boolean

说明:

TODO

public Collection<ServerPlayer> getPlayers() @ L139

  • 方法名:getPlayers
  • 源码定位:L139
  • 返回类型:Collection
  • 修饰符:public

参数:

说明:

TODO

protected void setDirty() @ L143

  • 方法名:setDirty
  • 源码定位:L143
  • 返回类型:void
  • 修饰符:protected

参数:

说明:

TODO

代码

public class ServerBossEvent extends BossEvent {
    private final Set<ServerPlayer> players = Sets.newHashSet();
    private final Set<ServerPlayer> unmodifiablePlayers = Collections.unmodifiableSet(this.players);
    private boolean visible = true;
 
    public ServerBossEvent(UUID id, Component name, BossEvent.BossBarColor color, BossEvent.BossBarOverlay overlay) {
        super(id, name, color, overlay);
    }
 
    @Override
    public void setProgress(float progress) {
        if (progress != this.progress) {
            super.setProgress(progress);
            this.setDirty();
            this.broadcast(ClientboundBossEventPacket::createUpdateProgressPacket);
        }
    }
 
    @Override
    public void setColor(BossEvent.BossBarColor color) {
        if (color != this.color) {
            super.setColor(color);
            this.setDirty();
            this.broadcast(ClientboundBossEventPacket::createUpdateStylePacket);
        }
    }
 
    @Override
    public void setOverlay(BossEvent.BossBarOverlay overlay) {
        if (overlay != this.overlay) {
            super.setOverlay(overlay);
            this.setDirty();
            this.broadcast(ClientboundBossEventPacket::createUpdateStylePacket);
        }
    }
 
    @Override
    public BossEvent setDarkenScreen(boolean darkenScreen) {
        if (darkenScreen != this.darkenScreen) {
            super.setDarkenScreen(darkenScreen);
            this.setDirty();
            this.broadcast(ClientboundBossEventPacket::createUpdatePropertiesPacket);
        }
 
        return this;
    }
 
    @Override
    public BossEvent setPlayBossMusic(boolean playBossMusic) {
        if (playBossMusic != this.playBossMusic) {
            super.setPlayBossMusic(playBossMusic);
            this.setDirty();
            this.broadcast(ClientboundBossEventPacket::createUpdatePropertiesPacket);
        }
 
        return this;
    }
 
    @Override
    public BossEvent setCreateWorldFog(boolean createWorldFog) {
        if (createWorldFog != this.createWorldFog) {
            super.setCreateWorldFog(createWorldFog);
            this.setDirty();
            this.broadcast(ClientboundBossEventPacket::createUpdatePropertiesPacket);
        }
 
        return this;
    }
 
    @Override
    public void setName(Component name) {
        if (!Objects.equal(name, this.name)) {
            super.setName(name);
            this.setDirty();
            this.broadcast(ClientboundBossEventPacket::createUpdateNamePacket);
        }
    }
 
    private void broadcast(Function<BossEvent, ClientboundBossEventPacket> factory) {
        if (this.visible) {
            ClientboundBossEventPacket packet = factory.apply(this);
 
            for (ServerPlayer player : this.players) {
                player.connection.send(packet);
            }
        }
    }
 
    public void addPlayer(ServerPlayer player) {
        if (this.players.add(player) && this.visible) {
            player.connection.send(ClientboundBossEventPacket.createAddPacket(this));
        }
    }
 
    public void removePlayer(ServerPlayer player) {
        if (this.players.remove(player) && this.visible) {
            player.connection.send(ClientboundBossEventPacket.createRemovePacket(this.getId()));
        }
    }
 
    public void removeAllPlayers() {
        if (!this.players.isEmpty()) {
            for (ServerPlayer player : Lists.newArrayList(this.players)) {
                this.removePlayer(player);
            }
        }
    }
 
    public boolean isVisible() {
        return this.visible;
    }
 
    public void setVisible(boolean visible) {
        if (visible != this.visible) {
            this.visible = visible;
            this.setDirty();
 
            for (ServerPlayer player : this.players) {
                player.connection
                    .send(visible ? ClientboundBossEventPacket.createAddPacket(this) : ClientboundBossEventPacket.createRemovePacket(this.getId()));
            }
        }
    }
 
    public Collection<ServerPlayer> getPlayers() {
        return this.unmodifiablePlayers;
    }
 
    protected void setDirty() {
    }
}

引用的其他类

  • Component

    • 引用位置: 参数
  • ClientboundBossEventPacket

    • 引用位置: 参数/方法调用
    • 关联成员: ClientboundBossEventPacket.createAddPacket(), ClientboundBossEventPacket.createRemovePacket()
  • ServerPlayer

    • 引用位置: 参数/字段/返回值
  • BossEvent

    • 引用位置: 参数/继承/返回值