fancyholograms-v3: Save and load attached traits

This commit is contained in:
Oliver
2025-05-18 00:22:52 +02:00
parent ccc238bbad
commit 0b02a9b85d

View File

@@ -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<HologramTrait> 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<String> traits
) {
}
}