Skip to main content

Blockbench & resource pack

VehiclesPlus doesn't ship 3D models — it shows whatever model your resource pack assigns to a vanilla item + custom model data number. So every vehicle part references a plain item like LEATHER_BOOTS plus a custommodeldata, and your pack maps that number to your model.

item: {
material: LEATHER_BOOTS # the base item
custommodeldata: 1 # which custom model the pack should show
color: { red: 255, green: 0, blue: 0 } # tints leather-based models
}

This page covers doing it manually with Blockbench and a vanilla pack. If you'd rather have a plugin manage the pack and numbers for you, see ItemsAdder or Oraxen.

Start from the example pack

The bundled example resource pack already contains working models for every example vehicle. Open it to see exactly how the files are laid out, then copy that structure for your own models.


1. Model the vehicle in Blockbench

  1. Install Blockbench and create a Java Block/Item model.
  2. Build your vehicle. Keep it reasonably sized — vehicle parts are positioned in 0.1-block steps, so plan the scale.
  3. Paint or import a texture.
  4. If you want VehiclesPlus to recolor the vehicle (via availableColors / the paint bucket), set the relevant faces' tint so they pick up the leather color — and use a leather base item (see below).
  5. Export with File → Export → Export Block/Item Model (a .json model) and save your texture.

Modeling itself is out of scope here — the Blockbench docs are excellent. What matters for VehiclesPlus is the next step.


2. Add it to a resource pack

A minimal pack looks like:

MyPack/
├── pack.mcmeta
└── assets/minecraft/
├── models/item/
│ ├── leather_boots.json # base item, with overrides (step 3)
│ └── examplecar.json # your exported model
└── textures/item/
└── examplecar.png # your texture

Put your exported model in models/item/ and its texture in textures/item/ (match the paths your model references).


3. Assign a custom model data

Edit the base item's model file (e.g. models/item/leather_boots.json) and add an overrides entry that maps a custom model data number to your model:

{
"parent": "item/generated",
"textures": { "layer0": "item/leather_boots" },
"overrides": [
{ "predicate": { "custom_model_data": 1 }, "model": "item/examplecar" }
]
}

Now the item LEATHER_BOOTS with custom model data 1 shows examplecar.

Minecraft 1.21.4+

The overrides predicate above works up to 1.21.3. In 1.21.4+ Mojang replaced it with item model definitions (assets/minecraft/items/…), which are more involved. If you target newer versions, letting ItemsAdder or Oraxen generate the pack saves a lot of pain — they handle both formats automatically.


4. Reference it in your vehicle

In the part's item, use the same material and number:

{ type: skin, item: { material: LEATHER_BOOTS, custommodeldata: 1, color: { red: 255, green: 255, blue: 255 } }, position: HEAD, ... }

Reload the model with /vm reload <id> and spawn it. See Creating vehicles for the rest of the model.


Tips

  • Use leather items (LEATHER_BOOTS, LEATHER_CHESTPLATE, LEATHER_HELMET) as the base for skins/rotors/turrets/rims if you want VehiclesPlus' color feature to work — only leather items can be tinted. The example vehicles use exactly these.
  • Keep a registry of which custom model data number belongs to which vehicle/part, so they never clash.
  • Serve the pack to players via server.properties (resource-pack + resource-pack-sha1) or a pack-hosting plugin.
  • Engine sounds: VehiclesPlus reads sound lengths from the pack at resourcePackUrl. Make sure your custom engine sounds live in that pack so they're measured correctly.