Frostyh Plugins

Plugins / Arcana

Arcana Coming soon

Twelve real custom enchantments in the enchanting table, plus wands, spell foods, glider capes and hats. No mods, no resource pack.

Get Arcana

Coming soon Not on sale yet. This page gets a buy button the day it is.

Overview

Arcana

Custom enchantments that are real enchantments. They show up in the enchanting table, combine on anvils and glow like vanilla ones, and nobody needs a mod or a resource pack.

Most custom enchant plugins fake it: a line of lore, a menu of their own, an enchanting table that ignores them. Arcana registers its twelve enchantments in the game's own enchantment registry before the worlds load, the same way Mojang adds one. So a player gets Lifesteal from the enchanting table, finds a Veinminer book in a dungeon chest, buys Telekinesis from a librarian and combines them on an anvil, and the tooltip, the glint and the level numerals are all vanilla.

On top of that, Arcana adds wands, spell foods, glider capes and hats built from Minecraft's new item components, and physics spells that change a player's size, gravity and jump for a while.

Latest version
1.0.0
Server
Paper or Purpur, Java 21
BuiltByBit
coming soon
What changed in 1.0.0
  • Twelve real enchantments registered in the game's enchantment registry: Lifesteal, Frostbite, Thunderstrike, Veinminer, Excavator, Timber, Telekinesis, Harvester, Magnet, Swiftness, Leaping and Soulbound. They appear in the enchanting table, loot chests and villager trades and combine on anvils.
  • Wands with a real cooldown, spell foods, glider capes and hats, all built from vanilla item components, with recipes.
  • Six physics spells (Gust, Shrink, Giant, Moonwalk, Stride, Phoenix) with hard safety limits; running spells survive a relog or restart and still end on time.
  • Rune ring effects made of display entities, and item pictures in chat for /arcana show, crafting and enchanting.
  • The Arcana book: dialog windows for enchantments, items and spells, with admin buttons.
  • Registry settings (enchantment on/off, name, max level, rarity, where it appears) need a full restart; everything else reloads with /arcana reload.

Features

Why server owners pick it

The twelve enchantments

Area enchantments work while standing; sneak to break a single block. Every break goes through the normal break event, so claim and protection plugins protect the whole vein too, and the tool wears down as usual.

What you get

FAQ

Which servers does it run on?

Paper or Purpur 1.21.11 or a newer 1.21.x, with Java 21. Item pictures in chat need players on 1.21.9 or newer; older clients see the name and the tooltip without the picture.

Why does changing an enchantment need a restart?

Because it is a real enchantment. Paper freezes the enchantment registry when the server starts, so switching one on or off, renaming it, or changing its max level or rarity takes effect on the next full start. Effect numbers, chances, items, spells and messages reload live with /arcana reload.

Does it work with /reload or plugin managers?

Not for the enchantments, for the reason above. Restart the server instead.

What happens to enchanted items if I remove the plugin or switch an enchantment off?

The enchantment stops existing on the next start, so items that carry it can lose it when the server loads them. Back up your worlds before removing Arcana or switching off an enchantment your players already have.

Will Veinminer get around my claims?

No. Every extra block is broken through the same event a normal break uses, so a protected block stays protected.

Is there DRM or a licence key?

No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.

Can I try it before I buy?

Yes. This page has a test server with the plugin installed.

Where do I get help?

In the active support Discord or in the discussion tab on this page.

Updates

The first release is v1.0.0. Every update is free, new Minecraft versions included.

Also by Frostyh

If this plugin helps your server, a short review on this page would mean a lot. Thank you!

Installation

Requirements

Server software
Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit are not supported: the plugin uses Paper-only APIs.
Minecraft version
plugin.yml api-version 1.21.11; built against Paper API 1.21.11
Java
21 or newer
Required plugins
none
Optional plugins
none

Steps

  1. Download Arcana.jar from BuiltByBit. There is no licence key to enter.
  2. Stop the server and put the jar into the plugins folder.
  3. Start the server. The plugin creates plugins/Arcana/config.yml with the defaults shown under Configuration.
  4. Edit config.yml to suit your server.
  5. Apply the changes with /arcana reload (Read config.yml again), or restart the server.

Setup guide

  1. Drop Arcana.jar into /plugins and restart the server (a full restart, not /reload).
  2. Open /arcana to see what is there. Enchant a book at the enchanting table and you will meet them.
  3. Optional: switch enchantments off, rename them or change their rarity in config.yml, then restart.

