Minestom/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java

206 lines
6.8 KiB
Java
Raw Normal View History

2020-04-24 03:25:58 +02:00
package net.minestom.server.network.packet.server.play;
2019-08-19 17:04:19 +02:00
import net.kyori.adventure.bossbar.BossBar;
import net.kyori.adventure.text.Component;
import net.minestom.server.adventure.AdventurePacketConvertor;
import net.minestom.server.adventure.ComponentHolder;
2022-10-29 11:02:22 +02:00
import net.minestom.server.network.NetworkBuffer;
2024-03-19 17:42:06 +01:00
import net.minestom.server.network.packet.server.ServerPacket.ComponentHolding;
2020-04-24 03:25:58 +02:00
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
import org.jetbrains.annotations.NotNull;
2019-08-19 17:04:19 +02:00
import java.util.Collection;
import java.util.List;
2019-08-19 17:04:19 +02:00
import java.util.UUID;
import java.util.function.UnaryOperator;
2019-08-19 17:04:19 +02:00
2022-10-29 11:02:22 +02:00
import static net.minestom.server.network.NetworkBuffer.*;
2024-03-19 17:42:06 +01:00
public record BossBarPacket(@NotNull UUID uuid, @NotNull Action action) implements ServerPacket.Play, ServerPacket.ComponentHolding {
2022-10-29 11:02:22 +02:00
public BossBarPacket(@NotNull NetworkBuffer reader) {
this(reader.read(NetworkBuffer.UUID), switch (reader.read(VAR_INT)) {
2021-11-30 17:49:41 +01:00
case 0 -> new AddAction(reader);
case 1 -> new RemoveAction();
case 2 -> new UpdateHealthAction(reader);
case 3 -> new UpdateTitleAction(reader);
case 4 -> new UpdateStyleAction(reader);
case 5 -> new UpdateFlagsAction(reader);
default -> throw new RuntimeException("Unknown action id");
});
}
2019-08-19 17:04:19 +02:00
@Override
2022-10-29 11:02:22 +02:00
public void write(@NotNull NetworkBuffer writer) {
writer.write(NetworkBuffer.UUID, uuid);
writer.write(VAR_INT, action.id());
2021-11-30 17:49:41 +01:00
writer.write(action);
}
@Override
public @NotNull Collection<Component> components() {
return this.action instanceof ComponentHolder<?> holder
? holder.components()
: List.of();
}
@Override
public @NotNull ServerPacket copyWithOperator(@NotNull UnaryOperator<Component> operator) {
return this.action instanceof ComponentHolder<?> holder
? new BossBarPacket(this.uuid, (Action) holder.copyWithOperator(operator))
: this;
}
2022-10-29 11:02:22 +02:00
public sealed interface Action extends NetworkBuffer.Writer
2021-11-30 17:49:41 +01:00
permits AddAction, RemoveAction, UpdateHealthAction, UpdateTitleAction, UpdateStyleAction, UpdateFlagsAction {
int id();
}
public record AddAction(@NotNull Component title, float health, @NotNull BossBar.Color color,
2022-10-29 11:02:22 +02:00
@NotNull BossBar.Overlay overlay,
byte flags) implements Action, ComponentHolder<AddAction> {
2021-11-30 17:49:41 +01:00
public AddAction(@NotNull BossBar bar) {
this(bar.name(), bar.progress(), bar.color(), bar.overlay(),
AdventurePacketConvertor.getBossBarFlagValue(bar.flags()));
}
2022-10-29 11:02:22 +02:00
public AddAction(@NotNull NetworkBuffer reader) {
this(reader.read(COMPONENT), reader.read(FLOAT),
BossBar.Color.values()[reader.read(VAR_INT)],
BossBar.Overlay.values()[reader.read(VAR_INT)], reader.read(BYTE));
2021-11-30 17:49:41 +01:00
}
@Override
2022-10-29 11:02:22 +02:00
public void write(@NotNull NetworkBuffer writer) {
writer.write(COMPONENT, title);
writer.write(FLOAT, health);
writer.write(VAR_INT, AdventurePacketConvertor.getBossBarColorValue(color));
writer.write(VAR_INT, AdventurePacketConvertor.getBossBarOverlayValue(overlay));
writer.write(BYTE, flags);
2021-11-30 17:49:41 +01:00
}
@Override
public int id() {
return 0;
2019-08-19 17:04:19 +02:00
}
@Override
public @NotNull Collection<Component> components() {
return List.of(this.title);
}
@Override
public @NotNull AddAction copyWithOperator(@NotNull UnaryOperator<Component> operator) {
return new AddAction(operator.apply(this.title), this.health, this.color, this.overlay, this.flags);
}
2019-08-19 17:04:19 +02:00
}
2021-11-30 17:49:41 +01:00
public record RemoveAction() implements Action {
@Override
2022-10-29 11:02:22 +02:00
public void write(@NotNull NetworkBuffer writer) {
2021-11-30 17:49:41 +01:00
}
@Override
public int id() {
return 1;
}
}
2021-11-30 17:49:41 +01:00
public record UpdateHealthAction(float health) implements Action {
public UpdateHealthAction(@NotNull BossBar bar) {
this(bar.progress());
}
2022-10-29 11:02:22 +02:00
public UpdateHealthAction(@NotNull NetworkBuffer reader) {
this(reader.read(FLOAT));
2021-11-30 17:49:41 +01:00
}
@Override
2022-10-29 11:02:22 +02:00
public void write(@NotNull NetworkBuffer writer) {
writer.write(FLOAT, health);
2021-11-30 17:49:41 +01:00
}
@Override
public int id() {
return 2;
}
2019-08-19 17:04:19 +02:00
}
public record UpdateTitleAction(@NotNull Component title) implements Action, ComponentHolder<UpdateTitleAction> {
2021-11-30 17:49:41 +01:00
public UpdateTitleAction(@NotNull BossBar bar) {
this(bar.name());
}
2022-10-29 11:02:22 +02:00
public UpdateTitleAction(@NotNull NetworkBuffer reader) {
this(reader.read(COMPONENT));
2021-11-30 17:49:41 +01:00
}
@Override
2022-10-29 11:02:22 +02:00
public void write(@NotNull NetworkBuffer writer) {
writer.write(COMPONENT, title);
2021-11-30 17:49:41 +01:00
}
@Override
public int id() {
return 3;
2021-03-12 16:33:19 +01:00
}
@Override
public @NotNull Collection<Component> components() {
return List.of(this.title);
}
@Override
public @NotNull UpdateTitleAction copyWithOperator(@NotNull UnaryOperator<Component> operator) {
return new UpdateTitleAction(operator.apply(this.title));
}
2021-03-12 16:33:19 +01:00
}
2021-11-30 17:49:41 +01:00
public record UpdateStyleAction(@NotNull BossBar.Color color,
@NotNull BossBar.Overlay overlay) implements Action {
public UpdateStyleAction(@NotNull BossBar bar) {
this(bar.color(), bar.overlay());
}
2022-10-29 11:02:22 +02:00
public UpdateStyleAction(@NotNull NetworkBuffer reader) {
this(BossBar.Color.values()[reader.read(VAR_INT)], BossBar.Overlay.values()[reader.read(VAR_INT)]);
2021-11-30 17:49:41 +01:00
}
@Override
2022-10-29 11:02:22 +02:00
public void write(@NotNull NetworkBuffer writer) {
writer.write(VAR_INT, AdventurePacketConvertor.getBossBarColorValue(color));
writer.write(VAR_INT, AdventurePacketConvertor.getBossBarOverlayValue(overlay));
2021-11-30 17:49:41 +01:00
}
@Override
public int id() {
return 4;
2021-03-12 16:33:19 +01:00
}
}
2021-11-30 17:49:41 +01:00
public record UpdateFlagsAction(byte flags) implements Action {
public UpdateFlagsAction(@NotNull BossBar bar) {
this(AdventurePacketConvertor.getBossBarFlagValue(bar.flags()));
}
2022-10-29 11:02:22 +02:00
public UpdateFlagsAction(@NotNull NetworkBuffer reader) {
this(reader.read(BYTE));
2021-11-30 17:49:41 +01:00
}
@Override
2022-10-29 11:02:22 +02:00
public void write(@NotNull NetworkBuffer writer) {
writer.write(BYTE, flags);
2021-11-30 17:49:41 +01:00
}
@Override
public int id() {
return 5;
}
2019-08-19 17:04:19 +02:00
}
2021-11-30 17:49:41 +01:00
@Override
2024-03-19 17:42:06 +01:00
public int playId() {
return ServerPacketIdentifier.BOSS_BAR;
2021-11-30 17:49:41 +01:00
}
2019-08-19 17:04:19 +02:00
}