Skip to content

Key_Form_Items.json

Unariginal edited this page Sep 4, 2026 · 1 revision

Key_Form_Items.json

Defines held-in-hand items that change a Pokémon's form when used directly on it (right-clicked onto a matching Pokémon) — the classic "orb"/"catalog"-style key items (Adamant Crystal, Griseous Core, Reveal Glass, Rotom Catalog, etc.). Located at GenesisForms/items/key_items/key_form_items.json.

📄 Full default file
{
  "adamant_crystal": {
    "consumable": false,
    "max_stack_size": 1,
    "species": ["dialga"],
    "feature_name": "orb_forme",
    "feature_values": ["altered", "origin"],
    "lore": [
      "<gray>An item to be held by Dialga.",
      "<gray>This large, glowing gem wells with power and allows the Pokémon to change form."
    ]
  },
  "lustrous_globe": {
    "consumable": false,
    "max_stack_size": 1,
    "species": ["palkia"],
    "feature_name": "orb_forme",
    "feature_values": ["altered", "origin"],
    "lore": [
      "<gray>An item to be held by Palkia.",
      "<gray>This large, glowing orb wells with power and allows the Pokémon to change form."
    ]
  },
  "griseous_core": {
    "consumable": false,
    "max_stack_size": 1,
    "species": ["giratina"],
    "feature_name": "orb_forme",
    "feature_values": ["altered", "origin"],
    "lore": [
      "<gray>An item to be held by Giratina.",
      "<gray>This large, glowing gem wells with power and allows the Pokémon to change form."
    ]
  },
  "gracidea_flower": {
    "consumable": false,
    "max_stack_size": 1,
    "species": ["shaymin"],
    "feature_name": "gracidea_forme",
    "feature_values": ["land", "sky"],
    "lore": [
      "<gray>A flower sometimes bundled into a bouquet to be given as an expression of gratitude on special occasions, such as birthdays and anniversaries."
    ]
  },
  "pink_nectar": {
    "consumable": true,
    "max_stack_size": 64,
    "species": ["oricorio"],
    "feature_name": "dance_style",
    "feature_values": ["pa'u"],
    "lore": [
      "<gray>Flower nectar obtained from a pink flower.",
      "<gray>It changes the form of a certain species of Pokémon."
    ]
  },
  "purple_nectar": {
    "consumable": true,
    "max_stack_size": 64,
    "species": ["oricorio"],
    "feature_name": "dance_style",
    "feature_values": ["sensu"],
    "lore": [
      "<gray>Flower nectar obtained from a purple flower.",
      "<gray>It changes the form of a certain species of Pokémon."
    ]
  },
  "red_nectar": {
    "consumable": true,
    "max_stack_size": 64,
    "species": ["oricorio"],
    "feature_name": "dance_style",
    "feature_values": ["baile"],
    "lore": [
      "<gray>Flower nectar obtained from a red flower.",
      "<gray>It changes the form of a certain species of Pokémon."
    ]
  },
  "yellow_nectar": {
    "consumable": true,
    "max_stack_size": 64,
    "species": ["oricorio"],
    "feature_name": "dance_style",
    "feature_values": ["pom_pom"],
    "lore": [
      "<gray>Flower nectar obtained from a yellow flower.",
      "<gray>It changes the form of a certain species of Pokémon."
    ]
  },
  "prison_bottle": {
    "consumable": false,
    "max_stack_size": 1,
    "species": ["hoopa"],
    "feature_name": "djinn_state",
    "feature_values": ["confined", "unbound"],
    "lore": [
      "<gray>A bottle believed to have been used to seal away the power of a certain Pokémon long, long ago."
    ]
  },
  "reveal_glass": {
    "consumable": false,
    "max_stack_size": 1,
    "species": ["landorus", "thundurus", "tornadus", "enamorus"],
    "feature_name": "mirror_forme",
    "feature_values": ["incarnate", "therian"],
    "lore": [
      "<gray>A mysterious looking glass that reveals the truth.",
      "<gray>It can return a Pokémon to its original shape."
    ]
  },
  "meteorite": {
    "consumable": false,
    "max_stack_size": 1,
    "species": ["deoxys"],
    "feature_name": "meteorite_forme",
    "feature_values": ["normal", "attack", "defense", "speed"],
    "lore": [
      "<gray>A rock that fell to earth from space. It’s slightly warm to the touch.",
      "<gray>It allows a certain species of Pokémon to change forms."
    ]
  },
  "rotom_catalog": {
    "consumable": false,
    "max_stack_size": 1,
    "species": ["rotom"],
    "feature_name": "appliance",
    "feature_values": ["null", "heat", "wash", "frost", "fan", "mow"],
    "lore": [
      "<gray>A catalog of devices that Rotom like.",
      "<gray>Use the catalog to have Rotom hop in and out of the various devices listed within."
    ]
  }
}

