Datageneration/States and Models
The model providers are a specific type of data generators for defining models. All model providers are a subclass of ModelProvider
.
ModelProvider
provides methods to define models for blocks and items alike: cubes, single textures, doors, slabs, and even custom non-data-generated models as parent models.
Existing Files
All references to textures or other data files not generated for data generation must reference existing files on the system. This is to ensure that all referenced textures are in the correct places, so typos can be found and corrected.
ExistingFileHelper
is the class responsible for validating the existence of those data files. An instance can be retrieved from GatherDataEvent#getExistingFileHelper()
.
The --existing <folderpath>
argument allows the specified folder and its subfolders to be used when validating the existence of files. By default, only the vanilla datapack and resources are available to the ExistingFileHelper
.
Implementation
There are three main abstract implementations of ModelProvider
: ItemModelProvider
, BlockModelProvider
, and BlockStateProvider
.
For items, use ItemModelProvider
to define their models: override #registerModels
and use the helper methods.
For blocks, it is recommended to use BlockStateProvider
to define the blockstates, models, and their item models in a single class. It contains an instance of both BlockModelProvider
and ItemModelProvider
, which can be accessed through #models()
and #itemModels()
. BlockModelProvider
is used to define only block models.
Call #getVariantBuilder(Block)
to get a VariantBlockStateBuilder
for building a blockstate with different variants, or #getMultipartBuilder(Block)
to get a MultiPartBlockStateBuilder
for building a blockstate using multiparts.