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;
import lol.pyr.znpcsplus.interaction.InteractionAction;
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.text.Component;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player;
public class MessageAction extends InteractionAction {
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);
this.adventure = adventure;
this.message = message;
this.textSerializer = textSerializer;
}
@Override
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;
}
}

@ -2,15 +2,14 @@ package lol.pyr.znpcsplus.interaction.message;
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.InteractionActionType;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import java.nio.charset.StandardCharsets;
@ -31,14 +30,14 @@ public class MessageActionType implements InteractionActionType<MessageAction>,
@Override
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
public MessageAction deserialize(String str) {
String[] split = str.split(";");
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
@ -53,13 +52,13 @@ public class MessageActionType implements InteractionActionType<MessageAction>,
@Override
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);
InteractionType type = context.parse(InteractionType.class);
long cooldown = (long) (context.parse(Double.class) * 1000D);
Component message = textSerializer.deserialize(context.dumpAllArgs());
entry.getNpc().addAction(new MessageAction(adventure, message, type, cooldown));
context.send(Component.text("Added a message action to the npc with the message ", NamedTextColor.GREEN).append(message));
String message = context.dumpAllArgs();
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(Component.text(message)));
}
@Override