@echo off :: Version 2.5.1 :: Corrected Loot Table for Stairs [left out _stair on the item] :: Version 2.5 :: Corrected name standardization for double slab from pillars & all sided blocks. :: Version 2.4 :: Fixed Sided blocks doublesided slab verions :: Addressed slab method. :: Version 2.2 :: Logic oversites :: Fixed names & Name variables :: version 2.1.5 :: Logic Improvments :: version 2.1 :: fixed slab name schema failure :: fixed 2nd axis variable name error. :: tested, forge ready w/ some attention to texture location/names :: version 2.0 :: includes fixed array calls, typos, slab loot table missing lines added (was missing 3) :: Added command line entry of blocks. :: Manual loot table for other blocks still may be needed. :: creates JSON files for 'Blockstate', 'Block', 'item'(For block), & 'loot_table' :: Input Block (1 texture blocks, like sand // 3 textured blocks like Sand stone{top,side,bottom}) or Pillar (two textured, & is meant fora pillar block, like basalt) :: textures not supplied, just named *wink* X} :: Intended for mods w/ an ability register blocks (forge/etc) :: Obviously set enviromental paths correctly, & Your ModID :: --- :: batfilename blockname [a/p/s] [n] :: (stick to minecraft convenction.. red_sand, polished_smooth_rock, etc. etc.) :: a - block with 1 texture (sand) :: p - pillar block :: s - block with 3 textures (like sandstone, top/side/bottom) :: Only supports 1 base block at a time :: n - for it to cycle again, and prompt for a new block name & type (leave blank for it to close right after it's done) :: --- :: Simplification of json creation for block, stair, & slab variants. :: Set for Blocks :: Uses blockname_top, blockname_side, blockname_bottom for blocks with different textures :: Uses blockname_top, blockname_side for pillar blocks. (texture) goto Start :RE2 if ["%3"]==[""] ( goto End ) else ( set T=%3 ) if %T%==n (goto Nextcycle) if %T%==N (goto Nextcycle) :End exit /b :Start set MOD=vanilla_reclaim set BASEFOLDER=F:\Minecraft-aidfiles\ set BLOCKS=%BASEFOLDER%blockstates\ set BLOCK=%BASEFOLDER%models\block\ set SLAB=%BLOCK%slab\ set STAIR=%BLOCK%stair\ set PILLA=%BLOCK%pillar\ set ITEM=%BASEFOLDER%models\item\ set DROP=%BASEFOLDER%loot_tables\blocks\ if NOT EXIST %BLOCKS% ( mkdir %BLOCKS% ) if NOT EXIST %SLAB% ( mkdir %SLAB% ) if NOT EXIST %STAIR% ( mkdir %STAIR% ) if NOT EXIST %PILLA% ( mkdir %PILLA% ) if NOT EXIST %ITEM% ( mkdir %ITEM% ) if NOT EXIST %DROP% ( mkdir %DROP% ) set FACE[0]=east set FACE[1]=north set FACE[2]=south set FACE[3]=west set HALF[0]=bottom set HALF[1]=top set SHAPE[0]=inner_left set SHAPE[1]=inner_right set SHAPE[2]=outer_left set SHAPE[3]=outer_right set SHAPE[4]=straight if NOT ["%1"]==[""] ( set NAM=%1 if NOT ["%2"]==[""] ( set ALLSIDED=%2 goto Aurgument ) ) :Nextcycle set /p NAM= "Base Block Name: " :Sid 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 different echo Enter ( P ) for Pillars. Logs & Basalt are pillar blocks echo 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=ALL goto Blockstate :Pillar set ALLSIDED=PILL set AXIS=x goto Blockstate :Topped set ALLSIDED=TOPP :Blockstate if %ALLSIDED%==ALL ( set TopSide=%NAM% set SideSide=%NAM% set BotSide=%NAM% ) if %ALLSIDED%==PILL ( set TopSide=%NAM%_top set SideSide=%NAM%_side set BotSide=%NAM%_top ) if %ALLSIDED%==TOPP ( set TopSide=%NAM%_top set SideSide=%NAM%_side set BotSide=%NAM%_bottom ) ::Blockstates ::Base Block echo { > %BLOCKS%%NAM%.json echo "variants": { >> %BLOCKS%%NAM%.json if %ALLSIDED%==PILL ( goto Blockstatepill ) echo "": { >> %BLOCKS%%NAM%.json echo "model": "%MOD%:block/%NAM%" >> %BLOCKS%%NAM%.json echo } >> %BLOCKS%%NAM%.json goto Axisout :Blockstatepill echo "axis=%AXIS%": { >> %BLOCKS%%NAM%.json if %AXIS%==y ( echo "model": "%MOD%:block/pillar/%NAM%" >> %BLOCKS%%NAM%.json ) else ( echo "model": "%MOD%:block/pillar/%NAM%", >> %BLOCKS%%NAM%.json ) if %AXIS%==x ( echo "x": 90, >> %BLOCKS%%NAM%.json ) if %AXIS%==z ( echo "x": 90 >> %BLOCKS%%NAM%.json ) if %AXIS%==x ( echo "y": 90 >> %BLOCKS%%NAM%.json ) if %AXIS%==z ( echo } >> %BLOCKS%%NAM%.json && goto Axisout ) else ( echo }, >> %BLOCKS%%NAM%.json ) if %AXIS%==x ( set AXIS=y) else ( set AXIS=z) goto Blockstatepill :Axisout echo } >> %BLOCKS%%NAM%.json echo } >> %BLOCKS%%NAM%.json :: Slab version echo { > %BLOCKS%%NAM%_slab.json set AXIS=bottom echo "variants": { >> %BLOCKS%%NAM%_slab.json :Slabvar echo "type=%AXIS%": { >> %BLOCKS%%NAM%_slab.json if %AXIS%==bottom ( echo "model": "%MOD%:block/slab/%NAM%_slab" >> %BLOCKS%%NAM%_slab.json ) else ( echo "model": "%MOD%:block/slab/%NAM%_slab_%AXIS%" >> %BLOCKS%%NAM%_slab.json ) if %AXIS%==top ( echo } >> %BLOCKS%%NAM%_slab.json && goto Slabout ) else ( echo }, >> %BLOCKS%%NAM%_slab.json ) if %AXIS%==bottom ( set AXIS=double) else ( set AXIS=top) goto Slabvar :Slabout echo } >> %BLOCKS%%NAM%_slab.json echo } >> %BLOCKS%%NAM%_slab.json :: Stair blocks set /a OUTER=0 set /a MID=0 set /a INNER=0 echo { > %BLOCKS%%NAM%_stair.json echo "variants": { >> %BLOCKS%%NAM%_stair.json goto Stairloop :Stairloop set /a YY=0 set uv=no :: checking using Shape array :: Inner Left if %INNER% EQU 0 ( if %MID% EQU 0 ( if %OUTER% EQU 0 ( set /a YY=270 ) if %OUTER% EQU 1 ( set /a YY=180 ) if %OUTER% EQU 3 ( set /a YY=90 ) ) else ( if %OUTER% EQU 1 ( set /a YY=270 ) if %OUTER% EQU 2 ( set /a YY=90 ) if %OUTER% EQU 3 ( set /a YY=180 ) ) ) ::Inner Right if %INNER% EQU 1 ( if %MID% EQU 0 ( if %OUTER% EQU 1 ( set /a YY=270 ) if %OUTER% EQU 2 ( set /a YY=90 ) if %OUTER% EQU 3 ( set /a YY=180 ) ) else ( if %OUTER% EQU 0 ( set /a YY=90 ) if %OUTER% EQU 2 ( set /a YY=180 ) if %OUTER% EQU 3 ( set /a YY=270 ) ) ) ::Outer Left if %INNER% EQU 2 ( if %MID% EQU 0 ( if %OUTER% EQU 0 ( set /a YY=270 ) if %OUTER% EQU 1 ( set /a YY=180 ) if %OUTER% EQU 3 ( set /a YY=90 ) ) else ( if %OUTER% EQU 1 ( set /a YY=270 ) if %OUTER% EQU 2 ( set /a YY=90 ) if %OUTER% EQU 3 ( set /a YY=180 ) ) ) ::Outer Right if %INNER% EQU 3 ( if %MID% EQU 0 ( if %OUTER% EQU 1 ( set /a YY=270 ) if %OUTER% EQU 2 ( set /a YY=90 ) if %OUTER% EQU 3 ( set /a YY=180 ) ) else ( if %OUTER% EQU 0 ( set /a YY=90 ) if %OUTER% EQU 2 ( set /a YY=180 ) if %OUTER% EQU 3 ( set /a YY=270 ) ) ) if %INNER% EQU 4 ( if %OUTER% EQU 1 ( set /a YY=270 ) if %OUTER% EQU 2 ( set /a YY=90 ) if %OUTER% EQU 3 ( set /a YY=180 ) ) :: Call Echo used to properly call the array value call echo "facing=%%FACE[%OUTER%]%%,half=%%HALF[%MID%]%%,shape=%%SHAPE[%INNER%]%%": { >> %BLOCKS%%NAM%_stair.json if %MID% EQU 1 ( set uv=yes) if %YY% GTR 10 ( set uv=yes) if %INNER% LSS 2 ( if %uv%==yes ( set line= "model": "%MOD%:block/stair/%NAM%_stair_inner",) else ( set line= "model": "%MOD%:block/stair/%NAM%_stair_inner") ) else ( if %INNER% LSS 4 ( if %uv%==yes ( set line= "model": "%MOD%:block/stair/%NAM%_stair_outer",) else ( set line= "model": "%MOD%:block/stair/%NAM%_stair_outer") ) else ( if %uv%==yes ( set line= "model": "%MOD%:block/stair/%NAM%_stair",) else ( set line= "model": "%MOD%:block/stair/%NAM%_stair") ) ) echo %line% >> %BLOCKS%%NAM%_stair.json if %MID% EQU 1 ( echo "x": 180, >> %BLOCKS%%NAM%_stair.json ) if %YY% GTR 10 ( echo "y": %YY%, >> %BLOCKS%%NAM%_stair.json ) if %uv%==yes ( echo "uvlock": true >> %BLOCKS%%NAM%_stair.json ) set /a THREE=%OUTER% + %MID% + %INNER% if %THREE% EQU 8 ( echo } >> %BLOCKS%%NAM%_stair.json echo } >> %BLOCKS%%NAM%_stair.json echo } >> %BLOCKS%%NAM%_stair.json ) else ( echo }, >> %BLOCKS%%NAM%_stair.json if %INNER% LSS 4 ( set /a INNER=%INNER% + 1 ) else ( set /a INNER=0 if %MID% EQU 0 ( set /a MID=1 ) else ( set /a MID=0 if %OUTER% LSS 3 ( set /a OUTER=%OUTER% + 1 ) else ( echo Failure in logic, this error shouldn't show up, ) ) ) goto Stairloop ) ::Block models :: Check for Pillar first if %ALLSIDED%==PILL ( goto Pilstart ) else ( goto CubeStart ) set top :Pilstart echo { > %PILLA%%NAM%.json echo "parent": "minecraft:block/cube_column", >> %PILLA%%NAM%.json echo "textures": { >> %PILLA%%NAM%.json echo "end": "%MOD%:block/%TopSide%", >> %PILLA%%NAM%.json echo "side": "%MOD%:block/%SideSide%" >> %PILLA%%NAM%.json echo } >> %PILLA%%NAM%.json echo } >> %PILLA%%NAM%.json goto Slabstart ::Cubes :CubeStart echo { > %BLOCK%%NAM%.json if %ALLSIDED%==ALL ( echo "parent": "minecraft:block/cube_all", >> %BLOCK%%NAM%.json ) else ( echo "parent": "minecraft:block/cube_bottom_top", >> %BLOCK%%NAM%.json ) echo "textures": { >> %BLOCK%%NAM%.json if %ALLSIDED%==ALL ( echo "all": "%MOD%:block/%NAM%" >> %BLOCK%%NAM%.json ) else ( echo "top": "%MOD%:block/%TopSide%", >> %BLOCK%%NAM%.json echo "bottom": "%MOD%:block/%BotSide%", >> %BLOCK%%NAM%.json echo "side": "%MOD%:block/%SideSide%" >> %BLOCK%%NAM%.json ) echo } >> %BLOCK%%NAM%.json echo } >> %BLOCK%%NAM%.json ::Slabs :Slabstart echo { > %SLAB%%NAM%_slab.json echo { > %SLAB%%NAM%_slab_double.json echo { > %SLAB%%NAM%_slab_top.json echo "parent": "minecraft:block/slab", >> %SLAB%%NAM%_slab.json if %ALLSIDED%==TOPP ( echo "parent": "minecraft:block/cube_bottom_top", >> %SLAB%%NAM%_slab_double.json) else ( echo "parent": "minecraft:block/cube_column", >> %SLAB%%NAM%_slab_double.json) echo "parent": "minecraft:block/slab_top", >> %SLAB%%NAM%_slab_top.json call :Slabfiles " "textures": {" all if %ALLSIDED%==TOPP ( call :Slabfiles " "bottom": "%MOD%:block/%BotSide%"," all call :Slabfiles " "top": "%MOD%:block/%TopSide%"," all ) else ( call :Slabfiles " "bottom": "%MOD%:block/%BotSide%"," call :Slabfiles " "top": "%MOD%:block/%TopSide%"," echo "end": "%MOD%:block/%TopSide%", >> %SLAB%%NAM%_slab_double.json ) call :Slabfiles " "side": "%MOD%:block/%SideSide%"" all call :Slabfiles " }" all call :Slabfiles } all goto Stairs :Slabfiles set Bark=%~1 echo %Bark% >> %SLAB%%NAM%_slab.json if "%~2"=="all" echo %Bark% >> %SLAB%%NAM%_slab_double.json echo %Bark% >> %SLAB%%NAM%_slab_top.json exit /b :Stairs set BOTT=%NAM% set TTOPP=%NAM% set TSIDE=%NAM% echo { > %STAIR%%NAM%_stair.json echo { > %STAIR%%NAM%_stair_inner.json echo { > %STAIR%%NAM%_stair_outer.json call :Stairfiles block call :Stairfiles " "textures": {" call :Stairfiles " "bottom": "%MOD%:block/%BotSide%"," call :Stairfiles " "top": "%MOD%:block/%TopSide%"," call :Stairfiles " "side": "%MOD%:block/%SideSide%"" call :Stairfiles " }" call :Stairfiles } goto Bitem :Stairfiles set PARE=%~1 if "%PARE%"=="block" ( echo "parent": "minecraft:block/stairs", >> %STAIR%%NAM%_stair.json echo "parent": "minecraft:block/inner_stairs", >> %STAIR%%NAM%_stair_inner.json echo "parent": "minecraft:block/outer_stairs", >> %STAIR%%NAM%_stair_outer.json ) else ( echo %PARE% >> %STAIR%%NAM%_stair.json echo %PARE% >> %STAIR%%NAM%_stair_inner.json echo %PARE% >> %STAIR%%NAM%_stair_outer.json ) exit /b :: Item versions of the blocks :Bitem echo { > %ITEM%%NAM%.json if %ALLSIDED%==PILL ( echo "parent": "%MOD%:block/pillar/%NAM%" >> %ITEM%%NAM%.json ) else ( echo "parent":"%MOD%:block/%NAM%" >> %ITEM%%NAM%.json ) echo } >> %ITEM%%NAM%.json ::Slabitem echo { > %ITEM%%NAM%_slab.json echo "parent": "%MOD%:block/slab/%NAM%_slab" >> %ITEM%%NAM%_slab.json echo } >> %ITEM%%NAM%_slab.json ::Stairitem echo { > %ITEM%%NAM%_stair.json echo "parent": "%MOD%:block/stair/%NAM%_stair" >> %ITEM%%NAM%_stair.json echo } >> %ITEM%%NAM%_stair.json ::blockloot echo { > %DROP%%NAM%.json echo { > %DROP%%NAM%_stair.json echo "type": "minecraft:block", >> %DROP%%NAM%.json echo "type": "minecraft:block", >> %DROP%%NAM%_stair.json echo "name": "%MOD%:%NAM%" >> %DROP%%NAM%.json echo "name": "%MOD%:%NAM%_stair" >> %DROP%%NAM%_stair.json echo } >> %DROP%%NAM%.json echo } >> %DROP%%NAM%_stair.json echo { > %DROP%%NAM%_slab.json call :Slabloot " "type": "minecraft:block"," call :Slabloot " "pools": [" call :Slabloot " {" call :Slabloot " "rolls":1," call :Slabloot " "entries": [" call :Slabloot " {" call :Slabloot " "type": "minecraft:item"," call :Slabloot " "functions": [" call :Slabloot " {" call :Slabloot " "function": "minecraft:set_count"," call :Slabloot " "conditions": [" call :Slabloot " {" call :Slabloot " "condition": "minecraft:block_state_property"," call :Slabloot " "block": "%MOD%:%NAM%_slab"," call :Slabloot " "properties": {" call :Slabloot " "type": "double"" call :Slabloot " }" call :Slabloot " }" call :Slabloot " ]," call :Slabloot " "count": 2" call :Slabloot " }," call :Slabloot " {" call :Slabloot " "function": "minecraft:explosion_decay"" call :Slabloot " }" call :Slabloot " ]," call :Slabloot " "name": "%MOD%:%NAM%_slab"" call :Slabloot " }" call :Slabloot " ]" call :Slabloot " }" call :Slabloot " ]" call :Slabloot } goto RE2 :Slabloot echo %~1 >> %DROP%%NAM%_slab.json exit /b