diff --git a/build.gradle.kts b/build.gradle.kts index a90eefb..e5ade40 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -35,6 +35,7 @@ allprojects { maven(url = "https://repo.tcoded.com/releases") maven(url = "https://repo.william278.net/releases") maven(url = "https://repo.codemc.org/repository/maven-public") + maven(url = "https://repo.fancyinnovations.com/releases") exclusiveContent { forRepository { maven("https://dependency.download/releases") @@ -75,6 +76,7 @@ allprojects { compileOnly("net.sacredlabyrinth.phaed.simpleclans:SimpleClans:2.15.2") compileOnly("com.github.UlrichBR:UClansV7-API:7.13.0-R1") compileOnly("dev.kitteh:factions:4.0.0-rc.1") + compileOnly("de.oliver:FancyHolograms:2.7.0") compileOnly(files("libs/SternalBoard-2.2.8-all.jar")) compileOnly(files("libs/FeatherBoard.jar")) diff --git a/src/main/java/fr/maxlego08/koth/KothPlugin.java b/src/main/java/fr/maxlego08/koth/KothPlugin.java index 84c7f53..b312643 100644 --- a/src/main/java/fr/maxlego08/koth/KothPlugin.java +++ b/src/main/java/fr/maxlego08/koth/KothPlugin.java @@ -5,6 +5,7 @@ import fr.maxlego08.koth.command.commands.CommandKoth; import fr.maxlego08.koth.hologram.DecentHologram; import fr.maxlego08.koth.hologram.EmptyHologram; +import fr.maxlego08.koth.hologram.FancyHologram; import fr.maxlego08.koth.hook.ScoreboardPlugin; import fr.maxlego08.koth.hook.scoreboard.DefaultHook; import fr.maxlego08.koth.placeholder.LocalPlaceholder; @@ -75,6 +76,10 @@ public void onEnable() { Logger.info("Register DecentHologram implementation", Logger.LogType.INFO); this.kothHologram = new DecentHologram(); } + if (this.isEnable(Plugins.FH)) { + Logger.info("Register FancyHologram implementation", Logger.LogType.INFO); + this.kothHologram = new FancyHologram(); + } KothPlaceholder kothPlaceholder = new KothPlaceholder(this.kothManager); kothPlaceholder.register(); diff --git a/src/main/java/fr/maxlego08/koth/hologram/FancyHologram.java b/src/main/java/fr/maxlego08/koth/hologram/FancyHologram.java new file mode 100644 index 0000000..e1d1969 --- /dev/null +++ b/src/main/java/fr/maxlego08/koth/hologram/FancyHologram.java @@ -0,0 +1,75 @@ +package fr.maxlego08.koth.hologram; + +import de.oliver.fancyholograms.api.FancyHologramsPlugin; +import de.oliver.fancyholograms.api.HologramManager; +import de.oliver.fancyholograms.api.data.HologramData; +import de.oliver.fancyholograms.api.data.TextHologramData; +import de.oliver.fancyholograms.api.hologram.Hologram; +import fr.maxlego08.koth.api.Koth; +import fr.maxlego08.koth.api.KothHologram; +import fr.maxlego08.koth.api.utils.HologramConfig; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class FancyHologram implements KothHologram { + private final Map holograms = new HashMap<>(); + + @Override + public void start(Koth koth) { + HologramConfig config = koth.getHologramConfig(); + if (!config.isEnable()) return; + + HologramManager manager = FancyHologramsPlugin.get().getHologramManager(); + manager.getHologram("ZKOTH-" + koth.getFileName()).ifPresent(manager::removeHologram); + + var data = new TextHologramData("ZKOTH-" + koth.getFileName(), config.getLocation()); + updateLine(koth, data); + var hologram = manager.create(data); + manager.addHologram(hologram); + this.holograms.put(koth, hologram); + } + + @Override + public void end(Koth koth) { + HologramConfig config = koth.getHologramConfig(); + if (!config.isEnable()) return; + + var manager = FancyHologramsPlugin.get().getHologramManager(); + if (this.holograms.containsKey(koth)) { + Hologram hologram = this.holograms.get(koth); + manager.removeHologram(hologram); + } + this.holograms.remove(koth); + } + + @Override + public void update(Koth koth) { + + HologramConfig config = koth.getHologramConfig(); + if (!config.isEnable() || !this.holograms.containsKey(koth)) return; + + Hologram hologram = this.holograms.get(koth); + updateLine(koth, hologram.getData()); + hologram.forceUpdate(); + } + + private void updateLine(Koth koth, HologramData hologram) { + HologramConfig config = koth.getHologramConfig(); + if (!config.isEnable()) return; + + List lines = config.getLines(); + if (hologram instanceof TextHologramData data) { + data.setText(lines.stream().map(koth::replaceMessage).collect(Collectors.toList())); + } + } + + @Override + public void onDisable() { + var manager = FancyHologramsPlugin.get().getHologramManager(); + this.holograms.values().forEach(manager::removeHologram); + this.holograms.clear(); + } +} diff --git a/src/main/java/fr/maxlego08/koth/zcore/utils/plugins/Plugins.java b/src/main/java/fr/maxlego08/koth/zcore/utils/plugins/Plugins.java index b566371..eb04a0a 100644 --- a/src/main/java/fr/maxlego08/koth/zcore/utils/plugins/Plugins.java +++ b/src/main/java/fr/maxlego08/koth/zcore/utils/plugins/Plugins.java @@ -10,6 +10,7 @@ public enum Plugins { TRANSLATIONAPI("TranslationAPI"), ZTRANSLATOR("zTranslator"), DH("DecentHolograms"), + FH("FancyHolograms"), ZSCHEDULERS("zSchedulers"), ; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 414b767..f512756 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -25,4 +25,5 @@ softdepend: - HuskTowns - Lands - UltimateClans + - FancyHolograms commands: \ No newline at end of file