2020-04-24 03:25:58 +02:00
|
|
|
package net.minestom.server.network.packet.server.play;
|
2019-08-19 17:04:19 +02:00
|
|
|
|
2021-03-10 17:13:27 +01:00
|
|
|
import net.kyori.adventure.text.Component;
|
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;
|
2024-01-02 12:15:19 +01:00
|
|
|
import net.minestom.server.scoreboard.Sidebar;
|
2020-10-25 22:19:27 +01:00
|
|
|
import org.jetbrains.annotations.NotNull;
|
2021-11-30 17:49:41 +01:00
|
|
|
import org.jetbrains.annotations.Nullable;
|
2019-08-19 17:04:19 +02:00
|
|
|
|
2021-03-12 16:33:19 +01:00
|
|
|
import java.util.Collection;
|
2022-09-02 22:23:42 +02:00
|
|
|
import java.util.List;
|
2021-03-12 16:33:19 +01:00
|
|
|
import java.util.function.UnaryOperator;
|
|
|
|
|
2022-10-29 11:02:22 +02:00
|
|
|
import static net.minestom.server.network.NetworkBuffer.*;
|
|
|
|
|
2021-11-30 17:49:41 +01:00
|
|
|
public record ScoreboardObjectivePacket(@NotNull String objectiveName, byte mode,
|
|
|
|
@Nullable Component objectiveValue,
|
2024-01-02 12:15:19 +01:00
|
|
|
@Nullable Type type,
|
2024-03-19 17:42:06 +01:00
|
|
|
@Nullable Sidebar.NumberFormat numberFormat) implements ServerPacket.Play, ServerPacket.ComponentHolding {
|
2022-10-29 11:02:22 +02:00
|
|
|
public ScoreboardObjectivePacket(@NotNull NetworkBuffer reader) {
|
2021-11-30 17:49:41 +01:00
|
|
|
this(read(reader));
|
|
|
|
}
|
2019-08-19 17:04:19 +02:00
|
|
|
|
2021-11-30 17:49:41 +01:00
|
|
|
private ScoreboardObjectivePacket(ScoreboardObjectivePacket packet) {
|
2024-01-02 12:15:19 +01:00
|
|
|
this(packet.objectiveName, packet.mode, packet.objectiveValue, packet.type, packet.numberFormat);
|
2021-11-30 17:49:41 +01:00
|
|
|
}
|
2019-08-19 17:04:19 +02:00
|
|
|
|
2022-10-29 11:02:22 +02:00
|
|
|
private static ScoreboardObjectivePacket read(@NotNull NetworkBuffer reader) {
|
2024-01-02 12:15:19 +01:00
|
|
|
String objectiveName = reader.read(STRING);
|
|
|
|
byte mode = reader.read(BYTE);
|
2021-11-30 17:49:41 +01:00
|
|
|
Component objectiveValue = null;
|
|
|
|
Type type = null;
|
2024-01-02 12:15:19 +01:00
|
|
|
Sidebar.NumberFormat numberFormat = null;
|
2021-11-30 17:49:41 +01:00
|
|
|
if (mode == 0 || mode == 2) {
|
2022-10-29 11:02:22 +02:00
|
|
|
objectiveValue = reader.read(COMPONENT);
|
|
|
|
type = Type.values()[reader.read(VAR_INT)];
|
2024-01-02 12:15:19 +01:00
|
|
|
numberFormat = reader.readOptional(Sidebar.NumberFormat::new);
|
2021-11-30 17:49:41 +01:00
|
|
|
}
|
2024-01-02 12:15:19 +01:00
|
|
|
return new ScoreboardObjectivePacket(objectiveName, mode, objectiveValue, type, numberFormat);
|
2021-02-06 18:58:52 +01:00
|
|
|
}
|
|
|
|
|
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(STRING, objectiveName);
|
|
|
|
writer.write(BYTE, mode);
|
2019-08-19 17:04:19 +02:00
|
|
|
if (mode == 0 || mode == 2) {
|
2021-11-30 17:49:41 +01:00
|
|
|
assert objectiveValue != null;
|
2022-10-29 11:02:22 +02:00
|
|
|
writer.write(COMPONENT, objectiveValue);
|
2021-11-30 17:49:41 +01:00
|
|
|
assert type != null;
|
2022-10-29 11:02:22 +02:00
|
|
|
writer.write(VAR_INT, type.ordinal());
|
2024-01-02 12:15:19 +01:00
|
|
|
writer.writeOptional(numberFormat);
|
2019-08-19 17:04:19 +02:00
|
|
|
}
|
2021-02-06 18:58:52 +01:00
|
|
|
}
|
|
|
|
|
2019-08-19 17:04:19 +02:00
|
|
|
@Override
|
2024-03-19 17:42:06 +01:00
|
|
|
public int playId() {
|
|
|
|
return ServerPacketIdentifier.SCOREBOARD_OBJECTIVE;
|
2019-08-19 17:04:19 +02:00
|
|
|
}
|
2020-08-07 12:16:56 +02:00
|
|
|
|
2021-03-12 16:33:19 +01:00
|
|
|
@Override
|
|
|
|
public @NotNull Collection<Component> components() {
|
2022-09-02 22:23:42 +02:00
|
|
|
return mode == 0 || mode == 2 ? List.of(objectiveValue) :
|
|
|
|
List.of();
|
2021-03-12 16:33:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public @NotNull ServerPacket copyWithOperator(@NotNull UnaryOperator<Component> operator) {
|
2021-11-30 17:49:41 +01:00
|
|
|
return mode == 0 || mode == 2 ? new ScoreboardObjectivePacket(objectiveName, mode,
|
2024-01-02 12:15:19 +01:00
|
|
|
operator.apply(objectiveValue), type, numberFormat) : this;
|
2021-03-12 16:33:19 +01:00
|
|
|
}
|
|
|
|
|
2020-08-07 12:16:56 +02:00
|
|
|
/**
|
|
|
|
* This enumeration represents all available types for the scoreboard objective
|
|
|
|
*/
|
|
|
|
public enum Type {
|
|
|
|
INTEGER,
|
|
|
|
HEARTS
|
|
|
|
}
|
2019-08-19 17:04:19 +02:00
|
|
|
}
|