Suite 21 — In Progress¶
Suite 21 opened with the addition of rpg-crafting and rpg-smelting. The suite is still open; entries below are compiled as work lands.
Notable changes¶
rpg-parties 0.4.0 — Party GUI¶
/party(no args) now opens a 54-slot inventory GUI instead of showing a text usage hint.- In-party layout: Party Info at slot 4 (member count, party ID), Invite button at slot 8, up to 21 member cards in rows 2–4, Leave/Disband at slot 53, Close at slot 49.
- Member cards: PLAYER_HEAD skulls via
SkullMeta.setOwningPlayer; name shows[Owner]/[Mod]/[Member]prefix in colour + online/offline status + HP percentage. - Invite flow: click Invite → inventory closes → one-tick scheduler delay → sign-entry for player name → invite sent → GUI reopens. A
pendingInviteguard preventsInventoryCloseEventfrom tearing down GUI state during the sign-entry sequence. - Promote / Demote: left-click a member card (owner only) — toggles mod ↔ member with a chat confirmation.
- Kick: right-click a member card (owner or mod, online non-owner) → confirmation overlay at slots 20/22/24 replaces all GUI content.
- Leave / Disband: slot 53 shows Leave (non-owner) or Disband (owner); both trigger the same confirmation overlay before acting.
- No-party mode: single Create Party button at slot 22; clicking calls
PartyManager.create. onQuithandler cleans all per-player state (openInvs,slotToMember,pendingConfirm,pendingInvite) to prevent memory leaks on disconnect.
rpg-core 1.10.14 — Player Profile Command¶
/profile [player]— opens a 54-slot profile GUI. No argument = your own profile; with argument = another player's (requiresrpg.profile.view.others).- GUI layout: player skull (with party membership), 8 skill levels (Combat / Mining / Foraging / Fishing / Farming / Cooking / Alchemy / Enchanting), balance (if rpg-economy is loaded), 3 most-recently-unlocked achievements (definition order), a "View Stats →" button that drills into StatsGui with a Back callback, and a "Trade →" button when viewing another player.
- Economy, achievement, and party sections degrade gracefully (show "unavailable") if those services aren't loaded.
- New permissions:
rpg.profile.view(default: true),rpg.profile.view.others(default: op).
rpg-parties 0.3.0 — Party HP Action-Bar HUD¶
- Each online party member with at least one other online teammate now receives a repeating action-bar showing teammates' current HP percentages:
❤ Alice 85% | ❤ Bob 23%. - Color coding: green > 70%, yellow 30–70%, red < 30%.
- Controlled by two new config keys in rpg-parties
config.yml: party-hud.enabled: true— toggle the HUD on/off.party-hud.interval-ticks: 20— refresh rate (20 ticks = 1 second).- Solo members (party of 1) see nothing; the action bar is only sent when there is at least one other online teammate to display.
rpg-core 1.10.13 — Ability DSL: Numeric Variables (Tier 2)¶
- 7 new numeric-variable ability effects, stored as doubles in entity PDC under
rpg_var_<name>. Auto-cleared on entity removal (death / logout). Available for both mob and item abilities. set_var{name,value}— set variable to an exact valueincrement{name,amount=1,max=}— addamount; clamp tomaxif specifieddecrement{name,amount=1,min=0}— subtractamount; clamp tominreset{name}— set variable to 0if_var_gte{name,value}— gate: chain continues only if var ≥ valueif_var_lte{name,value}— gate: chain continues only if var ≤ valueif_var_eq{name,value}— gate: chain continues only if var ≈ value (within 1e-9)- Gate effects respect the existing
ctx.isBlocked()mechanism (same aschance{},if_health_below{}). - Static
VarEffect.read(entity, name)lets other effects query a variable value programmatically. - 4 showcase abilities added to
abilities/example.yml:combo_strike(3-hit combo),enrage_stacks(mob enrage cap),enrage_hit(companion hit effect),escalating_beam(charge-up wand).
rpg-quests 0.1.0 — Quest Chains + Repeatable Quests¶
Requires:field — scalar string or YAML list of quest IDs. A quest cannot be accepted until every listed prerequisite quest is in the player's completed list. Enables multi-stage quest chains.Repeatable: true+CooldownSeconds: N— after completion a repeatable quest can be re-accepted once the cooldown elapses. Remaining time is formatted as a human-readable string (1d 3h,45m,30s). Repeatable quests stay in thecompletedlist between runs so they continue to satisfy chain prerequisites on other quests.- 3 new messages in
messages.yml:quest.already-completed,quest.requires-quest,quest.cooldown. - Example quests updated:
forest_intro → goblin_menace → goblin_hunt_iithree-quest chain;daily_ore_run24-hour repeatable quest. - Bug fix:
complete()now guards against adding duplicate IDs to thecompletedlist (was possible if a quest was force-completed via command while already present).
rpg-core 1.10.12 — Mob Factions + AI Goals¶
Faction:field on mob YAML. Any mob can now declareFaction: <string>— a plain label that identifies which group it belongs to."player"is reserved and matches all players. No registry needed; factions are purely string comparisons.AiGoals:ordered goal list. Replaces the singleprofile:kind for mobs that declare it. Goals are evaluated top-to-bottom each AI tick; the first one that acts wins. Mobs withoutAiGoals:continue usingMobAiProfile.Kindunchanged.- Goals implemented:
attack_player,attack_faction{faction,range},defend_faction{faction,radius},assist_faction{faction,radius},flee_from{faction,range,healthThreshold},call_for_help{faction,radius},guard_radius{radius},idle. call_for_helpis event-driven — fires immediately on hurt (no tick lag), alerting idle nearby allies without interrupting already-engaged mobs.guard_radiustracks spawn location in memory on first AI tick; clears target when mob drifts outside the leash radius.- Hysteresis on target switching — valid targets already within
range × 1.5are kept to prevent jitter when mobs dance near range boundaries. flee_fromclears the combat target and applies a velocity push away from the nearest threat each tick. Flee only activates at or belowhealthThresholdHP%.FactionAlertMap— sharedConcurrentHashMap<victimUUID, attacker>populated byMobAbilityEventListeneron every RPG hurt event; stale entries pruned lazily by liveness check and explicitly on mob death.- Three showcase mobs added to
mobs/example.yml:forest_guard(guards faction — hunts undead, assists allies, guard_radius leash),undead_minion(undead faction — attacks players, calls for help),cowardly_witch(flees players when ≤40% HP).
rpg-core — Remove vanilla XP bar config stub; add status effect examples¶
vanilla-xp-barconfig key removed. The setting was never implemented in Java (noplayer.setExp()call existed) — it was documentation-only, making it a misleading stub. The vanilla XP bar is now left untouched sorpg-enchanting's level cost display works correctly.docs/core/vanilla-suppression.mdupdated: XP row in the "Repurposed vanilla bars" table now notes the bar is intentionally unmodified.- Six new status effects in
status-effects/example.yml:weakness(−30% damage, −20 strength),vulnerability(−35% defense, −10 true_defense),mana_drain(−40% max_mana, −80% mana_regen),blindness(−60% crit_chance, −40% magic_find),speed_boost(+40% speed),thorns(+20 defense, +5 true_defense — reflect mechanic needs a code hook to complete).
rpg-crafting — Fill out example recipes¶
- Replaced the two commented-out stubs in
recipes/example.ymlwith four live recipes that cover all four recipe patterns: shaped_iron_shortsword— shaped, vanilla ingredients → custom RPG itemshaped_crude_iron_ingot— shaped, vanilla → custom (9 nuggets)shapeless_antidote_flask— shapeless, custom + vanilla → customshaped_red_gems— shaped, multi-amount output (3×red_gem)
rpg-core 1.10.11 — Loot tables consolidated into loot pools¶
- The separate
loot-tables/folder,LootTableRegistry,CoreLootTableRegistry, andLootTableLoaderhave been removed. There was only one loot system from this point on: loot pools (loot-pools/*.yml,LootPoolRegistry). LootTable: <id>(plain-string form in mob YAML) is now deprecated — it is still accepted but logs a warning and is treated as an alias forLootPool: <id>. Update toLootPool: <id>at your convenience.- Inline
LootTable:(block form inside a mob YAML) is unchanged and continues to work as before. LootChestRegistryand/rpg loot-chest definetab completion now resolve againstlootPools()instead of the removedlootTables().- Docs:
loot-tables.mdreplaced with a migration guide; content index updated to point toloot-pools.md.
rpg-accessories 0.1.1 — Family stacking + in-bag upgrade button¶
- Family stacking:
ACCESSORYitems now support anAccessory: { Family:, Stacking: }block. Three stacking modes:highest(default — only the best copy of a family counts),sum(every copy adds stats),independent(sum + each copy fires its own passive ability hooks). Items without a family always stack independently. - Upgrade button: the last slot of the bag is now a permanent UI button — a NETHER_STAR showing the current/next tier and upgrade cost. Clicking it charges the player and reopens the bag at the new size. The button slot is never saved or treated as an accessory slot. Usable slots per tier: 8 / 17 / 26 / 35 / 44 / 53.
/accessories upgradealso reopens the bag automatically after a successful upgrade.AccessoryService.aggregateStatsis now family-aware; the stat-skip for the button slot is baked in.
rpg-core 1.10.10 — Cooldown gate blocks the ability chain with action-bar feedback¶
cooldown{}now acts as a gate: if the ability key is on cooldown when the effect fires, the chain is blocked (ctx.setBlocked(true)) and the caster sees an action-bar message —Ability on cooldown — X.Xs remaining(red + yellow, proper Adventure Component). Previously the effect only SET the cooldown and never checked it.- Remaining time is formatted as a whole number when it falls on an exact second (
3s) and with one decimal otherwise (3.5s).
rpg-holograms 0.0.5 — Animated holograms, info/set subcommands, line list op¶
Animated: true+FrameInterval: NYAML fields on hologram definitions. WhenAnimated: true, all entries inLinesbecome animation frames: a singleTextDisplayentity cycles through them at the configured tick interval. A single global 1-tickBukkitTaskdrives all animated holograms via per-hologramframeTicks/frameIndicesmaps — no per-hologram task overhead./holograms info <id>subcommand: prints id, world + coordinates, animated status, frame interval, line/frame count, and all line content./holograms line list <id>op: lists all lines with[index]prefix./holograms set <id> animated <true|false>: toggle animation on/off and respawn the hologram./holograms set <id> frameinterval <ticks>: adjust frame rate without respawn.- Tab completions updated:
infoandsetnow appear in subcommand completions;setarg-3 completes with property names (animated,frameinterval);set animatedarg-4 completes withtrue/false. config.yml:animation-interval: 20default added.
rpg-cooking 0.4.1 — Dedicated output slot + offline timer advancement¶
- Output slot (GUI slot 16): a PDC-tagged gray-dye placeholder occupies the slot until the craft completes. The player must click the slot to collect the finished item.
- Auto-collect on close: if the output slot holds a finished item when the GUI closes, it is automatically moved to the player's inventory.
- New craft blocked: clicking a recipe tile is rejected if the output slot already holds a finished item;
cook.collect-outputmessage sent. - Offline advancement:
timestamp_ms(real epoch ms) saved alongsideelapsed_tickson GUI close. On reopen,offlineTicks = (now - savedMs) / 50is added to elapsed — cooking continues while the player is offline or the server is restarted. - Arrow (slot 15): orange-dye decorative indicator between ingredients and output.
- New message key
cook.collect-outputinmessages.yml.
rpg-alchemy 0.4.2 — Dedicated output slot + offline timer advancement¶
- Same pattern as rpg-cooking 0.4.1: output slot at GUI slot 16, arrow at slot 15 (purple dye), offline
timestamp_msadvancement, auto-collect on close, new-brew blocked while slot occupied. - New message key
brew.collect-outputinmessages.yml.
rpg-smelting 0.1.1 — Dedicated output slot + offline timer advancement¶
- Same pattern: output slot at GUI slot 15, arrow at slot 14 (orange dye), offline
timestamp_msadvancement, auto-collect on close, new-smelt blocked while slot occupied. - DataStore record now includes
timestamp_msalongsiderecipe_idandelapsed_ticks. - New message key
smelt.collect-outputinmessages.yml.
rpg-core 1.10.18 — Admin Spawner GUI (/spawner edit)¶
SpawnerGui— new 54-slot inventory GUI for editing all spawner fields. Opened via/spawner edit <id>(requiresrpg.spawners.admin.edit).- Slot layout: slot 4 SPAWNER title (id + mob), slot 10 max-alive (COMPARATOR), slot 12 cooldown-ticks (CLOCK), slot 13 spawn-radius (COMPASS), slot 16 continuous toggle (LIME/GRAY_DYE), slot 21 min-level (LIME_DYE), slot 23 max-level (RED_DYE), slot 24 location read-only (GRASS_BLOCK), slot 49 close (BARRIER).
- Numeric fields: click opens a sign-entry prompt via
SignInputService; validated against min/max bounds; saved immediately viaSpawnerManager.saveOne. - Continuous toggle: click flips the boolean and updates the item in-place; no sign entry needed.
/spawner set <id> <field> <value>command also documented (was previously undocumented): direct CLI editing of the same fields without opening the GUI.- Tab completion:
editadded to subcommand list; spawner IDs complete foredit.
rpg-holograms 0.0.4 — Tab completions for /holograms¶
- All
/hologramssubcommands now offer tab completions. - Subcommand name at arg 1; hologram IDs (from the live registry) at arg 2 for
delete,tp,move; line ops (add/set/remove) at arg 2 forline; hologram IDs at arg 3 for line ops; existing line indices at arg 4 forline set/line remove. - All completions are case-insensitive prefix-filtered against what the player has typed so far.
rpg-alchemy 0.4.1 — Configurable return item after drinking a potion¶
- New global config key
drink-return.iteminconfig.yml. Acceptsnone(default — glass bottle is already suppressed),glass_bottle, any vanilla Material name, or any rpg-core item id. - New per-potion
ReturnItem:field inpotions/*.yml. When present it overrides the global default for that specific potion. Absent means fall through to global config. - Resolution order: RPG item registry → vanilla Material → warning + nothing. Leftover items that don't fit the inventory are dropped naturally.
rpg-core 1.10.9 — Cooldown time in ability lore¶
cooldown{ticks=N}bindings now display the duration in the ability's lore hint:(Right-click | 5s cd). Whole-second values show as5s; fractional as3.5s. Bindings without a cooldown are unchanged.
rpg-core 1.10.8 — Vanilla XP split to damagers¶
- On RPG mob death, vanilla XP (from
XP:, inlineexp:, and poolexp:fields) is no longer dropped as orb entities. Instead it is split directly to each damager proportional to damage dealt viaplayer.giveExp(). Players offline at kill time receive nothing.
rpg-core 1.10.6 — Item type label + configurable stat order¶
- Item type label in lore: the item's type (e.g.
Sword,Armor,Wand) now renders as dark-gray italic on the first lore line, followed by a blank line before stats. stat-order.yml: controls which stats appear first in lore per item type. Shipped with sensible defaults for allBuiltinItemTypevalues. Edit the file and run/rpg reload— no restart needed. Stats not listed appear after configured ones, alphabetically.
rpg-core 1.10.5 — Item Browser GUI¶
/rpg itemsopens a 54-slot paginated inventory GUI listing every registered item.- Filters: cycle item Type, cycle Rarity, sign-entry Search.
- Click a card to receive ×1; shift-click to receive ×64 (requires
rpg.core.item.give). - Inventory updates in-place (no close/reopen flicker).
- New permissions:
rpg.core.items.browse(browse),rpg.core.item.give(give from browser).
rpg-core 1.10.4 — ~on_login trigger + beam pierce cap¶
~on_login(rpg-api 0.5.5): item ability trigger that fires once when the holding player joins. Useful for login buffs, stat refreshes, or conditional unlocks.pierce_caponbeam{}: controls how many entities the beam hits before stopping. Default1(original behaviour). Set0for unlimited. Knockback applies to all hits;ctx.targetis the first hit.
rpg-fishing 0.1.0 — Fishing content slice¶
- Custom catch tables loaded from
catch-tables/*.yml. FISHING_FORTUNEboosts fortune-affected entry chances;FISHING_SPEEDshortens bobber wait time;FISHING_WISDOMscales XP per catch.- Catch message sent to player on land.
/fishing reloadcommand.- Bundled
default.ymlwith fish, junk, and treasure entries.
rpg-bossbar 0.1.0 — Boss bar system¶
BossBar: {Color, Style, Range}field in mob YAML activates a proximity boss bar.- Per-player show/hide task (range-based); HP fraction updates via
PostDamageEvent. RpgServices.bossBar()API.ancient_golemexample mob added.
rpg-core 1.8.0 — Sign-entry utility + spawn_mob effect¶
SignInputService(rpg-api 0.5.2):RpgServices.signInput().ask(player, label, callback)opens a virtual sign editor and delivers text on submit (60 s timeout;nullon cancel / disconnect).spawn_mob{}ability effect: spawns a registered mob at the caster, target, or beam point.owned=truetags the mob to the caster (no friendly fire; despawns on logout; per-caster cap configurable).
rpg-core 1.7.0 — Ability DSL expansion + stats GUI¶
- 15 new built-in ability effects:
- Target selection:
nearest_enemy{},farthest_enemy{},nearest_ally{priority=},random_enemy{},self{} - Conditional gates:
if_health_below{},if_health_above{},if_mana_below{},if_mana_above{},if_marked{},if_target_has_status{id=},if_flag{name=},if_not_flag{name=} - Flag mutation:
set_flag{name=},clear_flag{name=} /statscommand now opens a 54-slot inventory GUI: gear column, per-category stat breakdowns, Trade button when viewing another player.
rpg-regions 0.6.0 — New flags + enter/exit messages¶
- New flags:
enter-message,leave-message(title or[actionbar]prefix;{player}/{region}placeholders),no-mob-spawn,no-damage,fly,no-item-drop,keep-inventory.
rpg-alchemy 0.3.2 / rpg-cooking 0.3.1 / rpg-enchanting 0.4.1 — GUI station overhaul¶
All three station GUIs were expanded from 36/45 → 54 slots and given a consistent layout pass.
rpg-alchemy 0.3.2 (Brewing station): - Ingredient slots moved to row 1, centred (slots 12–14), matching cooking station - Recipe tiles start at row 2 (slot 18); 27 recipes per page (rows 2–4) - Pagination: PREV at slot 45 / Close at 49 / NEXT at 53
rpg-cooking 0.3.1 (Cooking station): - Ingredient slots shifted to slots 12–14 (row 1, centred) — identical position to brewing - Recipe tiles start at slot 18 (row 2); 27 per page - Same PREV / Close / NEXT pagination nav as brewing
rpg-enchanting 0.4.1 (Enchanting table):
- ENCHANTING mode: per-player page state; PREV at 45 / page indicator at 47 / Close at 49 / NEXT at 53; refreshEnchanting is page-aware; tryApplyEnchant uses page offset to resolve the correct enchant
- ANVIL mode: Close button added at slot 49 (no pagination needed)
rpg-enchanting 0.6.0 — Telekinesis¶
- New
telekinesisenchant /Telekinetic Edgereforge stone /Telekinesis Scrollupgrade book. All tag the item withauto_loot: 1— drops from broken blocks and slain mobs go directly to inventory. Requiresrpg-enchanting.
rpg-economy 0.2.0 — Vault bridge¶
- Vault provider registered at
ServicePriority.Normal, enabling economy integration with third-party plugins that target the Vault API.
rpg-core 1.6.1 — Beacon suppression¶
- Beacon status effects now suppressed alongside other vanilla effects when
vanilla-suppression.beacons: trueis set.
rpg-core 1.6.0 — Mob death animation¶
DeathParticle,DeathParticleCount,DeathParticleSpread,DeathSoundYAML fields on mobs.MobDeathAnimListenerplays particle burst + sound and zeroes knockback velocity at death.
Permission additions (various)¶
rpg.core.particle— controls ability particle rendering.rpg.core.items.browse— browse item GUI (/rpg items).rpg.core.fix— fix orphaned movement-speed modifiers (/rpg fix).rpg.regions.admin.global— grants access to global region flags.
Bug fixes (suite 21)¶
- Mob stuck Slowness (
rpg-core 1.8.1):EquipmentListenerscrubs orphanedMOVEMENT_SPEEDmodifiers on recalc;/rpg fix [player]command for manual recovery. - Frost Golem permanent Slowness (
rpg-core 1.3.1): zone pulses now usenullattacker to prevent~onHitcascade. - Item Browser NPE on search (
rpg-core 1.10.7): null-safe guards ondisplayName()andrarity()in search/filter predicates.