add player chat action

This commit is contained in:
Pyrbu 2023-05-29 21:11:01 +01:00
parent cd2cdd6869
commit 0a6f599ece
2 changed files with 84 additions and 0 deletions

@ -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;
}
}

@ -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<PlayerChatAction>, 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<PlayerChatAction> getActionClass() {
return PlayerChatAction.class;
}
@Override
public String getSubcommandName() {
return "playerchat";
}
@Override
public void appendUsage(CommandContext context) {
context.setUsage(context.getUsage() + " " + getSubcommandName() + " <id> <click type> <cooldown seconds> <server>");
}
@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<String> 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();
}
}