BossHealthOverlay.java
net.minecraft.client.gui.components.BossHealthOverlay
信息
- 全限定名:net.minecraft.client.gui.components.BossHealthOverlay
- 类型:public class
- 包:net.minecraft.client.gui.components
- 源码路径:src/main/java/net/minecraft/client/gui/components/BossHealthOverlay.java
- 起始行号:L21
- 职责:
TODO
字段/常量
-
BAR_WIDTH- 类型:
int - 修饰符:
private static final - 源码定位:
L22 - 说明:
TODO
- 类型:
-
BAR_HEIGHT- 类型:
int - 修饰符:
private static final - 源码定位:
L23 - 说明:
TODO
- 类型:
-
BAR_BACKGROUND_SPRITES- 类型:
Identifier[] - 修饰符:
private static final - 源码定位:
L24 - 说明:
TODO
- 类型:
-
BAR_PROGRESS_SPRITES- 类型:
Identifier[] - 修饰符:
private static final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
OVERLAY_BACKGROUND_SPRITES- 类型:
Identifier[] - 修饰符:
private static final - 源码定位:
L42 - 说明:
TODO
- 类型:
-
OVERLAY_PROGRESS_SPRITES- 类型:
Identifier[] - 修饰符:
private static final - 源码定位:
L48 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L54 - 说明:
TODO
- 类型:
-
events- 类型:
Map<UUID,LerpingBossEvent> - 修饰符:
private final - 源码定位:
L55 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public BossHealthOverlay(Minecraft minecraft) @ L57
- 构造器名:BossHealthOverlay
- 源码定位:L57
- 修饰符:public
参数:
- minecraft: Minecraft
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void extractRenderState(GuiGraphicsExtractor graphics) @ L61
- 方法名:extractRenderState
- 源码定位:L61
- 返回类型:void
- 修饰符:public
参数:
- graphics: GuiGraphicsExtractor
说明:
TODO
private void extractBar(GuiGraphicsExtractor graphics, int x, int y, BossEvent event) @ L87
- 方法名:extractBar
- 源码定位:L87
- 返回类型:void
- 修饰符:private
参数:
- graphics: GuiGraphicsExtractor
- x: int
- y: int
- event: BossEvent
说明:
TODO
private void extractBar(GuiGraphicsExtractor graphics, int x, int y, BossEvent event, int width, Identifier[] sprites, Identifier[] overlaySprites) @ L95
- 方法名:extractBar
- 源码定位:L95
- 返回类型:void
- 修饰符:private
参数:
- graphics: GuiGraphicsExtractor
- x: int
- y: int
- event: BossEvent
- width: int
- sprites: Identifier[]
- overlaySprites: Identifier[]
说明:
TODO
public void update(ClientboundBossEventPacket packet) @ L102
- 方法名:update
- 源码定位:L102
- 返回类型:void
- 修饰符:public
参数:
- packet: ClientboundBossEventPacket
说明:
TODO
public void reset() @ L156
- 方法名:reset
- 源码定位:L156
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean shouldPlayMusic() @ L160
- 方法名:shouldPlayMusic
- 源码定位:L160
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean shouldDarkenScreen() @ L172
- 方法名:shouldDarkenScreen
- 源码定位:L172
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean shouldCreateWorldFog() @ L184
- 方法名:shouldCreateWorldFog
- 源码定位:L184
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class BossHealthOverlay {
private static final int BAR_WIDTH = 182;
private static final int BAR_HEIGHT = 5;
private static final Identifier[] BAR_BACKGROUND_SPRITES = new Identifier[]{
Identifier.withDefaultNamespace("boss_bar/pink_background"),
Identifier.withDefaultNamespace("boss_bar/blue_background"),
Identifier.withDefaultNamespace("boss_bar/red_background"),
Identifier.withDefaultNamespace("boss_bar/green_background"),
Identifier.withDefaultNamespace("boss_bar/yellow_background"),
Identifier.withDefaultNamespace("boss_bar/purple_background"),
Identifier.withDefaultNamespace("boss_bar/white_background")
};
private static final Identifier[] BAR_PROGRESS_SPRITES = new Identifier[]{
Identifier.withDefaultNamespace("boss_bar/pink_progress"),
Identifier.withDefaultNamespace("boss_bar/blue_progress"),
Identifier.withDefaultNamespace("boss_bar/red_progress"),
Identifier.withDefaultNamespace("boss_bar/green_progress"),
Identifier.withDefaultNamespace("boss_bar/yellow_progress"),
Identifier.withDefaultNamespace("boss_bar/purple_progress"),
Identifier.withDefaultNamespace("boss_bar/white_progress")
};
private static final Identifier[] OVERLAY_BACKGROUND_SPRITES = new Identifier[]{
Identifier.withDefaultNamespace("boss_bar/notched_6_background"),
Identifier.withDefaultNamespace("boss_bar/notched_10_background"),
Identifier.withDefaultNamespace("boss_bar/notched_12_background"),
Identifier.withDefaultNamespace("boss_bar/notched_20_background")
};
private static final Identifier[] OVERLAY_PROGRESS_SPRITES = new Identifier[]{
Identifier.withDefaultNamespace("boss_bar/notched_6_progress"),
Identifier.withDefaultNamespace("boss_bar/notched_10_progress"),
Identifier.withDefaultNamespace("boss_bar/notched_12_progress"),
Identifier.withDefaultNamespace("boss_bar/notched_20_progress")
};
private final Minecraft minecraft;
private final Map<UUID, LerpingBossEvent> events = Maps.newLinkedHashMap();
public BossHealthOverlay(Minecraft minecraft) {
this.minecraft = minecraft;
}
public void extractRenderState(GuiGraphicsExtractor graphics) {
if (!this.events.isEmpty()) {
graphics.nextStratum();
ProfilerFiller profiler = Profiler.get();
profiler.push("bossHealth");
int screenWidth = graphics.guiWidth();
int yOffset = 12;
for (LerpingBossEvent event : this.events.values()) {
int xLeft = screenWidth / 2 - 91;
this.extractBar(graphics, xLeft, yOffset, event);
Component msg = event.getName();
int width = this.minecraft.font.width(msg);
int x = screenWidth / 2 - width / 2;
int y = yOffset - 9;
graphics.text(this.minecraft.font, msg, x, y, -1);
yOffset += 10 + 9;
if (yOffset >= graphics.guiHeight() / 3) {
break;
}
}
profiler.pop();
}
}
private void extractBar(GuiGraphicsExtractor graphics, int x, int y, BossEvent event) {
this.extractBar(graphics, x, y, event, 182, BAR_BACKGROUND_SPRITES, OVERLAY_BACKGROUND_SPRITES);
int width = Mth.lerpDiscrete(event.getProgress(), 0, 182);
if (width > 0) {
this.extractBar(graphics, x, y, event, width, BAR_PROGRESS_SPRITES, OVERLAY_PROGRESS_SPRITES);
}
}
private void extractBar(GuiGraphicsExtractor graphics, int x, int y, BossEvent event, int width, Identifier[] sprites, Identifier[] overlaySprites) {
graphics.blitSprite(RenderPipelines.GUI_TEXTURED, sprites[event.getColor().ordinal()], 182, 5, 0, 0, x, y, width, 5);
if (event.getOverlay() != BossEvent.BossBarOverlay.PROGRESS) {
graphics.blitSprite(RenderPipelines.GUI_TEXTURED, overlaySprites[event.getOverlay().ordinal() - 1], 182, 5, 0, 0, x, y, width, 5);
}
}
public void update(ClientboundBossEventPacket packet) {
packet.dispatch(
new ClientboundBossEventPacket.Handler() {
{
Objects.requireNonNull(BossHealthOverlay.this);
}
@Override
public void add(
UUID id,
Component name,
float progress,
BossEvent.BossBarColor color,
BossEvent.BossBarOverlay overlay,
boolean darkenScreen,
boolean playMusic,
boolean createWorldFog
) {
BossHealthOverlay.this.events.put(id, new LerpingBossEvent(id, name, progress, color, overlay, darkenScreen, playMusic, createWorldFog));
}
@Override
public void remove(UUID id) {
BossHealthOverlay.this.events.remove(id);
}
@Override
public void updateProgress(UUID id, float progress) {
BossHealthOverlay.this.events.get(id).setProgress(progress);
}
@Override
public void updateName(UUID id, Component name) {
BossHealthOverlay.this.events.get(id).setName(name);
}
@Override
public void updateStyle(UUID id, BossEvent.BossBarColor color, BossEvent.BossBarOverlay overlay) {
LerpingBossEvent event = BossHealthOverlay.this.events.get(id);
event.setColor(color);
event.setOverlay(overlay);
}
@Override
public void updateProperties(UUID id, boolean darkenScreen, boolean playMusic, boolean createWorldFog) {
LerpingBossEvent event = BossHealthOverlay.this.events.get(id);
event.setDarkenScreen(darkenScreen);
event.setPlayBossMusic(playMusic);
event.setCreateWorldFog(createWorldFog);
}
}
);
}
public void reset() {
this.events.clear();
}
public boolean shouldPlayMusic() {
if (!this.events.isEmpty()) {
for (BossEvent event : this.events.values()) {
if (event.shouldPlayBossMusic()) {
return true;
}
}
}
return false;
}
public boolean shouldDarkenScreen() {
if (!this.events.isEmpty()) {
for (BossEvent event : this.events.values()) {
if (event.shouldDarkenScreen()) {
return true;
}
}
}
return false;
}
public boolean shouldCreateWorldFog() {
if (!this.events.isEmpty()) {
for (BossEvent event : this.events.values()) {
if (event.shouldCreateWorldFog()) {
return true;
}
}
}
return false;
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
LerpingBossEvent()
- 引用位置:
-
- 引用位置:
参数/方法调用/构造调用 - 关联成员:
ClientboundBossEventPacket.Handler(), Handler()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
Identifier.withDefaultNamespace()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.lerpDiscrete()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Profiler.get()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: