376 changed files with 7559 additions and 250 deletions
+23 -122
View File
@@ -1,143 +1,44 @@
# Decocraft Pack Template # Decocraft Paintings Pack
Universal addon pack for Decocraft. No Java code needed. Universal addon pack adding 48 paintings to Decocraft.
Single jar works on both NeoForge and Fabric. Single jar works on both NeoForge and Fabric.
## Quick Start ## Contents
1. Clone this repo - 5 painting series with variants (48 total)
2. Edit `gradle.properties` - change `mod_id`, `mod_name`, `mod_description`, `mod_authors` - Painting 1: 10 variants (A-J)
3. Edit `settings.gradle` - change `rootProject.name` - Painting 2: 11 variants (A-K)
4. Rename `src/main/resources/assets/decocraft/mypack.json` to your pack name - Painting 3: 11 variants (A-K)
5. Update `decocraft.json` to point to your renamed file and `groups.json` - Painting 4: 11 variants (A-K)
6. Edit `groups.json` to define your creative tabs - Painting 5: 5 variants (A-E)
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`, Each series shares a BBModel shape with different textures per variant.
so it loads on either mod loader without separate builds. Variants cycle with the decobrush tool.
## File Structure ## File Structure
``` ```
assets/decocraft/ assets/decocraft/
decocraft.json - manifest: lists groups.json + your content files decocraft.json - manifest
groups.json - creative tab definitions groups.json - paintings creative tab
mypack.json - block/item definitions paintings.json - all 48 painting definitions
models/bbmodel/{model}.bbmodel - BlockBench 3D models models/bbmodel/ - 5 BBModel files (one per series)
textures/block/{material}.png - block textures textures/block/ - 48 block textures
textures/item/{material}.png - item/inventory textures textures/item/ - 48 item textures
lang/en_us.json - display names + tab labels lang/en_us.json - display names
``` ```
All assets go under the `decocraft` namespace.
Blockstates, block models, item models, item definitions, and loot tables Blockstates, block models, item models, item definitions, and loot tables
are all generated dynamically at runtime by the main Decocraft mod. are all generated dynamically at runtime by the main Decocraft mod.
You do NOT need to create these files.
## Per Block Checklist ## Building
For each block you add, you need: ```
./gradlew build
| 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 Output jar goes to `build/libs/`.
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 Compatibility
Version ranges are open ended, so the pack works with any Decocraft 4.0+ Works with Decocraft 4.0+ on Minecraft 26.1+.
on Minecraft 26.1+. Bump `decocraft_version` in `gradle.properties` if you
use features from a newer decocraft release.
+6 -6
View File
@@ -10,14 +10,14 @@ minecraft_version_range=[26.1,)
neoforge_loader_range=[4,) neoforge_loader_range=[4,)
fabric_loader_version=0.18.2 fabric_loader_version=0.18.2
## Mod Properties - CHANGE THESE for your pack ## Mod Properties
mod_id=decocraft_mypack mod_id=decocraft_citylife
mod_name=Decocraft My Pack mod_name=Decocraft City Life Addon
mod_license=All Rights Reserved mod_license=All Rights Reserved
mod_version=1.0.0 mod_version=1.0.0
mod_group_id=com.razz.decocraft.mypack mod_group_id=com.razz.decocraft.citylife
mod_authors=YourName mod_authors=Momo, Razz, ProfMobius, Taelnia
mod_description=Adds new decorations to Decocraft mod_description=Adds city life decorations to Decocraft
# Decocraft minimum version # Decocraft minimum version
decocraft_version=3.0.7 decocraft_version=3.0.7
Binary file not shown.
+3 -1
View File
@@ -1,7 +1,9 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
networkTimeout=10000 networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
Vendored
+2 -5
View File
@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# Copyright © 2015-2021 the original authors. # Copyright © 2015 the original authors.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@@ -57,7 +57,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # https://github.com/gradle/gradle/blob/<unknown>/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@@ -114,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;; NONSTOP* ) nonstop=true ;;
esac esac
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
@@ -172,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java # For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" ) JAVACMD=$( cygpath --unix "$JAVACMD" )
@@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \ set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \ "-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@" "$@"
Vendored
+10 -22
View File
@@ -23,8 +23,8 @@
@rem @rem
@rem ########################################################################## @rem ##########################################################################
@rem Set local scope for the variables with windows NT shell @rem Set local scope for the variables, and ensure extensions are enabled
if "%OS%"=="Windows_NT" setlocal setlocal EnableExtensions
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=. if "%DIRNAME%"=="" set DIRNAME=.
@@ -51,7 +51,7 @@ echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2 echo location of your Java installation. 1>&2
goto fail "%COMSPEC%" /c exit 1
:findJavaFromJavaHome :findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
@@ -65,30 +65,18 @@ echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2 echo location of your Java installation. 1>&2
goto fail "%COMSPEC%" /c exit 1
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* @rem endlocal doesn't take effect until after the line is parsed and variables are expanded
@rem which allows us to clear the local environment before executing the java command
endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
:end :exitWithErrorLevel
@rem End local scope for the variables with windows NT shell @rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
if %ERRORLEVEL% equ 0 goto mainEnd "%COMSPEC%" /c exit %ERRORLEVEL%
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
+1 -1
View File
@@ -8,4 +8,4 @@ plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0' id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
} }
rootProject.name = 'decocraft-mypack' rootProject.name = 'decocraft-citylife'
File diff suppressed because it is too large Load Diff
@@ -1,4 +1,4 @@
[ [
"groups.json", "groups.json",
"mypack.json" "citylife.json"
] ]
@@ -1,3 +1,3 @@
{ {
"mypack": { "label": "itemGroup.decocraft.mypack", "icon": "example_block" } "citylife": { "label": "itemGroup.decocraft.citylife", "icon": "dumpster" }
} }
@@ -1,5 +1,2 @@
{ {
"itemGroup.decocraft.mypack": "Decocraft - My Pack",
"block.decocraft.example_block": "Example Block",
"item.decocraft.example_block": "Example Block"
} }
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"meta":{"format_version":"5.0","model_format":"bedrock","box_uv":false},"name":"jukebox_disc","model_identifier":"jukebox","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"bedrock_animation_mode":"entity","timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"disc","box_uv":false,"render_order":"default","locked":false,"allow_mirror_modeling":true,"from":[-4,20.1,-2],"to":[4,20.1,6],"autouv":0,"color":2,"origin":[0,20.1,2],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,16,16],"texture":0},"down":{"uv":[0,0,16,16],"texture":0}},"type":"cube","uuid":"ceea2b4e-c10d-c799-6872-ae8a1ea2ac2a"}],"groups":[{"uuid":"838f1dbb-a512-2fa5-a7b0-73a6d56621d3","export":true,"locked":false,"origin":[0,20,2],"rotation":[0,0,0],"bedrock_binding":"","color":0,"name":"disc","children":[],"reset":false,"shade":true,"mirror_uv":false,"selected":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false}],"outliner":[{"uuid":"838f1dbb-a512-2fa5-a7b0-73a6d56621d3","isOpen":true,"children":["ceea2b4e-c10d-c799-6872-ae8a1ea2ac2a"]}],"textures":[{"name":"disc_chirp.png","relative_path":"disc_chirp.png","folder":"","namespace":"","id":"0","group":"","width":16,"height":16,"uv_width":16,"uv_height":16,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"0a4db602-423b-b23d-428f-595575d5a934","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABFklEQVR4AaSQzWrCQBSFb0tLIdUspIu+QBddFGqfpptuCn2tQikBUVFRxNcRBRUUfyEgij/fwA3jTKILAyczc865X8LcypVPJiAIgr2trO94AB26v3sQW+q7oBMApULhyQy6RYXRsbMEQMAwYT7Ms6QKEF0NEwDGYy4niP05CLnKACBCHg2GxldIs9WQcqVkPPtFlxk8A2CjAoKi6F+OJQnDMBWifQ+gwetXXYrfbXn/rErxp6O2t2YCXuZ/slmuZLxby8euJll3YgBxHN9stmuP/jz7lbdF5F0sXWYYMAA2l6QX6/5JAoAIOQ3Epao/nU6Erp4TAAYBEMTZVr/XFXeY/ASAAQQBsYWH6NjyABpStqW+ux4AAAD//04fCbMAAAAGSURBVAMAfx6CIdZav0kAAAAASUVORK5CYII="}],"animations":[{"uuid":"0cbbda43-2952-75ea-a38f-b1bce78d5255","name":"animation.jukebox_idle","loop":"once","override":false,"length":0,"snapping":25,"selected":false,"saved":false,"path":"","anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":""},{"uuid":"faa4b26b-6bbc-352d-21b9-3b017475468f","name":"animation.jukebox_playing","loop":"loop","override":false,"length":2.4,"snapping":25,"selected":false,"saved":false,"path":"","anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":"","animators":{"838f1dbb-a512-2fa5-a7b0-73a6d56621d3":{"name":"disc","type":"bone","rotation_global":false,"quaternion_interpolation":false,"keyframes":[{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"65340c59-3574-a32d-2d08-f1de120e3328","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"-180","z":"0"}],"uuid":"06155dca-ae84-a4fe-11bd-60891e9b2398","time":1.2,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"-360","z":"0"}],"uuid":"7712866e-f049-d304-f1cd-3d3e27f45cf1","time":2.4,"color":-1,"interpolation":"linear"}]}}}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More