From baf6ea262252f55869092d1bb26939fa31445656 Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Wed, 26 Apr 2023 21:20:57 +0100 Subject: [PATCH] actions woo --- .../java/lol/pyr/znpcsplus/ZNPCsPlus.java | 4 ++++ .../pyr/znpcsplus/interaction/NPCAction.java | 4 +++- .../interaction/NPCActionDeserializer.java | 6 ++++++ .../znpcsplus/interaction/NPCActionType.java | 21 +++++++++++++++++++ .../types/ConsoleCommandAction.java | 19 +++++++++++++++++ .../interaction/types/MessageAction.java | 21 +++++++++++++++++++ .../types/PlayerCommandAction.java | 19 +++++++++++++++++ .../interaction/types/SwitchServerAction.java | 16 ++++++++++++++ .../lol/pyr/znpcsplus/util/StringUtils.java | 7 +++++++ 9 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java create mode 100644 src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java create mode 100644 src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java create mode 100644 src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java create mode 100644 src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java create mode 100644 src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java create mode 100644 src/main/java/lol/pyr/znpcsplus/util/StringUtils.java diff --git a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java b/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java index e77680a..92a58b0 100644 --- a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java +++ b/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java @@ -11,6 +11,8 @@ import lol.pyr.znpcsplus.config.Configs; import lol.pyr.znpcsplus.entity.EntityProperty; import lol.pyr.znpcsplus.entity.PacketLocation; import lol.pyr.znpcsplus.interaction.InteractionPacketListener; +import lol.pyr.znpcsplus.interaction.types.ConsoleCommandAction; +import lol.pyr.znpcsplus.interaction.types.MessageAction; import lol.pyr.znpcsplus.npc.NPC; import lol.pyr.znpcsplus.npc.NPCRegistry; import lol.pyr.znpcsplus.npc.NPCType; @@ -151,10 +153,12 @@ public class ZNPCsPlus extends JavaPlugin { } NPC npc = new NPC(world, NPCType.byName("player"), new PacketLocation(x * 3, 200, z * 3, 0, 0)); npc.setProperty(EntityProperty.SKIN, new FetchingDescriptor("jeb_")); + npc.addAction(new MessageAction(1000L, "Hi, I'm jeb!")); NPCRegistry.register("debug_npc" + (z * wrap + x), npc); x++; npc = new NPC(world, NPCType.byName("player"), new PacketLocation(x * 3, 200, z * 3, 0, 0)); npc.setProperty(EntityProperty.SKIN, new MirrorDescriptor()); + npc.addAction(new ConsoleCommandAction(1000L, "kick {player}")); NPCRegistry.register("debug_npc" + (z * wrap + x), npc); } } diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java b/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java index 0b25459..f498e36 100644 --- a/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java +++ b/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java @@ -7,10 +7,12 @@ import java.util.UUID; public abstract class NPCAction { private final UUID id; private final long delay; + protected final String argument; - protected NPCAction(long delay) { + protected NPCAction(long delay, String argument) { this.id = UUID.randomUUID(); this.delay = delay; + this.argument = argument; } public UUID getUuid() { diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java b/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java new file mode 100644 index 0000000..957ed09 --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java @@ -0,0 +1,6 @@ +package lol.pyr.znpcsplus.interaction; + +@FunctionalInterface +interface NPCActionDeserializer { + NPCAction deserialize(long delay, String argument); +} \ No newline at end of file diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java b/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java new file mode 100644 index 0000000..80d8d60 --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java @@ -0,0 +1,21 @@ +package lol.pyr.znpcsplus.interaction; + +import lol.pyr.znpcsplus.interaction.types.*; + +public enum NPCActionType implements NPCActionDeserializer { + CONSOLE_CMD(ConsoleCommandAction::new), + MESSAGE(MessageAction::new), + PLAYER_CMD(PlayerCommandAction::new), + SERVER(SwitchServerAction::new); + + private final NPCActionDeserializer deserializer; + + NPCActionType(NPCActionDeserializer deserializer) { + this.deserializer = deserializer; + } + + @Override + public NPCAction deserialize(long delay, String str) { + return deserializer.deserialize(delay, str); + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java b/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java new file mode 100644 index 0000000..66eaf34 --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java @@ -0,0 +1,19 @@ +package lol.pyr.znpcsplus.interaction.types; + +import lol.pyr.znpcsplus.ZNPCsPlus; +import lol.pyr.znpcsplus.interaction.NPCAction; +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class ConsoleCommandAction extends NPCAction { + public ConsoleCommandAction(long delay, String argument) { + super(delay, argument); + } + + @Override + public void run(Player player) { + String cmd = argument.replace("{player}", player.getName()).replace("{uuid}", player.getUniqueId().toString()); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), ZNPCsPlus.PLACEHOLDERS_SUPPORTED ? PlaceholderAPI.setPlaceholders(player, cmd) : cmd); + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java b/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java new file mode 100644 index 0000000..93860a4 --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java @@ -0,0 +1,21 @@ +package lol.pyr.znpcsplus.interaction.types; + +import lol.pyr.znpcsplus.ZNPCsPlus; +import lol.pyr.znpcsplus.interaction.NPCAction; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.entity.Player; + +public class MessageAction extends NPCAction { + private final Component message; + + public MessageAction(long delay, String argument) { + super(delay, argument); + message = MiniMessage.miniMessage().deserialize(argument); + } + + @Override + public void run(Player player) { + ZNPCsPlus.ADVENTURE.player(player).sendMessage(message); + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java b/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java new file mode 100644 index 0000000..85ad43c --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java @@ -0,0 +1,19 @@ +package lol.pyr.znpcsplus.interaction.types; + +import lol.pyr.znpcsplus.ZNPCsPlus; +import lol.pyr.znpcsplus.interaction.NPCAction; +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class PlayerCommandAction extends NPCAction { + public PlayerCommandAction(long delay, String argument) { + super(delay, argument); + } + + @Override + public void run(Player player) { + String cmd = argument.replace("{player}", player.getName()).replace("{uuid}", player.getUniqueId().toString()); + Bukkit.dispatchCommand(player, ZNPCsPlus.PLACEHOLDERS_SUPPORTED ? PlaceholderAPI.setPlaceholders(player, cmd) : cmd); + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java b/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java new file mode 100644 index 0000000..b814e10 --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java @@ -0,0 +1,16 @@ +package lol.pyr.znpcsplus.interaction.types; + +import lol.pyr.znpcsplus.ZNPCsPlus; +import lol.pyr.znpcsplus.interaction.NPCAction; +import org.bukkit.entity.Player; + +public class SwitchServerAction extends NPCAction { + public SwitchServerAction(long delay, String argument) { + super(delay, argument); + } + + @Override + public void run(Player player) { + ZNPCsPlus.BUNGEE_UTILS.sendPlayerToServer(player, argument); + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java b/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java new file mode 100644 index 0000000..22b211e --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java @@ -0,0 +1,7 @@ +package lol.pyr.znpcsplus.util; + +public class StringUtils { + public static boolean startsWithIgnoreCase(String s1, String s2) { + return s1.toLowerCase().startsWith(s2.toLowerCase()); + } +}