Commands

From plugin.yml. "Not set" in the permission column means plugin.yml attaches no permission to the command itself; the nodes the plugin checks are listed under Permissions.

CommandAliasesUsageDescriptionPermission
/arcana/magic, /arc/arcanaOpen the Arcana book: enchantments, items and spells. Registered in code, not in plugin.yml (see the note below).not set

Subcommands in detail

/arcana                                  The Arcana book.
/arcana enchants | items | spells        A page of the book.
/arcana show                             Show the held item in chat.
/arcana give <player> <item> [amount]    Give an Arcana item.
/arcana book <enchant> [level] [player]  Give an enchanted book.
/arcana enchant <enchant> [level]        Put an enchantment on the held item (0 removes it).
/arcana cast <spell> [player]            Cast a spell (admin test).
/arcana end <spell> [player]             End a running spell.
/arcana reload                           Read config.yml again.

Permissions

From plugin.yml.

NodeDefaultDescriptionChildren
arcana.useeveryoneOpen the Arcana book and read the enchantments, items and spells.none
arcana.casteveryoneCast spells with wands and spell foods.none
arcana.showeveryoneShow the held Arcana item in chat with its picture.none
arcana.giveoperatorsGive Arcana items and enchanted books.none
arcana.enchantoperatorsPut an Arcana enchantment on the held item at any level.none
arcana.adminoperatorsReload the config and use every admin button.arcana.use, arcana.cast, arcana.show, arcana.give, arcana.enchant

Placeholders

This plugin registers no PlaceholderAPI placeholders.

Configuration reference

The default files as they ship in the jar, with their comments. The plugin writes them to plugins/Arcana/ on first start.

config.yml

Top-level keys:

KeyDefaultComment above it
config-version1none
themesection, 12 keysnone
menusection, 1 keynone
chatsection, 3 keysnone
effectssection, 5 keysnone
recipessection, 1 keynone
disabled-worlds[] (empty list)Worlds where no spell can be cast (wands and spell foods do nothing there).
spell-limitssection, 8 keys███ ███ ████ █ █ █ ███ █ █ ███ ███ ███ █ █ █ █ █ █ █ █ ██ ██ █ █ █ ██ ███ ███ █ █ █ █ █ █ █ █ █ ██
enchantmentssection, 13 keys████ █ █ ███ █ █ ██ █ █ ███ █ █ ████ █ █ ███ ███ █ ██ █ █ █ █ █ █ ██ █ █ ██ ██ █ ██ █ █ █ ███ █ ██ █ ████ ████ █ ██ █ █ █ █ ███ █ ██ █ ██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ████ █ █ ███ █ █ █ █ █ █ █ █ █ ████ █ █ █ ███ Twelve real enchantments. They...
spellssection, 6 keys███ ███ ████ █ █ ███ █ █ █ █ █ █ █ ██ ███ ███ █ █ ██
itemssection, 11 keys███ ███ ████ █ █ ███ █ █ █ ██ ██ █ █ █ ███ █ █ █ ██ █ █ █ █ █ █ ███ █ ████ █ █ ███ Built from vanilla item components, no resource pack:
messagessection, 109 keys█ █ ████ ███ ███ ██ ███ ████ ███ ██ ██ █ █ █ █ █ █ █ █ █ █ █ ███ ██ ██ ████ █ ██ ███ ██ █ █ █ █ █ █ █ █ █ █ █ █ █ ████ ███ ███ █ █ ███ ████ ███ Every word the plugin says. {placeholders} are filled in. An emptied message is switched off.
plugins/Arcana/config.yml
#  ██  ███   ███  ██  █  █  ██
# █  █ █  █ █    █  █ ██ █ █  █
# ████ ███  █    ████ █ ██ ████
# █  █ █ █  █    █  █ █  █ █  █
# █  █ █  █  ███ █  █ █  █ █  █
#
#  Arcana by Frostyh: magic without mods or a resource pack.
#  /arcana opens the book: the enchantments, the items and the spells.
#
#  Two kinds of setting live in this file:
#    LIVE settings (effects, chances, items, spells, messages) follow /arcana reload.
#    REGISTRY settings (the first block of each enchantment: enabled, name, max-level, weight,
#    in-enchanting-table, in-loot-chests, in-villager-trades) need a FULL SERVER RESTART. Paper
#    freezes the enchantment registry when the server starts, so /reload, /arcana reload and
#    plugin managers cannot add, remove or resize an enchantment. Each registry line says so.
#
#  Colours: messages use named tags (<accent>, <text>, <muted>, <value>, <good>, <warn>, <bad>)
#  that resolve to the theme below. Plain MiniMessage works everywhere too.

