promotional bannermobile promotional banner

Runic Skills

Runic Skills is a Minecraft 1.20.1 Forge RPG progression mod that adds ten levelable skills, auto-scaling passive bonuses, and hundreds of toggleable perks so players can shape a real build through normal gameplay. Designed for the Runecraft modpack.

File Details

Runic Skills 0.9.3 (Forge 1.20.1)

  • R
  • Apr 17, 2026
  • 1.12 MB
  • 40
  • 1.20.1
  • Forge

File Name

runicskills-0.9.3.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:runic-skills-1516283:7938053")
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

Changelog

[0.9.3] - 2026-04-16

Balance

  • Critical: limitBreakerAmplifier default lowered from 999.0f to 30.0f. The Limit Breaker perk previously dealt 999 raw damage on a 60-second cooldown — effectively a guaranteed instakill against any non-boss target. New default is a meaningful spike (~15 hearts) that survivors of high-Constitution / heavy-armor builds can endure.
  • luckyDropProbability 10 -> 25 and luckyDropModifier 2.0 -> 1.5: the previous defaults turned spawner farms into 20-40x loot inflation. Still rewarding for Fortune builds without trivializing all gathering.
  • counterAttackDuration 3 -> 1 and counterAttackPercent 50 -> 30: 3-second / 50% counter window made melee mitigation strictly dominant in PvP. Tightened to a 1-second / 30% window so it is a reactive defense, not a passive mitigation aura.
  • treasureHunterProbability 500 -> 200: 0.2% per dirt block was too sparse to feel like a perk; 0.5% reads as "rewarding" without becoming a farm.
  • playersMaxGlobalLevel 256 -> 320: with 10 skills × 32 max per-skill, the previous 256 cap forced 25.6 avg per skill — players could not reach top-tier perks across multiple trees. 320 allows full specialization across all skills if pursued.

Performance

  • Skill.getPerks / Skill.getPassives: replaced two-stream().toList()-per-iteration loops with a direct for-each. Eliminates O(n) list allocation per call on the perk/passive registry (called from GUI render and several event paths).

Changed

  • Perk.isEnabled(Player) no longer short-circuits to false when the player is in isDeadOrDying(). Perks now remain enabled through the death frame, allowing last-stand counterplay for triggers like Counter Attack and Life Eater on the killing blow.

Assets

  • Refreshed armor_piercing.png and passive_life_steal.png (Strength tree icons).

Security

  • Critical: removed CounterAttackSP exploit where the client could supply an arbitrary attack-damage modifier. Counter-attack damage is now computed entirely server-side in CombatEventHandler and the serverbound packet is no longer registered. The feature was previously broken (direction mismatch with the only sender) and now actually works.
  • SetPlayerTitleSP now rejects unknown titles, missing capabilities, and titles the player has not unlocked. A malicious client can no longer force admin/locked titles. Added titlesUseCustomName config flag (default true) to gate the setCustomName write for compatibility with chat/nick mods.
  • Replaced ObjectInputStream/ObjectOutputStream in ConfigSyncCP and CommonConfigSyncCP with FriendlyByteBuf field-by-field encoding plus bounded readVarInt/readCollection and a MAX_SYNCED_LIST cap. Closes a Java-serialization gadget surface and prevents unbounded allocations from oversized payloads.
  • Bumped network channel PROTOCOL_VERSION from 1 to 2. Old clients will fail fast on join instead of mis-decoding the new wire format.

Fixed

  • Joining a server no longer overwrites the user's local runicskills-common.json5 config file. Removed HandlerCommonConfig.HANDLER.save() from CommonConfigSyncCP and DynamicConfigSyncCP.
  • Eliminated dedicated-server crash risks: SkillCapability, Passive, and Perk no longer import net.minecraft.client.* or Screen. The no-arg SkillCapability.get() was replaced with a getLocal() indirection routed through a client-registered supplier; tooltip building moved to new client/tooltip/PassiveTooltip and PerkTooltip helpers.
  • Fixed MixVillager runaway haggler discount: each call to updateSpecialPrices now undoes the previously-applied per-offer delta before applying a fresh one, instead of compounding indefinitely across trade-UI reopens.
  • Fixed Utils.intToRoman (was duplicating the thousands array and missing the units array — 1994 now correctly produces MCMXCIV).
  • Converted MixPlayer.getMaxAirSupply from a fragile bare implicit override to an explicit @Inject(method = "getMaxAirSupply", at = @At("RETURN"), cancellable = true) targeting Entity (where the method actually lives). Now resilient to vanilla signature drift.
  • Documented MixLivingEntity activeEffects invariants so future patches understand which vanilla guarantees the mixin preserves.

Changed

  • Optional integrations (Curios, TacZ, CrayfishGuns, ScorchedGuns2, IronsSpellbooks, ArsNouveau, Apotheosis) are now loaded via Class.forName(string) so the integration class is never in RunicSkills' constant pool. The mod no longer crashes at load time when a dependency mod is absent. Each integration's isModLoaded() check still gates instantiation.
  • RegistryClientEvents moved from registry/ to client/event/ (matches its actual sidedness).
  • LockItem lost its legacy formatString / getLockItemFromString parser and the YACL string-encoded round-trip. ConfigSyncCP now serializes lock items field-by-field via FriendlyByteBuf (item id, skill enum ordinal, level) with bounds caps.
  • Added ./gradlew checkSidedImports lint task that fails the build on any import net.minecraft.client.* or com.mojang.blaze3d.* outside the client/integration allowlist. Wired into check, so ./gradlew build runs it automatically.

Removed

  • Deleted TetraIntegration and all references in CombatEventHandler, InteractionEventHandler, RegistryClientEvents, plus the tetra_* Gradle dependencies. The integration was imported but never wired into the mod constructor — dead code.

[0.9.1] - 2026-04-08

Changed

  • Renamed project from JustLevelingFork to Runic Skills
  • Rebranded mod ID, package, and all internal references
  • Changed GUI text color from dark grey to white for improved readability

[0.9.0] - Initial Runic Skills release

Added

  • Forked from JustLevelingFork
  • Redesigned perk and skill GUI with paginated layout
  • Title selection panel with scrollable list
  • New skill categories: Endurance, Fortune, Wisdom (replacing Defense, Luck, Building)
  • Perk rank system with multi-rank support
  • Passive attribute system per skill
  • KubeJS integration for scripting
  • Ars Nouveau, Tetra, and Apothic Attributes optional integrations
  • YACL-based configuration UI