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 9758497..57fede4 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, taskScheduler); + this.traitsRegistry = new CitizensTraitsRegistry(typeRegistry, propertyRegistry, skinCache, taskScheduler, textSerializer); this.npcRegistry = npcRegistry; } @@ -83,7 +83,6 @@ public class CitizensImporter implements DataImporter { NpcImpl npc = new NpcImpl(uuid, propertyRegistry, configManager, packetFactory, textSerializer, world, typeRegistry.getByName("armor_stand"), new NpcLocation(0, 0, 0, 0, 0)); npc.getType().applyDefaultProperties(npc); - npc.getHologram().addTextLineComponent(textSerializer.deserialize(name)); ConfigurationSection traits = npcSection.getConfigurationSection("traits"); if (traits != null) { for (String traitName : traits.getKeys(false)) { 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 bd12de5..2f25cd6 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 @@ -5,13 +5,14 @@ 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 net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import java.util.HashMap; public class CitizensTraitsRegistry { private final HashMap traitMap = new HashMap<>(); - public CitizensTraitsRegistry(NpcTypeRegistry typeRegistry, EntityPropertyRegistry propertyRegistry, MojangSkinCache skinCache, TaskScheduler taskScheduler) { + public CitizensTraitsRegistry(NpcTypeRegistry typeRegistry, EntityPropertyRegistry propertyRegistry, MojangSkinCache skinCache, TaskScheduler taskScheduler, LegacyComponentSerializer textSerializer) { register(new LocationTrait()); register(new TypeTrait(typeRegistry)); register(new ProfessionTrait(propertyRegistry)); @@ -21,6 +22,7 @@ public class CitizensTraitsRegistry { register(new SkinLayersTrait(propertyRegistry)); register(new LookTrait(propertyRegistry)); register(new CommandTrait(taskScheduler)); + register(new HologramTrait(textSerializer)); } public CitizensTrait getByName(String name) { diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/traits/HologramTrait.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/traits/HologramTrait.java new file mode 100644 index 0000000..670e48a --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/model/traits/HologramTrait.java @@ -0,0 +1,36 @@ +package lol.pyr.znpcsplus.conversion.citizens.model.traits; + +import lol.pyr.znpcsplus.conversion.citizens.model.SectionCitizensTrait; +import lol.pyr.znpcsplus.npc.NpcImpl; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.configuration.ConfigurationSection; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +public class HologramTrait extends SectionCitizensTrait { + private final LegacyComponentSerializer textSerializer; + + public HologramTrait(LegacyComponentSerializer textSerializer) { + super("hologramtrait"); + this.textSerializer = textSerializer; + } + + @Override + public @NotNull NpcImpl apply(NpcImpl npc, ConfigurationSection section) { + ConfigurationSection linesSection = section.getConfigurationSection("lines"); + if (linesSection != null) { + List keys = new ArrayList<>(linesSection.getKeys(false)); + for (int i = keys.size() - 1; i >= 0; i--) { + String line = linesSection.getConfigurationSection(keys.get(i)).getString("text"); + if (line != null) { + Component component = textSerializer.deserialize(line); + npc.getHologram().addTextLineComponent(component); + } + } + } + return npc; + } +}