minecraft-src/net/minecraft/network/chat/ClickEvent.java
2025-07-04 01:41:11 +03:00

96 lines
2.9 KiB
Java

package net.minecraft.network.chat;
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 net.minecraft.util.StringRepresentable;
public class ClickEvent {
public static final Codec<ClickEvent> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
ClickEvent.Action.CODEC.forGetter(clickEvent -> clickEvent.action), Codec.STRING.fieldOf("value").forGetter(clickEvent -> clickEvent.value)
)
.apply(instance, ClickEvent::new)
);
private final ClickEvent.Action action;
private final String value;
public ClickEvent(ClickEvent.Action action, String value) {
this.action = action;
this.value = value;
}
/**
* Gets the action to perform when this event is raised.
*/
public ClickEvent.Action getAction() {
return this.action;
}
/**
* Gets the value to perform the action on when this event is raised. For example, if the action is "open URL", this would be the URL to open.
*/
public String getValue() {
return this.value;
}
public boolean equals(Object object) {
if (this == object) {
return true;
} else if (object != null && this.getClass() == object.getClass()) {
ClickEvent clickEvent = (ClickEvent)object;
return this.action == clickEvent.action && this.value.equals(clickEvent.value);
} else {
return false;
}
}
public String toString() {
return "ClickEvent{action=" + this.action + ", value='" + this.value + "'}";
}
public int hashCode() {
int i = this.action.hashCode();
return 31 * i + this.value.hashCode();
}
public static enum Action implements StringRepresentable {
OPEN_URL("open_url", true),
OPEN_FILE("open_file", false),
RUN_COMMAND("run_command", true),
SUGGEST_COMMAND("suggest_command", true),
CHANGE_PAGE("change_page", true),
COPY_TO_CLIPBOARD("copy_to_clipboard", true);
public static final MapCodec<ClickEvent.Action> UNSAFE_CODEC = StringRepresentable.fromEnum(ClickEvent.Action::values).fieldOf("action");
public static final MapCodec<ClickEvent.Action> CODEC = UNSAFE_CODEC.validate(ClickEvent.Action::filterForSerialization);
private final boolean allowFromServer;
/**
* The canonical name used to refer to this action.
*/
private final String name;
private Action(final String name, final boolean allowFromServer) {
this.name = name;
this.allowFromServer = allowFromServer;
}
/**
* Indicates whether this event can be run from chat text.
*/
public boolean isAllowedFromServer() {
return this.allowFromServer;
}
@Override
public String getSerializedName() {
return this.name;
}
public static DataResult<ClickEvent.Action> filterForSerialization(ClickEvent.Action action) {
return !action.isAllowedFromServer() ? DataResult.error(() -> "Action not allowed: " + action) : DataResult.success(action, Lifecycle.stable());
}
}
}