config-version: 1

#  ███ ████ █  █ ████ ███   ██  █
# █    █    ██ █ █    █  █ █  █ █
# █ ██ ███  █ ██ ███  ███  ████ █
# █  █ █    █  █ █    █ █  █  █ █
#  ███ ████ █  █ ████ █  █ █  █ ████
#  Look, sounds, the book's width, chat and the rune effects.

theme:
  accent: "#b48cff"
  accent2: "#e2d4ff"
  title: "#f4f1ff"
  text: "#cfc8e6"
  muted: "#7c7398"
  value: "#ffffff"
  good: "#7be0a3"
  warn: "#ffc857"
  bad: "#ff6b6b"
  # One quiet sound per button and action, played to that player only.
  sounds: true
  # Item pictures in menus and chat (Minecraft 1.21.9 and newer draw them; older clients show nothing).
  item-icons: true
  # The small font for menu text. Off: it reads worse in long menus.
  small-caps: false

menu:
  # Width of the text in the book, in pixels (200 to 1024).
  width: 320

chat:
  # /arcana show: seconds between two shows per player (admins skip it).
  show-cooldown-seconds: 10
  # Who sees a shown item: 0 = the whole server, otherwise players within this many blocks.
  show-range: 0
  # Tell everyone when someone pulls a treasure or max-level Arcana enchantment from the table.
  announce-rare-enchants: true

effects:
  # The rune ring and spinning book around a player who casts a spell.
  enabled: true
  # Rings running at the same time on the whole server; more are skipped, never queued.
  max-at-once: 24
  # Runes per ring (3 to 16).
  runes: 8
  # How long a ring lasts, in ticks (20 = one second).
  lifetime-ticks: 50
  # The small enchanted book above the caster's head.
  book: true

recipes:
  # Give every player the Arcana recipes in their recipe book when they join.
  unlock-on-join: true

# Worlds where no spell can be cast (wands and spell foods do nothing there).
disabled-worlds: []

#  ███ ███  ████ █    █       █    ███ █   █ ███ ███  ███
# █    █  █ █    █    █       █     █  ██ ██  █   █  █
#  ██  ███  ███  █    █       █     █  █ █ █  █   █   ██
#    █ █    █    █    █       █     █  █   █  █   █     █
# ███  █    ████ ████ ████    ████ ███ █   █ ███  █  ███
#  Hard limits on what any spell may do to a body, whatever a spell below says. The values are
#  the resulting multiplier: scale-min 0.4 means a spell can never make a player smaller than
#  40 percent of their normal size.
spell-limits:
  scale-min: 0.4
  scale-max: 1.5
  gravity-min: 0.25
  gravity-max: 2.0
  jump-max: 2.0
  speed-max: 1.6
  # Extra blocks of step height (normal is 0.6).
  step-extra-max: 1.5
  # Extra blocks of fall before damage (normal is 3).
  safe-fall-extra-max: 20

