From 5b36cdac1bbef7f3dec728c481e289f7abd55928 Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Sat, 10 Jan 2026 06:53:48 +0200 Subject: [PATCH] Made ScriptContext class based instead --- .../noppes/npcs/constants/ScriptContext.java | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src/main/java/noppes/npcs/constants/ScriptContext.java b/src/main/java/noppes/npcs/constants/ScriptContext.java index a4567955b..942c406e6 100644 --- a/src/main/java/noppes/npcs/constants/ScriptContext.java +++ b/src/main/java/noppes/npcs/constants/ScriptContext.java @@ -1,5 +1,7 @@ package noppes.npcs.constants; +import noppes.npcs.api.event.*; + import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -30,35 +32,34 @@ public class ScriptContext { // ==================== BUILT-IN CONTEXTS ==================== public static final ScriptContext NPC = register("NPC", - "INpcEvent", - "IProjectileEvent" + INpcEvent.class, + IProjectileEvent.class ); public static final ScriptContext PLAYER = register("PLAYER", - "IPlayerEvent", - "IAnimationEvent", - "IPartyEvent", - "IDialogEvent", - "IQuestEvent", - "IFactionEvent", - "ICustomGuiEvent", - "IEffectEvent" + IPlayerEvent.class, + IAnimationEvent.class, + IPartyEvent.class, + IDialogEvent.class, + IQuestEvent.class, + IFactionEvent.class, + ICustomGuiEvent.class ); public static final ScriptContext BLOCK = register("BLOCK", - "IBlockEvent" + IBlockEvent.class ); public static final ScriptContext ITEM = register("ITEM", - "IItemEvent" + IItemEvent.class ); public static final ScriptContext FORGE = register("FORGE", - "IForgeEvent" + IForgeEvent.class ); public static final ScriptContext GLOBAL = register("GLOBAL", - "Global" + "Global" // Special case: Global namespace doesn't have a corresponding event class ); // ==================== INSTANCE FIELDS ==================== @@ -134,6 +135,25 @@ public class ScriptContext { return context; } + /** + * Register a new script context using event interface classes. + * Automatically extracts the simple name from each class. + * + * Example: + * ScriptContext.register("NPC", INpcEvent.class, IProjectileEvent.class); + * + * @param id Unique identifier (e.g., "DBC", "CUSTOM") + * @param eventClasses The event interface classes (simple names will be extracted) + * @return The registered ScriptContext + */ + public static ScriptContext register(String id, Class... eventClasses) { + String[] namespaces = new String[eventClasses.length]; + for (int i = 0; i < eventClasses.length; i++) { + namespaces[i] = eventClasses[i].getSimpleName(); + } + return register(id, namespaces); + } + /** * Get a script context by its ID. *