Use Adventure in ArgumentComponent and add demo echo command

This commit is contained in:
Kieran Wallbanks 2021-03-24 12:14:31 +00:00
parent 218b443a16
commit e738efded3
2 changed files with 29 additions and 4 deletions

View File

@ -1,14 +1,15 @@
package net.minestom.server.command.builder.arguments.minecraft;
import com.google.gson.JsonParseException;
import net.minestom.server.chat.JsonMessage;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.minestom.server.command.builder.NodeMaker;
import net.minestom.server.command.builder.arguments.Argument;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
import org.jetbrains.annotations.NotNull;
public class ArgumentComponent extends Argument<JsonMessage> {
public class ArgumentComponent extends Argument<Component> {
public static final int INVALID_JSON_ERROR = 1;
@ -18,9 +19,9 @@ public class ArgumentComponent extends Argument<JsonMessage> {
@NotNull
@Override
public JsonMessage parse(@NotNull String input) throws ArgumentSyntaxException {
public Component parse(@NotNull String input) throws ArgumentSyntaxException {
try {
return new JsonMessage.RawJsonMessage(input);
return GsonComponentSerializer.gson().deserialize(input);
} catch (JsonParseException e) {
throw new ArgumentSyntaxException("Invalid JSON", input, INVALID_JSON_ERROR);
}

View File

@ -0,0 +1,24 @@
package demo.commands;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.arguments.minecraft.ArgumentComponent;
public class EchoCommand extends Command {
public EchoCommand() {
super("echo");
this.setDefaultExecutor((sender, context) -> sender.sendMessage(
Component.text("Usage: /echo <json>")
.hoverEvent(Component.text("Click to get this command.")
.clickEvent(ClickEvent.suggestCommand("/echo ")))));
ArgumentComponent json = ArgumentType.Component("json");
this.addSyntax((sender, context) -> {
sender.sendMessage(context.get(json));
}, json);
}
}