diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/ZNpcImporter.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/ZNpcImporter.java index d6b039d..3df75d0 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/ZNpcImporter.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/ZNpcImporter.java @@ -8,9 +8,7 @@ import lol.pyr.znpcsplus.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.skin.SkinDescriptor; import lol.pyr.znpcsplus.config.ConfigManager; import lol.pyr.znpcsplus.conversion.DataImporter; -import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsAction; -import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsLocation; -import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsModel; +import lol.pyr.znpcsplus.conversion.znpcs.model.*; import lol.pyr.znpcsplus.entity.EntityPropertyImpl; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.hologram.HologramImpl; @@ -56,6 +54,7 @@ public class ZNpcImporter implements DataImporter { private final EntityPropertyRegistryImpl propertyRegistry; private final MojangSkinCache skinCache; private final File dataFile; + private final File conversationFile; private final Gson gson; private final BungeeConnector bungeeConnector; @@ -72,6 +71,7 @@ public class ZNpcImporter implements DataImporter { this.propertyRegistry = propertyRegistry; this.skinCache = skinCache; this.dataFile = dataFile; + this.conversationFile = new File(dataFile.getParentFile(), "conversations.json"); this.bungeeConnector = bungeeConnector; gson = new GsonBuilder() .create(); @@ -88,6 +88,19 @@ public class ZNpcImporter implements DataImporter { return Collections.emptyList(); } if (models == null) return Collections.emptyList(); + + + ZnpcsConversations[] conversations; + try (BufferedReader fileReader = Files.newBufferedReader(conversationFile.toPath())) { + JsonElement element = JsonParser.parseReader(fileReader); + conversations = gson.fromJson(element, ZnpcsConversations[].class); + } catch (IOException e) { + e.printStackTrace(); + return Collections.emptyList(); + } + if (conversations == null) return Collections.emptyList(); + + ArrayList entries = new ArrayList<>(models.length); for (ZNpcsModel model : models) { String type = model.getNpcType(); @@ -107,6 +120,41 @@ public class ZNpcImporter implements DataImporter { NpcImpl npc = new NpcImpl(uuid, propertyRegistry, configManager, packetFactory, textSerializer, oldLoc.getWorld(), typeRegistry.getByName(type), location); npc.getType().applyDefaultProperties(npc); + + // Convert the conversations from each NPC + ZNpcsConversation conversation = model.getConversation(); + if (conversation != null) { + + // Loop through all conversations in the conversations.json file + for (ZnpcsConversations conv : conversations) { + + // If the conversation name matches the conversation name in the data.json file, proceed + if (conv.getName().equalsIgnoreCase(conversation.getConversationName())) { + + int totalDelay = 0; + + // Loop through all texts in the conversation + for(ZNpcsConversationText text : conv.getTexts()) { + + // Add the delay in ticks to the total delay + totalDelay += text.getDelay() * 20; + + // Get the lines of text from the conversation + String[] lines = text.getLines(); + + // Loop through all lines of text + for (String line : lines) { + + // Create a new message action for each line of text + InteractionActionImpl action = new MessageAction(adventure, line, InteractionType.ANY_CLICK, textSerializer, 0, totalDelay); + npc.addAction(action); + } + } + } + } + } + + HologramImpl hologram = npc.getHologram(); hologram.setOffset(model.getHologramHeight()); for (String raw : model.getHologramLines()) { diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsConversation.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsConversation.java new file mode 100644 index 0000000..eb80d28 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsConversation.java @@ -0,0 +1,16 @@ +package lol.pyr.znpcsplus.conversion.znpcs.model; + +@SuppressWarnings("unused") +public class ZNpcsConversation { + + private String conversationName; + private String conversationType; + + public String getConversationName() { + return conversationName; + } + + public String getConversationType() { + return conversationType; + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsConversationText.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsConversationText.java new file mode 100644 index 0000000..e9a85b5 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsConversationText.java @@ -0,0 +1,19 @@ +package lol.pyr.znpcsplus.conversion.znpcs.model; + +@SuppressWarnings("unused") +public class ZNpcsConversationText { + + private String[] lines; + private ZNpcsAction[] actions; + private int delay; + + public String[] getLines() { + return lines; + } + public ZNpcsAction[] getActions() { + return actions; + } + public int getDelay() { + return delay; + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsModel.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsModel.java index b46488b..67ecfa0 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsModel.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZNpcsModel.java @@ -14,6 +14,8 @@ public class ZNpcsModel { private String signature; private String glowName; + + private ZNpcsConversation conversation; private ZNpcsLocation location; private String npcType; private List hologramLines; @@ -39,6 +41,10 @@ public class ZNpcsModel { return skinName; } + public ZNpcsConversation getConversation() { + return conversation; + } + public ZNpcsLocation getLocation() { return location; } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZnpcsConversations.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZnpcsConversations.java new file mode 100644 index 0000000..49cd913 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/model/ZnpcsConversations.java @@ -0,0 +1,23 @@ +package lol.pyr.znpcsplus.conversion.znpcs.model; + +@SuppressWarnings("unused") +public class ZnpcsConversations { + + private String name; + private ZNpcsConversationText[] texts; + private int radius; + private int delay; + + public String getName() { + return name; + } + public ZNpcsConversationText[] getTexts() { + return texts; + } + public int getRadius() { + return radius; + } + public int getDelay() { + return delay; + } +}