# ████ █  █  ███ █  █  ██  █  █ ███ █   █ ████ █  █ ███  ███
# █    ██ █ █    █  █ █  █ ██ █  █  ██ ██ █    ██ █  █  █
# ███  █ ██ █    ████ ████ █ ██  █  █ █ █ ███  █ ██  █   ██
# █    █  █ █    █  █ █  █ █  █  █  █   █ █    █  █  █     █
# ████ █  █  ███ █  █ █  █ █  █  █  █   █ ████ █  █  █  ███
#  Twelve real enchantments. They appear in the enchanting table, combine on anvils, come out of
#  loot chests and villager trades and show the vanilla glint. Put them on items with books from
#  the table, or /arcana book <enchant> [level] [player].
#
#  REGISTRY lines (restart): enabled, name, max-level, weight (1 rare to 10 common),
#  in-enchanting-table, in-loot-chests, in-villager-trades.
#  Everything else in a section is LIVE.
#
#  CAREFUL: switching off an enchantment (or removing Arcana) after players have it means it no
#  longer exists on the next start, and items carrying it can lose it. Back up your worlds first.
enchantments:
  area-tools:
    # Veinminer, Excavator, Timber and Harvester II stop before the tool drops to this durability,
    # so an area break never destroys a good tool by surprise.
    stop-at-durability: 5

  lifesteal:
    enabled: true            # restart
    name: "Lifesteal"        # restart
    max-level: 3             # restart
    weight: 2                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Heals you for part of the damage you deal."
    heal-percent-per-level: 4
    # The most health one hit can give back (2.0 = one heart).
    max-heal-per-hit: 4.0
    particles: true

  frostbite:
    enabled: true            # restart
    name: "Frostbite"        # restart
    max-level: 2             # restart
    weight: 3                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "A chance to slow and chill what you hit. Never on the same weapon as Thunderstrike."
    chance-per-level: 20
    slow-seconds-per-level: 1.5
    slowness-level: 2
    # Powder snow freezing added per proc (140 ticks starts the freeze damage).
    freeze-ticks: 80

  thunderstrike:
    enabled: true            # restart
    name: "Thunderstrike"    # restart
    max-level: 3             # restart
    weight: 1                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "A chance to call lightning on a hit: extra damage, no fire."
    chance-per-level: 4
    bonus-damage-per-level: 1.5
    cooldown-seconds: 3
    affects-players: true

  veinminer:
    enabled: true            # restart
    name: "Veinminer"        # restart
    max-level: 3             # restart
    weight: 2                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Mining one ore mines the whole connected vein."
    # Extra ores per level (I, II, III).
    blocks-per-level: [8, 16, 32]
    # standing: works unless sneaking (sneak to mine one block). sneaking: only while sneaking. always.
    activation: standing

  excavator:
    enabled: true            # restart
    name: "Excavator"        # restart
    max-level: 2             # restart
    weight: 2                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Digs a 3x3 (I) or 5x5 (II) square with a shovel."
    # 1 = 3x3, 2 = 5x5.
    radius-per-level: [1, 2]
    activation: standing

  timber:
    enabled: true            # restart
    name: "Timber"           # restart
    max-level: 1             # restart
    weight: 3                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Chopping one log fells the whole tree."
    max-logs: 96
    # A tree needs at least this many natural leaves, so a log wall in a house is never felled.
    min-natural-leaves: 6
    activation: standing

  telekinesis:
    enabled: true            # restart
    name: "Telekinesis"      # restart
    max-level: 1             # restart
    weight: 3                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Drops go straight into your inventory. Tools only; full inventory drops the rest."
    # Also collect mob drops when the killing blow is made with the tool.
    mob-drops: true

  harvester:
    enabled: true            # restart
    name: "Harvester"        # restart
    max-level: 2             # restart
    weight: 5                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Ripe crops replant themselves. Level II harvests the 3x3 around."
    # Right click a ripe crop to harvest and replant it.
    right-click-harvest: true
    # A hoe with Harvester never breaks a crop that is not ripe yet.
    protect-young-crops: true

  magnet:
    enabled: true            # restart
    name: "Magnet"           # restart
    max-level: 3             # restart
    weight: 4                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Leggings that pull nearby items to you."
    radius-per-level: [3, 5, 7]
    pull-speed: 0.35

  swiftness:
    enabled: true            # restart
    name: "Swiftness"        # restart
    max-level: 2             # restart
    weight: 3                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Leggings that make you walk faster. Level II also steps up full blocks."
    speed-percent-per-level: 6
    step-height-at-level-2: 0.4

  leaping:
    enabled: true            # restart
    name: "Leaping"          # restart
    max-level: 3             # restart
    weight: 4                # restart
    in-enchanting-table: true
    in-loot-chests: true
    in-villager-trades: true
    description: "Boots that jump higher and fall softer."
    jump-percent-per-level: 10
    safe-fall-blocks-per-level: 1

  soulbound:
    enabled: true            # restart
    name: "Soulbound"        # restart
    max-level: 1             # restart
    weight: 1                # restart
    # Treasure: never in the enchanting table, only loot chests, trades and books.
    in-enchanting-table: false
    in-loot-chests: true
    in-villager-trades: true
    description: "The item stays with you when you die. Never on the same item as Curse of Vanishing."
    # True: the enchantment is used up when it saves the item (one save per enchant).
    used-up-on-death: true

