Community listing page, reviews may not be monitored by the author.
Community voices
Reviews
No reviews yet. Be the first to review this project!
Get it on
Available Platforms
About
Project Details
For authors
Embed Badge
If you're the author of this project, you can embed a live badge anywhere that supports HTML or Markdown. It updates automatically whenever ratings change.
Use HTML for any page that supports it, or Markdown for README files and Markdown-based descriptions.
Identifiers
Platform IDs
Resources
External Links
About
Description
1. Core stat: LOVE
LOVE is the violence level of every living thing in this mod (players included). It does not live on the vanilla XP bar — it is a separate stat.
| Item | Rule |
|---|---|
| Player starting LOVE | Fixed at 1 |
| Normal mob starting LOVE | Random roll, capped by the maxBaseLove option (default 20) |
| Boss-tier starting LOVE | Geometric distribution with first term 1/2, starting at 10 (P(10)=1/2, P(11)=1/4, P(12)=1/8, …) |
| How to level up | Kill to earn EXP; level up when EXP fills |
| How to level down | Be executed by the True Knife (see §5) |
1.1 Attribute curve
A single LOVE value converts to health / attack / defense through one piecewise curve f(love, base):
| Range | Formula |
|---|---|
| 1 – 19 | base × ((love − 1) / 5 + 1) |
| 20 – 666 | 7 × base × (love − 19) / 20 + 23 × base / 5 |
| 667 + | 2 ^ (love − 666) × (4522 × base / 20 + 18 × base / 5 + base) |
The three pieces are strictly continuous at the joins (f(19) = f(20), f(666) = f(667)), so same-level fights feel like the original game, while a large level gap scales damage up or down proportionally.
- Health =
f(LOVE, baseHealth). The vanillaMAX_HEALTHattribute caps at 1024; this mod raises that cap to1.0E18by reflection the first time it is needed, so LOVE never gets stuck at 1024. - Attack factor att =
f(LOVE, baseHealth / attackDivisor)+ main-hand weapon damage × attackDivisor - Defense factor def =
f(LOVE, baseHealth / defenseDivisor)+ armor value × defenseDivisor - The two divisors are independent random values, each rolled once per entity at initialization, in the range
[divisorMin, divisorMax](default 1.0 – 20.0). So a single entity's att and def are two different numbers. - When dealing damage:
damage × att; when taking damage:damage ÷ def(still passes through vanilla armor/absorption resolution).
1.2 EXP and leveling
| LOVE → | EXP needed | LOVE → | EXP needed | |
|---|---|---|---|---|
| 1 → 2 | 10 | 11 → 12 | 800 | |
| 2 → 3 | 20 | 12 → 13 | 1000 | |
| 3 → 4 | 40 | 13 → 14 | 1500 | |
| 4 → 5 | 50 | 14 → 15 | 2000 | |
| 5 → 6 | 80 | 15 → 16 | 3000 | |
| 6 → 7 | 100 | 16 → 17 | 5000 | |
| 7 → 8 | 200 | 17 → 18 | 10000 | |
| 8 → 9 | 300 | 18 → 19 | 25000 | |
| 9 → 10 | 400 | 19 → 20 | 50000 | |
| 10 → 11 | 500 | 20 → 21 onward | Doubles every level |
EXP actually awarded for killing a mob = target max health × target LOVE, then multiplied by two layers of discount:
- Level-gap discount: target 2+ levels above you → full value; same level (±1) → 1/2; target 2+ levels below you → 1/4.
- Disposition discount: hostile mobs (implementing
Enemy, e.g. zombies, skeletons) → full value; neutral mobs (e.g. endermen, piglins, bees) → 1/2; all other friendly mobs (cows, sheep, villagers…) → 1/4. Players award full value.
Suicide awards no EXP to yourself.
1.3 HUD
Open the inventory screen to see four values:
- Above the crafting grid:
LOVE(red),EXP(yellow) - Below the crafting grid:
atk(cyan),def(green)
The displayed atk / def are exactly the two values the mod's formulas actually use in resolution — not the numbers on the vanilla attribute panel. Since 2.2.0 the label reads atk; the attack coefficient in code is still called att — only those four characters changed.
2. One level higher: Determination
Determination measures “how much a player resembles Determination itself” — courage, patience, perseverance, justice, mercy, integrity. LOVE can be regained by killing; Determination cannot: it only creeps up while you survive, and is lost on death.
2.1 It lives in the world, not on the player
Determination is stored in a world-level ledger (<save>/data/determination_ledger.dat), not in player NBT. Two hard requirements force this:
- “The strongest by Determination” is a world-line concept — the check must be able to see offline players, because someone asleep is still the world's high score;
- Determination does not change across save/load. Player NBT gets entirely overwritten by a world rollback, whereas the ledger lives under
data/and is naturally immune; even a “blank reset” does not clear it (this is deliberate).
2.2 Gain and loss rules
| Event | Effect |
|---|---|
| First login | Randomly registered as 1 – 9 |
| Surviving | +1 per full in-game day (24000 ticks), counted only while online |
| A non-strongest player dies | Halved (rounded down, so 1 point goes straight to zero) |
| PvP kill | The killer gains the points the victim actually lost this time |
| Tied for highest | One of them is picked at random for +1 (resolves the tie in one shot, always unique) |
| Zero | Invisible — that player's Determination is no longer displayed |
“The strongest by Determination” = the player with the highest Determination. The system syncs the state once per second; after changing the ledger with /De, the whole server is re-pushed immediately.
2.3 Every body carries its own Determination
The ledger above only applies to players — it answers “who is the strongest on this world-line”. Since 2.1.0 there is a second number: every body carries its own Determination.
| Item | Rule |
|---|---|
| Non-player mobs | Rolled uniformly in 1 – 100 at spawn |
| Players | Never rolled, permanently the default 100 (neutral) |
| Effect | Attack / defense / follow range are each scaled by “Determination%”, i.e. Determination / 100 |
| Boss-tier | It also drives the chance to enter the “Determination” state: 1 − (1 − 0.001) ^ Determination (Determination 1 = 0.1%, 100 ≈ 9.5%, 500 ≈ 39%, 1000 ≈ 63%) |
| Can be fed | When a mob kills a non-strongest player, the half that player actually lost is added in full to that mob |
| Kill reward | When a player kills a mob, the killer's world ledger gains floor(Determination / 10) (nothing if that is less than 1) |
The “Can be fed” row is the only way it can exceed 100. Above 100 the multiplier exceeds 1: it hits harder than its kin, takes more punishment, tracks farther, and is likelier to refuse death.
To read that number straight off a mob, hold the Determination Detector (main or off hand, §8) and point at it.
And it seals the entire world-line's save/load — see §3.6.
3. Save points, saving and loading
3.1 The save point block
determination:save_point: a non-solid decorative block that always faces the camera (billboard) and renders a 4-frame, 1-second-loop save star. You can stand inside it. Right-click opens a menu screen.
Save points generate automatically inside world structures (villages, strongholds, ocean monuments, ancient cities…), and play a sound when they appear.
3.2 Who can save
Only the strongest by Determination can create a real save.
- Strongest right-clicks → menu screen shows player name / LV / playtime / region, with “Save” or “Return”;
- Non-strongest right-clicks → the same menu screen, but only “Return” (the server re-checks too; forged packets are useless);
- Saving is disabled outside Hardcore mode (there is no save/load gameplay beyond
/De); - Nobody can save while the save is sealed — if some mob's Determination outranks every player, the world-line no longer recognises a “strongest” (see §3.6).
3.3 What one “Save” does
The order is itself part of the design:
- Pause copy-on-write (CoW) and push the disk probes to the front of the IO queue — otherwise the flush itself would be recorded as a player change;
saveAllChunks: flush every dirty chunk in memory to disk (synchronous, so when this returns disk equals the baseline). Immediately after, backfill the chunks that are missing from disk — a chunk too clean to be written by the flush only gets a baseline through this step;- Then copy every chunk still in memory, in full (synchronous
ChunkSerializer.write). This gives snapshots to “chunks generated for the first time after the save” and to chunks sitting inpendingUnloadsthatgetChunkNowcannot see but that are still alive — so nothing relies any more on “no snapshot ⇒ disk is the baseline”, an assumption that does fail; - Establish a new ledger: swap the saveId and clear the diff records (the ledger records “the diff relative to the last save”);
- Clear the old saveId's snapshot directory (asynchronously moved to a trash directory, then slowly deleted in the background, so the main thread is not blocked);
- All players' NBT + offline
playerdatacopies + global state.
The snapshot files are the authority for the baseline, not the ledger: loading enumerates c.<x>.<z>.nbt straight from the snapshot directory, so no dimension is ever skipped because the ledger was cleared.
3.4 Death rollback
Dying (and it is not a “refusal of death”) pulls the whole world back to the save moment, without restarting:
- Overwrite memory in place: move the baseline NBT back into existing chunks chunk by chunk (sections / block entities / heightmaps / structures / light flags);
- Recompute lighting and resend chunk packets to players who can see them;
- Unloaded chunks have the baseline written straight back into the region / entities files;
- During this, all online players get a black-screen transition that fades out when the rollback ends; the person who pressed Determination sees the full cinematic with a red soul (
RollbackCinematicScreen); - With the save point in the Nether / End, loading necessarily crosses a dimension, and vanilla pops a “Receiving Level” screen after the switch — the cinematic holds its own reference and re-attaches itself every tick, so it survives being replaced and its timeline does not reset.
Performance-wise this is frame-split + async prefetch: the main thread only submits IO tasks, and most reads during the actual move are already-completed futures. The budget is time-based, not count-based — 20 ms per tick and then stop, with prefetch running one window ahead of the consume cursor; the timeout ceiling is 600 + targets / 8 ticks. A fixed “N chunks per tick” times out badly once disk fallback kicks in, and a timeout leaves half a world behind.
Saving is blocked during the rollback and for 5 seconds after it ends, to avoid nailing a “half-rolled-back” world as the new baseline.
3.5 Blank reset (true reset)
When the strongest dies and chooses “Determination” but there is no readable save left in the world:
- Write a marker file into the world root, then shut the server down;
- On next startup, before the world is created, wipe the map data; the world regenerates from the same seed in
level.dat.
Cleared: each dimension's region / entities / poi, plus playerdata, advancements, stats under the world root. Not cleared: level.dat (the seed lives here) and data/ (world-level mod data, including the Determination ledger).
⚠️ In singleplayer this chain is self-consistent (the server returns to the title screen, and re-entering gives you a blank world); a dedicated server needs the owner to restart it manually.
3.6 Sealed: when something out-determines you
In Hardcore mode, as long as a single mob's Determination is strictly higher than every player's, this world-line's save/load is disabled outright.
- The comparison uses the per-body Determination from §2.3, not the world ledger from §2.1 — the ledger starts at 1–9, and comparing against it would let the first zombie lock saving forever;
- A player's number is always 100, so in practice this only falls when a mob's Determination > 100 — i.e. it has killed a player and swallowed that player's half;
- While sealed:
- the save point does not draw “Save” (the server rejects forged packets too);
- the strongest's death screen reverts to the vanilla “Spectate World / Title Screen” — he is the strongest no longer;
- choosing “Determination” does not trigger a world rollback, and respawning no longer restores from the save snapshot (LOVE / EXP / inventory / ender chest, nor teleporting to the save point);
- death settles like a non-strongest (Determination halved, no pending “lose everything” verdict);
- consequently a “blank reset” cannot trigger either — that path belongs to the strongest alone;
- Once that mob is killed, walks away, or its chunk unloads, the gate reopens immediately (the check only sees living entities in loaded chunks).
In one line: lose your Determination, lose your save.
4. Refusing death, and true death
4.1 Refusing death
When the conditions are met, death is cancelled: no death animation, no item drops, no kill credit, no resolution at all — you just stay alive where you are (health restored). A heartbeat safety net catches it every tick, covering death paths that bypass the death event.
Conditions (split by mode)
| Mode | Conditions |
|---|---|
| Hardcore | The world line must have had one “ticket” save (at that save moment: strongest + LOVE=1 + holding the True Knife + wearing the Heart Pendant), and at death: carrying the True Knife + LOVE exactly 1 + wearing the pendant |
| Non-Hardcore | The ticket is skipped; the conditions are judged live at death (still carrying the True Knife + LOVE=1 + pendant) |
- “Carrying” means any slot of the main inventory / hotbar / armor / offhand — it does not require it to be selected; otherwise whether you can refuse death would depend on which slot happened to be selected at the instant you died.
- “Not wearing the pendant now, but still wearing it within the last second” goes down a grace branch: “But, refused to die.”
- On trigger, the True Knife and pendant are deleted first and re-issued in place, avoiding the “clear-slot weapon instant-kill → ticket lost → can never refuse again” failure.
4.2 True death
When hit by any entity (not limited to players) holding the True Knife with LOVE ≥ 20 while wearing the Heart Pendant itself:
- This hit's damage is not resolved; instead you enter “true death”;
- All the player's items drop where they are, and the save is erased (LOVE / EXP normalized to blank);
- After respawn, a 10-minute cinematic countdown begins (
TrueDeathScreen: screen shake → full-screen red → collapsing into a heart-shaped soul); - When it ends, the challenge advancement “You Lost Your Save” is awarded.
4.3 The strongest's death sentence
In Hardcore mode, when the strongest by Determination dies, Determination is not deducted immediately — only recorded as a pending debt:
- If he chooses respawn on the death screen → the sentence is revoked, losing nothing;
- If he clicks “Terminate” or simply disconnects → the sentence takes effect: Determination is zeroed, and if this blow came from another player, the entire zeroed amount transfers to the killer.
4.4 Boundaries in multiplayer
- Loading only serves the strongest: an ordinary player dies with normal drops and respawns normally — never dragged to someone else's save point, never handed a second copy by an “inventory restore”;
- Death always drops: since 2.1.14 there is no “keep inventory on death” special case at all; duplication is contained by the rollback itself (chunk entities are discarded before the baseline is moved back);
- “Terminate” no longer disconnects (Hardcore strongest only): pressing it realises the sentence, and the server turns you into a spectator at the spot where you fell; to actually leave the game, use the pause menu;
- Items know their owner: the True Knife and pendant carry a bound UUID, so one death only clears and re-issues that person's own copy;
- Player versus player does not trigger Megalo Strike Back on either side (see §6).
5. Genocide route
A hidden progression running parallel to LOVE, shown through save-point text: text turning red means you have set foot on this path.
| Stage | Normal-mob quota |
|---|---|
| 1 | 90 |
| 2 | 72 |
| 3 | 81 |
| 4 | 180 |
| 5 | — (locked) |
Rules
- Fill the current stage's quota → the save-point text turns into a red “Determination”, and mob spawning is blocked in loaded chunks (natural spawning and spawners; spawn eggs,
/summon, and other mods' spawning are unaffected); - With the quota full, killing one more boss-tier mob (base health > 100, e.g. warden / wither / ender dragon) → advance to the next stage, count resets, spawning is blocked again;
- Two ways to void it, both dropping back to stage 1 and clearing the count: killing a boss before the quota is full, or killing a normal mob after the quota is full (meaning you failed to follow up with that boss). So “Determination” is a pending state;
- Stage 5: the text is forever a red “Determination =)”, spawning is permanently blocked; when the player's LOVE reaches 19, the True Knife and Heart Pendant are awarded.
6. Megalo Strike Back
When the health of any non-boss-tier, non-player entity is knocked low by a player, a counterattack triggers by chance (option megaloStrikeBackChance, default 0.5):
| Moment | Behavior |
|---|---|
| t = 0 (the instant of the hit) | Locks in the entire ray (victim's eye position → attacker's eye position), length included; after this, no amount of movement by either side changes it |
| t = 0.5 s | Fires one projectile determination:megalo_strike_back_bullet along the locked line |
Projectile rules
- Does not track, flies perfectly straight;
- Range is a budget:
50 − 10 × blocks destroyed. Each breakable block punched through along the way costs 10 blocks of range, so it can break at most 5 blocks — with the 5th block the budget hits zero and it annihilates on the spot; - Only unbreakable blocks like
bedrockcan stop it (it halts in front of it, leaving blocks behind intact); - Damage is strictly path-based: stepping off the ray between the lock and the release means a complete dodge; damage = the victim's own def value, and halves every 10 blocks of flight distance, still passing through standard attack/defense mitigation on hit;
- It can only be cut down by the True Knife — apart from the True Knife, no damage destroys it.
Boss-tier mobs (base health > 100) do not take part in the Megalo Strike Back; they have their own mechanic (see §7).
The victim must not be a player (2.1.17): otherwise A hits B, B's projectile reflects onto A, A is then counted as “knocked low by a player”, and the two keep shooting each other forever.
7. The boss's “Determination”
Boss-tier mobs (base health > 100) roll to refuse death based on their own Determination at the moment of death: p = 1 − (1 − 0.001) ^ Determination. Determination 1 is the old 0.1%, 100 is about 9.5%, 500 about 39%, 1000 about 63%.
- Health becomes 10× and is fully restored on the spot;
- Attack unchanged;
- Defense becomes 1/2 (i.e. regular damage taken is doubled);
- Afterwards, every 0.5 s, it fires a damage-only “Megalo Strike Back”-style projectile from a random point inside a 5-block sphere around itself toward the nearest player (breaks no blocks and is blocked by no blocks — it flies straight through terrain toward the player, still subject to the range budget and distance falloff), 8 shots every 4 s in total;
- It has a lifespan: it can only exist for a further number of seconds equal to its max health before entering the state (300 health = 5 minutes). On expiry it suffers a true death — health zeroed, drops and death message resolved as vanilla, not a silent vanish. The lifespan runs on an absolute world tick, so it keeps elapsing while the chunk is unloaded or the game is closed.
It only refuses once: entering the “Determination” state itself records that the chance has been spent; dying after that is really dying.
8. Items and blocks
| Item | ID | Description |
|---|---|---|
| True Knife | determination:true_knife |
Attack speed 1.0, reach 2 blocks. Not enchantable, no durability, dropped item never despawns (fire-proof / explosion-proof / immune to timed despawn). When held by the local player with LOVE > 19, its name and texture turn red. Swinging produces a diagonal slash trail. |
| Heart Pendant | determination:heart_pendant |
Chest-slot trinket. Not enchantable, no durability, dropped item never despawns. Knockback resistance maxed; damage taken is reduced according to the wearer's own LOVE curve (base health 20); exclusive equipment slot — putting it on drops whatever is in the other armor slots, and equipping other armor while wearing it drops that armor immediately. |
| Toy Knife | determination:toy_knife |
The True Knife's “plastic” version: damage 3, reach 1 block, attack speed 1.0, not enchantable, no durability. Not fire-proof — throw it in lava and it is gone. Its model inherits the True Knife's outright (only the texture differs), so its placement matches exactly. |
| Faded Ribbon | determination:fade_ribbon |
Helmet slot, defense 3 (the same tier as diamond / netherite helmets), durability 0, not enchantable, dropped item never despawns (fire-proof / explosion-proof / immune to timed despawn). Rendered on the vanilla armor layer, with the bow drawn on the left side of the head. |
| Asgore's Trident | determination:trident |
Attack 80, reach 4 blocks, attack speed 1.0. |
| Determination Detector | determination:determination_detector |
While held in the main or off hand, pointing at a mob within 32 blocks shows “Determination N” just below the crosshair. It cannot read through walls (the ray is first clipped by a block hit), and it ignores the held weapon's reach. |
| Save Point | determination:save_point |
See §3. |
Creative tab order (tab “De-termination”): Save Point → True Knife → Heart Pendant → Toy Knife → Faded Ribbon → Asgore's Trident → Determination Detector.
Sounds: item.swing, item.hit, save_point.point, save_point.save, ui.word.
Save-point text: 246 built-in random flavor lines (224 conditional + 22 fallback; 248 lang keys in total), covering dimensions, structures, biomes, status effects, inventory contents, statistics, weather/time, progression depth, and more, plus two Genocide-route-exclusive lines.
9. Commands
| Command | Permission | Description |
|---|---|---|
/LOVE <target> set <level> |
2 | Rewrite any living entity's LOVE (also recomputes max health for the new level and broadcasts the event). |
/EXP add <amount> |
2 | Add EXP to yourself. |
/De <target> set <value> |
2 | A player target rewrites the world ledger; a non-player living target rewrites that body's own Determination (minimum 1, re-applying the follow-range modifier on the spot). Targets use selectors, so /De @e[type=zombie] set 20 edits a whole group at once. Off by default, gated by the allowDeterminationCommand option; while off, the command is still registered and simply fails with a message (so server owners know the switch exists without digging through docs). |
10. Configuration
File: config/determination-common.toml
| Key | Default | Description |
|---|---|---|
maxBaseLove |
20 |
LOVE spawn cap for normal mobs (1 – Integer.MAX_VALUE). |
divisorMin |
1.0 |
Lower bound of the random attack/defense divisor (0.1 – 100.0). |
divisorMax |
20.0 |
Upper bound of the random attack/defense divisor (1.0 – 100.0). A higher lower bound flattens the overall numbers. |
genocideStopSpawning |
true |
Block mob spawning in loaded chunks while the Genocide route shows a red “Determination”. |
megaloStrikeBackChance |
0.5 |
Chance for Megalo Strike Back to trigger (0 – 1). 0 disables the mechanic entirely. |
allowDeterminationCommand |
false |
Whether /De may rewrite Determination. |
Screenshots
Gallery
Versions
Files
Relations
Project Relations
More like this
Similar Mods
Suggestions use data such as tags, dependencies, dependents, descriptions, titles, and more to rank how much they overlap with this mod.
On ModDex
Community snapshot
By the numbers
Statistics
(opens in a new tab)
Get it on
Available Platforms
On ModDex
Community snapshot
By the numbers
Statistics
Resources