Skip to content

Changelog

Navigation: Documentation Home · Contents · FAQ · Item Source References · Glossary

This project follows Semantic Versioning (SemVer): the version number format is MAJOR.MINOR.PATCH. Increment the MINOR version when adding backward-compatible features, and the PATCH version for backward-compatible fixes.

Current version: 1.3.0, about 150 Kotlin files.


[1.3.0] - 2026-06-28

Compatibility extended to Minecraft 1.21.11 ~ 26.2.x (api-version stays 1.21, forward-compatible, no config changes needed).

Added — Combat pipeline (major backbone upgrade)

  • Slot / source-aware modifiers: attribute modifiers can be tagged with an active slot (main hand / off hand / armor / accessory) and are filtered per hand in combat. Untagged modifiers behave exactly as before.
  • Pluggable attack sources: new AttackHandler registry lets other plugins register custom damage sources so non-vanilla causes also flow through the packet pipeline.
  • DamagePacket is now a computation substrate: damage components can be appended / scaled by type or element / recomputed inside the event (event.addPacket / scaleType / scaleElement / scaleAll) — consumers are no longer limited to the final scalar.
  • Timed-modifier fold cache: pure performance; combat reads no longer re-fold every timed buff each hit (byte-identical output).

Added — Activated combat attributes

  • crit_resist: lowers the chance of being crit (subtracted from the attacker's crit rate).
  • reflection: reflects a portion of incoming damage back to the attacker. Driven by the editable scripts/attributes/reflection.js.
  • spell_vampirism: heal a portion when dealing magic/skill damage — symmetric to physical lifesteal. Driven by the editable scripts/attributes/spell_vampirism.js, fired by the new on_magic_damage_dealt hook event.
  • Skill-damage isolation: if MM skill damage lands as ENTITY_ATTACK, MythicLib's damage type is used to isolate it from the physical melee pipeline so it isn't wrongly given physical bonus/crit (toggle combat.isolate-mythiclib-skill-damage). Requires MythicLib; best practice is still to configure skill damage as MAGIC cause.

Added — Modern 1.21 vanilla attributes

  • 18 vanilla 1.21 attributes (vanillaKey-backed): scale, jump_strength, gravity, step_height, safe_fall_distance, fall_damage_multiplier, burning_time, explosion_knockback_resistance, movement_efficiency, water_movement_efficiency, oxygen_bonus, block_interaction_range, entity_interaction_range, block_break_speed, mining_efficiency, submerged_mining_speed, sneaking_speed, sweeping_damage_ratio.
  • Items / classes can declare them directly, e.g. an item providers.ap.value with "scale":1.2. Attributes absent on older servers are skipped silently, no errors.

Added — PAPI placeholders (cooldown reduction / generic mitigation)

  • %qinhcorelib_cdr%: cooldown reduction value (0~0.9).
  • %qinhcorelib_cdrmult%: the 1 - cooldown_reduction multiplier.
  • %qinhcorelib_cdrapply_<baseCooldown>%: the already-reduced cooldown. MythicMobs skills can use Cooldown: "%qinhcorelib_cdrapply_100%" directly — no QinhSkills required, works with plain MM + CoreLib.
  • %qinhcorelib_reduceapply_<attr>_<base>%: generic "reduce a base value by a mitigation-type attribute", reusable for any 0~1 mitigation attribute.

Fixed — Forward-compatibility gate

  • Startup version check is now forward fail-open: the old logic, when it couldn't parse the server version string (new format / non-standard fork), treated it as "unrecognized" and disabled the plugin, making newer servers wrongly report incompatibility and taking down the whole suite (QI/QC/QS/QR depend on this library). Now: unparseable / unknown / newer versions are all allowed through; only versions definitively older than 1.21.11 are rejected.
  • When newer than the tested version it only logs a warning and starts normally; for strict behavior set compatibility.strict-version-check: true in config.yml (default off), which rejects versions newer than tested.

Other

  • Custom-attribute hooks now accept on_magic_damage_dealt (bindable to custom attributes in attributes.yml).

[1.2.0] - 2026-06-20

  • Native attribute backend (native) refined; added the Attribute System docs (with a custom-attribute tutorial).

[1.1.0] - 2026-06-14

Added

  • ItemsAdder item source: reference format ia-namespace_id or itemsadder:namespace:id.
  • Nexo item source: reference format nexo-id or nexo:id.
  • Both of the above sources are reflection bridges, automatically skipped when the corresponding plugin is not installed (graceful degradation, no error).
  • The ItemSourceType enum gains two new values: ITEMSADDER / NEXO.
  • All callers that go through ItemSourceManager.parseItemReference automatically support these two new sources; sub-plugins need no code changes.
  • plugin.yml's softdepend adds ItemsAdder / Nexo.

[1.0.8] - First public release

Added

  • Unified item sources: Vanilla, CraftEngine, MMOItems, NeigeItems, QinhItems, MythicMobs, CustomFishing, MagicGem.
  • Unified attribute pipeline: unified handling of cross-source attributes.
  • Custom block bridge (CraftEngine).
  • ModelEngine model bridge.
  • Script engine (GraalVM).
  • Economy bridge / placeholder bridge and other external integration capabilities.

Continue Reading