🌙 Kindred Souls API & Skills Update – Changelog
This update introduces a major new Skill & Progression System and a vastly expanded API for addon developers.
Players can now unlock new skills tied to their chosen roles, while mod makers can define entirely new ability types, skills, and even custom “classes” for Guardians and Wards.
🧭 Major New Features
Skill Tree System
A full progression and unlock system has been implemented. Players can now earn and invest skill points to enhance their chosen ability path.
New Skill Tree GUI
- Accessed via a new keybind (default: N).
- Features a pannable, advancement-style interface with tabs for each available
IAbilityType(e.g., Guardian, Ward). - Skills are displayed as nodes connected by dependency lines.
- Hovering over a skill displays:
- Skill name and description
- Unlock cost and dependency requirements
- Unlocking a skill prompts a confirmation pop-up.
- Player progression is now saved to world data, ensuring persistence across sessions.
⚔️ New Gameplay Mechanic
Skill-based progression now defines how powerful your Guardian or Ward can become. Unlock passive buffs, defensive triggers, or special cooperative effects tied to your bond.
Note:
By default, the standard Guardian and Ward roles do not have any skills.
However, this new API makes it easy for any addon or mod to add skill trees, new ability types, or progression systems to them.
This ensures complete flexibility for addon creators to define how their unique Guardian or Ward subclasses evolve.
🧩 New API for Addon Developers
The IKindredSoulsAPI has been significantly expanded for addon creators.
Developers can now register new abilities, skills, unlock conditions, and integrate seamlessly with the new Skill Tree system.
New Registries
getSkillRegistry()— Register newISkillobjects.
Addons can inject their skills into any ability tab, including the defaults or those from other mods.getSkillUnlockRegistry()— Register newISkillUnlockConditiontypes.
Allows defining unique unlock logic for any skill (e.g., XP cost, item cost, quest completion).
New API Interfaces
ISkill
Defines a skill node in the progression system.
- Requires:
- Unique ID
- Parent Ability Tab
- Name, description, and icon
- GUI coordinates (x, y)
- Dependency list for skill chaining
ISkillUnlockCondition
Defines how a skill is unlocked.
canUnlock(player, skill): Server-side validation (e.g., "has 5 XP levels?")applyCost(player, skill): Applies the cost (e.g., removes XP)getCostDescription(player, skill): Returns descriptive text for the UI (e.g., "Cost: 5 Levels")
New API Methods
isSkillUnlocked(player, skillId)— Check if a player has a specific skill unlocked.
🔥 Event Enhancements
-
SoulbindHurtEventandSoulbindHealEventare now Cancelable.
Addons can now intercept, modify, or cancel the default soulbinding damage and healing logic. -
SoulbindPlayerTickEvent— Fires once per second for every bound player.
Perfect for implementing passive or timed skill effects.
🧑💻 New Commands (Admins & Developers)
-
/skill grant <player> <skill_id>
Grants a skill to a player directly, bypassing dependencies or costs.
Includes tab-completion for all registered skills. -
/skill revoke <player> <skill_id>
Removes a skill from a player.
Includes tab-completion for skills currently unlocked by the target.
🧠 Summary
The Kindred Souls API now provides:
- Full Skill Tree customization
- Extendable Skill and Unlock registries
- Deep event hooks for damage, healing, and ticking logic
- Developer tools for testing and integration
- Freedom for addons to define their own Guardian/Ward skill systems
Download mdk to develop addons
🌙 Kindred Souls 1.1.1 Update
A small but powerful technical update for modpack creators and addon developers.
⚙️ Overview
Version 1.1.1 focuses on giving modpack developers and addon creators more control over how Kindred Souls abilities appear in-game.
This update introduces a new configuration system that automatically detects all registered ability types — whether from Kindred Souls itself or from external addons — and allows you to toggle them individually.
🧩 New Feature: Dynamic Ability Configuration
File Path:config/kindredsouls-abilities.cfg
Kindred Souls 1.1.0
API Update Notes (For Addon Developers)
Hello addon developers! Version 1.1.0 marks a major expansion of the Kindred Souls API — introducing the Ability Types System and improving overall addon integration and flexibility.
This update focuses on API structure, ability customization, and event-driven logic, giving you more control over how Guardian and Ward roles behave.
1. Unified API Access — IKindredSoulsAPI
All API interactions are now unified under a single singleton interface.
You should no longer call managers directly — instead, access everything through IKindredSoulsAPI.
Old (deprecated):
SoulbindManager.getSomeData(...);
New (current):
IKindredSoulsAPI.getInstance().getSomeData(...);
This singleton provides access to all core systems — including the new Ability Registry:
// Retrieve the ability registry
AbilityRegistry registry = IKindredSoulsAPI.getInstance().getAbilityRegistry();
2. Creating and Registering Custom Abilities
The new Ability Types API lets you define your own Guardian and Ward “classes” with custom behavior and lore.
Step 1: Implement IAbilityType
For convenience, you can extend the provided AbilityType class, which handles most boilerplate setup for you.
public class MyShadowGuardianAbility extends AbilityType {
public static final ResourceLocation ID = new ResourceLocation("my_addon", "shadow_guardian");
public static final ResourceLocation ICON = new ResourceLocation("my_addon", "textures/gui/shadow_guardian_icon.png");
public MyShadowGuardianAbility() {
super(
ID,
AbilityRole.GUARDIAN, // The role this ability is tied to
Component.translatable("ability.my_addon.shadow_guardian.name"),
Component.translatable("ability.my_addon.shadow_guardian.desc"),
Component.translatable("ability.my_addon.shadow_guardian.lore"), // Lore for selection UI
ICON
);
}
}
💡 Note:
ThegetLore()component is now synced automatically from the server.
The AbilityLoreRegistry still exists, but its role is solely for defining additional lore entries that are referenced in the selection UI — not for syncing or registration.
Step 2: Register Your Ability
Abilities must be registered via the Ability Registry during the common setup phase (FMLCommonSetupEvent):
IKindredSoulsAPI.getInstance().getAbilityRegistry().register(new MyShadowGuardianAbility());
If multiple abilities exist for the same role, the player will automatically be prompted to choose between them.
Optional: Define Extra Lore (Client-Side)
If you want to define extra lore entries that appear in the selection UI or tooltips, register them through the AbilityLoreRegistry on the client:
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class MyAddonClientSetup {
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
AbilityLoreRegistry.register(
MyShadowGuardianAbility.ID,
Component.translatable("ability.my_addon.shadow_guardian.lore")
);
}
}
3. New Forge Events for Ability Logic
Several new Forge events have been added to let you define custom logic for your abilities.
| Event | Description | Cancelable |
|---|---|---|
SoulbindHurtEvent |
Fired when a bound player is hurt, before damage sharing occurs. Modify or cancel to override logic. | ✅ |
SoulbindHealEvent |
Fired when a bound player heals, before healing is shared. Cancel to implement your own logic. | ✅ |
SoulbindPlayerTickEvent |
Fired once per second for each bound player. Ideal for passive buffs or visual effects. | ❌ |
SoulbindActiveAbilityEvent |
Fired when a player triggers an active ability (you should post this from your keybind handler). | ✅ |
Example: Passive effect logic
@SubscribeEvent
public static void onPlayerTick(SoulbindPlayerTickEvent event) {
ResourceLocation typeId = IKindredSoulsAPI.getInstance().getPlayerAbilityType(event.getPlayer());
if (MyShadowGuardianAbility.ID.equals(typeId)) {
if (event.getPlayer().isCrouching()) {
event.getPlayer().addEffect(new MobEffectInstance(MobEffects.INVISIBILITY, 30, 0, true, false));
}
}
}
4. Additional Technical Updates
-
GUI Networking Overhaul:
All GUI-opening packets (S2C_Open...Packet) are now handled by a centralizedClientPacketHandler, fixing server-side crashes and removing the need forDistExecutorchecks. -
Global Save Data:
SoulbindSaveDatanow stores globally in the Overworld rather than per-dimension.
Internal access remains throughSoulbindManager.getSaveData(). -
Lore Registry Clarification:
The AbilityLoreRegistry remains part of the API but is now purely for defining lore content that appears in UIs or tooltips.
It does not handle registration or synchronization — that’s fully managed by the server.
5. Summary
Kindred Souls 1.1.0 transforms the mod’s backend into a flexible API for addon developers.
You can now:
✅ Create and register your own Guardian and Ward ability types.
✅ Use centralized API access via IKindredSoulsAPI.
✅ Hook into new Forge events for active and passive abilities.
✅ Define UI lore through the AbilityLoreRegistry.
🔧 Migration Tip:
Replace all direct manager references withIKindredSoulsAPI.getInstance().
Only use theAbilityLoreRegistryto define lore, not for syncing or gameplay logic.
🕊️ Kindred Souls v1.06 — Major API & Stability Update
This update marks a major milestone for Kindred Souls, introducing a stable addon API, new quality-of-life improvements, and critical bug fixes for multiplayer and cross-dimensional gameplay.
🌟 Major Features
🔮 Ability & Addon API (v1.0)
The long-awaited Kindred Souls API has arrived, enabling mod developers to create custom extensions and gameplay systems.
-
Ability Registry
- Introduced the
IKindredSoulsAPIandAbilityRegistry, allowing external mods to define new Ability Types (e.g. “Fire Guardian”, “Shadow Ward”). - Each ability can include its own name, description, and icon for full creative flexibility.
- Introduced the
-
Ability Selection GUI
- After two players soulbind, they are now presented with a refined Ability Selection Screen.
- The GUI lists all available Ability Types for each role. If only the default type exists, it’s auto-assigned.
-
Forge Event Hooks
- The API fires a comprehensive suite of events for custom logic integration:
SoulbindHurtEvent— Triggered when a bound player takes damage. Addons can modify or cancel damage-sharing.SoulbindHealEvent— Triggered when healing occurs. Addons can adjust healing distribution.SoulbindPlayerTickEvent— Fires once per second for each bound player, ideal for passive buffs, effects, or monitoring.SoulbindActiveAbilityEvent— A foundational event for keybind-activated custom abilities.
- The API fires a comprehensive suite of events for custom logic integration:
✨ Quality-of-Life Improvements
-
🧭 Action Bar Soulmate Tracker
- Your soulmate’s location and dimension now display in the action bar, updating every second:
- Guardians see:
Ward is at X, Y, Z in [Dimension] - Wards see:
Guardian is at X, Y, Z in [Dimension]
- Guardians see:
- If your partner is offline, it will clearly state so.
- Your soulmate’s location and dimension now display in the action bar, updating every second:
-
⚔️ Lethal Bond Enhancement
- The soul link between Guardian and Ward is now truly fatal.
- If a Ward dies, their Guardian immediately shares their fate — a message will notify the Guardian of the loss.
🐛 Bug Fixes & Stability
-
✅ Fixed: Cross-Dimensional Sync
- Soulbind mechanics (damage, healing, and death link) now function flawlessly across all dimensions — including custom worlds.
-
✅ Fixed: Dedicated Server Startup Crash
- Resolved an issue causing crashes on dedicated servers.
- Client-only code (GUIs, keybinds, etc.) is now safely restricted with
@OnlyIn(Dist.CLIENT). - Network packet handling has been fully refactored for proper side separation.
-
✅ Fixed: Request GUI Player List Crash
- A crash caused by null player names in the “Send New Request” screen has been resolved.
- The player list now safely filters invalid entries and handles dynamic updates correctly.
🧩 Developer Note
- This version solidifies Kindred Souls as both a gameplay experience and a modding platform. Future updates will expand the API with visual effects, sound hooks, and advanced ability customization tools.