#  ███ ███  ████ █    █     ███
# █    █  █ █    █    █    █
#  ██  ███  ███  █    █     ██
#    █ █    █    █    █       █
# ███  █    ████ ████ ████ ███
#  Physics spells: timed changes to how a player's body works, using vanilla attributes, so the
#  client draws them itself (a shrunk player really is small). Wands and spell foods cast them.
#
#  body: (offsets; the limits above always win)
#    scale: -0.5 = half size, 0.4 = 1.4x       gravity: -0.6 = 40 percent gravity
#    jump-strength: 0.5 = 1.5x jump            movement-speed: 0.15 = 15 percent faster
#    step-height: 1.0 = one extra block        safe-fall-distance: 10 = ten more blocks
#  potion-effects: "effect level" for the spell's whole duration, e.g. "slow_falling 1".
#  push-forward / push-up: a shove when cast (-3 to 3).
#  A running spell is stored on the player: it survives a relog or a restart and still ends on time.
spells:
  gust:
    name: "<#9fe7ff>Gust</#9fe7ff>"
    description: "A burst of wind throws you forward; you float down slowly."
    duration-seconds: 6
    cooldown-seconds: 0
    body:
      gravity: -0.6
      safe-fall-distance: 12
    push-forward: 1.3
    push-up: 0.7
    ring-colour: "#9fe7ff"
    sound: "minecraft:entity.breeze.wind_burst"

  shrink:
    name: "<#c58bff>Shrink</#c58bff>"
    description: "Half size: fit through one-block gaps, harder to hit."
    duration-seconds: 30
    cooldown-seconds: 0
    body:
      scale: -0.5
    ring-colour: "#c58bff"
    sound: "minecraft:entity.illusioner.mirror_move"

  giant:
    name: "<#ffb35c>Giant</#ffb35c>"
    description: "Grow to one and a half times your size and step over blocks."
    duration-seconds: 20
    cooldown-seconds: 0
    body:
      scale: 0.5
      step-height: 0.5
    ring-colour: "#ffb35c"
    sound: "minecraft:block.beacon.power_select"

  moonwalk:
    name: "<#e2e8ff>Moonwalk</#e2e8ff>"
    description: "Low gravity and high jumps, like walking on the moon."
    duration-seconds: 25
    cooldown-seconds: 0
    body:
      gravity: -0.7
      jump-strength: 0.4
      safe-fall-distance: 15
    ring-colour: "#e2e8ff"
    sound: "minecraft:block.amethyst_block.resonate"

  stride:
    name: "<#7be0a3>Stride</#7be0a3>"
    description: "Walk faster and step straight up full blocks."
    duration-seconds: 60
    cooldown-seconds: 0
    body:
      step-height: 0.5
      movement-speed: 0.15
    ring-colour: "#7be0a3"
    sound: "minecraft:entity.horse.gallop"

  phoenix:
    name: "<#ff7a4d>Phoenix</#ff7a4d>"
    description: "Fire cannot touch you for a minute."
    duration-seconds: 60
    cooldown-seconds: 0
    potion-effects:
      - "fire_resistance 1"
    ring-colour: "#ff7a4d"
    sound: "minecraft:item.firecharge.use"

