(Made some additions 😏)
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{TOC|right}}
{{TOC|right}}
== Preface ==
== Preface ==
You can create a <code>species_addition</code> JSON to replace or add some new data to an existing <code>species</code> file. Species additions can be a helpful way to add your own regional variants to existing Pokémon. They can also be helpful if you want to rewrite a Pokémon's stats for an addon. This system was created to improve the compatibility between multiple datapacks by allowing datapack developers to target specific species and append or replace depending on the field type without overwriting the base species file.
You can create a <code>species_addition</code> JSON to replace or add some new data to an existing <code>[[Species|species]]</code> file. Species additions can be a helpful way to add your own [[Tutorials/Regional_Forms|regional variants]] to existing Pokémon. They can also be helpful if you want to rewrite a Pokémon's stats for an addon. This system was created to improve the compatibility between multiple datapacks by allowing datapack developers to target specific species and append or replace depending on the field type without overwriting the base species file.


=== Species Addition Breakdown ===
=== Species Addition Breakdown ===
Line 8: Line 8:
Here is a breakdown of an example <code>species addition</code>. Hover over the underlined text to see more information.
Here is a breakdown of an example <code>species addition</code>. Hover over the underlined text to see more information.
  {
  {
    "<abbr title="Here you specify what Pokémon will receive species data changes">target</abbr>": "<abbr title="Bulbasaur is the pokemon that will receive changes">cobblemon:bulbasaur</abbr>",
  "<abbr title="Here you will specify which Pokémon will receive the data in this file.">target</abbr>": "<abbr title="In this case, Bulbasaur will get all of this data written into its species file.">cobblemon:bulbasaur</abbr>",
    "<abbr title="A Pokémon's primary type">primaryType</abbr>": "<abbr title="Bulbasaur's primary type will be changed to fire">fire</abbr>",
  "<abbr title="This will let you change the primary type of the target">primaryType</abbr>": "fire",
     "<abbr title="A Pokemon's secondary type">secondaryType</abbr>": "<abbr title="Bulbasaur's secondary type will be changed to water">water</abbr>"
  "<abbr title="This will let you change the secondary type of the target">secondaryType</abbr>": "water",
  "<abbr title="Whether or not the target can be placed on the player shoulder">shoulderMountable</abbr>": true,
  "<abbr title="The following block of data would allow the target Pokémon to grant the slow falling effect to the player when on the shoulder.">shoulderEffects</abbr>": [
    {
      "type": "potion_effect",
      "effect": "minecraft:slow_falling",
      "amplifier": 0,
      "ambient": true,
      "showParticles": false,
      "showIcon": false
     }
  ],
  "<abbr title="The following block of data will allow the target Pokémon to have a 2.5% chance at dropping razor fangs.">drops</abbr>": {
    "amount": 1,
    "entries": [
      {
        "item": "cobblemon:razor_fang",
        "percentage": 2.5
      }
    ]
  },
  "<abbr title="The following block of data will rewrite the target's AI behavior. This new behavior will allow it to fly.">behaviour</abbr>": {
    "moving": {
      "walk": {
        "canWalk": true
      },
      "fly": {
        "canFly": true
      }
    },
    "resting": {
      "canSleep": true,
      "willSleepOnBed": true,
      "depth": "normal",
      "light": "0-4"
    }
  },
  "<abbr title="This will change the model size of the target">baseScale</abbr>": 2,
  "<abbr title="This will change the size of the hitbox on the target">hitbox</abbr>": {
    "<abbr title="This will make the hitbox 2 blocks wide">width</abbr>": 2,
    "<abbr title="This will make the hitbox 2 blocks tall">height</abbr>": 2,
    "fixed": false
  },
  "<abbr title="This block of data will let the target emit a light source if the player has compatible dynamic light mods installed.">lightingData</abbr>": {
    "<abbr title="This is the light level the target will give off">lightLevel</abbr>": 10,
    "<abbr title="This lets the target only emit light when on land. Never in the water.">liquidGlowMode</abbr>": "LAND"
  }
  }
  }


