Skip to content


Creating a block.

Creating a block is mostly the same as with regular polymer ones. Only difference is implementation of PolymerTexturedBlock interface, which acts as a marker.

Supported block shapes/types

Polymer Blocks supports few types of models/shapes. However, possible amount of blocks is limited, because we can't really add fully custom blocks on client yet.

Every block type has its own functionality and behaviour:

  • FULL_BLOCK - Noteblocks, have full collision and don't allow transparency, (limit: 799)
  • TRANSPARENT_BLOCK - Mostly leaves, allow "cutout" textures, (limit: 104)
  • FARMLAND_BLOCK - Farmland blocks, (limit: 5!)
  • VINES_BLOCK - All centered vine blocks, Cave Vines, Twisted Vines and Weeping Vines, (limit: 100)
  • PLANT_BLOCK - Small plant blocks, sugarcane and saplings, (limit: 21)
  • KELP_BLOCK - Just kelp, (limit: 25)
  • CACTUS_BLOCK - Just cactus, (limit: 15!)

They all are accessible from BlockModelType enum.

Defining a global model

First thing you do, is creating a model definition. You should do that by calling one of PolymerBlockModel.of(...) methods. It takes the same argument as vanilla definition in assets/(namespace)/blockstate/(block).json file.

Then you need to request a model. It's as simple as calling PolymerBlockResourceUtils.requestBlock(BlockModelType type, PolymerBlockModel... model) with one or more models. It returns a blockstate, that you need to use in your PolymerTexturedBlock as result of getPolymerBlockState(...). If it runs out of free BlockStates to use, it will return null instead. You can also check amount of free blocks with PolymerBlockResourceUtils.getBlocksLeft(BlockModelType type).

If you've done everything correctly, it should now display as your model. Otherwise, you either skipped some step or didn't apply server resource pack. Remember that you still need to register your assets with PolymerRPUtils.addAssetSource(String modId) method.

Just keep in mind

Some block model types have very small amount of free BlockStates. For that reason, while making public registering blocks globally, please allow for disabling of them and handle running out of them for best compatibility and mod support!