From dd3d8c552c515b48901f4c8d443b8c7cb85c0a20 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 21 Feb 2025 17:30:38 -0500 Subject: [PATCH] Custom Effect + Profile API for Scripting --- java/noppes/npcs/api/AbstractNpcAPI.java | 4 ++ .../npcs/api/handler/IProfileHandler.java | 19 ++++++ .../npcs/api/handler/data/IProfile.java | 33 ++++++++++ java/noppes/npcs/api/handler/data/ISlot.java | 61 +++++++++++++++++++ 4 files changed, 117 insertions(+) create mode 100644 java/noppes/npcs/api/handler/IProfileHandler.java create mode 100644 java/noppes/npcs/api/handler/data/IProfile.java create mode 100644 java/noppes/npcs/api/handler/data/ISlot.java diff --git a/java/noppes/npcs/api/AbstractNpcAPI.java b/java/noppes/npcs/api/AbstractNpcAPI.java index 96df371..e6c3416 100644 --- a/java/noppes/npcs/api/AbstractNpcAPI.java +++ b/java/noppes/npcs/api/AbstractNpcAPI.java @@ -139,6 +139,10 @@ public abstract class AbstractNpcAPI { public abstract INaturalSpawnsHandler getNaturalSpawns(); + public abstract IProfileHandler getProfileHandler(); + + public abstract ICustomEffectHandler getCustomEffectHandler(); + public abstract ITransportHandler getLocations(); public abstract IAnimationHandler getAnimations(); diff --git a/java/noppes/npcs/api/handler/IProfileHandler.java b/java/noppes/npcs/api/handler/IProfileHandler.java new file mode 100644 index 0000000..46d5774 --- /dev/null +++ b/java/noppes/npcs/api/handler/IProfileHandler.java @@ -0,0 +1,19 @@ +package noppes.npcs.api.handler; + +import noppes.npcs.api.entity.IPlayer; +import noppes.npcs.api.handler.data.IProfile; + +public interface IProfileHandler { + + IProfile getProfile(IPlayer player); + + boolean changeSlot(IPlayer player, int slotID); + + boolean hasSlot(IPlayer player, int slotID); + + boolean removeSlot(IPlayer player, int slotID); + + IPlayerData getSlotPlayerData(IPlayer player, int slotID); + + void saveSlotData(IPlayer player); +} diff --git a/java/noppes/npcs/api/handler/data/IProfile.java b/java/noppes/npcs/api/handler/data/IProfile.java new file mode 100644 index 0000000..687300d --- /dev/null +++ b/java/noppes/npcs/api/handler/data/IProfile.java @@ -0,0 +1,33 @@ +package noppes.npcs.api.handler.data; + +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.api.entity.IPlayer; + +import java.util.Map; + +public interface IProfile { + + + /** + * @return the IPlayer attached to the Profile + */ + IPlayer getPlayer(); + + + /** + * @return The profiles current Slot ID + */ + int getCurrentSlotId(); + + + /** + * @return Map of all Slot IDs + */ + Map getSlots(); + + + /** + * @return FULL NBT of the Profile + */ + NBTTagCompound writeToNBT(); +} diff --git a/java/noppes/npcs/api/handler/data/ISlot.java b/java/noppes/npcs/api/handler/data/ISlot.java new file mode 100644 index 0000000..c76f67c --- /dev/null +++ b/java/noppes/npcs/api/handler/data/ISlot.java @@ -0,0 +1,61 @@ +package noppes.npcs.api.handler.data; + +import net.minecraft.nbt.NBTTagCompound; + +import java.util.Map; + +public interface ISlot { + /** + * @return id of slot + */ + int getId(); + + /** + * @return Name of Slot + */ + String getName(); + + + /** + * @param name - New name of slot + */ + void setName(String name); + + /** + * @return Last time Slot was Saved + */ + long getLastLoaded(); + + /** + * @param time - Long time for when it was last saved + */ + void setLastLoaded(long time); + + /** + * @return if the slot is temporary + */ + boolean isTemporary(); + + /** + * @param temporary - Setting a slot to temporary won't save it to Profile + */ + void setTemporary(boolean temporary); + + /** + * @return A map of all the NBTs within a slot + */ + Map getComponents(); + + void setComponentData(String key, NBTTagCompound data); + + /** + * @param key - The KEY of the NBT for the Slot: [CNPC+, DBC... etc] + * @return NBT for that that key + */ + NBTTagCompound getComponentData(String key); + + /** + * @return The full NBT of the Slot + */ + NBTTagCompound toNBT(); +}