# ███ ███ ████ █   █  ███
#  █   █  █    ██ ██ █
#  █   █  ███  █ █ █  ██
#  █   █  █    █   █    █
# ███  █  ████ █   █ ███
#  Built from vanilla item components, no resource pack:
#    wand  right click casts its spell, then recharges (the client draws the cooldown sweep)
#    food  eaten even on a full stomach, casts its spell when finished
#    cape  worn in the chest slot, glides like an elytra and shows the wings
#    hat   any item worn on the head
#  name and lore are MiniMessage. recipe: up to three rows of three; a space is an empty slot.
#  Items keep working when renamed here: they are recognised by an id stored on the item.
items:
  wind_wand:
    type: wand
    material: BREEZE_ROD
    name: "<#9fe7ff>Wand of Wind</#9fe7ff>"
    lore:
      - "<muted>Right click: Gust."
    spell: gust
    cooldown-seconds: 8
    recipe:
      shape: [" W ", " A ", " B "]
      ingredients: {W: WIND_CHARGE, A: AMETHYST_SHARD, B: BREEZE_ROD}

  shrinking_wand:
    type: wand
    material: AMETHYST_SHARD
    name: "<#c58bff>Shrinking Wand</#c58bff>"
    lore:
      - "<muted>Right click: Shrink."
    spell: shrink
    cooldown-seconds: 45
    recipe:
      shape: [" A ", " E ", " S "]
      ingredients: {A: AMETHYST_SHARD, E: ENDER_PEARL, S: STICK}

  giant_staff:
    type: wand
    material: BLAZE_ROD
    name: "<#ffb35c>Giant's Staff</#ffb35c>"
    lore:
      - "<muted>Right click: Giant."
    spell: giant
    cooldown-seconds: 60
    recipe:
      shape: [" G ", " B ", " B "]
      ingredients: {G: GOLD_BLOCK, B: BLAZE_ROD}

  moon_staff:
    type: wand
    material: END_ROD
    name: "<#e2e8ff>Moon Staff</#e2e8ff>"
    lore:
      - "<muted>Right click: Moonwalk."
    spell: moonwalk
    cooldown-seconds: 40
    recipe:
      shape: [" P ", " E ", " S "]
      ingredients: {P: PHANTOM_MEMBRANE, E: END_ROD, S: STICK}

  shrinking_cookie:
    type: food
    material: COOKIE
    name: "<#c58bff>Shrinking Cookie</#c58bff>"
    lore:
      - "<muted>Eat: Shrink."
    spell: shrink
    eat-seconds: 0.8
    animation: eat
    nutrition: 2
    recipe:
      shape: ["CAC"]
      ingredients: {C: COOKIE, A: AMETHYST_SHARD}

  moon_bread:
    type: food
    material: BREAD
    name: "<#e2e8ff>Moon Bread</#e2e8ff>"
    lore:
      - "<muted>Eat: Moonwalk."
    spell: moonwalk
    eat-seconds: 1.2
    animation: eat
    nutrition: 4
    recipe:
      shape: ["BPB"]
      ingredients: {B: BREAD, P: PHANTOM_MEMBRANE}

  stride_stew:
    type: food
    material: RABBIT_STEW
    name: "<#7be0a3>Stride Stew</#7be0a3>"
    lore:
      - "<muted>Eat: Stride."
    spell: stride
    eat-seconds: 1.6
    animation: eat
    nutrition: 6
    recipe:
      shape: ["SRS"]
      ingredients: {S: SUGAR, R: RABBIT_STEW}

  phoenix_pepper:
    type: food
    material: BLAZE_POWDER
    name: "<#ff7a4d>Phoenix Pepper</#ff7a4d>"
    lore:
      - "<muted>Eat: Phoenix."
    spell: phoenix
    eat-seconds: 1.0
    animation: eat
    nutrition: 1
    recipe:
      shape: ["BMB"]
      ingredients: {B: BLAZE_POWDER, M: MAGMA_CREAM}

  glider_cape:
    type: cape
    material: PHANTOM_MEMBRANE
    name: "<#b48cff>Glider Cape</#b48cff>"
    lore:
      - "<muted>Wear it in the chest slot and glide."
    # Uses before it breaks (an elytra has 432). 0 = never breaks.
    durability: 432
    glint: true
    # Gliding changes a survival server; switch the recipe off to keep capes admin-only.
    recipe:
      enabled: true
      shape: ["MBM", "MDM", "M M"]
      ingredients: {M: PHANTOM_MEMBRANE, B: BREEZE_ROD, D: DIAMOND_BLOCK}

  sunflower_crown:
    type: hat
    material: SUNFLOWER
    name: "<#ffd75e>Sunflower Crown</#ffd75e>"
    lore:
      - "<muted>Wear it on your head."
    recipe:
      shape: ["SGS"]
      ingredients: {S: SUNFLOWER, G: GOLD_INGOT}

  lantern_hat:
    type: hat
    material: LANTERN
    name: "<#ffcf7a>Lantern Hat</#ffcf7a>"
    lore:
      - "<muted>Wear it on your head."
    recipe:
      shape: ["ILI"]
      ingredients: {I: IRON_NUGGET, L: LANTERN}

