Mineuniverse
Log in Register
Mods

CTM Vintage

A fork of CTM with backported features, supporting json loading and new ctm types.
by RuiXuqi
Download Claim this project
5,603 downloads
0 likes
Updated Jul 6, 2026
0 hypes
API and Library Cosmetic

This mod is marked WIP

Since modern CTM has stopped maintaining and original CTM gets patches via fix mods, it is still recommended to use the original one, if you do not need json ctm features.

CTM Vintage

A fork of Chisel Team's ConnectedTexturesMod with backported features.

Now you can use some new ctm types like ctm_horizontal in 1.12.2. The json loading system is also backported, though it needs a ctm.json file as index in the mod's domain. The logic format should be the same as the one in modern versions.

For developers, there should not be any resource format changes needed. But you may need to update java codes since some logic is moved to ConnectionCheck. Also, IFacade now supports custom connection block state. Implement it if needed.

Sadly Chisel Team haven't updated their Wiki yet. Here are some examples for reference.

Json Logic

To load customized json ctm logic, there should be a "ctm.json" file in the mod's root domain like "assets/modid/ctm.json". The "ctm.json" will be loaded like sounds.json, so resource pack can contain their own types without writting the old items from the original file.

assets/ctm/ctm.json in CTM Vintage

{ "logics": [ "ctm", "optifine_full" ] }

CTM Vintage will search the items in "assets/modid/ctm_logic", according to "assets/ctm/ctm.json", and register them ctm type in "modid:item".

You can also write items in sub folders like "mylogic/ctm" and put json logic file in "assets/modid/ctm_logic/mylogic/ctm.json". It will be "modid:mylogic/ctm" in ctm type.

In the case above, it will search for "assets/ctm/ctm_logic/ctm.json" "assets/ctm/ctm_logic/optifine_full.json", and "ctm:ctm" "ctm:optifine_full" is registered.

assets/ctm/ctm_logic/ctm.json in CTM Vintage, copied from the original CTM

{ "positions": [ {"id": "TOP", "directions": ["up"]}, {"id": "TOP_RIGHT", "directions": ["up","east"]}, {"id": "RIGHT", "directions": ["east"]}, {"id": "BOTTOM_RIGHT", "directions": ["down","east"]}, {"id": "BOTTOM", "directions": ["down"]}, {"id": "BOTTOM_LEFT", "directions": ["down","west"]}, {"id": "LEFT", "directions": ["west"]}, {"id": "TOP_LEFT", "directions": ["up","west"]} ], "submaps": { "": { "type": "grid", "width": 4, "height": 4 }, "original": { "type": "grid", "width": 2, "height": 2 } }, "faces": { "": { "type": "grid", "width": 2, "height": 2 } }, "rules": [ {"output":"0,0", "from":1, "at":"0,0", "connected":["TOP","LEFT","TOP_LEFT"]}, {"output":"1,0", "from":1, "at":"1,0", "connected":["TOP","RIGHT","TOP_RIGHT"]}, {"output":"2,0", "from":1, "at":"0,0", "connected":["TOP"],"unconnected":["LEFT"]}, {"output":"3,0", "from":1, "at":"1,0", "connected":["TOP"],"unconnected":["RIGHT"]}, {"output":"0,1", "from":1, "at":"0,1", "connected":["BOTTOM","LEFT","BOTTOM_LEFT"]}, {"output":"1,1", "from":1, "at":"1,1", "connected":["BOTTOM","RIGHT","BOTTOM_RIGHT"]}, {"output":"2,1", "from":1, "at":"0,1", "connected":["BOTTOM"],"unconnected":["LEFT"]}, {"output":"3,1", "from":1, "at":"1,1", "connected":["BOTTOM"],"unconnected":["RIGHT"]}, {"output":"0,2", "from":1, "at":"0,0", "connected":["LEFT"],"unconnected":["TOP"]}, {"output":"1,2", "from":1, "at":"1,0", "connected":["RIGHT"],"unconnected":["TOP"]}, {"output":"2,2", "from":1, "at":"0,0", "connected":["TOP","LEFT"],"unconnected":["TOP_LEFT"]}, {"output":"3,2", "from":1, "at":"1,0", "connected":["TOP","RIGHT"],"unconnected":["TOP_RIGHT"]}, {"output":"0,3", "from":1, "at":"0,1", "connected":["LEFT"],"unconnected":["BOTTOM"]}, {"output":"1,3", "from":1, "at":"1,1", "connected":["RIGHT"],"unconnected":["BOTTOM"]}, {"output":"2,3", "from":1, "at":"0,1", "connected":["BOTTOM","LEFT"],"unconnected":["BOTTOM_LEFT"]}, {"output":"3,3", "from":1, "at":"1,1", "connected":["BOTTOM","RIGHT"],"unconnected":["BOTTOM_RIGHT"]}, {"output":"original0,0", "from":0, "at":"0,0", "unconnected":["TOP","LEFT"]}, {"output":"original1,0", "from":0, "at":"1,0", "unconnected":["TOP","RIGHT"]}, {"output":"original0,1", "from":0, "at":"0,1", "unconnected":["BOTTOM","LEFT"]}, {"output":"original1,1", "from":0, "at":"1,1", "unconnected":["BOTTOM","RIGHT"]} ] }

There are changes in optifine_full.json. The grid is changed to 12x12 (192x192px or multiple), a square. Otherwise, forge will recognize it as an animated texture and stop it from loading.

Proxy

The proxy loading logic is updated, allowing you to write them like this from Mekanism.

assets/mekanism/textures/block/thermal_evaporation_block_1.png(16x16px)

image

assets/mekanism/textures/block/thermal_evaporation_block_1.png.mcmeta

{ "ctm": { "ctm_version": 1, "proxy": "mekanism:ctm/thermal_evaporation_block_1_full", "type": "CTM", "layer": "SOLID", "textures": [ "mekanism:ctm/thermal_evaporation_block_1" ] } }

assets/mekanism/textures/ctm/thermal_evaporation_block_1.png(16x16px)

image

assets/mekanism/textures/ctm/thermal_evaporation_block_1_full.png(192x192px)

image

assets/mekanism/textures/ctm/thermal_evaporation_block_1_full.png.mcmeta

{ "ctm": { "ctm_version": 1, "type": "ctm:optifine_full" } }

The final texture will be thermal_evaporation_block_1_full.png loaded in ctm:optifine_full.

v1.3.1
MC Client, Forge, 1.12.2
Release 2026-02-12 Get

More from RuiXuqi

Delete Worlds To Trash Vintage
874
RGB Chat Vintage
727
ZUNPet Vintage
251
Catalogue Vintage
15,842

You Might Also Like

Vivecraft
A Minecraft VR mod on a loader of your choice!
9,988,339
Athena
A crossplatform (Forge/Fabric) solution to connected block textures for 1.19.4+
99,799,527
Lodestone
A collection of code used throughout projects under the Lodestar team.
9,914,417
TheDragonLib
A library for most of sokratis12GR's Mods
9,910,232
Multi Mob Library
A library mod containing essential files for Daveyx0's mob mods
9,892,767
FTB Library (Forge) (Legacy)
FTB Library is a library mod that is used for some of our mods.
98,265,314