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-version 26.1 in plugin.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 world condition for coarse filtering)
  • Custom mob plugins (use target_type for vanilla entity types)