Eternity
CUSTOM WEAPONS AND ABILITIES WITH MANY VFX EFFECTS AND MORE!
Eternity
A Paper plugin that serves a growing library of custom weapons - each with its own resource-pack texture, swing animation, base damage and abilities. Four are shipped: the Bloodlust Scythe, the Time-Lapse Sword , the Suffocator Trident, and the Vowbreaker Mace.
ETERNITY Resource Pack! (Hard Depedency!)
📦 General Information
- Name: Eternity
- Version: 1.0.0
- Supported Minecraft Versions: 1.21.1 – 26.x (Paper/Spigot forks)
- Java Version: 21
- Dependencies: None (vanilla Paper API only)
- Resource Pack: Required for custom models & swing animations. Without it, weapons will appear as their vanilla base materials, but all mechanics still function perfectly.
- Load Order: Any time after server start. Safe for reloads with correct state handling.
- License: ALL RIGHTS RESERVED
- API Compatibility: Built against Paper API. Uses reflection shims via
Compat.javato remain stable across 1.21.x.
⚖️ Damage Model
All weapon damage is defined in hearts and converted to half-hearts on ATTACK_DAMAGE. The server applies vanilla armour reduction: 4% per armour point, capped at 80%. This means a full netherite set (20 armour points) always leaves at least 20% of raw damage.
| Weapon | Raw Damage (Hearts) | Through Full Netherite (20 Armour) | With Jump Shot (+1 Heart, Flat) |
|---|---|---|---|
| 🩸 Bloodlust Scythe | 2.5 | 0.5 | 1.5 |
| ⏰ Time-Lapse Sword | 3.5 | 0.7 | 1.7 |
| 🌊 Suffocator Trident | 4.0 | 0.8 | 1.8 |
| ⚒️ Vowbreaker | 5.0 | 1.0 | 2.0 |
Key Damage Notes
- Jump Shot: Hitting mid-jump grants a flat +1 heart bonus. Flat means it isn't diluted by percentage scaling and still cuts through armour. Sprint-reset, swimming or flying crits do not count.
- Armour-First Scaling: Bleed stacks scale raw damage before armour is subtracted, keeping values consistent with vanilla.
- Vanilla Pipeline: Every hit is a real
EntityDamageEvent. Absorption, Resistance, Shields, death messages, combat logs, and other plugins behave exactly as vanilla expects. - Debugging:
/eternity weaponsprints the full roster with armour-reduced damage numbers.
Bloodlust Scythe (the first weapon)
| Requirement | Where |
|---|---|
Netherite hoe base, §cBloodlust Scythe, 2.5 hearts raw, ATTACK_DAMAGE | weapon/impl/BloodlustScythe.java |
§7Purified -> §cBloody on a player kill (first lore line) | item/ScytheItem.State, BloodlustScythe.Behaviour#harvest |
| Reaper's Mark: +5% per stack, red dust, resets on a miss or a different target | bleed/BleedManager.java |
| Kill counter, action bar, persistence in the PersistentDataContainer | item/ScytheItem.java, EternityPlugin#updateActionBars |
| Soul Feast: 6 block cone, Blindness 4s, 3 hearts of absorption, Stasis 2s | ability/SoulFeast.java, ability/StasisManager.java |
| Custom death messages for blade kills and ultimate kills | BloodlustScythe.Behaviour |
Instant ban on kill, /eternity unban with a 24h cooldown | data/PrisonerStore.java, command/EternityCommand.java |
| Purification Shard recipe (Nether Star + 8 Souls) | item/Recipes.java |
| Ritual activation, broadcast, rotating flame + smoke aura, 2 minutes, damage-proof items | ritual/RitualManager.java |
| Anti-steal: nobody picks up, and an attempt collapses the event | listener/RitualListener.java |
| Last Stand (Resistance I + Regeneration I), 15 block leash, pause + gray particles | ritual/RitualManager#tick |
| Cosmic Backlash on the starter's death, cosmetic explosion, knockback, scythe up for grabs | ritual/RitualManager#implosion |
| Success: lore back to Purified, every caged player unbanned and teleported to spawn, starter-only pickup | ritual/RitualManager#succeed |
Time-Lapse Sword (the second weapon)
Netherite sword base, §b§lTime-Lapse Sword, 3.5 hearts raw, unbreakable, idle model slot 10 and
swing model slot 11. It carries three abilities that stack on one item:
| Requirement | Where |
|---|---|
| Definition, lore, unbreakable, 3.5 hearts | weapon/impl/TimeLapseSword.java |
| Crafted vertically: Crying Obsidian / The Clock of the Past / Stick | item/Recipes.java |
The clock is a tagged item only /eternity give clock_of_the_past produces | item/ClockOfThePast.java, item/ItemCatalog.java |
| Temporal Fatigue - a hit applies Mining Fatigue for 10s plus a 50% attack-speed pin | weapon/impl/timelapse/FatigueManager.java |
| Re-hitting refreshes it; hitting someone else moves the debuff and clears the old victim | FatigueManager#hit |
| Temporal Dome - 10 block sealed sphere, 60s, 30 minute recharge, owner buffs, containment | weapon/impl/timelapse/TemporalDomeService.java |
| Time Freeze - everyone inside is held: no movement, combat, projectiles, eating, dropping, hand swaps, inventory clicks or crossing the boundary | TimeLapseListener.java, TemporalDomeService#hold |
| Default binds: crouch + right-click = dome, crouch + left-click = freeze | weapon/impl/timelapse/BindSettings.java |
| Both binds are rebindable from the GUI | BindMenu.java |
| Crouch-Down twice within 12 ticks opens that GUI | TimeLapseListener#onSneak |
| Anyone handed or crafting the sword is told about the double crouch, once per item | TimeLapseSword#sendHint |
The dome and the freeze are one sword but two separate binds, so a player can hold the shield of one
dome while a second player inside it is frozen - TemporalDomeService keeps the owner and the frozen
set apart, and only one dome is active at a time.
Suffocator Trident (the third weapon)
Netherite trident base, §1§lSuffocator Trident, 4 hearts raw, unbreakable, idle model slot 3 and
swing model slot 4. It is never thrown - every right-click is consumed by the Hold stance, because
a thrown trident is not a player damager and would deal raw vanilla damage with no combo, no passive
and no jump shot, then be lost in the void.
| Requirement | Where |
|---|---|
| Definition, lore, unbreakable, 4 hearts | weapon/impl/SuffocatorTrident.java |
| Suffocation - 3 consecutive clean hits on one player drown them for 5s at 1 half-heart/sec | weapon/impl/suffocator/SuffocationManager.java |
| A swing that connects with nothing wipes every chain the wielder holds | SuffocationManager#onMiss |
| The chain resets on completion; re-hitting inside the 5s window refreshes it | SuffocationManager#onHit |
| Aquatic Adaptation - no drowning while underwater, trident in either hand | SuffocatorListener#onDamage |
| Drownwright's Hold - crouch + right-click arms; the next hit pins them for 3s at 2 half-hearts/sec | weapon/impl/suffocator/DrownwrightHold.java |
| The cage is particles only - nothing is placed in the world | DrownwrightHold#drawCage |
| The hold shatters if a third party hits the victim, or the wielder is hit | SuffocatorListener#onInvolved |
| 30 second recharge after a hold lands | DrownwrightHold#toggle |
Crafted 3x3 around the Drowned King's Bell, an operator-only ExactChoice component | item/Recipes.java, item/DrownedKingsBell.java |
trident.* tunables | SuffocatorSettings.java, config.yml |
Two things about the trident that are deliberate
- Suffocation needs the main hand, Aquatic Adaptation works from either. A trident in the offhand deals no damage, so there is nothing for it to chain - the offhand reading only makes sense for a purely defensive passive. A hit on a mob is neither a chain step nor a miss, so a farm mob does not cost the wielder a half-built chain.
- The Hold pins through its own
AttributePinsentry, not the scythe'sStasisManager. That manager'sreleaseis unconditional, so sharing it would let a finishing Soul Feast free a held player.CombatListener#isPinnednow consults both.
Vowbreaker (the fourth weapon)
Netherite mace base, §6§lVowbreaker, 5 hearts raw, unbreakable, idle model slot 5 and swing model
slot 6. Three abilities, all of them reading the mace differently:
| Requirement | Where |
|---|---|
| Definition, lore, unbreakable, 5 hearts | weapon/impl/VowbreakerMace.java |
| Shatter - 3 consecutive clean hits on one player cancel 1 armour point each; at 3 stacks the target is panoured and their armour is ignored entirely for 6s | weapon/impl/vowbreaker/ShatterManager.java |
| The crack survives 1.5s without a follow-up hit, and a miss clears the whole chain | ShatterManager#tick, ShatterManager#onMiss |
| Cracks and the panour state are drawn as particles on the victim and reported on the wielder's action bar | ShatterManager, VowbreakerMace |
| Stoneblood - the wielder is never knocked back while holding it, from either hand | VowbreakerListener#refreshStoneblood |
| Earthquake - left-click in mid-air to arm; landing detonates a 7 block impact for 7.5 hearts raw | weapon/impl/vowbreaker/SlamManager.java |
| The slam hits every other living thing in the radius through the normal armour pipeline, throws them outward, and recharges over 10 minutes | SlamManager#strike |
| The slam only arms from a real fall, never in water | VowbreakerListener#onInteract |
Crafted around the Broken Sceptre, an operator-only ExactChoice component | item/Recipes.java, item/BrokenSceptre.java |
mace.* tunables | MaceSettings.java, config.yml |
Three things about the mace that are deliberate
- Stoneblood pins knockback resistance to 1.0 rather than scaling it. Unlike attack speed, knockback resistance is an absolute 0..1 attribute with no useful nonzero base, so there is nothing to multiply - it is held at the ceiling instead. The server clamps the value, so the pin is a repeated refresh every 5 ticks, not a one-off write.
- The slam is not a weapon hit. It is applied through
Compat#applyRawDamage, which builds a genericDamageSourceso the victim's own armour, resistance and absorption are handled by the server exactly as they would be for any other damage. Bukkit has noDamageCause.GENERIC, so the pre-1.20.4 fallback borrowsENTITY_EXPLOSION, which is the closest cause the server still runs through the armour pipeline. - The arming click is not cancelled. Earthquake shares the mace with Shatter, so a mid-air swing still connects and still builds cracks; the slam is bolted onto the same click rather than replacing it.
Сервер для плагина Eternity - как у профи
Плагин Eternity создан для серверов: на своём сервере вы настраиваете его под себя и решаете, кому играть. Создать сервер с плагином Eternity для друзей можно за пару минут - BungeeHost всё уже подготовил.