Sage (aka tricrotism)
I build the frameworks, plugins and gameplay systems that Minecraft networks run on.
Java · Kotlin · Groovy · Paper / Folia · Velocity
- MCHub Sep 2023 → Present
Top contributor to the gameplay codebase, across prisons, skyblock and dungeons.
-
Primary gameplay developer across the network.
Top contributor to the gameplay codebase, working in Groovy on the prison and skyblock servers and in Java on the standalone dungeons plugin.
-
Shipped major gameplay systems.
Skin trade-up, crates, battle passes, pets, totems, robots, gangs, and more, with new multipliers and bonuses wired into every path they should affect so they stack correctly.
-
Built the dungeons gamemode’s content.
Ascension enchants, sword-skin cosmetics with tier buffs and abilities, flying scrolls, coinflip wagering, a shared guild vault, and bosses that chase players through their dungeons.
-
Ran recurring live events.
A community boss framework and in-game mayor elections (weekend voting, live vote bars, bribes), plus weekly rotating limited crates and skins.
-
Protected the in-game economy from dupes.
Trades, loadouts, and reward redemptions run through an anti-dupe controller, and trade-up avoids items entirely by writing balances directly behind a per-player lock. Read the full breakdown →
-
Built a granular feature-flag system.
Every feature, and every breakable slice of it, gets its own flag, so a broken system can be switched off live in production without a restart. Read the full breakdown →
-
Optimized the server’s hot paths.
Profile with LagFinder and spark, then cut the waste: cache closure lookups, avoid allocations, kill dynamic dispatch, and batch high-frequency writes. Read the full breakdown →
-
Kept the network smooth at scale.
Batched Redis reads with
MGET, replacedKEYSscans withSCAN, built a fake-player load test, and export metrics to Grafana, with heavy work on the regionised world threads instead of one global tick. -
Wrote cross-server frameworks.
A currency-multiplier registry that centralizes how currencies stack across sources, and a network-wide alert system.
-
- FyreSMP Jun 2026 → Present
Building the network's Java plugins, and native Bedrock cross-play through Geyser.
-
Built the network’s homes system.
Named
/hometeleports backed by the shared cross-server database, an async DAO that keeps SQL off the region threads, a stand-still teleport warmup so players can’t escape a fight, and a chooser that works natively on both Java and Bedrock. Read the full write-up → -
Building FyreEvent, a Paper plugin.
A Folia-ready Java plugin built on Paper’s modern Brigadier command framework, starting with async teleport commands (
/tp,/tpo,/tppos) that useteleportAsyncso loading chunks never stalls the main thread. -
Added Bedrock cross-play to the teams plugin.
Built native Geyser form menus (using Cumulus) so Bedrock players get proper UIs instead of the broken fallback chat menus, alongside bug fixes across the plugin.
-
- FuzzySMP Jun 2026 → Present
Building drills and an AFK zone as Cryon modules, both written for Folia's region threads.
-
Built drills that mine a 3×3, 5×5 or 7×7 plane.
A Kotlin port of FyreSMP’s drills as a Cryon module. Bigger drills expire sooner (36, 24 and 12 hours), and every extra block fires its own break event so claim and protection plugins can still cancel it, with a per-thread guard so those synthetic breaks never trigger another area break.
-
Split each area break across region threads.
Blocks are grouped by chunk. A batch the current region owns runs inline and the rest go to the region that owns them, so a plane crossing a region border stays Folia-correct. Drops merge into full stacks, and blocks clear without physics so neighbours don’t pop off as loose items.
-
Kept the expiry countdown from flashing the held item.
Every lore write replays the re-equip animation, so the countdown only ticks while an inventory is open, the one time the tooltip is visible and the hand isn’t drawn. Lore goes through the data component rather than copying
ItemMeta, and unchanged writes are skipped, about 59 of every 60. -
Built an AFK zone with rewards and boosters.
Each zone pays item and command rewards on an interval, with permission boosters, a boss-bar countdown and idle detection. It runs one timer per player on that player’s own region thread, and caches boosters for 30 seconds because reading permissions copies the player’s whole permission set.
-
Tracked lifetime AFK time across the network.
Totals load on join, grow in memory and are saved through Cryon’s player-handoff hook before a transfer, so the server a player left never overwrites the one they moved to. A guard waits for the load before any save, so a fast join-and-leave can’t wipe a total, and a cached top-100 serves the leaderboard placeholders.
-
- ZedarMC Jul 2026 → Present
Running the network core on my own Cryon framework, plus its chat filter, vanish, metrics and plugin work.
-
Deployed Cryon as the network’s core runtime.
ZedarMC runs on my Cryon module framework, so most of my work here lands in the framework itself: feature flags, network-wide maintenance mode, the server registry and player routing across the sharded backend, and the Velocity proxy loader. Read the full Cryon write-up →
-
Built Cryon-Filter to replace the old chat filter.
Two tiers: swear categories each player can switch off, stored network-wide, and a slur tier nobody can. Matching runs an Aho-Corasick automaton plus hand-written fuzzy search instead of regex, about 28 µs a chat line against roughly 3,800 rules, and sign edits are dropped at the packet layer before the block is ever written.
/punishwhosaidsweeps everyone who recently said a phrase. -
Built Cryon-Visibility, a vanish that looks like a real disconnect.
Leave message, shrinking tab list, lower server-list count, and a
/msgthat answers “not online”. The server treats a vanished staffer as a spectator while their client stays in creative, so mobs, villagers and trial spawners ignore them with no packet sent. Read the full breakdown → -
Shipped a Towny claim tool.
Select land with a shovel, see ghost-block outlines, confirm in a dialog on Java or a form on Bedrock. Outlines are block-change packets sent only when the selection, the claim map or the ground under you changes, a flood fill rejects selections split by someone else’s land, and outposts claim in two phases so a multi-chunk outpost costs one slot instead of one per chunk.
-
Built network-wide presence in Cryon-Commons.
Pub/sub carries joins and quits in about a millisecond, and each server’s own Redis hash with a heartbeat TTL repairs anything pub/sub dropped. Every server holds an in-memory roster of the whole network, so
/msgresolves instantly and a crashed server’s players expire on their own. -
Built Cryon-Metrics.
A metrics module that writes into the SQL database Cryon already owns, so Grafana reads it straight out. It counts a session once even when a player hops between servers, gives Bedrock players a third session scope captured inside Geyser (device, input mode, logins the proxy never saw), and tracks server health, the Vault economy and real-money Tebex revenue. Eleven tables, seventeen dashboards, five alert rules.
-
Hardened player data and the economy.
Player data preloads before login so joining is a cache hit, concurrent loads of one player share a single database read, and a failed save stays dirty until the write lands. Sell payouts batch once a second, with balances counting what’s still pending so nothing can see the gap.
-
Wired a WorldGuard addon into Cryon.
Cryon-WorldGuardAddon adds three region flags (
mace-use,spear-use,wind-charge-use). WorldGuard seals its flag registry the moment it enables, which happens before any Cryon module’sonLoad, so the addon claims its flags in the earlierpreLoadphase instead. -
Shipped features and fixes across the Zedar plugin fleet.
Capturable outposts that pay out on an interval, crash-safe crop regrowth, a module loader where one failed module no longer stops the rest, metric hooks in
ZedarCore, Paper 26.2 compat fixes inZedarDrops, and admin-menu work inzedar-vault.
-
- SaltyMC Sep 2026 → Present
Building the network's Discord bot, its bridge to every server, and an escrowed player order board.
-
Built SaltyBot, the network’s Discord bot.
Tickets, account linking and announcements, on JDA 6 over PostgreSQL. Every decision that could race (the next ticket number, redeeming a link code, two staff clicking approve at once) is a single conditional statement whose affected-row count picks the winner, so there’s no check-then-act window. Ticket transcripts render from the database rather than being scraped back out of Discord.
-
Bridged it to every game server over Redis Streams.
A transactional outbox, gap-free sequence numbers and a
SET NXclaim per message give exactly-once delivery through crashes and reconnects. A server that comes back replays what it missed from the outbox, or takes a fresh snapshot if it fell too far behind. -
Wrote the in-game side as one Paper/Folia plugin.
/ticketrenders the same form as a Paper Dialog for Java players, a Cumulus form for Bedrock, or chat as a fallback./linksyncs Discord roles to LuckPerms as explicit add and remove sets, so ranks granted by hand are never wiped, and announcements arrive as holograms, boss bars, titles or chat. -
Built SaltyOrders, an escrowed buy and sell order board.
Buy orders escrow money, sell orders escrow items, and new orders match against resting ones by price-time priority. Two dupe audits closed holes like selling while disconnecting, and a crash-rollback journal covers the minutes between a trade committing and the player’s file saving. Read the full breakdown →
-
Load-tested it to 5,000 simulated players.
Profiled every round with Windchill and JFR. Read caches took board reads from about 10 ms to about 1 µs, menus render on their own pool, and at 2,000 players Postgres holds 1,467 operations a second with a 7.4 ms median order create.
-
- OPLegends Sep 2026 → Present
Shipping Dungeons enchants and cores, plus a Folia-ready ShopGUI+ fork with a dynamic economy.
-
Forked ShopGUI+ and gave it a dynamic economy.
A sell-price engine that moves each item through deficit, surplus and correction as players sell it. Prices live in a snapshot updated by compare-and-set, so sales racing in from many region threads never lose a unit, and after downtime the engine lands exactly where the price would have drifted to. Read the full breakdown →
-
Made the fork Folia-safe and MiniMessage-native.
Every inventory open, command, sell loop and price alert hops onto the owning player’s region thread. All shop and config text accepts MiniMessage, cached so menu repaints don’t reparse it, with legacy
&codes still working. Added/shop watchprice alerts and admin price resets alongside. -
Closed economy exploits in the fork.
Purchases and sales now check that the economy accepted the payment and hand the items back when it refuses. Buy prices round up and sell prices round down so splitting a trade can’t turn a profit, sell-all no longer takes armour it never paid for, and dynamic maximums are capped at the buy price.
-
Built the Dungeons Bit Finder enchant.
Pays out Bits only for active grinding: swing time accrues only while the gap between swings stays under 30 seconds, AFK mobs and the auto-grinder don’t count, and a rolling daily cap scales with prestige, checked and spent in one player-data transaction. Ships with an action-bar countdown and a generic enchant voucher the game didn’t have before.
-
Added hero enchants and a mob-rarity core.
Clone spawns packet-only copies of the hero in a ring around the target that hunt the nearest mob for five seconds, behind an atomic per-hero cooldown. The Legendary core, generalised in review into a data-driven
MobRarityability, forces every mob that spawns in your zone to a set tier.
-
- SunnySMP Dec 2025 → Feb 2026
Built survival shop and teleport systems in Kotlin.
-
Developed survival gameplay features in Kotlin.
Worked on the SunnySMP survival server’s plugins on Paper, in Kotlin, during a focused stint on the network.
-
Built the in-game shop experience.
A categorized shop menu with a sell wand for quick bulk-selling and shareable shop setups.
-
Built a teleport-request (TPA) system.
A TPA flow with a confirmation menu, extended with cross-dimension support so requests work into the Nether and the End.
-
Closed claim-protection exploits.
Fixed a grief where players could use bone meal inside other people’s claims, plus other protection gaps.
-
Handled anti-abuse and compatibility fixes.
Tagged renamed shop items to trace misuse across shared modules, and backported a plugin to the server’s 1.21.8 version.
-
- MCHub5 features
A large Minecraft network I build gameplay for, across prisons, skyblock and dungeons.
- Skin TradeUpsCombine duplicate skins into a roll for one a rarity bracket higher.
- Mayor ElectionsVote for a weekly town mayor whose policies reshape the whole server.
- The ForgeA crafting station where recipes aren't handed to you. You find them by trying things.
- Monthly CrateA physical crate you right-click, then pick tiles from a face-down grid to reveal what's inside.
-
- Frostbite
A sharded Discord anti-scam bot with perceptual image matching and OCR.
- FyreSMP1 feature
An SMP network I build plugins for, including its homes system and Bedrock cross-play.
- Cryon
A hot-swappable module framework for Minecraft networks.
- uWorldGuard
A from-scratch, Folia-ready reimagining of WorldGuard.
- Whiteout
A packet-level anticheat for Paper and Folia, built on a vanilla-exact movement prediction engine.
- Windchill
A Paper/Folia plugin that reads the JIT's own decisions and tells you why your plugins aren't fast.