/* * Decompiled with CFR 0.152. * * Could not load the following classes: * com.mojang.datafixers.kinds.App * com.mojang.datafixers.kinds.Applicative * com.mojang.serialization.Codec * com.mojang.serialization.DataResult * com.mojang.serialization.Lifecycle * com.mojang.serialization.MapCodec * com.mojang.serialization.codecs.RecordCodecBuilder */ package net.minecraft.network.chat; import com.mojang.datafixers.kinds.App; import com.mojang.datafixers.kinds.Applicative; import com.mojang.serialization.Codec; import com.mojang.serialization.DataResult; import com.mojang.serialization.Lifecycle; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import java.io.File; import java.net.URI; import java.nio.file.Path; import java.util.Optional; import net.minecraft.core.Holder; import net.minecraft.nbt.Tag; import net.minecraft.resources.Identifier; import net.minecraft.server.dialog.Dialog; import net.minecraft.util.ExtraCodecs; import net.minecraft.util.StringRepresentable; public interface ClickEvent { public static final Codec CODEC = Action.CODEC.dispatch("action", ClickEvent::action, action -> action.codec); public Action action(); public static enum Action implements StringRepresentable { OPEN_URL("open_url", true, OpenUrl.CODEC), OPEN_FILE("open_file", false, OpenFile.CODEC), RUN_COMMAND("run_command", true, RunCommand.CODEC), SUGGEST_COMMAND("suggest_command", true, SuggestCommand.CODEC), SHOW_DIALOG("show_dialog", true, ShowDialog.CODEC), CHANGE_PAGE("change_page", true, ChangePage.CODEC), COPY_TO_CLIPBOARD("copy_to_clipboard", true, CopyToClipboard.CODEC), CUSTOM("custom", true, Custom.CODEC); public static final Codec UNSAFE_CODEC; public static final Codec CODEC; private final boolean allowFromServer; private final String name; private final MapCodec codec; private Action(String name, boolean allowFromServer, MapCodec codec) { this.name = name; this.allowFromServer = allowFromServer; this.codec = codec; } public boolean isAllowedFromServer() { return this.allowFromServer; } @Override public String getSerializedName() { return this.name; } public MapCodec valueCodec() { return this.codec; } public static DataResult filterForSerialization(Action action) { if (!action.isAllowedFromServer()) { return DataResult.error(() -> "Click event type not allowed: " + String.valueOf(action)); } return DataResult.success((Object)action, (Lifecycle)Lifecycle.stable()); } static { UNSAFE_CODEC = StringRepresentable.fromEnum(Action::values); CODEC = UNSAFE_CODEC.validate(Action::filterForSerialization); } } public record Custom(Identifier id, Optional payload) implements ClickEvent { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)Identifier.CODEC.fieldOf("id").forGetter(Custom::id), (App)ExtraCodecs.NBT.optionalFieldOf("payload").forGetter(Custom::payload)).apply((Applicative)i, Custom::new)); @Override public Action action() { return Action.CUSTOM; } } public record CopyToClipboard(String value) implements ClickEvent { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)Codec.STRING.fieldOf("value").forGetter(CopyToClipboard::value)).apply((Applicative)i, CopyToClipboard::new)); @Override public Action action() { return Action.COPY_TO_CLIPBOARD; } } public record ChangePage(int page) implements ClickEvent { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)ExtraCodecs.POSITIVE_INT.fieldOf("page").forGetter(ChangePage::page)).apply((Applicative)i, ChangePage::new)); @Override public Action action() { return Action.CHANGE_PAGE; } } public record ShowDialog(Holder dialog) implements ClickEvent { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)Dialog.CODEC.fieldOf("dialog").forGetter(ShowDialog::dialog)).apply((Applicative)i, ShowDialog::new)); @Override public Action action() { return Action.SHOW_DIALOG; } } public record SuggestCommand(String command) implements ClickEvent { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)ExtraCodecs.CHAT_STRING.fieldOf("command").forGetter(SuggestCommand::command)).apply((Applicative)i, SuggestCommand::new)); @Override public Action action() { return Action.SUGGEST_COMMAND; } } public record RunCommand(String command) implements ClickEvent { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)ExtraCodecs.CHAT_STRING.fieldOf("command").forGetter(RunCommand::command)).apply((Applicative)i, RunCommand::new)); @Override public Action action() { return Action.RUN_COMMAND; } } public record OpenFile(String path) implements ClickEvent { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)Codec.STRING.fieldOf("path").forGetter(OpenFile::path)).apply((Applicative)i, OpenFile::new)); public OpenFile(File file) { this(file.toString()); } public OpenFile(Path path) { this(path.toFile()); } public File file() { return new File(this.path); } @Override public Action action() { return Action.OPEN_FILE; } } public record OpenUrl(URI uri) implements ClickEvent { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)ExtraCodecs.UNTRUSTED_URI.fieldOf("url").forGetter(OpenUrl::uri)).apply((Applicative)i, OpenUrl::new)); @Override public Action action() { return Action.OPEN_URL; } } }