promotional bannermobile promotional banner

Rpgskill

Turn your Paper server into a full MMORPG with classes, skill trees, custom combat, RPG items, bosses, dungeons, quests, economy, guilds, parties and pets.
Back to Files

RPGSkills-3.0.3.jar

File nameRPGSkills-3.0.3.jar
Uploader
Alex_flAlex_fl
Uploaded
Aug 19, 2026
Downloads
69
Size
986.1 KB
File ID
8683343
Type
B
Beta
Supported game versions
  • 1.21.11
  • 1.21.10
  • 1.21.9
  • 1.21.8
  • 1.21.7
  • 1.21.6
  • 1.21.5
  • 1.21.4
  • 1.21.3
  • 1.21.2
  • 1.21.1
  • 1.21

What's new

 

[FIX] Maven could not resolve paper-api
      Cause: the papermc repository had no <snapshots> block. Maven disables
      snapshot resolution per repository by default, so it refused to look there
      at all, then reported the artifact missing from the release-only repos.
      Fix:  snapshots enabled on papermc, explicitly disabled on the other four.

[FIX] com.mojang:brigadier could not be resolved
      Cause: a transitive dependency of paper-api, published by Mojang and only
      proxied by Paper's repository - which a repository-prefix filter misses.
      Fix:  Mojang's own repository declared explicitly in pom.xml.

[FIX] Plugin crashed on startup with NullPointerException (EssentialsX)
      Cause: a debug logging line called economy.format() during reload().
      Economy plugins register with Vault before they finish initialising, so
      the call hit a null settings object while another plugin was still
      enabling. Two further faults in the same line:
        - the message was built BEFORE debug() was called, so the economy call
          ran even with debug disabled - the "gate" was never a gate;
        - VaultHook.format() let any provider exception propagate.
      Fix:  debug() now takes a supplier; startup never calls the economy;
            VaultHook wraps every provider call and warns once on failure.

[FIX] Plugin failed to start when PlaceholderAPI was absent
      Cause: PlaceholderHook extends PlaceholderExpansion. A class extending a
      missing type cannot be LOADED, so no guard inside it can ever run.
      Fix:  every reference isolated in a helper called only when PAPI exists.

[FIX] Migration V8 crashed the server (SQLITE_ERROR near "%")
      Cause: `"...%s..." + "...%s...".formatted(a, b)` - method invocation binds
      tighter than '+', so only the second literal was formatted and a raw %s
      reached SQLite.
      Fix:  single literal per statement. All 9 migrations verified.

[FIX] 24 compilation errors, then 2, then 1 (across several build cycles)
      Included: duplicated constant block, PlayerDeathEvent imported from the
      wrong package, a private-constructor utility being instantiated, an
      override narrowing access, and a LuckPerms Optional I got backwards twice.

[FIX] serialVersionUID missing on 3 exception classes
[FIX] ~46 build warnings from paper-api's annotations
      Fix:  org.jetbrains:annotations added as a provided dependency.



[ADD] Central ownership framework
      SummonKeys       - the ONLY writer of ownership data (persistent data)
      SummonRecord     - owner, type, source skill, lifetime, behaviour
      SummonManager    - the single authority on lifecycle and limits
      RelationshipManager - one answer to "how do these two entities stand?"
      TargetingService - one gate every target selection passes through

[FIX] Summons could attack their owner
      Cause: protection was attempted at the damage event. Cancelling damage
      stops the hit but not the intent - the mob has already SELECTED its owner,
      so it keeps pathing, keeps swinging, and fires a cancelled event forever.
      Fix:  enforcement moved to EntityTargetEvent, so the owner is invisible to
            vanilla's targeting goals. Damage cancellation kept as a second layer.

[FIX] Necromancer summon skills spawned nothing at all
      Cause: the entry guard validated the legacy `entity:` field before the
      preferred `mob:` path was reached. A skill written as `mob: risen-skeleton`
      has no entity type, so apply() returned on its first line. Every summon
      skill in the plugin was dead.

[FIX] Per-type summon limits never applied
      Cause: the limit key passed was the MOB id while the config and the manager
      both use the SKILL id, so no cap ever matched.

