Preface
This beginner friendly step-by-step guide will walk you through adding custom Pokémon through resource and data packs. Cobblemon addons have certain requirements in order to work in Minecraft. There are several mistakes you can make along the way that can cause the game to crash. This tutorial was created in collaboration with Cobblemon community members who have made these mistakes.
Knowledge of coding and resource packs is not necessary! Experience with Blockbench is recommended, but never required! If at any point your addon is not working, you can look for help in the Cobblemon discord.
Overview
This guide will teach you:
- How to format your models and animations
- Where to place your files
- How to configure stats for your Pokémon
- How to configure evolutions for your Pokémon
- How to configure spawning for your Pokémon
What you will be creating are two things together; a resource pack and a data pack. Resource packs primarily operate within the assets folder, while data packs operate within the data folder.
The reason we need to make two different things is that the data pack handles all the information (stuff a server needs), and the resource pack handles all the assets like models, textures, and more (stuff the client needs).
In this guide we will be creating both as a single pack.
As a brief summary:
Data packs
as a stand-alone are useful for servers, as servers have no need for assetsResource packs
are useful for players playing on servers that already have the data- A single pack with data pack and resource pack files together are useful to players who are playing single player, and need both the data and the assets. These combined data and resource files are often called
Addons
.
Recommended Tools
While creating an addon can be done with a browser and some default PC tools, it's highly recommended that you download some of the following software. They can be very helpful if you want to make more than one custom Pokémon.
- Blockbench Desktop App - It will make accessing assets easier
- A Text Editor - They can be helpful for editing multiple files at once
- Recommendations:
- Visual Studio Code
- Notepad++
- Recommendations:
- Zip File Software - They can help you zip up your addon to be shared
- Recommendations:
- 7zip
- Recommendations:
Cobblemon addons use a lot of json
files. These are human-readable sets of data for Minecraft to read. Here are some JSON terms to help you understand these files.
JSON terminology
"key": "value"
- Property, aka "key-value pair".key
must have quotes around it in JSON.value
can be any of the following:{}
- Object. contains properties, as above.[]
- Array. Is an ordered list of "entries" of any of the other data types."abc"
- String. Quotes around any set of characters. Cannot have line returns in the middle of them.1
- Number. Doesn't have quotes. Some values can be decimal friendly.true/false
- Boolean. Doesn't have quotes. One of possibly either `true` or `false`
JSON quirks
- Must have commas between properties.
- Cannot have commas after properties if there's not another property.
- You can't have any commas before any sort of closing bracket.
Creating a Custom Pokemon
Part 1: Arrange the folders for this addon
Due to some files sharing the same names later in this guide, you will be creating the folder structure and pack.mcmeta
now. This is to prevent confusion going forward.
- Create a new text file and name it
pack.mcmeta
- Ensure that it doesn't end in other file extensions like .txt
- This file tells Minecraft "this is a resourcepack/datapack"
- Open the file and insert the following data:
- Hover over the underlined text to see more information.
{ "pack": { "pack_format": 9, "description": "Example description" } }
- Save the file and put it aside for now.
- Create a series of folders arranged like the following example:
Folder Structure
- (addon name)
- pack.mcmeta
- assets
- cobblemon
- bedrock
- pokemon
- animations
- <folder named after your pokemon>
- models
- <folder named after your pokemon>
- posers
- resolvers
- <folder named after your pokemon>
- animations
- pokemon
- lang
- textures
- pokemon
- <folder named after your pokemon>
- pokemon
- bedrock
- cobblemon
- data
- cobblemon
- spawn_pool_world
- species
- custom
- cobblemon
After this folder tree for your addon is made, you can simply drop the files into the associated folders as you create them.
Remember that the pack.mcmeta
is a file, not a folder to add. It must be one folder deep in order for Minecraft to recognize this pack as a resource pack or data pack when in the appropriate game folders.
Part 2: Create your Pokémon's assets in Blockbench
This is not a guide to Blockbench. This extensive part of the tutorial will guide you in the creation of a compatible Cobblemon model. Cobblemon models have certain requirements in order to work in Minecraft. There are several mistakes you might make when creating a model which may result in you having to start all over.
This part of the guide is a slightly watered down version of the model creation tutorial to keep things more beginner friendly.
Step 1: Get access to Blockbench
Blockbench is a free 3D Modeling program capable of doing everything you need to make a Cobblemon model. You can create a model, paint it, and animate it all at the same time using Blockbench. Watching some Blockbench tutorials before getting started is recommended.
- On your browser and go to https://www.blockbench.net
DOWNLOAD
the app or click onOPEN WEB APP
Blockbench can also be used on mobile devices!
Disclaimer: This guide is tailored towards the Blockbench app on PC.
Step 2: Create the model file
You will be creating the project file in Blockbench. Although this step seems simple, if you choose the wrong model type or UV mode then it will not work with Cobblemon's custom pokemon system.
- Open up Blockbench
- Click on File > New > Bedrock Entity
- In lowercase only, type the name of your custom pokemon in both
File Name
andModel Identifier
- Make sure Default UV Mode is set to
Box UV
- Leave
Texture Size
alone - Click
Confirm
You have created the foundation of your model file!
Despite being for the Java version of Minecraft, Cobblemon uses Bedrock entities to allow for flexible animations.
Step 3: Creating cubes the right way
There are many ways to create a Pokémon model. There is no “right way” to make a cube to build your design; however, there are several things that can break your model involving these cubes.
Before you get started, you should know that there are several things you should never do when creating cubes. As you create your model, keep the following tips in mind:
- Don't use capital letters when naming your cubes or groups. Minecraft might crash trying to read them.
- Always stick with lowercase letters when naming things!
- Don't use decimals in
Size
values! Minecraft can't handle "2.5" pixels properly.Position
,Inflate
,Pivot Point
, andRotation
values can use decimals without issues.
- Don't change the UV Mode of the cube. They should all be “Box UV” by default.
- If just one cube is changed to Per-face UV, the whole resource pack will refuse to load.
- Don't forget to save! It can take hours or days to make your model. Save often!
- Make sure your model is facing
North
! It should be facing towards the N on the floor.- It may walk backwards or sideways in game if not facing North.
- Your model does not always need to be on a 1 to 1 scale. It can be sized down in game to affect texture details.
With that in mind, you can start creating cubes in Blockbench!
- Create a cube by clicking the
Add Cube
button under "Outliner" or press Ctrl + N - Change the elements of this cube as needed
- Repeat these steps when more cubes are needed for the model
You can change one of the size values to 0 to create a 2D plane. These are usually called panes
and can be used to create flat textures for certain situations. Remember to paint the back side of these panes!
Step 4: Arrange your cubes into "bones"
As you create the cubes for your model, you will want group them into folders. These groups of cubes are called bones
. Only bones can be selected in the Animate
tab. Bones can even go inside of other bones. You are essentially building a skeleton. Sort these bones out to make animating the model easier later on.
- Decide which cubes should be grouped together as a
bone
.
example: grouping several cubes together to make a "foot" bone. Then grouping other cubes to make a "leg" bone. - Create a group by clicking the
Add Group
button under "Outliner" or press Ctrl + G - Name this new bone. It is recommended to use names of body parts like arm, arm 2, hand, etc.
- Click and drag associated cubes into this new bone folder.
- Assign an appropriate pivot point to this new bone. This controls the location it will rotate from.
- Repeat these steps when more bones are needed for animation
Bones can use the same properties under the "Element" section. How you use these properties with bones is up to you. You can reference official models that
have a similar body type to your custom Pokémon.
Step 5: Arranging your bones the right way
There are many ways to create a Pokémon model. Unfortunately, there is a "right way" to arrange your bones so it won't break something in game; however, this will never restrict your creative freedom! There are only 2 "bones" required to make your model functional with Cobblemon and it shouldn't interfere with your design.
You may want to come back to these steps after creating all of the cubes necessary to make your model complete
- Create a new bone group and name this folder after your custom Pokémon
- Drag all bones and cubes into this new folder until it holds everything.
- This folder that holds everything is known as the
root folder
- This folder that holds everything is known as the
- Ensure the XYZ Pivot Point values of the root folder are all at 0.
- This stops the model from sinking into the ground in game.
- Create or pick the
head
bone for your Pokémon.- This will be the bone that rotates when it uses the "look" animation.
- Sometimes a Pokémon wont have a traditional head like Spheal for example. You'll have to get creative with which bone shall be the head bone.
- Ensure this head bone is named
head
.- You mostly name it "head" for simplicity with the
poser file
. - If your Pokémon is shaped differently, then just remember to use the name of the bone that works best in its poser file.
- You mostly name it "head" for simplicity with the
The root folder is crucial for making the in-game model's position look exactly the way it does in Blockbench. If the Pivot values are not 0, then it will shift in some direction.
Having a head bone allows the Pokémon to use the look animation without issues. In the past, many creators have unknowingly assigned the head bone as "head" in their poser files when following the custom Pokémon guide. If the model did not have this matching head
bone, the game would crash!
Step 6: Create your textures
This step will only help you with the creation of the files. Any artistic help will have to be sourced from somewhere else. It is recommended to watch some tutorials or ask for help in the Cobblemon discord.
- Click on "Create Texture" or press Ctrl+Shift+T.
- Name the texture after your Pokémon.
- Ensure Pixel Density is set to
16x
- Other densities may break textures.
- The model can later be sized up or down to affect details.
- Click confirm. The default settings are usually fine.
- Navigate to the
Paint
tab in the top-right corner of Blockbench - Paint the model until satisfied.
- Click the Save icon on your texture, or press Ctrl+S
- Make sure the PNG is called
<pokemon>.png
- Place this PNG in your Pokemon's
texture
folder of your addon.- The folder path for this PNG should be like so:
<your_addon>/assets/cobblemon/textures/pokemon/<your_pokemon>/<pokemon>.png
- The folder path for this PNG should be like so:
- Repeat these steps for the shiny texture. (optional)
Step 7: Animate your Pokémon
Again, this step will only help you with the creation of the files. Animations are not required to make your Pokémon work in game. This step may be skipped.
Remember that animations can only select bones. And if you change the bone names during or after this process, then you need to update your animations!
- Navigate to the
Animate
tab in the top-right corner of Blockbench - Under the "ANIMATIONS" section, click the
Add Animation
button. - Name your animation
animation.<pokemon>.<animation type>
- There is a list of animation type examples below
- Select a desired loop mode. This can be changed later.
- Click
Confirm
- Animate your pokemon until satisfied.
- Repeat the previous steps to create new animations.
- Save your animations as a group. Click on the top-most save icon.
- Name this animation JSON
<pokemon>.animation.json
- Place this animation JSON in your Pokemon's
animation
folder of your addon.- The folder path for this JSON should be like so:
<your_addon>/assets/cobblemon/bedrock/pokemon/animations/<your_pokemon>/<pokemon>.animation.json
- The folder path for this JSON should be like so:
Cobblemon has a limited selection of Pose types that animations can use in game. You should at least create some core animations like idles, walks, and faints. You can name your animations using the following naming scheme.
Beginner list of Poses and animations you should make for your Pokemon:
- "STAND" -
animation.<pokemon>.ground_idle
- "WALK" -
animation.<pokemon>.ground_walk
- "faint" -
animation.<pokemon>.faint
The full list of usable pose types and the animations that work with them can be found on the full version of the model guide.
Step 8: Export Bedrock Geometry
By now, you should already have your textures and animations saved somewhere. All that's left is to export your model file. Afterwards, everything you have made should be ready to use in resource packs!
- Click on File > Export > Export Bedrock Geometry
- Name this file
<pokemon>.geo.json
- Place this model JSON in your Pokemon's
model
folder of your addon.- The folder path for this JSON should be like so:
<your_addon>/assets/cobblemon/bedrock/pokemon/models/<your_pokemon>/<pokemon>.geo.json
- The folder path for this JSON should be like so:
This step is done last in case any edits needed to be made to the model.
Congratulations! You should now have a model, textures, and animations, which is most of the work for creating a custom Pokémon. Provided you followed this guide, your model should not be causing any issues when put in game.
Part 3: Create your Pokemon's Poser file
Posers
are JSON files that create a set of animations for a Pokémon to use. The poser file contains information on when the Pokémon will perform certain animations. You can set your Pokémon to only ever perform one animation if you’d like, or you can give it different animations for just about every action it performs!
You will be creating a poser file for the idle, walk, and faint animation you should have created if following this guide. Later in this guide, you will have to come back and edit some of the portrait
and profile
values in the file so they look nice in the menus!
- Create a new text file and name it after your Pokémon. Include the file extension of
.json
- Example:
bulbasaur.json
- Make sure this new file name ends in .json and not any other file extension like .txt.
- Example:
- Open this new JSON in your preferred text editor
- Copy and paste this entire poser example into the JSON
- Hover over the underlined text to see more information.
{ "head": "head", "portraitScale": 1, "portraitTranslation": [ 0, 0.5, 0 ], "profileScale": 1, "profileTranslation": [ 0, 0.4, 0 ], "faint": "bedrock(pokemon, faint)", "poses": { "standing": { "poseName": "standing", "transformTicks": 10, "poseTypes": [ "STAND", "NONE", "PORTRAIT", "PROFILE" ], "animations": [ "look", "bedrock(pokemon, ground_idle)" ] }, "walking": { "poseName": "walking", "transformTicks": 10, "poseTypes": [ "WALK" ], "animations": [ "bedrock(pokemon, ground_walk)" ] } } }
- In the section for
"faint"
, change "pokemon" in"bedrock(pokemon, faint)"
to be your Pokémon's name.- Don't put the name in quotes.
- In the section for
"standing"
, change "pokemon" in"bedrock(pokemon, ground_idle)"
to be your Pokémon's name.- Don't put the name in quotes.
- In the section for
"walking"
, change "pokemon" in"bedrock(pokemon, ground_walk)"
to be your Pokémon's name.- Don't put the name in quotes.
- Save the file
- Place this new poser JSON into the
posers
folder of your addon.
You just created the poser file! When it's time to test your addon in game, it should use the animations you created earlier.
Part 4: Create your Pokemon's Resolver file
Resolvers
are JSON files that assign a Pokémon its model
, textures
, and animations
. The resolver files control all the things that allow a Pokémon to function visually!
You will be creating the resolver file for your Pokémon. At this part of the guide, you should already have files for model, texture, animation, and poser. Now they just need to be linked to your Pokémon using the resolver file.
- Create a new text file and name it
"0_<pokemon>_base.json"
- Example:
0_treecko_base.json
- Make sure this new file name ends in .json and not any other file extension like .txt.
- Example:
- Open this new JSON in your preferred text editor
- Copy and paste this entire resolver example into the JSON
- Hover over the underlined text to see more information.
{ "species": "cobblemon:treecko", "order": 0, "variations": [ { "aspects": [], "poser": "cobblemon:treecko", "model": "cobblemon:treecko.geo", "texture": "cobblemon:textures/pokemon/treecko/treecko.png", "layers": [] }, { "aspects": [ "shiny" ], "texture": "cobblemon:textures/pokemon/treecko/treecko_shiny.png" } ] }
- In the section for
"species"
, change "treecko" in"cobblemon:treecko"
to be your Pokémon's name. - In the section for
"poser"
, change "treecko" in"cobblemon:treecko"
to be your Pokémon's name. - In the section for
"model"
, change "treecko" in"cobblemon:treecko.geo"
to be your Pokémon's name. - In the section for
"textures"
, change both instances of "treecko" in"cobblemon:textures/pokemon/treecko/treecko.png"
to be your Pokémon's name. - Under the
"shiny"
aspect section for"textures"
, change both instances of "treecko" in"cobblemon:textures/pokemon/treecko/treecko_shiny.png"
to be your Pokémon's name.- Don't delete the "_shiny" part of the name.
- You can remove the shiny variation if you didn't make any shiny textures.
- Save the file
- Place this new resolver JSON into your Pokémon's
resolvers
folder of your addon.
You just created your Pokémon's resolver file. When it's time to load your addon in game, it should be using the model, textures, and animations you created for it!
Part 5: Create your Pokemon's Species file
Now that we’ve got all the assets in place, we can now create the species
file! The species file contains all the entity data your Pokémon needs to exist. This is done from the data folder within your pack. This section will be extensive, but it will explain some of the basic properties of the species file
.
This part of the guide can be skipped if you are able to create your Pokemon's species
file through this Fakemon Generator made for Cobblemon! It will automatically create a zipped species JSON after you fill out some information for your Pokémon. The Fakemon Generator is very beginner friendly and can prevent you from making typos in the process of making a species file by hand.
Creating the Species JSON
This JSON will contain all the necessary data any Pokémon needs. This includes its name, type, abilities, stats, moves, etc.
- Create a new text file and name it after your pokemon. Include the file extension of
.json
- Example:
bulbasaur.json
- Make sure this new file name ends in .json and not any other file extension like .txt.
- Example:
- Open this new JSON in your preferred text editor
- Let's start by adding an opening and a closing curly bracket to the file like so:
- In the following sections you will be adding information in between these brackets.
{ }
Basic Information
Let's add some basic information about your pokemon.
- Copy and paste the following data inside the previously created curly brackets.
- Hover over the underlined text to see more information.
"implemented": true, "name": "tentaquil", "labels": [ "custom" ], "pokedex": [ "cobblemon.species.tentaquil.desc1", "cobblemon.species.tentaquil.desc2" ], "height": 11, "weight": 300, "shoulderMountable": false,
- Change the 3 instances of "tentaquil" to your Pokémon's name
- Change the values of
"height"
,"weight"
, and"shoulderMountable"
if desired.
Stats
Now let's include the stats. You can refer to the stats of official Pokémon as guidelines if you plan on making the stats more practical and faithful to the official games.
- Copy and paste the following data in a new line after the previous data.
- Hover over the underlined text to see more information.
"primaryType": "poison", "secondaryType": "water", "baseStats": { "hp": 125, "attack": 105, "defence": 95, "special_attack": 120, "special_defence": 85, "speed": 70 }, "catchRate": 30, "maleRatio": 0.5, "baseExperienceYield": 270, "experienceGroup": "fluctuating", "eggCycles": 25, "eggGroups": [ "water_1", "monster" ], "baseFriendship": 35, "evYield": { "hp": 2, "special_attack": 1 },
- Change any of these values if desired
Moves and Abilities
Here you will include the abilities and move pool for your pokemon.
- Copy and paste the following data in a new line after the previous data.
- Hover over the underlined text to see more information.
"moves": [ "egg:disable", "20:crushclaw", "tm:rest", "tutor:honeclaws" ], "abilities": [ "toughclaws", "h:serenegrace" ],
- Change any of these values if desired
Entity Properties
Here you will list some properties of your pokemon like its behavior, drops, and size.
- Copy and paste the following data in a new line after the previous data.
- Hover over the underlined text to see more information.
"baseScale": 1, "hitbox": { "width": 1, "height": 1, "fixed": false }, "drops": { "amount": "2", "entries": [ { "item": "minecraft:slimeball", "quantityRange": "1-2", "percentage": 66 } ] }, "behaviour": { "moving": { "canLook": true, "fly": { "canFly": false }, "swim": { "swimSpeed": 0.2, "canSwimInWater": true, "canBreatheUnderwater": true } } }
- Change any of these values if desired
Save the file!
That should be enough data for your custom Pokémon to be functional in game. Now you can save the file.
- Save the file
- Place this new species JSON into the
custom
folder of your addon.
Part 6: Testing your Pokemon in Game
Scuffed WIP Tutorial alert
- Start up Minecraft
- Create a new world
- Set it to creative and allow cheats!
- Click on "Data Packs"
- Click on "Open Pack Folder"
- Copy your addon folder and paste it into this datapack folder.
- Select your addon and click done
- Click on "Create New World"
- After the world has loaded, spawn your pokemon. Is substitute
- Open your options menu.
- Click on "Resource Packs"
- Click on "Open Pack Folder"
- Copy your addon folder and paste it into this resourcepack folder.
- Select your resourcepack and click done.
- Name and model should be good.
- Poggers moment
Now fix the other stuff or else
Part 7: Creating the lang file
In this section we will walk you through on how to display the Pokémon's name in game. Let's begin by making a language file!
Minecraft will take whatever text is declared in this language file to show in game if a matching key is defined. The purpose of this is so that text such as names can be translated for different languages.
Remember the weird text that appeared above the Pokémon's head when spawned in game? As nothing was defined in the language file, there was no name to display. Now let's add that text as a key.
{ "cobblemon.species.tentaquil.name": "Tentaquil", "cobblemon.species.tentaquil.desc1": "If its bold colors do not sufficiently ward off predators, it secretes toxins that smell strongly of copper.", "cobblemon.species.tentaquil.desc2": "There has only been one recorded sighting of this pokémon. Until recently, this was considered to be a joke." }
In this example file, you can swap out tentaquil for the name of your Pokémon.
The keys ending with desc1 and desc2 are the Pokémon's Pokédex entries. Although the Pokédex has not been implemented yet, try to keep the entries short and brief as there may eventually be a character limit.
You can add as many Pokémon names (along with their Pokédex entries) as you want to the same language file if you are planning to add more custom Pokémon to your pack.
Refresh resourcepack
Part 8: Create your Pokemon's Spawn File
Make it spawn Creating_Custom_Spawns
{ "enabled": true, "neededInstalledMods": [], "neededUninstalledMods": [], "spawns": [ { "id": "tentaquil-1", "pokemon": "tentaquil", "presets": [ "underground" ], "type": "pokemon", "context": "grounded", "bucket": "ultra-rare", "level": "18-60", "weight": 10.0, "condition": { "canSeeSky": false, "biomes": [ "#cobblemon:is_lush" ] } }, { "id": "tentaquil-2", "pokemon": "tentaquil", "presets": [ "underwater", "underground" ], "type": "pokemon", "context": "submerged", "bucket": "rare", "level": "18-60", "weight": 1.0, "condition": { "canSeeSky": false, "biomes": [ "#cobblemon:is_lush", "#minecraft:is_beach" ] } } ] }
Part 9: Adjusting the Scale of your Pokemon in game
Change baseScale and hitbox values from before
Part 10: Adjusting your Pokemon's poser file in game
Change poser numbers. Press F3+T. Profit