Top Level

Field Type Description
<item_id> object A single key item, keyed by its own item ID (e.g. adamant_crystal). This ID is also the in-game item ID (genesisforms:<item_id>) and the argument used by /genesis giveKeyItem.

Item Object

Field Type Description
consumable boolean If true, one item is removed from the stack each time it's successfully used on a Pokémon. If false, the item is kept indefinitely (a reusable key item, like a real orb/catalog).
max_stack_size integer Max stack size for the item in an inventory. Reusable (non-consumable) items are typically 1; consumable items (nectars) are typically 64.
species string array The Pokémon species this item can be used on. Matched case-insensitively against the target's species name; the item does nothing (canUseOnPokemon fails) on any other species.
feature_name string The Cobblemon species feature this item changes (e.g. orb_forme, appliance, dance_style).
feature_values string array The ordered list of feature values this item can set. A list of exactly one value behaves differently from a list of two or more — see Cycling Behavior below.
lore string array Extra lore lines shown on the item's tooltip. Supports MiniMessage color/formatting tags (e.g. <gray>).

Cycling Behavior

Note

This section is based on FormCycleItem.java's actual use-logic, not just the config shape — read this before assuming an item "just sets" a form.

Right-clicking one of these items directly onto a matching Pokémon calls applyToPokemon, which behaves differently depending on how many entries are in feature_values:

feature_values has exactly one entry (e.g. pink_nectar["pa'u"]) The item unconditionally applies that single value to the Pokémon's feature_name every time it's used — there's no cycling and no check of the Pokémon's current form. This is effectively a "set to X" item. All four Oricorio nectars work this way: each nectar is single-purpose and simply forces dance_style to its one style.

feature_values has two or more entries (e.g. adamant_crystal["altered", "origin"], meteorite["normal", "attack", "defense", "speed"], rotom_catalog["null", "heat", "wash", "frost", "fan", "mow"]) The item reads the Pokémon's current value for feature_name (if the Pokémon has no such feature at all, its current value is treated as the literal string "null"), finds that value's position in the feature_values list, and advances to the next entry — wrapping back around to index 0 once it runs past the end of the list. In other words: it cycles forward through the list, in the order the list is written in the JSON, looping back to the start after the last entry.

  • The literal string "null" in feature_values is a sentinel meaning "no feature applied" — landing on it removes the feature_name feature from the Pokémon entirely, rather than setting it to a value called "null". rotom_catalog uses this to cycle Rotom back to its base (no-appliance) form.
  • If the Pokémon's current value isn't found anywhere in feature_values (e.g. the feature is in some state the item's list doesn't know about), the item silently does nothing — no form change happens.

Warning

If a multi-value item is also marked consumable: true, it is still decremented from the stack even on a "does nothing" use (current value not found in feature_values) — the consumption check is not conditioned on whether a form change actually occurred. All of the default multi-value items ship as consumable: false, which sidesteps this, but keep it in mind if you add a new consumable multi-value item.

Worked example — Rotom Catalog

rotom_catalog has feature_values: ["null", "heat", "wash", "frost", "fan", "mow"]. Starting from a base Rotom (no appliance feature, so "current value" = "null"), repeated use cycles:

null → heat → wash → frost → fan → mow → null → heat → ...

Worked example — Adamant Crystal

adamant_crystal has feature_values: ["altered", "origin"] and only applies to Dialga. Since there are exactly two entries, each use simply toggles Dialga between Altered Forme and Origin Forme (whatever the current value isn't, is applied next).

Other Behavior Notes

  • A form change (either branch above) can be delayed and paired with a particle animation via a matching entry in the form_changes.key_items section of Events — the event ID looked up is <species>_<feature_value> (lowercase), e.g. dialga_origin. If an animation with a delay is configured there, the actual feature change is deferred by that many seconds after the item is used.
  • If the item's own ID is present in Config.json's general_settings.disabled_items list, the item does nothing when used (fails immediately, no consumption).
  • These items have no bag-battle behavior (getBagItem() returns null) — they can only be used by right-clicking a Pokémon in the overworld, not from the party screen during a battle.

See Also

  • Eventsform_changes.key_items section that drives the particle/animation and timing for these form changes.
  • Config.jsongeneral_settings.disabled_items to block specific key items, and general_settings.key_item_slots for where these items are recognized from in a player's inventory.
  • Commands/genesis giveKeyItem <player> <key-item> to give any key item (including these) directly.

Config Files

─ items/accessories/Accessories.json

─ items/bag_items/Max_Items.json

─ items/bag_items/Tera_Shards.json

─ items/held_items/Held_Battle_Items.json

─ items/held_items/Held_Form_Items.json

─ items/held_items/Z_Crystals.json

─ items/key_items/Fusion_Items.json

─ items/key_items/Key_Form_Items.json

─ items/key_items/Possession_Items.json

Clone this wiki locally