Converting Old License Plate Mods

Most older license plate mods are not compatible with the new template system and will need to be converted to work correctly.

Conversion is useful when you want the newer template layout, cleaner generated maps, or scripted logic that is easier to maintain than an HTML generator.

The Simple Upgrade Path

If your jbeam currently points to this file:

"licenseplate_path": "vehicles/common/licenseplates/my_plate/my_plate.json"

then you can add this file next to it:

vehicles/common/licenseplates/my_plate/my_plate.sktemplate.json

The game will prefer the .sktemplate.json file when it exists. Your jbeam can stay as it is.

You can also point the jbeam directly at the new file:

"licenseplate_path": "vehicles/common/licenseplates/my_plate/my_plate.sktemplate.json"

Both approaches are valid. Keeping the old jbeam path is convenient when you are updating a published mod and want the smallest possible change.

Converting A Plain JSON Plate

Old JSON plates usually store a generator block, text placement, and texture paths. The new template stores the same ideas, but in a layout tree.

Old field New place Notes
name name Keep the same name or choose a clearer one.
version: 2 version: 3 The new template system uses version 3.
data.gen.pattern vars.plate.default Convert %d style tokens to {d} style tokens.
data.gen.patternData vars.plate.charsets Token names become keys in charsets.
data.format.<code>.size format.<code>.size Prefer [width, height].
text.color text node color Usually on the node that draws {plate}.
text.scale text node fontSize You may need to adjust by eye.
text.x text node anchorX or style.left Use anchorX for centered text placement.
text.y text node style.top The new system positions in pixels.
text.limit format.<code>.limit Also use limit2 for two-line plates.
diffuse.backgroundImg format.<code>.background Use the diffuse background image path.
bump.backgroundImg format.<code>.normal Optional normal map path.
characterLayout text node font If it is a BMFont JSON file, set it as font.
diffuse.spriteImg text node fontAtlas Atlas image for the BMFont layout.
bump.spriteImg text node fontNormalAtlas Optional normal atlas for raised glyphs.

The old format had diffuse, bump, and specular sections. In the new template, the renderer builds the PBR maps from your background, foreground elements, normal, emboss, and finish values.

Pattern Token Changes

Old patterns used percent tokens:

"pattern": "BNG-%c%d%d%d"

New patterns use braces:

"default": "BNG-{c}{d}{d}{d}",
"charsets": {
  "c": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
  "d": "0123456789"
}

There are no magic letter or digit charsets except for {vid} and {vname}. Define the token names your template uses.

Converting An HTML Generator

Some old mods used an HTML or JavaScript generator to draw text, choose images, or change spacing.

When converting, separate the old behavior into two groups:

  • Fixed layout and artwork become template nodes: background images, text boxes, badges, stickers, colors, fonts, and constant spacing.
  • Decisions that depend on the typed plate text become Lua resolver logic: prefix rules, region lookups, conditional background paths, special badges, or text-dependent letter spacing.

Try to keep the template responsible for drawing and the resolver responsible for decisions. This makes the mod easier to debug later.

Suggested Conversion Steps

  1. Keep the old mod working while you build the new file.
  2. Create a .sktemplate.json next to the old .json.
  3. Copy the old background and font paths into the new format entry.
  4. Build one text node that draws {plate}.
  5. Move the old generator pattern into vars.plate.default and vars.plate.charsets.
  6. Test the mod in game.
  7. Add more nodes or Lua logic only after the basic plate works.

Testing Checklist

Before sharing the converted mod, test:

  • The part still appears in the parts selector.
  • The generated text looks correct.
  • Custom text works at the shortest and longest expected lengths.
  • Every format your mod supports renders correctly.
  • Backgrounds, normal maps, badges, and custom fonts load from the correct paths.
  • Special scripted cases still render the same way after reloading the vehicle.

If something fails, start with paths. Most conversion issues are caused by a file path that still points to the old location or an old field name that no longer exists in the new template.

Last modified: July 30, 2026

Any further questions?

Join our discord
Our documentation is currently incomplete and undergoing active development. If you have any questions or feedback, please visit this forum thread.