The result of loading this file would be Bulbasaur becoming a fire/water type.
Loading this file would have the following effects on Bulbasaur:
* It will become a fire and water type instead of grass and poison
* Can be mounted on the player shoulder
* When shoulder mounted, will grant the slow falling effect
* Can start dropping razor fangs at a 2.5% chance
* Can now fly
* Increased model scale to 2
* Increased hitbox size to a 2x2 cube
* Can emit a light level of 10 when on land only if dynamic light mods are installed


Here is a list of tips about species additions:
</br>Here is a list of tips about species additions:
* Species additions will rewrite any data if it is already written in the target species file.  
* Species additions will rewrite any data if it is already written in the target species file.  
** Example: If you wanted to add a new move to the <code>moves</code> list, you'd have to rewrite the entire move list. If you only write the one new move, it will be the only move that Pokémon can learn.
** Example: If you wanted to add a new move to the <code>moves</code> list, you'd have to rewrite the entire move list. If you only write the one new move, it will be the only move that Pokémon can learn.
Line 26: Line 80:
* Using species additions to add special Pokémon forms is the most addon friendly process!
* Using species additions to add special Pokémon forms is the most addon friendly process!
** If two creators both wanted to add a regional form to Mudkip, and they both used species additions to add the form data, then people can use both addons together without issues!
** If two creators both wanted to add a regional form to Mudkip, and they both used species additions to add the form data, then people can use both addons together without issues!
 
</br>
==== Datapack Folder Location ====
==== Datapack Folder Location ====
These files belong in a folder you might have never seen before. You can place the JSONs in the species additions folder itself, or even create sub folders for your JSONs. Here is how you should arrange your <code>species addition</code> files and folder:
These files belong in a folder you might have never seen before. You can place the JSONs in the species additions folder itself, or even create sub folders for your JSONs. Here is how you should arrange your <code>species addition</code> files and folder:
Line 42: Line 96:


=== Species Addition Examples ===
=== Species Addition Examples ===
One of the most common uses of species additions by the community is adding extra <code>evolution</code> data to official Pokémon. It is also used often to change the <code>baseScale</code> and <code>hitbox</code> sizes of a pokemon for use with unofficial models.
One of the most common uses of species additions by the community is adding extra <code>evolution</code> data to official Pokémon. It is also used often to change the <code>baseScale</code> and <code>hitbox</code> sizes of a Pokémon for use with unofficial models.
 
* In this example, Combee will have its basescale and hitbox sizes changed. A species addition like this is helpful if you want to add your own model to a Pokémon without an official model yet.
{
  "target": "cobblemon:combee",
  "baseScale": 1,
  "hitbox": {
    "width": 1,
    "height": 1.2,
    "fixed": false
  }
}
 


* In this example, Eevee will now evolve into Charizard at level 36 and it will maintain all its other eeveelutions!
* In this example, Eevee will now evolve into Charizard at level 36 and it will maintain all its other eeveelutions!
Line 66: Line 132:


The following is an example of two addons that want to change <code>evolution</code> and <code>form</code> data for an existing Pokémon. In this case, they both want to create a new eeveelution and a new regional form of Eevee that has its own evolution as well. Thanks to <code>species_additions</code> and its special rules, anybody can use both of these hypothetical addons and get the effects of both without issues!  
The following is an example of two addons that want to change <code>evolution</code> and <code>form</code> data for an existing Pokémon. In this case, they both want to create a new eeveelution and a new regional form of Eevee that has its own evolution as well. Thanks to <code>species_additions</code> and its special rules, anybody can use both of these hypothetical addons and get the effects of both without issues!  
* A normal Eevee could then evolve into Charizard or Blastoise at level 36.  
* A regular Eevee could then evolve into Charizard or Blastoise at level 36.  
* An Alolan Eevee would become an ice type and evolve into Squirtle with a water stone.
* An Alolan Eevee would become an Ice type and evolve into Squirtle with a [[Water Stone]].
* A Hisuian Eevee would become a fire type and evolve into Bulbasaur with a leaf stone.  
* A Hisuian Eevee would become a Fire type and evolve into Bulbasaur with a [[Leaf Stone]].  


