-
Notifications
You must be signed in to change notification settings - Fork 2
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."
]
}
}| 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. |
| 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>). |
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"infeature_valuesis a sentinel meaning "no feature applied" — landing on it removes thefeature_namefeature from the Pokémon entirely, rather than setting it to a value called "null".rotom_cataloguses 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.
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 → ...
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).
- A form change (either branch above) can be delayed and paired with a particle animation via a matching entry in the
form_changes.key_itemssection 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'sgeneral_settings.disabled_itemslist, the item does nothing when used (fails immediately, no consumption). - These items have no bag-battle behavior (
getBagItem()returnsnull) — they can only be used by right-clicking a Pokémon in the overworld, not from the party screen during a battle.
-
Events —
form_changes.key_itemssection that drives the particle/animation and timing for these form changes. -
Config.json —
general_settings.disabled_itemsto block specific key items, andgeneral_settings.key_item_slotsfor 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.