ClientboundBossEventPacket.java
net.minecraft.network.protocol.game.ClientboundBossEventPacket
信息
- 全限定名:net.minecraft.network.protocol.game.ClientboundBossEventPacket
- 类型:public class
- 包:net.minecraft.network.protocol.game
- 源码路径:src/main/java/net/minecraft/network/protocol/game/ClientboundBossEventPacket.java
- 起始行号:L13
- 实现:Packet
- 职责:
TODO
字段/常量
-
STREAM_CODEC- 类型:
StreamCodec<RegistryFriendlyByteBuf,ClientboundBossEventPacket> - 修饰符:
public static final - 源码定位:
L14 - 说明:
TODO
- 类型:
-
FLAG_DARKEN- 类型:
int - 修饰符:
private static final - 源码定位:
L17 - 说明:
TODO
- 类型:
-
FLAG_MUSIC- 类型:
int - 修饰符:
private static final - 源码定位:
L18 - 说明:
TODO
- 类型:
-
FLAG_FOG- 类型:
int - 修饰符:
private static final - 源码定位:
L19 - 说明:
TODO
- 类型:
-
id- 类型:
UUID - 修饰符:
private final - 源码定位:
L20 - 说明:
TODO
- 类型:
-
operation- 类型:
ClientboundBossEventPacket.Operation - 修饰符:
private final - 源码定位:
L21 - 说明:
TODO
- 类型:
-
REMOVE_OPERATION- 类型:
ClientboundBossEventPacket.Operation - 修饰符:
private static final public public public - 源码定位:
L22 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.network.protocol.game.ClientboundBossEventPacket.AddOperation- 类型:
class - 修饰符:
private static - 源码定位:
L112 - 说明:
TODO
- 类型:
-
net.minecraft.network.protocol.game.ClientboundBossEventPacket.Handler- 类型:
interface - 修饰符:
public - 源码定位:
L162 - 说明:
TODO
- 类型:
-
net.minecraft.network.protocol.game.ClientboundBossEventPacket.Operation- 类型:
interface - 修饰符:
private - 源码定位:
L191 - 说明:
TODO
- 类型:
-
net.minecraft.network.protocol.game.ClientboundBossEventPacket.OperationType- 类型:
enum - 修饰符:
private static - 源码定位:
L199 - 说明:
TODO
- 类型:
-
net.minecraft.network.protocol.game.ClientboundBossEventPacket.UpdateNameOperation- 类型:
record - 修饰符:
private - 源码定位:
L214 - 说明:
TODO
- 类型:
-
net.minecraft.network.protocol.game.ClientboundBossEventPacket.UpdateProgressOperation- 类型:
record - 修饰符:
private - 源码定位:
L235 - 说明:
TODO
- 类型:
-
net.minecraft.network.protocol.game.ClientboundBossEventPacket.UpdatePropertiesOperation- 类型:
class - 修饰符:
private static - 源码定位:
L256 - 说明:
TODO
- 类型:
-
net.minecraft.network.protocol.game.ClientboundBossEventPacket.UpdateStyleOperation- 类型:
class - 修饰符:
private static - 源码定位:
L290 - 说明:
TODO
- 类型:
构造器
private ClientboundBossEventPacket(UUID id, ClientboundBossEventPacket.Operation operation) @ L38
- 构造器名:ClientboundBossEventPacket
- 源码定位:L38
- 修饰符:private
参数:
- id: UUID
- operation: ClientboundBossEventPacket.Operation
说明:
TODO
private ClientboundBossEventPacket(RegistryFriendlyByteBuf input) @ L43
- 构造器名:ClientboundBossEventPacket
- 源码定位:L43
- 修饰符:private
参数:
- input: RegistryFriendlyByteBuf
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static ClientboundBossEventPacket createAddPacket(BossEvent event) @ L49
- 方法名:createAddPacket
- 源码定位:L49
- 返回类型:ClientboundBossEventPacket
- 修饰符:public static
参数:
- event: BossEvent
说明:
TODO
public static ClientboundBossEventPacket createRemovePacket(UUID id) @ L53
- 方法名:createRemovePacket
- 源码定位:L53
- 返回类型:ClientboundBossEventPacket
- 修饰符:public static
参数:
- id: UUID
说明:
TODO
public static ClientboundBossEventPacket createUpdateProgressPacket(BossEvent event) @ L57
- 方法名:createUpdateProgressPacket
- 源码定位:L57
- 返回类型:ClientboundBossEventPacket
- 修饰符:public static
参数:
- event: BossEvent
说明:
TODO
public static ClientboundBossEventPacket createUpdateNamePacket(BossEvent event) @ L61
- 方法名:createUpdateNamePacket
- 源码定位:L61
- 返回类型:ClientboundBossEventPacket
- 修饰符:public static
参数:
- event: BossEvent
说明:
TODO
public static ClientboundBossEventPacket createUpdateStylePacket(BossEvent event) @ L65
- 方法名:createUpdateStylePacket
- 源码定位:L65
- 返回类型:ClientboundBossEventPacket
- 修饰符:public static
参数:
- event: BossEvent
说明:
TODO
public static ClientboundBossEventPacket createUpdatePropertiesPacket(BossEvent event) @ L69
- 方法名:createUpdatePropertiesPacket
- 源码定位:L69
- 返回类型:ClientboundBossEventPacket
- 修饰符:public static
参数:
- event: BossEvent
说明:
TODO
private void write(RegistryFriendlyByteBuf output) @ L76
- 方法名:write
- 源码定位:L76
- 返回类型:void
- 修饰符:private
参数:
- output: RegistryFriendlyByteBuf
说明:
TODO
private static int encodeProperties(boolean darkenScreen, boolean playMusic, boolean createWorldFog) @ L82
- 方法名:encodeProperties
- 源码定位:L82
- 返回类型:int
- 修饰符:private static
参数:
- darkenScreen: boolean
- playMusic: boolean
- createWorldFog: boolean
说明:
TODO
public PacketType<ClientboundBossEventPacket> type() @ L99
- 方法名:type
- 源码定位:L99
- 返回类型:PacketType
- 修饰符:public
参数:
- 无
说明:
TODO
public void handle(ClientGamePacketListener listener) @ L104
- 方法名:handle
- 源码定位:L104
- 返回类型:void
- 修饰符:public
参数:
- listener: ClientGamePacketListener
说明:
TODO
public void dispatch(ClientboundBossEventPacket.Handler handler) @ L108
- 方法名:dispatch
- 源码定位:L108
- 返回类型:void
- 修饰符:public
参数:
- handler: ClientboundBossEventPacket.Handler
说明:
TODO
代码
public class ClientboundBossEventPacket implements Packet<ClientGamePacketListener> {
public static final StreamCodec<RegistryFriendlyByteBuf, ClientboundBossEventPacket> STREAM_CODEC = Packet.codec(
ClientboundBossEventPacket::write, ClientboundBossEventPacket::new
);
private static final int FLAG_DARKEN = 1;
private static final int FLAG_MUSIC = 2;
private static final int FLAG_FOG = 4;
private final UUID id;
private final ClientboundBossEventPacket.Operation operation;
private static final ClientboundBossEventPacket.Operation REMOVE_OPERATION = new ClientboundBossEventPacket.Operation() {
@Override
public ClientboundBossEventPacket.OperationType getType() {
return ClientboundBossEventPacket.OperationType.REMOVE;
}
@Override
public void dispatch(UUID id, ClientboundBossEventPacket.Handler handler) {
handler.remove(id);
}
@Override
public void write(RegistryFriendlyByteBuf output) {
}
};
private ClientboundBossEventPacket(UUID id, ClientboundBossEventPacket.Operation operation) {
this.id = id;
this.operation = operation;
}
private ClientboundBossEventPacket(RegistryFriendlyByteBuf input) {
this.id = input.readUUID();
ClientboundBossEventPacket.OperationType type = input.readEnum(ClientboundBossEventPacket.OperationType.class);
this.operation = type.reader.decode(input);
}
public static ClientboundBossEventPacket createAddPacket(BossEvent event) {
return new ClientboundBossEventPacket(event.getId(), new ClientboundBossEventPacket.AddOperation(event));
}
public static ClientboundBossEventPacket createRemovePacket(UUID id) {
return new ClientboundBossEventPacket(id, REMOVE_OPERATION);
}
public static ClientboundBossEventPacket createUpdateProgressPacket(BossEvent event) {
return new ClientboundBossEventPacket(event.getId(), new ClientboundBossEventPacket.UpdateProgressOperation(event.getProgress()));
}
public static ClientboundBossEventPacket createUpdateNamePacket(BossEvent event) {
return new ClientboundBossEventPacket(event.getId(), new ClientboundBossEventPacket.UpdateNameOperation(event.getName()));
}
public static ClientboundBossEventPacket createUpdateStylePacket(BossEvent event) {
return new ClientboundBossEventPacket(event.getId(), new ClientboundBossEventPacket.UpdateStyleOperation(event.getColor(), event.getOverlay()));
}
public static ClientboundBossEventPacket createUpdatePropertiesPacket(BossEvent event) {
return new ClientboundBossEventPacket(
event.getId(),
new ClientboundBossEventPacket.UpdatePropertiesOperation(event.shouldDarkenScreen(), event.shouldPlayBossMusic(), event.shouldCreateWorldFog())
);
}
private void write(RegistryFriendlyByteBuf output) {
output.writeUUID(this.id);
output.writeEnum(this.operation.getType());
this.operation.write(output);
}
private static int encodeProperties(boolean darkenScreen, boolean playMusic, boolean createWorldFog) {
int properties = 0;
if (darkenScreen) {
properties |= 1;
}
if (playMusic) {
properties |= 2;
}
if (createWorldFog) {
properties |= 4;
}
return properties;
}
@Override
public PacketType<ClientboundBossEventPacket> type() {
return GamePacketTypes.CLIENTBOUND_BOSS_EVENT;
}
public void handle(ClientGamePacketListener listener) {
listener.handleBossUpdate(this);
}
public void dispatch(ClientboundBossEventPacket.Handler handler) {
this.operation.dispatch(this.id, handler);
}
private static class AddOperation implements ClientboundBossEventPacket.Operation {
private final Component name;
private final float progress;
private final BossEvent.BossBarColor color;
private final BossEvent.BossBarOverlay overlay;
private final boolean darkenScreen;
private final boolean playMusic;
private final boolean createWorldFog;
private AddOperation(BossEvent event) {
this.name = event.getName();
this.progress = event.getProgress();
this.color = event.getColor();
this.overlay = event.getOverlay();
this.darkenScreen = event.shouldDarkenScreen();
this.playMusic = event.shouldPlayBossMusic();
this.createWorldFog = event.shouldCreateWorldFog();
}
private AddOperation(RegistryFriendlyByteBuf input) {
this.name = ComponentSerialization.TRUSTED_STREAM_CODEC.decode(input);
this.progress = input.readFloat();
this.color = input.readEnum(BossEvent.BossBarColor.class);
this.overlay = input.readEnum(BossEvent.BossBarOverlay.class);
int flags = input.readUnsignedByte();
this.darkenScreen = (flags & 1) > 0;
this.playMusic = (flags & 2) > 0;
this.createWorldFog = (flags & 4) > 0;
}
@Override
public ClientboundBossEventPacket.OperationType getType() {
return ClientboundBossEventPacket.OperationType.ADD;
}
@Override
public void dispatch(UUID id, ClientboundBossEventPacket.Handler handler) {
handler.add(id, this.name, this.progress, this.color, this.overlay, this.darkenScreen, this.playMusic, this.createWorldFog);
}
@Override
public void write(RegistryFriendlyByteBuf output) {
ComponentSerialization.TRUSTED_STREAM_CODEC.encode(output, this.name);
output.writeFloat(this.progress);
output.writeEnum(this.color);
output.writeEnum(this.overlay);
output.writeByte(ClientboundBossEventPacket.encodeProperties(this.darkenScreen, this.playMusic, this.createWorldFog));
}
}
public interface Handler {
default void add(
UUID id,
Component name,
float progress,
BossEvent.BossBarColor color,
BossEvent.BossBarOverlay overlay,
boolean darkenScreen,
boolean playMusic,
boolean createWorldFog
) {
}
default void remove(UUID id) {
}
default void updateProgress(UUID id, float progress) {
}
default void updateName(UUID id, Component name) {
}
default void updateStyle(UUID id, BossEvent.BossBarColor color, BossEvent.BossBarOverlay overlay) {
}
default void updateProperties(UUID id, boolean darkenScreen, boolean playMusic, boolean createWorldFog) {
}
}
private interface Operation {
ClientboundBossEventPacket.OperationType getType();
void dispatch(UUID id, ClientboundBossEventPacket.Handler handler);
void write(RegistryFriendlyByteBuf output);
}
private static enum OperationType {
ADD(ClientboundBossEventPacket.AddOperation::new),
REMOVE(input -> ClientboundBossEventPacket.REMOVE_OPERATION),
UPDATE_PROGRESS(ClientboundBossEventPacket.UpdateProgressOperation::new),
UPDATE_NAME(ClientboundBossEventPacket.UpdateNameOperation::new),
UPDATE_STYLE(ClientboundBossEventPacket.UpdateStyleOperation::new),
UPDATE_PROPERTIES(ClientboundBossEventPacket.UpdatePropertiesOperation::new);
private final StreamDecoder<RegistryFriendlyByteBuf, ClientboundBossEventPacket.Operation> reader;
private OperationType(StreamDecoder<RegistryFriendlyByteBuf, ClientboundBossEventPacket.Operation> reader) {
this.reader = reader;
}
}
private record UpdateNameOperation(Component name) implements ClientboundBossEventPacket.Operation {
private UpdateNameOperation(RegistryFriendlyByteBuf input) {
this(ComponentSerialization.TRUSTED_STREAM_CODEC.decode(input));
}
@Override
public ClientboundBossEventPacket.OperationType getType() {
return ClientboundBossEventPacket.OperationType.UPDATE_NAME;
}
@Override
public void dispatch(UUID id, ClientboundBossEventPacket.Handler handler) {
handler.updateName(id, this.name);
}
@Override
public void write(RegistryFriendlyByteBuf output) {
ComponentSerialization.TRUSTED_STREAM_CODEC.encode(output, this.name);
}
}
private record UpdateProgressOperation(float progress) implements ClientboundBossEventPacket.Operation {
private UpdateProgressOperation(RegistryFriendlyByteBuf input) {
this(input.readFloat());
}
@Override
public ClientboundBossEventPacket.OperationType getType() {
return ClientboundBossEventPacket.OperationType.UPDATE_PROGRESS;
}
@Override
public void dispatch(UUID id, ClientboundBossEventPacket.Handler handler) {
handler.updateProgress(id, this.progress);
}
@Override
public void write(RegistryFriendlyByteBuf output) {
output.writeFloat(this.progress);
}
}
private static class UpdatePropertiesOperation implements ClientboundBossEventPacket.Operation {
private final boolean darkenScreen;
private final boolean playMusic;
private final boolean createWorldFog;
private UpdatePropertiesOperation(boolean darkenScreen, boolean playMusic, boolean createWorldFog) {
this.darkenScreen = darkenScreen;
this.playMusic = playMusic;
this.createWorldFog = createWorldFog;
}
private UpdatePropertiesOperation(RegistryFriendlyByteBuf input) {
int flags = input.readUnsignedByte();
this.darkenScreen = (flags & 1) > 0;
this.playMusic = (flags & 2) > 0;
this.createWorldFog = (flags & 4) > 0;
}
@Override
public ClientboundBossEventPacket.OperationType getType() {
return ClientboundBossEventPacket.OperationType.UPDATE_PROPERTIES;
}
@Override
public void dispatch(UUID id, ClientboundBossEventPacket.Handler handler) {
handler.updateProperties(id, this.darkenScreen, this.playMusic, this.createWorldFog);
}
@Override
public void write(RegistryFriendlyByteBuf output) {
output.writeByte(ClientboundBossEventPacket.encodeProperties(this.darkenScreen, this.playMusic, this.createWorldFog));
}
}
private static class UpdateStyleOperation implements ClientboundBossEventPacket.Operation {
private final BossEvent.BossBarColor color;
private final BossEvent.BossBarOverlay overlay;
private UpdateStyleOperation(BossEvent.BossBarColor color, BossEvent.BossBarOverlay overlay) {
this.color = color;
this.overlay = overlay;
}
private UpdateStyleOperation(RegistryFriendlyByteBuf input) {
this.color = input.readEnum(BossEvent.BossBarColor.class);
this.overlay = input.readEnum(BossEvent.BossBarOverlay.class);
}
@Override
public ClientboundBossEventPacket.OperationType getType() {
return ClientboundBossEventPacket.OperationType.UPDATE_STYLE;
}
@Override
public void dispatch(UUID id, ClientboundBossEventPacket.Handler handler) {
handler.updateStyle(id, this.color, this.overlay);
}
@Override
public void write(RegistryFriendlyByteBuf output) {
output.writeEnum(this.color);
output.writeEnum(this.overlay);
}
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
实现/方法调用 - 关联成员:
Packet.codec()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: