From 3c61d409b97e8b7051cd2373bcff23222849320e Mon Sep 17 00:00:00 2001 From: Supermuctec Date: Wed, 17 Jun 2026 02:29:55 +0530 Subject: [PATCH 1/3] Implement global API access pattern --- .../ascendancy/api/AscendancyAPI.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) 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..aaf6ab9 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 class AscendancyAPI { + class Holder { + private static final 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.of(Holder.INSTANCE).isPresent()) { + return Optional.of(Holder.INSTANCE); + } + return Optional.empty() + } + + static void set(AscendancyAPI instance, Plugin plugin){ + 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 From bd9c31c7cfba06fab9caa31baa0267147bedb906 Mon Sep 17 00:00:00 2001 From: Supermuctec Date: Wed, 17 Jun 2026 07:22:06 +0530 Subject: [PATCH 2/3] Fixed data retrieval from local and changed it to retrieve from bukkit ServiceManager --- .../io/github/hyscript7/ascendancy/api/AscendancyAPI.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 aaf6ab9..24551ae 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 @@ -3,6 +3,8 @@ import org.bukkit.plugin.ServicePriority; import java.util.Optional; import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.ServicesManager; +import static org.bukkit.Bukkit.getServer; public interface class AscendancyAPI { class Holder { @@ -17,10 +19,10 @@ static AscendancyAPI get(){ } static Optional fromServicesManager(){ - if (Optional.of(Holder.INSTANCE).isPresent()) { - return Optional.of(Holder.INSTANCE); + if (Optional.of(getServer().getServicesManager().load(AscendancyAPI.class)).isPresent()) { + return Optional.of(getServer().getServicesManager().load(AscendancyAPI.class)); } - return Optional.empty() + return Optional.empty(); } static void set(AscendancyAPI instance, Plugin plugin){ From 8c711d662550245ecd20e8826cf324d3fad5bf7b Mon Sep 17 00:00:00 2001 From: Supermuctec Date: Wed, 17 Jun 2026 16:47:14 +0530 Subject: [PATCH 3/3] Fixed issues with AscendancyAPI being both interface and class at the same time and added the Exception class --- .../hyscript7/ascendancy/api/AscendancyAPI.java | 12 +++++------- .../AscendancyAPIAlreadyInitializedException.java | 7 +++++++ 2 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 api/src/main/java/io/github/hyscript7/ascendancy/api/AscendancyAPIAlreadyInitializedException.java 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 24551ae..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 @@ -3,12 +3,10 @@ import org.bukkit.plugin.ServicePriority; import java.util.Optional; import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.ServicesManager; -import static org.bukkit.Bukkit.getServer; -public interface class AscendancyAPI { +public interface AscendancyAPI { class Holder { - private static final AscendancyAPI INSTANCE; + private static AscendancyAPI INSTANCE; } static AscendancyAPI get(){ @@ -19,13 +17,13 @@ static AscendancyAPI get(){ } static Optional fromServicesManager(){ - if (Optional.of(getServer().getServicesManager().load(AscendancyAPI.class)).isPresent()) { - return Optional.of(getServer().getServicesManager().load(AscendancyAPI.class)); + 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){ + 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."); } 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); + } +}