minecraft-src/net/minecraft/network/protocol/game/ServerboundSeenAdvancementsPacket.java
2025-07-04 01:41:11 +03:00

76 lines
2.4 KiB
Java

package net.minecraft.network.protocol.game;
import net.minecraft.advancements.AdvancementHolder;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketType;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.Nullable;
public class ServerboundSeenAdvancementsPacket implements Packet<ServerGamePacketListener> {
public static final StreamCodec<FriendlyByteBuf, ServerboundSeenAdvancementsPacket> STREAM_CODEC = Packet.codec(
ServerboundSeenAdvancementsPacket::write, ServerboundSeenAdvancementsPacket::new
);
private final ServerboundSeenAdvancementsPacket.Action action;
@Nullable
private final ResourceLocation tab;
public ServerboundSeenAdvancementsPacket(ServerboundSeenAdvancementsPacket.Action action, @Nullable ResourceLocation tab) {
this.action = action;
this.tab = tab;
}
public static ServerboundSeenAdvancementsPacket openedTab(AdvancementHolder advancement) {
return new ServerboundSeenAdvancementsPacket(ServerboundSeenAdvancementsPacket.Action.OPENED_TAB, advancement.id());
}
public static ServerboundSeenAdvancementsPacket closedScreen() {
return new ServerboundSeenAdvancementsPacket(ServerboundSeenAdvancementsPacket.Action.CLOSED_SCREEN, null);
}
private ServerboundSeenAdvancementsPacket(FriendlyByteBuf buffer) {
this.action = buffer.readEnum(ServerboundSeenAdvancementsPacket.Action.class);
if (this.action == ServerboundSeenAdvancementsPacket.Action.OPENED_TAB) {
this.tab = buffer.readResourceLocation();
} else {
this.tab = null;
}
}
/**
* Writes the raw packet data to the data stream.
*/
private void write(FriendlyByteBuf buffer) {
buffer.writeEnum(this.action);
if (this.action == ServerboundSeenAdvancementsPacket.Action.OPENED_TAB) {
buffer.writeResourceLocation(this.tab);
}
}
@Override
public PacketType<ServerboundSeenAdvancementsPacket> type() {
return GamePacketTypes.SERVERBOUND_SEEN_ADVANCEMENTS;
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void handle(ServerGamePacketListener handler) {
handler.handleSeenAdvancements(this);
}
public ServerboundSeenAdvancementsPacket.Action getAction() {
return this.action;
}
@Nullable
public ResourceLocation getTab() {
return this.tab;
}
public static enum Action {
OPENED_TAB,
CLOSED_SCREEN;
}
}