- Java 86.2%
- Markdown 8.8%
- XML 3.5%
- Yaml 1.5%
ThunderEnchant
A Paper 26.2 plugin adding custom enchantments.
Enchantments
DirtSeed (shovel, levels I–III)
Digging a grass block (not plain dirt) with a shovel enchanted with DirtSeed has a chance to also drop wheat seeds, in addition to the normal drop.
| Level | Drop chance |
|---|---|
| I | 10% |
| II | 20% |
| III | 35% |
Jumper (boots, levels I–II)
Adds a small, deliberately subtle amount of extra jump height — not a Jump Boost potion effect, just a slightly higher hop.
| Level | Extra height |
|---|---|
| I | small |
| II | a bit more |
Aithrios (trident, level I only)
Put it on a trident alongside Channeling and/or Riptide: those two enchantments' weather requirements are bypassed on that same trident.
- Channeling normally needs a thunderstorm + open sky to strike lightning on hit. With
Aithrios, it also strikes lightning on hit in clear weather (still requires open sky). This is
a faithful recreation using
World#strikeLightning, not a hack of vanilla's own check. - Riptide normally needs rain or water to launch you forward. With Aithrios, the trident's normal charge-up animation plays exactly as vanilla (untouched). At the moment vanilla would normally throw the trident away (because there's no rain/water), Aithrios steps in instead: the trident stays in your hand, you get launched forward, and the correct Riptide sound (level 1/2/3) plays — the same building blocks vanilla itself uses, just triggered by us instead of the internal rain check.
All three enchantments are registered as proper data-driven Minecraft enchantments: they can appear in the enchanting table, on enchanted books, in anvil combinations, and in villager (librarian) trades.
Dracula (sword, levels I–X)
Hitting a living entity (mob or player) has a chance to heal you for exactly the damage you just dealt — capped at your max health, so it never overheals. Chance is 10% per level:
| Level | Chance |
|---|---|
| I | 10% |
| II | 20% |
| ... | ... |
| X | 100% |
Fireguard (any tool or any armor piece, level I only)
There is no II or III — you either have Fireguard or you don't. Put it on a pickaxe, a sword, a chestplate, boots, anything tool- or armor-shaped, and two things happen at once:
- The item is fireproof. If you drop it and it lands in fire or lava, it does not burn up — the same treatment vanilla already gives netherite gear, extended to whatever item you put this on.
- You're immune to fire and lava too, while it's equipped or held. As long as the enchanted item is on you (any armor slot, or in either hand), you don't catch fire and take no fire or lava damage.
Quarry (pickaxe, level I only)
Breaking a block also breaks the 8 blocks around it, clearing a 3x3 area centered on the block you mined. The plane is oriented to face wherever you're looking — mining into the side of a wall clears a 3x3 hole in that wall, while mining a floor/ceiling clears a horizontal 3x3. Each extra block drops normally (respecting whatever's on the pickaxe, e.g. Fortune or Silk Touch), and unbreakable blocks (bedrock, barriers, etc.) are always skipped.
Lava Walker (boots, levels I–II)
Works exactly like vanilla Frost Walker, but for lava. Walking over lava temporarily turns the lava under and around your feet into solid ground — mostly obsidian, with the occasional basalt mixed in — instead of frosted ice. It follows the same radius rule Frost Walker uses (2 + level):
| Level | Radius |
|---|---|
| I | 3 |
| II | 4 |
The converted blocks aren't permanent: if you stop walking near them, they melt back into lava a few seconds later, same as frosted ice does.
Stasis (durability items, level I only, incompatible with Mending)
A passive repair enchantment. Every 15 seconds, it repairs 1 point of durability on the item — but only while the item is sitting inside a Chest, an Ender Chest, or a Shulker Box. It does nothing while the item is held or sitting in a player's own inventory (hotbar, armor slots, off hand). A background sweep checks every online player's Ender Chest and every loaded Chest/Shulker Box in the world every 15 seconds and repairs whatever it finds.
Since it overlaps with what Mending does, the two are incompatible: combining an item that has one with a book/item that has the other at an anvil is blocked, and an item can't end up with both at once.
Giving yourself a book
Use the plugin's own command instead of the vanilla /give item-component syntax (which is easy
to get wrong with custom enchantments):
/thunderenchant give <player> dirt_seed <1-3>
/thunderenchant give <player> jumper <1-2>
/thunderenchant give <player> aithrios 1
/thunderenchant give <player> dracula <1-10>
/thunderenchant give <player> fireguard 1
/thunderenchant give <player> quarry 1
/thunderenchant give <player> lava_walker <1-2>
/thunderenchant give <player> stasis 1
Example: /thunderenchant give Notch dirt_seed 3
Requires the thunderenchant.give permission (OPs have every permission by default).
Opening the project in IntelliJ
File -> Open...and select theThunderEnchantfolder (the one containingbuild.gradle.kts).- IntelliJ will detect it as a Gradle project — let it import (it needs internet access to
download the Paper API from
repo.papermc.io). - Make sure a JDK 25 is configured (
File -> Project Structure -> SDKs). Paper 26.2 requires it. - Run the Gradle task
build(or./gradlew buildfrom the terminal). The compiled jar will be atbuild/libs/ThunderEnchant-1.0.0.jar. - Drop the jar into the
plugins/folder of a Paper 26.2 server and start it.
A note on the Registry API
Enchantment registration (RegistryEvents.ENCHANTMENT, EnchantmentRegistryEntry.Builder, tag
mutation via LifecycleEvents.TAGS) is still flagged @Experimental by Paper as of 26.2. It's
stable enough to build on, but if a future 26.2 build renames a method, check the class
ThunderEnchantBootstrap first — that's the only file that touches this API.
Adding more enchantments later
- Add a new
TypedKey<Enchantment>inThunderKeys. - Register it in
ThunderEnchantBootstrap#bootstrap. - Fetch it in
ThunderEnchantPlugin#onEnablevia the enchantment registry. - Write its behaviour in a new class under
listeners/.