diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/playerchat/PlayerChatAction.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/playerchat/PlayerChatAction.java new file mode 100644 index 0000000..f2aa063 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/playerchat/PlayerChatAction.java @@ -0,0 +1,24 @@ +package lol.pyr.znpcsplus.interaction.playerchat; + +import lol.pyr.znpcsplus.api.interaction.InteractionType; +import lol.pyr.znpcsplus.interaction.InteractionAction; +import org.bukkit.entity.Player; + +public class PlayerChatAction extends InteractionAction { + private final String message; + + public PlayerChatAction(String message, InteractionType interactionType, long delay) { + super(delay, interactionType); + this.message = message; + } + + @Override + public void run(Player player) { + player.chat(message.replace("{player}", player.getName()) + .replace("{uuid}", player.getUniqueId().toString())); + } + + public String getMessage() { + return message; + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/playerchat/PlayerChatActionType.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/playerchat/PlayerChatActionType.java new file mode 100644 index 0000000..4d1853d --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/playerchat/PlayerChatActionType.java @@ -0,0 +1,60 @@ +package lol.pyr.znpcsplus.interaction.playerchat; + +import lol.pyr.director.adventure.command.CommandContext; +import lol.pyr.director.common.command.CommandExecutionException; +import lol.pyr.znpcsplus.api.interaction.InteractionType; +import lol.pyr.znpcsplus.interaction.InteractionAction; +import lol.pyr.znpcsplus.interaction.InteractionActionType; +import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Collections; +import java.util.List; + +public class PlayerChatActionType implements InteractionActionType, InteractionCommandHandler { + + public PlayerChatActionType() { + } + + @Override + public String serialize(PlayerChatAction obj) { + return Base64.getEncoder().encodeToString(obj.getMessage().getBytes(StandardCharsets.UTF_8)) + ";" + obj.getCooldown() + ";" + obj.getInteractionType().name(); + } + + @Override + public PlayerChatAction deserialize(String str) { + String[] split = str.split(";"); + return new PlayerChatAction(new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), InteractionType.valueOf(split[2]), Long.parseLong(split[1])); + } + + @Override + public Class getActionClass() { + return PlayerChatAction.class; + } + + @Override + public String getSubcommandName() { + return "playerchat"; + } + + @Override + public void appendUsage(CommandContext context) { + context.setUsage(context.getUsage() + " " + getSubcommandName() + " "); + } + + @Override + public InteractionAction parse(CommandContext context) throws CommandExecutionException { + InteractionType type = context.parse(InteractionType.class); + long cooldown = (long) (context.parse(Double.class) * 1000D); + String message = context.dumpAllArgs(); + return new PlayerChatAction(message, type, cooldown); + } + + @Override + public List suggest(CommandContext context) throws CommandExecutionException { + if (context.argSize() == 1) return context.suggestEnum(InteractionType.values()); + if (context.argSize() == 2) return context.suggestLiteral("1"); + return Collections.emptyList(); + } +}