# █   █ ████  ███  ███  ██   ███ ████  ███
# ██ ██ █    █    █    █  █ █    █    █
# █ █ █ ███   ██   ██  ████ █ ██ ███   ██
# █   █ █       █    █ █  █ █  █ █       █
# █   █ ████ ███  ███  █  █  ███ ████ ███
#  Every word the plugin says. {placeholders} are filled in. An emptied message is switched off.
messages:
  prefix: "<accent>Arcana</accent> <muted>|</muted> "
  no-permission: "<bad>You do not have permission for that."
  players-only: "<bad>Only a player can do that."
  usage: "<text>/arcana <muted>[enchants|items|spells|show|help]</muted>"
  usage-give: "<text>/arcana give <value><player> <item> [amount]"
  usage-book: "<text>/arcana book <value><enchant> [level] [player]"
  usage-enchant: "<text>/arcana enchant <value><enchant> [level]</value> <muted>(level 0 removes it)"
  usage-cast: "<text>/arcana cast|end <value><spell> [player]"
  reloaded: "<good>Reloaded. Enchantment registry changes still need a restart."
  player-not-found: "<bad>No player online named <value>{player}</value>."
  item-not-found: "<bad>No Arcana item called <value>{item}</value>."
  enchant-not-found: "<bad>No Arcana enchantment <value>{enchant}</value> is active."
  spell-not-found: "<bad>No spell called <value>{spell}</value>."
  bad-number: "<bad>That is not a number."
  given: "<good>Gave <value>{amount}x</value> {item} <good>to <value>{player}</value>."
  given-self: "<good>You got {item}<good>."
  book-given: "<good>Gave a <value>{enchant} {level}</value> book to <value>{player}</value>."
  enchant-added: "<good>Added <value>{enchant} {level}</value> to the item in your hand."
  enchant-removed: "<good>Removed <value>{enchant}</value> from the item in your hand."
  spell-cast: "<text>{spell} <muted>for {seconds}s"
  spell-ended: "<muted>{spell} <muted>wore off."
  spell-cooldown: "<warn>{spell} <warn>is ready in <value>{seconds}s</value>."
  spell-world-off: "<warn>Spells do not work in this world."
  spell-cast-on: "<good>Cast {spell} <good>on <value>{player}</value>."
  spell-ended-by: "<good>Ended {spell} <good>for <value>{player}</value>."
  spell-not-running: "<warn>{spell} <warn>is not running on <value>{player}</value>."
  wand-empty: "<warn>This wand has no spell set in the config."
  show-empty: "<warn>Hold an item first."
  show-cooldown: "<warn>You can show another item in <value>{seconds}s</value>."
  # The item (its picture, name and tooltip on hover) is added at the end of these two.
  show-item: "<accent>{player}</accent> <text>shows "
  crafted: "<good>You crafted "
  enchant-pulled: "<text>The magic took: <accent>{enchant} {level}</accent>"
  enchant-pulled-all: "<accent>{player}</accent> <text>pulled <accent>{enchant} {level}</accent> <text>from the table!"
  soulbound-kept: "<good>Soulbound kept <value>{count}</value> item(s) safe. You get them back when you respawn."
  soulbound-kept-used: "<good>Soulbound kept <value>{count}</value> item(s) safe and was used up. You get them back when you respawn."

  # ---- the book ----
  home-title: "<title>Arcana"
  home-intro: "<text>Magic without mods. Real enchantments, wands, spell foods, capes and hats, all made from vanilla Minecraft."
  home-counts: "<value>{enchants}</value> <muted>enchantments</muted>  <value>{items}</value> <muted>items</muted>  <value>{spells}</value> <muted>spells</muted>"
  home-running: "<text>Running on you: {list}"
  running-entry: "<accent>{spell}</accent> <muted>{seconds}s</muted>"
  list-separator: "<muted>, </muted>"
  btn-enchants: "<white><icon:enchant></white>Enchantments"
  btn-enchants-tip: "What each enchantment does and where it goes."
  btn-items: "<white><icon:wand></white>Items"
  btn-items-tip: "Wands, spell foods, capes and hats."
  btn-spells: "<white><icon:spell></white>Spells"
  btn-spells-tip: "Every spell and what it does to you."
  btn-show: "<white><icon:chat></white>Show held item"
  btn-show-tip: "Show the item in your hand in chat, picture and all."
  btn-help: "<white><icon:help></white>Help"
  btn-help-tip: "Commands and how to get everything."
  btn-books: "<white><icon:book></white>Enchanted books"
  btn-books-tip: "Admin: take a max-level book of any enchantment."
  btn-reload: "<white><icon:reload></white>Reload"
  btn-reload-tip: "Reload the config. Registry changes still need a restart."
  btn-home: "<white><icon:back></white>Back"
  btn-home-tip: "Back to the start."
  btn-back: "<white><icon:back></white>Back"
  btn-back-tip: "Back one page."
  btn-close: "Close"
  btn-book: "{icon}{name} {level}"
  btn-book-tip: "Put the book in your inventory."
  btn-give: "{icon}{name}"
  btn-give-tip: "Admin: put one in your inventory."
  btn-cast: "Cast {name}"
  btn-cast-tip: "Admin: cast it on yourself to try it."

  enchants-title: "<title>Enchantments"
  enchants-intro: "<text>Real enchantments: they come from the enchanting table, books, loot chests and villagers, and combine on anvils."
  enchant-row: "{icon}<accent>{name}</accent> <muted>I to {max}  {items}  {source}</muted><newline><text>{description}"
  enchant-row-off: "{icon}<muted><st>{name}</st> switched off on this server"
  source-table: "table"
  source-treasure: "treasure only"
  where-lifesteal: "swords, axes"
  where-frostbite: "swords, axes"
  where-thunderstrike: "swords, axes"
  where-veinminer: "pickaxes"
  where-excavator: "shovels"
  where-timber: "axes"
  where-telekinesis: "pickaxes, axes, shovels, hoes"
  where-harvester: "hoes"
  where-magnet: "leggings"
  where-swiftness: "leggings"
  where-leaping: "boots"
  where-soulbound: "anything with durability"
  books-title: "<title>Enchanted books"
  books-intro: "<text>Each button puts a max-level book in your inventory. Combine it with an item on an anvil."

  items-title: "<title>Items"
  items-intro: "<text>Craft them (see your recipe book) or ask an admin. Hover an item for its tooltip."
  items-none: "<muted>No items are set up in the config."
  item-row: "{name}<newline><text>{what}"
  kind-wand: "Wand: right click casts {spell}<text>, then recharges for {seconds}s."
  kind-food: "Spell food: eat it to cast {spell}<text>, even when full."
  kind-cape: "Cape: wear it in the chest slot and glide like an elytra."
  kind-hat: "Hat: wear it on your head."
  no-spell: "<muted>nothing"

  spells-title: "<title>Spells"
  spells-intro: "<text>Spells change how your body works for a while. They end on time, even if you log out."
  spell-row: "<accent>{name}</accent> <muted>{seconds}s</muted><newline><text>{description}<newline><muted>{changes}"
  spell-row-running: "<accent>{name}</accent> <good>running</good> <muted>{seconds}s</muted><newline><text>{description}<newline><muted>{changes}"
  spell-has-effects: "{count} potion effect(s)"
  body-scale: "size {percent}%"
  body-gravity: "gravity {percent}%"
  body-jump: "jump {percent}%"
  body-speed: "speed {percent}%"
  body-step: "+{blocks} step height"
  body-fall: "+{blocks} blocks safe fall"

  help-title: "<title>Help"
  help-lines:
    - "<accent>/arcana</accent> <text>opens this book."
    - "<accent>/arcana show</accent> <text>shows the item in your hand in chat."
    - "<text>Enchantments come from the <value>enchanting table</value>, books in <value>loot chests</value> and <value>villager trades</value>. Combine books on an anvil."
    - "<text>Area enchantments (Veinminer, Excavator, Timber) work while standing. <value>Sneak</value> to break a single block."
    - "<text>Every item has a recipe in your <value>recipe book</value>."
  help-admin-lines:
    - "<accent>/arcana give</accent> <text>player item [amount]"
    - "<accent>/arcana book</accent> <text>enchant [level] [player]"
    - "<accent>/arcana enchant</accent> <text>enchant [level] on the held item (0 removes it)"
    - "<accent>/arcana cast | end</accent> <text>spell [player]"
    - "<accent>/arcana reload</accent> <text>reloads everything except the enchantment registry"

FAQ

Which servers and versions does it run on?

It needs Paper or a Paper fork such as Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components). Spigot and CraftBukkit are not supported. plugin.yml declares api-version 1.21.11, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.

Does it need other plugins?

No other plugin is required (plugin.yml has no hard dependencies).

How do I apply config changes?

Edit plugins/Arcana/config.yml and run /arcana reload (read config.yml again). A restart works too.

Does it run on Folia, or for Bedrock players?

Not tested on Folia, and plugin.yml does not declare folia-supported. Bedrock players (through Geyser) have not been tested either.

What licence do I get?

The licence terms are the BuiltByBit EULA shown on the listing. There is no licence key to enter, and the plugin never contacts a licence server.