Skip to content

Repository files navigation

Mental — classic combat, engineered

Download latest      All releases

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.


Players on servers running Mental — last 14 days


Features


Precision-tuned Knockback
Choose the legacy 1.7.10 formula or the modern one, with presets for both. signature, Mental's own, feels close to mmc knockback and suits practice servers well.

Async Hit Registration & Knockback
Attacks are intercepted on the netty thread and register sub-tick, in packet-arrival order. Combat runs faster than vanilla.

Fair at any ping
Latency compensation keeps knockback and combos identical at 5 ms or 150 ms. Everything is server-authoritative, so anticheats verify it cleanly.

One jar, every server
One download covers every Paper build from 1.9.4 to 26.x plus Folia, on Java 8 or newer with no flags. Every release passes a live test matrix across every supported server.

The full 1.8 ruleset (optional)
A library of switchable modules: old armour, no attack cooldown, 1.8 crits, golden apples, sword blocking, and more. Everything here is off by default.

Run it from in-game
/mental opens a full management menu where you can flip modules and switch presets live, without a restart. Everything is still plain, documented YAML.

Getting started

  1. Download Mental-<version>.jar from the latest release.
  2. Drop it into your server's plugins/ folder.
  3. 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.


Modern or legacy knockback

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, and ct8c (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.


Knockback presets

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.


Faster than vanilla

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.


In-game management

/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 reload re-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.


Configuration

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.

The 1.8 ruleset

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 ct8c knockback profile. Apply the whole set in one click from Combat Presets, or turn each module on by itself.


FAQ

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.


Compatibility

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.


For developers

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, live

Deep 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