From b8da4d82eb769c2319399a458d5fc7913fb576b9 Mon Sep 17 00:00:00 2001 From: D3v1s0m Date: Mon, 3 Jun 2024 11:08:08 +0530 Subject: [PATCH] added command import from citizens --- .../conversion/citizens/CitizensImporter.java | 2 +- .../model/CitizensTraitsRegistry.java | 4 +- .../citizens/model/traits/CommandTrait.java | 69 +++++++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/traits/CommandTrait.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/CitizensImporter.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/CitizensImporter.java index 8a05461..9758497 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/CitizensImporter.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/CitizensImporter.java @@ -52,7 +52,7 @@ public class CitizensImporter implements DataImporter { this.propertyRegistry = propertyRegistry; this.skinCache = skinCache; this.dataFile = dataFile; - this.traitsRegistry = new CitizensTraitsRegistry(typeRegistry, propertyRegistry, skinCache); + this.traitsRegistry = new CitizensTraitsRegistry(typeRegistry, propertyRegistry, skinCache, taskScheduler); this.npcRegistry = npcRegistry; } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/CitizensTraitsRegistry.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/CitizensTraitsRegistry.java index ba3ba89..bd12de5 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/CitizensTraitsRegistry.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/CitizensTraitsRegistry.java @@ -3,6 +3,7 @@ package lol.pyr.znpcsplus.conversion.citizens.model; import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry; import lol.pyr.znpcsplus.api.npc.NpcTypeRegistry; import lol.pyr.znpcsplus.conversion.citizens.model.traits.*; +import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.skin.cache.MojangSkinCache; import java.util.HashMap; @@ -10,7 +11,7 @@ import java.util.HashMap; public class CitizensTraitsRegistry { private final HashMap traitMap = new HashMap<>(); - public CitizensTraitsRegistry(NpcTypeRegistry typeRegistry, EntityPropertyRegistry propertyRegistry, MojangSkinCache skinCache) { + public CitizensTraitsRegistry(NpcTypeRegistry typeRegistry, EntityPropertyRegistry propertyRegistry, MojangSkinCache skinCache, TaskScheduler taskScheduler) { register(new LocationTrait()); register(new TypeTrait(typeRegistry)); register(new ProfessionTrait(propertyRegistry)); @@ -19,6 +20,7 @@ public class CitizensTraitsRegistry { register(new MirrorTrait(propertyRegistry, skinCache)); register(new SkinLayersTrait(propertyRegistry)); register(new LookTrait(propertyRegistry)); + register(new CommandTrait(taskScheduler)); } public CitizensTrait getByName(String name) { diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/traits/CommandTrait.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/traits/CommandTrait.java new file mode 100644 index 0000000..08c2ee0 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/traits/CommandTrait.java @@ -0,0 +1,69 @@ +package lol.pyr.znpcsplus.conversion.citizens.model.traits; + +import lol.pyr.znpcsplus.api.interaction.InteractionType; +import lol.pyr.znpcsplus.conversion.citizens.model.SectionCitizensTrait; +import lol.pyr.znpcsplus.interaction.InteractionActionImpl; +import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandAction; +import lol.pyr.znpcsplus.interaction.playercommand.PlayerCommandAction; +import lol.pyr.znpcsplus.npc.NpcImpl; +import lol.pyr.znpcsplus.scheduling.TaskScheduler; +import org.bukkit.configuration.ConfigurationSection; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +public class CommandTrait extends SectionCitizensTrait { + private final TaskScheduler scheduler; + + public CommandTrait(TaskScheduler scheduler) { + super("commandtrait"); + this.scheduler = scheduler; + } + + @Override + public @NotNull NpcImpl apply(NpcImpl npc, ConfigurationSection section) { + ConfigurationSection commands = section.getConfigurationSection("commands"); + if (commands != null) { + Set keys = commands.getKeys(false); + if (keys != null) { + for (String key : keys) { + ConfigurationSection commandSection = commands.getConfigurationSection(key); + String command = commandSection.getString("command"); + String hand = commandSection.getString("hand", "BOTH"); + InteractionType clickType = wrapClickType(hand); + boolean isPlayerCommand = commandSection.getBoolean("player", true); + int cooldown = commandSection.getInt("cooldown", 0); + int delay = commandSection.getInt("delay", 0); + if (command != null) { + InteractionActionImpl action; + if (isPlayerCommand) { + action = new PlayerCommandAction(scheduler, command, clickType, cooldown, delay); + } else { + action = new ConsoleCommandAction(scheduler, command, clickType, cooldown, delay); + } + npc.addAction(action); + } + } + } + } + return npc; + } + + private InteractionType wrapClickType(String hand) { + if (hand == null) { + return InteractionType.ANY_CLICK; + } + switch (hand) { + case "RIGHT": + case "SHIFT_RIGHT": + return InteractionType.RIGHT_CLICK; + case "LEFT": + case "SHIFT_LEFT": + return InteractionType.LEFT_CLICK; + case "BOTH": + return InteractionType.ANY_CLICK; + } + throw new IllegalStateException(); + } + +}