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.
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.
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.
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.
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:
Try to keep the template responsible for drawing and the resolver responsible for decisions. This makes the mod easier to debug later.
.sktemplate.json next to the old .json.{plate}.vars.plate.default and vars.plate.charsets.Before sharing the converted mod, test:
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.
Was this article helpful?