@echo off :: Version 2.0 :: Creates json files for 'Walls' of other blocks (pillar blocks, sided blocks, single texture blocks[sand]) :: Does not support slabs/stairs as main block :: Does not generate the json file for adding block to the list of walls in the minecraft tag file :: Auto Exits on completion :: Has escape code that should not be triggered :: MC 1.16.4 Json files used as structure basis goto Start :staticvar set MOD=vanilla_reclaim set BASEFOLDER=F:\Minecraft-aidfiles\ set BLOCKS=%BASEFOLDER%blockstates\ set BLOCK=%BASEFOLDER%models\block\ set WALL=%BLOCK%wall\ set ITEM=%BASEFOLDER%models\item\ set DROP=%BASEFOLDER%loot_tables\blocks\ set FACE[0]=north set FACE[1]=east set FACE[2]=south set FACE[3]=west set HEIGHT[0]=low set HEIGHT[1]=tall exit /b :primevar if NOT EXIST %BLOCKS% ( mkdir %BLOCKS% ) if NOT EXIST %WALL% ( mkdir %WALL% ) if NOT EXIST %ITEM% ( mkdir %ITEM% ) if NOT EXIST %DROP% ( mkdir %DROP% ) set ALLSIDED="" set NAMES="" exit /b :End exit /b :Start call :staticvar call :primevar if NOT ["%1"]==[""] ( set NAMES=%1 ) else ( set /p NAMES= "Base Block Name: " ) if NOT ["%2"]==[""] ( set ALLSIDED=%2 goto Aurgument ) :Sid echo Enter ( P ) for Pillars. Logs & Basalt are pillar blocks echo Enter ( A ) if block uses the same texture on all sides echo Enter ( S ) if it uses a Top, side, & bottom texture that are differentecho Enter ( E ) to exit. echo Provides Basic loot table only. (It breaks, it drops. nothing more) set /p ALLSIDED= "Type of block: " :Aurgument if %ALLSIDED%==A goto Setallsided if %ALLSIDED%==a goto Setallsided if %ALLSIDED%==S goto Topped if %ALLSIDED%==s goto Topped if %ALLSIDED%==P goto Pillar if %ALLSIDED%==p goto Pillar if %ALLSIDED%==E goto End if %ALLSIDED%==e goto End echo "Valid Entries are ( A, a, S, s, E, e ), or Exit (E)" goto Sid :Setallsided set ALLSIDED=%MOD%:block/wall/ set TEXTURESIDE=%MOD%:block/%NAMES% goto Blockstate :Pillar :Topped set ALLSIDED=%MOD%:block/wall/ set TEXTURESIDE=%MOD%:block/%NAMES%_side goto Blockstate :: repeated echos, to a singular file ease of reading in code. :: thfile = output file for fwrite :fwrite echo %~1 >> %tnfile% exit /b :Blockstate set /a dirloop=0 set /a heightloop=0 set tname=%NAMES%_wall.json set tnfile=%BLOCKS%%tname% set tmodel=%ALLSIDED%%NAMES%_wall_post echo { > %tnfile% call :fwrite " "multipart": [" call :fwrite " {" call :fwrite " "when": {" call :fwrite " "up": "true"" call :fwrite " }," call :fwrite " "apply": {" call :fwrite " "model": "%tmodel%"" call :fwrite " }" call :fwrite " }," :Blockstateloop if %heightloop% EQU 0 set tmodel=%ALLSIDED%%NAMES%_wall_side if %heightloop% EQU 1 set tmodel=%ALLSIDED%%NAMES%_wall_side_tall set /a tyvar=%dirloop%*90 call :fwrite " {" call :fwrite " "when": {" call :fwrite " "%%FACE[%dirloop%]%%": "%%HEIGHT[%heightloop%]%%"" call :fwrite " }," call :fwrite " "apply": {" call :fwrite " "model": "%tmodel%"," if %tyvar% GTR 0 call :fwrite " "y": %tyvar%," call :fwrite " "uvlock": true" call :fwrite " }" set /a tnum=%dirloop%+%heightloop% if %tnum% LSS 4 ( call :fwrite " }," if %dirloop% EQU 3 ( set /a dirloop=0 set /a heightloop=1 ) else set /a dirloop=%dirloop%+1 goto Blockstateloop ) call :fwrite " }" call :fwrite " ]" call :fwrite } goto :BlockModels :wallwrite set tempone=%~1 set temptwo=%~2 set tempthree=%~3 set tparent=bob if %tempthree%==template set tparent=minecraft:block/template_%temptwo% if %tempthree%==inventory set tparent=minecraft:block/%temptwo% if %tparent%==bob exit /b set tnfile=%WALL%%tempone%_%temptwo%.json call :fwrite { call :fwrite " "parent": "%tparent%"," call :fwrite " "textures": {" call :fwrite " "wall": "%TEXTURESIDE%"" call :fwrite " }" call :fwrite } exit /b :BlockModels call :wallwrite %NAMES% wall_side template call :wallwrite %NAMES% wall_post template call :wallwrite %NAMES% wall_side_tall template call :wallwrite %NAMES% wall_inventory inventory :: Item for inventory set tnfile=%ITEM%%NAMES%_wall.json call :fwrite { call :fwrite " "parent": "%ALLSIDED%%NAMES%_wall_inventory"" call :fwrite } :: Blockloot, basic form for walls. set tnfile=%DROP%%NAMES%_wall.json call :fwrite { call :fwrite " "type": "minecraft:block"," call :fwrite " "name": "%MOD%:%NAMES%_wall"" call :fwrite } goto End