Integrations
Last updated Sep 21, 2026
Integrations
Soft dependencies and bridges that SoapsTraits actually ships. Documented against plugin.yml and source for 1.1.5.
Required
| Plugin | Role |
|---|---|
| SoapsCommon | Shared startup banner, config merge on reload, SoapsConfigKeys (gui.enabled), MiniMessage / legacy text parsing |
Without SoapsCommon the plugin will not enable.
Soft dependencies
| Plugin | Role |
|---|---|
| MythicLib | Stat modifiers (stats:, add_stat, has_stat) |
| MMOCore | Class binding (join/respawn sync), mana, level, combat tag |
| PlaceholderAPI | %soapstraits_*% placeholders |
MythicLib
Recommended. Powers all stat modifier features.
| Feature | Bridge behavior |
|---|---|
Trait stats: block |
Registers base modifiers on assign/reload |
add_stat action |
Temporary modifiers with optional duration |
has_stat condition |
Reads MythicLib stat totals |
| Damage bonus / reduce | Scales MythicLib damage packets when present |
YAML keys map to MythicLib stats automatically. See Stats System.
Without MythicLib, console warns that stat modifier features are disabled. Heal, particles, sounds, and similar actions still work.
MMOCore
Recommended for class-based servers.
| Feature | Bridge behavior |
|---|---|
class: on traits |
Used when syncing trait to the player's MMOCore class |
| Join / respawn sync | PlayerListener retries syncTraitToClass then applies traits |
give_mana action |
Restores mana through MMOCore API |
mana_above / mana_below |
Reads current mana vs MythicLib max mana percent |
level_above |
Reads MMOCore player level (>=) |
is_in_combat |
Reads MMOCore combat tag |
skill_cast trigger |
Enum/YAML accepted — not dispatched (no skill-cast listener) |
Class binding example:
mage:
class: MAGE
The value must match PlayerData.getProfess().getId() from MMOCore (example: WARRIOR, MAGE, HUMAN).
On join and respawn, syncTraitToClass() / ensureTrait() picks the matching trait or falls back to default-trait. There is no dedicated MMOCore class-change event listener in this build; class changes apply on the next join/respawn sync (or admin /sts set).
Without MMOCore, mana/level/combat conditions fail closed and give_mana does nothing.
PlaceholderAPI
Registered when PlaceholderAPI is present at startup.
| Placeholder | Value |
|---|---|
%soapstraits_trait% |
Active trait id (alias: %soapstraits_trait_name%) |
%soapstraits_enabled% |
true / false (effects toggle) |
%soapstraits_class% |
Bound class on the trait (alias: %soapstraits_bound_class%) |
%soapstraits_mmocore_class% |
Current MMOCore class id (empty if unavailable) |
%soapstraits_effects% |
Effect count (alias: %soapstraits_effect_count%) |
Plugin load order
From plugin.yml:
depend:
- SoapsCommon
softdepend:
- MythicLib
- MMOCore
- PlaceholderAPI
SoapsCommon always loads first. Soft deps should be present at startup for clean integration.
Platform
- Targets Paper (
api-version26.1 inplugin.yml; suite docs use Paper 26.2) - Spigot and Folia are not supported
- Java 21+ (tested on Paper 26.2, Java 25)
- Combat listeners use standard Bukkit events (
EntityDamageByEntityEvent, etc.)
Not integrated
- Vault economy
- WorldGuard regions (use
worldcondition for coarse filtering) - Custom mob plugins (use
target_typefor vanilla entity types)