From 9e920ecab16fca5795b54879d2103eed837c19df Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Mon, 19 Jun 2023 00:01:38 +0200 Subject: [PATCH] make importer ids lower case and add base for citizens importer --- .../conversion/DataImporterRegistry.java | 6 +- .../conversion/citizens/CitizensImporter.java | 60 +++++++++++++++++++ .../znpcsplus/util/ItemSerializationUtil.java | 18 ++++-- 3 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/CitizensImporter.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/DataImporterRegistry.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/DataImporterRegistry.java index b5f06d2..48d255b 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/DataImporterRegistry.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/DataImporterRegistry.java @@ -28,14 +28,16 @@ public class DataImporterRegistry { register("znpcs", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, bungeeConnector, taskScheduler, packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "ServersNPC/data.json")))); + /* register("citizens", LazyLoader.of(() -> new CitizensImporter(configManager, adventure, bungeeConnector, taskScheduler, + packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "Citizens/saves.yml")))); */ } private void register(String id, LazyLoader loader) { - importers.put(id.toUpperCase(), loader); + importers.put(id.toLowerCase(), loader); } public DataImporter getImporter(String id) { - id = id.toUpperCase(); + id = id.toLowerCase(); return importers.containsKey(id) ? importers.get(id).get() : null; } 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 new file mode 100644 index 0000000..0f653e7 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/citizens/CitizensImporter.java @@ -0,0 +1,60 @@ +package lol.pyr.znpcsplus.conversion.citizens; + +import lol.pyr.znpcsplus.config.ConfigManager; +import lol.pyr.znpcsplus.conversion.DataImporter; +import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; +import lol.pyr.znpcsplus.npc.NpcEntryImpl; +import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl; +import lol.pyr.znpcsplus.packets.PacketFactory; +import lol.pyr.znpcsplus.scheduling.TaskScheduler; +import lol.pyr.znpcsplus.skin.cache.SkinCache; +import lol.pyr.znpcsplus.util.BungeeConnector; +import net.kyori.adventure.platform.bukkit.BukkitAudiences; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.util.Collection; +import java.util.Collections; + +@SuppressWarnings("FieldCanBeLocal") +public class CitizensImporter implements DataImporter { + private final ConfigManager configManager; + private final BukkitAudiences adventure; + private final BungeeConnector bungeeConnector; + private final TaskScheduler scheduler; + private final PacketFactory packetFactory; + private final LegacyComponentSerializer textSerializer; + private final NpcTypeRegistryImpl typeRegistry; + private final EntityPropertyRegistryImpl propertyRegistry; + private final SkinCache skinCache; + private final File dataFile; + + public CitizensImporter(ConfigManager configManager, BukkitAudiences adventure, BungeeConnector bungeeConnector, + TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer, + NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, SkinCache skinCache, + File dataFile) { + this.configManager = configManager; + this.adventure = adventure; + this.bungeeConnector = bungeeConnector; + this.scheduler = taskScheduler; + this.packetFactory = packetFactory; + this.textSerializer = textSerializer; + this.typeRegistry = typeRegistry; + this.propertyRegistry = propertyRegistry; + this.skinCache = skinCache; + this.dataFile = dataFile; + } + + @Override + public Collection importData() { + YamlConfiguration config = YamlConfiguration.loadConfiguration(dataFile); + // TODO + return Collections.emptyList(); + } + + @Override + public boolean isValid() { + return dataFile.isFile(); + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/ItemSerializationUtil.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/ItemSerializationUtil.java index 1959845..ed5f866 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/util/ItemSerializationUtil.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/util/ItemSerializationUtil.java @@ -1,6 +1,7 @@ package lol.pyr.znpcsplus.util; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.io.BukkitObjectInputStream; import org.bukkit.util.io.BukkitObjectOutputStream; @@ -10,20 +11,21 @@ import java.io.IOException; import java.util.Base64; public class ItemSerializationUtil { - public static byte[] itemToBytes(ItemStack item) { + public static byte[] objectToBytes(Object obj) { ByteArrayOutputStream bout = new ByteArrayOutputStream(); try { - new BukkitObjectOutputStream(bout).writeObject(item); + new BukkitObjectOutputStream(bout).writeObject(obj); } catch (IOException e) { throw new RuntimeException(e); } return bout.toByteArray(); } - public static ItemStack itemFromBytes(byte[] bytes) { + @SuppressWarnings({"unchecked", "unused"}) + public static T objectFromBytes(byte[] bytes, Class clazz) { ByteArrayInputStream bin = new ByteArrayInputStream(bytes); try { - return (ItemStack) new BukkitObjectInputStream(bin).readObject(); + return (T) new BukkitObjectInputStream(bin).readObject(); } catch (IOException | ClassNotFoundException e) { throw new RuntimeException(e); } @@ -31,11 +33,15 @@ public class ItemSerializationUtil { public static String itemToB64(ItemStack item) { if (item == null) return null; - return Base64.getEncoder().encodeToString(itemToBytes(item)); + return Base64.getEncoder().encodeToString(objectToBytes(item)); } public static ItemStack itemFromB64(String str) { if (str == null) return null; - return itemFromBytes(Base64.getDecoder().decode(str)); + return objectFromBytes(Base64.getDecoder().decode(str), ItemStack.class); + } + + public static ItemMeta metaFromB64(String str) { + return objectFromBytes(Base64.getDecoder().decode(str), ItemMeta.class); } }