From ec49eb43853d76e45526560111cfc0193ab2c352 Mon Sep 17 00:00:00 2001 From: fretuks Date: Tue, 25 Nov 2025 09:57:27 +0100 Subject: [PATCH] Implement API functions --- .../skillengine/api/SkillEngineAPI.java | 82 +++++++++++++++++++ .../capability/PlayerSkillData.java | 2 - 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/fretux/skillengine/api/SkillEngineAPI.java diff --git a/src/main/java/net/fretux/skillengine/api/SkillEngineAPI.java b/src/main/java/net/fretux/skillengine/api/SkillEngineAPI.java new file mode 100644 index 0000000..88a4a53 --- /dev/null +++ b/src/main/java/net/fretux/skillengine/api/SkillEngineAPI.java @@ -0,0 +1,82 @@ +package net.fretux.skillengine.api; + +import net.fretux.skillengine.SkillEngine; +import net.fretux.skillengine.capability.PlayerSkillData; +import net.fretux.skillengine.capability.SkillEngineCapabilities; +import net.fretux.skillengine.skilltree.SkillNode; +import net.fretux.skillengine.skilltree.SkillNodeRegistry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; + +import java.util.List; +import java.util.Set; +public final class SkillEngineAPI { + + private SkillEngineAPI() {} + public static ResourceLocation id(String path) { + return new ResourceLocation(SkillEngine.MODID, path); + } + public static ResourceLocation rl(String namespace, String path) { + return new ResourceLocation(namespace, path); + } + public static SkillNode getNode(ResourceLocation id) { + return SkillNodeRegistry.get(id); + } + public static boolean hasNode(ResourceLocation id) { + return SkillNodeRegistry.get(id) != null; + } + public static List getAllNodes() { + return List.copyOf(SkillNodeRegistry.all()); + } + public static PlayerSkillData getPlayerData(Player player) { + return player.getCapability(SkillEngineCapabilities.PLAYER_SKILLS).orElse(null); + } + public static Set getUnlockedNodes(Player player) { + PlayerSkillData data = getPlayerData(player); + return data != null ? data.getUnlockedNodes() : Set.of(); + } + + public static int getSkillPoints(Player player) { + PlayerSkillData data = getPlayerData(player); + return data != null ? data.getSkillPoints() : 0; + } + + public static void addSkillPoints(Player player, int amount) { + PlayerSkillData data = getPlayerData(player); + if (data != null) { + data.addSkillPoints(amount); + } + } + + public static boolean consumeSkillPoints(Player player, int amount) { + PlayerSkillData data = getPlayerData(player); + if (data != null && data.getSkillPoints() >= amount) { + data.addSkillPoints(-amount); + return true; + } + return false; + } + + public static boolean isUnlocked(Player player, ResourceLocation nodeId) { + PlayerSkillData data = getPlayerData(player); + return data != null && data.isUnlocked(nodeId); + } + + public static boolean unlockNode(Player player, ResourceLocation nodeId) { + PlayerSkillData data = getPlayerData(player); + if (data == null) return false; + + SkillNode node = SkillNodeRegistry.get(nodeId); + if (node == null) return false; + + if (!net.fretux.skillengine.skilltree.SkillLogic.canUnlock(data, player, node)) { + return false; + } + + data.unlockNode(node); + return true; + } + public static boolean clientHasNode(ResourceLocation nodeId) { + return net.fretux.skillengine.client.SkilltreeClientState.isUnlocked(nodeId); + } +} diff --git a/src/main/java/net/fretux/skillengine/capability/PlayerSkillData.java b/src/main/java/net/fretux/skillengine/capability/PlayerSkillData.java index a07731f..dc20d91 100644 --- a/src/main/java/net/fretux/skillengine/capability/PlayerSkillData.java +++ b/src/main/java/net/fretux/skillengine/capability/PlayerSkillData.java @@ -37,8 +37,6 @@ public class PlayerSkillData { } } - /* ---------- NBT ---------- */ - public CompoundTag save() { CompoundTag tag = new CompoundTag(); tag.putInt("SkillPoints", skillPoints);