Classic 1.7.10 combat for modern Paper & Folia.
The hits, knockback, and combos of golden-era PvP, latency-compensated, friendly to
anticheats, and tuned from the era's real game code rather than folklore.
- Download
Mental-<version>.jarfrom the latest release. - Drop it into your server's
plugins/folder. - Restart. That's it. The defaults are the classic combat, so there is nothing to set up.
Configuration is generated under plugins/Mental/ on first boot, and every option is
documented inside its own file. Upgrading from an old single-file config? It migrates
automatically: your tuned values become profiles/custom.yml (and stay selected), and the
original is kept as config-v1-backup.yml.
No dependencies. Mental needs nothing else installed; PlaceholderAPI is supported, but optional.
Mental ships two complete knockback calculations. Pick the one your server should feel like:
- Legacy is the true 1.7.10 formula: sprint resets, residual stacking, era verticals.
It comes with a full preset library in
profiles/legacy/, and every knob is tunable. - Modern is the current vanilla formula with the same customization surface. Its presets
live in
profiles/modern/:modern-vanilla,modern-uplift,modern-combo, andct8c(Java Edition Combat Test 8c knockback).
Both sides expose the full knob set (pushes, friction, verticals, air multipliers, w-tap
bonuses), so custom can start from either world.
The knockback profile is one server-wide setting; pick it in-game or in knockback.yml.
| Preset | The feel |
|---|---|
signature |
Mental's own tuning, and the recommended default for competitive 1.8-style PvP. |
lunar |
The archived Lunar Network values: a lighter, floatier trade. |
badlion |
The classic Badlion feel, with firm horizontals and honest verticals. |
velt |
A modern practice-server tuning, snappy and consistent. |
More ship alongside: kohi, minehq, mmc, legacy-1.7, legacy-1.8, and custom
(yours to edit) in profiles/legacy/, plus modern-vanilla, modern-uplift, modern-combo,
and ct8c in profiles/modern/ for servers on the modern knockback formula. The full guide
to what each knob does lives in project/docs/knockback-profiles.md.
Vanilla waits twice. An attack packet queues for the next tick, then the knockback waits for the next entity-tracker pulse. That is 10 to 50 ms of server-side dead time before the victim feels anything, on top of ping.
Mental removes both waits:
- Attacks are read the moment they arrive: intercepted on the netty thread and validated against per-tick snapshots, so the attack never waits on the main thread.
- The victim's knockback and both players' hurt animations ship straight from the netty thread, one round-trip leg earlier than vanilla.
- On 1.19.4+ the velocity and hurt animation travel in one packet bundle, so the knock and the flinch can never split across frames.
- Registration runs async to the server core, so if TPS drops, hits still register at full speed, exactly as they would on a server running at optimal performance.
- Damage still runs on the main thread through the full vanilla event chain, and the pre-send uses the same profile math, so the prediction and the authoritative result never disagree.
The full pipeline, edge cases included, is written up in project/docs/fast-path.md.
/mental (or /mtl) opens the management suite, restricted to operators by default. Each
feature family gets its own colour-coded screen, on chrome that renders in full colour right
down to 1.9.4:
- The Dashboard is a five-tile home: Combat Engine, Era Rules, Sustain & Potions, Effects & Loot, and Server & Diagnostics, flanked by Combat Presets and Close. Each tile opens its category's sections, which keeps every family two clicks away without a wall of buttons.
- Family screens flip any module live. Right-click a module to open its settings screen and tune it in-game (left/right steps a value, Q resets it to the file default).
- The Preset Gallery is where you browse and apply knockback profiles (legacy and modern tabs) and combat-effects tunes, each with a live preview.
- Combat Presets applies a whole ruleset at once: the Combat Test 8c snapshot, the classic 1.7 feel, or Mental-transparent vanilla.
- Nothing needs a restart. Changes apply immediately, and
/mental reloadre-reads the files from console.
Your hand-edited YAML is never rewritten: in-game changes are stored as a separate overlay, so comments and formatting in the files you maintain stay exactly as you left them.
Everything lives under plugins/Mental/, split by topic, and each file documents every key
it holds:
| File | What it controls |
|---|---|
config.yml |
Module toggles (incl. the 1.8 & Combat Test 8c ruleset), metrics, debug, anticheat. |
knockback.yml |
The selected knockback profile. |
profiles/ |
The preset library (legacy/ and modern/); add your own here. |
bundles/ |
Rules bundles: apply a whole ruleset (ct8c, signature, vanilla) at once. |
hit-registration.yml |
Hit registration, the fast path, and reach validation. |
latency-compensation.yml |
Ping measurement and latency correction. |
combo.yml |
The combo solver family. |
loadout.yml |
Off-hand & crafting restrictions, era hitboxes & reach. |
effects.yml + effects/presets/ |
Combat effects and their presets. |
pots.yml |
Splash-potion utilities. |
drop-protection.yml |
Loot protection. |
Mental always owns hit delivery and knockback. Everything below is opt-in, off by default, and grouped by family, with each rule a one-line toggle:
| Family | What turning it on does |
|---|---|
| Damage | 1.8 armour strength & durability, old critical hits, old tool durability, sword blocking. |
| Combat Cadence | Removes the 1.9 attack cooldown, sweep attacks, and swing sounds. |
| Sustain | 1.8 golden apples, potion values & durations, old regen, no ender-pearl cooldown. |
| Loadout | Off-hand and crafting restrictions, era hitboxes and reach. |
| Combo Solver | Holds the sweet-spot combo distance on the fresh knock; optional reach handicap. |
| Potions | /potfill and steep-throw instant pots. |
| Combat Effects | Hit sounds and particles, pop-off damage indicators, death effects. |
| Loot Protection | A slain player's drops reserved for their killer, gold-glowing until they expire. |
Running another combat-rules plugin? Enable each rule in exactly one plugin; the same rule enabled twice applies twice.
Combat Test 8c. A port of Mojang's experimental Combat Test 8c snapshot ships as thirteen more opt-in modules (reworked shields, charged attacks, per-weapon attack speeds, the split-vertical knockback, and more), with a matching
ct8cknockback profile. Apply the whole set in one click from Combat Presets, or turn each module on by itself.
Does it work with anticheats? Yes. Combat is server-authoritative, so movement-prediction anticheats verify it cleanly. When one is detected, Mental stands down its packet-level fast path automatically and stays correct.
Do my players need a mod or a specific client? No. Everything is server-side; vanilla clients, Lunar, Badlion, and 1.7-animation mods all just work.
Can I keep modern 1.9+ combat and only fix knockback? Yes, that's the default install. The 1.8 ruleset is entirely opt-in; out of the box, Mental changes knockback, hit registration, and latency fairness only.
Does it replace OldCombatMechanics? It can. The optional ruleset covers the OCM rule set. Pick one plugin per rule and Mental handles the rest natively, including the parts OCM can't touch (delivery and knockback).
Folia? Supported. Every release is gated on a real Folia server before it ships.
Something feels off. How do I debug it?
/mental debug subscribe streams what Mental sees (hits, knocks, sprint reads) to your chat
in real time. You can also open the Debug screen in /mental and hit Stream to my chat.
| Server | Paper 1.9.4 → 26.x (every version) · Folia |
| Java | 8 or newer, whatever your server already runs; no flags needed |
| Dependencies | None (PlaceholderAPI optional) |
| Tested | Every supported Paper version + Folia boots live in the release gate, every release |
One jar covers the whole range: modern JVMs load Mental's Java-17 code, and older JVMs load a byte-equivalent Java-8 build packed into the same file. On 1.9.4 to 1.10.2 a handful of trajectory self-tests are skipped, because servers of that era don't simulate offline players' motion; gameplay is unaffected.
Modules: api (public surface) · kernel (pure-JDK combat model) · platform (Bukkit seam)
· core (the plugin) · compat-folia · tester (live-server harness).
The public API, me.vexmc:mental-api (generation 3), covers combo lifecycle events, an
authoritative combat-state query service, capability discovery, knockback outcome control,
and temporary per-(victim, attacker) hit-timing overrides, which let a companion plugin
re-price a victim's hurt window for one attacker inside Mental's own timing (see
project/docs/api-timing-overrides.md). The jar ships
with every release; the contract lives in
project/docs/api-gen3-integration-surface.md
with rulings in project/docs/api-gen3-rulings.md.
./gradlew build # unit tests + compatibility gates
./gradlew integrationTestMatrix # every supported server, liveDeep dives: fast path · knockback profiles · combo hold · legacy tier · the combat research ledger in project/docs/research/.
Licensed MIT · third-party notices here · anonymous
usage metrics via bStats (opt out in config.yml).
MENTAL by @owengregson