From 810a67346bee0a0802d4c40fb4e4539c0e0ae249 Mon Sep 17 00:00:00 2001 From: fullwall Date: Thu, 4 Feb 2021 10:10:57 +0800 Subject: [PATCH] Add new registry API --- .../java/net/citizensnpcs/api/CitizensAPI.java | 11 +++++++++++ .../java/net/citizensnpcs/api/CitizensPlugin.java | 9 +++++++++ .../net/citizensnpcs/api/npc/NPCRegistry.java | 15 +++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/main/java/net/citizensnpcs/api/CitizensAPI.java b/src/main/java/net/citizensnpcs/api/CitizensAPI.java index 1716011b..ba6bc2aa 100644 --- a/src/main/java/net/citizensnpcs/api/CitizensAPI.java +++ b/src/main/java/net/citizensnpcs/api/CitizensAPI.java @@ -34,6 +34,17 @@ public static NPCRegistry createAnonymousNPCRegistry(NPCDataStore store) { return getImplementation().createAnonymousNPCRegistry(store); } + /** + * Creates a new anonymous {@link NPCRegistry} that is "Citizens-backed" i.e. will reload and unload at the + * same time that Citizens reloads and unloads. + * + * @param store + * The {@link NPCDataStore} to use with the registry + */ + public static NPCRegistry createCitizensBackedNPCRegistry(NPCDataStore store) { + return getImplementation().createCitizensBackedNPCRegistry(store); + } + /** * Creates a new {@link NPCRegistry} with its own set of {@link NPC}s. This is stored in memory with the Citizens * plugin, and can be accessed via {@link #getNamedNPCRegistry(String)}. diff --git a/src/main/java/net/citizensnpcs/api/CitizensPlugin.java b/src/main/java/net/citizensnpcs/api/CitizensPlugin.java index d47a313f..ccc1302b 100644 --- a/src/main/java/net/citizensnpcs/api/CitizensPlugin.java +++ b/src/main/java/net/citizensnpcs/api/CitizensPlugin.java @@ -18,6 +18,15 @@ public interface CitizensPlugin extends Plugin { */ public NPCRegistry createAnonymousNPCRegistry(NPCDataStore store); + /** + * Creates a new anonymous {@link NPCRegistry} that is "Citizens-backed" i.e. will reload and unload at the + * same time that Citizens reloads and unloads. + * + * @param store + * The {@link NPCDataStore} to use with the registry + */ + public NPCRegistry createCitizensBackedNPCRegistry(NPCDataStore store); + /** * @param name * The plugin name diff --git a/src/main/java/net/citizensnpcs/api/npc/NPCRegistry.java b/src/main/java/net/citizensnpcs/api/npc/NPCRegistry.java index a2091049..d8e905a1 100644 --- a/src/main/java/net/citizensnpcs/api/npc/NPCRegistry.java +++ b/src/main/java/net/citizensnpcs/api/npc/NPCRegistry.java @@ -5,6 +5,8 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import net.citizensnpcs.api.event.DespawnReason; + /** * Controls the registration and lookup of a set of {@link NPC}s. */ @@ -47,6 +49,14 @@ public interface NPCRegistry extends Iterable { */ public void deregisterAll(); + /** + * Despawn all NPCs within the registry. + * + * @param reload + * The reason to despawn + */ + public void despawnNPCs(DespawnReason reason); + /** * Gets the {@link NPC} with the given ID if it exists. * @@ -97,6 +107,11 @@ public interface NPCRegistry extends Iterable { */ public boolean isNPC(Entity entity); + /** + * Saves the NPCs to the internal {@link NPCDataStore} + */ + public void saveToStore(); + /** * Returns a sorted view of this registry, sorted by NPC id. *