From 0b02a9b85d46011f5e21ddc62a3cdc2ea9741ea3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 18 May 2025 00:22:52 +0200 Subject: [PATCH] fancyholograms-v3: Save and load attached traits --- .../api/trait/HologramTraitTrait.java | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/trait/HologramTraitTrait.java b/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/trait/HologramTraitTrait.java index 650b43d0..48bc89a1 100644 --- a/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/trait/HologramTraitTrait.java +++ b/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/trait/HologramTraitTrait.java @@ -4,6 +4,7 @@ import de.oliver.fancyholograms.api.events.HologramTraitAttachedEvent; import de.oliver.fancyholograms.api.hologram.Hologram; import org.bukkit.entity.Player; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -11,8 +12,10 @@ import java.util.List; public class HologramTraitTrait extends HologramTrait { private final List traits; + private Configuration configuration; public HologramTraitTrait(Hologram hologram) { + this.configuration = new Configuration(new ArrayList<>()); this.traits = new ArrayList<>(); attachHologram(hologram); } @@ -24,6 +27,13 @@ public class HologramTraitTrait extends HologramTrait { trait.attachHologram(hologram); this.traits.add(trait); + this.configuration.traits().add(trait.getName()); + try { + storage.set(hologram.getData().getName(), configuration); + } catch (IOException e) { + logger.error("Failed to save configuration for HologramTraitTrait"); + logger.error(e); + } } @Override @@ -37,19 +47,53 @@ public class HologramTraitTrait extends HologramTrait { try { HologramTrait trait = ti.clazz().getConstructor().newInstance(); - if (!new HologramTraitAttachedEvent(hologram, trait, false).callEvent()) { + if (!new HologramTraitAttachedEvent(hologram, trait, true).callEvent()) { continue; } trait.attachHologram(hologram); this.traits.add(trait); } catch (Exception e) { - logger.error("Failed to instantiate trait " + ti.name()); + logger.error("Failed to instantiate default trait " + ti.name()); logger.error(e); } logger.debug("Attached default trait " + ti.name() + " to hologram " + hologram.getData().getName()); } + + // Attach all traits that are already attached to the hologram + try { + configuration = storage.get(hologram.getData().getName(), Configuration.class); + } catch (IOException e) { + logger.error("Failed to load configuration for HologramTraitTrait"); + logger.error(e); + return; + } + if (configuration == null) { + return; + } + + for (String traitName : configuration.traits()) { + HologramTraitRegistry.TraitInfo traitInfo = api.getTraitRegistry().getTrait(traitName); + if (traitInfo == null) { + logger.warn("Trait " + traitName + " is not registered"); + continue; + } + + try { + HologramTrait trait = traitInfo.clazz().getConstructor().newInstance(); + + if (!new HologramTraitAttachedEvent(hologram, trait, false).callEvent()) { + return; + } + + trait.attachHologram(hologram); + this.traits.add(trait); + } catch (Exception e) { + logger.error("Failed to instantiate trait " + traitName); + logger.error(e); + } + } } @Override @@ -93,4 +137,10 @@ public class HologramTraitTrait extends HologramTrait { trait.save(); } } + + record Configuration( + List traits + ) { + + } }