From aeb905336f8bff5dd63d39e10200ce2808d2df76 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 18 May 2025 00:00:18 +0200 Subject: [PATCH] fancyholograms-v3: Add HologramTraitAttachedEvent --- .../events/HologramTraitAttachedEvent.java | 40 +++++++++++++++++++ .../api/trait/HologramTrait.java | 3 +- .../api/trait/HologramTraitTrait.java | 15 +++++-- 3 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/events/HologramTraitAttachedEvent.java diff --git a/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/events/HologramTraitAttachedEvent.java b/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/events/HologramTraitAttachedEvent.java new file mode 100644 index 00000000..36d53516 --- /dev/null +++ b/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/events/HologramTraitAttachedEvent.java @@ -0,0 +1,40 @@ +package de.oliver.fancyholograms.api.events; + +import de.oliver.fancyholograms.api.hologram.Hologram; +import de.oliver.fancyholograms.api.trait.HologramTrait; +import org.bukkit.Bukkit; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class HologramTraitAttachedEvent extends HologramEvent { + + private static final HandlerList handlerList = new HandlerList(); + + @NotNull private final HologramTrait trait; + private final boolean isDefaultTrait; + + + public HologramTraitAttachedEvent(@NotNull final Hologram hologram, @NotNull final HologramTrait trait, boolean isDefaultTrait) { + super(hologram, !Bukkit.isPrimaryThread()); + this.trait = trait; + this.isDefaultTrait = isDefaultTrait; + } + + public static HandlerList getHandlerList() { + return handlerList; + } + + public @NotNull HologramTrait getTrait() { + return trait; + } + + public boolean isDefaultTrait() { + return isDefaultTrait; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlerList; + } + +} diff --git a/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/trait/HologramTrait.java b/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/trait/HologramTrait.java index 9b5dfd66..bc0681ec 100644 --- a/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/trait/HologramTrait.java +++ b/plugins/fancyholograms/fh-api/src/main/java/de/oliver/fancyholograms/api/trait/HologramTrait.java @@ -50,6 +50,8 @@ public abstract class HologramTrait { this.hologram = hologram; this.storage = new JDB("plugins/FancyHolograms/data/traits/" + name); + + onAttach(); } /** @@ -75,7 +77,6 @@ public abstract class HologramTrait { * Called when the hologram is registered in the registry. */ public void onRegister() { - } /** 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 0f9dddc5..47fd5165 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 @@ -1,5 +1,6 @@ package de.oliver.fancyholograms.api.trait; +import de.oliver.fancyholograms.api.events.HologramTraitAttachedEvent; import de.oliver.fancyholograms.api.hologram.Hologram; import org.bukkit.entity.Player; @@ -15,17 +16,20 @@ public class HologramTraitTrait extends HologramTrait { super("trait"); this.traits = new ArrayList<>(); attachHologram(hologram); - onAttach(); } public void addTrait(HologramTrait trait) { - this.traits.add(trait); + if (!new HologramTraitAttachedEvent(hologram, trait, false).callEvent()) { + return; + } + trait.attachHologram(hologram); - trait.onAttach(); + this.traits.add(trait); } @Override public void onAttach() { + // Attach all default traits to the hologram Set> registeredTraits = api.getTraitRegistry().getRegisteredTraits(); for (Class traitClass : registeredTraits) { if (!traitClass.isAnnotationPresent(DefaultTrait.class)) { @@ -34,8 +38,11 @@ public class HologramTraitTrait extends HologramTrait { try { HologramTrait trait = traitClass.getConstructor().newInstance(); + if (!new HologramTraitAttachedEvent(hologram, trait, false).callEvent()) { + continue; + } + trait.attachHologram(hologram); - trait.onAttach(); this.traits.add(trait); } catch (Exception e) { logger.error("Failed to instantiate trait " + traitClass.getName());