add equipment and skin support to znpcs importer
This commit is contained in:
		
							parent
							
								
									1925eb0e95
								
							
						
					
					
						commit
						7eb9a5a9e0
					
				
					 3 changed files with 36 additions and 6 deletions
				
			
		| 
						 | 
					@ -118,7 +118,8 @@ public class ZNpcsPlus extends JavaPlugin {
 | 
				
			||||||
                scheduler, typeRegistry, propertyRegistry, textSerializer);
 | 
					                scheduler, typeRegistry, propertyRegistry, textSerializer);
 | 
				
			||||||
        UserManager userManager = new UserManager();
 | 
					        UserManager userManager = new UserManager();
 | 
				
			||||||
        DataImporterRegistry importerRegistry = new DataImporterRegistry(configManager, adventure, bungeeConnector,
 | 
					        DataImporterRegistry importerRegistry = new DataImporterRegistry(configManager, adventure, bungeeConnector,
 | 
				
			||||||
                scheduler, packetFactory, textSerializer, typeRegistry, getDataFolder().getParentFile());
 | 
					                scheduler, packetFactory, textSerializer, typeRegistry, getDataFolder().getParentFile(),
 | 
				
			||||||
 | 
					                propertyRegistry, skinCache);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        log(ChatColor.WHITE + " * Registerring components...");
 | 
					        log(ChatColor.WHITE + " * Registerring components...");
 | 
				
			||||||
        typeRegistry.registerDefault(packetEvents, propertyRegistry);
 | 
					        typeRegistry.registerDefault(packetEvents, propertyRegistry);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,9 +2,11 @@ package lol.pyr.znpcsplus.conversion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import lol.pyr.znpcsplus.config.ConfigManager;
 | 
					import lol.pyr.znpcsplus.config.ConfigManager;
 | 
				
			||||||
import lol.pyr.znpcsplus.conversion.znpcs.ZNpcImporter;
 | 
					import lol.pyr.znpcsplus.conversion.znpcs.ZNpcImporter;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
 | 
				
			||||||
import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
 | 
					import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
 | 
				
			||||||
import lol.pyr.znpcsplus.packets.PacketFactory;
 | 
					import lol.pyr.znpcsplus.packets.PacketFactory;
 | 
				
			||||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
 | 
					import lol.pyr.znpcsplus.scheduling.TaskScheduler;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.skin.cache.SkinCache;
 | 
				
			||||||
import lol.pyr.znpcsplus.util.BungeeConnector;
 | 
					import lol.pyr.znpcsplus.util.BungeeConnector;
 | 
				
			||||||
import lol.pyr.znpcsplus.util.LazyLoader;
 | 
					import lol.pyr.znpcsplus.util.LazyLoader;
 | 
				
			||||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
 | 
					import net.kyori.adventure.platform.bukkit.BukkitAudiences;
 | 
				
			||||||