Addon #1's species addition:
Addon #1's species addition:
Line 158: Line 224:


[[File:New_Eeveelutions.png|thumb|center|900px|caption|The resulting eeveelutions with both addons enabled.]]
[[File:New_Eeveelutions.png|thumb|center|900px|caption|The resulting eeveelutions with both addons enabled.]]
{{Addon Creation}}

Latest revision as of 11:48, 4 March 2024

Preface

You can create a species_addition JSON to replace or add some new data to an existing species file. Species additions can be a helpful way to add your own regional variants to existing Pokémon. They can also be helpful if you want to rewrite a Pokémon's stats for an addon. This system was created to improve the compatibility between multiple datapacks by allowing datapack developers to target specific species and append or replace depending on the field type without overwriting the base species file.

Species Addition Breakdown

Creating a species addition JSON is very simple. You simply list your target Pokémon, and then list any data that you wish to rewrite or add to the species file of that Pokémon. Forms and evolution data are exceptions to the rewriting. They will always be added instead.

Here is a breakdown of an example species addition. Hover over the underlined text to see more information.

{
 "target": "cobblemon:bulbasaur",
 "primaryType": "fire",
 "secondaryType": "water",
 "shoulderMountable": true,
 "shoulderEffects": [
   {
     "type": "potion_effect",
     "effect": "minecraft:slow_falling",
     "amplifier": 0,
     "ambient": true,
     "showParticles": false,
     "showIcon": false
   }
 ],
 "drops": {
   "amount": 1,
   "entries": [
     {
       "item": "cobblemon:razor_fang",
       "percentage": 2.5
     }
   ]
 },
 "behaviour": {
   "moving": {
     "walk": {
       "canWalk": true
     },
     "fly": {
       "canFly": true
     }
   },
   "resting": {
     "canSleep": true,
     "willSleepOnBed": true,
     "depth": "normal",
     "light": "0-4"
   }
 },
 "baseScale": 2,
 "hitbox": {
   "width": 2,
   "height": 2,
   "fixed": false
 },
 "lightingData": {
   "lightLevel": 10,
   "liquidGlowMode": "LAND"
 }
}

Loading this file would have the following effects on Bulbasaur:

  • It will become a fire and water type instead of grass and poison
  • Can be mounted on the player shoulder
  • When shoulder mounted, will grant the slow falling effect
  • Can start dropping razor fangs at a 2.5% chance
  • Can now fly
  • Increased model scale to 2
  • Increased hitbox size to a 2x2 cube
  • Can emit a light level of 10 when on land only if dynamic light mods are installed


Here is a list of tips about species additions:

  • Species additions will rewrite any data if it is already written in the target species file.
    • Example: If you wanted to add a new move to the moves list, you'd have to rewrite the entire move list. If you only write the one new move, it will be the only move that Pokémon can learn.
  • Species additions will also add your written data if it doesn't exist in the target species file yet.
    • You can create a file to add drops for Pokémon that don't drop anything yet.
  • This system was created to help addon creators keep their datapacks compatible with others! Always use them if you wish to edit something about existing Pokémon you didn't create.
    • It will prevent 2 datapacks fighting over who will get to replace the main species file.
    • It can prevent your addon from causing irreparable damage to player save data in certain scenarios!
  • If 2 additions want to rewrite the same thing, like item drops, then only the first file in the load order will have its changes implemented.
  • Using species additions to add special Pokémon forms is the most addon friendly process!
    • If two creators both wanted to add a regional form to Mudkip, and they both used species additions to add the form data, then people can use both addons together without issues!


