diff --git a/api/src/main/java/io/github/hyscript7/ascendancy/api/AscendancyAPI.java b/api/src/main/java/io/github/hyscript7/ascendancy/api/AscendancyAPI.java index 5f223fc..ba94c2e 100644 --- a/api/src/main/java/io/github/hyscript7/ascendancy/api/AscendancyAPI.java +++ b/api/src/main/java/io/github/hyscript7/ascendancy/api/AscendancyAPI.java @@ -1,4 +1,34 @@ package io.github.hyscript7.ascendancy.api; +import org.bukkit.Bukkit; +import org.bukkit.plugin.ServicePriority; +import java.util.Optional; +import org.bukkit.plugin.Plugin; -public class AscendancyAPI { -} +public interface AscendancyAPI { + class Holder { + private static AscendancyAPI INSTANCE; + } + + static AscendancyAPI get(){ + if (Holder.INSTANCE == null) { + throw new IllegalStateException("AscendancyAPI instance is not set. Please set it using AscendancyAPI.set() before calling AscendancyAPI.get()."); + } + return Holder.INSTANCE; + } + + static Optional fromServicesManager(){ + if (Optional.ofNullable(Bukkit.getServer().getServicesManager().load(AscendancyAPI.class)).isPresent()) { + return Optional.of(Bukkit.getServer().getServicesManager().load(AscendancyAPI.class)); + } + return Optional.empty(); + } + + static void set(AscendancyAPI instance, Plugin plugin) throws AscendancyAPIAlreadyInitializedException { + if (Holder.INSTANCE != null) { + throw new AscendancyAPIAlreadyInitializedException("AscendancyAPI instance is already set. Cannot set it again."); + } + + Holder.INSTANCE = instance; + Bukkit.getServicesManager().register(AscendancyAPI.class, Holder.INSTANCE, plugin, ServicePriority.Normal); + } +} \ No newline at end of file diff --git a/api/src/main/java/io/github/hyscript7/ascendancy/api/AscendancyAPIAlreadyInitializedException.java b/api/src/main/java/io/github/hyscript7/ascendancy/api/AscendancyAPIAlreadyInitializedException.java new file mode 100644 index 0000000..315e8c7 --- /dev/null +++ b/api/src/main/java/io/github/hyscript7/ascendancy/api/AscendancyAPIAlreadyInitializedException.java @@ -0,0 +1,7 @@ +package io.github.hyscript7.ascendancy.api; + +public class AscendancyAPIAlreadyInitializedException extends RuntimeException { + public AscendancyAPIAlreadyInitializedException(String message) { + super(message); + } +}