add PlaceholderAPI support to message action

This commit is contained in:
Pyrbu 2023-05-26 13:08:27 +01:00
parent ec9ee770a4
commit 4a4b384992
2 changed files with 18 additions and 14 deletions

@ -1,27 +1,32 @@
package lol.pyr.znpcsplus.interaction.message; package lol.pyr.znpcsplus.interaction.message;
import lol.pyr.znpcsplus.interaction.InteractionAction;
import lol.pyr.znpcsplus.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.interaction.InteractionAction;
import lol.pyr.znpcsplus.util.PapiUtil;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class MessageAction extends InteractionAction { public class MessageAction extends InteractionAction {
private final BukkitAudiences adventure; private final BukkitAudiences adventure;
private final Component message; private final String message;
private final LegacyComponentSerializer textSerializer;
public MessageAction(BukkitAudiences adventure, Component message, InteractionType interactionType, long delay) { public MessageAction(BukkitAudiences adventure, String message, InteractionType interactionType, LegacyComponentSerializer textSerializer, long delay) {
super(delay, interactionType); super(delay, interactionType);
this.adventure = adventure; this.adventure = adventure;
this.message = message; this.message = message;
this.textSerializer = textSerializer;
} }
@Override @Override
public void run(Player player) { public void run(Player player) {
adventure.player(player).sendMessage(message); String msg = message.replace("{player}", player.getName())
.replace("{uuid}", player.getUniqueId().toString());
adventure.player(player).sendMessage(textSerializer.deserialize(PapiUtil.set(player, msg)));
} }
public Component getMessage() { public String getMessage() {
return message; return message;
} }
} }

@ -2,15 +2,14 @@ package lol.pyr.znpcsplus.interaction.message;
import lol.pyr.director.adventure.command.CommandContext; import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.common.command.CommandExecutionException; import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.interaction.InteractionActionType; import lol.pyr.znpcsplus.interaction.InteractionActionType;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.npc.NpcEntryImpl; import lol.pyr.znpcsplus.npc.NpcEntryImpl;
import lol.pyr.znpcsplus.npc.NpcRegistryImpl; import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@ -31,14 +30,14 @@ public class MessageActionType implements InteractionActionType<MessageAction>,
@Override @Override
public String serialize(MessageAction obj) { public String serialize(MessageAction obj) {
return Base64.getEncoder().encodeToString(MiniMessage.miniMessage().serialize(obj.getMessage()).getBytes(StandardCharsets.UTF_8)) + ";" + obj.getCooldown(); return Base64.getEncoder().encodeToString(obj.getMessage().getBytes(StandardCharsets.UTF_8)) + ";" + obj.getCooldown();
} }
@Override @Override
public MessageAction deserialize(String str) { public MessageAction deserialize(String str) {
String[] split = str.split(";"); String[] split = str.split(";");
InteractionType type = split.length > 2 ? InteractionType.valueOf(split[2]) : InteractionType.ANY_CLICK; InteractionType type = split.length > 2 ? InteractionType.valueOf(split[2]) : InteractionType.ANY_CLICK;
return new MessageAction(adventure, MiniMessage.miniMessage().deserialize(new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8)), type, Long.parseLong(split[1])); return new MessageAction(adventure, new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, textSerializer, Long.parseLong(split[1]));
} }
@Override @Override
@ -53,13 +52,13 @@ public class MessageActionType implements InteractionActionType<MessageAction>,
@Override @Override
public void run(CommandContext context) throws CommandExecutionException { public void run(CommandContext context) throws CommandExecutionException {
context.setUsage(context.getUsage() + " consolecommand <id> <type> <cooldown seconds> <message>"); context.setUsage(context.getUsage() + " message <id> <type> <cooldown seconds> <message>");
NpcEntryImpl entry = context.parse(NpcEntryImpl.class); NpcEntryImpl entry = context.parse(NpcEntryImpl.class);
InteractionType type = context.parse(InteractionType.class); InteractionType type = context.parse(InteractionType.class);
long cooldown = (long) (context.parse(Double.class) * 1000D); long cooldown = (long) (context.parse(Double.class) * 1000D);
Component message = textSerializer.deserialize(context.dumpAllArgs()); String message = context.dumpAllArgs();
entry.getNpc().addAction(new MessageAction(adventure, message, type, cooldown)); entry.getNpc().addAction(new MessageAction(adventure, message, type, textSerializer, cooldown));
context.send(Component.text("Added a message action to the npc with the message ", NamedTextColor.GREEN).append(message)); context.send(Component.text("Added a message action to the npc with the message ", NamedTextColor.GREEN).append(Component.text(message)));
} }
@Override @Override