From cd5fbf4cbcbf704fee116edb4c5e4adbb348cb64 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 17 May 2025 17:29:54 +0200 Subject: [PATCH] fancyholograms-v3: Add migrator for YAML --- .../main/FancyHologramsPlugin.java | 9 ++++- .../storage/StorageMigrator.java | 38 +++++++++++++++++++ .../storage/YamlHologramStorage.java | 2 +- 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/storage/StorageMigrator.java diff --git a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/main/FancyHologramsPlugin.java b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/main/FancyHologramsPlugin.java index f535de10..c32eaabf 100644 --- a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/main/FancyHologramsPlugin.java +++ b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/main/FancyHologramsPlugin.java @@ -27,7 +27,8 @@ import de.oliver.fancyholograms.listeners.WorldListener; import de.oliver.fancyholograms.metrics.FHMetrics; import de.oliver.fancyholograms.registry.HologramRegistryImpl; import de.oliver.fancyholograms.storage.HologramStorage; -import de.oliver.fancyholograms.storage.YamlHologramStorage; +import de.oliver.fancyholograms.storage.StorageMigrator; +import de.oliver.fancyholograms.storage.json.JsonStorage; import de.oliver.fancyholograms.trait.HologramTraitRegistryImpl; import de.oliver.fancyholograms.trait.builtin.MultiplePagesTrait; import de.oliver.fancyholograms.util.PluginUtils; @@ -141,7 +142,7 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog fancyLogger.setCurrentLevel(logLevel); IFancySitula.LOGGER.setCurrentLevel(logLevel); - storage = new YamlHologramStorage(); + storage = new JsonStorage(); registry = new HologramRegistryImpl(); controller = new HologramControllerImpl(); traitRegistry = new HologramTraitRegistryImpl(); @@ -190,6 +191,8 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog metrics.register(); metrics.registerLegacy(); + new StorageMigrator().migrate(); + for (World world : Bukkit.getWorlds()) { Collection data = storage.loadAll(world.getName()); for (HologramData d : data) { @@ -218,6 +221,8 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog @Override public void onDisable() { + savePersistentHolograms(); + hologramThread.shutdown(); storageThread.shutdown(); diff --git a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/storage/StorageMigrator.java b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/storage/StorageMigrator.java new file mode 100644 index 00000000..83f0d6b1 --- /dev/null +++ b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/storage/StorageMigrator.java @@ -0,0 +1,38 @@ +package de.oliver.fancyholograms.storage; + +import de.oliver.fancyholograms.api.data.HologramData; +import de.oliver.fancyholograms.api.hologram.Hologram; +import de.oliver.fancyholograms.main.FancyHologramsPlugin; +import org.bukkit.Bukkit; +import org.bukkit.World; + +import java.util.Collection; + +public class StorageMigrator { + + public void migrate() { + if (!YamlHologramStorage.HOLOGRAMS_CONFIG_FILE.exists()) { + FancyHologramsPlugin.get().getFancyLogger().debug("No holograms.yml file found, skipping migration."); + return; + } + + FancyHologramsPlugin.get().getFancyLogger().info("Migrating holograms.yml to JSON format..."); + + HologramStorage yamlStorage = new YamlHologramStorage(); + for (World world : Bukkit.getWorlds()) { + Collection data = yamlStorage.loadAll(world.getName()); + for (HologramData d : data) { + Hologram hologram = FancyHologramsPlugin.get().getHologramFactory().apply(d); + FancyHologramsPlugin.get().getRegistry().register(hologram); + FancyHologramsPlugin.get().getFancyLogger().info("Migrated hologram " + hologram.getData().getName()); + } + } + + if (!YamlHologramStorage.HOLOGRAMS_CONFIG_FILE.renameTo(YamlHologramStorage.HOLOGRAMS_CONFIG_FILE.getParentFile().toPath().resolve("holograms-old.yaml").toFile())) { + FancyHologramsPlugin.get().getFancyLogger().error("Failed to rename holograms.yml to holograms-old.yaml"); + } + + FancyHologramsPlugin.get().getFancyLogger().info("Migration completed"); + } + +} diff --git a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/storage/YamlHologramStorage.java b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/storage/YamlHologramStorage.java index 6bdd432e..f66d6c99 100644 --- a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/storage/YamlHologramStorage.java +++ b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/storage/YamlHologramStorage.java @@ -20,8 +20,8 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; public class YamlHologramStorage implements HologramStorage { + public static final File HOLOGRAMS_CONFIG_FILE = new File("plugins/FancyHolograms/holograms.yml"); private static final ReadWriteLock lock = new ReentrantReadWriteLock(); - private static final File HOLOGRAMS_CONFIG_FILE = new File("plugins/FancyHolograms/holograms.yml"); public void saveBatch(Collection holograms) { lock.readLock().lock();