DePhoegon icon

To be studied, -- Not working.

DePhoegon | PRO | 04/26/21 12:14:01 AM UTC (Edited) | 0 ⭐ | 1200 👁️ | Never ⏰ | []
Batch |

12.18 KB

|

None

|

0 👍

/

0 👎

@echo off
:: Simplification of json creation for slabs and stairs, from either an all sided block, pillar block, or different sided block (Sand stone example)
:: Standard Blockstate for slabs, stairs, Pillars, & blocks
:: Basic & functional Loot table for each block (suggestion to make it robust to your after creation)
:: Uses blockname_top, blockname_side, blockname_bottom for blocks with different textures
:: Uses blockname_top, blockname_side for pillar blocks. (texture)
:: Set for Blocks
:: *edit, overlooked control for UVLOCK.. may not have mattered, but fix anyways.
goto Start
 
:RE2
echo Next Name or exit?
set /p T= "Next (N)"
if %T%==n (goto Top)
if %T%==N (goto Top)
:End
exit
:Start
set BLOCKS=.\blockstate\
set BLOCK=.\models\block\
set SLAB=%BLOCK%slab\
set STAIR=%BLOCK%stair\
set PILLA=%BLOCK%pillar\
set ITEM=.\models\item\
set DROP=.\loot_tables\blocks\
set MOD=vanilla_reclaim
if EXIST %BLOCKS% ( 
    echo Blockstate folder 
) else ( 
    mkdir %BLOCKS% 
    echo Blockstate folder 
)
if EXIST %BLOCK% ( 
    echo Blocks folder 
) else ( 
    mkdir %BLOCK% 
    echo Block folder 
)
if EXIST %SLAB% ( 
    echo Slabs folder 
) else ( 
    mkdir %SLAB% 
    echo Slabs folder 
)
if EXIST %STAIR% ( 
    echo Stairs folder 
) else ( 
    mkdir %STAIR% 
    echo Stairs folder 
)
if EXIST %ITEM% ( 
    echo Items folder 
) else ( 
    mkdir %ITEM% 
    echo Items folder 
)
if EXIST %DROP% ( 
    echo Blocks Loot tables folder 
) else ( 
    mkdir %DROP% 
    echo Blocks Loot tables folder 
)
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
set /a OUTER=0
set /a MID=0
set /a INNER=0
:Top
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: "
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
 
::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
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%" >> %BLOCKS%%NAM%_slab.json ) else ( echo "model": "%MOD%:block/slab/%NAM%_%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
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 )
)
echo     "facing=%%FACE[%OUTER%]%%,half=%%HALF[%MID%]%%,shame=%%SHAPE[%INNER%]%%": { >> %BLOCKS%%NAM%_stair.json
if %INNER% LSS 2 (
    echo       "model": "%MOD%:block/stair/%NAM%_stair_inner", >> %BLOCKS%%NAM%_stair.json
) else (
    if %INNER% LSS 4 (
        echo       "model": "%MOD%:block/stair/%NAM%_stair_outer", >> %BLOCKS%%NAM%_stair.json
    ) else ( 
        echo       "model": "%MOD%:block/stair/%NAM%_stair", >> %BLOCKS%%NAM%_stair.json 
    )
)
if %MID% EQU 1 ( 
    echo       "x": 180, >> %BLOCKS%%NAM%_stair.json 
    set uv=yes
)
if %YY% GTR 10 ( 
    echo       "y": %YY%, >> %BLOCKS%%NAM%_stair.json 
    set uv=yes
)
if %uv%==yes ( echo       "uvlock": true >> %BLOCKS%%NAM%_stair.json )
if /a %OUTER% + %MID% + %INNER% EQU 8 ( 
    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.
                pause
            )
        )
    )
    goto Stairloop
)
 
::Block models
:: Check for Pillar first
if %ALLSIDED%==PILL ( goto Pilstart ) else ( goto CubeStart )
:Pilstart
echo { > %PILLA%%NAM%.json
echo   "parent": "minecraft:block/cube_column", >> %PILLA%%NAM%.json
echo   "textures": { >> %PILLA%%NAM%.json
echo     "end": "%MOD%:block/%NAM%_top", >> %PILLA%%NAM%.json
echo     "side": "%MOD%:block/%NAM%_side" >> %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/%NAM%_top", >> %BLOCK%%NAM%.json
    echo      "bottom": "%MOD%:block/%NAM%_bottom", >> %BLOCK%%NAM%.json
    echo      "side": "%MOD%:block/%NAM%_side" >> %BLOCK%%NAM%.json
)
echo   } >> %BLOCK%%NAM%.json
echo } >> %BLOCK%%NAM%.json
 
::Slabs
:Slabstart
call :Slabfiles {
echo   "parent": "minecraft:block/slab", >> %SLAB%%NAM%_slab.json
echo   "parent": "minecraft:block/cube_column", >> %SLAB%%NAM%_double.json
echo   "parent": "minecraft:block/slab_top", >> %SLAB%%NAM%_top.json
call :Slabfiles "  "textures": {"
echo     "bottom": "%MOD%:block/%NAM%_top", >> %SLAB%%NAM%_slab.json
echo     "end": "%MOD%:block/%NAM%_top", >> %SLAB%%NAM%_double.json
echo     "bottom": "%MOD%:block/%NAM%_top", >> %SLAB%%NAM%_top.json
echo     "top": "%MOD%:block/%NAM%_top", >> %SLAB%%NAM%_slab.json
call :Slabfiles "    "side": "%MOD%:block/%NAM%_side""
echo     "top": "%MOD%:block/%NAM%_top", >> %SLAB%%NAM%_top.json
call :Slabfiles "  }"
call :Slabfiles } 
goto Stairs
:Slabfiles
set Bark=%~1
echo %Bark% >> %SLAB%%NAM%_slab.json
echo %Bark% >> %SLAB%%NAM%_double.json
echo %Bark% >> %SLAB%%NAM%_top.json
exit /b
:Stairs
set BOTT=%NAM%
set TTOPP=%NAM%
set TSIDE=%NAM%
if %ALLSIDED%==TOPP (
    set BOTT=%BOTT%_bottom
    set TTOPP=%TTOPP%_top
    set TSIDE=%TSIDE%_side
)
if %ALLSIDED%==PILL (
    set BOTT=%BOTT%_top
    set TTOPP=%TTOPP%_top
    set TSIDE=%TSIDE%_side
)
 
call :Stairfiles { 
call :Stairfiles block
call :Stairfiles "  "textures": {"
call :Stairfiles "    "bottom": "%MOD%:block/%BOTT%","
call :Stairfiles "    "top": "%MOD%:block/%TTOPP%","
call :Stairfiles "    "side": "%MOD%:block/%TSIDE%""
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%" >> %DROP%%NAM%_stair.json
echo } >> %DROP%%NAM%.json
echo } >> %DROP%%NAM%_stair.json
call :Slabloot {
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 "            "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

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