This repository now builds texture packs from folders under resource_packs/.
resource_packs/ source packs you edit
scripts/ build, scaffold, and release-matrix maintenance scripts
config/ builder config plus generated Minecraft release matrix
build/ generated zip outputs grouped by pack
cache/ cached Mojang asset catalogs and remembered route maps
.github/ CI workflow
Each folder inside resource_packs/ is one source pack. The folder name becomes the pack name for output files and the default in-game description.
Example:
resource_packs/
alternative_birch_leaves/
pack.png
assets/
minecraft/
textures/
models/
drop/
For your current pack, the builder reads:
resource_packs/alternative_birch_leaves/pack.pngresource_packs/alternative_birch_leaves/drop/**resource_packs/alternative_birch_leaves/pack.build.psd1
and leaves those source files untouched.
Put files under assets/... when you already know the exact target path.
Example:
resource_packs/alternative_birch_leaves/assets/minecraft/textures/block/birch_leaves.png
The builder copies that into the finished pack and then applies version-specific rewrites like block -> blocks for old Minecraft versions.
Put files into typed subfolders under drop/ when you want the project to figure out the vanilla target path automatically.
Example:
resource_packs/alternative_birch_leaves/drop/textures/block/birch_leaves.png
resource_packs/alternative_birch_leaves/drop/textures/item/stone_pickaxe.png
resource_packs/alternative_birch_leaves/drop/textures/particle/flame.png
resource_packs/alternative_birch_leaves/drop/models/block/birch_leaves.json
resource_packs/alternative_birch_leaves/drop/models/item/stone_pickaxe.json
resource_packs/alternative_birch_leaves/drop/blockstates/birch_leaves.json
Available typed drop folders:
drop/textures/drop/models/drop/blockstates/drop/lang/drop/font/drop/particles/drop/atlases/drop/shaders/drop/sounds/drop/texts/
Recommended subfolders where the asset class splits by purpose:
drop/textures/block/drop/textures/item/drop/textures/particle/drop/models/block/drop/models/item/
The builder downloads or reuses an official Mojang asset catalog per Minecraft version, narrows the lookup by typed folder, and places the file into the correct assets/... path in the generated output.
It also remembers the resolved output path of each dropped source file per pack and per Minecraft version under:
cache/vanilla-asset-catalogs/resolved-pack-routes/<pack>/<version>.json
cache/ is disposable local build acceleration data. If you delete it, the next build recreates what it needs.
Notes:
pack.pngis never sorted intoassets/minecraft; it stays at the resource-pack root.- For textures and models, prefer the
block/oritem/subfolders from the start. - You can still add deeper subfolders as extra hints, such as
drop/textures/entity/ordrop/models/gui/, when Minecraft uses them. - If a filename is still ambiguous inside the selected asset class, the build fails and tells you which target paths matched. In that case, either add a more specific subfolder hint or place that file under
assets/...yourself. assets/...remains the fallback for anything custom or unclear.
Each pack can decide which Minecraft versions it should build by adding:
resource_packs/<pack>/pack.build.psd1
Example:
@{
MinVersion = '1.13'
}That means the pack will be generated for every configured release version from 1.13 upward.
You can also exclude versions instead:
@{
ExcludeVersions = @(
'1.12.2'
)
}You can also select version ranges based on the order of versions in the global config.
Inclusive range:
@{
MinVersion = '1.16.5'
MaxVersion = '1.20.4'
}Exclusive range:
@{
AfterVersion = '1.12.2'
BeforeVersion = '1.21.9'
}Rules:
Versionsis an allow-list for that packExcludeVersionsremoves versions for that packMinVersionandMaxVersionare inclusive boundsAfterVersionandBeforeVersionare exclusive bounds- range comparison uses the order of
Versionsin the global config/texture-pack.build.psd1 - if the file does not exist, the pack uses all globally enabled versions
- CLI selection still applies first, then the pack-local filter is applied on top
The builder generates:
build/<pack>/<pack>-<version>.zip
The global version list is generated into:
config/minecraft-release-version-matrix.psd1
That file currently covers every official release version after 1.12.2, from 1.13 through 26.2, and the main config loads it automatically.
The builder supports Mojang's current resource-pack metadata breakpoints:
- up to
1.20.1:pack_formatonly 1.20.2through1.21.8: integerpack_formatplus optionalsupported_formats1.21.9and newer:min_format/max_formatusing Mojang's newer pack-format model
For 1.21.9+, the generated metadata no longer writes pack_format or supported_formats. It emits min_format and max_format directly so packs show up as compatible in the resource-pack selection UI.
powershell -ExecutionPolicy Bypass -File .\scripts\build-texture-packs.ps1This repo now includes shared IntelliJ run configurations under .run/.
In IntelliJ, use the run-config dropdown at the top right and select:
Build All Texture PacksBuild All Texture Packs For Version RangeBuild Selected Texture PacksCreate New Texture Pack
Build All Texture Packs runs the full builder in the IntelliJ terminal.
Build All Texture Packs For Version Range prompts for one version, an inclusive version range like 1.20.4..1.21.11, or a comma-separated mix, then builds every pack for that selection.
Build Selected Texture Packs uses the main build script, prompts for one or more pack names, and then builds only that selection.
Create New Texture Pack starts the scaffold script and prompts for the pack name in the IntelliJ terminal.
In IntelliJ, run Create New Texture Pack, enter the pack name, and the repo will create the full folder scaffold under resource_packs/.
It creates:
pack.build.psd1assets/minecraft/drop/textures/block/drop/textures/item/drop/textures/particle/drop/models/block/drop/models/item/- the other typed
drop/folders
You can also run it directly:
powershell -ExecutionPolicy Bypass -File .\scripts\new-texture-pack.ps1 -Name stone_tools -MinVersion 1.13Use the PowerShell scripts directly or the shared IntelliJ run targets in .run/.
Useful commands:
# list available packs
powershell -ExecutionPolicy Bypass -File .\scripts\build-texture-packs.ps1 -ListPacks
# list configured versions
powershell -ExecutionPolicy Bypass -File .\scripts\build-texture-packs.ps1 -ListVersions
# build one pack
powershell -ExecutionPolicy Bypass -File .\scripts\build-texture-packs.ps1 -Pack alternative_birch_leaves
# build all packs for one version
powershell -ExecutionPolicy Bypass -File .\scripts\build-texture-packs.ps1 -Version 1.21.11
# build one pack for selected versions
powershell -ExecutionPolicy Bypass -Command "& '.\scripts\build-texture-packs.ps1' -Pack alternative_birch_leaves -Version @('1.13','1.20.4','26.2')"
# build all packs for an inclusive version range
powershell -ExecutionPolicy Bypass -Command "& '.\scripts\build-texture-packs.ps1' -Version @('1.20.4','1.20.5','1.20.6')"
# clear only temporary staging data; existing build zips stay in place
powershell -ExecutionPolicy Bypass -File .\scripts\build-texture-packs.ps1 -CleanBuild ZIP retention:
- existing
build/<pack>/<pack>-<version>.zipfiles stay in place across later builds - rebuilding the exact same pack/version replaces only that matching ZIP
-Cleanclears temporary staging under the system temp directory and does not delete retained ZIPs
The workflow at .github/workflows/build-packs.yml builds packs automatically when pack sources, config, or scripts change.
scripts/sync-minecraft-release-matrix.ps1 is not part of normal local builds. Keep it for the rare case where Mojang adds new release versions and you want to regenerate config/minecraft-release-version-matrix.psd1 from official metadata.
Your first pack is here:
Its current asset files are in typed drop/... folders, and the builder now resolves them automatically for every release version from 1.13 through 26.2.