[FIX] Summons became permanent after a restart or crash
      Cause: summons are persistent entities and return from disk, but sessions
      live only in memory. With no expiry stamped on the entity itself, every
      summon alive at that moment became a permanent uncontrolled mob.
      Fix:  the entity carries its own expiry, set deliberately LATER than its
            session's, so the session wins normally and the stamp is the net.

[FIX] A summon's kill was worth no experience
      Cause: victim.getKiller() returns null when a summon lands the blow.
      Fix:  the last damager resolves back through ownership to its owner.

[ADD] Reusable mob definitions (mobs.yml, 7 entries)
      Stats are formulas against the owner: "owner_max_health * 0.5". A skill
      names a mob rather than describing one, so changing the Fire Elemental
      once changes every skill that summons it.

[ADD] Raise Dead (Necromancer)
      risen-warrior existed in mobs.yml but no skill could reach it.

[ADD] Summon sessions, 7 events, /rpg summon command, management GUI,
      6 replacement policies, global/dungeon/party caps, and public API.

[FIX] Players ended up with several pets at once
      Cause: PetInstance.entityId is in-memory only. Any path that rebuilt the
      collection produced a pet marked active with no entity handle, so the
      cleanup - which looked the pet up BY ID - silently did nothing before
      spawning a replacement. Worse, the tick loop respawned a pet whenever
      Bukkit.getEntity returned null, which it does for any UNLOADED chunk. That
      respawned a pet every second one drifted out of view.
      Fix:  every spawn path sweeps by ownership stamp first. Three guards run
            before anything is removed - must carry a stamp, must match this
            owner, must be a pet - so a hand-tamed wolf is never touched.

[FIX] Pets never attacked anything
      Cause: pets were spawned in FOLLOW mode, which does not seek targets, and
      no code anywhere set a target. Every pet was decorative.
      Fix:  per-pet behaviour in pets.yml, defending the owner before hunting,
            only Monster types targeted, 8-second recency window on threats.

[FIX] Pets could only level from their owner's kills
[FIX] Buying an evolved form dead-ended its earlier form
      A bought Dire Wolf meant a Wolf Pup silently stopped evolving forever.
      Fix:  the two merge, higher level wins, lower form consumed.

[ADD] Pet shop (7 pets, all purchasable), active-pet limit, summon cooldown,
      targeted dismissal, and gated debug logging (pets.yml -> debug).

 

[FIX] All bosses had identical health
      Cause: the server clamps the max-health attribute, silently. Necro Lord
      (1200), Ember Tyrant (2400) and Void Sovereign (8000) all clamped to the
      same ceiling, so the endgame boss was no tougher than the level-25 one.
      setHealth() then threw because it exceeded the real maximum, and the boss
      bar showed a full boss at ~13% - firing every phase change on spawn.
      Fix:  the applied value is READ BACK rather than assumed, and damage is
            scaled by the same ratio, so each boss still takes its designed
            damage to kill. Same fix applied to boss adds, dungeon mobs and
            summons.

[FIX] ExpressionEvaluator threw on a null formula
      An omitted YAML key reads as null - the commonest config mistake there is -
      and the "or default" method threw instead of returning the default.
      29 call sites, including the armour formula.

[FIX] Area damage hit the caster's own summons and party
      Fix:  TargetSelector now asks the same relationship authority.



[FIX] Menus showed raw tags: <points>, <total>, <description>
      Cause: the lore asked for names the builder never supplied. Found in 5
      menus, not just the one reported: Attributes, Class Info, Skill Info,
      Skill Bind and the Upgrade Forge.

[FIX] One malformed config line blanked an entire menu
      Fix:  rendering now fails per line, falling back to plain text and naming
            the broken line in the console once.

[FIX] The attribute reset button claimed a cost - resetting is free.

[ADD] Guild GUI rebuilt
      GuildService exposes 15 actions; the old GUI reached four. Added an
      interactive bank (deposit/withdraw by click), message of the day, leave
      and disband with confirmation, an online-members row, and a full roster
      menu with promote, demote, kick and leadership transfer. Permissions are
      checked BEFORE a button is offered, so the icon says why it is unavailable.
      You cannot promote anyone to or past your own rank.

 

This mod has no additional files