Datapack Folder Location

These files belong in a folder you might have never seen before. You can place the JSONs in the species additions folder itself, or even create sub folders for your JSONs. Here is how you should arrange your species addition files and folder:

  • (addon name)
    • data
      • (addon name)
        • species_additions
          • <target_pokemon>.json
          • (optional target pokemon/generation folders)
            • <optional target_pokemon>.json


You can also merge the species additions folder into an existing addon pack.

Species Addition Examples

One of the most common uses of species additions by the community is adding extra evolution data to official Pokémon. It is also used often to change the baseScale and hitbox sizes of a Pokémon for use with unofficial models.

  • In this example, Combee will have its basescale and hitbox sizes changed. A species addition like this is helpful if you want to add your own model to a Pokémon without an official model yet.
{
 "target": "cobblemon:combee",
 "baseScale": 1,
 "hitbox": {
   "width": 1,
   "height": 1.2,
   "fixed": false
 }
}


  • In this example, Eevee will now evolve into Charizard at level 36 and it will maintain all its other eeveelutions!
{
 "target": "cobblemon:eevee",
 "evolutions": [
   {
     "id": "eevee_charizard",
     "variant": "level_up",
     "result": "charizard",
     "consumeHeldItem": false,
     "learnableMoves": [],
     "requirements": [
       {
         "variant": "level",
         "minLevel": 36
       }
     ]
   }
 ]
}


The following is an example of two addons that want to change evolution and form data for an existing Pokémon. In this case, they both want to create a new eeveelution and a new regional form of Eevee that has its own evolution as well. Thanks to species_additions and its special rules, anybody can use both of these hypothetical addons and get the effects of both without issues!

  • A regular Eevee could then evolve into Charizard or Blastoise at level 36.
  • An Alolan Eevee would become an Ice type and evolve into Squirtle with a Water Stone.
  • A Hisuian Eevee would become a Fire type and evolve into Bulbasaur with a Leaf Stone.

Addon #1's species addition:

{
 "target": "cobblemon:eevee",
 "features": ["alolan"],
 "forms": [
   {
     "name": "Alola",
     "primaryType": "ice",
     "abilities": [
       "snowcloak",
       "h:snowwarning"
     ],
     "aspects": ["alolan"],
     "evolutions": [
       {
         "id": "eevee_squirtle",
         "variant": "item_interact",
         "result": "squirtle",
         "consumeHeldItem": false,
         "learnableMoves": [],
         "requirements": [],
         "requiredContext": "cobblemon:water_stone"
       }
     ]
   }
 ],
 "evolutions": [
   {
     "id": "eevee_blastoise",
     "variant": "level_up",
     "result": "blastoise",
     "consumeHeldItem": false,
     "learnableMoves": [],
     "requirements": [
       {
         "variant": "level",
         "minLevel": 36
       }
     ]
   }
 ]
}


Addon #2's species addition:

{
 "target": "cobblemon:eevee",
 "features": ["hisuian"],
 "forms": [
   {
     "name": "Hisui",
     "primaryType": "fire",
     "abilities": [
       "flamebody",
       "h:drought"
     ],
     "aspects": ["hisuian"],
     "evolutions": [
       {
         "id": "eevee_bulbasaur",
         "variant": "item_interact",
         "result": "bulbasaur",
         "consumeHeldItem": false,
         "learnableMoves": [],
         "requirements": [],
         "requiredContext": "cobblemon:leaf_stone"
       }
     ]
   }
 ],
 "evolutions": [
   {
     "id": "eevee_charizard",
     "variant": "level_up",
     "result": "charizard",
     "consumeHeldItem": false,
     "learnableMoves": [],
     "requirements": [
       {
         "variant": "level",
         "minLevel": 36
       }
     ]
   }
 ]
}
The resulting eeveelutions with both addons enabled.