A Minecraft RPG plugin adding nine playable supernatural races, each with unique active abilities, passives, weaknesses, and a skill-point progression of their own. The most ambitious spigot plugin I attempted to develop, and ultimately the one I refactored myself out of.
Supernatural turns survival Minecraft into a class-based RPG. Players choose one of nine supernatural races; each race comes with its own active abilities, passive effects, racial weaknesses, and a separate skill-point progression. Combat, mob behaviour, follower AI, chat, food, light exposure, and water all bend around the player's race.
Built on Spigot 1.16.5 with a soft requirement on Vault (economy/permissions) and packet-level work via ProtocolLib. At its peak the codebase sat at roughly 13,400 lines across 145 source files, last built in August 2021.
Each race occupies its own package of actions and is intended to play meaningfully differently, the ability kits and weakness profiles cover the whole spectrum from melee bruiser to support caster to nocturnal hunter. Click any race for the full breakdown.
Action / Target / Damage / Input layer, so adding a new ability was a matter of dropping a class into the right race package and wiring the inputs.SkillPointMenu) with /sn level, /sn skillpoints, and a respec command for refunding allocations./bounty, with kill rewards routed through Vault.VampireBite action spread the race virally, bitten players progressed through an infection state and eventually turned, courtesy of a SupernaturalInfectivity system.LightSensitivity; ghouls took rain damage; underwater races got UnderwaterMining and breathing perks via custom pathfinder goals; max-hearts pools differed per race (MaxHearts).CustomArrows and InfiniteArrows for race-flavoured ranged combat.RessurectionSpawn), RecruitingItems for converting NPCs/players, and RandomSpawnEntities for biome-tied race-themed mob spawns.RacePrefixes), and a PlayerSetRaceEvent let other plugins react when someone changed race.UnderwaterMining mining-speed adjustments.Metrics class.Supernatural was the project where I learned, the hard way, how a codebase that grows organically can become its own ceiling. By mid-2021 the plugin worked, every race shipped, the followers system was running, vampires could infect, but the code underneath had calcified into a shape I couldn't add new systems to without grinding. So I started refactoring. Three times, across three years. None stuck, and the project's been quietly archived since.
Supernatural.java: race logic, listeners, commands, abilities, follower handling, all of it. Worked. Unmaintainable.Classes/<Race>/ sub-packages, with proper events, listeners, and commands as separate files. Eight indev iterations took it from the 0.9.0 mega-class to a real Java project shape. This is the work I'm proudest of, it actually shipped.Classes/ to Actions/ and slid a generic Action / Target / Damage / Input layer underneath every race's abilities, replacing a tangle of hard-coded ability classes with composable actions. Added the skillpoint menu, the bounty system, the followers expansion, and the vampire updates on top. This is the version preserved as the "greatest state" above.Actions/ back to a single namespace, explode passives out of the catch-all ToggledPassives into one-class-per-effect (Regeneration, Speed, NightVision, WaterBreather, NoConsume, NoFoodRegen, MagicRegen, LavaSwim, etc.), and bolt on a magic-resource system and a proper bounty GUI. Got partway through migrating the Vampire actions and the passive split, then stalled. Some of the better ideas eventually got pulled back into the main branch through July; the rest never landed.GameTickEvent so listeners weren't fighting over the same tick, a clean Commands dispatcher, and a fresh package (I even renamed myself from LoneSurvivor to ModernAdventurer). Got 15 files in: the scaffolding, the data and message repositories, a handful of commands, the race enum. Then I looked at the ~13,400 lines of working gameplay I was about to have to port across, and walked away.Abilities, picking up the same me.ModernAdventurer.Supernaturals package the August 2021 rewrite started. Pushed the race roster to fourteen, added Human as the baseline, plus Shade and Earth/Water/Fire Elementals on top of the original nine, and tagged each race Holy/Unholy/Neutral and Supernatural/non-Supernatural in config. Finally implemented the magic-resource system the May 2021 branch had tried at: a proper 0β100 mana pool with capped writes, per-spell cooldowns persisted to YAML, hotbar-state tracking, and a four-slot config-driven spellbar. Sketched four new Vampire abilities, BloodVial, HighJump, BatFly, VampireBite: each with mana / food / health cost fields. Then stalled at the same wall: no spell handlers, no race-switching commands, no event listeners, and a couple of DataRepository methods left without return statements so the source as-shipped wouldn't even compile. Same pattern as every other reboot.