| 
						 | 
					@ -21,10 +23,11 @@ public class DataImporterRegistry {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public DataImporterRegistry(ConfigManager configManager, BukkitAudiences adventure, BungeeConnector bungeeConnector,
 | 
					    public DataImporterRegistry(ConfigManager configManager, BukkitAudiences adventure, BungeeConnector bungeeConnector,
 | 
				
			||||||
                                TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer,
 | 
					                                TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer,
 | 
				
			||||||
                                NpcTypeRegistryImpl typeRegistry, File pluginsFolder) {
 | 
					                                NpcTypeRegistryImpl typeRegistry, File pluginsFolder, EntityPropertyRegistryImpl propertyRegistry,
 | 
				
			||||||
 | 
					                                SkinCache skinCache) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        register("znpcs", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, bungeeConnector, taskScheduler,
 | 
					        register("znpcs", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, bungeeConnector, taskScheduler,
 | 
				
			||||||
                packetFactory, textSerializer, typeRegistry, new File(pluginsFolder, "ServersNPC/data.json"))));
 | 
					                packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "ServersNPC/data.json"))));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void register(String id, LazyLoader<DataImporter> loader) {
 | 
					    private void register(String id, LazyLoader<DataImporter> loader) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,15 +1,21 @@
 | 
				
			||||||
package lol.pyr.znpcsplus.conversion.znpcs;
 | 
					package lol.pyr.znpcsplus.conversion.znpcs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.github.retrooper.packetevents.protocol.item.ItemStack;
 | 
				
			||||||
import com.google.gson.Gson;
 | 
					import com.google.gson.Gson;
 | 
				
			||||||
import com.google.gson.GsonBuilder;
 | 
					import com.google.gson.GsonBuilder;
 | 
				
			||||||
import com.google.gson.JsonElement;
 | 
					import com.google.gson.JsonElement;
 | 
				
			||||||
import com.google.gson.JsonParser;
 | 
					import com.google.gson.JsonParser;
 | 
				
			||||||
 | 
					import io.github.retrooper.packetevents.util.SpigotConversionUtil;
 | 
				
			||||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
 | 
					import lol.pyr.znpcsplus.api.interaction.InteractionType;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
 | 
				
			||||||
import lol.pyr.znpcsplus.config.ConfigManager;
 | 
					import lol.pyr.znpcsplus.config.ConfigManager;
 | 
				
			||||||
import lol.pyr.znpcsplus.conversion.DataImporter;
 | 
					import lol.pyr.znpcsplus.conversion.DataImporter;
 | 
				
			||||||
import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsAction;
 | 
					import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsAction;
 | 
				
			||||||
import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsLocation;
 | 
					import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsLocation;
 | 
				
			||||||
import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsModel;
 | 
					import lol.pyr.znpcsplus.conversion.znpcs.model.ZNpcsModel;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.hologram.HologramImpl;
 | 
				
			||||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
 | 
					import lol.pyr.znpcsplus.interaction.InteractionAction;
 | 
				
			||||||
import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandAction;
 | 
					import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandAction;
 | 
				
			||||||
import lol.pyr.znpcsplus.interaction.message.MessageAction;
 | 
					import lol.pyr.znpcsplus.interaction.message.MessageAction;
 | 
				
			||||||
| 
						 | 
					@ -21,7 +27,10 @@ import lol.pyr.znpcsplus.npc.NpcImpl;
 | 
				
			||||||
import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
 | 
					import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
 | 
				
			||||||
import lol.pyr.znpcsplus.packets.PacketFactory;
 | 
					import lol.pyr.znpcsplus.packets.PacketFactory;
 | 
				
			||||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
 | 
					import lol.pyr.znpcsplus.scheduling.TaskScheduler;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.skin.cache.SkinCache;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor;
 | 
				
			||||||
import lol.pyr.znpcsplus.util.BungeeConnector;
 | 
					import lol.pyr.znpcsplus.util.BungeeConnector;
 | 
				
			||||||
 | 
					import lol.pyr.znpcsplus.util.ItemSerializationUtil;
 | 
				
			||||||
import lol.pyr.znpcsplus.util.NpcLocation;
 | 
					import lol.pyr.znpcsplus.util.NpcLocation;
 | 
				
			||||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
 | 
					import net.kyori.adventure.platform.bukkit.BukkitAudiences;
 | 
				
			||||||
import net.kyori.adventure.text.Component;
 | 
					import net.kyori.adventure.text.Component;
 | 
				
			||||||
| 
						 | 
					@ -34,6 +43,7 @@ import java.nio.file.Files;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ZNpcImporter implements DataImporter {
 | 
					public class ZNpcImporter implements DataImporter {
 | 
				
			||||||
    private final ConfigManager configManager;
 | 
					    private final ConfigManager configManager;
 | 
				
			||||||
| 
						 | 
					@ -43,12 +53,14 @@ public class ZNpcImporter implements DataImporter {
 | 
				
			||||||
    private final PacketFactory packetFactory;
 | 
					    private final PacketFactory packetFactory;
 | 
				
			||||||
    private final LegacyComponentSerializer textSerializer;
 | 
					    private final LegacyComponentSerializer textSerializer;
 | 
				
			||||||
    private final NpcTypeRegistryImpl typeRegistry;
 | 
					    private final NpcTypeRegistryImpl typeRegistry;
 | 
				
			||||||
 | 
					    private final EntityPropertyRegistryImpl propertyRegistry;
 | 
				
			||||||
 | 
					    private final SkinCache skinCache;
 | 
				
			||||||
    private final File dataFile;
 | 
					    private final File dataFile;
 | 
				
			||||||
    private final Gson gson;
 | 
					    private final Gson gson;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ZNpcImporter(ConfigManager configManager, BukkitAudiences adventure, BungeeConnector bungeeConnector,
 | 
					    public ZNpcImporter(ConfigManager configManager, BukkitAudiences adventure, BungeeConnector bungeeConnector,
 | 
				
			||||||
                        TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer,
 | 
					                        TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer,
 | 
				
			||||||
                        NpcTypeRegistryImpl typeRegistry, File dataFile) {
 | 
					                        NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, SkinCache skinCache, File dataFile) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.configManager = configManager;
 | 
					        this.configManager = configManager;
 | 
				
			||||||
        this.adventure = adventure;
 | 
					        this.adventure = adventure;
 | 
				
			||||||
| 
						 | 
					@ -57,6 +69,8 @@ public class ZNpcImporter implements DataImporter {
 | 
				
			||||||
        this.packetFactory = packetFactory;
 | 
					        this.packetFactory = packetFactory;
 | 
				
			||||||
        this.textSerializer = textSerializer;
 | 
					        this.textSerializer = textSerializer;
 | 
				
			||||||
        this.typeRegistry = typeRegistry;
 | 
					        this.typeRegistry = typeRegistry;
 | 
				
			||||||
 | 
					        this.propertyRegistry = propertyRegistry;
 | 
				
			||||||
 | 
					        this.skinCache = skinCache;
 | 
				
			||||||
        this.dataFile = dataFile;
 | 
					        this.dataFile = dataFile;
 | 
				
			||||||
        gson = new GsonBuilder()
 | 
					        gson = new GsonBuilder()
 | 
				
			||||||
                .create();
 | 
					                .create();
 | 
				
			||||||
| 
						 | 
					@ -73,7 +87,7 @@ public class ZNpcImporter implements DataImporter {
 | 
				
			||||||
            return Collections.emptyList();
 | 
					            return Collections.emptyList();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (models == null) return Collections.emptyList();
 | 
					        if (models == null) return Collections.emptyList();
 | 
				
			||||||
        ArrayList<NpcEntryImpl> entries = new ArrayList<>();
 | 
					        ArrayList<NpcEntryImpl> entries = new ArrayList<>(models.length);
 | 
				
			||||||
        for (ZNpcsModel model : models) {
 | 
					        for (ZNpcsModel model : models) {
 | 
				
			||||||
            String type = model.getNpcType();
 | 
					            String type = model.getNpcType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,9 +104,11 @@ public class ZNpcImporter implements DataImporter {
 | 
				
			||||||
            NpcLocation location = new NpcLocation(oldLoc.getX(), oldLoc.getY(), oldLoc.getZ(), oldLoc.getYaw(), oldLoc.getPitch());
 | 
					            NpcLocation location = new NpcLocation(oldLoc.getX(), oldLoc.getY(), oldLoc.getZ(), oldLoc.getYaw(), oldLoc.getPitch());
 | 
				
			||||||
            NpcImpl npc = new NpcImpl(configManager, packetFactory, textSerializer, oldLoc.getWorld(), typeRegistry.getByName(type), location);
 | 
					            NpcImpl npc = new NpcImpl(configManager, packetFactory, textSerializer, oldLoc.getWorld(), typeRegistry.getByName(type), location);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            HologramImpl hologram = npc.getHologram();
 | 
				
			||||||
 | 
					            hologram.setOffset(model.getHologramHeight());
 | 
				
			||||||
            for (String raw : model.getHologramLines()) {
 | 
					            for (String raw : model.getHologramLines()) {
 | 
				
			||||||
                Component line = textSerializer.deserialize(raw);
 | 
					                Component line = textSerializer.deserialize(raw);
 | 
				
			||||||
                npc.getHologram().addLineComponent(line);
 | 
					                hologram.addLineComponent(line);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (ZNpcsAction action : model.getClickActions()) {
 | 
					            for (ZNpcsAction action : model.getClickActions()) {
 | 
				
			||||||
| 
						 | 
					@ -100,6 +116,16 @@ public class ZNpcImporter implements DataImporter {
 | 
				
			||||||
                npc.addAction(adaptAction(action.getActionType(), t, action.getAction(), action.getDelay()));
 | 
					                npc.addAction(adaptAction(action.getActionType(), t, action.getAction(), action.getDelay()));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (Map.Entry<String, String> entry : model.getNpcEquip().entrySet()) {
 | 
				
			||||||
 | 
					                EntityPropertyImpl<ItemStack> property = propertyRegistry.getByName(entry.getKey(), ItemStack.class);
 | 
				
			||||||
 | 
					                if (property == null) continue;
 | 
				
			||||||
 | 
					                npc.setProperty(property, SpigotConversionUtil.fromBukkitItemStack(ItemSerializationUtil.itemFromB64(entry.getValue())));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (model.getSkinName() != null) {
 | 
				
			||||||
 | 
					                npc.setProperty(propertyRegistry.getByName("skin", SkinDescriptor.class), new FetchingDescriptor(skinCache, model.getSkinName()));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            NpcEntryImpl entry = new NpcEntryImpl(String.valueOf(model.getId()), npc);
 | 
					            NpcEntryImpl entry = new NpcEntryImpl(String.valueOf(model.getId()), npc);
 | 
				
			||||||
            entry.enableEverything();
 | 
					            entry.enableEverything();
 | 
				
			||||||
            entries.add(entry);
 | 
					            entries.add(entry);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue