# Decocraft Pack Template Universal addon pack for Decocraft. No Java code needed. Single jar works on both NeoForge and Fabric. ## Quick Start 1. Clone this repo 2. Edit `gradle.properties` - change `mod_id`, `mod_name`, `mod_description`, `mod_authors` 3. Edit `settings.gradle` - change `rootProject.name` 4. Rename `src/main/resources/assets/decocraft/mypack.json` to your pack name 5. Update `decocraft.json` to point to your renamed file and `groups.json` 6. Edit `groups.json` to define your creative tabs 7. Add your content (see below) 8. `./gradlew build` - jar goes to `build/libs/` The output jar contains both `fabric.mod.json` and `META-INF/neoforge.mods.toml`, so it loads on either mod loader without separate builds. ## File Structure ``` assets/decocraft/ decocraft.json - manifest: lists groups.json + your content files groups.json - creative tab definitions mypack.json - block/item definitions models/bbmodel/{model}.bbmodel - BlockBench 3D models textures/block/{material}.png - block textures textures/item/{material}.png - item/inventory textures lang/en_us.json - display names + tab labels ``` All assets go under the `decocraft` namespace. Blockstates, block models, item models, item definitions, and loot tables are all generated dynamically at runtime by the main Decocraft mod. You do NOT need to create these files. ## Per Block Checklist For each block you add, you need: | File | Purpose | |------|---------| | `mypack.json` | Entry in the `models` array | | `models/bbmodel/{model}.bbmodel` | BlockBench 3D model | | `textures/block/{material}.png` | Block texture | | `textures/item/{material}.png` | Item texture | | `lang/en_us.json` | `"block.decocraft.{decoref}": "Display Name"` | That is it. Everything else is handled automatically. ## Manifest (decocraft.json) Simple array listing files to load. Include `groups.json` first: ```json [ "groups.json", "mypack.json" ] ``` Decocraft merges manifests from all jars, so your pack's files are loaded alongside the base decocraft files. ## Creative Tabs (groups.json) Declare tabs with a translation key and icon block: ```json { "my_tab": { "label": "itemGroup.decocraft.my_tab", "icon": "some_block_id" } } ``` Then add the display name in `lang/en_us.json`: ```json "itemGroup.decocraft.my_tab": "Decocraft - My Tab" ``` The `icon` must match a block's `decoref` from your content JSON. Tabs from all packs are merged. If the base decocraft already defines a tab key, your blocks will appear in that existing tab. ## Content JSON Entry ```json { "name": "Display Name", "model": "bbmodel_filename_without_extension", "material": "texture_name", "scale": 1.0, "tabs": "your_tab_name", "crafting_color": [50.0, 50.0, 50.0], "decoref": "unique_block_id" } ``` ### Common Types | type | behavior | |------|----------| | (empty/omitted) | Basic decoration block (default) | | `"underlayer"` | Wall/floor mounted virtual overlay (paintings, carpets) | | `"animated"` | Block with keyframe animations | | `"rotatable"` | Block that places at 45 degree increments | | `"bed"` | Sleepable bed | | `"seat"` | Sittable block | | `"chain"` | Chain/rope connector | ### Optional Fields - `"hidden": true` - registered but not in creative tabs - `"transparency": true` - translucent rendering - `"passable": true` - no collision - `"loot": "other_decoref"` - override what drops when broken - `"flipbook": {"frametime": 4, "images": 6}` - animated texture - `"script"` - tool_modelswitch, on_use, sounds, particles, etc. ### Model Switching (cycle variants with decobrush) ```json "script": { "tool_modelswitch": { "link": "next_variant_id" } } ``` Chain the last variant back to the first to create a cycle. ## Full Documentation See `json_documentation.md` in the main Decocraft mod for the complete field reference with examples of every block type. ## Version Compatibility Version ranges are open ended, so the pack works with any Decocraft 4.0+ on Minecraft 26.1+. Bump `decocraft_version` in `gradle.properties` if you use features from a newer decocraft release.