DominionForge
Factions, wars and 1.8 raiding physics on 1.21
DominionForge is a complete factions core for Paper 1.21.x, built around one idea: a faction's territory should be something you hold, not something you log in for.
WHAT MAKES IT DIFFERENT
- DominionForge
- Power is a formula: base + hours played this week + reputation − recent deaths − inactivity. /df power shows every term, so a player can see exactly why the number moved
- Wars are scheduled. The attacker declares in advance, the defender gets time to organise, and the attacker only wins by capturing a named objective chunk
- Home and warps have a warm-up that breaks if you move or take a hit, plus a combat tag that stops the teleport before it starts
- Territory is drawn as its outline — one polygon per connected piece, holes included, in the faction's own colour
- One shared inventory instance while anyone is looking, saved by diff when the last viewer closes it
- The bank balance is the ledger: every movement records who, how much and why (/df bank log)
FEATURES
- Claims — per-chunk claiming, /df claimradius with a confirmation menu showing the real cost, autoclaim as you walk, disconnected outposts, and a particle border you can switch on
- Power v2 — activity and reputation based, not death-only. AFK farming does not scale, and the claim limit follows real power
- Ranks — up to 8 configurable ranks per faction with a full permission matrix, editable from a menu
- Diplomacy — allies, truces, enemies, bidirectional treaties and multi-faction coalitions
- Scheduled wars — public countdown, a capture objective, and enemy chunks that can only be claimed while a war is actually running
- Shared vault — one faction chest, upgradeable a row at a time, paid from the faction bank
- Bank with a ledger — deposits, withdrawals and an auditable log of every movement
- Warps and home — faction warps with an optional password, one home per faction, both with warm-up and combat tag
- Maps — ASCII map in chat, a clickable minimap GUI, and territory outlines on BlueMap and Dynmap
- PlaceholderAPI — 14 placeholders, cached so a per-second scoreboard never touches the database
- Discord webhook — faction created, disbanded, war declared and war resolved
- Developer API — public API through the Bukkit ServicesManager, so other plugins can ask who owns a block without parsing chat
- English and Spanish included, and every string a player sees lives in the language file
THE RAID LAYER — ONE PLUGIN INSTEAD OF TWENTY-FIVEA factions server is not decided by the claim map, it is decided by what happens when somebody comes to take it. Everything below ships inside DominionForge, per world, with two ready-made profiles (vanilla and 1.8), edited from an in-game menu ([ICODE]/df adminconfig[/ICODE]) and reloadable without a restart. All of it is off out of the box: a vanilla server stays vanilla until you switch a section on.1.8 combat, per world — knockback measured against a real 1.8 server rather than guessed. Ground, sprinting, mid-air and sprinting mid-air all land within 0.0001 of the reference, which is the resolution of 1.8's own packetObsidian a cannon can open — block health, so a wall takes the number of charges you decide instead of being indestructible. One loose TNT does nothing; the charges doWater and lava the way a raid uses them — flow, placement and cleanup rules, because in a factions raid the liquids are the defenceCannons — TNT fill that charges you for what actually went in, a wand that checks the bank before it empties the chest, and a sand bot that is recognised by a mark on the item rather than by its display nameChunkBuster — flatten your own land chunk by chunk, on a server-wide block budget instead of one timer per buster, without loading the map in order to destroy itRaidGuard — the seven anti-cheats of a siege: phase, faction-map abuse, dismount clipping, the nether roof, bone-fed dispensers, mining exploits and inventory duplicationPearls and explosions — pearl behaviour through walls and doors, chained explosions, and what a cannon shot is allowed to leave behindBuilding and farming — the printer, the build wand, the crop hopper and the crafting tableEvents and money — KOTH with a capture objective, bounties, a physical coin, and escrow: everything withdrawn is held as a row with its owner, its amount and its reasonCommand rules — what may be typed, what it costs and what it becomes. Cooldowns survive a restartTerritory shields — a timed window in which a faction cannot be raided, with every ticked hour written inside the clickItems — how they stack, what they are called and when they expireThe base — a shared ender chest that does not shrink when a rank changes and is saved as you use it, and a sign elevator that does not stall the server on a clickGatekeepers — world-downloader detection, disconnect-spam protection and a rank handover command that actually changes the rankSpawners — the clock a farm runs on, per worldThis is the part that usually arrives as twenty-five separate plugins from ten different authors, each with its own config file, its own idea of what a claim is, and its own listener fighting the others for the same event. Here it is one plugin, one config, one set of permissions, and one place to look when something is wrong.RUNS ANYWHERE; ON TTSCORE IT GOES FURTHERDominionForge is complete on plain Paper. When the server underneath is TTSCore — our own Paper fork — it detects it and unlocks a further set of server-level settings that no plugin can reach from the Bukkit API. Nothing is missing without it; there is simply more with it.Note: on start-up Paper logs two deprecated-event warnings. They are deliberate: the deprecated event is the only one that pins 1.8's knockback, which was measured both ways before the decision. The README explains it.MIGRATING FROM ANOTHER PLUGINSupported: FactionsUUID and SaberFactions.[ICODE]/df import[/ICODE] — what can be read from your plugins folder[ICODE]/df import factionsuuid[/ICODE] — a dry run that shows exactly what would be imported and writes nothing[ICODE]/df import factionsuuid confirm[/ICODE] — backs up the database first, then writesThe dry run is not a formality: it lists what gets skipped and why — tags that already exist here, chunks that already have an owner, worlds that no longer exist, and anything in the dump that could not be read. Nothing is ever overwritten; what is already on your server wins.A full server import (200 factions, 600 members, 5,000 claims) completes in well under a second and the server keeps ticking through it.PERFORMANCE
- Every database query runs off the main thread. SQLite in WAL mode by default, MySQL opt-in for cross-server setups
- /df bench reports real timings from your own server, not numbers from a README
- Placeholder resolution is cached: a scoreboard refreshing every second per player does not hit the database