commit 2dcb88ccece33f74c0988324a6109b23f35427ea Author: thedarkcolour <30441001+thedarkcolour@users.noreply.github.com> Date: Fri Jul 21 21:16:52 2023 -0700 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..f811f6ae --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +# Disable autocrlf on generated files, they always generate with LF +# Add any extra files or paths here to make git stop saying they +# are changed when only line endings change. +src/generated/**/.cache/cache text eol=lf +src/generated/**/*.json text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..12f86447 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# eclipse +bin +*.launch +.settings +.metadata +.classpath +.project + +# idea +out +*.ipr +*.iws +*.iml +.idea + +# gradle +build +.gradle + +# other +eclipse +run + +# Files from Forge MDK +forge*changelog.txt diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000..e5b07fe4 --- /dev/null +++ b/build.gradle @@ -0,0 +1,127 @@ +plugins { + id 'idea' + id 'net.minecraftforge.gradle' version '[6.0,6.2)' + id 'org.parchmentmc.librarian.forgegradle' version '1.+' + id 'org.spongepowered.mixin' version '0.7.+' +} + +version = '1.0' +group = 'team.rusty.exnihiloreborn' +base { + archivesName = 'exnihiloreborn' +} + +java.toolchain.languageVersion = JavaLanguageVersion.of(17) + +minecraft { + mappings channel: 'parchment', version: "$parchment_mappings-$mc_version" + accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + + runs { + copyIdeResources = true + + client { + workingDirectory project.file('run') + + property 'forge.logging.console.level', 'debug' + + mods { + exnihiloreborn { + source sourceSets.main + } + } + } + + server { + workingDirectory project.file('run/server') + + property 'forge.logging.console.level', 'debug' + + mods { + exnihiloreborn { + source sourceSets.main + } + } + } + + data { + workingDirectory project.file('run') + + property 'forge.logging.console.level', 'debug' + + args '--mod', 'exnihiloreborn', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') + + mods { + exnihiloreborn { + source sourceSets.main + } + } + } + } +} + +// Include resources generated by data generators. +sourceSets.main.resources { srcDir 'src/generated/resources' } + +repositories { + mavenCentral() + maven { + name = 'McJty maven' + url = 'https://maven.k-4u.nl' + content { includeGroup 'mcjty.theoneprobe' } + } + maven { + name = 'jei' + url = 'https://maven.blamejared.com/' + content { includeGroup "mezz.jei" } + } +} + +dependencies { + minecraft("net.minecraftforge:forge:${mc_version}-${forge_version}") + + // TOP + implementation(fg.deobf("mcjty.theoneprobe:theoneprobe:1.20.0-${top_version}") { + transitive = false + }) + // JEI OPTIONAL + compileOnly(fg.deobf("mezz.jei:jei-${mc_version}-common-api:${jei_version}")) + compileOnly(fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}")) + // at runtime, use the full JEI jar for Forge + runtimeOnly(fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}")) +} + +def replaceProperties = [ mc_version: mc_version, mod_version: version ] + +processResources { + inputs.properties replaceProperties + replaceProperties.put 'project', project + + filesMatching(['META-INF/mods.toml']) { + expand replaceProperties + } + + // Minify JSON resources + // Actual reduction in file size is just a few KB, but why not? + doLast { + fileTree(dir: outputs.files.asPath, include: "**/*.json").each { + File file -> + //noinspection UnnecessaryQualifiedReference + file.text = groovy.json.JsonOutput.toJson(new groovy.json.JsonSlurper().parse(file)) + } + } +} + +jar { + manifest { + attributes([ + "Specification-Title": "exnihiloreborn", + "Specification-Vendor": "exnihilorebornsareus", + "Specification-Version": "1", // We are version 1 of ourselves + "Implementation-Title": project.name, + "Implementation-Version": "${version}", + "Implementation-Vendor" :"exnihilorebornsareus", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + ]) + } +} diff --git a/changelog.md b/changelog.md new file mode 100644 index 00000000..d2ebe83f --- /dev/null +++ b/changelog.md @@ -0,0 +1,6 @@ +## Ex Nihilo Reborn - 1.0 +- Ex Nihilo Reborn is a port mixed of the original Ex Nihilo from 1.7.10 + and Ex Nihilo Adscensio for 1.10.2. I was unimpressed with Ex Nihilo Sequentia, + so I made this. +- Removed Andesite, Granite, and Diorite pebbles +- No coral seeds diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..3db35286 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,15 @@ +# Sets default memory used for gradle commands. Can be overridden by user or command line properties. +# This is required to provide enough memory for the Minecraft decompilation process. +org.gradle.jvmargs=-Xmx3G +org.gradle.daemon=false +org.gradle.cache=true + +mc_version=1.20.1 +forge_version=47.0.34 +parchment_mappings=1.20.1-2023.06.26 + +geckolib_version=4.2 +modonomicon_version=1.36.0 +jei_version=15.0.0.12 +curios_version=5.2.0-beta.3 +top_version=9.0.0-1 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..e708b1c0 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..fae08049 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 00000000..4f906e0c --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..107acd32 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 00000000..55452c3c --- /dev/null +++ b/settings.gradle @@ -0,0 +1,11 @@ +pluginManagement { + repositories { + gradlePluginPortal() + maven { url = 'https://maven.minecraftforge.net/' } + maven { url = 'https://maven.parchmentmc.org' } + } +} + +plugins { + //id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' +} diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache new file mode 100644 index 00000000..76c3dccc --- /dev/null +++ b/src/generated/resources/.cache/cache @@ -0,0 +1,308 @@ +6b1f7c2a40a8907e7f7408f1abfb28078caa4fff assets/exnihiloreborn/blockstates/acacia_barrel.json +4cfcca92876cd40dce2731bf17e1c12bde0dc813 assets/exnihiloreborn/blockstates/acacia_crucible.json +ef543c60f5f20a84037814c027cfdecca0f4cea0 assets/exnihiloreborn/blockstates/acacia_sieve.json +239790a7c18c748b660d8ef88104bea785b6c8b2 assets/exnihiloreborn/blockstates/birch_barrel.json +d00f325339290b49a550cbe16457fcf99e5d5a0e assets/exnihiloreborn/blockstates/birch_crucible.json +da9be2724dd0b84eecab228d82785599313a025d assets/exnihiloreborn/blockstates/birch_sieve.json +96fb45b1314378aaa7fb3860ee0c551137607d23 assets/exnihiloreborn/blockstates/crimson_barrel.json +5dda0004c1720107f61245c74d9f382febb7c9ea assets/exnihiloreborn/blockstates/crimson_crucible.json +2fbf799c3aa62833b89eedcda3841115eb51d846 assets/exnihiloreborn/blockstates/crimson_sieve.json +cc9c3f04c5b8dab09cbe27daa63acd46d53d55e2 assets/exnihiloreborn/blockstates/crushed_end_stone.json +0cc83d101a7ba1c53e4233520603cb8ec90ea4e5 assets/exnihiloreborn/blockstates/crushed_netherrack.json +c57daf6b8fcfdedc131961f69c73b6507952afe3 assets/exnihiloreborn/blockstates/dark_oak_barrel.json +2e621058efc29a09a1a7ef63c8beff29629e949f assets/exnihiloreborn/blockstates/dark_oak_crucible.json +631b32a1d0ffaa6870a33b49c01ef90bcb1af498 assets/exnihiloreborn/blockstates/dark_oak_sieve.json +b80f3a9a366a319ffb13b430ac450f7e9a8da1c7 assets/exnihiloreborn/blockstates/dust.json +d6e60487cb7b9fe4895677bc27cf7ae460f4a6c8 assets/exnihiloreborn/blockstates/jungle_barrel.json +304d271ad49bc8295de2d10e16eb91506e1a3049 assets/exnihiloreborn/blockstates/jungle_crucible.json +bbad544438efbffb530fbafb3733069782c8a75f assets/exnihiloreborn/blockstates/jungle_sieve.json +7aa72fb4e265c728322964fdf9fd6ee36156cd00 assets/exnihiloreborn/blockstates/oak_barrel.json +21ad905736d2fdd2df8eb5a5e8263c6c1c23d799 assets/exnihiloreborn/blockstates/oak_crucible.json +3c2c217a2309840bb1d94dddd376f948617d43b8 assets/exnihiloreborn/blockstates/oak_sieve.json +1b11dc53dbabd2844e6763f47cae3388ad0c5264 assets/exnihiloreborn/blockstates/porcelain_crucible.json +859f034cece7abfa991b8b3cef4f194bbfafa2e8 assets/exnihiloreborn/blockstates/spruce_barrel.json +b60e62238d282b373cacdcaaa8f5cdfcf8773304 assets/exnihiloreborn/blockstates/spruce_crucible.json +b87591386e02d4f86a3faef2b43b89011d055542 assets/exnihiloreborn/blockstates/spruce_sieve.json +72a1cca44f9264a87045d73b6ba4b4422f893f7a assets/exnihiloreborn/blockstates/stone_barrel.json +035bba6565158e71f78ddc64421004001b72f9bd assets/exnihiloreborn/blockstates/unfired_crucible.json +43f536765740a10e87376f1868a352e9b3578e3b assets/exnihiloreborn/blockstates/warped_barrel.json +3da9a7f055c1ef45bddbbe4d2caab4010e4a94ba assets/exnihiloreborn/blockstates/warped_crucible.json +5bf22e4b5f24f6e634a7a5d2ffb507160d7df19b assets/exnihiloreborn/blockstates/warped_sieve.json +8593319de75b48dd4f6cd75c29344891b173b0e3 assets/exnihiloreborn/lang/en_us.json +fc7629ecbb61ad05a717b5399e494746aebd46f2 assets/exnihiloreborn/models/block/acacia_barrel.json +2faac013888461275178b85d135bee8c4587a1d3 assets/exnihiloreborn/models/block/acacia_crucible.json +8774297c443953ac2add65bfdd4eded703fbb412 assets/exnihiloreborn/models/block/acacia_sieve.json +0a0fd97607320822d7f126f6422922df0225c69a assets/exnihiloreborn/models/block/birch_barrel.json +732bd9803ef2351896e97f277eefc9f0857b34b0 assets/exnihiloreborn/models/block/birch_crucible.json +b03c2fe3e19cb42da6329bc0312b8bece38b0a01 assets/exnihiloreborn/models/block/birch_sieve.json +e78e763781a1dcd1919f9b466faa124048c703f0 assets/exnihiloreborn/models/block/crimson_barrel.json +d61d2a148163e9315d8ebd058323a59697503a8d assets/exnihiloreborn/models/block/crimson_crucible.json +ec509d5d0ce8307f4db0373effd841962fb444b2 assets/exnihiloreborn/models/block/crimson_sieve.json +a2dd7dc4b93718c1fa541cbbc4b707a0b10c7a45 assets/exnihiloreborn/models/block/crushed_end_stone.json +4a8f2f59570b6ee3abdd9332c422f0c4bd922a70 assets/exnihiloreborn/models/block/crushed_netherrack.json +da1a0e75d98233de9afc951a09d760ed8b17ba80 assets/exnihiloreborn/models/block/dark_oak_barrel.json +fcfa75f17fbf9ef1ab688920c9ad274f4a6af7c6 assets/exnihiloreborn/models/block/dark_oak_crucible.json +c55835b1aeba6642ddffe80282819cc31e75f1a1 assets/exnihiloreborn/models/block/dark_oak_sieve.json +bfc71b617371fc9b58281dab8db17e3022ed5976 assets/exnihiloreborn/models/block/dust.json +916d957dd5700f934d8b2e821762c812a23f244d assets/exnihiloreborn/models/block/jungle_barrel.json +63c0cbd8217e3b639b3a3187cd99a805f0cece29 assets/exnihiloreborn/models/block/jungle_crucible.json +b805f2bc24a1565fa0e86eeb5653e0d46a78e993 assets/exnihiloreborn/models/block/jungle_sieve.json +f8d2bd98ad407c49566ae911feba7abc531a4cd5 assets/exnihiloreborn/models/block/oak_barrel.json +08525e523958ca7b6c7540c2bef11f28fb7502c0 assets/exnihiloreborn/models/block/oak_crucible.json +39f9c13ade872068dbb48ecf7dc98c19d11fab75 assets/exnihiloreborn/models/block/oak_sieve.json +f124d29de3f40103c7e47b98c28f02f752e92f6c assets/exnihiloreborn/models/block/porcelain_crucible.json +34d343e599b93fad9b765dce84501504be0217c0 assets/exnihiloreborn/models/block/spruce_barrel.json +86245ab87ce1595f217d9a9d9c21f4d2303dfefe assets/exnihiloreborn/models/block/spruce_crucible.json +40db06387ec10438a8feb79ffdd6b53cd07e582d assets/exnihiloreborn/models/block/spruce_sieve.json +b2acd16c3cf321faee10b2a3863ce2797e1a026e assets/exnihiloreborn/models/block/stone_barrel.json +f454ed0ed5fa37fd1339f18063fb1cfdfd164669 assets/exnihiloreborn/models/block/unfired_crucible.json +ad9c5cf97b42805238a7edea2fdaeeb03e6da7d3 assets/exnihiloreborn/models/block/warped_barrel.json +953a84335205c9b8581d793d5c844f895a4f3135 assets/exnihiloreborn/models/block/warped_crucible.json +a89c05d07b7e05c6aaf2bb197aedb10786e1128f assets/exnihiloreborn/models/block/warped_sieve.json +b6b1c57f668edf98740db76fd14f133eaffd0720 assets/exnihiloreborn/models/item/acacia_barrel.json +183d0697b952c37b5c6818adb9fa8f6333693528 assets/exnihiloreborn/models/item/acacia_crucible.json +056527f91834d397e6e6d58ed593304290379d4a assets/exnihiloreborn/models/item/acacia_sieve.json +009913aff8f2b1c986022ae220711a6ae0a5b7b0 assets/exnihiloreborn/models/item/birch_barrel.json +38cbfac78e620cd843f87fb06bb82d0b782b10ce assets/exnihiloreborn/models/item/birch_crucible.json +1e55d3001b89131196e2633c5ca90b39a0fd3d85 assets/exnihiloreborn/models/item/birch_sieve.json +c5b025888aa5205fd99aa22ced491ab5d15d8367 assets/exnihiloreborn/models/item/bone_crook.json +14b3d5e284b7b3d39951712a1f1f7c4e1ff17d48 assets/exnihiloreborn/models/item/cooked_silk_worm.json +6bf1e8bafd9b964e601768304131f4f16d45cd0e assets/exnihiloreborn/models/item/crimson_barrel.json +a98fd77c49e09c5a3ddb17ff128157bd60ca9a8c assets/exnihiloreborn/models/item/crimson_crucible.json +b9a31f1db41dbd0b59f867b008ec55792061bdaa assets/exnihiloreborn/models/item/crimson_sieve.json +1cd6f833e1d0c8751cfc358d91d964c897de58d4 assets/exnihiloreborn/models/item/crook.json +28d934726ab844081edb590c59f3dcc3c2dc6bfb assets/exnihiloreborn/models/item/crushed_end_stone.json +6e2ecc834f0e35ed8f0f24b1bb2382c68f359a17 assets/exnihiloreborn/models/item/crushed_netherrack.json +3b66ea2aae7c884567ba388bf64e89c627d9ce23 assets/exnihiloreborn/models/item/dark_oak_barrel.json +a37fde390decb12fde8466cc3379ee12ab5fe25d assets/exnihiloreborn/models/item/dark_oak_crucible.json +8d83269151e363c2bdd9d0c428f856a0a05791fe assets/exnihiloreborn/models/item/dark_oak_sieve.json +e7c623c33a07c856eb70bb68c5504d64c1131d6a assets/exnihiloreborn/models/item/diamond_hammer.json +ce06221b61a1e59776244f6cd7297730dc6c44f7 assets/exnihiloreborn/models/item/dust.json +34b81e1056dc4a84b7cf40ca711e81a4d52d6113 assets/exnihiloreborn/models/item/golden_hammer.json +c568879b6ac167affec3e14eb12e5119178c8369 assets/exnihiloreborn/models/item/iron_hammer.json +f07bda7d8acb0858f4f5141496ec1b8f1ad8adca assets/exnihiloreborn/models/item/jungle_barrel.json +d6add4e04cec2661b245b69d228acc7237da42dc assets/exnihiloreborn/models/item/jungle_crucible.json +123aafb9e4c2d7b84a11788eb125f1dd4fb0f02f assets/exnihiloreborn/models/item/jungle_sieve.json +70120521c811abb2e8c81a6b06eb7d5c14219db4 assets/exnihiloreborn/models/item/oak_barrel.json +307de756c26a215396ab04a905ac79df5e96a948 assets/exnihiloreborn/models/item/oak_crucible.json +cabe1fe16d343bcd9338dcc1c7c52b9f992110e4 assets/exnihiloreborn/models/item/oak_sieve.json +6c25f161c7adc7db3961bbd9a24146b8edeb32b6 assets/exnihiloreborn/models/item/porcelain_crucible.json +d0baa6801590a4581fa94f168df5183730589fb1 assets/exnihiloreborn/models/item/silk_worm.json +8e0cecb3176800ff5972704e7251dffa7253d2e1 assets/exnihiloreborn/models/item/spruce_barrel.json +b853e1b5a36df4b5660e0fc413a9df9a145ce3f9 assets/exnihiloreborn/models/item/spruce_crucible.json +cc1c573870dac3f2a5c3e8e80964eb494cb2c3e9 assets/exnihiloreborn/models/item/spruce_sieve.json +7a1b6abcd79c1c797a0884380c926482e2323fb1 assets/exnihiloreborn/models/item/stone_barrel.json +b6aa4986ab295a968d7fb1630023714240a7b03f assets/exnihiloreborn/models/item/stone_hammer.json +b69a214d853d74c17a1a92114ab4c2f1316162fe assets/exnihiloreborn/models/item/unfired_crucible.json +42e0adade5d4e9f8c5bc0309ab9e82e375d77696 assets/exnihiloreborn/models/item/warped_barrel.json +afed51f68ebb12aaeffe6f8141b9c21ec950fb4f assets/exnihiloreborn/models/item/warped_crucible.json +b9fcf4827195310e0fc6120171bc0242bc440ef7 assets/exnihiloreborn/models/item/warped_sieve.json +fb15c1f086ed59aeb62879c7160f28a3d7ef4de3 assets/exnihiloreborn/models/item/wooden_hammer.json +6b13f0abd30f8e3935c86963e3b5b7a4258bd7dd data/exnihiloreborn/advancements/recipes/exnihiloreborn/acacia_barrel.json +5c134ce0d7c57e569bbf1bb9a6905976b34c2540 data/exnihiloreborn/advancements/recipes/exnihiloreborn/acacia_crucible.json +cbd050075da9b73b9738af87c8bb98b42510f452 data/exnihiloreborn/advancements/recipes/exnihiloreborn/birch_barrel.json +ee0e9d1c8c34cd7ff43b9ee286d9aa0a44dd6407 data/exnihiloreborn/advancements/recipes/exnihiloreborn/birch_crucible.json +bb7c50bcb94ee585343de89c7aca1713bc451b71 data/exnihiloreborn/advancements/recipes/exnihiloreborn/bone_crook.json +bcc07ba16eb241fe27411e70e9802fa9ccf1c725 data/exnihiloreborn/advancements/recipes/exnihiloreborn/compressed_crook.json +966e85a52859f9e071130353134d823b8e6d37f5 data/exnihiloreborn/advancements/recipes/exnihiloreborn/cooked_silk_worm.json +2eeffb066842df5bd36818c751e7e900bfab573c data/exnihiloreborn/advancements/recipes/exnihiloreborn/crimson_barrel.json +07fb507a770c9d70e80bd1e7f3c1b50090087521 data/exnihiloreborn/advancements/recipes/exnihiloreborn/crimson_crucible.json +4738a5e12744f6f0bc1411bd4a6d2d09f8c98930 data/exnihiloreborn/advancements/recipes/exnihiloreborn/crook.json +285be8d87ddf835429c7d6d61f5246c94faa54a3 data/exnihiloreborn/advancements/recipes/exnihiloreborn/dark_oak_barrel.json +01bc75c0be5fa8d224cedbc963f07e80a5fbd7ac data/exnihiloreborn/advancements/recipes/exnihiloreborn/dark_oak_crucible.json +ecc1a50dc52ef324615180e1b8caf4666d6bb0c6 data/exnihiloreborn/advancements/recipes/exnihiloreborn/diamond_hammer.json +f6b903bc4e0549a39d1319fea690090c52450373 data/exnihiloreborn/advancements/recipes/exnihiloreborn/golden_hammer.json +ea82d82f3598de41a34b675a87979bcf11c11908 data/exnihiloreborn/advancements/recipes/exnihiloreborn/iron_hammer.json +fa64e83b81957793f3e280e3295f70fb5a378e12 data/exnihiloreborn/advancements/recipes/exnihiloreborn/jungle_barrel.json +0ba940ea12af29bacb95bcf0256335e3deaf7eaf data/exnihiloreborn/advancements/recipes/exnihiloreborn/jungle_crucible.json +6c3cd676b4b31c9758a12b1f2207aa2b5a2f6dcc data/exnihiloreborn/advancements/recipes/exnihiloreborn/oak_barrel.json +c8ed20329333ddf22c2258ed797c1d3bb28490fe data/exnihiloreborn/advancements/recipes/exnihiloreborn/oak_crucible.json +bcbc1214981633751fbdbad75c1e15b2cc2c5e9c data/exnihiloreborn/advancements/recipes/exnihiloreborn/porcelain_crucible.json +e0de3a8f65d6f0ce24d3a73daa9ad49cd8f1eab0 data/exnihiloreborn/advancements/recipes/exnihiloreborn/spruce_barrel.json +8f9a667b15d0ca9e61d55514be28d3d68ab960be data/exnihiloreborn/advancements/recipes/exnihiloreborn/spruce_crucible.json +53237e2f0c0332e2b651a70caada4bf0883cd7d8 data/exnihiloreborn/advancements/recipes/exnihiloreborn/stone_barrel.json +1d6f6b945d4c8aea67e256309a2833ad62e40111 data/exnihiloreborn/advancements/recipes/exnihiloreborn/stone_hammer.json +23cad98d77125e56b162f66a4f7c063aaf976050 data/exnihiloreborn/advancements/recipes/exnihiloreborn/unfired_crucible.json +a833117f7ea1ea35025691aa1e9392de75b4d27a data/exnihiloreborn/advancements/recipes/exnihiloreborn/warped_barrel.json +95709fa9f528fe8864a380e47271fa136a4d23a4 data/exnihiloreborn/advancements/recipes/exnihiloreborn/warped_crucible.json +6bb59781f6303c94205223365921e3197f07eace data/exnihiloreborn/advancements/recipes/exnihiloreborn/wooden_hammer.json +7e1a9f4c6014042f1b37e13e5f41d7f1aa1c3782 data/exnihiloreborn/loot_tables/blocks/acacia_barrel.json +55e3f3cfedf47ad775d1354ea0850fa6e2da1515 data/exnihiloreborn/loot_tables/blocks/birch_barrel.json +56f8a57d4951f080a470c6a993aded60978da8c5 data/exnihiloreborn/loot_tables/blocks/compressed_cobblestone.json +96e3fd87da7d782ee296f92e0d21f7126952203c data/exnihiloreborn/loot_tables/blocks/compressed_dirt.json +7dcf5bcc109a8232bad0eb5da20452751e28f742 data/exnihiloreborn/loot_tables/blocks/compressed_dust.json +d3c6080124dec154a147f7b387f7b45f7a69b08f data/exnihiloreborn/loot_tables/blocks/compressed_sand.json +13b8c702c4a29592805d50ad6be1fb418a762d68 data/exnihiloreborn/loot_tables/blocks/crimson_barrel.json +0df0157da6efb67e302174b78a11336042b55029 data/exnihiloreborn/loot_tables/blocks/dark_oak_barrel.json +153332e35013ac8ce00c3c7d9e96fcf2b7418f12 data/exnihiloreborn/loot_tables/blocks/dust.json +3f997adf0dbd796a553c901d44bf344d0758393a data/exnihiloreborn/loot_tables/blocks/infested_leaves.json +b72effb758675549b6bed2a131f9bbe3e46ea505 data/exnihiloreborn/loot_tables/blocks/jungle_barrel.json +cf78b1f62fe2f14a3aeeab9c55a594d4fafd965d data/exnihiloreborn/loot_tables/blocks/oak_barrel.json +12541930dfff7ddf4fdaaeeb744ef361e9a85dcb data/exnihiloreborn/loot_tables/blocks/spruce_barrel.json +5bc1d6f1f8f190d6da258c215b450156cb915853 data/exnihiloreborn/loot_tables/blocks/stone_barrel.json +bb4e1d6e0d46871a50fd12a0ee6ec2522044fd05 data/exnihiloreborn/loot_tables/blocks/warped_barrel.json +80cd88ac7cdf83c4d85ed33eaec23b1e5a30be37 data/exnihiloreborn/recipes/acacia_barrel.json +00289c1036ea6eb7b7bc352dfe730aefabcfccf3 data/exnihiloreborn/recipes/acacia_crucible.json +9a5593056cd0123fc99ceee4e8b4e0baab451e77 data/exnihiloreborn/recipes/barrel_compost/apple.json +17484460671baa5c0030bad675d7ef998c39df8b data/exnihiloreborn/recipes/barrel_compost/bread.json +924c20ccecc4549c3da5ebecbdd98bb737c896d4 data/exnihiloreborn/recipes/barrel_compost/cookie.json +ef70f45c9dae5e819ae41a3fce333cfdea509e4a data/exnihiloreborn/recipes/barrel_compost/kelp.json +7fa9a414885aeeba54fd530d895620f436991dcc data/exnihiloreborn/recipes/barrel_compost/leaves.json +153fcdc950855b9f18e417e249daa1bf22ee3af1 data/exnihiloreborn/recipes/barrel_compost/melon.json +d48c313e8904ac474d823ab9cb3f0028df15356f data/exnihiloreborn/recipes/barrel_compost/melon_slice.json +53d049cf51ddc6902503dafffc5298704dab0dc2 data/exnihiloreborn/recipes/barrel_compost/mushrooms.json +93c059428567a58439cfd7c999eb75a298a2419e data/exnihiloreborn/recipes/barrel_compost/nether_wart.json +5bf24aacd0eee32a5f8c89b22f108cb9715366d6 data/exnihiloreborn/recipes/barrel_compost/pumpkin.json +9bd10d56444191c6f88d9c8839446675de4eef37 data/exnihiloreborn/recipes/barrel_compost/pumpkin_pie.json +ff828be14e992c890b3066ac0f24f0f8d2f465e5 data/exnihiloreborn/recipes/barrel_compost/saplings.json +729c7a6d72e29103b1c6d265e02238ad1e8add20 data/exnihiloreborn/recipes/barrel_compost/seagrass.json +62ead8b6d3747c3467e7e14f6f34c816bfcbcd40 data/exnihiloreborn/recipes/barrel_compost/seeds.json +b8c51d6410b50dee022db5ccac01b9800bade308 data/exnihiloreborn/recipes/barrel_compost/silk_worms.json +2d14fef43c12935f895bfd958a14bb3ca5fc9223 data/exnihiloreborn/recipes/barrel_compost/small_flowers.json +fbe5d2c7c275df5683b20b1e15f12bec2f426f6d data/exnihiloreborn/recipes/barrel_compost/spider_eye.json +d3ab57bca3495e7537716f168554ce6ae9f72f9f data/exnihiloreborn/recipes/barrel_compost/sweet_berries.json +6f6f93ffa5bcc28948106e6efc0fe275b7fecb2e data/exnihiloreborn/recipes/barrel_compost/tall_flowers.json +74ddc2ca01f0e2a35e609633bc7a67793c63f473 data/exnihiloreborn/recipes/barrel_compost/wheat.json +00f9ee47d01b26ff9fdb01032c2629c9701ff5a1 data/exnihiloreborn/recipes/birch_barrel.json +c9d521c98e634eaee6a64a5ac152902ba10dd694 data/exnihiloreborn/recipes/birch_crucible.json +00c545fb1552eda6d048d2360ae59c8fc837dc7e data/exnihiloreborn/recipes/bone_crook.json +eeed21a616d81213a7fc605b51b0c18e46bde843 data/exnihiloreborn/recipes/compressed_crook.json +0830189e0e494f36030ed2511639528df4473d13 data/exnihiloreborn/recipes/cooked_silk_worm.json +327708e5cc4c5cb2c1c3ba88bb3cf3939039ec2b data/exnihiloreborn/recipes/crimson_barrel.json +37cc68ed5337fdf24bafeee830b327009ebaa33e data/exnihiloreborn/recipes/crimson_crucible.json +9f1f7d3b1498aea50cd4aca636fe97ff495073b3 data/exnihiloreborn/recipes/crook.json +3de823e6a637550f483788fbbf0bcf3eb754344f data/exnihiloreborn/recipes/dark_oak_barrel.json +91505bedc6771829bd6e2e3ced6e992c107c96b7 data/exnihiloreborn/recipes/dark_oak_crucible.json +2c6e77c878721480afc9f90262db4c037d651237 data/exnihiloreborn/recipes/diamond_hammer.json +4bfc3eabfc36a2d19f0c55227f0e4a322d823962 data/exnihiloreborn/recipes/golden_hammer.json +f57cb3b8bf65c90a48cc388152840f7b11ce3556 data/exnihiloreborn/recipes/hammer/crushing_red_sandstone.json +23e4048ef09ed61a26ba66da7aadd5adfb522415 data/exnihiloreborn/recipes/hammer/crushing_sandstone.json +2d4174edc94e859a604bed46199db915a6927260 data/exnihiloreborn/recipes/hammer/crushing_stone_bricks.json +b69e7d7dda133d91b025d36ef84566ac44f7f6dc data/exnihiloreborn/recipes/hammer/dust.json +f487e8a70d29641a70d76f274957ba42286963e0 data/exnihiloreborn/recipes/hammer/gravel.json +12e8c032a7db4148d0006d66ff1fbd0373935803 data/exnihiloreborn/recipes/hammer/sand.json +281e8e15a3159a508fe4262ad2ce2113d7ceac3c data/exnihiloreborn/recipes/hammer/stone_pebbles.json +ced6fb12c0fbc529e98572cbd3452891e0564fe7 data/exnihiloreborn/recipes/iron_hammer.json +c918efafcf434580d9b47d0a1ec3dbfdb28045f6 data/exnihiloreborn/recipes/jungle_barrel.json +a19f3bc2479dcacc247de14ba6869ffc001c8dea data/exnihiloreborn/recipes/jungle_crucible.json +d829ab200ba6efdc0d1a9758759289363c132f5d data/exnihiloreborn/recipes/lava_crucible/cobblestone.json +ffaec302cf020443f66ca28f8e8a8ed427bbd89b data/exnihiloreborn/recipes/lava_crucible/gravel.json +b3ebb98ef1ea9ac7e49d77d23ec0e984faf6537e data/exnihiloreborn/recipes/lava_crucible/netherrack.json +f8bb7bbed78bf4dae074eaa05326d803337a489c data/exnihiloreborn/recipes/lava_crucible/stone.json +af075fdc2fdc2cd328c6e7d5d22044780b5a00b9 data/exnihiloreborn/recipes/oak_barrel.json +70bc1f2f8c7d3da8eada077d8658185a8d6b5055 data/exnihiloreborn/recipes/oak_crucible.json +c05d612814c3125dc7c4e1a370cd073d3a63300c data/exnihiloreborn/recipes/porcelain_crucible.json +62037aa67646438cc78d36b3fc481f5e3d2f8fe5 data/exnihiloreborn/recipes/sieve/beetroot_seeds.json +60d53c7435b74119da7d0d94bf994831ad8eaed8 data/exnihiloreborn/recipes/sieve/melon_seeds.json +8c3674b088a37bf1fa425ac09c014a56d3799612 data/exnihiloreborn/recipes/sieve/pumpkin_seeds.json +0c3425075a3cdd2170d75d3a0db1798ccce457d7 data/exnihiloreborn/recipes/sieve/stone_pebble.json +8e15ced335e2cbd6cd529f5f87484e22d9a53a87 data/exnihiloreborn/recipes/sieve/wheat_seeds.json +300c398ab36fc28e82f8cb8896dc904e600495d5 data/exnihiloreborn/recipes/spruce_barrel.json +a6b1b5fc9a290b5f8603510daf8d9399b4de9c10 data/exnihiloreborn/recipes/spruce_crucible.json +5de67d9a1ebd11bd5eacb443f94be5a47823e552 data/exnihiloreborn/recipes/stone_barrel.json +2e5789cb2eb0ba068bbf4f53d970b68fe2388e9e data/exnihiloreborn/recipes/stone_hammer.json +e08d2edc60f419dd2a508de85316391d67b9c207 data/exnihiloreborn/recipes/unfired_crucible.json +655c330907b76195e87fa161d146cb0100033ca4 data/exnihiloreborn/recipes/warped_barrel.json +a3e0957d9b6c1f42fed4d067bf9e9d9f318c4f93 data/exnihiloreborn/recipes/warped_crucible.json +f04fcb9681c6ff62234de6a4c63ac34bbb9b5d36 data/exnihiloreborn/recipes/water_crucible/apple.json +da94cf0fc55ba1eee518547737498bf97a7f4f86 data/exnihiloreborn/recipes/water_crucible/cactus.json +a142cf2209793519f0bce78be556a94f6537d4e8 data/exnihiloreborn/recipes/water_crucible/leaves.json +4287d1f9c6c075c455ad09494e61c972f084d779 data/exnihiloreborn/recipes/water_crucible/melon.json +854fded794e66307815bf312c49178f9913ac000 data/exnihiloreborn/recipes/water_crucible/melon_slice.json +7ca6f356f6aa83273998591beab8297eb0939e63 data/exnihiloreborn/recipes/water_crucible/pumpkin.json +0105732c70823f5d877c74e31bc7dca75016a02d data/exnihiloreborn/recipes/water_crucible/saplings.json +05b0098dcf57c14680657d6e4a53560ea4f93ed0 data/exnihiloreborn/recipes/water_crucible/small_flowers.json +89594753b56d1e8472441092228d11d8fb331740 data/exnihiloreborn/recipes/water_crucible/sweet_berries.json +356317e7828186a65e04c364f8b41466755cad82 data/exnihiloreborn/recipes/water_crucible/tall_flowers.json +8e71b4e52184f7b6997eca3c9b8df1b4d59d885b data/exnihiloreborn/recipes/wooden_hammer.json +28cc96bf923f4243eafb2f424562c080c13776b9 data/exnihiloreborn/tags/items/compressed_hammers.json +b66a5a958fc3d99897f32b6c50ead81d28a54434 data/exnihiloreborn/tags/items/crooks.json +98b73372f2e5fb304543394d7226cf167e489491 data/exnihiloreborn/tags/items/hammers.json +b05cd8294321449882aa1b4378b355a0357d29c0 data/minecraft/advancements/recipes/exnihiloreborn/cooked_silk_worm_from_smoking.json +d7f16a5ad2b46b72cc4270e809e342775fa1a91c data/minecraft/recipes/cooked_silk_worm_from_smoking.json +cc64a594a266c61f9b417095b48483644216923f data/minecraft/tags/blocks/acacia_logs.json +10bdf4ae09461a8befbc6db074f0c87810a179c8 data/minecraft/tags/blocks/anvil.json +98ed40a9ce70e2db6314eb20b0d798def90cd5ad data/minecraft/tags/blocks/bamboo_plantable_on.json +0bd4a7ad9fb3945080016c0c513a71666f1fa45c data/minecraft/tags/blocks/banners.json +eb26bd99d17e673ddcd07ef7f38dd6ebe4549404 data/minecraft/tags/blocks/base_stone_nether.json +5214bb43c66d495441732b69df204f2460edd494 data/minecraft/tags/blocks/base_stone_overworld.json +2c730d92b3c8bcae7f62381358d05a2994910647 data/minecraft/tags/blocks/beacon_base_blocks.json +cc19b2ce5b4f8d513515eaeff4f8aa1725b038b7 data/minecraft/tags/blocks/beds.json +28d9d739651aa47e95879352a12477c2955448bc data/minecraft/tags/blocks/bee_growables.json +7287fc69a24712818e7bb083eb0ec7eb8ad93d22 data/minecraft/tags/blocks/beehives.json +c4119acccb760f40cc53a372a663ef7202048573 data/minecraft/tags/blocks/birch_logs.json +331374fcc23ad23fe964854acef30097211d234e data/minecraft/tags/blocks/buttons.json +271abebf80b907324609fcf4515fd54d1256703e data/minecraft/tags/blocks/campfires.json +13952d80b58aeec6e0eedccd3ddf31a863df7945 data/minecraft/tags/blocks/carpets.json +f737e48a0a53d2326c89e7d22205ae282bf14ba8 data/minecraft/tags/blocks/climbable.json +351098f7d8142e1e4817b1f637a0f4d554cf0c7d data/minecraft/tags/blocks/coral_blocks.json +ffce4d9383da7dbaea8fc3beb3274a87f0fd58a6 data/minecraft/tags/blocks/coral_plants.json +8c2b7258d84870e024525f5c39a271c8d1229b63 data/minecraft/tags/blocks/corals.json +df61716e1ac18ac14aec90b5380f2912d003d3c6 data/minecraft/tags/blocks/crimson_stems.json +6a1d3975d7be1769c8ab82c38891f0eb5c4f7cf4 data/minecraft/tags/blocks/crops.json +66d8f495d38fd65a5d878009e381e229278a2e0e data/minecraft/tags/blocks/dark_oak_logs.json +41f37916879608eed7f4602ce79a1b21a14d0434 data/minecraft/tags/blocks/doors.json +09f673d40ce1656aa6762c7648373e1b2bca6245 data/minecraft/tags/blocks/dragon_immune.json +b9632e149fc25c3e732ed4c80577c3b88cba171d data/minecraft/tags/blocks/enderman_holdable.json +08f309abe5bee3cb77fa78626d0d11576b95eb31 data/minecraft/tags/blocks/fence_gates.json +8f291eb61c0fb314c0ad9c0253bcabbf93675a93 data/minecraft/tags/blocks/fences.json +515488fb4f5e6fdabfa79481571614283c3741a9 data/minecraft/tags/blocks/fire.json +e741db23dc6f63187460b39e2fd4b5989f6c268c data/minecraft/tags/blocks/flower_pots.json +14b8d5f845b0c48e3c62466258c5a1d508c59da5 data/minecraft/tags/blocks/flowers.json +62c882e7cfd5cd28d7640fe60c94e6817afb811e data/minecraft/tags/blocks/gold_ores.json +a53af57695f5ae2c7076fc645a798201f4eba593 data/minecraft/tags/blocks/guarded_by_piglins.json +07f68e4763cb27322af0824eae4a8d56e10b9246 data/minecraft/tags/blocks/hoglin_repellents.json +6a357118cbaf9faa2d0bd0495c5247dadce3fe52 data/minecraft/tags/blocks/ice.json +6a0a372baf9147d4b3e85cc46301e1e72c3b393c data/minecraft/tags/blocks/impermeable.json +98b39cf1f9ea43f3f4b22dbd718f3f8b30606fdd data/minecraft/tags/blocks/infiniburn_end.json +bb24015cb753c1592206891a800b04b5abda4339 data/minecraft/tags/blocks/infiniburn_nether.json +305fe272833afea72f97591d3555e3566f54eaba data/minecraft/tags/blocks/infiniburn_overworld.json +f26ca94468ebfc40099f3f2387a1a986403ffb36 data/minecraft/tags/blocks/jungle_logs.json +703bb97646721fc12e3c4ccd3dff9413add224f4 data/minecraft/tags/blocks/leaves.json +640c19329c7cbb0bb94a6416947857edc2ffea4d data/minecraft/tags/blocks/logs.json +db1ab1ed896a7e45212c93f307dee6f52d8dfa55 data/minecraft/tags/blocks/logs_that_burn.json +a61ce092a0cba8201832e3e71ea2dcfde6cbd867 data/minecraft/tags/blocks/mushroom_grow_block.json +40737af63de1cafd9baa1cef9bf08e7f5cf74079 data/minecraft/tags/blocks/non_flammable_wood.json +3885d5904ab09945dcff7697f01515438f30aeb2 data/minecraft/tags/blocks/nylium.json +6fb332fe9223f98ad2bfa07a673bd284f1a46127 data/minecraft/tags/blocks/oak_logs.json +b37b4708db0159c68602e2936ba133436a8b4dae data/minecraft/tags/blocks/piglin_repellents.json +4e29a5f501d2d4badb4090d06eddef9b25fe96d3 data/minecraft/tags/blocks/planks.json +e638584b6bd73b4740d21b71a2693044abe3d3ca data/minecraft/tags/blocks/portals.json +6d84dcae6236185e4b25df1c06bb34e5cbe04e8c data/minecraft/tags/blocks/pressure_plates.json +2d2c74dda901bbd6ba0c550c5382ab51a5a82745 data/minecraft/tags/blocks/prevent_mob_spawning_inside.json +fb703660094d60e13c6dcacee036356c207a0843 data/minecraft/tags/blocks/rails.json +b034b4a14f3411c66ed7088642d8369e157a4e93 data/minecraft/tags/blocks/sand.json +b5b0d52ba483e6d85bc0ff6ee81350a7120e708b data/minecraft/tags/blocks/saplings.json +6cc10fee1002cd63b3e1a791358c73fe7d671bb0 data/minecraft/tags/blocks/shulker_boxes.json +b22f77d82e51b5ba6d1b52e03f5912727b0457a4 data/minecraft/tags/blocks/signs.json +11aed5a73a4d9ab505170505f8b145edfb73a0c8 data/minecraft/tags/blocks/slabs.json +e9086500162394a98cfe9221e2081b49a277cc0c data/minecraft/tags/blocks/small_flowers.json +abe677791f6d916b3b307bd1270f4d6687516251 data/minecraft/tags/blocks/soul_fire_base_blocks.json +abe677791f6d916b3b307bd1270f4d6687516251 data/minecraft/tags/blocks/soul_speed_blocks.json +b004f3a3e1922a8b9a89b7b7cda7a7f2986d2f0a data/minecraft/tags/blocks/spruce_logs.json +1806d3b443a9654f81e8a0e9815a129ef17b33a6 data/minecraft/tags/blocks/stairs.json +d3e46da83d51b4d69b0c37e5dc4760934c36bf88 data/minecraft/tags/blocks/standing_signs.json +d35012ca4132eafef53e9ea68e84a7fc8fdd31f6 data/minecraft/tags/blocks/stone_bricks.json +a80bb35192330f6592610482814b73e32b5362b7 data/minecraft/tags/blocks/stone_pressure_plates.json +beb725be018ed98165b5c4c796b463baf18eba68 data/minecraft/tags/blocks/strider_warm_blocks.json +9b9d3f63cf193545f63194080fd1fc66ba69e7ff data/minecraft/tags/blocks/tall_flowers.json +15ee37a120b5ccd1d8986677bd26019e61b12bd5 data/minecraft/tags/blocks/trapdoors.json +dc3094aace807212a671548598e6ebf551f703d5 data/minecraft/tags/blocks/underwater_bonemeals.json +714c9ed3b16a4bbf99ed92a851c50e713f557f20 data/minecraft/tags/blocks/unstable_bottom_center.json +17248c8f056e7340f67ce50f0e3cedbc79832485 data/minecraft/tags/blocks/valid_spawn.json +cdaf7e91da81cec00b8d9bac65d54b6dd9f9d5b2 data/minecraft/tags/blocks/wall_corals.json +21b8bf0ef6b677f9b5b8d1e0398a6b4972c1ca1a data/minecraft/tags/blocks/wall_post_override.json +271c53cb9102f85dc318f1de46c2800ce3a1dc1f data/minecraft/tags/blocks/wall_signs.json +e3eeb6c6451a3d8d2c66ecf464bd8e8b7426c763 data/minecraft/tags/blocks/walls.json +fa0b5df5192cab3ac9a864f1ea9783ecf55db97c data/minecraft/tags/blocks/warped_stems.json +65d65a17100d9372f0adb5b1d6a91118ae9eb340 data/minecraft/tags/blocks/wart_blocks.json +dd2268ec7dfbec202c0946cfe4d7e29a6f904b89 data/minecraft/tags/blocks/wither_immune.json +abe677791f6d916b3b307bd1270f4d6687516251 data/minecraft/tags/blocks/wither_summon_base_blocks.json +b96e14548e654afcd1e02ff74c7087e65f90372a data/minecraft/tags/blocks/wooden_buttons.json +58c7f65650d0381cd95b86e8d1b2a9c40b61fcc3 data/minecraft/tags/blocks/wooden_doors.json +2395f3a3a34048c36bf81272e77d943de8d3f720 data/minecraft/tags/blocks/wooden_fences.json +1c30c5a0651b3223a562deb4e7389ab1675608cb data/minecraft/tags/blocks/wooden_pressure_plates.json +cd2a2d2457ca52209ebd0c54290d2c80579ad301 data/minecraft/tags/blocks/wooden_slabs.json +10a843d1d5098b35227da5304e96dc1156479a2d data/minecraft/tags/blocks/wooden_stairs.json +d25b93d3b70cb0c3ba7a8a0c93de95366c8dbccd data/minecraft/tags/blocks/wooden_trapdoors.json +721eaf2d7f45c4c481c9a86c14ebff6ffb83e3b3 data/minecraft/tags/blocks/wool.json diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_barrel.json new file mode 100644 index 00000000..7de275c5 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/acacia_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_crucible.json new file mode 100644 index 00000000..b2965a9a --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/acacia_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_sieve.json b/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_sieve.json new file mode 100644 index 00000000..5a6a891a --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/acacia_sieve.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/acacia_sieve" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/birch_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/birch_barrel.json new file mode 100644 index 00000000..fcad1e5a --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/birch_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/birch_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/birch_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/birch_crucible.json new file mode 100644 index 00000000..0b20d4b8 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/birch_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/birch_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/birch_sieve.json b/src/generated/resources/assets/exnihiloreborn/blockstates/birch_sieve.json new file mode 100644 index 00000000..ab71b296 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/birch_sieve.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/birch_sieve" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_barrel.json new file mode 100644 index 00000000..683a3b22 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/crimson_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_crucible.json new file mode 100644 index 00000000..912f3453 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/crimson_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_sieve.json b/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_sieve.json new file mode 100644 index 00000000..f5dc2dcd --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/crimson_sieve.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/crimson_sieve" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/crushed_end_stone.json b/src/generated/resources/assets/exnihiloreborn/blockstates/crushed_end_stone.json new file mode 100644 index 00000000..c5efe3fc --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/crushed_end_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/crushed_end_stone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/crushed_netherrack.json b/src/generated/resources/assets/exnihiloreborn/blockstates/crushed_netherrack.json new file mode 100644 index 00000000..6d7adc45 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/crushed_netherrack.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/crushed_netherrack" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_barrel.json new file mode 100644 index 00000000..ab64b1dc --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/dark_oak_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_crucible.json new file mode 100644 index 00000000..2d93c323 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/dark_oak_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_sieve.json b/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_sieve.json new file mode 100644 index 00000000..030c9da6 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/dark_oak_sieve.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/dark_oak_sieve" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/dust.json b/src/generated/resources/assets/exnihiloreborn/blockstates/dust.json new file mode 100644 index 00000000..6036098c --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/dust.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/dust" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_barrel.json new file mode 100644 index 00000000..ed66c5c0 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/jungle_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_crucible.json new file mode 100644 index 00000000..1365a1fc --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/jungle_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_sieve.json b/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_sieve.json new file mode 100644 index 00000000..f90136de --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/jungle_sieve.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/jungle_sieve" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/oak_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/oak_barrel.json new file mode 100644 index 00000000..ad867859 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/oak_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/oak_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/oak_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/oak_crucible.json new file mode 100644 index 00000000..94770373 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/oak_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/oak_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/oak_sieve.json b/src/generated/resources/assets/exnihiloreborn/blockstates/oak_sieve.json new file mode 100644 index 00000000..6b444230 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/oak_sieve.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/oak_sieve" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/porcelain_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/porcelain_crucible.json new file mode 100644 index 00000000..0493ab5b --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/porcelain_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/porcelain_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_barrel.json new file mode 100644 index 00000000..65887092 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/spruce_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_crucible.json new file mode 100644 index 00000000..501f3be4 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/spruce_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_sieve.json b/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_sieve.json new file mode 100644 index 00000000..a1cf2a6e --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/spruce_sieve.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/spruce_sieve" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/stone_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/stone_barrel.json new file mode 100644 index 00000000..88f6e81c --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/stone_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/stone_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/unfired_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/unfired_crucible.json new file mode 100644 index 00000000..070843f3 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/unfired_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/unfired_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/warped_barrel.json b/src/generated/resources/assets/exnihiloreborn/blockstates/warped_barrel.json new file mode 100644 index 00000000..991b6fe5 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/warped_barrel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/warped_barrel" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/warped_crucible.json b/src/generated/resources/assets/exnihiloreborn/blockstates/warped_crucible.json new file mode 100644 index 00000000..e0bf0f13 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/warped_crucible.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/warped_crucible" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/blockstates/warped_sieve.json b/src/generated/resources/assets/exnihiloreborn/blockstates/warped_sieve.json new file mode 100644 index 00000000..8e08a54e --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/blockstates/warped_sieve.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/warped_sieve" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/lang/en_us.json b/src/generated/resources/assets/exnihiloreborn/lang/en_us.json new file mode 100644 index 00000000..5fda2507 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/lang/en_us.json @@ -0,0 +1,52 @@ +{ + "block.exnihiloreborn.acacia_barrel": "Acacia Barrel", + "block.exnihiloreborn.acacia_crucible": "Acacia Crucible", + "block.exnihiloreborn.birch_barrel": "Birch Barrel", + "block.exnihiloreborn.birch_crucible": "Birch Crucible", + "block.exnihiloreborn.compressed_cobblestone": "Compressed Cobblestone", + "block.exnihiloreborn.compressed_crushed_end_stone": "Compressed Crushed End Stone", + "block.exnihiloreborn.compressed_crushed_netherrack": "Compressed Crushed Netherrack", + "block.exnihiloreborn.compressed_dirt": "Compressed Dirt", + "block.exnihiloreborn.compressed_dust": "Compressed Dust", + "block.exnihiloreborn.compressed_sand": "Compressed Sand", + "block.exnihiloreborn.crimson_barrel": "Crimson Barrel", + "block.exnihiloreborn.crimson_crucible": "Crimson Crucible", + "block.exnihiloreborn.crushed_end_stone": "Crushed End Stone", + "block.exnihiloreborn.crushed_netherrack": "Crushed Netherrack", + "block.exnihiloreborn.dark_oak_barrel": "Dark_oak Barrel", + "block.exnihiloreborn.dark_oak_crucible": "Dark Oak Crucible", + "block.exnihiloreborn.dust": "Dust", + "block.exnihiloreborn.jungle_barrel": "Jungle Barrel", + "block.exnihiloreborn.jungle_crucible": "Jungle Crucible", + "block.exnihiloreborn.oak_barrel": "Oak Barrel", + "block.exnihiloreborn.oak_crucible": "Oak Crucible", + "block.exnihiloreborn.porcelain_crucible": "Porcelain Crucible", + "block.exnihiloreborn.spruce_barrel": "Spruce Barrel", + "block.exnihiloreborn.spruce_crucible": "Spruce Crucible", + "block.exnihiloreborn.stone_barrel": "Stone Barrel", + "block.exnihiloreborn.unfired_crucible": "Unfired Crucible", + "block.exnihiloreborn.warped_barrel": "Warped Barrel", + "block.exnihiloreborn.warped_crucible": "Warped Crucible", + "item.exnihiloreborn.bone_crook": "Bone Crook", + "item.exnihiloreborn.compressed_crook": "Compressed Crook", + "item.exnihiloreborn.compressed_diamond_hammer": "Compressed Diamond Hammer", + "item.exnihiloreborn.compressed_golden_hammer": "Compressed Golden Hammer", + "item.exnihiloreborn.compressed_iron_hammer": "Compressed Iron Hammer", + "item.exnihiloreborn.compressed_netherite_hammer": "Compressed Netherite Hammer", + "item.exnihiloreborn.compressed_stone_hammer": "Compressed Stone Hammer", + "item.exnihiloreborn.compressed_wooden_hammer": "Compressed Wooden Hammer", + "item.exnihiloreborn.cooked_silk_worm": "Cooked Silk Worm", + "item.exnihiloreborn.copper_ore_pieces": "Copper Ore Pieces", + "item.exnihiloreborn.crook": "Crook", + "item.exnihiloreborn.deepslate_pebble": "Deepslate Pebble", + "item.exnihiloreborn.diamond_hammer": "Diamond Hammer", + "item.exnihiloreborn.gold_ore_pieces": "Gold Ore Pieces", + "item.exnihiloreborn.golden_hammer": "Golden Hammer", + "item.exnihiloreborn.iron_hammer": "Iron Hammer", + "item.exnihiloreborn.iron_ore_pieces": "Iron Ore Pieces", + "item.exnihiloreborn.netherite_hammer": "Netherite Hammer", + "item.exnihiloreborn.silk_worm": "Silk Worm", + "item.exnihiloreborn.stone_hammer": "Stone Hammer", + "item.exnihiloreborn.stone_pebble": "Stone Pebble", + "item.exnihiloreborn.wooden_hammer": "Wooden Hammer" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/acacia_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/acacia_barrel.json new file mode 100644 index 00000000..aea863ad --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/acacia_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/acacia_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/acacia_crucible.json new file mode 100644 index 00000000..d74a71e6 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/acacia_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "minecraft:block/acacia_log", + "top": "minecraft:block/acacia_log", + "bottom": "minecraft:block/acacia_log", + "side": "minecraft:block/acacia_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/acacia_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/block/acacia_sieve.json new file mode 100644 index 00000000..4bb72708 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/acacia_sieve.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_sieve", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/birch_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/birch_barrel.json new file mode 100644 index 00000000..d12040c4 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/birch_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/birch_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/birch_crucible.json new file mode 100644 index 00000000..015f30ad --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/birch_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "minecraft:block/birch_log", + "top": "minecraft:block/birch_log", + "bottom": "minecraft:block/birch_log", + "side": "minecraft:block/birch_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/birch_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/block/birch_sieve.json new file mode 100644 index 00000000..a1ceb5ca --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/birch_sieve.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_sieve", + "textures": { + "texture": "minecraft:block/birch_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/crimson_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/crimson_barrel.json new file mode 100644 index 00000000..824de7d4 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/crimson_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/crimson_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/crimson_crucible.json new file mode 100644 index 00000000..d42d797a --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/crimson_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "minecraft:block/crimson_stem", + "top": "minecraft:block/crimson_stem", + "bottom": "minecraft:block/crimson_stem", + "side": "minecraft:block/crimson_stem" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/crimson_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/block/crimson_sieve.json new file mode 100644 index 00000000..abd56729 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/crimson_sieve.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_sieve", + "textures": { + "texture": "minecraft:block/crimson_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/crushed_end_stone.json b/src/generated/resources/assets/exnihiloreborn/models/block/crushed_end_stone.json new file mode 100644 index 00000000..ef47e847 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/crushed_end_stone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "exnihiloreborn:block/crushed_end_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/crushed_netherrack.json b/src/generated/resources/assets/exnihiloreborn/models/block/crushed_netherrack.json new file mode 100644 index 00000000..c5d5fcd0 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/crushed_netherrack.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "exnihiloreborn:block/crushed_netherrack" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_barrel.json new file mode 100644 index 00000000..722728b0 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_crucible.json new file mode 100644 index 00000000..662e5f26 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "minecraft:block/dark_oak_log", + "top": "minecraft:block/dark_oak_log", + "bottom": "minecraft:block/dark_oak_log", + "side": "minecraft:block/dark_oak_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_sieve.json new file mode 100644 index 00000000..38ff57b1 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/dark_oak_sieve.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_sieve", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/dust.json b/src/generated/resources/assets/exnihiloreborn/models/block/dust.json new file mode 100644 index 00000000..29a1e35a --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "exnihiloreborn:block/dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/jungle_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/jungle_barrel.json new file mode 100644 index 00000000..ebc9e9a3 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/jungle_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/jungle_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/jungle_crucible.json new file mode 100644 index 00000000..95214e20 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/jungle_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "minecraft:block/jungle_log", + "top": "minecraft:block/jungle_log", + "bottom": "minecraft:block/jungle_log", + "side": "minecraft:block/jungle_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/jungle_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/block/jungle_sieve.json new file mode 100644 index 00000000..25dafaea --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/jungle_sieve.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_sieve", + "textures": { + "texture": "minecraft:block/jungle_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/oak_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/oak_barrel.json new file mode 100644 index 00000000..5f76c07d --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/oak_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/oak_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/oak_crucible.json new file mode 100644 index 00000000..d54e99a2 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/oak_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "minecraft:block/oak_log", + "top": "minecraft:block/oak_log", + "bottom": "minecraft:block/oak_log", + "side": "minecraft:block/oak_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/oak_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/block/oak_sieve.json new file mode 100644 index 00000000..4b3a4859 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/oak_sieve.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_sieve", + "textures": { + "texture": "minecraft:block/oak_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/porcelain_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/porcelain_crucible.json new file mode 100644 index 00000000..8f392eac --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/porcelain_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "exnihiloreborn:block/porcelain_crucible", + "top": "exnihiloreborn:block/porcelain_crucible", + "bottom": "exnihiloreborn:block/porcelain_crucible", + "side": "exnihiloreborn:block/porcelain_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/spruce_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/spruce_barrel.json new file mode 100644 index 00000000..1d6fefff --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/spruce_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/spruce_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/spruce_crucible.json new file mode 100644 index 00000000..00d24cab --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/spruce_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "minecraft:block/spruce_log", + "top": "minecraft:block/spruce_log", + "bottom": "minecraft:block/spruce_log", + "side": "minecraft:block/spruce_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/spruce_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/block/spruce_sieve.json new file mode 100644 index 00000000..208ee8e8 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/spruce_sieve.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_sieve", + "textures": { + "texture": "minecraft:block/spruce_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/stone_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/stone_barrel.json new file mode 100644 index 00000000..ed6d7a99 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/stone_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/unfired_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/unfired_crucible.json new file mode 100644 index 00000000..c24fa9d8 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/unfired_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "exnihiloreborn:block/unfired_crucible", + "top": "exnihiloreborn:block/unfired_crucible", + "bottom": "exnihiloreborn:block/unfired_crucible", + "side": "exnihiloreborn:block/unfired_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/warped_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/block/warped_barrel.json new file mode 100644 index 00000000..a5ec089e --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/warped_barrel.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_barrel", + "textures": { + "barrel": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/warped_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/block/warped_crucible.json new file mode 100644 index 00000000..a3c79708 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/warped_crucible.json @@ -0,0 +1,9 @@ +{ + "parent": "exnihiloreborn:block/template_crucible", + "textures": { + "inside": "minecraft:block/warped_stem", + "top": "minecraft:block/warped_stem", + "bottom": "minecraft:block/warped_stem", + "side": "minecraft:block/warped_stem" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/block/warped_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/block/warped_sieve.json new file mode 100644 index 00000000..d448dbf1 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/block/warped_sieve.json @@ -0,0 +1,6 @@ +{ + "parent": "exnihiloreborn:block/template_sieve", + "textures": { + "texture": "minecraft:block/warped_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/acacia_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/acacia_barrel.json new file mode 100644 index 00000000..33ba8089 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/acacia_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/acacia_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/acacia_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/acacia_crucible.json new file mode 100644 index 00000000..083eda5e --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/acacia_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/acacia_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/acacia_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/item/acacia_sieve.json new file mode 100644 index 00000000..92ff89c0 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/acacia_sieve.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/acacia_sieve" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/birch_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/birch_barrel.json new file mode 100644 index 00000000..117623dc --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/birch_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/birch_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/birch_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/birch_crucible.json new file mode 100644 index 00000000..5614b198 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/birch_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/birch_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/birch_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/item/birch_sieve.json new file mode 100644 index 00000000..6798de10 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/birch_sieve.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/birch_sieve" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/bone_crook.json b/src/generated/resources/assets/exnihiloreborn/models/item/bone_crook.json new file mode 100644 index 00000000..32dae7d1 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/bone_crook.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "exnihiloreborn:item/bone_crook" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/cooked_silk_worm.json b/src/generated/resources/assets/exnihiloreborn/models/item/cooked_silk_worm.json new file mode 100644 index 00000000..cfc52eac --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/cooked_silk_worm.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "exnihiloreborn:item/cooked_silk_worm" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/crimson_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/crimson_barrel.json new file mode 100644 index 00000000..1c37ab2f --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/crimson_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/crimson_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/crimson_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/crimson_crucible.json new file mode 100644 index 00000000..adecdd24 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/crimson_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/crimson_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/crimson_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/item/crimson_sieve.json new file mode 100644 index 00000000..b441fe1f --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/crimson_sieve.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/crimson_sieve" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/crook.json b/src/generated/resources/assets/exnihiloreborn/models/item/crook.json new file mode 100644 index 00000000..4fe64879 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/crook.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "exnihiloreborn:item/crook" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/crushed_end_stone.json b/src/generated/resources/assets/exnihiloreborn/models/item/crushed_end_stone.json new file mode 100644 index 00000000..8ee6765d --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/crushed_end_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/crushed_end_stone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/crushed_netherrack.json b/src/generated/resources/assets/exnihiloreborn/models/item/crushed_netherrack.json new file mode 100644 index 00000000..6da0c2d9 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/crushed_netherrack.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/crushed_netherrack" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_barrel.json new file mode 100644 index 00000000..714b4d05 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/dark_oak_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_crucible.json new file mode 100644 index 00000000..2ae6683b --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/dark_oak_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_sieve.json new file mode 100644 index 00000000..afc0585f --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/dark_oak_sieve.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/dark_oak_sieve" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/diamond_hammer.json b/src/generated/resources/assets/exnihiloreborn/models/item/diamond_hammer.json new file mode 100644 index 00000000..23201085 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/diamond_hammer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "exnihiloreborn:item/diamond_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/dust.json b/src/generated/resources/assets/exnihiloreborn/models/item/dust.json new file mode 100644 index 00000000..125d085a --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/dust.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/dust" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/golden_hammer.json b/src/generated/resources/assets/exnihiloreborn/models/item/golden_hammer.json new file mode 100644 index 00000000..bb658a12 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/golden_hammer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "exnihiloreborn:item/golden_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/iron_hammer.json b/src/generated/resources/assets/exnihiloreborn/models/item/iron_hammer.json new file mode 100644 index 00000000..65473382 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/iron_hammer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "exnihiloreborn:item/iron_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/jungle_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/jungle_barrel.json new file mode 100644 index 00000000..f4bf6d97 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/jungle_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/jungle_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/jungle_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/jungle_crucible.json new file mode 100644 index 00000000..22329243 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/jungle_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/jungle_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/jungle_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/item/jungle_sieve.json new file mode 100644 index 00000000..49bcf324 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/jungle_sieve.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/jungle_sieve" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/oak_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/oak_barrel.json new file mode 100644 index 00000000..75dc951b --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/oak_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/oak_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/oak_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/oak_crucible.json new file mode 100644 index 00000000..087cd236 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/oak_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/oak_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/oak_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/item/oak_sieve.json new file mode 100644 index 00000000..1e775876 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/oak_sieve.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/oak_sieve" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/porcelain_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/porcelain_crucible.json new file mode 100644 index 00000000..b53015a9 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/porcelain_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/porcelain_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/silk_worm.json b/src/generated/resources/assets/exnihiloreborn/models/item/silk_worm.json new file mode 100644 index 00000000..379f7600 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/silk_worm.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "exnihiloreborn:item/silk_worm" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/spruce_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/spruce_barrel.json new file mode 100644 index 00000000..b28a554f --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/spruce_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/spruce_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/spruce_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/spruce_crucible.json new file mode 100644 index 00000000..06d0d87f --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/spruce_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/spruce_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/spruce_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/item/spruce_sieve.json new file mode 100644 index 00000000..623a99e2 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/spruce_sieve.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/spruce_sieve" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/stone_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/stone_barrel.json new file mode 100644 index 00000000..72594547 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/stone_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/stone_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/stone_hammer.json b/src/generated/resources/assets/exnihiloreborn/models/item/stone_hammer.json new file mode 100644 index 00000000..0cf0b549 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/stone_hammer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "exnihiloreborn:item/stone_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/unfired_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/unfired_crucible.json new file mode 100644 index 00000000..5550105d --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/unfired_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/unfired_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/warped_barrel.json b/src/generated/resources/assets/exnihiloreborn/models/item/warped_barrel.json new file mode 100644 index 00000000..16eb10b3 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/warped_barrel.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/warped_barrel" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/warped_crucible.json b/src/generated/resources/assets/exnihiloreborn/models/item/warped_crucible.json new file mode 100644 index 00000000..f07cee02 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/warped_crucible.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/warped_crucible" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/warped_sieve.json b/src/generated/resources/assets/exnihiloreborn/models/item/warped_sieve.json new file mode 100644 index 00000000..c8fb844b --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/warped_sieve.json @@ -0,0 +1,3 @@ +{ + "parent": "exnihiloreborn:block/warped_sieve" +} \ No newline at end of file diff --git a/src/generated/resources/assets/exnihiloreborn/models/item/wooden_hammer.json b/src/generated/resources/assets/exnihiloreborn/models/item/wooden_hammer.json new file mode 100644 index 00000000..8c8b1d18 --- /dev/null +++ b/src/generated/resources/assets/exnihiloreborn/models/item/wooden_hammer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "exnihiloreborn:item/wooden_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/acacia_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/acacia_barrel.json new file mode 100644 index 00000000..f22584f3 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/acacia_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:acacia_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:acacia_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/acacia_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/acacia_crucible.json new file mode 100644 index 00000000..c1f86d0b --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/acacia_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:acacia_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:acacia_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/birch_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/birch_barrel.json new file mode 100644 index 00000000..4592c89b --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/birch_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:birch_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:birch_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/birch_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/birch_crucible.json new file mode 100644 index 00000000..69ae1d7d --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/birch_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:birch_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:birch_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/bone_crook.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/bone_crook.json new file mode 100644 index 00000000..7d4de8d5 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/bone_crook.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:bone_crook" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:rods/wooden" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:bone_crook" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/compressed_crook.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/compressed_crook.json new file mode 100644 index 00000000..9b7f79a8 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/compressed_crook.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:compressed_crook" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:rods/wooden" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:compressed_crook" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/cooked_silk_worm.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/cooked_silk_worm.json new file mode 100644 index 00000000..2b244864 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/cooked_silk_worm.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:cooked_silk_worm" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "exnihiloreborn:silk_worm" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:cooked_silk_worm" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crimson_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crimson_barrel.json new file mode 100644 index 00000000..6f68a44a --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crimson_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:crimson_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:crimson_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crimson_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crimson_crucible.json new file mode 100644 index 00000000..ff70e658 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crimson_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:crimson_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:crimson_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crook.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crook.json new file mode 100644 index 00000000..fb086191 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/crook.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:crook" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:rods/wooden" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:crook" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/dark_oak_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/dark_oak_barrel.json new file mode 100644 index 00000000..f142529d --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/dark_oak_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:dark_oak_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:dark_oak_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/dark_oak_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/dark_oak_crucible.json new file mode 100644 index 00000000..0e53fd84 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/dark_oak_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:dark_oak_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:dark_oak_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/diamond_hammer.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/diamond_hammer.json new file mode 100644 index 00000000..4d4db0be --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/diamond_hammer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:diamond_hammer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:diamond_hammer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/golden_hammer.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/golden_hammer.json new file mode 100644 index 00000000..e89b363f --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/golden_hammer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:golden_hammer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:golden_hammer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/iron_hammer.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/iron_hammer.json new file mode 100644 index 00000000..57c302c2 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/iron_hammer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:iron_hammer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:iron_hammer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/jungle_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/jungle_barrel.json new file mode 100644 index 00000000..0396a525 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/jungle_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:jungle_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:jungle_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/jungle_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/jungle_crucible.json new file mode 100644 index 00000000..335d43e7 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/jungle_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:jungle_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:jungle_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/oak_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/oak_barrel.json new file mode 100644 index 00000000..4af69e81 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/oak_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:oak_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:oak_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/oak_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/oak_crucible.json new file mode 100644 index 00000000..88ae9d78 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/oak_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:oak_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:oak_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/porcelain_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/porcelain_crucible.json new file mode 100644 index 00000000..e957f7ff --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/porcelain_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:porcelain_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "exnihiloreborn:unfired_crucible" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:porcelain_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/spruce_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/spruce_barrel.json new file mode 100644 index 00000000..5af548e9 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/spruce_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:spruce_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:spruce_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/spruce_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/spruce_crucible.json new file mode 100644 index 00000000..30cf4a2f --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/spruce_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:spruce_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:spruce_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/stone_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/stone_barrel.json new file mode 100644 index 00000000..05db968e --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/stone_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:stone_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:stone_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/stone_hammer.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/stone_hammer.json new file mode 100644 index 00000000..df5f4f5b --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/stone_hammer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:stone_hammer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:stone_hammer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/unfired_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/unfired_crucible.json new file mode 100644 index 00000000..de5c95bd --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/unfired_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:unfired_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:unfired_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/warped_barrel.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/warped_barrel.json new file mode 100644 index 00000000..7ec52a3f --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/warped_barrel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:warped_barrel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:warped_barrel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/warped_crucible.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/warped_crucible.json new file mode 100644 index 00000000..b5102f51 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/warped_crucible.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:warped_crucible" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:warped_crucible" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/wooden_hammer.json b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/wooden_hammer.json new file mode 100644 index 00000000..4479285b --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/advancements/recipes/exnihiloreborn/wooden_hammer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "exnihiloreborn:wooden_hammer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:planks" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "exnihiloreborn:wooden_hammer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/acacia_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/acacia_barrel.json new file mode 100644 index 00000000..dca4ecc3 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/acacia_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:acacia_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/birch_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/birch_barrel.json new file mode 100644 index 00000000..fa0b437c --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/birch_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:birch_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_cobblestone.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_cobblestone.json new file mode 100644 index 00000000..7d0f98c4 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_cobblestone.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:compressed_cobblestone" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_dirt.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_dirt.json new file mode 100644 index 00000000..f3d4f51a --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_dirt.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:compressed_dirt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_dust.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_dust.json new file mode 100644 index 00000000..25144402 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_dust.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:compressed_dust" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_sand.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_sand.json new file mode 100644 index 00000000..c9003664 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/compressed_sand.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:compressed_sand" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/crimson_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/crimson_barrel.json new file mode 100644 index 00000000..e2ade3b6 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/crimson_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:crimson_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/dark_oak_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/dark_oak_barrel.json new file mode 100644 index 00000000..a3485390 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/dark_oak_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:dark_oak_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/dust.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/dust.json new file mode 100644 index 00000000..5acb19f6 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/dust.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:dust" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/infested_leaves.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/infested_leaves.json new file mode 100644 index 00000000..971c50da --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/infested_leaves.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "exnihiloreborn:infested_string" + } + ], + "name": "minecraft:string" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/jungle_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/jungle_barrel.json new file mode 100644 index 00000000..dfd9ef19 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/jungle_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:jungle_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/oak_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/oak_barrel.json new file mode 100644 index 00000000..72f41e62 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/oak_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:oak_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/spruce_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/spruce_barrel.json new file mode 100644 index 00000000..1add1852 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/spruce_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:spruce_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/stone_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/stone_barrel.json new file mode 100644 index 00000000..aefd5ac0 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/stone_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:stone_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/warped_barrel.json b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/warped_barrel.json new file mode 100644 index 00000000..c88c7d6a --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/loot_tables/blocks/warped_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "exnihiloreborn:warped_barrel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/acacia_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/acacia_barrel.json new file mode 100644 index 00000000..b64212d9 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/acacia_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:acacia_planks" + }, + "z": { + "item": "minecraft:acacia_slab" + } + }, + "result": { + "item": "exnihiloreborn:acacia_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/acacia_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/acacia_crucible.json new file mode 100644 index 00000000..ee9f9c3f --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/acacia_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "tag": "minecraft:acacia_logs" + }, + "z": { + "item": "minecraft:acacia_slab" + } + }, + "result": { + "item": "exnihiloreborn:acacia_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/apple.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/apple.json new file mode 100644 index 00000000..1f87f4c3 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/apple.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:apple" + }, + "volume": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/bread.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/bread.json new file mode 100644 index 00000000..e84a8606 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/bread.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:bread" + }, + "volume": 125 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/cookie.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/cookie.json new file mode 100644 index 00000000..3bf94145 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/cookie.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:cookie" + }, + "volume": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/kelp.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/kelp.json new file mode 100644 index 00000000..7cae207a --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/kelp.json @@ -0,0 +1,12 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": [ + { + "item": "minecraft:dried_kelp" + }, + { + "item": "minecraft:kelp" + } + ], + "volume": 40 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/leaves.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/leaves.json new file mode 100644 index 00000000..e4f0d013 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/leaves.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "tag": "minecraft:leaves" + }, + "volume": 125 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/melon.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/melon.json new file mode 100644 index 00000000..a2a09780 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/melon.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:melon" + }, + "volume": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/melon_slice.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/melon_slice.json new file mode 100644 index 00000000..0ab07cdf --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/melon_slice.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:melon_slice" + }, + "volume": 40 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/mushrooms.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/mushrooms.json new file mode 100644 index 00000000..92773aef --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/mushrooms.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "tag": "forge:mushrooms" + }, + "volume": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/nether_wart.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/nether_wart.json new file mode 100644 index 00000000..7341fc75 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/nether_wart.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:nether_wart" + }, + "volume": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/pumpkin.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/pumpkin.json new file mode 100644 index 00000000..2fd7775b --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/pumpkin.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:pumpkin" + }, + "volume": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/pumpkin_pie.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/pumpkin_pie.json new file mode 100644 index 00000000..52966b45 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/pumpkin_pie.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:pumpkin_pie" + }, + "volume": 150 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/saplings.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/saplings.json new file mode 100644 index 00000000..38230c44 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/saplings.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "tag": "minecraft:saplings" + }, + "volume": 125 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/seagrass.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/seagrass.json new file mode 100644 index 00000000..6fead6c0 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/seagrass.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:seagrass" + }, + "volume": 80 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/seeds.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/seeds.json new file mode 100644 index 00000000..e157565e --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/seeds.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "tag": "forge:seeds" + }, + "volume": 80 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/silk_worms.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/silk_worms.json new file mode 100644 index 00000000..913186d4 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/silk_worms.json @@ -0,0 +1,12 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": [ + { + "item": "exnihiloreborn:silk_worm" + }, + { + "item": "exnihiloreborn:cooked_silk_worm" + } + ], + "volume": 40 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/small_flowers.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/small_flowers.json new file mode 100644 index 00000000..3af1a1e3 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/small_flowers.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "tag": "minecraft:small_flowers" + }, + "volume": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/spider_eye.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/spider_eye.json new file mode 100644 index 00000000..abdd7515 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/spider_eye.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:spider_eye" + }, + "volume": 80 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/sweet_berries.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/sweet_berries.json new file mode 100644 index 00000000..31146da9 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/sweet_berries.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "item": "minecraft:sweet_berries" + }, + "volume": 80 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/tall_flowers.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/tall_flowers.json new file mode 100644 index 00000000..9c722715 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/tall_flowers.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "tag": "minecraft:tall_flowers" + }, + "volume": 150 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/wheat.json b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/wheat.json new file mode 100644 index 00000000..d201d0f1 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/barrel_compost/wheat.json @@ -0,0 +1,7 @@ +{ + "type": "exnihiloreborn:barrel_compost", + "ingredient": { + "tag": "forge:crops/wheat" + }, + "volume": 80 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/birch_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/birch_barrel.json new file mode 100644 index 00000000..723895ef --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/birch_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:birch_planks" + }, + "z": { + "item": "minecraft:birch_slab" + } + }, + "result": { + "item": "exnihiloreborn:birch_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/birch_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/birch_crucible.json new file mode 100644 index 00000000..c2882f37 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/birch_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "tag": "minecraft:birch_logs" + }, + "z": { + "item": "minecraft:birch_slab" + } + }, + "result": { + "item": "exnihiloreborn:birch_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/bone_crook.json b/src/generated/resources/data/exnihiloreborn/recipes/bone_crook.json new file mode 100644 index 00000000..edbaad12 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/bone_crook.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xx", + " x", + " x" + ], + "key": { + "x": { + "item": "minecraft:bone" + } + }, + "result": { + "item": "exnihiloreborn:bone_crook" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/compressed_crook.json b/src/generated/resources/data/exnihiloreborn/recipes/compressed_crook.json new file mode 100644 index 00000000..64ab09cc --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/compressed_crook.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xx", + " x", + " x" + ], + "key": { + "x": { + "item": "exnihiloreborn:crook" + } + }, + "result": { + "item": "exnihiloreborn:compressed_crook" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/cooked_silk_worm.json b/src/generated/resources/data/exnihiloreborn/recipes/cooked_silk_worm.json new file mode 100644 index 00000000..15e6bf41 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/cooked_silk_worm.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "exnihiloreborn:silk_worm" + }, + "result": "exnihiloreborn:cooked_silk_worm", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/crimson_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/crimson_barrel.json new file mode 100644 index 00000000..6074c09d --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/crimson_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:crimson_planks" + }, + "z": { + "item": "minecraft:crimson_slab" + } + }, + "result": { + "item": "exnihiloreborn:crimson_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/crimson_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/crimson_crucible.json new file mode 100644 index 00000000..e859b23b --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/crimson_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "tag": "minecraft:crimson_stems" + }, + "z": { + "item": "minecraft:crimson_slab" + } + }, + "result": { + "item": "exnihiloreborn:crimson_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/crook.json b/src/generated/resources/data/exnihiloreborn/recipes/crook.json new file mode 100644 index 00000000..270a7391 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/crook.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xx", + " x", + " x" + ], + "key": { + "x": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "exnihiloreborn:crook" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/dark_oak_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/dark_oak_barrel.json new file mode 100644 index 00000000..32113432 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/dark_oak_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:dark_oak_planks" + }, + "z": { + "item": "minecraft:dark_oak_slab" + } + }, + "result": { + "item": "exnihiloreborn:dark_oak_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/dark_oak_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/dark_oak_crucible.json new file mode 100644 index 00000000..82cd014d --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/dark_oak_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "tag": "minecraft:dark_oak_logs" + }, + "z": { + "item": "minecraft:dark_oak_slab" + } + }, + "result": { + "item": "exnihiloreborn:dark_oak_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/diamond_hammer.json b/src/generated/resources/data/exnihiloreborn/recipes/diamond_hammer.json new file mode 100644 index 00000000..ee88ee84 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/diamond_hammer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " x ", + "xv ", + " v" + ], + "key": { + "x": { + "tag": "forge:gems/diamond" + }, + "v": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "exnihiloreborn:diamond_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/golden_hammer.json b/src/generated/resources/data/exnihiloreborn/recipes/golden_hammer.json new file mode 100644 index 00000000..135b6d16 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/golden_hammer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " x ", + "xv ", + " v" + ], + "key": { + "x": { + "tag": "forge:ingots/gold" + }, + "v": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "exnihiloreborn:golden_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_red_sandstone.json b/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_red_sandstone.json new file mode 100644 index 00000000..3bfc3c3a --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_red_sandstone.json @@ -0,0 +1,26 @@ +{ + "type": "exnihiloreborn:hammer", + "ingredient": [ + { + "item": "minecraft:red_sandstone" + }, + { + "item": "minecraft:cut_red_sandstone" + }, + { + "item": "minecraft:chiseled_red_sandstone" + }, + { + "item": "minecraft:smooth_red_sandstone" + } + ], + "rewards": [ + { + "item": { + "id": "minecraft:red_sand", + "Count": 1 + }, + "chance": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_sandstone.json b/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_sandstone.json new file mode 100644 index 00000000..fa2a85ac --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_sandstone.json @@ -0,0 +1,26 @@ +{ + "type": "exnihiloreborn:hammer", + "ingredient": [ + { + "item": "minecraft:sandstone" + }, + { + "item": "minecraft:cut_sandstone" + }, + { + "item": "minecraft:chiseled_sandstone" + }, + { + "item": "minecraft:smooth_sandstone" + } + ], + "rewards": [ + { + "item": { + "id": "minecraft:sand", + "Count": 1 + }, + "chance": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_stone_bricks.json b/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_stone_bricks.json new file mode 100644 index 00000000..4b7ef5b8 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/hammer/crushing_stone_bricks.json @@ -0,0 +1,15 @@ +{ + "type": "exnihiloreborn:hammer", + "ingredient": { + "item": "minecraft:stone_bricks" + }, + "rewards": [ + { + "item": { + "id": "minecraft:cracked_stone_bricks", + "Count": 1 + }, + "chance": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/hammer/dust.json b/src/generated/resources/data/exnihiloreborn/recipes/hammer/dust.json new file mode 100644 index 00000000..1b5ea5ff --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/hammer/dust.json @@ -0,0 +1,15 @@ +{ + "type": "exnihiloreborn:hammer", + "ingredient": { + "item": "minecraft:sand" + }, + "rewards": [ + { + "item": { + "id": "exnihiloreborn:dust", + "Count": 1 + }, + "chance": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/hammer/gravel.json b/src/generated/resources/data/exnihiloreborn/recipes/hammer/gravel.json new file mode 100644 index 00000000..8e7a8c5d --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/hammer/gravel.json @@ -0,0 +1,15 @@ +{ + "type": "exnihiloreborn:hammer", + "ingredient": { + "item": "minecraft:cobblestone" + }, + "rewards": [ + { + "item": { + "id": "minecraft:gravel", + "Count": 1 + }, + "chance": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/hammer/sand.json b/src/generated/resources/data/exnihiloreborn/recipes/hammer/sand.json new file mode 100644 index 00000000..8260032c --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/hammer/sand.json @@ -0,0 +1,15 @@ +{ + "type": "exnihiloreborn:hammer", + "ingredient": { + "item": "minecraft:gravel" + }, + "rewards": [ + { + "item": { + "id": "minecraft:sand", + "Count": 1 + }, + "chance": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/hammer/stone_pebbles.json b/src/generated/resources/data/exnihiloreborn/recipes/hammer/stone_pebbles.json new file mode 100644 index 00000000..3fa61e93 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/hammer/stone_pebbles.json @@ -0,0 +1,55 @@ +{ + "type": "exnihiloreborn:hammer", + "ingredient": [ + { + "item": "minecraft:stone" + }, + { + "item": "minecraft:cracked_stone_bricks" + } + ], + "rewards": [ + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 1.0 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.75 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.75 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.5 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.25 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.05 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/iron_hammer.json b/src/generated/resources/data/exnihiloreborn/recipes/iron_hammer.json new file mode 100644 index 00000000..4cec5979 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/iron_hammer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " x ", + "xv ", + " v" + ], + "key": { + "x": { + "tag": "forge:ingots/iron" + }, + "v": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "exnihiloreborn:iron_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/jungle_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/jungle_barrel.json new file mode 100644 index 00000000..a67816f8 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/jungle_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:jungle_planks" + }, + "z": { + "item": "minecraft:jungle_slab" + } + }, + "result": { + "item": "exnihiloreborn:jungle_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/jungle_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/jungle_crucible.json new file mode 100644 index 00000000..0f05e0f5 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/jungle_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "tag": "minecraft:jungle_logs" + }, + "z": { + "item": "minecraft:jungle_slab" + } + }, + "result": { + "item": "exnihiloreborn:jungle_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/cobblestone.json b/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/cobblestone.json new file mode 100644 index 00000000..fb33c6f5 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/cobblestone.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:lava_crucible", + "ingredient": { + "item": "minecraft:cobblestone" + }, + "fluid": { + "FluidName": "minecraft:lava", + "Amount": 250 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/gravel.json b/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/gravel.json new file mode 100644 index 00000000..e73dbdfd --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/gravel.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:lava_crucible", + "ingredient": { + "item": "minecraft:gravel" + }, + "fluid": { + "FluidName": "minecraft:lava", + "Amount": 250 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/netherrack.json b/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/netherrack.json new file mode 100644 index 00000000..6eda43d1 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/netherrack.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:lava_crucible", + "ingredient": { + "item": "minecraft:netherrack" + }, + "fluid": { + "FluidName": "minecraft:lava", + "Amount": 1000 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/stone.json b/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/stone.json new file mode 100644 index 00000000..2ee01186 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/lava_crucible/stone.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:lava_crucible", + "ingredient": { + "item": "minecraft:stone" + }, + "fluid": { + "FluidName": "minecraft:lava", + "Amount": 250 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/oak_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/oak_barrel.json new file mode 100644 index 00000000..41633bcf --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/oak_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:oak_planks" + }, + "z": { + "item": "minecraft:oak_slab" + } + }, + "result": { + "item": "exnihiloreborn:oak_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/oak_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/oak_crucible.json new file mode 100644 index 00000000..ec0b249a --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/oak_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "tag": "minecraft:oak_logs" + }, + "z": { + "item": "minecraft:oak_slab" + } + }, + "result": { + "item": "exnihiloreborn:oak_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/porcelain_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/porcelain_crucible.json new file mode 100644 index 00000000..9bc8b870 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/porcelain_crucible.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "exnihiloreborn:unfired_crucible" + }, + "result": "exnihiloreborn:porcelain_crucible", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/sieve/beetroot_seeds.json b/src/generated/resources/data/exnihiloreborn/recipes/sieve/beetroot_seeds.json new file mode 100644 index 00000000..e084350e --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/sieve/beetroot_seeds.json @@ -0,0 +1,16 @@ +{ + "type": "exnihiloreborn:sieve", + "mesh": "exnihiloreborn:string_mesh", + "ingredient": { + "item": "minecraft:dirt" + }, + "rewards": [ + { + "item": { + "id": "minecraft:beetroot_seeds", + "Count": 1 + }, + "chance": 0.35 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/sieve/melon_seeds.json b/src/generated/resources/data/exnihiloreborn/recipes/sieve/melon_seeds.json new file mode 100644 index 00000000..98cd99c8 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/sieve/melon_seeds.json @@ -0,0 +1,16 @@ +{ + "type": "exnihiloreborn:sieve", + "mesh": "exnihiloreborn:string_mesh", + "ingredient": { + "item": "minecraft:dirt" + }, + "rewards": [ + { + "item": { + "id": "minecraft:melon_seeds", + "Count": 1 + }, + "chance": 0.35 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/sieve/pumpkin_seeds.json b/src/generated/resources/data/exnihiloreborn/recipes/sieve/pumpkin_seeds.json new file mode 100644 index 00000000..39c16300 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/sieve/pumpkin_seeds.json @@ -0,0 +1,16 @@ +{ + "type": "exnihiloreborn:sieve", + "mesh": "exnihiloreborn:string_mesh", + "ingredient": { + "item": "minecraft:dirt" + }, + "rewards": [ + { + "item": { + "id": "minecraft:pumpkin_seeds", + "Count": 1 + }, + "chance": 0.35 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/sieve/stone_pebble.json b/src/generated/resources/data/exnihiloreborn/recipes/sieve/stone_pebble.json new file mode 100644 index 00000000..030e901f --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/sieve/stone_pebble.json @@ -0,0 +1,58 @@ +{ + "type": "exnihiloreborn:sieve", + "mesh": "exnihiloreborn:string_mesh", + "ingredient": { + "item": "minecraft:dirt" + }, + "rewards": [ + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 1.0 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 1.0 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 1.0 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.5 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.5 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.1 + }, + { + "item": { + "id": "exnihiloreborn:stone_pebble", + "Count": 1 + }, + "chance": 0.1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/sieve/wheat_seeds.json b/src/generated/resources/data/exnihiloreborn/recipes/sieve/wheat_seeds.json new file mode 100644 index 00000000..ddfafeb4 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/sieve/wheat_seeds.json @@ -0,0 +1,16 @@ +{ + "type": "exnihiloreborn:sieve", + "mesh": "exnihiloreborn:string_mesh", + "ingredient": { + "item": "minecraft:dirt" + }, + "rewards": [ + { + "item": { + "id": "minecraft:wheat_seeds", + "Count": 1 + }, + "chance": 0.7 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/spruce_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/spruce_barrel.json new file mode 100644 index 00000000..4f5800f6 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/spruce_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:spruce_planks" + }, + "z": { + "item": "minecraft:spruce_slab" + } + }, + "result": { + "item": "exnihiloreborn:spruce_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/spruce_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/spruce_crucible.json new file mode 100644 index 00000000..99f01e21 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/spruce_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "tag": "minecraft:spruce_logs" + }, + "z": { + "item": "minecraft:spruce_slab" + } + }, + "result": { + "item": "exnihiloreborn:spruce_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/stone_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/stone_barrel.json new file mode 100644 index 00000000..0677fbc4 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/stone_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:stone" + }, + "z": { + "item": "minecraft:stone_slab" + } + }, + "result": { + "item": "exnihiloreborn:stone_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/stone_hammer.json b/src/generated/resources/data/exnihiloreborn/recipes/stone_hammer.json new file mode 100644 index 00000000..b5012d4e --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/stone_hammer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " x ", + "xv ", + " v" + ], + "key": { + "x": { + "tag": "minecraft:stone_crafting_materials" + }, + "v": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "exnihiloreborn:stone_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/unfired_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/unfired_crucible.json new file mode 100644 index 00000000..8f4b427d --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/unfired_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "exnihiloreborn:porcelain_clay" + }, + "z": { + "item": "exnihiloreborn:porcelain_clay" + } + }, + "result": { + "item": "exnihiloreborn:unfired_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/warped_barrel.json b/src/generated/resources/data/exnihiloreborn/recipes/warped_barrel.json new file mode 100644 index 00000000..d0acebb2 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/warped_barrel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "item": "minecraft:warped_planks" + }, + "z": { + "item": "minecraft:warped_slab" + } + }, + "result": { + "item": "exnihiloreborn:warped_barrel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/warped_crucible.json b/src/generated/resources/data/exnihiloreborn/recipes/warped_crucible.json new file mode 100644 index 00000000..56ba440e --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/warped_crucible.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "x x", + "x x", + "xzx" + ], + "key": { + "x": { + "tag": "minecraft:warped_stems" + }, + "z": { + "item": "minecraft:warped_slab" + } + }, + "result": { + "item": "exnihiloreborn:warped_crucible" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/apple.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/apple.json new file mode 100644 index 00000000..3d6bacae --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/apple.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "item": "minecraft:apple" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 100 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/cactus.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/cactus.json new file mode 100644 index 00000000..285dec90 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/cactus.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "item": "minecraft:cactus" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 250 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/leaves.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/leaves.json new file mode 100644 index 00000000..c24f9c05 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/leaves.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "tag": "minecraft:leaves" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 250 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/melon.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/melon.json new file mode 100644 index 00000000..47b28c20 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/melon.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "item": "minecraft:melon" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 250 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/melon_slice.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/melon_slice.json new file mode 100644 index 00000000..9972e0dd --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/melon_slice.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "item": "minecraft:melon_slice" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 50 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/pumpkin.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/pumpkin.json new file mode 100644 index 00000000..44cf2d2c --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/pumpkin.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "item": "minecraft:pumpkin" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 250 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/saplings.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/saplings.json new file mode 100644 index 00000000..cdfc90ee --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/saplings.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "tag": "minecraft:saplings" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 100 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/small_flowers.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/small_flowers.json new file mode 100644 index 00000000..231aeeae --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/small_flowers.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "tag": "minecraft:small_flowers" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 100 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/sweet_berries.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/sweet_berries.json new file mode 100644 index 00000000..c45a7f11 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/sweet_berries.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "item": "minecraft:sweet_berries" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 50 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/tall_flowers.json b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/tall_flowers.json new file mode 100644 index 00000000..fb829258 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/water_crucible/tall_flowers.json @@ -0,0 +1,10 @@ +{ + "type": "exnihiloreborn:water_crucible", + "ingredient": { + "tag": "minecraft:tall_flowers" + }, + "fluid": { + "FluidName": "minecraft:water", + "Amount": 200 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/recipes/wooden_hammer.json b/src/generated/resources/data/exnihiloreborn/recipes/wooden_hammer.json new file mode 100644 index 00000000..a31faef6 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/recipes/wooden_hammer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " x ", + "xv ", + " v" + ], + "key": { + "x": { + "tag": "minecraft:planks" + }, + "v": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "exnihiloreborn:wooden_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/tags/items/compressed_hammers.json b/src/generated/resources/data/exnihiloreborn/tags/items/compressed_hammers.json new file mode 100644 index 00000000..6b106795 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/tags/items/compressed_hammers.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "exnihiloreborn:compressed_wooden_hammer", + "exnihiloreborn:compressed_stone_hammer", + "exnihiloreborn:compressed_golden_hammer", + "exnihiloreborn:compressed_iron_hammer", + "exnihiloreborn:compressed_diamond_hammer", + "exnihiloreborn:compressed_netherite_hammer" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/tags/items/crooks.json b/src/generated/resources/data/exnihiloreborn/tags/items/crooks.json new file mode 100644 index 00000000..205d1e71 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/tags/items/crooks.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "exnihiloreborn:crook", + "exnihiloreborn:compressed_crook", + "exnihiloreborn:bone_crook" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/exnihiloreborn/tags/items/hammers.json b/src/generated/resources/data/exnihiloreborn/tags/items/hammers.json new file mode 100644 index 00000000..5e8ed510 --- /dev/null +++ b/src/generated/resources/data/exnihiloreborn/tags/items/hammers.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "exnihiloreborn:wooden_hammer", + "exnihiloreborn:stone_hammer", + "exnihiloreborn:golden_hammer", + "exnihiloreborn:iron_hammer", + "exnihiloreborn:diamond_hammer", + "exnihiloreborn:netherite_hammer" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/advancements/recipes/exnihiloreborn/cooked_silk_worm_from_smoking.json b/src/generated/resources/data/minecraft/advancements/recipes/exnihiloreborn/cooked_silk_worm_from_smoking.json new file mode 100644 index 00000000..5db42701 --- /dev/null +++ b/src/generated/resources/data/minecraft/advancements/recipes/exnihiloreborn/cooked_silk_worm_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "minecraft:cooked_silk_worm_from_smoking" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "exnihiloreborn:silk_worm" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:cooked_silk_worm_from_smoking" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/recipes/cooked_silk_worm_from_smoking.json b/src/generated/resources/data/minecraft/recipes/cooked_silk_worm_from_smoking.json new file mode 100644 index 00000000..638386bc --- /dev/null +++ b/src/generated/resources/data/minecraft/recipes/cooked_silk_worm_from_smoking.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "exnihiloreborn:silk_worm" + }, + "result": "exnihiloreborn:cooked_silk_worm", + "experience": 0.1, + "cookingtime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/acacia_logs.json b/src/generated/resources/data/minecraft/tags/blocks/acacia_logs.json new file mode 100644 index 00000000..2aa36aea --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/acacia_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:acacia_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_log", + "minecraft:stripped_acacia_wood" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/anvil.json b/src/generated/resources/data/minecraft/tags/blocks/anvil.json new file mode 100644 index 00000000..d69773e1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/anvil.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:anvil", + "minecraft:chipped_anvil", + "minecraft:damaged_anvil" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/bamboo_plantable_on.json b/src/generated/resources/data/minecraft/tags/blocks/bamboo_plantable_on.json new file mode 100644 index 00000000..53fe3036 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/bamboo_plantable_on.json @@ -0,0 +1,14 @@ +{ + "replace": false, + "values": [ + "#minecraft:sand", + "minecraft:bamboo", + "minecraft:bamboo_sapling", + "minecraft:gravel", + "minecraft:dirt", + "minecraft:grass_block", + "minecraft:podzol", + "minecraft:coarse_dirt", + "minecraft:mycelium" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/banners.json b/src/generated/resources/data/minecraft/tags/blocks/banners.json new file mode 100644 index 00000000..df4ebc27 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/banners.json @@ -0,0 +1,37 @@ +{ + "replace": false, + "values": [ + "minecraft:white_banner", + "minecraft:orange_banner", + "minecraft:magenta_banner", + "minecraft:light_blue_banner", + "minecraft:yellow_banner", + "minecraft:lime_banner", + "minecraft:pink_banner", + "minecraft:gray_banner", + "minecraft:light_gray_banner", + "minecraft:cyan_banner", + "minecraft:purple_banner", + "minecraft:blue_banner", + "minecraft:brown_banner", + "minecraft:green_banner", + "minecraft:red_banner", + "minecraft:black_banner", + "minecraft:white_wall_banner", + "minecraft:orange_wall_banner", + "minecraft:magenta_wall_banner", + "minecraft:light_blue_wall_banner", + "minecraft:yellow_wall_banner", + "minecraft:lime_wall_banner", + "minecraft:pink_wall_banner", + "minecraft:gray_wall_banner", + "minecraft:light_gray_wall_banner", + "minecraft:cyan_wall_banner", + "minecraft:purple_wall_banner", + "minecraft:blue_wall_banner", + "minecraft:brown_wall_banner", + "minecraft:green_wall_banner", + "minecraft:red_wall_banner", + "minecraft:black_wall_banner" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/base_stone_nether.json b/src/generated/resources/data/minecraft/tags/blocks/base_stone_nether.json new file mode 100644 index 00000000..1bbeddb6 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/base_stone_nether.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:netherrack", + "minecraft:basalt", + "minecraft:blackstone" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/base_stone_overworld.json b/src/generated/resources/data/minecraft/tags/blocks/base_stone_overworld.json new file mode 100644 index 00000000..955eb346 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/base_stone_overworld.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:stone", + "minecraft:granite", + "minecraft:diorite", + "minecraft:andesite" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json new file mode 100644 index 00000000..a368aa50 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:netherite_block", + "minecraft:emerald_block", + "minecraft:diamond_block", + "minecraft:gold_block", + "minecraft:iron_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/beds.json b/src/generated/resources/data/minecraft/tags/blocks/beds.json new file mode 100644 index 00000000..2e031f30 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/beds.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:red_bed", + "minecraft:black_bed", + "minecraft:blue_bed", + "minecraft:brown_bed", + "minecraft:cyan_bed", + "minecraft:gray_bed", + "minecraft:green_bed", + "minecraft:light_blue_bed", + "minecraft:light_gray_bed", + "minecraft:lime_bed", + "minecraft:magenta_bed", + "minecraft:orange_bed", + "minecraft:pink_bed", + "minecraft:purple_bed", + "minecraft:white_bed", + "minecraft:yellow_bed" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/bee_growables.json b/src/generated/resources/data/minecraft/tags/blocks/bee_growables.json new file mode 100644 index 00000000..9299ae2f --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/bee_growables.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:crops", + "minecraft:sweet_berry_bush" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/beehives.json b/src/generated/resources/data/minecraft/tags/blocks/beehives.json new file mode 100644 index 00000000..3101ab6e --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/beehives.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:bee_nest", + "minecraft:beehive" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/birch_logs.json b/src/generated/resources/data/minecraft/tags/blocks/birch_logs.json new file mode 100644 index 00000000..7be61059 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/birch_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:birch_log", + "minecraft:birch_wood", + "minecraft:stripped_birch_log", + "minecraft:stripped_birch_wood" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/buttons.json b/src/generated/resources/data/minecraft/tags/blocks/buttons.json new file mode 100644 index 00000000..37433a79 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/buttons.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_buttons", + "minecraft:stone_button", + "minecraft:polished_blackstone_button" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/campfires.json b/src/generated/resources/data/minecraft/tags/blocks/campfires.json new file mode 100644 index 00000000..f57ad3d8 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/campfires.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:campfire", + "minecraft:soul_campfire" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/carpets.json b/src/generated/resources/data/minecraft/tags/blocks/carpets.json new file mode 100644 index 00000000..9b28b1fd --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/carpets.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:white_carpet", + "minecraft:orange_carpet", + "minecraft:magenta_carpet", + "minecraft:light_blue_carpet", + "minecraft:yellow_carpet", + "minecraft:lime_carpet", + "minecraft:pink_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet", + "minecraft:cyan_carpet", + "minecraft:purple_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:green_carpet", + "minecraft:red_carpet", + "minecraft:black_carpet" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/climbable.json b/src/generated/resources/data/minecraft/tags/blocks/climbable.json new file mode 100644 index 00000000..76f8d613 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/climbable.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "minecraft:ladder", + "minecraft:vine", + "minecraft:scaffolding", + "minecraft:weeping_vines", + "minecraft:weeping_vines_plant", + "minecraft:twisting_vines", + "minecraft:twisting_vines_plant" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/coral_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/coral_blocks.json new file mode 100644 index 00000000..e2e55241 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/coral_blocks.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:tube_coral_block", + "minecraft:brain_coral_block", + "minecraft:bubble_coral_block", + "minecraft:fire_coral_block", + "minecraft:horn_coral_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/coral_plants.json b/src/generated/resources/data/minecraft/tags/blocks/coral_plants.json new file mode 100644 index 00000000..0aa32f52 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/coral_plants.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:tube_coral", + "minecraft:brain_coral", + "minecraft:bubble_coral", + "minecraft:fire_coral", + "minecraft:horn_coral" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/corals.json b/src/generated/resources/data/minecraft/tags/blocks/corals.json new file mode 100644 index 00000000..649b6ebc --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/corals.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "#minecraft:coral_plants", + "minecraft:tube_coral_fan", + "minecraft:brain_coral_fan", + "minecraft:bubble_coral_fan", + "minecraft:fire_coral_fan", + "minecraft:horn_coral_fan" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/crimson_stems.json b/src/generated/resources/data/minecraft/tags/blocks/crimson_stems.json new file mode 100644 index 00000000..333772e8 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/crimson_stems.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:crimson_stem", + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:stripped_crimson_hyphae" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/crops.json b/src/generated/resources/data/minecraft/tags/blocks/crops.json new file mode 100644 index 00000000..cf219608 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/crops.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:beetroots", + "minecraft:carrots", + "minecraft:potatoes", + "minecraft:wheat", + "minecraft:melon_stem", + "minecraft:pumpkin_stem" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/dark_oak_logs.json b/src/generated/resources/data/minecraft/tags/blocks/dark_oak_logs.json new file mode 100644 index 00000000..e1e3e165 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/dark_oak_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:dark_oak_log", + "minecraft:dark_oak_wood", + "minecraft:stripped_dark_oak_log", + "minecraft:stripped_dark_oak_wood" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/doors.json b/src/generated/resources/data/minecraft/tags/blocks/doors.json new file mode 100644 index 00000000..0f9fe980 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_doors", + "minecraft:iron_door" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/dragon_immune.json b/src/generated/resources/data/minecraft/tags/blocks/dragon_immune.json new file mode 100644 index 00000000..7f97f8ca --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/dragon_immune.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:barrier", + "minecraft:bedrock", + "minecraft:end_portal", + "minecraft:end_portal_frame", + "minecraft:end_gateway", + "minecraft:command_block", + "minecraft:repeating_command_block", + "minecraft:chain_command_block", + "minecraft:structure_block", + "minecraft:jigsaw", + "minecraft:moving_piston", + "minecraft:obsidian", + "minecraft:crying_obsidian", + "minecraft:end_stone", + "minecraft:iron_bars", + "minecraft:respawn_anchor" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/enderman_holdable.json b/src/generated/resources/data/minecraft/tags/blocks/enderman_holdable.json new file mode 100644 index 00000000..20bad1b1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/enderman_holdable.json @@ -0,0 +1,28 @@ +{ + "replace": false, + "values": [ + "#minecraft:small_flowers", + "minecraft:grass_block", + "minecraft:dirt", + "minecraft:coarse_dirt", + "minecraft:podzol", + "minecraft:sand", + "minecraft:red_sand", + "minecraft:gravel", + "minecraft:brown_mushroom", + "minecraft:red_mushroom", + "minecraft:tnt", + "minecraft:cactus", + "minecraft:clay", + "minecraft:pumpkin", + "minecraft:carved_pumpkin", + "minecraft:melon", + "minecraft:mycelium", + "minecraft:crimson_fungus", + "minecraft:crimson_nylium", + "minecraft:crimson_roots", + "minecraft:warped_fungus", + "minecraft:warped_nylium", + "minecraft:warped_roots" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json b/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json new file mode 100644 index 00000000..f94523b9 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:acacia_fence_gate", + "minecraft:birch_fence_gate", + "minecraft:dark_oak_fence_gate", + "minecraft:jungle_fence_gate", + "minecraft:oak_fence_gate", + "minecraft:spruce_fence_gate", + "minecraft:crimson_fence_gate", + "minecraft:warped_fence_gate" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/fences.json b/src/generated/resources/data/minecraft/tags/blocks/fences.json new file mode 100644 index 00000000..0ef08473 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/fences.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_fences", + "minecraft:nether_brick_fence" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/fire.json b/src/generated/resources/data/minecraft/tags/blocks/fire.json new file mode 100644 index 00000000..2ca0f384 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/fire.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:fire", + "minecraft:soul_fire" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/flower_pots.json b/src/generated/resources/data/minecraft/tags/blocks/flower_pots.json new file mode 100644 index 00000000..b105b95e --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/flower_pots.json @@ -0,0 +1,35 @@ +{ + "replace": false, + "values": [ + "minecraft:flower_pot", + "minecraft:potted_poppy", + "minecraft:potted_blue_orchid", + "minecraft:potted_allium", + "minecraft:potted_azure_bluet", + "minecraft:potted_red_tulip", + "minecraft:potted_orange_tulip", + "minecraft:potted_white_tulip", + "minecraft:potted_pink_tulip", + "minecraft:potted_oxeye_daisy", + "minecraft:potted_dandelion", + "minecraft:potted_oak_sapling", + "minecraft:potted_spruce_sapling", + "minecraft:potted_birch_sapling", + "minecraft:potted_jungle_sapling", + "minecraft:potted_acacia_sapling", + "minecraft:potted_dark_oak_sapling", + "minecraft:potted_red_mushroom", + "minecraft:potted_brown_mushroom", + "minecraft:potted_dead_bush", + "minecraft:potted_fern", + "minecraft:potted_cactus", + "minecraft:potted_cornflower", + "minecraft:potted_lily_of_the_valley", + "minecraft:potted_wither_rose", + "minecraft:potted_bamboo", + "minecraft:potted_crimson_fungus", + "minecraft:potted_warped_fungus", + "minecraft:potted_crimson_roots", + "minecraft:potted_warped_roots" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/flowers.json b/src/generated/resources/data/minecraft/tags/blocks/flowers.json new file mode 100644 index 00000000..9d1ba3a1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/flowers.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:small_flowers", + "#minecraft:tall_flowers" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/gold_ores.json b/src/generated/resources/data/minecraft/tags/blocks/gold_ores.json new file mode 100644 index 00000000..ee9b150a --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/gold_ores.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:gold_ore", + "minecraft:nether_gold_ore" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/guarded_by_piglins.json b/src/generated/resources/data/minecraft/tags/blocks/guarded_by_piglins.json new file mode 100644 index 00000000..e1d6ebb5 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/guarded_by_piglins.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:gold_block", + "minecraft:barrel", + "minecraft:chest", + "minecraft:ender_chest", + "minecraft:gilded_blackstone", + "minecraft:trapped_chest", + "#minecraft:shulker_boxes", + "#minecraft:gold_ores" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/hoglin_repellents.json b/src/generated/resources/data/minecraft/tags/blocks/hoglin_repellents.json new file mode 100644 index 00000000..2da3b912 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/hoglin_repellents.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:warped_fungus", + "minecraft:potted_warped_fungus", + "minecraft:nether_portal", + "minecraft:respawn_anchor" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/ice.json b/src/generated/resources/data/minecraft/tags/blocks/ice.json new file mode 100644 index 00000000..c5f45013 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/ice.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:ice", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:frosted_ice" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/impermeable.json b/src/generated/resources/data/minecraft/tags/blocks/impermeable.json new file mode 100644 index 00000000..9a23d087 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/impermeable.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "minecraft:glass", + "minecraft:white_stained_glass", + "minecraft:orange_stained_glass", + "minecraft:magenta_stained_glass", + "minecraft:light_blue_stained_glass", + "minecraft:yellow_stained_glass", + "minecraft:lime_stained_glass", + "minecraft:pink_stained_glass", + "minecraft:gray_stained_glass", + "minecraft:light_gray_stained_glass", + "minecraft:cyan_stained_glass", + "minecraft:purple_stained_glass", + "minecraft:blue_stained_glass", + "minecraft:brown_stained_glass", + "minecraft:green_stained_glass", + "minecraft:red_stained_glass", + "minecraft:black_stained_glass" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/infiniburn_end.json b/src/generated/resources/data/minecraft/tags/blocks/infiniburn_end.json new file mode 100644 index 00000000..9d8f1185 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/infiniburn_end.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:infiniburn_overworld", + "minecraft:bedrock" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/infiniburn_nether.json b/src/generated/resources/data/minecraft/tags/blocks/infiniburn_nether.json new file mode 100644 index 00000000..8ba042ec --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/infiniburn_nether.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#minecraft:infiniburn_overworld" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/infiniburn_overworld.json b/src/generated/resources/data/minecraft/tags/blocks/infiniburn_overworld.json new file mode 100644 index 00000000..432cf25d --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/infiniburn_overworld.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:netherrack", + "minecraft:magma_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/jungle_logs.json b/src/generated/resources/data/minecraft/tags/blocks/jungle_logs.json new file mode 100644 index 00000000..ec51d638 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/jungle_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:jungle_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_log", + "minecraft:stripped_jungle_wood" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/leaves.json b/src/generated/resources/data/minecraft/tags/blocks/leaves.json new file mode 100644 index 00000000..036ec387 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/leaves.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:jungle_leaves", + "minecraft:oak_leaves", + "minecraft:spruce_leaves", + "minecraft:dark_oak_leaves", + "minecraft:acacia_leaves", + "minecraft:birch_leaves" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/logs.json b/src/generated/resources/data/minecraft/tags/blocks/logs.json new file mode 100644 index 00000000..a3d931c1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/logs.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#minecraft:logs_that_burn", + "#minecraft:crimson_stems", + "#minecraft:warped_stems" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json b/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json new file mode 100644 index 00000000..e5a8d0fc --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "#minecraft:dark_oak_logs", + "#minecraft:oak_logs", + "#minecraft:acacia_logs", + "#minecraft:birch_logs", + "#minecraft:jungle_logs", + "#minecraft:spruce_logs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mushroom_grow_block.json b/src/generated/resources/data/minecraft/tags/blocks/mushroom_grow_block.json new file mode 100644 index 00000000..cf95ca25 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/mushroom_grow_block.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:mycelium", + "minecraft:podzol", + "minecraft:crimson_nylium", + "minecraft:warped_nylium" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/non_flammable_wood.json b/src/generated/resources/data/minecraft/tags/blocks/non_flammable_wood.json new file mode 100644 index 00000000..71270023 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/non_flammable_wood.json @@ -0,0 +1,35 @@ +{ + "replace": false, + "values": [ + "minecraft:warped_stem", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_warped_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:stripped_crimson_hyphae", + "minecraft:crimson_planks", + "minecraft:warped_planks", + "minecraft:crimson_slab", + "minecraft:warped_slab", + "minecraft:crimson_pressure_plate", + "minecraft:warped_pressure_plate", + "minecraft:crimson_fence", + "minecraft:warped_fence", + "minecraft:crimson_trapdoor", + "minecraft:warped_trapdoor", + "minecraft:crimson_fence_gate", + "minecraft:warped_fence_gate", + "minecraft:crimson_stairs", + "minecraft:warped_stairs", + "minecraft:crimson_button", + "minecraft:warped_button", + "minecraft:crimson_door", + "minecraft:warped_door", + "minecraft:crimson_sign", + "minecraft:warped_sign", + "minecraft:crimson_wall_sign", + "minecraft:warped_wall_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/nylium.json b/src/generated/resources/data/minecraft/tags/blocks/nylium.json new file mode 100644 index 00000000..7ce3a5a2 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/nylium.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:crimson_nylium", + "minecraft:warped_nylium" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/oak_logs.json b/src/generated/resources/data/minecraft/tags/blocks/oak_logs.json new file mode 100644 index 00000000..927086f6 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/oak_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_log", + "minecraft:oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_oak_wood" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/piglin_repellents.json b/src/generated/resources/data/minecraft/tags/blocks/piglin_repellents.json new file mode 100644 index 00000000..407bd501 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/piglin_repellents.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_fire", + "minecraft:soul_torch", + "minecraft:soul_lantern", + "minecraft:soul_wall_torch", + "minecraft:soul_campfire" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/planks.json b/src/generated/resources/data/minecraft/tags/blocks/planks.json new file mode 100644 index 00000000..34ef51ff --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/planks.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_planks", + "minecraft:spruce_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:acacia_planks", + "minecraft:dark_oak_planks", + "minecraft:crimson_planks", + "minecraft:warped_planks" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/portals.json b/src/generated/resources/data/minecraft/tags/blocks/portals.json new file mode 100644 index 00000000..e9f000ba --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/portals.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:nether_portal", + "minecraft:end_portal", + "minecraft:end_gateway" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json b/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json new file mode 100644 index 00000000..b73310c7 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:light_weighted_pressure_plate", + "minecraft:heavy_weighted_pressure_plate", + "#minecraft:wooden_pressure_plates", + "#minecraft:stone_pressure_plates" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/prevent_mob_spawning_inside.json b/src/generated/resources/data/minecraft/tags/blocks/prevent_mob_spawning_inside.json new file mode 100644 index 00000000..0f6530e7 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/prevent_mob_spawning_inside.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#minecraft:rails" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/rails.json b/src/generated/resources/data/minecraft/tags/blocks/rails.json new file mode 100644 index 00000000..036ac7fc --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/rails.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:rail", + "minecraft:powered_rail", + "minecraft:detector_rail", + "minecraft:activator_rail" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/sand.json b/src/generated/resources/data/minecraft/tags/blocks/sand.json new file mode 100644 index 00000000..fa7a9c4a --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/sand.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:sand", + "minecraft:red_sand" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/saplings.json b/src/generated/resources/data/minecraft/tags/blocks/saplings.json new file mode 100644 index 00000000..04fe81f9 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/saplings.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_sapling", + "minecraft:spruce_sapling", + "minecraft:birch_sapling", + "minecraft:jungle_sapling", + "minecraft:acacia_sapling", + "minecraft:dark_oak_sapling" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/shulker_boxes.json b/src/generated/resources/data/minecraft/tags/blocks/shulker_boxes.json new file mode 100644 index 00000000..7bcd4108 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/shulker_boxes.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/signs.json b/src/generated/resources/data/minecraft/tags/blocks/signs.json new file mode 100644 index 00000000..7677a609 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/signs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:standing_signs", + "#minecraft:wall_signs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/slabs.json b/src/generated/resources/data/minecraft/tags/blocks/slabs.json new file mode 100644 index 00000000..3dca479c --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/slabs.json @@ -0,0 +1,38 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_slabs", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:stone_brick_slab", + "minecraft:sandstone_slab", + "minecraft:purpur_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:brick_slab", + "minecraft:cobblestone_slab", + "minecraft:nether_brick_slab", + "minecraft:petrified_oak_slab", + "minecraft:prismarine_slab", + "minecraft:prismarine_brick_slab", + "minecraft:dark_prismarine_slab", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:cut_sandstone_slab", + "minecraft:cut_red_sandstone_slab", + "minecraft:blackstone_slab", + "minecraft:polished_blackstone_brick_slab", + "minecraft:polished_blackstone_slab" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/small_flowers.json b/src/generated/resources/data/minecraft/tags/blocks/small_flowers.json new file mode 100644 index 00000000..395128a6 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/small_flowers.json @@ -0,0 +1,18 @@ +{ + "replace": false, + "values": [ + "minecraft:dandelion", + "minecraft:poppy", + "minecraft:blue_orchid", + "minecraft:allium", + "minecraft:azure_bluet", + "minecraft:red_tulip", + "minecraft:orange_tulip", + "minecraft:white_tulip", + "minecraft:pink_tulip", + "minecraft:oxeye_daisy", + "minecraft:cornflower", + "minecraft:lily_of_the_valley", + "minecraft:wither_rose" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/soul_fire_base_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/soul_fire_base_blocks.json new file mode 100644 index 00000000..18c9c11a --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/soul_fire_base_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_sand", + "minecraft:soul_soil" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/soul_speed_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/soul_speed_blocks.json new file mode 100644 index 00000000..18c9c11a --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/soul_speed_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_sand", + "minecraft:soul_soil" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/spruce_logs.json b/src/generated/resources/data/minecraft/tags/blocks/spruce_logs.json new file mode 100644 index 00000000..87b5caf6 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/spruce_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:spruce_log", + "minecraft:spruce_wood", + "minecraft:stripped_spruce_log", + "minecraft:stripped_spruce_wood" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/stairs.json b/src/generated/resources/data/minecraft/tags/blocks/stairs.json new file mode 100644 index 00000000..1c435365 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/stairs.json @@ -0,0 +1,34 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_stairs", + "minecraft:cobblestone_stairs", + "minecraft:sandstone_stairs", + "minecraft:nether_brick_stairs", + "minecraft:stone_brick_stairs", + "minecraft:brick_stairs", + "minecraft:purpur_stairs", + "minecraft:quartz_stairs", + "minecraft:red_sandstone_stairs", + "minecraft:prismarine_brick_stairs", + "minecraft:prismarine_stairs", + "minecraft:dark_prismarine_stairs", + "minecraft:polished_granite_stairs", + "minecraft:smooth_red_sandstone_stairs", + "minecraft:mossy_stone_brick_stairs", + "minecraft:polished_diorite_stairs", + "minecraft:mossy_cobblestone_stairs", + "minecraft:end_stone_brick_stairs", + "minecraft:stone_stairs", + "minecraft:smooth_sandstone_stairs", + "minecraft:smooth_quartz_stairs", + "minecraft:granite_stairs", + "minecraft:andesite_stairs", + "minecraft:red_nether_brick_stairs", + "minecraft:polished_andesite_stairs", + "minecraft:diorite_stairs", + "minecraft:blackstone_stairs", + "minecraft:polished_blackstone_brick_stairs", + "minecraft:polished_blackstone_stairs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/standing_signs.json b/src/generated/resources/data/minecraft/tags/blocks/standing_signs.json new file mode 100644 index 00000000..6b6500e5 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/standing_signs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_sign", + "minecraft:spruce_sign", + "minecraft:birch_sign", + "minecraft:acacia_sign", + "minecraft:jungle_sign", + "minecraft:dark_oak_sign", + "minecraft:crimson_sign", + "minecraft:warped_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/stone_bricks.json b/src/generated/resources/data/minecraft/tags/blocks/stone_bricks.json new file mode 100644 index 00000000..7cec36c5 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/stone_bricks.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:stone_bricks", + "minecraft:mossy_stone_bricks", + "minecraft:cracked_stone_bricks", + "minecraft:chiseled_stone_bricks" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/stone_pressure_plates.json b/src/generated/resources/data/minecraft/tags/blocks/stone_pressure_plates.json new file mode 100644 index 00000000..c4e413b1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/stone_pressure_plates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:stone_pressure_plate", + "minecraft:polished_blackstone_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/strider_warm_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/strider_warm_blocks.json new file mode 100644 index 00000000..b009780b --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/strider_warm_blocks.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:lava" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/tall_flowers.json b/src/generated/resources/data/minecraft/tags/blocks/tall_flowers.json new file mode 100644 index 00000000..681427ff --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/tall_flowers.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:sunflower", + "minecraft:lilac", + "minecraft:peony", + "minecraft:rose_bush" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json b/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json new file mode 100644 index 00000000..d9625857 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:wooden_trapdoors", + "minecraft:iron_trapdoor" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/underwater_bonemeals.json b/src/generated/resources/data/minecraft/tags/blocks/underwater_bonemeals.json new file mode 100644 index 00000000..c1245146 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/underwater_bonemeals.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:seagrass", + "#minecraft:corals", + "#minecraft:wall_corals" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json b/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json new file mode 100644 index 00000000..6766bc43 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#minecraft:fence_gates" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/valid_spawn.json b/src/generated/resources/data/minecraft/tags/blocks/valid_spawn.json new file mode 100644 index 00000000..bcbc42e1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/valid_spawn.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:grass_block", + "minecraft:podzol" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wall_corals.json b/src/generated/resources/data/minecraft/tags/blocks/wall_corals.json new file mode 100644 index 00000000..db2c3304 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wall_corals.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:tube_coral_wall_fan", + "minecraft:brain_coral_wall_fan", + "minecraft:bubble_coral_wall_fan", + "minecraft:fire_coral_wall_fan", + "minecraft:horn_coral_wall_fan" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wall_post_override.json b/src/generated/resources/data/minecraft/tags/blocks/wall_post_override.json new file mode 100644 index 00000000..2fbdd646 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wall_post_override.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "minecraft:torch", + "minecraft:soul_torch", + "minecraft:redstone_torch", + "minecraft:tripwire", + "#minecraft:signs", + "#minecraft:banners", + "#minecraft:pressure_plates" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wall_signs.json b/src/generated/resources/data/minecraft/tags/blocks/wall_signs.json new file mode 100644 index 00000000..ca5cb43f --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wall_signs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_wall_sign", + "minecraft:spruce_wall_sign", + "minecraft:birch_wall_sign", + "minecraft:acacia_wall_sign", + "minecraft:jungle_wall_sign", + "minecraft:dark_oak_wall_sign", + "minecraft:crimson_wall_sign", + "minecraft:warped_wall_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/walls.json b/src/generated/resources/data/minecraft/tags/blocks/walls.json new file mode 100644 index 00000000..2f0ae281 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/walls.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "minecraft:cobblestone_wall", + "minecraft:mossy_cobblestone_wall", + "minecraft:brick_wall", + "minecraft:prismarine_wall", + "minecraft:red_sandstone_wall", + "minecraft:mossy_stone_brick_wall", + "minecraft:granite_wall", + "minecraft:stone_brick_wall", + "minecraft:nether_brick_wall", + "minecraft:andesite_wall", + "minecraft:red_nether_brick_wall", + "minecraft:sandstone_wall", + "minecraft:end_stone_brick_wall", + "minecraft:diorite_wall", + "minecraft:blackstone_wall", + "minecraft:polished_blackstone_brick_wall", + "minecraft:polished_blackstone_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/warped_stems.json b/src/generated/resources/data/minecraft/tags/blocks/warped_stems.json new file mode 100644 index 00000000..4174cdbf --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/warped_stems.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:warped_stem", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_warped_hyphae" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wart_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/wart_blocks.json new file mode 100644 index 00000000..97a811d6 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wart_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:nether_wart_block", + "minecraft:warped_wart_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wither_immune.json b/src/generated/resources/data/minecraft/tags/blocks/wither_immune.json new file mode 100644 index 00000000..995c6486 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wither_immune.json @@ -0,0 +1,16 @@ +{ + "replace": false, + "values": [ + "minecraft:barrier", + "minecraft:bedrock", + "minecraft:end_portal", + "minecraft:end_portal_frame", + "minecraft:end_gateway", + "minecraft:command_block", + "minecraft:repeating_command_block", + "minecraft:chain_command_block", + "minecraft:structure_block", + "minecraft:jigsaw", + "minecraft:moving_piston" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wither_summon_base_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/wither_summon_base_blocks.json new file mode 100644 index 00000000..18c9c11a --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wither_summon_base_blocks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:soul_sand", + "minecraft:soul_soil" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json new file mode 100644 index 00000000..27515915 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:acacia_button", + "minecraft:dark_oak_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json new file mode 100644 index 00000000..161af841 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:jungle_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:warped_door" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json new file mode 100644 index 00000000..e853ce55 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_fence", + "minecraft:acacia_fence", + "minecraft:dark_oak_fence", + "minecraft:spruce_fence", + "minecraft:birch_fence", + "minecraft:jungle_fence", + "minecraft:crimson_fence", + "minecraft:warped_fence" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json new file mode 100644 index 00000000..c80cf5c8 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_pressure_plate", + "minecraft:spruce_pressure_plate", + "minecraft:birch_pressure_plate", + "minecraft:jungle_pressure_plate", + "minecraft:acacia_pressure_plate", + "minecraft:dark_oak_pressure_plate", + "minecraft:crimson_pressure_plate", + "minecraft:warped_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json new file mode 100644 index 00000000..b3d1b0b5 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_slab", + "minecraft:spruce_slab", + "minecraft:birch_slab", + "minecraft:jungle_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab", + "minecraft:warped_slab" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json new file mode 100644 index 00000000..ff30545e --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:oak_stairs", + "minecraft:spruce_stairs", + "minecraft:birch_stairs", + "minecraft:jungle_stairs", + "minecraft:acacia_stairs", + "minecraft:dark_oak_stairs", + "minecraft:crimson_stairs", + "minecraft:warped_stairs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json new file mode 100644 index 00000000..7368d84c --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "minecraft:acacia_trapdoor", + "minecraft:birch_trapdoor", + "minecraft:dark_oak_trapdoor", + "minecraft:jungle_trapdoor", + "minecraft:oak_trapdoor", + "minecraft:spruce_trapdoor", + "minecraft:crimson_trapdoor", + "minecraft:warped_trapdoor" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wool.json b/src/generated/resources/data/minecraft/tags/blocks/wool.json new file mode 100644 index 00000000..c39732fc --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wool.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:white_wool", + "minecraft:orange_wool", + "minecraft:magenta_wool", + "minecraft:light_blue_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:cyan_wool", + "minecraft:purple_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:green_wool", + "minecraft:red_wool", + "minecraft:black_wool" + ] +} \ No newline at end of file diff --git a/src/main/java/thedarkcolour/exnihiloreborn/ExNihiloReborn.java b/src/main/java/thedarkcolour/exnihiloreborn/ExNihiloReborn.java new file mode 100644 index 00000000..81bfaeb6 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/ExNihiloReborn.java @@ -0,0 +1,67 @@ +package thedarkcolour.exnihiloreborn; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.AddReloadListenerEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.InterModComms; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import thedarkcolour.exnihiloreborn.blockentity.LavaCrucibleBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.WaterCrucibleBlockEntity; +import thedarkcolour.exnihiloreborn.client.ClientHandler; +import thedarkcolour.exnihiloreborn.compat.top.TopCompatExNihiloReborn; +import thedarkcolour.exnihiloreborn.registry.EBlockEntities; +import thedarkcolour.exnihiloreborn.registry.EBlocks; +import thedarkcolour.exnihiloreborn.registry.EFluids; +import thedarkcolour.exnihiloreborn.registry.EItems; +import thedarkcolour.exnihiloreborn.registry.ELootFunctions; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +import java.util.concurrent.CompletableFuture; + +@Mod(ExNihiloReborn.ID) +public class ExNihiloReborn { + public static final String ID = "exnihiloreborn"; + + public ExNihiloReborn() { + final IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + final IEventBus fmlBus = MinecraftForge.EVENT_BUS; + + // Mod init + ELootFunctions.init(); + ERecipeTypes.init(); + modBus.addListener(this::interModEnqueue); + + // Client init + DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> ClientHandler::register); + + // Registry Classes + EBlockEntities.BLOCK_ENTITIES.register(modBus); + EBlocks.BLOCKS.register(modBus); + EFluids.FLUIDS.register(modBus); + EItems.ITEMS.register(modBus); + ERecipeSerializers.RECIPE_SERIALIZERS.register(modBus); + + // Game Events + fmlBus.addListener(this::serverStart); + } + + // Send messages to other mods + public void interModEnqueue(InterModEnqueueEvent event) { + InterModComms.sendTo("theoneprobe", "getTheOneProbe", TopCompatExNihiloReborn::new); + } + + public void serverStart(AddReloadListenerEvent event) { + event.addListener((prepBarrier, resourceManager, prepProfiler, reloadProfiler, backgroundExecutor, gameExecutor) -> { + return CompletableFuture.allOf().thenCompose(prepBarrier::wait).thenRunAsync(() -> { + + LavaCrucibleBlockEntity.RECIPES_CACHE.invalidateAll(); + WaterCrucibleBlockEntity.RECIPES_CACHE.invalidateAll(); + }, gameExecutor); + }); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/AbstractCrucibleBlock.java b/src/main/java/thedarkcolour/exnihiloreborn/block/AbstractCrucibleBlock.java new file mode 100644 index 00000000..8e14b821 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/AbstractCrucibleBlock.java @@ -0,0 +1,33 @@ +package thedarkcolour.exnihiloreborn.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import thedarkcolour.exnihiloreborn.blockentity.AbstractCrucibleBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.EBlockEntity; + +public abstract class AbstractCrucibleBlock extends EBlock { + public AbstractCrucibleBlock(Properties properties) { + super(properties); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return UnfiredCrucibleBlock.SHAPE; + } + + @Override + public int getLightEmission(BlockState state, BlockGetter level, BlockPos pos) { + if (level.getBlockEntity(pos) instanceof AbstractCrucibleBlockEntity crucible) { + return crucible.getTank().getFluid().getFluid().getFluidType().getLightLevel(); + } + return 0; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/BarrelBlock.java b/src/main/java/thedarkcolour/exnihiloreborn/block/BarrelBlock.java new file mode 100644 index 00000000..4656a05c --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/BarrelBlock.java @@ -0,0 +1,49 @@ +package thedarkcolour.exnihiloreborn.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.BooleanOp; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import thedarkcolour.exnihiloreborn.blockentity.BarrelBlockEntity; + +public class BarrelBlock extends Block implements EntityBlock { + public static final VoxelShape SHAPE = Shapes.join( + box(1, 0, 1, 15, 16, 15), + box(2, 1, 2, 14, 16, 14), + BooleanOp.ONLY_FIRST + ); + + public BarrelBlock(Properties properties) { + super(properties); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new BarrelBlockEntity(pos, state); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult result) { + if (level.getBlockEntity(pos) instanceof BarrelBlockEntity barrel) { + return barrel.use(level, pos, player, hand); + } + + return InteractionResult.PASS; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/EBlock.java b/src/main/java/thedarkcolour/exnihiloreborn/block/EBlock.java new file mode 100644 index 00000000..c4fc4c44 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/EBlock.java @@ -0,0 +1,41 @@ +package thedarkcolour.exnihiloreborn.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import thedarkcolour.exnihiloreborn.blockentity.EBlockEntity; + +import java.util.function.Supplier; + +public abstract class EBlock extends Block implements EntityBlock { + private final Supplier> blockEntityType; + + public EBlock(Properties properties, Supplier> blockEntityType) { + super(properties); + this.blockEntityType = blockEntityType; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return blockEntityType.get().create(pos, state); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + var blockEntity = level.getBlockEntity(pos); + + if (blockEntity instanceof EBlockEntity entity) { + return entity.use(level, player, hand); + } + + return InteractionResult.PASS; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/InfestedLeavesBlock.java b/src/main/java/thedarkcolour/exnihiloreborn/block/InfestedLeavesBlock.java new file mode 100644 index 00000000..f7ad97f1 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/InfestedLeavesBlock.java @@ -0,0 +1,55 @@ +package thedarkcolour.exnihiloreborn.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.phys.HitResult; +import org.jetbrains.annotations.Nullable; +import thedarkcolour.exnihiloreborn.blockentity.InfestedLeavesBlockEntity; + +public class InfestedLeavesBlock extends LeavesBlock implements EntityBlock { + public static final BooleanProperty FULLY_INFESTED = BooleanProperty.create("fully_infested"); + + public InfestedLeavesBlock(Properties properties) { + super(properties); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(FULLY_INFESTED); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new InfestedLeavesBlockEntity(pos, state); + } + + @Override + public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGetter level, BlockPos pos, Player player) { + if (level.getBlockEntity(pos) instanceof InfestedLeavesBlockEntity leaves) { + return leaves.getMimic().getCloneItemStack(target, level, pos, player); + } + return ItemStack.EMPTY; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (decaying(state)) { + // doesn't drop unless crook + //dropResources(state, level, pos); + level.removeBlock(pos, false); + } + } +} \ No newline at end of file diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/LavaCrucibleBlock.java b/src/main/java/thedarkcolour/exnihiloreborn/block/LavaCrucibleBlock.java new file mode 100644 index 00000000..f0b34a26 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/LavaCrucibleBlock.java @@ -0,0 +1,7 @@ +package thedarkcolour.exnihiloreborn.block; + +public class LavaCrucibleBlock extends AbstractCrucibleBlock { + public LavaCrucibleBlock(Properties properties) { + super(properties); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/SieveBlock.java b/src/main/java/thedarkcolour/exnihiloreborn/block/SieveBlock.java new file mode 100644 index 00000000..7cf40287 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/SieveBlock.java @@ -0,0 +1,28 @@ +package thedarkcolour.exnihiloreborn.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import thedarkcolour.exnihiloreborn.blockentity.EBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.SieveBlockEntity; +import thedarkcolour.exnihiloreborn.registry.EBlockEntities; + +public class SieveBlock extends EBlock { + public SieveBlock(Properties properties) { + super(properties, EBlockEntities.SIEVE); + } + + // todo + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { + return super.getShape(pState, pLevel, pPos, pContext); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new SieveBlockEntity(pos, state); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/UnfiredCrucibleBlock.java b/src/main/java/thedarkcolour/exnihiloreborn/block/UnfiredCrucibleBlock.java new file mode 100644 index 00000000..7a112da8 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/UnfiredCrucibleBlock.java @@ -0,0 +1,24 @@ +package thedarkcolour.exnihiloreborn.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.BooleanOp; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class UnfiredCrucibleBlock extends Block { + // From CauldronBlock + public static final VoxelShape SHAPE = Shapes.join(Shapes.block(), Shapes.or(box(0.0D, 0.0D, 4.0D, 16.0D, 3.0D, 12.0D), box(4.0D, 0.0D, 0.0D, 12.0D, 3.0D, 16.0D), box(2.0D, 0.0D, 2.0D, 14.0D, 3.0D, 14.0D), box(2.0D, 4.0D, 2.0D, 14.0D, 16.0D, 14.0D)), BooleanOp.ONLY_FIRST); + + public UnfiredCrucibleBlock(Properties properties) { + super(properties); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/WaterCrucibleBlock.java b/src/main/java/thedarkcolour/exnihiloreborn/block/WaterCrucibleBlock.java new file mode 100644 index 00000000..033f77c1 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/WaterCrucibleBlock.java @@ -0,0 +1,18 @@ +package thedarkcolour.exnihiloreborn.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; +import thedarkcolour.exnihiloreborn.blockentity.WaterCrucibleBlockEntity; + +public class WaterCrucibleBlock extends AbstractCrucibleBlock { + public WaterCrucibleBlock(Properties properties) { + super(properties); + } + + @Override + public @NotNull BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new WaterCrucibleBlockEntity(pos, state); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/block/package-info.java b/src/main/java/thedarkcolour/exnihiloreborn/block/package-info.java new file mode 100644 index 00000000..f6fba231 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/block/package-info.java @@ -0,0 +1,3 @@ +@net.minecraft.MethodsReturnNonnullByDefault +@javax.annotation.ParametersAreNonnullByDefault +package thedarkcolour.exnihiloreborn.block; diff --git a/src/main/java/thedarkcolour/exnihiloreborn/blockentity/AbstractCrucibleBlockEntity.java b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/AbstractCrucibleBlockEntity.java new file mode 100644 index 00000000..62dbecb2 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/AbstractCrucibleBlockEntity.java @@ -0,0 +1,242 @@ +package thedarkcolour.exnihiloreborn.blockentity; + +import com.google.common.cache.Cache; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.registries.ForgeRegistries; +import thedarkcolour.exnihiloreborn.recipe.crucible.CrucibleRecipe; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.function.Consumer; + +public abstract class AbstractCrucibleBlockEntity extends EBlockEntity { + public static final int MAX_SOLIDS = 1_000; + + private final AbstractCrucibleBlockEntity.ItemHandler item = new AbstractCrucibleBlockEntity.ItemHandler(); + private final AbstractCrucibleBlockEntity.FluidHandler tank = new AbstractCrucibleBlockEntity.FluidHandler(); + + private Block lastMelted; + private Fluid fluid; + private short solids; + + public AbstractCrucibleBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + // Capabilities + private final LazyOptional itemHandler = LazyOptional.of(() -> item); + private final LazyOptional fluidHandler = LazyOptional.of(() -> tank); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + if (cap == ForgeCapabilities.FLUID_HANDLER) { + return fluidHandler.cast(); + } else if (cap == ForgeCapabilities.ITEM_HANDLER) { + return itemHandler.cast(); + } + + + + return super.getCapability(cap, side); + } + + // NBT + @Override + public void saveAdditional(CompoundTag nbt) { + super.saveAdditional(nbt); + + nbt.put("Tank", tank.writeToNBT(new CompoundTag())); + nbt.putString("LastMelted", ForgeRegistries.BLOCKS.getKey(lastMelted).toString()); + nbt.putString("Fluid", ForgeRegistries.FLUIDS.getKey(fluid).toString()); + nbt.putShort("Solids", solids); + } + + @Override + public void load(CompoundTag nbt) { + super.load(nbt); + + tank.readFromNBT(nbt.getCompound("Tank")); + lastMelted = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(nbt.getString("LastMelted"))); + fluid = ForgeRegistries.FLUIDS.getValue(new ResourceLocation(nbt.getString("Fluid"))); + solids = nbt.getShort("Solids"); + + } + + public InteractionResult use(Level level, Player player, InteractionHand hand) { + var playerItem = player.getItemInHand(hand); + + if (playerItem.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM).isPresent()) { + return FluidUtil.interactWithFluidHandler(player, hand, tank) ? InteractionResult.sidedSuccess(level.isClientSide) : InteractionResult.PASS; + } + + if (!level.isClientSide) { + tryMelt(playerItem, stack -> stack.shrink(1)); + } + + return InteractionResult.sidedSuccess(level.isClientSide); + } + + public CrucibleRecipe getRecipe(ItemStack item) { + var pair = new CacheKey(item.getItem(), item.getTag()); + var recipe = getRecipeCache().getIfPresent(pair); + + if (recipe != null) { + return recipe; + } else { + CrucibleRecipe newRecipe = RecipeUtil.getRecipe(level.getServer(), getRecipeType(), item); + + if (newRecipe != null) { + getRecipeCache().put(pair, newRecipe); // You can't put null values in a cache... + } + + return newRecipe; + } + } + + /** + * Tries to melt the specified item into the crucible. + * @param item Item to melt + * @param shrinkAction What to do when item is melted + */ + private void tryMelt(ItemStack item, Consumer shrinkAction) { + CrucibleRecipe recipe = getRecipe(item); + + if (recipe != null) { + FluidStack result = recipe.getResult(); + FluidStack contained = tank.getFluid(); + + if (((result.isFluidEqual(contained) || contained.isEmpty()) && result.getAmount() + solids <= MAX_SOLIDS)) { + shrinkAction.accept(item); + solids += result.getAmount(); + + if (contained.isEmpty()) { + fluid = result.getFluid(); + } + + // Hopefully invoking the state method doesn't screw with mods that depend on the block existing in the world + if (item.getItem() instanceof BlockItem && !(((BlockItem) item.getItem()).getBlock().defaultBlockState().getCollisionShape(level, getBlockPos()).isEmpty())) { + lastMelted = ((BlockItem) item.getItem()).getBlock(); + } else { + // If we already have something else inside just use that instead of switching to default + if (lastMelted == null) { + lastMelted = getDefaultMeltBlock(); + } + } + + markUpdated(); + } + } + } + + public int getMelt() { + return 1; + } + + public int getSolids() { + return solids; + } + + public FluidTank getTank() { + return tank; + } + + protected abstract RecipeType getRecipeType(); + + protected abstract Block getDefaultMeltBlock(); + + protected abstract Cache getRecipeCache(); + + public Block getLastMelted() { + return lastMelted; + } + + public record CacheKey(Item item, CompoundTag tag) {} + + private class FluidHandler extends FluidTank { + public FluidHandler() { + super(4_000); + } + + @Override + public boolean isFluidValid(FluidStack stack) { + return false; + } + } + + private class ItemHandler extends ItemStackHandler { + @Override + protected void onContentsChanged(int slot) { + tryMelt(getItem(), item -> setStackInSlot(0, ItemStack.EMPTY)); + } + + @Override + protected int getStackLimit(int slot, @Nonnull ItemStack stack) { + return 1; + } + + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) { + return getRecipe(stack) != null; + } + + public ItemStack getItem() { + return stacks.get(0); + } + } + + public static class Ticker implements BlockEntityTicker { + @Override + public void tick(Level level, BlockPos pos, BlockState state, AbstractCrucibleBlockEntity crucible) { + // Update twice per tick + if ((level.getGameTime() % 10L) == 0L) { + if (!level.isClientSide) { + int delta = Math.min(crucible.solids, crucible.getMelt()); + + // Skip if no heat + if (delta <= 0) return; + + if (crucible.tank.getSpace() >= delta) { + // Remove solids + crucible.solids -= delta; + + // Add lava + if (crucible.tank.isEmpty()) { + crucible.tank.setFluid(new FluidStack(crucible.fluid, delta)); + } else { + crucible.tank.getFluid().grow(delta); + } + + // Sync to client + crucible.markUpdated(); + } + } + } + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/blockentity/BarrelBlockEntity.java b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/BarrelBlockEntity.java new file mode 100644 index 00000000..56c7b31c --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/BarrelBlockEntity.java @@ -0,0 +1,351 @@ +package thedarkcolour.exnihiloreborn.blockentity; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Fluids; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; +import thedarkcolour.exnihiloreborn.registry.EBlockEntities; +import thedarkcolour.exnihiloreborn.registry.EFluids; +import thedarkcolour.exnihiloreborn.registry.EItems; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +// todo test which refresh calls can be removed to avoid network spam +public class BarrelBlockEntity extends EBlockEntity { + private static final float PROGRESS_STEP = 1.0f / 300.0f; + + private final BarrelBlockEntity.ItemHandler item = new BarrelBlockEntity.ItemHandler(); + private final BarrelBlockEntity.FluidHandler tank = new BarrelBlockEntity.FluidHandler(); + public float progress; + public short compost; + + public BarrelBlockEntity(BlockPos pos, BlockState state) { + super(EBlockEntities.BARREL.get(), pos, state); + } + + private final LazyOptional itemHandler = LazyOptional.of(() -> item); + private final LazyOptional fluidHandler = LazyOptional.of(() -> tank); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + if (cap == ForgeCapabilities.FLUID_HANDLER) { + return fluidHandler.cast(); + } else if (cap == ForgeCapabilities.ITEM_HANDLER) { + return itemHandler.cast(); + } + + return super.getCapability(cap, side); + } + + @Override + public void saveAdditional(CompoundTag nbt) { + super.saveAdditional(nbt); + + nbt.put("item", item.serializeNBT()); + nbt.put("tank", tank.writeToNBT(new CompoundTag())); + nbt.putShort("compost", compost); + nbt.putFloat("progress", progress); + } + + @Override + public void load(CompoundTag nbt) { + super.load(nbt); + + item.deserializeNBT(nbt.getCompound("item")); + tank.readFromNBT(nbt.getCompound("tank")); + compost = nbt.getShort("compost"); + progress = nbt.getFloat("progress"); + } + + public boolean isBrewing() { + return tank.getFluidAmount() == 1000 && progress != 0.0f && !isBurning(); + } + + public boolean isBurning() { + return hasHotFluid() && progress != 0.0f; + } + + public boolean isComposting() { + return compost == 1000; + } + + public boolean hasContents() { + return compost > 0 || !item.getStackInSlot(0).isEmpty(); + } + + public boolean hasFullWater() { + return tank.getFluidAmount() == 1000 && tank.getFluid().getFluid() == Fluids.WATER; + } + + // Burning temp of wood according to google is 300 C or ~575 kelvin + // Molten Constantan from Thermal Expansion is only 650 kelvin, but this should be fine + public boolean hasHotFluid() { + return tank.getFluid().getFluid().getFluidType().getTemperature() > 575; + } + + @Override + public void tick() { + if (!level.isClientSide) { + // Turn compost to dirt + if (isComposting()) { + progress += PROGRESS_STEP; + markUpdated(); + + if (progress >= 1.0f) { + progress = 0.0f; + compost = 0; + setItem(new ItemStack(Items.DIRT)); + } + } else if (hasFullWater()) { + var pos = getBlockPos(); + var rand = level.random; + var mycelium = 0f; + + for (BlockPos cursor : BlockPos.betweenClosed(pos.getX() - 1, pos.getY() - 1, pos.getZ() - 1, pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + // todo make this not hardcoded + if (level.getBlockState(cursor).getBlock() == Blocks.MYCELIUM) { + mycelium += 0.15f; + + if (rand.nextInt(1500) == 0) { + BlockPos above = cursor.above(); + + if (level.getBlockState(above).isAir()) { + if (rand.nextBoolean()) { + level.setBlockAndUpdate(above, Blocks.RED_MUSHROOM.defaultBlockState()); + } else { + level.setBlockAndUpdate(above, Blocks.BROWN_MUSHROOM.defaultBlockState()); + } + } + } + } + } + + if (progress != (progress += mycelium * PROGRESS_STEP)) { + markUpdated(); + } + + if (progress >= 1.0f) { + // Reset progress + progress = 0.0f; + + tank.setFluid(new FluidStack(EFluids.WITCH_WATER_STILL.get(), tank.getFluidAmount())); + } + + } else if (hasHotFluid()) { + if (getBlockState().ignitedByLava()) { + if ((progress += PROGRESS_STEP) >= 1.0f) { + if (tank.getFluidAmount() == 1000) { + var fluid = tank.getFluid().getFluid(); + level.setBlockAndUpdate(getBlockPos(), fluid.getFluidType().getBlockForFluidState(level, getBlockPos(), fluid.defaultFluidState())); + } else { + level.setBlockAndUpdate(getBlockPos(), Blocks.FIRE.defaultBlockState()); + } + } + markUpdated(); + } + } + } else { + spawnBurningParticles(); + } + } + + private void spawnBurningParticles() { + if (isBurning()) { + BlockPos pos = getBlockPos(); + int burnTicks = (int) (progress * 300); + + if (burnTicks % 30 == 0) { + level.addParticle(ParticleTypes.LARGE_SMOKE, pos.getX() + Math.random(), pos.getY() + 1.2, pos.getZ() + Math.random(), 0.0, 0.0, 0.0); + } else if (burnTicks % 5 == 0) { + level.addParticle(ParticleTypes.SMOKE, pos.getX() + Math.random(), pos.getY() + 1.2, pos.getZ() + Math.random(), 0.0, 0.0, 0.0); + } + } + } + + public ItemStack getItem() { + return item.getStackInSlot(0); + } + + private void setItem(ItemStack item) { + this.item.setStackInSlot(0, item); + } + + public InteractionResult use(Level level, BlockPos pos, Player player, InteractionHand hand) { + var isClientSide = level.isClientSide; + + // Collect an item + if (!getItem().isEmpty()) { + return giveItem(level, pos, isClientSide); + } + + // Handle item fluid interaction + if (!hasContents()) { + var wasBurning = isBurning(); + + if (FluidUtil.interactWithFluidHandler(player, hand, tank)) { + if (wasBurning && !hasHotFluid()) { + progress = 0.0f; + } + + return InteractionResult.sidedSuccess(isClientSide); + } + } + + var playerItem = player.getItemInHand(hand); + + // Handle compost + if (tank.isEmpty()) { + var inventory = new SimpleContainer(playerItem); + + if (compost < 1000) { + if (!level.isClientSide) { + // todo cache items to recipe + level.getServer().getRecipeManager().getRecipeFor(ERecipeTypes.BARREL_COMPOST, inventory, level).ifPresent(recipe -> { + compost = (short) Math.min(1000, compost + recipe.getVolume()); + markUpdated(); + + // Consume item + if (!player.getAbilities().instabuild) { + playerItem.shrink(1); + } + }); + } + + return InteractionResult.sidedSuccess(isClientSide); + } + } + + // Mixing + if (!playerItem.isEmpty()) { + var fluid = tank.getFluid(); + var container = playerItem.getCraftingRemainingItem(); + + if (fluid.getAmount() == 1000) { + // todo custom mixing recipes + if (doMix(playerItem, isClientSide)) { + if (!isClientSide && playerItem.isEmpty()) { + player.setItemInHand(hand, container); + } + return InteractionResult.sidedSuccess(isClientSide); + } + } + } + + return InteractionResult.FAIL; + } + + private InteractionResult giveItem(Level level, BlockPos pos, boolean isClientSide) { + if (!isClientSide) { + // Pop out item + var itemEntity = new ItemEntity(level, pos.getX() + 0.5, pos.getY() + 1.5, pos.getZ() + 0.5, item.extract(false)); + var rand = level.random; + itemEntity.setDeltaMovement(rand.nextGaussian() * 0.05, 0.2, rand.nextGaussian() * 0.05); + level.addFreshEntity(itemEntity); + + // Empty contents + setItem(ItemStack.EMPTY); + } + + return InteractionResult.sidedSuccess(isClientSide); + } + + /** + * @param fluid Fluid in the barrel + * @param catalyst Item to mix with the fluid + * @param result Item (preferable a block) crafted by this mix + * @param playerItem Player's item to check and consume (test item if simulated) + * @param simulate Whether to simulate the mix + * @return if the mix succeeded (if simulated, whether the mix is possible) + */ + private boolean mix(Fluid fluid, Item catalyst, Item result, ItemStack playerItem, boolean simulate) { + if (tank.getFluid().getFluid() == fluid && playerItem.getItem() == catalyst) { + if (!simulate) { + // Consumer player input + playerItem.shrink(1); + // Empty barrel + tank.setFluid(FluidStack.EMPTY); + // Replace fluid with result + setItem(new ItemStack(result)); + } + + return true; + } + + return false; + } + + private boolean doMix(ItemStack playerItem, boolean simulate) { + return mix(Fluids.WATER, EItems.DUST.get(), Items.CLAY, playerItem, simulate) || + mix(Fluids.WATER, Items.MILK_BUCKET, Items.SLIME_BLOCK, playerItem, simulate) || + mix(EFluids.WITCH_WATER_STILL.get(), Items.SAND, Items.SOUL_SAND, playerItem, simulate) || + mix(Fluids.LAVA, Items.REDSTONE, Items.NETHERRACK, playerItem, simulate) || + mix(Fluids.LAVA, Items.GLOWSTONE_DUST, Items.END_STONE, playerItem, simulate) || + mix(Fluids.LAVA, Items.WATER_BUCKET, Items.OBSIDIAN, playerItem, simulate); + } + + // Inner class + private class ItemHandler extends ItemStackHandler { + @Override + protected int getStackLimit(int slot, @Nonnull ItemStack stack) { + return 1; + } + + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) { + FluidStack fluid = tank.getFluid(); + + if (fluid.getAmount() == 1000) { + return doMix(stack, true); + } + + return false; + } + + public ItemStack extract(boolean simulate) { + return extractItem(0, 1, simulate); + } + + @Override + protected void onContentsChanged(int slot) { + doMix(stacks.get(slot).copy(), level.isClientSide); + markUpdated(); + } + } + + // Inner class + private class FluidHandler extends FluidTank { + public FluidHandler() { + super(1000); + } + + @Override + public boolean isFluidValid(FluidStack stack) { + return !isBrewing() && !hasContents(); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/blockentity/EBlockEntity.java b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/EBlockEntity.java new file mode 100644 index 00000000..d2a61b3a --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/EBlockEntity.java @@ -0,0 +1,51 @@ +package thedarkcolour.exnihiloreborn.blockentity; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +import javax.annotation.Nullable; + +public abstract class EBlockEntity extends BlockEntity { + public EBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + @Override + public CompoundTag getUpdateTag() { + return saveWithoutMetadata(); + } + + @Nullable + @Override + public ClientboundBlockEntityDataPacket getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + if (pkt.getTag() == null) { + load(new CompoundTag()); + } else { + load(pkt.getTag()); + } + } + + // todo replace with smaller PropertyUpdate packets so we don't send a bunch of data every tick + protected void markUpdated() { + setChanged(); + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 2); + } + + public InteractionResult use(Level level, Player player, InteractionHand hand) { + return InteractionResult.PASS; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/blockentity/InfestedLeavesBlockEntity.java b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/InfestedLeavesBlockEntity.java new file mode 100644 index 00000000..43dca544 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/InfestedLeavesBlockEntity.java @@ -0,0 +1,116 @@ +package thedarkcolour.exnihiloreborn.blockentity; + +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.block.state.BlockState; +import thedarkcolour.exnihiloreborn.registry.EBlockEntities; +import thedarkcolour.exnihiloreborn.registry.EBlocks; + +public class InfestedLeavesBlockEntity extends EBlockEntity { + public static final float PROGRESS_INTERVAL = 0.005f; + public static final int SPREAD_INTERVAL = 100; + + // A percentage of how much this leaf is infested + private float progress; + // A timer that determines when this block should try to spread + private int spreadTimer; + // The state this block should render as + private BlockState mimic; + + public InfestedLeavesBlockEntity(BlockPos pos, BlockState state) { + super(EBlockEntities.INFESTED_LEAVES.get(), pos, state); + } + + @Override + public void tick() { + // Do progress + if (progress < 1.0f) { + progress = Math.min(1.0f, progress + PROGRESS_INTERVAL); + } + + // If the leave is infested enough, advance the spread timer + if (!level.isClientSide && progress > 0.6f) { + ++spreadTimer; + + // Attempt to spread and reset the timer + if (spreadTimer >= SPREAD_INTERVAL) { + trySpread(); + spreadTimer = level.random.nextInt(10); + } + } + } + + // Attempt to convert a leaf block within 1 block radius around this block + private void trySpread() { + // Get random offset + int x = level.random.nextInt(3) - 1; + int y = level.random.nextInt(3) - 1; + int z = level.random.nextInt(3) - 1; + + // Get the block in the world + BlockPos targetPos = getBlockPos().offset(x, y, z); + BlockState state = level.getBlockState(targetPos); + + // Test block at the position + if (state.is(BlockTags.LEAVES)) { + + // Spread and keep distance/persistent properties + level.setBlock(targetPos, EBlocks.INFESTED_LEAVES.get().defaultBlockState() + .setValue(LeavesBlock.DISTANCE, state.getValue(LeavesBlock.DISTANCE)) + .setValue(LeavesBlock.PERSISTENT, state.getValue(LeavesBlock.PERSISTENT)), + 2); + TileEntity te = level.getBlockEntity(targetPos); + + // Set mimic state of other block + if (te instanceof InfestedLeavesBlockEntity) { + ((InfestedLeavesBlockEntity) te).setMimic(state); + te.setChanged(); + } + } + } + + @Override + public void load(BlockState state, CompoundNBT nbt) { + super.load(state, nbt); + + mimic = NBTUtil.readBlockState(nbt.getCompound("Mimic")); + progress = nbt.getFloat("Progress"); + } + + @Override + public CompoundNBT save(CompoundNBT nbt) { + nbt.put("Mimic", NBTUtil.writeBlockState(mimic)); + nbt.putFloat("Progress", progress); + return super.save(nbt); + } + + @Override + public CompoundNBT getUpdateTag() { + // Used in getUpdatePacket + return save(new CompoundNBT()); + } + + @Override + public SUpdateTileEntityPacket getUpdatePacket() { + // Sends a packet with updated NBT whenever setChanged is called + return new SUpdateTileEntityPacket(getBlockPos(), 244, getUpdateTag()); + } + + @Override + public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) { + // load properties from server's NBT + load(null, pkt.getTag()); + } + + public float getProgress() { + return progress; + } + + public BlockState getMimic() { + return mimic; + } + + public void setMimic(BlockState mimic) { + this.mimic = mimic; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/blockentity/LavaCrucibleBlockEntity.java b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/LavaCrucibleBlockEntity.java new file mode 100644 index 00000000..2a1cf990 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/LavaCrucibleBlockEntity.java @@ -0,0 +1,58 @@ +package thedarkcolour.exnihiloreborn.blockentity; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import thedarkcolour.exnihiloreborn.recipe.crucible.CrucibleRecipe; +import thedarkcolour.exnihiloreborn.registry.EBlockEntities; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +public class LavaCrucibleBlockEntity extends AbstractCrucibleBlockEntity { + public static final Cache RECIPES_CACHE = CacheBuilder.newBuilder().maximumSize(12).build(); + + // todo split this off somewhere else + private static final Object2IntMap HEAT_REGISTRY = new Object2IntOpenHashMap<>(); + + static { + HEAT_REGISTRY.put(Blocks.TORCH, 1); + HEAT_REGISTRY.put(Blocks.WALL_TORCH, 1); + HEAT_REGISTRY.put(Blocks.SOUL_TORCH, 2); + HEAT_REGISTRY.put(Blocks.SOUL_WALL_TORCH, 2); + HEAT_REGISTRY.put(Blocks.LAVA, 3); + HEAT_REGISTRY.put(Blocks.FIRE, 5); + HEAT_REGISTRY.put(Blocks.SOUL_FIRE, 7); + } + + + public LavaCrucibleBlockEntity(BlockPos pos, BlockState state) { + super(EBlockEntities.LAVA_CRUCIBLE.get(), pos, state); + } + + @Override + public int getMelt() { + BlockState state = level.getBlockState(getBlockPos().below()); + + return HEAT_REGISTRY.getInt(state.getBlock()); + } + + @Override + protected RecipeType getRecipeType() { + return ERecipeTypes.LAVA_CRUCIBLE; + } + + @Override + protected Block getDefaultMeltBlock() { + return Blocks.COBBLESTONE; + } + + @Override + protected Cache getRecipeCache() { + return RECIPES_CACHE; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/blockentity/RecipeUtil.java b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/RecipeUtil.java new file mode 100644 index 00000000..49ac7704 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/RecipeUtil.java @@ -0,0 +1,42 @@ +package thedarkcolour.exnihiloreborn.blockentity; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeType; +import thedarkcolour.exnihiloreborn.recipe.SingleIngredientRecipe; +import thedarkcolour.exnihiloreborn.recipe.sieve.AbstractSieveRecipe; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public final class RecipeUtil { + public static List getSieveResults(MinecraftServer server, RecipeType type, ItemStack mesh, ItemStack item) { + ArrayList recipes = new ArrayList<>(); + + for (T recipe : byType(server, type)) { + if (recipe.test(mesh.getItem(), item)) { + recipes.add(recipe); + } + } + + return recipes.isEmpty() ? Collections.emptyList() : recipes; + } + + public static T getRecipe(MinecraftServer server, RecipeType type, ItemStack item) { + for (T recipe : byType(server, type)) { + if (recipe.getIngredient().test(item)) { + return recipe; + } + } + + return null; + } + + public static > Collection byType(MinecraftServer server, RecipeType type) { + return server.getRecipeManager().byType(type).values(); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/blockentity/SieveBlockEntity.java b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/SieveBlockEntity.java new file mode 100644 index 00000000..5e91657e --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/SieveBlockEntity.java @@ -0,0 +1,195 @@ +package thedarkcolour.exnihiloreborn.blockentity; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; +import thedarkcolour.exnihiloreborn.recipe.Reward; +import thedarkcolour.exnihiloreborn.recipe.sieve.AbstractSieveRecipe; +import thedarkcolour.exnihiloreborn.registry.EBlockEntities; +import thedarkcolour.exnihiloreborn.registry.EItems; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; + +public class SieveBlockEntity extends EBlockEntity { + public static final short MAX_SIEVE_CAPACITY = 100; + public static final short SIEVE_INTERVAL = 10; + + private final SieveBlockEntity.ItemHandler item = new SieveBlockEntity.ItemHandler(); + private ItemStack mesh = ItemStack.EMPTY; + private short progress = 0; // Max is 100 + + // Does not persist in NBT, just a cache + // todo invalidate on /reload + private List currentRecipe = Collections.emptyList(); + + public SieveBlockEntity(BlockPos pos, BlockState state) { + super(EBlockEntities.SIEVE.get(), pos, state); + } + + // Capabilities + private final LazyOptional itemHandler = LazyOptional.of(() -> item); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + if (cap == ForgeCapabilities.ITEM_HANDLER) { + return itemHandler.cast(); + } + + return super.getCapability(cap, side); + } + + @Override + protected void saveAdditional(CompoundTag nbt) { + super.saveAdditional(nbt); + + nbt.put("item", item.serializeNBT()); + nbt.putShort("Progress", progress); + if (!mesh.isEmpty()) { + nbt.put("mesh", mesh.save(new CompoundTag())); + } + } + + @Override + public void load(CompoundTag nbt) { + item.deserializeNBT(nbt.getCompound("item")); + progress = nbt.getShort("progress"); + if (nbt.contains("mesh")) { + mesh = ItemStack.of(nbt.getCompound("Mesh")); + } + + super.load(nbt); + } + + public InteractionResult use(Level level, Player player, InteractionHand hand) { + ItemStack playerItem = player.getItemInHand(hand); + boolean isClientSide = level.isClientSide; + + // Try insert mesh + if (mesh.isEmpty()) { + if (isMesh(playerItem)) { + mesh = playerItem.copy(); + mesh.setCount(1); + + // Remove stack + if (!player.isCreative()) { + player.setItemInHand(hand, ItemStack.EMPTY); + } + } + } + + if (progress == 0) { + // Insert an item + if (!isClientSide) { + // Check against cached recipe + if (!currentRecipe.isEmpty()) { + for (AbstractSieveRecipe recipe : currentRecipe) { + if (!recipe.test(mesh.getItem(), playerItem)) { + return InteractionResult.CONSUME; + } + } + + player.setItemInHand(hand, fillWithItem(playerItem)); + markUpdated(); + } else if (!(currentRecipe = getResults(playerItem)).isEmpty()) { + player.setItemInHand(hand, fillWithItem(playerItem)); + markUpdated(); + } + } + } else { + // todo mesh efficiency + progress -= SIEVE_INTERVAL; + + if (progress <= 0) { + progress = 0; + + if (!isClientSide) { + giveItems(); + } + } + } + + return InteractionResult.sidedSuccess(isClientSide); + } + + // Consumes an item and fills the sieve. + private ItemStack fillWithItem(ItemStack stack) { + progress = MAX_SIEVE_CAPACITY; + + return item.insertItem(0, stack, false); + } + + private void giveItems() { + var pos = getBlockPos(); + var rand = level.random; + + for (AbstractSieveRecipe recipe : currentRecipe) { + for (Reward reward : recipe.getRewards()) { + if (rand.nextFloat() < reward.getChance()) { + var itemEntity = new ItemEntity(level, pos.getX() + 0.5, pos.getY() + 1.5, pos.getZ() + 0.5, reward.getItem().copy()); + itemEntity.setDeltaMovement(rand.nextGaussian() * 0.05, 0.2, rand.nextGaussian() * 0.05); + level.addFreshEntity(itemEntity); + } + } + } + + item.setStackInSlot(0, ItemStack.EMPTY); + markUpdated(); + } + + private boolean isMesh(ItemStack stack) { + var item = stack.getItem(); + return item == EItems.STRING_MESH.get() || item == EItems.FLINT_MESH.get() || item == EItems.IRON_MESH.get() || item == EItems.DIAMOND_MESH.get() || item == EItems.NETHERITE_MESH.get(); + } + + public short getProgress() { + return progress; + } + + public ItemStack getItem() { + return item.getStackInSlot(0); + } + + public List getResults(ItemStack stack) { + return RecipeUtil.getSieveResults(level.getServer(), getRecipeType(), mesh, stack); + } + + public RecipeType getRecipeType() { + return ERecipeTypes.SIEVE; + } + + private class ItemHandler extends ItemStackHandler { + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) { + return !getResults(stack).isEmpty(); + } + + @Override + protected int getStackLimit(int slot, @Nonnull ItemStack stack) { + return 1; + } + + @Nonnull + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return ItemStack.EMPTY; + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/blockentity/WaterCrucibleBlockEntity.java b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/WaterCrucibleBlockEntity.java new file mode 100644 index 00000000..78b55723 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/blockentity/WaterCrucibleBlockEntity.java @@ -0,0 +1,46 @@ +package thedarkcolour.exnihiloreborn.blockentity; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.core.BlockPos; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.block.state.BlockState; +import org.apache.commons.lang3.tuple.Pair; +import thedarkcolour.exnihiloreborn.recipe.crucible.CrucibleRecipe; +import thedarkcolour.exnihiloreborn.registry.EBlockEntities; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +public class WaterCrucibleBlockEntity extends AbstractCrucibleBlockEntity { + public static final Cache, CrucibleRecipe> RECIPES_CACHE = CacheBuilder.newBuilder().maximumSize(12).build(); + + public WaterCrucibleBlockEntity(BlockPos pos, BlockState state) { + super(EBlockEntities.WATER_CRUCIBLE.get(), pos, state); + } + + @Override + public CrucibleRecipe getRecipe(ItemStack item) { + return super.getRecipe(item); + } + + @Override + protected RecipeType getRecipeType() { + return ERecipeTypes.WATER_CRUCIBLE; + } + + @Override + protected Block getDefaultMeltBlock() { + return Blocks.OAK_LEAVES; + } + + @Override + protected Cache getRecipeCache() { + return RECIPES_CACHE; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/client/ClientHandler.java b/src/main/java/thedarkcolour/exnihiloreborn/client/ClientHandler.java new file mode 100644 index 00000000..100508be --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/client/ClientHandler.java @@ -0,0 +1,89 @@ +package thedarkcolour.exnihiloreborn.client; + +import com.mojang.blaze3d.platform.GlStateManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.texture.NativeImage; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.inventory.container.PlayerContainer; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.ForgeRegistries; +import thedarkcolour.exnihiloreborn.client.ter.BarrelRenderer; +import thedarkcolour.exnihiloreborn.client.ter.CrucibleRenderer; +import thedarkcolour.exnihiloreborn.client.ter.InfestedLeavesRenderer; +import thedarkcolour.exnihiloreborn.client.ter.SieveRenderer; +import thedarkcolour.exnihiloreborn.registry.EBlockEntities; +import thedarkcolour.exnihiloreborn.registry.EFluids; + +public class ClientHandler { + public static void register() { + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + modBus.addListener(ClientHandler::clientSetup); + modBus.addListener(ClientHandler::stitchTextures); + modBus.addListener(ClientHandler::postStitchTextures); + } + + private static void clientSetup(FMLClientSetupEvent event) { + // not sure why this isn't in render layers? + bindTers(); + + event.enqueueWork(ClientHandler::setRenderLayers); + } + + private static void stitchTextures(TextureStitchEvent.Pre event) { + if (event.getMap().location().equals(PlayerContainer.BLOCK_ATLAS)) { + event.addSprite(BarrelRenderer.COMPOST_DIRT_TEXTURE); + } + } + + @SuppressWarnings("resource") + private static void postStitchTextures(TextureStitchEvent.Post event) { + if (event.getMap().location().equals(PlayerContainer.BLOCK_ATLAS)) { + int x = + try (NativeImage image = new NativeImage(x, y, false)) { + GlStateManager._bindTexture(event.getMap().getId()); + // alpha doesn't matter, only RGB + image.downloadTexture(0, false); + + for (Item item : ForgeRegistries.ITEMS) { + IBakedModel model = Minecraft.getInstance().getItemRenderer().getItemModelShaper().getItemModel(Items.HOPPER); + + if (model != null) { + TextureAtlasSprite sprite = model.getParticleTexture(EmptyModelData.INSTANCE); + + if (sprite.atlas() == event.getMap()) { + + continue; + } + } + // put default color + } + } + } + } + + private static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) { + event.registerBlockEntityRenderer(EBlockEntities.INFESTED_LEAVES.get(), InfestedLeavesRenderer::new); + event.registerBlockEntityRenderer(EBlockEntities.BARREL.get(), BarrelRenderer::new); + event.registerBlockEntityRenderer(EBlockEntities.LAVA_CRUCIBLE.get(), CrucibleRenderer::new); + event.registerBlockEntityRenderer(EBlockEntities.WATER_CRUCIBLE.get(), CrucibleRenderer::new); + event.registerBlockEntityRenderer(EBlockEntities.SIEVE.get(), SieveRenderer::new); + } + + private static void setRenderLayers() { + // Fluids + RenderTypeLookup.setRenderLayer(EFluids.WITCH_WATER.get(), RenderType.translucent()); + RenderTypeLookup.setRenderLayer(EFluids.WITCH_WATER_FLOWING.get(), RenderType.translucent()); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/client/ItemColors.java b/src/main/java/thedarkcolour/exnihiloreborn/client/ItemColors.java new file mode 100644 index 00000000..e9c0057c --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/client/ItemColors.java @@ -0,0 +1,9 @@ +package thedarkcolour.exnihiloreborn.client; + +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import net.minecraft.item.Item; + +public class ItemColors { + public static final Object2IntMap STATIC_COLORS = new Object2IntOpenHashMap<>(); +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/client/ter/BarrelRenderer.java b/src/main/java/thedarkcolour/exnihiloreborn/client/ter/BarrelRenderer.java new file mode 100644 index 00000000..413b45a7 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/client/ter/BarrelRenderer.java @@ -0,0 +1,155 @@ +package thedarkcolour.exnihiloreborn.client.ter; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.model.data.ModelData; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.fluids.FluidStack; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.blockentity.BarrelBlockEntity; + +public class BarrelRenderer implements BlockEntityRenderer { + public static final ResourceLocation COMPOST_DIRT_TEXTURE = new ResourceLocation(ExNihiloReborn.ID, "block/compost_dirt"); + private final BlockRenderDispatcher blockRenderer; + + public BarrelRenderer(BlockEntityRendererProvider.Context context) { + this.blockRenderer = context.getBlockRenderDispatcher(); + } + + @Override + public void render(BarrelBlockEntity barrel, float pPartialTick, PoseStack stack, MultiBufferSource buffers, int light, int overlay) { + var item = barrel.getItem().getItem(); + + // render an output + if (item instanceof BlockItem blockItem) { + var block = blockItem.getBlock(); + var state = block.defaultBlockState(); + + stack.pushPose(); + stack.translate(2 / 16f, 2 / 16f, 2 / 16f); + stack.scale(12 / 16f, 12 / 16f, 12 / 16f); + + blockRenderer.renderSingleBlock(state, stack, buffers, light, overlay, ModelData.EMPTY, null); + } else { + // todo render a flat item + } + + barrel.getCapability(ForgeCapabilities.FLUID_HANDLER).ifPresent(tank -> { + var stack = tank.getFluidInTank(0); + }); + } + + @Override + public void render(BarrelBlockEntity barrel, float partialTicks, MatrixStack stack, IRenderTypeBuffer buffers, int light, int overlay) { + Item item = barrel.getItem().getItem(); + + // render an output + if (item instanceof BlockItem) { + Block block = ((BlockItem) item).getBlock(); + BlockState state = block.defaultBlockState(); + + stack.pushPose(); + stack.translate(2.0f / 16.0f, 2.0f / 16.0f, 2.0f / 16.0f); + stack.scale(12.0f / 16.0f, 12.0f / 16.0f, 12.0f / 16.0f); + + Minecraft.getInstance().getBlockRenderer().renderBlock(state, stack, buffers, light, overlay, EmptyModelData.INSTANCE); + + stack.popPose(); + } + // render a fluid + barrel.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).ifPresent(tank -> { + FluidStack fluidStack = tank.getFluidInTank(0); + + if (!fluidStack.isEmpty()) { // Get texture + Fluid fluidType = fluidStack.getFluid(); + World level = barrel.getLevel(); + BlockPos blockPos = barrel.getBlockPos(); + TextureAtlasSprite sprite = ForgeHooksClient.getFluidSprites(level, blockPos, fluidType.defaultFluidState())[0]; + + // Get color + int col = fluidType.getAttributes().getColor(level, blockPos); + // Split into RGB components + int r = (col >> 16) & 0xff; + int g = (col >> 8) & 0xff; + int b = (col >> 0) & 0xff; + + if (barrel.isBrewing()) { + float progress = barrel.progress; + + // Transition between water color and witch water color (551ec6) + r = (int) MathHelper.lerp(progress, r, 85); + g = (int) MathHelper.lerp(progress, g, 30); + b = (int) MathHelper.lerp(progress, b, 198); + } + + // Setup rendering + IVertexBuilder builder = buffers.getBuffer(RenderTypeLookup.canRenderInLayer(fluidType.defaultFluidState(), RenderType.translucent()) ? RenderType.translucent() : RenderType.solid()); + + renderContents(builder, stack, fluidStack.getAmount() / 1000.0f, r, g, b, sprite, light, 2.0f, 1.0f, 14.0f); + } + }); + + // render compost + if (barrel.compost > 0) { + TextureAtlasSprite sprite = Minecraft.getInstance().getTextureAtlas(PlayerContainer.BLOCK_ATLAS).apply(COMPOST_DIRT_TEXTURE); + IVertexBuilder builder = buffers.getBuffer(RenderType.solid()); + + float compostProgress = barrel.progress; + + // todo custom compost colors + // Transition between default green and dirt brown + int r = (int) MathHelper.lerp(compostProgress, 53, 238); + int g = (int) MathHelper.lerp(compostProgress, 168, 169); + int b = (int) MathHelper.lerp(compostProgress, 42, 109); + + renderContents(builder, stack, barrel.compost / 1000.0f, r, g, b, sprite, light, 2.0f, 1.0f, 14.0f); + } + } + + public static void renderContents(IVertexBuilder builder, MatrixStack stack, float percentage, int color, TextureAtlasSprite sprite, int light, float edge, float yMin, float yMax) { + renderContents(builder, stack, percentage, (color >> 16) & 0xff, (color >> 8) & 0xff, (color >> 0) & 0xff, sprite, light, edge, yMin, yMax); + } + + // Renders a sprite inside the barrel with the height determined by how full the barrel is. + public static void renderContents(IVertexBuilder builder, MatrixStack stack, float percentage, int r, int g, int b, TextureAtlasSprite sprite, int light, float edge, float yMin, float yMax) { + // Height + float height = ((yMax - yMin) / 16.0f) * percentage; + + // Offset by specified number of pixels + stack.pushPose(); + stack.translate(0.0, yMin / 16.0, 0.0); + + // Render quad + renderQuad(builder, stack, height, r, g, b, sprite, light, edge); + + stack.popPose(); + } + + // Renders a sprite + private static void renderQuad(IVertexBuilder builder, MatrixStack stack, float quadHeight, int r, int g, int b, TextureAtlasSprite sprite, int light, float edge) { + Matrix4f pose = stack.last().pose(); + + // Texture coordinates + float uMin = sprite.getU0(); + float uMax = sprite.getU1(); + float vMin = sprite.getV0(); + float vMax = sprite.getV1(); + + float edgeMin = edge / 16.0f; + float edgeMax = (16.0f - edge) / 16.0f; + + builder.vertex(pose, edgeMin, quadHeight, edgeMin).color(r, g, b, 255).uv(uMin, vMin).uv2(light).normal(0.0f, 1.0f, 0.0f).endVertex(); + builder.vertex(pose, edgeMin, quadHeight, edgeMax).color(r, g, b, 255).uv(uMin, vMax).uv2(light).normal(0.0f, 1.0f, 0.0f).endVertex(); + builder.vertex(pose, edgeMax, quadHeight, edgeMax).color(r, g, b, 255).uv(uMax, vMax).uv2(light).normal(0.0f, 1.0f, 0.0f).endVertex(); + builder.vertex(pose, edgeMax, quadHeight, edgeMin).color(r, g, b, 255).uv(uMax, vMin).uv2(light).normal(0.0f, 1.0f, 0.0f).endVertex(); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/client/ter/CrucibleRenderer.java b/src/main/java/thedarkcolour/exnihiloreborn/client/ter/CrucibleRenderer.java new file mode 100644 index 00000000..b57a4ef8 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/client/ter/CrucibleRenderer.java @@ -0,0 +1,87 @@ +package thedarkcolour.exnihiloreborn.client.ter; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.fluid.Fluid; +import net.minecraft.inventory.container.PlayerContainer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import thedarkcolour.exnihiloreborn.blockentity.AbstractCrucibleBlockEntity; + +public class CrucibleRenderer extends TileEntityRenderer { + public static final LoadingCache TOP_TEXTURES = CacheBuilder.newBuilder().maximumSize(30).build(new CacheLoader() { + @Override + public ResourceLocation load(Block key) { + ResourceLocation registryName = key.getRegistryName(); + return new ResourceLocation(registryName.getNamespace(), "block/" + registryName.getPath()); + } + }); + public static final LoadingCache TOP_LAYERS = CacheBuilder.newBuilder().maximumSize(30).build(new CacheLoader() { + @Override + public RenderType load(Block key) { + return RenderType.chunkBufferLayers().stream().filter(layer -> RenderTypeLookup.canRenderInLayer(key.defaultBlockState(), layer)).findFirst().get(); + } + }); + + public CrucibleRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + public void render(AbstractCrucibleBlockEntity crucible, float partialTicks, MatrixStack stack, IRenderTypeBuffer buffers, int light, int overlay) { + crucible.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).ifPresent(tank -> { + FluidStack fluidStack = tank.getFluidInTank(0); + + float solids = (float) crucible.getSolids() / (float) AbstractCrucibleBlockEntity.MAX_SOLIDS; + float liquid = (float) fluidStack.getAmount() / (float) tank.getTankCapacity(0); + + if (solids != 0 || liquid != 0) { + World level = crucible.getLevel(); + BlockPos blockPos = crucible.getBlockPos(); + + IVertexBuilder builder; + TextureAtlasSprite sprite; + float percentage; + + if (solids != 0) { + percentage = solids; + builder = buffers.getBuffer(TOP_LAYERS.getUnchecked(crucible.getLastMelted())); + sprite = Minecraft.getInstance().getTextureAtlas(PlayerContainer.BLOCK_ATLAS).apply(TOP_TEXTURES.getUnchecked(crucible.getLastMelted())); + + int col = Minecraft.getInstance().getBlockColors().getColor(crucible.getLastMelted().defaultBlockState(), level, blockPos, 0); + + if (col == -1) col = 0xffffff; + + BarrelRenderer.renderContents(builder, stack, percentage, col, sprite, light, 2.0f, 4.0f, 14.0f); + } + if (liquid != 0) { + Fluid fluidType = fluidStack.getFluid(); + + percentage = liquid; + builder = buffers.getBuffer(RenderTypeLookup.canRenderInLayer(fluidType.defaultFluidState(), RenderType.translucent()) ? RenderType.translucent() : RenderType.solid()); + sprite = ForgeHooksClient.getFluidSprites(level, blockPos, fluidType.defaultFluidState())[0]; + + // Set biome colors + int col = fluidType.getAttributes().getColor(level, blockPos); + + BarrelRenderer.renderContents(builder, stack, percentage, col, sprite, light, 2.0f, 4.0f, 14.0f); + } + } + }); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/client/ter/InfestedLeavesRenderer.java b/src/main/java/thedarkcolour/exnihiloreborn/client/ter/InfestedLeavesRenderer.java new file mode 100644 index 00000000..89d12fa3 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/client/ter/InfestedLeavesRenderer.java @@ -0,0 +1,55 @@ +package thedarkcolour.exnihiloreborn.client.ter; + +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.model.data.EmptyModelData; +import thedarkcolour.exnihiloreborn.blockentity.InfestedLeavesBlockEntity; + +public class InfestedLeavesRenderer extends TileEntityRenderer { + public InfestedLeavesRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + public void render(InfestedLeavesBlockEntity te, float partialTicks, MatrixStack stack, IRenderTypeBuffer buffer, int light, int overlay) { + Minecraft mc = Minecraft.getInstance(); + BlockState state = te.getMimic(); + + // Default to oak leaves + if (state == null) state = Blocks.OAK_LEAVES.defaultBlockState(); + + // If something is wrong render default leaves + if (!te.hasLevel()) { + Minecraft.getInstance().getBlockRenderer().renderBlock(state, stack, buffer, light, overlay, EmptyModelData.INSTANCE); + return; + } + + // Get infested percentage + float progress = te.getProgress(); + + // Get colors + int col = mc.getBlockColors().getColor(state, te.getLevel(), te.getBlockPos(), 0); + + // Average the white color with the biome color + float r = MathHelper.lerp(progress, (col >> 16) & 0xff, 255.0f); + float g = MathHelper.lerp(progress, (col >> 8 ) & 0xff, 255.0f); + float b = MathHelper.lerp(progress, (col >> 0 ) & 0xff, 255.0f); + + // Cap to 255 + float red = (Math.min(255, r)) / 255.0f; + float green = (Math.min(255, g)) / 255.0f; + float blue = (Math.min(255, b)) / 255.0f; + + // Render + IBakedModel model = mc.getBlockRenderer().getBlockModel(state); + mc.getBlockRenderer().getModelRenderer().renderModel(stack.last(), buffer.getBuffer(RenderTypeLookup.getRenderType(state, false)), state, model, red, green, blue, light, overlay, EmptyModelData.INSTANCE); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/client/ter/SieveRenderer.java b/src/main/java/thedarkcolour/exnihiloreborn/client/ter/SieveRenderer.java new file mode 100644 index 00000000..f003c5de --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/client/ter/SieveRenderer.java @@ -0,0 +1,34 @@ +package thedarkcolour.exnihiloreborn.client.ter; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.inventory.container.PlayerContainer; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import thedarkcolour.exnihiloreborn.blockentity.SieveBlockEntity; + +// todo +public class SieveRenderer extends TileEntityRenderer { + public SieveRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + public void render(SieveBlockEntity sieve, float partialTicks, MatrixStack stack, IRenderTypeBuffer buffers, int light, int overlay) { + ItemStack contents = sieve.getItem(); + + if (!contents.isEmpty() && contents.getItem() instanceof BlockItem) { + BlockItem item = (BlockItem) contents.getItem(); + float percentage = (float) sieve.getProgress() / 100.0f; + IVertexBuilder builder = buffers.getBuffer(CrucibleRenderer.TOP_LAYERS.getUnchecked(item.getBlock())); + TextureAtlasSprite sprite = Minecraft.getInstance().getTextureAtlas(PlayerContainer.BLOCK_ATLAS).apply(CrucibleRenderer.TOP_TEXTURES.getUnchecked(item.getBlock())); + + BarrelRenderer.renderContents(builder, stack, percentage, 0xffffff, sprite, light, 1.0f, 11.0f, 15.0f); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/compat/jei/ExNihiloRebornPlugin.java b/src/main/java/thedarkcolour/exnihiloreborn/compat/jei/ExNihiloRebornPlugin.java new file mode 100644 index 00000000..f6d41d18 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/compat/jei/ExNihiloRebornPlugin.java @@ -0,0 +1,20 @@ +package thedarkcolour.exnihiloreborn.compat.jei; + +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import net.minecraft.util.ResourceLocation; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; + +@JeiPlugin +public class ExNihiloRebornPlugin implements IModPlugin { + @Override + public ResourceLocation getPluginUid() { + return new ResourceLocation(ExNihiloReborn.ID, "jei_plugin"); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registration) { + + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/compat/top/InfestedLeavesInfoProvider.java b/src/main/java/thedarkcolour/exnihiloreborn/compat/top/InfestedLeavesInfoProvider.java new file mode 100644 index 00000000..bafcb690 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/compat/top/InfestedLeavesInfoProvider.java @@ -0,0 +1,60 @@ +package thedarkcolour.exnihiloreborn.compat.top; + +import mcjty.theoneprobe.api.CompoundText; +import mcjty.theoneprobe.api.IProbeHitData; +import mcjty.theoneprobe.api.IProbeInfo; +import mcjty.theoneprobe.api.IProbeInfoProvider; +import mcjty.theoneprobe.api.ProbeMode; +import mcjty.theoneprobe.api.TextStyleClass; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.blockentity.AbstractCrucibleBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.BarrelBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.InfestedLeavesBlockEntity; +import thedarkcolour.exnihiloreborn.registry.EBlocks; + +public class InfestedLeavesInfoProvider implements IProbeInfoProvider { + @Override + public String getID() { + return ExNihiloReborn.ID + ":infested_leaves"; + } + + @Override + public void addProbeInfo(ProbeMode probeMode, IProbeInfo info, PlayerEntity playerEntity, World level, BlockState state, IProbeHitData data) { + TileEntity te = level.getBlockEntity(data.getPos()); + + if (state.getBlock() == EBlocks.INFESTED_LEAVES.get()) { + + if (te instanceof InfestedLeavesBlockEntity) { + int progress = (int) (((InfestedLeavesBlockEntity) te).getProgress() * 100.0f); + + info.text(CompoundText.create().style(TextStyleClass.LABEL).text("Progress: ").style(TextStyleClass.WARNING).text(progress + "%")); + } + } else if (te instanceof BarrelBlockEntity) { + BarrelBlockEntity barrel = (BarrelBlockEntity) te; + short volume = barrel.compost; + + if (volume == 1000 || barrel.isBrewing()) { + int progress = (int) (barrel.progress * 100.0f); + + info.text(CompoundText.create().style(TextStyleClass.LABEL).text("Progress: ").style(TextStyleClass.WARNING).text(progress + "%")); + } else if (volume > 0) { + int volumePercent = (int) (volume / 10.0f); + + info.text(CompoundText.create().style(TextStyleClass.LABEL).text("Volume: ").style(TextStyleClass.WARNING).text(volumePercent + "%")); + } else if (barrel.isBurning()) { + int progress = 300 - (int) (barrel.progress * 300.0f); + + info.text(CompoundText.create().style(TextStyleClass.ERROR).text("Burning! ").style(TextStyleClass.WARNING).text(progress / 20 + "s")); + } + } else if (te instanceof AbstractCrucibleBlockEntity) { + AbstractCrucibleBlockEntity crucible = (AbstractCrucibleBlockEntity) te; + + info.tankHandler(crucible.getTank()); + info.text(CompoundText.create().style(TextStyleClass.LABEL).text("Rate: ").style(TextStyleClass.WARNING).text(crucible.getMelt() + "x")); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/compat/top/TopCompatExNihiloReborn.java b/src/main/java/thedarkcolour/exnihiloreborn/compat/top/TopCompatExNihiloReborn.java new file mode 100644 index 00000000..028f7fb2 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/compat/top/TopCompatExNihiloReborn.java @@ -0,0 +1,14 @@ +package thedarkcolour.exnihiloreborn.compat.top; + +import mcjty.theoneprobe.api.ITheOneProbe; + +import java.util.function.Function; + +public class TopCompatExNihiloReborn implements Function { + @Override + public Void apply(ITheOneProbe iTheOneProbe) { + iTheOneProbe.registerProvider(new InfestedLeavesInfoProvider()); + + return null; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/data/Data.java b/src/main/java/thedarkcolour/exnihiloreborn/data/Data.java new file mode 100644 index 00000000..8de46217 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/data/Data.java @@ -0,0 +1,31 @@ +package thedarkcolour.exnihiloreborn.data; + +import net.minecraft.data.DataGenerator; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; + +// these two annotations basically mean modEventBus.addListener(Data::generateData) +@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) +public class Data { + @SubscribeEvent + public static void generateData(GatherDataEvent event) { + // Two things used by data generators + DataGenerator gen = event.getGenerator(); // writes to json + ExistingFileHelper helper = event.getExistingFileHelper(); // reads existing files like pngs and parent models + + if (event.includeServer()) { + EBlockTagsProvider blockTags = new EBlockTagsProvider(gen, helper); + + gen.addProvider(new ERecipeProvider(gen)); + gen.addProvider(new ELootProvider(gen)); + gen.addProvider(blockTags); + gen.addProvider(new EItemTagProvider(gen, blockTags, helper)); + } + if (event.includeClient()) { + gen.addProvider(new EModelProvider(gen, helper)); + gen.addProvider(new ELangProvider(gen)); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/data/EBlockTagsProvider.java b/src/main/java/thedarkcolour/exnihiloreborn/data/EBlockTagsProvider.java new file mode 100644 index 00000000..8a4d3889 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/data/EBlockTagsProvider.java @@ -0,0 +1,19 @@ +package thedarkcolour.exnihiloreborn.data; + +import net.minecraft.data.BlockTagsProvider; +import net.minecraft.data.DataGenerator; +import net.minecraftforge.common.data.ExistingFileHelper; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; + +import javax.annotation.Nullable; + +public class EBlockTagsProvider extends BlockTagsProvider { + public EBlockTagsProvider(DataGenerator gen, @Nullable ExistingFileHelper helper) { + super(gen, ExNihiloReborn.ID, helper); + } + + @Override + protected void addTags() { + super.addTags(); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/data/EItemTagProvider.java b/src/main/java/thedarkcolour/exnihiloreborn/data/EItemTagProvider.java new file mode 100644 index 00000000..06fe174b --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/data/EItemTagProvider.java @@ -0,0 +1,24 @@ +package thedarkcolour.exnihiloreborn.data; + +import net.minecraft.data.BlockTagsProvider; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.ItemTagsProvider; +import net.minecraftforge.common.data.ExistingFileHelper; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.item.EItemTags; +import thedarkcolour.exnihiloreborn.registry.EItems; + +import javax.annotation.Nullable; + +public class EItemTagProvider extends ItemTagsProvider { + public EItemTagProvider(DataGenerator gen, BlockTagsProvider blocKTags, @Nullable ExistingFileHelper helper) { + super(gen, blocKTags, ExNihiloReborn.ID, helper); + } + + @Override + protected void addTags() { + tag(EItemTags.HAMMERS).add(EItems.WOODEN_HAMMER.get(), EItems.STONE_HAMMER.get(), EItems.GOLDEN_HAMMER.get(), EItems.IRON_HAMMER.get(), EItems.DIAMOND_HAMMER.get(), EItems.NETHERITE_HAMMER.get()); + tag(EItemTags.CROOKS).add(EItems.CROOK.get(), EItems.COMPRESSED_CROOK.get(), EItems.BONE_CROOK.get()); + tag(EItemTags.COMPRESSED_HAMMERS).add(EItems.COMPRESSED_WOODEN_HAMMER.get(), EItems.COMPRESSED_STONE_HAMMER.get(), EItems.COMPRESSED_GOLDEN_HAMMER.get(), EItems.COMPRESSED_IRON_HAMMER.get(), EItems.COMPRESSED_DIAMOND_HAMMER.get(), EItems.COMPRESSED_NETHERITE_HAMMER.get()); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/data/ELangProvider.java b/src/main/java/thedarkcolour/exnihiloreborn/data/ELangProvider.java new file mode 100644 index 00000000..d8281d7f --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/data/ELangProvider.java @@ -0,0 +1,77 @@ +package thedarkcolour.exnihiloreborn.data; + +import net.minecraft.data.DataGenerator; +import net.minecraftforge.common.data.LanguageProvider; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.registry.EBlocks; +import thedarkcolour.exnihiloreborn.registry.EItems; + +public class ELangProvider extends LanguageProvider { + public ELangProvider(DataGenerator gen) { + super(gen, ExNihiloReborn.ID, "en_us"); + } + + @Override + protected void addTranslations() { + addItem(EItems.SILK_WORM, "Silk Worm"); + addItem(EItems.COOKED_SILK_WORM, "Cooked Silk Worm"); + + addItem(EItems.CROOK, "Crook"); + addItem(EItems.COMPRESSED_CROOK, "Compressed Crook"); + addItem(EItems.BONE_CROOK, "Bone Crook"); + + addItem(EItems.WOODEN_HAMMER, "Wooden Hammer"); + addItem(EItems.STONE_HAMMER, "Stone Hammer"); + addItem(EItems.GOLDEN_HAMMER, "Golden Hammer"); + addItem(EItems.IRON_HAMMER, "Iron Hammer"); + addItem(EItems.DIAMOND_HAMMER, "Diamond Hammer"); + addItem(EItems.NETHERITE_HAMMER, "Netherite Hammer"); + + addItem(EItems.COMPRESSED_WOODEN_HAMMER, "Compressed Wooden Hammer"); + addItem(EItems.COMPRESSED_STONE_HAMMER, "Compressed Stone Hammer"); + addItem(EItems.COMPRESSED_GOLDEN_HAMMER, "Compressed Golden Hammer"); + addItem(EItems.COMPRESSED_IRON_HAMMER, "Compressed Iron Hammer"); + addItem(EItems.COMPRESSED_DIAMOND_HAMMER, "Compressed Diamond Hammer"); + addItem(EItems.COMPRESSED_NETHERITE_HAMMER, "Compressed Netherite Hammer"); + + addItem(EItems.IRON_ORE_PIECES, "Iron Ore Pieces"); + addItem(EItems.COPPER_ORE_PIECES, "Copper Ore Pieces"); + addItem(EItems.GOLD_ORE_PIECES, "Gold Ore Pieces"); + + addItem(EItems.STONE_PEBBLE, "Stone Pebble"); + addItem(EItems.DEEPSLATE_PEBBLE, "Deepslate Pebble"); + + addBlock(EBlocks.DUST, "Dust"); + addBlock(EBlocks.CRUSHED_NETHERRACK, "Crushed Netherrack"); + addBlock(EBlocks.CRUSHED_END_STONE, "Crushed End Stone"); + + addBlock(EBlocks.COMPRESSED_COBBLESTONE, "Compressed Cobblestone"); + addBlock(EBlocks.COMPRESSED_DIRT, "Compressed Dirt"); + addBlock(EBlocks.COMPRESSED_SAND, "Compressed Sand"); + addBlock(EBlocks.COMPRESSED_DUST, "Compressed Dust"); + addBlock(EBlocks.COMPRESSED_CRUSHED_NETHERRACK, "Compressed Crushed Netherrack"); + addBlock(EBlocks.COMPRESSED_CRUSHED_END_STONE, "Compressed Crushed End Stone"); + + addBlock(EBlocks.OAK_BARREL, "Oak Barrel"); + addBlock(EBlocks.SPRUCE_BARREL, "Spruce Barrel"); + addBlock(EBlocks.BIRCH_BARREL, "Birch Barrel"); + addBlock(EBlocks.JUNGLE_BARREL, "Jungle Barrel"); + addBlock(EBlocks.ACACIA_BARREL, "Acacia Barrel"); + addBlock(EBlocks.DARK_OAK_BARREL, "Dark_oak Barrel"); + addBlock(EBlocks.CRIMSON_BARREL, "Crimson Barrel"); + addBlock(EBlocks.WARPED_BARREL, "Warped Barrel"); + addBlock(EBlocks.STONE_BARREL, "Stone Barrel"); + + addBlock(EBlocks.PORCELAIN_CRUCIBLE, "Porcelain Crucible"); + addBlock(EBlocks.WARPED_CRUCIBLE, "Warped Crucible"); + addBlock(EBlocks.CRIMSON_CRUCIBLE, "Crimson Crucible"); + addBlock(EBlocks.UNFIRED_CRUCIBLE, "Unfired Crucible"); + + addBlock(EBlocks.OAK_CRUCIBLE, "Oak Crucible"); + addBlock(EBlocks.SPRUCE_CRUCIBLE, "Spruce Crucible"); + addBlock(EBlocks.BIRCH_CRUCIBLE, "Birch Crucible"); + addBlock(EBlocks.JUNGLE_CRUCIBLE, "Jungle Crucible"); + addBlock(EBlocks.ACACIA_CRUCIBLE, "Acacia Crucible"); + addBlock(EBlocks.DARK_OAK_CRUCIBLE, "Dark Oak Crucible"); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/data/ELootProvider.java b/src/main/java/thedarkcolour/exnihiloreborn/data/ELootProvider.java new file mode 100644 index 00000000..493946fa --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/data/ELootProvider.java @@ -0,0 +1,103 @@ +package thedarkcolour.exnihiloreborn.data; + +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.block.Block; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.DirectoryCache; +import net.minecraft.data.IDataProvider; +import net.minecraft.data.LootTableProvider; +import net.minecraft.item.Items; +import net.minecraft.loot.ConstantRange; +import net.minecraft.loot.ItemLootEntry; +import net.minecraft.loot.LootParameterSets; +import net.minecraft.loot.LootPool; +import net.minecraft.loot.LootTable; +import net.minecraft.loot.LootTableManager; +import net.minecraft.loot.conditions.SurvivesExplosion; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.RegistryObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import thedarkcolour.exnihiloreborn.loot.InfestedString; +import thedarkcolour.exnihiloreborn.registry.EBlocks; + +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; + +public class ELootProvider extends LootTableProvider { + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); + private static final Logger LOGGER = LogManager.getLogger(); + private final DataGenerator generator; + private final Map blockTables = Maps.newHashMap(); + + public ELootProvider(DataGenerator generator) { + super(generator); + this.generator = generator; + } + + private void addBlockLootTables() { + addLoot(EBlocks.INFESTED_LEAVES, new LootTable.Builder().withPool(new LootPool.Builder().setRolls(ConstantRange.exactly(1)).add(ItemLootEntry.lootTableItem(Items.STRING).apply(InfestedString.infestedString())))); + + addSelfDrops(); + } + + private void addSelfDrops() { + dropSelf(EBlocks.DUST); + + dropSelf(EBlocks.COMPRESSED_COBBLESTONE); + dropSelf(EBlocks.COMPRESSED_DIRT); + dropSelf(EBlocks.COMPRESSED_SAND); + dropSelf(EBlocks.COMPRESSED_DUST); + + dropSelf(EBlocks.OAK_BARREL); + dropSelf(EBlocks.SPRUCE_BARREL); + dropSelf(EBlocks.BIRCH_BARREL); + dropSelf(EBlocks.JUNGLE_BARREL); + dropSelf(EBlocks.ACACIA_BARREL); + dropSelf(EBlocks.DARK_OAK_BARREL); + dropSelf(EBlocks.CRIMSON_BARREL); + dropSelf(EBlocks.WARPED_BARREL); + dropSelf(EBlocks.STONE_BARREL); + } + + @Override + public void run(DirectoryCache directoryCache) { + addBlockLootTables(); + + HashMap tables = new HashMap<>(blockTables.size()); + + for (Map.Entry entry : blockTables.entrySet()) { + // Add tables to the block loot parameter set automatically + tables.put(entry.getKey().getLootTable(), entry.getValue().setParamSet(LootParameterSets.BLOCK).build()); + } + + writeLootTables(tables, directoryCache); + } + + // Loot table to drop the block itself. Think Diamond Block, Sand, etc. + private void dropSelf(RegistryObject block) { + // refer to the diamond block loot table for this one + addLoot(block, new LootTable.Builder().withPool(new LootPool.Builder().setRolls(ConstantRange.exactly(1)).add(ItemLootEntry.lootTableItem(block.get())).when(SurvivesExplosion.survivesExplosion()))); + } + + private void addLoot(RegistryObject block, LootTable.Builder builder) { + blockTables.put(block.get(), builder); + } + + private void writeLootTables(Map tables, DirectoryCache cache) { + Path outputFolder = generator.getOutputFolder(); + + for (Map.Entry entry : tables.entrySet()) { + Path path = outputFolder.resolve("data/" + entry.getKey().getNamespace() + "/loot_tables/" + entry.getKey().getPath() + ".json"); + + try { + IDataProvider.save(GSON, cache, LootTableManager.serialize(entry.getValue()), path); + } catch (Exception e) { + LOGGER.error("Couldn't write loot table {}", path, e); + } + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/data/EModelProvider.java b/src/main/java/thedarkcolour/exnihiloreborn/data/EModelProvider.java new file mode 100644 index 00000000..652c4332 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/data/EModelProvider.java @@ -0,0 +1,173 @@ +package thedarkcolour.exnihiloreborn.data; + +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; +import net.minecraft.item.Item; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.generators.BlockModelBuilder; +import net.minecraftforge.client.model.generators.BlockStateProvider; +import net.minecraftforge.client.model.generators.ConfiguredModel; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.client.model.generators.ModelProvider; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.fml.RegistryObject; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.registry.EBlocks; +import thedarkcolour.exnihiloreborn.registry.EItems; + +public class EModelProvider extends BlockStateProvider { + public EModelProvider(DataGenerator gen, ExistingFileHelper helper) { + super(gen, ExNihiloReborn.ID, helper); + } + + @Override + protected void registerStatesAndModels() { + registerBlockModels(); + registerItemModels(); + } + + public void registerBlockModels() { + // Materials + simpleCubeAll(EBlocks.DUST.get()); + simpleCubeAll(EBlocks.CRUSHED_NETHERRACK.get()); + simpleCubeAll(EBlocks.CRUSHED_END_STONE.get()); + + // Compressed Blocks + //simpleCubeAll(EBlocks.COMPRESSED_COBBLESTONE.get()); + //simpleCubeAll(EBlocks.COMPRESSED_DIRT.get()); + //simpleCubeAll(EBlocks.COMPRESSED_SAND.get()); + //simpleCubeAll(EBlocks.COMPRESSED_DUST.get()); + + //simpleCubeAll(EBlocks.COMPRESSED_CRUSHED_NETHERRACK.get()); + //simpleCubeAll(EBlocks.COMPRESSED_CRUSHED_END_STONE.get()); + + // Barrels + barrel(EBlocks.OAK_BARREL.get(), Blocks.OAK_PLANKS); + barrel(EBlocks.SPRUCE_BARREL.get(), Blocks.SPRUCE_PLANKS); + barrel(EBlocks.BIRCH_BARREL.get(), Blocks.BIRCH_PLANKS); + barrel(EBlocks.JUNGLE_BARREL.get(), Blocks.JUNGLE_PLANKS); + barrel(EBlocks.ACACIA_BARREL.get(), Blocks.ACACIA_PLANKS); + barrel(EBlocks.DARK_OAK_BARREL.get(), Blocks.DARK_OAK_PLANKS); + barrel(EBlocks.CRIMSON_BARREL.get(), Blocks.CRIMSON_PLANKS); + barrel(EBlocks.WARPED_BARREL.get(), Blocks.WARPED_PLANKS); + barrel(EBlocks.STONE_BARREL.get(), Blocks.STONE); + + sieve(EBlocks.OAK_SIEVE.get(), Blocks.OAK_PLANKS); + sieve(EBlocks.SPRUCE_SIEVE.get(), Blocks.SPRUCE_PLANKS); + sieve(EBlocks.BIRCH_SIEVE.get(), Blocks.BIRCH_PLANKS); + sieve(EBlocks.JUNGLE_SIEVE.get(), Blocks.JUNGLE_PLANKS); + sieve(EBlocks.ACACIA_SIEVE.get(), Blocks.ACACIA_PLANKS); + sieve(EBlocks.DARK_OAK_SIEVE.get(), Blocks.DARK_OAK_PLANKS); + sieve(EBlocks.CRIMSON_SIEVE.get(), Blocks.CRIMSON_PLANKS); + sieve(EBlocks.WARPED_SIEVE.get(), Blocks.WARPED_PLANKS); + + // Lava Crucible + crucible(EBlocks.UNFIRED_CRUCIBLE.get()); + crucible(EBlocks.PORCELAIN_CRUCIBLE.get()); + crucible(EBlocks.CRIMSON_CRUCIBLE.get(), Blocks.CRIMSON_STEM); + crucible(EBlocks.WARPED_CRUCIBLE.get(), Blocks.WARPED_STEM); + + // Water Crucible + crucible(EBlocks.OAK_CRUCIBLE.get(), Blocks.OAK_LOG); + crucible(EBlocks.SPRUCE_CRUCIBLE.get(), Blocks.SPRUCE_LOG); + crucible(EBlocks.BIRCH_CRUCIBLE.get(), Blocks.BIRCH_LOG); + crucible(EBlocks.JUNGLE_CRUCIBLE.get(), Blocks.JUNGLE_LOG); + crucible(EBlocks.ACACIA_CRUCIBLE.get(), Blocks.ACACIA_LOG); + crucible(EBlocks.DARK_OAK_CRUCIBLE.get(), Blocks.DARK_OAK_LOG); + } + + public void registerItemModels() { + generic2d(EItems.SILK_WORM); + generic2d(EItems.COOKED_SILK_WORM); + + handheld(EItems.WOODEN_HAMMER); + handheld(EItems.STONE_HAMMER); + handheld(EItems.GOLDEN_HAMMER); + handheld(EItems.IRON_HAMMER); + handheld(EItems.DIAMOND_HAMMER); + + handheld(EItems.CROOK); + handheld(EItems.BONE_CROOK); + } + + public void simpleCubeAll(Block block) { + blockItem(block); + simpleBlock(block); + } + + public void crucible(Block block) { + crucible(block, block); + } + + public void crucible(Block block, Block appearance) { + ResourceLocation texture = blockTexture(appearance); + + blockItem(block); + + singleModel(block) + .parent(modParent("template_crucible")) + .texture("inside", texture) + .texture("top", texture) + .texture("bottom", texture) + .texture("side", texture); + } + + public void barrel(Block block, Block appearance) { + ResourceLocation texture = blockTexture(appearance); + + blockItem(block); + + singleModel(block) + .parent(modParent("template_barrel")) + .texture("barrel", texture); + } + + public void sieve(Block block, Block appearance) { + ResourceLocation texture = blockTexture(appearance); + + blockItem(block); + + singleModel(block) + .parent(modParent("template_sieve")) + .texture("texture", texture); + } + + public void blockItem(Block block) { + simpleBlockItem(block, modParent(block.getRegistryName().getPath())); + } + + public ModelFile modParent(String name) { + return new ModelFile.UncheckedModelFile(modLoc(ModelProvider.BLOCK_FOLDER + "/" + name)); + } + + public ResourceLocation blockTexture(ResourceLocation id) { + return new ResourceLocation(id.getNamespace(), ModelProvider.BLOCK_FOLDER + "/" + id.getPath()); + } + + // Configures a block model with no block state properties + public BlockModelBuilder singleModel(Block block) { + BlockModelBuilder builder = blockModel(block); + + getVariantBuilder(block).partialState().addModels(new ConfiguredModel(builder)); + + return builder; + } + + public BlockModelBuilder blockModel(Block block) { + return models().getBuilder(block.getRegistryName().getPath()); + } + + // Generic 2d item model like lantern or hopper. Requires Item form. + private void generic2d(RegistryObject supplier) { + String path = supplier.getId().getPath(); + itemModels().getBuilder(path).parent(new ModelFile.UncheckedModelFile(mcLoc("item/generated"))).texture("layer0", modLoc("item/" + path)); + } + + private void handheld(RegistryObject item) { + String itemName = item.getId().getPath(); + + itemModels().singleTexture(itemName, mcLoc("item/handheld"), "layer0", modLoc("item/" + itemName)); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/data/ERecipeProvider.java b/src/main/java/thedarkcolour/exnihiloreborn/data/ERecipeProvider.java new file mode 100644 index 00000000..ef523e72 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/data/ERecipeProvider.java @@ -0,0 +1,260 @@ +package thedarkcolour.exnihiloreborn.data; + +import com.google.common.collect.ImmutableList; +import net.minecraft.block.Blocks; +import net.minecraft.data.CookingRecipeBuilder; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.data.RecipeProvider; +import net.minecraft.data.ShapedRecipeBuilder; +import net.minecraft.data.SmithingRecipeBuilder; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.ITag; +import net.minecraft.tags.ItemTags; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.Tags; +import net.minecraftforge.fml.RegistryObject; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.recipe.Reward; +import thedarkcolour.exnihiloreborn.recipe.barrel.FinishedBarrelCompostRecipe; +import thedarkcolour.exnihiloreborn.recipe.crucible.FinishedCrucibleRecipe; +import thedarkcolour.exnihiloreborn.recipe.hammer.FinishedHammerRecipe; +import thedarkcolour.exnihiloreborn.recipe.sieve.FinishedSieveRecipe; +import thedarkcolour.exnihiloreborn.registry.EBlocks; +import thedarkcolour.exnihiloreborn.registry.EItems; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; + +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class ERecipeProvider extends RecipeProvider { + public ERecipeProvider(DataGenerator gen) { + super(gen); + } + + @Override + protected void buildShapelessRecipes(Consumer consumer) { + createCraftingRecipes(consumer); + createSieveRecipes(consumer); + createCrucibleRecipes(consumer); + createHammerRecipes(consumer); + createBarrelCompostRecipes(consumer); + } + + private void createCraftingRecipes(Consumer consumer) { + // Crook + shapedCrook(consumer, EItems.CROOK, Ingredient.of(Tags.Items.RODS_WOODEN)); + shapedCrook(consumer, EItems.COMPRESSED_CROOK, Ingredient.of(EItems.CROOK.get())); + shapedCrook(consumer, EItems.BONE_CROOK, Ingredient.of(Items.BONE)); + + // Hammer + shapedHammer(consumer, EItems.WOODEN_HAMMER, Ingredient.of(ItemTags.PLANKS)); + shapedHammer(consumer, EItems.STONE_HAMMER, Ingredient.of(ItemTags.STONE_CRAFTING_MATERIALS)); + shapedHammer(consumer, EItems.GOLDEN_HAMMER, Ingredient.of(Tags.Items.INGOTS_GOLD)); + shapedHammer(consumer, EItems.IRON_HAMMER, Ingredient.of(Tags.Items.INGOTS_IRON)); + shapedHammer(consumer, EItems.DIAMOND_HAMMER, Ingredient.of(Tags.Items.GEMS_DIAMOND)); + SmithingRecipeBuilder.smithing(Ingredient.of(EItems.DIAMOND_HAMMER.get()), Ingredient.of(Tags.Items.INGOTS_NETHERITE), EItems.NETHERITE_HAMMER.get()); + + // Barrels + shapedU(consumer, EItems.OAK_BARREL, Items.OAK_PLANKS, Items.OAK_SLAB); + shapedU(consumer, EItems.SPRUCE_BARREL, Items.SPRUCE_PLANKS, Items.SPRUCE_SLAB); + shapedU(consumer, EItems.BIRCH_BARREL, Items.BIRCH_PLANKS, Items.BIRCH_SLAB); + shapedU(consumer, EItems.JUNGLE_BARREL, Items.JUNGLE_PLANKS, Items.JUNGLE_SLAB); + shapedU(consumer, EItems.ACACIA_BARREL, Items.ACACIA_PLANKS, Items.ACACIA_SLAB); + shapedU(consumer, EItems.DARK_OAK_BARREL, Items.DARK_OAK_PLANKS, Items.DARK_OAK_SLAB); + shapedU(consumer, EItems.CRIMSON_BARREL, Items.CRIMSON_PLANKS, Items.CRIMSON_SLAB); + shapedU(consumer, EItems.WARPED_BARREL, Items.WARPED_PLANKS, Items.WARPED_SLAB); + shapedU(consumer, EItems.STONE_BARREL, Items.STONE, Items.STONE_SLAB); + + // Crucible + shapedU(consumer, EItems.OAK_CRUCIBLE, ItemTags.OAK_LOGS, Items.OAK_SLAB); + shapedU(consumer, EItems.SPRUCE_CRUCIBLE, ItemTags.SPRUCE_LOGS, Items.SPRUCE_SLAB); + shapedU(consumer, EItems.BIRCH_CRUCIBLE, ItemTags.BIRCH_LOGS, Items.BIRCH_SLAB); + shapedU(consumer, EItems.JUNGLE_CRUCIBLE, ItemTags.JUNGLE_LOGS, Items.JUNGLE_SLAB); + shapedU(consumer, EItems.ACACIA_CRUCIBLE, ItemTags.ACACIA_LOGS, Items.ACACIA_SLAB); + shapedU(consumer, EItems.DARK_OAK_CRUCIBLE, ItemTags.DARK_OAK_LOGS, Items.DARK_OAK_SLAB); + shapedU(consumer, EItems.CRIMSON_CRUCIBLE, ItemTags.CRIMSON_STEMS, Items.CRIMSON_SLAB); + shapedU(consumer, EItems.WARPED_CRUCIBLE, ItemTags.WARPED_STEMS, Items.WARPED_SLAB); + shapedU(consumer, EItems.UNFIRED_CRUCIBLE, EItems.PORCELAIN_CLAY.get(), EItems.PORCELAIN_CLAY.get()); + + // Furnace Recipe + CookingRecipeBuilder.smelting(Ingredient.of(EItems.UNFIRED_CRUCIBLE.get()), EItems.PORCELAIN_CRUCIBLE.get(), 0.1f, 200).unlockedBy("has_item", has(EItems.UNFIRED_CRUCIBLE.get())).save(consumer, EItems.PORCELAIN_CRUCIBLE.getId()); + CookingRecipeBuilder.smelting(Ingredient.of(EItems.SILK_WORM.get()), EItems.COOKED_SILK_WORM.get(), 0.1f, 200).unlockedBy("has_item", has(EItems.SILK_WORM.get())).save(consumer, EItems.COOKED_SILK_WORM.getId()); + + // Smoker Recipe + CookingRecipeBuilder.cooking(Ingredient.of(EItems.SILK_WORM.get()), EItems.COOKED_SILK_WORM.get(), 0.1f, 200, IRecipeSerializer.SMOKING_RECIPE).unlockedBy("has_item", has(EItems.SILK_WORM.get())).save(consumer, "cooked_silk_worm_from_smoking"); + } + + private void shapedHammer(Consumer consumer, RegistryObject hammer, Ingredient ingredient) { + shaped(consumer, hammer, 1, builder -> { + builder.define('x', ingredient); + builder.define('v', Tags.Items.RODS_WOODEN); + builder.pattern(" x "); + builder.pattern("xv "); + builder.pattern(" v"); + builder.unlockedBy("has_item", has(ItemTags.PLANKS)); + }); + } + + private void shapedCrook(Consumer consumer, RegistryObject crook, Ingredient stick) { + shaped(consumer, crook, 1, builder -> { + builder.define('x', stick); + builder.pattern("xx"); + builder.pattern(" x"); + builder.pattern(" x"); + builder.unlockedBy("has_item", has(Tags.Items.RODS_WOODEN)); + }); + } + + private void shapedU(Consumer consumer, RegistryObject barrel, ITag log, Item slab) { + shaped(consumer, barrel, 1, builder -> { + builder.define('x', log); + builder.define('z', slab); + builder.pattern("x x"); + builder.pattern("x x"); + builder.pattern("xzx"); + builder.unlockedBy("has_item", has(ItemTags.PLANKS)); + }); + } + + private void shapedU(Consumer consumer, RegistryObject barrel, Item plank, Item slab) { + shaped(consumer, barrel, 1, builder -> { + builder.define('x', plank); + builder.define('z', slab); + builder.pattern("x x"); + builder.pattern("x x"); + builder.pattern("xzx"); + builder.unlockedBy("has_item", has(ItemTags.PLANKS)); + }); + } + + private void shaped(Consumer consumer, RegistryObject jungleBarrel, int amount, Consumer recipe) { + Item item = jungleBarrel.get(); + + ShapedRecipeBuilder builder = ShapedRecipeBuilder.shaped(item, amount); + recipe.accept(builder); + builder.save(consumer, item.getRegistryName()); + } + + private void createSieveRecipes(Consumer consumer) { + sieveRecipe(consumer, "stone_pebble", Ingredient.of(Items.DIRT), EItems.STRING_MESH, Reward.withExtraChances(EItems.STONE_PEBBLE, new float[] {1.0f, 1.0f, 0.5f, 0.5f, 0.1f, 0.1f })); + sieveRecipe(consumer, "wheat_seeds", Ingredient.of(Items.DIRT), EItems.STRING_MESH, Reward.of(Items.WHEAT_SEEDS, 0.7f)); + sieveRecipe(consumer, "beetroot_seeds", Ingredient.of(Items.DIRT), EItems.STRING_MESH, Reward.of(Items.BEETROOT_SEEDS, 0.35f)); + sieveRecipe(consumer, "melon_seeds", Ingredient.of(Items.DIRT), EItems.STRING_MESH, Reward.of(Items.MELON_SEEDS, 0.35f)); + sieveRecipe(consumer, "pumpkin_seeds", Ingredient.of(Items.DIRT), EItems.STRING_MESH, Reward.of(Items.PUMPKIN_SEEDS, 0.35f)); + + //sieveRecipe(consumer, "", Ingredient.of()); + } + + private void createCrucibleRecipes(Consumer consumer) { + lavaCrucible(consumer, "cobblestone", Ingredient.of(Blocks.COBBLESTONE), 250); + lavaCrucible(consumer, "stone", Ingredient.of(Blocks.STONE), 250); + lavaCrucible(consumer, "gravel", Ingredient.of(Blocks.GRAVEL), 250); + lavaCrucible(consumer, "netherrack", Ingredient.of(Blocks.NETHERRACK), 1000); + + waterCrucible(consumer, "sweet_berries", Ingredient.of(Items.SWEET_BERRIES), 50); + waterCrucible(consumer, "melon_slice", Ingredient.of(Items.MELON_SLICE), 50); + + waterCrucible(consumer, "saplings", Ingredient.of(ItemTags.SAPLINGS), 100); + waterCrucible(consumer, "small_flowers", Ingredient.of(ItemTags.SMALL_FLOWERS), 100); + waterCrucible(consumer, "apple", Ingredient.of(Items.APPLE), 100); + + waterCrucible(consumer, "tall_flowers", Ingredient.of(ItemTags.TALL_FLOWERS), 200); + + waterCrucible(consumer, "cactus", Ingredient.of(Items.CACTUS), 250); + waterCrucible(consumer, "pumpkin", Ingredient.of(Items.PUMPKIN), 250); + waterCrucible(consumer, "melon", Ingredient.of(Items.MELON), 250); + waterCrucible(consumer, "leaves", Ingredient.of(ItemTags.LEAVES), 250); + } + + private void createHammerRecipes(Consumer consumer) { + // Cobblestone -> Gravel -> Sand -> Dust + hammerRecipe(consumer, "gravel", Blocks.COBBLESTONE, new Reward(Blocks.GRAVEL)); + hammerRecipe(consumer, "sand", Blocks.GRAVEL, new Reward(Blocks.SAND)); + hammerRecipe(consumer, "dust", Blocks.SAND, new Reward(EBlocks.DUST.get())); + + hammerRecipe(consumer, "crushed_netherrack", Blocks.NETHERRACK, new Reward(EBlocks.CRUSHED_NETHERRACK.get())); + + hammerRecipe(consumer, "crushing_sandstone", Ingredient.of(Items.SANDSTONE, Items.CUT_SANDSTONE, Items.CHISELED_SANDSTONE, Items.SMOOTH_SANDSTONE), ImmutableList.of(new Reward(Items.SAND))); + hammerRecipe(consumer, "crushing_red_sandstone", Ingredient.of(Items.RED_SANDSTONE, Items.CUT_RED_SANDSTONE, Items.CHISELED_RED_SANDSTONE, Items.SMOOTH_RED_SANDSTONE), ImmutableList.of(new Reward(Items.RED_SAND))); + hammerRecipe(consumer, "crushing_stone_bricks", Items.STONE_BRICKS, new Reward(Items.CRACKED_STONE_BRICKS)); + + hammerRecipe(consumer, "stone_pebbles", + Ingredient.of(Items.STONE, Items.CRACKED_STONE_BRICKS), + Reward.withExtraChances(EItems.STONE_PEBBLE, new float[] { 0.75f, 0.75f, 0.5f, 0.25f, 0.05f })); + } + + private void createBarrelCompostRecipes(Consumer consumer) { + barrelCompost(consumer, "melon_slice", Ingredient.of(Items.MELON_SLICE), 40); + barrelCompost(consumer, "kelp", Ingredient.of(Items.DRIED_KELP, Items.KELP), 40); + barrelCompost(consumer, "silk_worms", Ingredient.of(EItems.SILK_WORM.get(), EItems.COOKED_SILK_WORM.get()), 40); + + barrelCompost(consumer, "seeds", Ingredient.of(Tags.Items.SEEDS), 80); + barrelCompost(consumer, "seagrass", Ingredient.of(Items.SEAGRASS), 80); + barrelCompost(consumer, "sweet_berries", Ingredient.of(Items.SWEET_BERRIES), 80); + barrelCompost(consumer, "wheat", Ingredient.of(Tags.Items.CROPS_WHEAT), 80); + barrelCompost(consumer, "spider_eye", Ingredient.of(Items.SPIDER_EYE), 80); + + barrelCompost(consumer, "apple", Ingredient.of(Items.APPLE), 100); + barrelCompost(consumer, "small_flowers", Ingredient.of(ItemTags.SMALL_FLOWERS), 100); + barrelCompost(consumer, "cookie", Ingredient.of(Items.COOKIE), 100); + barrelCompost(consumer, "nether_wart", Ingredient.of(Items.NETHER_WART), 100); + barrelCompost(consumer, "mushrooms", Ingredient.of(Tags.Items.MUSHROOMS), 100); + + barrelCompost(consumer, "saplings", Ingredient.of(ItemTags.SAPLINGS), 125); + barrelCompost(consumer, "leaves", Ingredient.of(ItemTags.LEAVES), 125); + barrelCompost(consumer, "bread", Ingredient.of(Items.BREAD), 125); + + barrelCompost(consumer, "tall_flowers", Ingredient.of(ItemTags.TALL_FLOWERS), 150); + barrelCompost(consumer, "pumpkin_pie", Ingredient.of(Items.PUMPKIN_PIE), 150); + + barrelCompost(consumer, "melon", Ingredient.of(Items.MELON), 200); + barrelCompost(consumer, "pumpkin", Ingredient.of(Items.PUMPKIN), 200); + } + + private void lavaCrucible(Consumer consumer, String id, Ingredient ingredient, int volume) { + consumer.accept(new FinishedCrucibleRecipe(new ResourceLocation(ExNihiloReborn.ID, "lava_crucible/" + id), ERecipeSerializers.LAVA_CRUCIBLE.get(), ingredient, Fluids.LAVA, volume)); + } + + private void waterCrucible(Consumer consumer, String id, Ingredient ingredient, int volume) { + consumer.accept(new FinishedCrucibleRecipe(new ResourceLocation(ExNihiloReborn.ID, "water_crucible/" + id), ERecipeSerializers.WATER_CRUCIBLE.get(), ingredient, Fluids.WATER, volume)); + } + + private void barrelCompost(Consumer consumer, String id, Ingredient ingredient, int volume) { + consumer.accept(new FinishedBarrelCompostRecipe(new ResourceLocation(ExNihiloReborn.ID, "barrel_compost/" + id), ingredient, volume)); + } + + private void hammerRecipe(Consumer consumer, String name, Ingredient block, ImmutableList rewards) { + consumer.accept(new FinishedHammerRecipe(ERecipeSerializers.HAMMER.get(), new ResourceLocation(ExNihiloReborn.ID, "hammer/" + name), block, rewards)); + } + + private void hammerRecipe(Consumer consumer, String name, IItemProvider block, Reward... rewards) { + hammerRecipe(consumer, name, Ingredient.of(block), ImmutableList.builder().add(rewards).build()); + } + + private void hammerRecipe(Consumer consumer, ITag.INamedTag tag, Reward rewards) { + consumer.accept(new FinishedHammerRecipe(ERecipeSerializers.HAMMER.get(), new ResourceLocation(ExNihiloReborn.ID, tag.getName().getPath() + "_to_" + rewards.getItem().getItem().getRegistryName().getPath()), Ingredient.of(tag), ImmutableList.of(rewards))); + } + + private void compressedHammerRecipe(Consumer consumer, String name, Ingredient block, ImmutableList rewards) { + consumer.accept(new FinishedHammerRecipe(ERecipeSerializers.COMPRESSED_HAMMER.get(), new ResourceLocation(ExNihiloReborn.ID, "compressed_hammer/" + name), block, rewards)); + } + + private void sieveRecipe(Consumer consumer, String name, Ingredient block, Supplier mesh, ImmutableList rewards) { + consumer.accept(new FinishedSieveRecipe(ERecipeSerializers.SIEVE.get(), new ResourceLocation(ExNihiloReborn.ID, "sieve/" + name), mesh.get(), block, rewards)); + } + + private void sieveRecipe(Consumer consumer, String name, Ingredient block, Supplier mesh, Reward rewards) { + consumer.accept(new FinishedSieveRecipe(ERecipeSerializers.SIEVE.get(), new ResourceLocation(ExNihiloReborn.ID, "sieve/" + name), mesh.get(), block, ImmutableList.of(rewards))); + } + + private void compressedSieveRecipe(Consumer consumer, String name, Ingredient block, Supplier mesh, ImmutableList rewards) { + consumer.accept(new FinishedSieveRecipe(ERecipeSerializers.COMPRESSED_SIEVE.get(), new ResourceLocation(ExNihiloReborn.ID, "compressed_sieve/" + name), mesh.get(), block, rewards)); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/fluid/WitchWaterFluidType.java b/src/main/java/thedarkcolour/exnihiloreborn/fluid/WitchWaterFluidType.java new file mode 100644 index 00000000..08a94c6d --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/fluid/WitchWaterFluidType.java @@ -0,0 +1,60 @@ +package thedarkcolour.exnihiloreborn.fluid; + +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; +import net.minecraftforge.fluids.FluidType; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import org.jetbrains.annotations.Nullable; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.registry.EFluids; + +import java.util.function.Consumer; + +public class WitchWaterFluidType extends FluidType { + private static final ResourceLocation STILL_TEXTURE = new ResourceLocation(ExNihiloReborn.ID, "block/witch_water_still"); + private static final ResourceLocation FLOWING_TEXTURE = new ResourceLocation(ExNihiloReborn.ID, "block/witch_water_flowing"); + private static final ResourceLocation OVERLAY_TEXTURE = new ResourceLocation("block/water_overlay"); + + public WitchWaterFluidType() { + super(FluidType.Properties.create()); + } + + @Override + public void initializeClient(Consumer consumer) { + consumer.accept(new IClientFluidTypeExtensions() { + @Override + public ResourceLocation getStillTexture() { + return IClientFluidTypeExtensions.super.getStillTexture(); + } + + @Override + public ResourceLocation getFlowingTexture() { + return IClientFluidTypeExtensions.super.getFlowingTexture(); + } + + @Override + public @Nullable ResourceLocation getOverlayTexture() { + return IClientFluidTypeExtensions.super.getOverlayTexture(); + } + }); + } + + /*, FluidAttributes.builder(STILL_TEXTURE, FLOWING_TEXTURE) + .color(0xff551ec6) + .translationKey("block." + ExNihiloReborn.ID + ".witch_water") + .sound(SoundEvents.BUCKET_FILL, SoundEvents.BUCKET_EMPTY) + .overlay(new ResourceLocation("block/water_overlay")) + ).block(EBlocks.WITCH_WATER).bucket(EItems.WITCH_WATER_BUCKET);*/ + + public static class Flowing extends ForgeFlowingFluid.Flowing { + public Flowing() { + super(new ForgeFlowingFluid.Properties(EFluids.WITCH_WATER, EFluids.WITCH_WATER_STILL, EFluids.WITCH_WATER_FLOWING)); + } + } + + public static class Source extends ForgeFlowingFluid.Source { + public Source() { + super(new ForgeFlowingFluid.Properties(EFluids.WITCH_WATER, EFluids.WITCH_WATER_STILL, EFluids.WITCH_WATER_FLOWING)); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/item/CrookItem.java b/src/main/java/thedarkcolour/exnihiloreborn/item/CrookItem.java new file mode 100644 index 00000000..1a1db901 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/item/CrookItem.java @@ -0,0 +1,48 @@ +package thedarkcolour.exnihiloreborn.item; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tags.ItemTags; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.common.Tags; +import thedarkcolour.exnihiloreborn.registry.EItems; + +// Silk worms have a 1 in 100 chance to drop from regular leaves, 1 in 15 if the block is infested +// Infested leaves have a 1 in 4 * progress to drop 1 string +// Infested leaves have a 1 in 16 * progress to drop another string +public class CrookItem extends Item { + public CrookItem(Properties properties) { + super(properties); + } + + @Override + public boolean isValidRepairItem(ItemStack tool, ItemStack material) { + if (this == EItems.BONE_CROOK.get()) { + return material.getItem().is(Tags.Items.BONES); + } else { + return material.getItem().is(ItemTags.PLANKS); + } + } + + // Pulls the entity towards the player like a cartoon hook + @Override + public ActionResultType interactLivingEntity(ItemStack stack, PlayerEntity playerIn, LivingEntity living, Hand hand) { + Vector3d difference = playerIn.position().subtract(living.position()); + double distance = Math.sqrt(Entity.getHorizontalDistanceSqr(difference)); + + double scalarX = difference.x / distance; + double scalarZ = difference.z / distance; + + double dx = scalarX * 1.5; + double dz = scalarZ * 1.5; + + living.setDeltaMovement(living.getDeltaMovement().add(dx, 0.0, dz)); + + return ActionResultType.SUCCESS; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/item/EItemTags.java b/src/main/java/thedarkcolour/exnihiloreborn/item/EItemTags.java new file mode 100644 index 00000000..41412dab --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/item/EItemTags.java @@ -0,0 +1,16 @@ +package thedarkcolour.exnihiloreborn.item; + +import net.minecraft.item.Item; +import net.minecraft.tags.ITag; +import net.minecraft.tags.ItemTags; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; + +public class EItemTags { + public static final ITag.INamedTag CROOKS = tag("crooks"); + public static final ITag.INamedTag HAMMERS = tag("hammers"); + public static final ITag.INamedTag COMPRESSED_HAMMERS = tag("compressed_hammers"); + + public static ITag.INamedTag tag(String name) { + return ItemTags.bind(ExNihiloReborn.ID + ":" + name); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/item/ETab.java b/src/main/java/thedarkcolour/exnihiloreborn/item/ETab.java new file mode 100644 index 00000000..d5337c7e --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/item/ETab.java @@ -0,0 +1,19 @@ +package thedarkcolour.exnihiloreborn.item; + +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.registry.EItems; + +public final class ETab extends ItemGroup { + public static final ETab INSTANCE = new ETab(); + + private ETab() { + super(ExNihiloReborn.ID); + } + + @Override + public ItemStack makeIcon() { + return new ItemStack(EItems.CROOK.get()); + } +} \ No newline at end of file diff --git a/src/main/java/thedarkcolour/exnihiloreborn/item/FluidBucketItem.java b/src/main/java/thedarkcolour/exnihiloreborn/item/FluidBucketItem.java new file mode 100644 index 00000000..332d53bf --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/item/FluidBucketItem.java @@ -0,0 +1,20 @@ +package thedarkcolour.exnihiloreborn.item; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.capability.wrappers.FluidBucketWrapper; + +import javax.annotation.Nullable; + +public class FluidBucketItem extends Item { + public FluidBucketItem(Properties properties) { + super(properties); + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundNBT nbt) { + return new FluidBucketWrapper(stack); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/item/HammerItem.java b/src/main/java/thedarkcolour/exnihiloreborn/item/HammerItem.java new file mode 100644 index 00000000..c087d20e --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/item/HammerItem.java @@ -0,0 +1,32 @@ +package thedarkcolour.exnihiloreborn.item; + +import com.google.common.collect.Sets; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.item.IItemTier; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ToolItem; +import thedarkcolour.exnihiloreborn.registry.EItems; + +import java.util.Set; + +public class HammerItem extends ToolItem { + public static final Set EFFECTIVE_ON = Sets.newHashSet( + Blocks.COBBLESTONE, + Blocks.GRAVEL, + Blocks.SAND, + Blocks.SANDSTONE, Blocks.CUT_SANDSTONE, Blocks.CHISELED_SANDSTONE, Blocks.SMOOTH_SANDSTONE, + Blocks.RED_SANDSTONE, Blocks.CUT_RED_SANDSTONE, Blocks.CHISELED_RED_SANDSTONE, Blocks.SMOOTH_RED_SANDSTONE, + Blocks.STONE_BRICKS, + Blocks.CRACKED_STONE_BRICKS, Blocks.STONE + ); + + public HammerItem(IItemTier tier, Properties properties) { + super(1.0f, -2.8f, tier, EFFECTIVE_ON, properties); // set is ignored in getDestroySpeed + } + + @Override + public int getBurnTime(ItemStack itemStack) { + return this == EItems.WOODEN_HAMMER.get() ? 200 : 0; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/item/SilkWormItem.java b/src/main/java/thedarkcolour/exnihiloreborn/item/SilkWormItem.java new file mode 100644 index 00000000..811b1e79 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/item/SilkWormItem.java @@ -0,0 +1,50 @@ +package thedarkcolour.exnihiloreborn.item; + +import net.minecraft.block.BlockState; +import net.minecraft.block.LeavesBlock; +import net.minecraft.item.Item; +import net.minecraft.item.ItemUseContext; +import net.minecraft.tags.BlockTags; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import thedarkcolour.exnihiloreborn.blockentity.InfestedLeavesBlockEntity; +import thedarkcolour.exnihiloreborn.registry.EBlocks; + +public class SilkWormItem extends Item { + public SilkWormItem(Properties properties) { + super(properties); + } + + @Override + public ActionResultType useOn(ItemUseContext context) { + BlockPos pos = context.getClickedPos(); + World level = context.getLevel(); + BlockState state = level.getBlockState(pos); + + if (!state.isAir()) { + if (state.is(BlockTags.LEAVES)) { + // Replace with infested block + level.setBlock(pos, EBlocks.INFESTED_LEAVES.get().defaultBlockState() + .setValue(LeavesBlock.DISTANCE, state.getValue(LeavesBlock.DISTANCE)) + .setValue(LeavesBlock.PERSISTENT, state.getValue(LeavesBlock.PERSISTENT)), 2); + + // Set mimic + TileEntity te = level.getBlockEntity(pos); + if (te instanceof InfestedLeavesBlockEntity) { + ((InfestedLeavesBlockEntity) te).setMimic(state); + } else { + return ActionResultType.FAIL; + } + + // Decrease item + context.getItemInHand().shrink(1); + + return ActionResultType.sidedSuccess(level.isClientSide); + } + } + + return ActionResultType.FAIL; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/loot/CrookLootModifier.java b/src/main/java/thedarkcolour/exnihiloreborn/loot/CrookLootModifier.java new file mode 100644 index 00000000..19563f38 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/loot/CrookLootModifier.java @@ -0,0 +1,56 @@ +package thedarkcolour.exnihiloreborn.loot; + +import com.google.gson.JsonObject; +import net.minecraft.block.BlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.loot.conditions.ILootCondition; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.loot.GlobalLootModifierSerializer; +import net.minecraftforge.common.loot.LootModifier; +import thedarkcolour.exnihiloreborn.registry.EItems; + +import javax.annotation.Nonnull; +import java.util.List; +import java.util.Random; + +public class CrookLootModifier extends LootModifier { + private static final float[] SILK_WORM_FORTUNE_CHANCES = new float[] { 0.01f, 0.0111111114f, 0.0125f, 0.016666668f, 0.05f }; + + protected CrookLootModifier(ILootCondition[] conditionsIn) { + super(conditionsIn); + } + + @Nonnull + @Override + protected List doApply(List generatedLoot, LootContext context) { + BlockState state = context.getParamOrNull(LootParameters.BLOCK_STATE); + + if (state.is(BlockTags.LEAVES)) { + Random level = context.getRandom(); + ItemStack stack = context.getParamOrNull(LootParameters.TOOL); + + if (level.nextFloat() < SILK_WORM_FORTUNE_CHANCES[EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_FORTUNE, stack)]) { + generatedLoot.add(new ItemStack(EItems.SILK_WORM.get())); + } + } + + return generatedLoot; + } + + public static class Serializer extends GlobalLootModifierSerializer { + @Override + public CrookLootModifier read(ResourceLocation location, JsonObject object, ILootCondition[] conditions) { + return new CrookLootModifier(conditions); + } + + @Override + public JsonObject write(CrookLootModifier instance) { + return makeConditions(instance.conditions); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/loot/HammerLootModifier.java b/src/main/java/thedarkcolour/exnihiloreborn/loot/HammerLootModifier.java new file mode 100644 index 00000000..fbbed887 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/loot/HammerLootModifier.java @@ -0,0 +1,78 @@ +package thedarkcolour.exnihiloreborn.loot; + +import com.google.gson.JsonObject; +import net.minecraft.block.BlockState; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootParameters; +import net.minecraft.loot.conditions.ILootCondition; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.loot.GlobalLootModifierSerializer; +import net.minecraftforge.common.loot.LootModifier; +import thedarkcolour.exnihiloreborn.recipe.RewardRecipe; +import thedarkcolour.exnihiloreborn.recipe.Reward; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.Random; + +public class HammerLootModifier extends LootModifier { + private final IRecipeType type; + + protected HammerLootModifier(ILootCondition[] conditionsIn, IRecipeType type) { + super(conditionsIn); + this.type = type; + } + + @Nonnull + @Override + protected List doApply(List generatedLoot, LootContext context) { + ServerWorld level = context.getLevel(); + Inventory temporaryItem = new Inventory(1); // wrap IInventory + BlockState state = context.getParamOrNull(LootParameters.BLOCK_STATE); + + if (state.getBlock().asItem() != Items.AIR) { + temporaryItem.setItem(0, new ItemStack(state.getBlock().asItem())); + Optional recipe = level.getRecipeManager().getRecipeFor(type, temporaryItem, level); + + if (recipe.isPresent()) { + Random rand = level.random; + ArrayList newLoot = new ArrayList<>(); + + for (Reward reward : recipe.get().getRewards()) { + if (rand.nextFloat() < reward.getChance()) { + newLoot.add(reward.getItem().copy()); + } + } + + return newLoot; + } + } + + return generatedLoot; + } + + public static class Serializer extends GlobalLootModifierSerializer { + private final IRecipeType type; + + public Serializer(IRecipeType type) { + this.type = type; + } + + @Override + public HammerLootModifier read(ResourceLocation location, JsonObject object, ILootCondition[] conditions) { + return new HammerLootModifier(conditions, type); + } + + @Override + public JsonObject write(HammerLootModifier instance) { + return makeConditions(instance.conditions); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/loot/InfestedString.java b/src/main/java/thedarkcolour/exnihiloreborn/loot/InfestedString.java new file mode 100644 index 00000000..09baf97d --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/loot/InfestedString.java @@ -0,0 +1,69 @@ +package thedarkcolour.exnihiloreborn.loot; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.LootContext; +import net.minecraft.loot.LootFunction; +import net.minecraft.loot.LootFunctionType; +import net.minecraft.loot.LootParameters; +import net.minecraft.loot.conditions.ILootCondition; +import net.minecraft.tileentity.TileEntity; +import thedarkcolour.exnihiloreborn.blockentity.InfestedLeavesBlockEntity; +import thedarkcolour.exnihiloreborn.registry.ELootFunctions; + +import java.util.Random; + +// Sets the correct amount based on the progress of the infested leaves +public class InfestedString extends LootFunction { + protected InfestedString(ILootCondition[] conditions) { + super(conditions); + } + + @Override + protected ItemStack run(ItemStack stack, LootContext context) { + TileEntity te = context.getParamOrNull(LootParameters.BLOCK_ENTITY); + + if (te instanceof InfestedLeavesBlockEntity) { + float progress = ((InfestedLeavesBlockEntity) te).getProgress(); + Random rand = context.getRandom(); + int count = 0; + + if (rand.nextFloat() < progress * 0.4) { + if (rand.nextFloat() < progress * 0.1) { + ++count; + } + ++count; + } + + if (count > 0) { + stack.setCount(count); + return stack; + } + } + + return ItemStack.EMPTY; + } + + @Override + public LootFunctionType getType() { + return ELootFunctions.INFESTED_STRING; + } + + public static LootFunction.Builder infestedString() { + return simpleBuilder(InfestedString::new); + } + + public static class Serializer extends LootFunction.Serializer { + @Override + public void serialize(JsonObject json, InfestedString p_230424_2_, JsonSerializationContext p_230424_3_) { + super.serialize(json, p_230424_2_, p_230424_3_); + } + + @Override + public InfestedString deserialize(JsonObject json, JsonDeserializationContext ctx, ILootCondition[] conditions) { + return new InfestedString(conditions); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/CodecUtil.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/CodecUtil.java new file mode 100644 index 00000000..afabd1d3 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/CodecUtil.java @@ -0,0 +1,25 @@ +package thedarkcolour.exnihiloreborn.recipe; + +import com.google.gson.JsonElement; +import com.mojang.serialization.Codec; +import com.mojang.serialization.JsonOps; +import net.minecraft.nbt.INBT; +import net.minecraft.nbt.NBTDynamicOps; + +public class CodecUtil { + public static JsonElement encode(Codec codec, T object) { + return codec.encodeStart(JsonOps.INSTANCE, object).result().get(); + } + + public static T decode(Codec codec, JsonElement json) { + return codec.parse(JsonOps.INSTANCE, json).result().get(); + } + + public static INBT encodeNbt(Codec codec, T object) { + return codec.encodeStart(NBTDynamicOps.INSTANCE, object).result().get(); + } + + public static T decodeNbt(Codec codec, INBT json) { + return codec.parse(NBTDynamicOps.INSTANCE, json).result().get(); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/Reward.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/Reward.java new file mode 100644 index 00000000..7a199fab --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/Reward.java @@ -0,0 +1,71 @@ +package thedarkcolour.exnihiloreborn.recipe; + +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Supplier; + +public final class Reward { + public static final Codec CODEC = RecordCodecBuilder.create(builder -> builder.group( + ItemStack.CODEC.fieldOf("item").forGetter(Reward::getItem), + Codec.FLOAT.fieldOf("chance").forGetter(Reward::getChance) + ).apply(builder, Reward::new)); + private final ItemStack item; + private final float chance; + + public Reward(ItemStack item, float chance) { + this.item = item; + this.chance = chance; + } + + public static Reward of(RegistryObject item) { + return of(item, 1.0f); + } + + public static Reward of(RegistryObject item, float chance) { + return new Reward(new ItemStack(item.get()), chance); + } + + public static Reward of(ItemLike item, float chance) { + return new Reward(new ItemStack(item), chance); + } + + public Reward(ItemLike item) { + this(new ItemStack(item), 1.0f); + } + + public static ImmutableList withExtraChances(Supplier supplier, float[] chances) { + Item item = supplier.get(); + ImmutableList.Builder builder = ImmutableList.builder(); + builder.add(new Reward(item)); + + for (float chance : chances) { + builder.add(new Reward(new ItemStack(item), chance)); + } + + return builder.build(); + } + + public ItemStack getItem() { + return item; + } + + public float getChance() { + return chance; + } + + public void toNetwork(FriendlyByteBuf buffer) { + buffer.writeItem(getItem()); + buffer.writeFloat(getChance()); + } + + public static Reward fromNetwork(FriendlyByteBuf buffer) { + return new Reward(buffer.readItem(), buffer.readFloat()); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/RewardRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/RewardRecipe.java new file mode 100644 index 00000000..fa8e90db --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/RewardRecipe.java @@ -0,0 +1,75 @@ +package thedarkcolour.exnihiloreborn.recipe; + +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.mojang.datafixers.util.Function3; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; + +import javax.annotation.Nullable; + +public abstract class RewardRecipe extends SingleIngredientRecipe { + private final ImmutableList rewards; + + public RewardRecipe(ResourceLocation id, Ingredient ingredient, ImmutableList rewards) { + super(id, ingredient); + this.rewards = rewards; + } + + public ImmutableList getRewards() { + return rewards; + } + + public static class Serializer implements RecipeSerializer { + private final Function3, T> factory; + + public Serializer(Function3, T> factory) { + this.factory = factory; + } + + @Override + public T fromJson(ResourceLocation name, JsonObject json) { + Ingredient ingredient = readIngredient(json, "ingredient"); + + // Rewards must be a list + JsonArray rewardsJson = GsonHelper.getAsJsonArray(json, "rewards"); + ImmutableList.Builder rewards = ImmutableList.builder(); + + for (JsonElement element : rewardsJson) { + rewards.add(CodecUtil.decode(Reward.CODEC, element)); + } + + return factory.apply(name, ingredient, rewards.build()); + } + + @Nullable + @Override + public T fromNetwork(ResourceLocation name, FriendlyByteBuf buffer) { + Ingredient ingredient = Ingredient.fromNetwork(buffer); + ImmutableList.Builder rewards = ImmutableList.builder(); + + for (int i = 0; i < buffer.readVarInt(); i++) { + rewards.add(Reward.fromNetwork(buffer)); + } + + return factory.apply(name, ingredient, rewards.build()); + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, T recipe) { + recipe.getIngredient().toNetwork(buffer); + + ImmutableList rewards = recipe.getRewards(); + buffer.writeVarInt(rewards.size()); + + for (Reward reward : rewards) { + reward.toNetwork(buffer); + } + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/SingleIngredientRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/SingleIngredientRecipe.java new file mode 100644 index 00000000..8dcc96c8 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/SingleIngredientRecipe.java @@ -0,0 +1,83 @@ +package thedarkcolour.exnihiloreborn.recipe; + +import com.google.gson.JsonObject; +import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; + +/** + * Represents a recipe that does not take place in any screen or container. + *

+ * Has one ingredient by default and just tests off of that. Only the 1st slot + * of any container will be checked, so only one slot should be present. + */ +public abstract class SingleIngredientRecipe implements Recipe { + private final ResourceLocation id; + private final Ingredient ingredient; + + public SingleIngredientRecipe(ResourceLocation id, Ingredient ingredient) { + this.id = id; + this.ingredient = ingredient; + } + + public Ingredient getIngredient() { + return ingredient; + } + + @Override + public boolean matches(Container inventory, Level level) { + return ingredient.test(inventory.getItem(0)); + } + + @Override + public ItemStack assemble(Container pContainer, RegistryAccess pRegistryAccess) { + return ItemStack.EMPTY; + } + + @Override + public RecipeSerializer getSerializer() { + return null; + } + + @Override + public RecipeType getType() { + return null; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public ItemStack getResultItem(RegistryAccess access) { + return ItemStack.EMPTY; + } + + @Deprecated + @Override + public NonNullList getIngredients() { + return NonNullList.create(); + } + + public static Ingredient readIngredient(JsonObject json, String key) { + if (GsonHelper.isArrayNode(json, key)) { + return Ingredient.fromJson(GsonHelper.getAsJsonArray(json, key)); + } else { + return Ingredient.fromJson(GsonHelper.getAsJsonObject(json, key)); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/barrel/BarrelCompostRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/barrel/BarrelCompostRecipe.java new file mode 100644 index 00000000..74ea7008 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/barrel/BarrelCompostRecipe.java @@ -0,0 +1,69 @@ +package thedarkcolour.exnihiloreborn.recipe.barrel; + +import com.google.gson.JsonObject; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.registries.ForgeRegistryEntry; +import thedarkcolour.exnihiloreborn.recipe.SingleIngredientRecipe; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +public class BarrelCompostRecipe extends SingleIngredientRecipe { + private final int volume; + + public BarrelCompostRecipe(ResourceLocation id, Ingredient ingredient, int volume) { + super(id, ingredient); + + this.volume = volume; + } + + public int getVolume() { + return volume; + } + + @Override + public IRecipeSerializer getSerializer() { + return ERecipeSerializers.BARREL_COMPOST.get(); + } + + @Override + public IRecipeType getType() { + return ERecipeTypes.BARREL_COMPOST; + } + + public static class Serializer extends ForgeRegistryEntry> implements RecipeSerializer { + @Override // Creates the recipe object from a JSON file + public BarrelCompostRecipe fromJson(ResourceLocation name, JsonObject json) { + Ingredient ingredient; + + if (JSONUtils.isArrayNode(json, "ingredient")) { + ingredient = Ingredient.fromJson(JSONUtils.getAsJsonArray(json, "ingredient")); + } else { + ingredient = Ingredient.fromJson(JSONUtils.getAsJsonObject(json, "ingredient")); + } + + int volume = JSONUtils.getAsInt(json, "volume"); + + return new BarrelCompostRecipe(name, ingredient, volume); + } + + @Override + public void toNetwork(PacketBuffer buffer, BarrelCompostRecipe recipe) { + recipe.getIngredient().toNetwork(buffer); + buffer.writeVarInt(recipe.getVolume()); + } + + @Override + public BarrelCompostRecipe fromNetwork(ResourceLocation name, PacketBuffer buffer) { + Ingredient ingredient = Ingredient.fromNetwork(buffer); + int volume = buffer.readVarInt(); + + return new BarrelCompostRecipe(name, ingredient, volume); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/barrel/FinishedBarrelCompostRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/barrel/FinishedBarrelCompostRecipe.java new file mode 100644 index 00000000..20e5a940 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/barrel/FinishedBarrelCompostRecipe.java @@ -0,0 +1,52 @@ +package thedarkcolour.exnihiloreborn.recipe.barrel; + +import com.google.gson.JsonObject; +import net.minecraft.advancements.Advancement; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; + +import javax.annotation.Nullable; + +public class FinishedBarrelCompostRecipe implements IFinishedRecipe { + private final Advancement.Builder advancement = Advancement.Builder.advancement(); + private final ResourceLocation id; + private final Ingredient ingredient; + private final int volume; + + public FinishedBarrelCompostRecipe(ResourceLocation id, Ingredient ingredient, int volume) { + this.id = id; + this.ingredient = ingredient; + this.volume = volume; + } + + @Override + public void serializeRecipeData(JsonObject json) { + json.add("ingredient", ingredient.toJson()); + json.addProperty("volume", volume); + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public IRecipeSerializer getType() { + return ERecipeSerializers.BARREL_COMPOST.get(); + } + + @Nullable + @Override + public JsonObject serializeAdvancement() { + return null; + } + + @Nullable + @Override + public ResourceLocation getAdvancementId() { + return null; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/crucible/CrucibleRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/crucible/CrucibleRecipe.java new file mode 100644 index 00000000..dd1a3531 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/crucible/CrucibleRecipe.java @@ -0,0 +1,67 @@ +package thedarkcolour.exnihiloreborn.recipe.crucible; + +import com.google.gson.JsonObject; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraftforge.fluids.FluidStack; +import thedarkcolour.exnihiloreborn.recipe.CodecUtil; +import thedarkcolour.exnihiloreborn.recipe.SingleIngredientRecipe; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; + +import javax.annotation.Nullable; + +public class CrucibleRecipe extends SingleIngredientRecipe { + private final RecipeType type; + private final FluidStack result; + + public CrucibleRecipe(ResourceLocation id, RecipeType type, Ingredient ingredient, FluidStack result) { + super(id, ingredient); + this.type = type; + this.result = result; + } + + public FluidStack getResult() { + return result; + } + + @Override + public RecipeSerializer getSerializer() { + return ERecipeSerializers.LAVA_CRUCIBLE.get(); + } + + @Override + public RecipeType getType() { + return type; + } + + public static class Serializer implements RecipeSerializer { + private final RecipeType type; + + public Serializer(RecipeType type) { + this.type = type; + } + + @Override + public CrucibleRecipe fromJson(ResourceLocation id, JsonObject json) { + Ingredient ingredient = readIngredient(json, "ingredient"); + FluidStack stack = CodecUtil.decode(FluidStack.CODEC, json.get("fluid")); + + return new CrucibleRecipe(id, type, ingredient, stack); + } + + @Nullable + @Override + public CrucibleRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + return new CrucibleRecipe(id, type, Ingredient.fromNetwork(buffer), FluidStack.readFromPacket(buffer)); + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, CrucibleRecipe recipe) { + recipe.getIngredient().toNetwork(buffer); + recipe.getResult().writeToPacket(buffer); + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/crucible/FinishedCrucibleRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/crucible/FinishedCrucibleRecipe.java new file mode 100644 index 00000000..62753acc --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/crucible/FinishedCrucibleRecipe.java @@ -0,0 +1,59 @@ +package thedarkcolour.exnihiloreborn.recipe.crucible; + +import com.google.gson.JsonObject; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import thedarkcolour.exnihiloreborn.recipe.CodecUtil; + +import javax.annotation.Nullable; + +public class FinishedCrucibleRecipe implements IFinishedRecipe { + private final ResourceLocation id; + private final IRecipeSerializer serializer; + private final Ingredient ingredient; + private final FluidStack fluidStack; + + public FinishedCrucibleRecipe(ResourceLocation id, IRecipeSerializer serializer, Ingredient ingredient, Fluid fluid, int amount) { + this(id, serializer, ingredient, new FluidStack(fluid, amount)); + } + + public FinishedCrucibleRecipe(ResourceLocation id, IRecipeSerializer serializer, Ingredient ingredient, FluidStack fluidStack) { + this.id = id; + this.serializer = serializer; + this.ingredient = ingredient; + this.fluidStack = fluidStack; + } + + + @Override + public void serializeRecipeData(JsonObject json) { + json.add("ingredient", ingredient.toJson()); + json.add("fluid", CodecUtil.encode(FluidStack.CODEC, fluidStack)); + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public IRecipeSerializer getType() { + return serializer; + } + + @Nullable + @Override + public JsonObject serializeAdvancement() { + return null; + } + + @Nullable + @Override + public ResourceLocation getAdvancementId() { + return null; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/CompressedHammerRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/CompressedHammerRecipe.java new file mode 100644 index 00000000..b4d56814 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/CompressedHammerRecipe.java @@ -0,0 +1,28 @@ +package thedarkcolour.exnihiloreborn.recipe.hammer; + +import com.google.common.collect.ImmutableList; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import thedarkcolour.exnihiloreborn.recipe.Reward; +import thedarkcolour.exnihiloreborn.recipe.RewardRecipe; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +public class CompressedHammerRecipe extends RewardRecipe { + public CompressedHammerRecipe(ResourceLocation id, Ingredient ingredient, ImmutableList rewards) { + super(id, ingredient, rewards); + } + + @Override + public IRecipeSerializer getSerializer() { + return ERecipeSerializers.COMPRESSED_HAMMER.get(); + } + + @Override + public IRecipeType getType() { + return ERecipeTypes.COMPRESSED_HAMMER; + } +} + diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/FinishedHammerRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/FinishedHammerRecipe.java new file mode 100644 index 00000000..4375077e --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/FinishedHammerRecipe.java @@ -0,0 +1,64 @@ +package thedarkcolour.exnihiloreborn.recipe.hammer; + +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import thedarkcolour.exnihiloreborn.recipe.CodecUtil; +import thedarkcolour.exnihiloreborn.recipe.Reward; + +import javax.annotation.Nullable; + +public class FinishedHammerRecipe implements IFinishedRecipe { + private final ResourceLocation id; + private final Ingredient ingredient; + private final ImmutableList rewards; + private final IRecipeSerializer serializer; + + public FinishedHammerRecipe(IRecipeSerializer serializer, ResourceLocation id, Ingredient ingredient, ImmutableList rewards) { + this.serializer = serializer; + this.id = id; + this.ingredient = ingredient; + this.rewards = rewards; + } + + @Override + public void serializeRecipeData(JsonObject object) { + object.add("ingredient", ingredient.toJson()); + + JsonArray rewardsJson = new JsonArray(); + + for (Reward reward : rewards) { + rewardsJson.add(CodecUtil.encode(Reward.CODEC, reward)); + } + + object.add("rewards", rewardsJson); + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public IRecipeSerializer getType() { + return serializer; + } + + // We don't need an achievement cause this is basically a simplified loot table + + @Nullable + @Override + public JsonObject serializeAdvancement() { + return null; + } + + @Nullable + @Override + public ResourceLocation getAdvancementId() { + return null; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/HammerRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/HammerRecipe.java new file mode 100644 index 00000000..19580ef0 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/hammer/HammerRecipe.java @@ -0,0 +1,27 @@ +package thedarkcolour.exnihiloreborn.recipe.hammer; + +import com.google.common.collect.ImmutableList; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import thedarkcolour.exnihiloreborn.recipe.Reward; +import thedarkcolour.exnihiloreborn.recipe.RewardRecipe; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +public class HammerRecipe extends RewardRecipe { + public HammerRecipe(ResourceLocation id, Ingredient ingredient, ImmutableList rewards) { + super(id, ingredient, rewards); + } + + @Override + public RecipeSerializer getSerializer() { + return ERecipeSerializers.HAMMER.get(); + } + + @Override + public RecipeType getType() { + return ERecipeTypes.HAMMER; + } +} \ No newline at end of file diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/AbstractSieveRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/AbstractSieveRecipe.java new file mode 100644 index 00000000..1cb06982 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/AbstractSieveRecipe.java @@ -0,0 +1,84 @@ +package thedarkcolour.exnihiloreborn.recipe.sieve; + +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.mojang.datafixers.util.Function4; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.registries.ForgeRegistries; +import thedarkcolour.exnihiloreborn.recipe.CodecUtil; +import thedarkcolour.exnihiloreborn.recipe.Reward; +import thedarkcolour.exnihiloreborn.recipe.RewardRecipe; + +import javax.annotation.Nullable; + +public abstract class AbstractSieveRecipe extends RewardRecipe { + public final Item mesh; + + public AbstractSieveRecipe(ResourceLocation id, Item mesh, Ingredient ingredient, ImmutableList rewards) { + super(id, ingredient, rewards); + this.mesh = mesh; + } + + public boolean test(Item mesh, ItemStack item) { + return this.mesh == mesh && getIngredient().test(item); + } + + public static class Serializer implements RecipeSerializer { + private final Function4, T> factory; + + public Serializer(Function4, T> factory) { + this.factory = factory; + } + + @Override + public T fromJson(ResourceLocation name, JsonObject json) { + Item mesh = ForgeRegistries.ITEMS.getValue(new ResourceLocation(GsonHelper.getAsString(json, "mesh"))); + Ingredient ingredient = readIngredient(json, "ingredient"); + + // Rewards must be a list + JsonArray rewardsJson = GsonHelper.getAsJsonArray(json, "rewards"); + ImmutableList.Builder rewards = ImmutableList.builder(); + + for (JsonElement element : rewardsJson) { + rewards.add(CodecUtil.decode(Reward.CODEC, element)); + } + + return factory.apply(name, mesh, ingredient, rewards.build()); + } + + @Nullable + @Override + public T fromNetwork(ResourceLocation name, FriendlyByteBuf buffer) { + var mesh = buffer.readRegistryIdUnsafe(ForgeRegistries.ITEMS); + var ingredient = Ingredient.fromNetwork(buffer); + var rewards = ImmutableList.builder(); + + for (int i = 0; i < buffer.readVarInt(); i++) { + rewards.add(Reward.fromNetwork(buffer)); + } + + return factory.apply(name, mesh, ingredient, rewards.build()); + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, T recipe) { + buffer.writeRegistryIdUnsafe(ForgeRegistries.ITEMS, recipe.mesh); + recipe.getIngredient().toNetwork(buffer); + + ImmutableList rewards = recipe.getRewards(); + buffer.writeVarInt(rewards.size()); + + for (Reward reward : rewards) { + reward.toNetwork(buffer); + } + } + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/CompressedSieveRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/CompressedSieveRecipe.java new file mode 100644 index 00000000..a7757be3 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/CompressedSieveRecipe.java @@ -0,0 +1,27 @@ +package thedarkcolour.exnihiloreborn.recipe.sieve; + +import com.google.common.collect.ImmutableList; +import net.minecraft.item.Item; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import thedarkcolour.exnihiloreborn.recipe.Reward; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +public class CompressedSieveRecipe extends AbstractSieveRecipe { + public CompressedSieveRecipe(ResourceLocation id, Item mesh, Ingredient ingredient, ImmutableList rewards) { + super(id, mesh, ingredient, rewards); + } + + @Override + public IRecipeSerializer getSerializer() { + return ERecipeSerializers.COMPRESSED_SIEVE.get(); + } + + @Override + public IRecipeType getType() { + return ERecipeTypes.COMPRESSED_SIEVE; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/FinishedSieveRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/FinishedSieveRecipe.java new file mode 100644 index 00000000..48c9902e --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/FinishedSieveRecipe.java @@ -0,0 +1,69 @@ +package thedarkcolour.exnihiloreborn.recipe.sieve; + +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.Item; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; +import thedarkcolour.exnihiloreborn.recipe.CodecUtil; +import thedarkcolour.exnihiloreborn.recipe.Reward; + +import javax.annotation.Nullable; + +public class FinishedSieveRecipe implements IFinishedRecipe { + private final ResourceLocation id; + private final Item mesh; + private final Ingredient ingredient; + private final ImmutableList rewards; + private final IRecipeSerializer serializer; + + public FinishedSieveRecipe(IRecipeSerializer serializer, ResourceLocation id, Item mesh, Ingredient ingredient, ImmutableList rewards) { + this.serializer = serializer; + this.id = id; + this.mesh = mesh; + this.ingredient = ingredient; + this.rewards = rewards; + } + + @Override + public void serializeRecipeData(JsonObject object) { + object.addProperty("mesh", ForgeRegistries.ITEMS.getKey(mesh).toString()); + object.add("ingredient", ingredient.toJson()); + + JsonArray rewardsJson = new JsonArray(); + + for (Reward reward : rewards) { + rewardsJson.add(CodecUtil.encode(Reward.CODEC, reward)); + } + + object.add("rewards", rewardsJson); + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public IRecipeSerializer getType() { + return serializer; + } + + // We don't need an achievement cause this is basically a simplified loot table + + @Nullable + @Override + public JsonObject serializeAdvancement() { + return null; + } + + @Nullable + @Override + public ResourceLocation getAdvancementId() { + return null; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/SieveRecipe.java b/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/SieveRecipe.java new file mode 100644 index 00000000..b0c9e565 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/recipe/sieve/SieveRecipe.java @@ -0,0 +1,27 @@ +package thedarkcolour.exnihiloreborn.recipe.sieve; + +import com.google.common.collect.ImmutableList; +import net.minecraft.item.Item; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import thedarkcolour.exnihiloreborn.recipe.Reward; +import thedarkcolour.exnihiloreborn.registry.ERecipeSerializers; +import thedarkcolour.exnihiloreborn.registry.ERecipeTypes; + +public class SieveRecipe extends AbstractSieveRecipe { + public SieveRecipe(ResourceLocation id, Item mesh, Ingredient ingredient, ImmutableList rewards) { + super(id, mesh, ingredient, rewards); + } + + @Override + public IRecipeSerializer getSerializer() { + return ERecipeSerializers.SIEVE.get(); + } + + @Override + public IRecipeType getType() { + return ERecipeTypes.SIEVE; + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/registry/EBlockEntities.java b/src/main/java/thedarkcolour/exnihiloreborn/registry/EBlockEntities.java new file mode 100644 index 00000000..b07477a8 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/registry/EBlockEntities.java @@ -0,0 +1,51 @@ +package thedarkcolour.exnihiloreborn.registry; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.blockentity.BarrelBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.InfestedLeavesBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.LavaCrucibleBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.SieveBlockEntity; +import thedarkcolour.exnihiloreborn.blockentity.WaterCrucibleBlockEntity; + +public class EBlockEntities { + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ExNihiloReborn.ID); + + public static final RegistryObject> INFESTED_LEAVES = BLOCK_ENTITIES.register("infested_leaves", () -> BlockEntityType.Builder.of(InfestedLeavesBlockEntity::new, EBlocks.INFESTED_LEAVES.get()).build(null)); + public static final RegistryObject> LAVA_CRUCIBLE = BLOCK_ENTITIES.register("lava_crucible", () -> BlockEntityType.Builder.of(LavaCrucibleBlockEntity::new, + EBlocks.WARPED_CRUCIBLE.get(), + EBlocks.CRIMSON_CRUCIBLE.get(), + EBlocks.PORCELAIN_CRUCIBLE.get()).build(null)); + public static final RegistryObject> WATER_CRUCIBLE = BLOCK_ENTITIES.register("water_crucible", () -> BlockEntityType.Builder.of(WaterCrucibleBlockEntity::new, + EBlocks.OAK_CRUCIBLE.get(), + EBlocks.SPRUCE_CRUCIBLE.get(), + EBlocks.BIRCH_CRUCIBLE.get(), + EBlocks.JUNGLE_CRUCIBLE.get(), + EBlocks.ACACIA_CRUCIBLE.get(), + EBlocks.DARK_OAK_CRUCIBLE.get()).build(null)); + public static final RegistryObject> BARREL = BLOCK_ENTITIES.register("barrel", () -> BlockEntityType.Builder.of(BarrelBlockEntity::new, + EBlocks.OAK_BARREL.get(), + EBlocks.SPRUCE_BARREL.get(), + EBlocks.BIRCH_BARREL.get(), + EBlocks.JUNGLE_BARREL.get(), + EBlocks.ACACIA_BARREL.get(), + EBlocks.DARK_OAK_BARREL.get(), + EBlocks.CRIMSON_BARREL.get(), + EBlocks.WARPED_BARREL.get(), + EBlocks.STONE_BARREL.get()).build(null)); + public static final RegistryObject> SIEVE = BLOCK_ENTITIES.register("sieve", () -> BlockEntityType.Builder.of(SieveBlockEntity::new, + EBlocks.OAK_SIEVE.get(), + EBlocks.SPRUCE_SIEVE.get(), + EBlocks.BIRCH_SIEVE.get(), + EBlocks.JUNGLE_SIEVE.get(), + EBlocks.ACACIA_SIEVE.get(), + EBlocks.DARK_OAK_SIEVE.get(), + EBlocks.CRIMSON_SIEVE.get(), + EBlocks.WARPED_SIEVE.get() + ).build(null)); +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/registry/EBlocks.java b/src/main/java/thedarkcolour/exnihiloreborn/registry/EBlocks.java new file mode 100644 index 00000000..7cf8f79b --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/registry/EBlocks.java @@ -0,0 +1,111 @@ +package thedarkcolour.exnihiloreborn.registry; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.block.BarrelBlock; +import thedarkcolour.exnihiloreborn.block.HeavySieveBlock; +import thedarkcolour.exnihiloreborn.block.InfestedLeavesBlock; +import thedarkcolour.exnihiloreborn.block.LavaCrucibleBlock; +import thedarkcolour.exnihiloreborn.block.SieveBlock; +import thedarkcolour.exnihiloreborn.block.UnfiredCrucibleBlock; +import thedarkcolour.exnihiloreborn.block.WaterCrucibleBlock; + +import static net.minecraft.world.level.block.state.BlockBehaviour.Properties.of; + +public class EBlocks { + public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ExNihiloReborn.ID); + + // Materials + public static final RegistryObject DUST = BLOCKS.register("dust", () -> new Block(of().sound(SoundType.WOOL).strength(0.4f))); + public static final RegistryObject CRUSHED_NETHERRACK = BLOCKS.register("crushed_netherrack", () -> new Block(of().sound(SoundType.WOOL).strength(0.6f))); + public static final RegistryObject CRUSHED_END_STONE = BLOCKS.register("crushed_end_stone", () -> new Block(of().sound(SoundType.WOOL).strength(0.6f))); + + // Compressed Blocks + public static final RegistryObject COMPRESSED_COBBLESTONE = BLOCKS.register("compressed_cobblestone", () -> new Block(Block.Properties.copy(Blocks.STONE))); + public static final RegistryObject COMPRESSED_DIRT = BLOCKS.register("compressed_dirt", () -> new Block(Block.Properties.copy(Blocks.DIRT))); + public static final RegistryObject COMPRESSED_SAND = BLOCKS.register("compressed_sand", () -> new Block(Block.Properties.copy(Blocks.SAND))); + public static final RegistryObject COMPRESSED_DUST = BLOCKS.register("compressed_dust", () -> new Block(Block.Properties.copy(DUST.get()))); + public static final RegistryObject COMPRESSED_CRUSHED_NETHERRACK = BLOCKS.register("compressed_crushed_netherrack", () -> new Block(Block.Properties.copy(CRUSHED_NETHERRACK.get()))); + public static final RegistryObject COMPRESSED_CRUSHED_END_STONE = BLOCKS.register("compressed_crushed_end_stone", () -> new Block(Block.Properties.copy(CRUSHED_END_STONE.get()))); + + // Barrels + public static final RegistryObject OAK_BARREL = registerBarrel("oak_barrel", false); + public static final RegistryObject SPRUCE_BARREL = registerBarrel("spruce_barrel", false); + public static final RegistryObject BIRCH_BARREL = registerBarrel("birch_barrel", false); + public static final RegistryObject JUNGLE_BARREL = registerBarrel("jungle_barrel", false); + public static final RegistryObject ACACIA_BARREL = registerBarrel("acacia_barrel", false); + public static final RegistryObject DARK_OAK_BARREL = registerBarrel("dark_oak_barrel", false); + public static final RegistryObject CRIMSON_BARREL = registerBarrel("crimson_barrel", false); + public static final RegistryObject WARPED_BARREL = registerBarrel("warped_barrel", false); + public static final RegistryObject STONE_BARREL = registerBarrel("stone_barrel", true); + + // Sieves + public static final RegistryObject OAK_SIEVE = registerSieve("oak_sieve"); + public static final RegistryObject SPRUCE_SIEVE = registerSieve("spruce_sieve"); + public static final RegistryObject BIRCH_SIEVE = registerSieve("birch_sieve"); + public static final RegistryObject JUNGLE_SIEVE = registerSieve("jungle_sieve"); + public static final RegistryObject ACACIA_SIEVE = registerSieve("acacia_sieve"); + public static final RegistryObject DARK_OAK_SIEVE = registerSieve("dark_oak_sieve"); + public static final RegistryObject CRIMSON_SIEVE = registerSieve("crimson_sieve"); + public static final RegistryObject WARPED_SIEVE = registerSieve("warped_sieve"); + + // Compressed Sieves + //public static final RegistryObject HEAVY_OAK_SIEVE = registerHeavySieve("heavy_oak_sieve", Material.WOOD); + //public static final RegistryObject HEAVY_SPRUCE_SIEVE = registerHeavySieve("heavy_spruce_sieve", Material.WOOD); + //public static final RegistryObject HEAVY_BIRCH_SIEVE = registerHeavySieve("heavy_birch_sieve", Material.WOOD); + //public static final RegistryObject HEAVY_JUNGLE_SIEVE = registerHeavySieve("heavy_jungle_sieve", Material.WOOD); + //public static final RegistryObject HEAVY_ACACIA_SIEVE = registerHeavySieve("heavy_acacia_sieve", Material.WOOD); + //public static final RegistryObject HEAVY_DARK_OAK_SIEVE = registerHeavySieve("heavy_dark_oak_sieve", Material.WOOD); + //public static final RegistryObject HEAVY_CRIMSON_SIEVE = registerHeavySieve("heavy_crimson_sieve", Material.NETHER_WOOD); + //public static final RegistryObject HEAVY_WARPED_SIEVE = registerHeavySieve("heavy_warped_sieve", Material.NETHER_WOOD); + + // Lava Crucibles + public static final RegistryObject PORCELAIN_CRUCIBLE = registerLavaCrucible("porcelain_crucible", false); + public static final RegistryObject WARPED_CRUCIBLE = registerLavaCrucible("warped_crucible", true); + public static final RegistryObject CRIMSON_CRUCIBLE = registerLavaCrucible("crimson_crucible", true); + public static final RegistryObject UNFIRED_CRUCIBLE = BLOCKS.register("unfired_crucible", () -> new UnfiredCrucibleBlock(of(Material.STONE).strength(2.0f).harvestTool(ToolType.PICKAXE))); + + // Water Crucibles + public static final RegistryObject OAK_CRUCIBLE = registerWaterCrucible("oak_crucible"); + public static final RegistryObject SPRUCE_CRUCIBLE = registerWaterCrucible("spruce_crucible"); + public static final RegistryObject BIRCH_CRUCIBLE = registerWaterCrucible("birch_crucible"); + public static final RegistryObject JUNGLE_CRUCIBLE = registerWaterCrucible("jungle_crucible"); + public static final RegistryObject ACACIA_CRUCIBLE = registerWaterCrucible("acacia_crucible"); + public static final RegistryObject DARK_OAK_CRUCIBLE = registerWaterCrucible("dark_oak_crucible"); + + // Misc + public static final RegistryObject INFESTED_LEAVES = BLOCKS.register("infested_leaves", () -> new InfestedLeavesBlock(AbstractBlock.Properties.copy(Blocks.OAK_LEAVES))); + public static final RegistryObject WITCH_WATER = BLOCKS.register("witch_water", () -> new FlowingFluidBlock(EFluids.WITCH_WATER, AbstractBlock.Properties.of(Material.WATER).noCollission().strength(100.0F).noDrops())); + + public static RegistryObject registerSieve(String name) { + return BLOCKS.register(name, () -> new SieveBlock(of().strength(2.0f).noOcclusion().sound(SoundType.WOOD))); + } + + public static RegistryObject registerHeavySieve(String name) { + return BLOCKS.register(name, () -> new HeavySieveBlock(of(material).strength(2.0f).sound(SoundType.WOOD))); + } + + public static RegistryObject registerBarrel(String name, boolean stone) { + return BLOCKS.register(name, () -> new BarrelBlock(of(material).noOcclusion().strength(stone ? 4.0f : 2.0f).sound(stone ? SoundType.STONE : SoundType.WOOD))); + } + + public static RegistryObject registerLavaCrucible(String name, boolean stem) { + return BLOCKS.register(name, () -> { + var props = of().noOcclusion().strength(stem ? 1.5f : 2.0f).sound(stem ? SoundType.STEM : SoundType.STONE); + if (!stem) { + props.requiresCorrectToolForDrops(); + } + return new LavaCrucibleBlock(props); + }); + } + + public static RegistryObject registerWaterCrucible(String name) { + return BLOCKS.register(name, () -> new WaterCrucibleBlock(of(Material.WOOD).strength(1.5f).harvestTool(ToolType.AXE).sound(SoundType.WOOD))); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/registry/EFluids.java b/src/main/java/thedarkcolour/exnihiloreborn/registry/EFluids.java new file mode 100644 index 00000000..64ff742c --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/registry/EFluids.java @@ -0,0 +1,19 @@ +package thedarkcolour.exnihiloreborn.registry; + +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.fluids.FluidType; +import net.minecraftforge.registries.RegistryObject; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.fluid.WitchWaterFluidType; + +public class EFluids { + public static final DeferredRegister FLUID_TYPES = DeferredRegister.create(ForgeRegistries.FLUID_TYPES, ExNihiloReborn.ID); + public static final DeferredRegister FLUIDS = DeferredRegister.create(ForgeRegistries.FLUIDS, ExNihiloReborn.ID); + + public static final RegistryObject WITCH_WATER = FLUID_TYPES.register("witch_water", () -> new WitchWaterFluidType()); + + public static final RegistryObject WITCH_WATER_STILL = FLUIDS.register("witch_water", WitchWaterFluidType.Source::new); + public static final RegistryObject WITCH_WATER_FLOWING = FLUIDS.register("flowing_witch_water", WitchWaterFluidType.Flowing::new); +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/registry/EItems.java b/src/main/java/thedarkcolour/exnihiloreborn/registry/EItems.java new file mode 100644 index 00000000..9c400644 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/registry/EItems.java @@ -0,0 +1,183 @@ +package thedarkcolour.exnihiloreborn.registry; + +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.item.CrookItem; +import thedarkcolour.exnihiloreborn.item.ETab; +import thedarkcolour.exnihiloreborn.item.FluidBucketItem; +import thedarkcolour.exnihiloreborn.item.HammerItem; +import thedarkcolour.exnihiloreborn.item.SilkWormItem; + +public class EItems { + public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ExNihiloReborn.ID); + + // Silk Worm + public static final RegistryObject SILK_WORM = ITEMS.register("silk_worm", () -> new SilkWormItem(props())); + public static final RegistryObject COOKED_SILK_WORM = ITEMS.register("cooked_silk_worm", () -> new Item(props().food(new Food.Builder().nutrition(2).saturationMod(0.6f).build()))); + + // Crooks + public static final RegistryObject CROOK = ITEMS.register("crook", () -> new CrookItem(props().durability(64))); + public static final RegistryObject COMPRESSED_CROOK = ITEMS.register("compressed_crook", () -> new CrookItem(props().durability(192))); + public static final RegistryObject BONE_CROOK = ITEMS.register("bone_crook", () -> new CrookItem(props().durability(256))); + + // Sieve Meshes + public static final RegistryObject STRING_MESH = ITEMS.register("string_mesh", () -> new Item(props().stacksTo(1))); + public static final RegistryObject FLINT_MESH = ITEMS.register("flint_mesh", () -> new Item(props().stacksTo(1))); + public static final RegistryObject IRON_MESH = ITEMS.register("iron_mesh", () -> new Item(props().stacksTo(1))); + public static final RegistryObject DIAMOND_MESH = ITEMS.register("diamond_mesh", () -> new Item(props().stacksTo(1))); + public static final RegistryObject NETHERITE_MESH = ITEMS.register("netherite_mesh", () -> new Item(props().stacksTo(1))); + + // Hammers + public static final RegistryObject WOODEN_HAMMER = ITEMS.register("wooden_hammer", () -> new HammerItem(ItemTier.WOOD, props())); + public static final RegistryObject STONE_HAMMER = ITEMS.register("stone_hammer", () -> new HammerItem(ItemTier.STONE, props())); + public static final RegistryObject GOLDEN_HAMMER = ITEMS.register("golden_hammer", () -> new HammerItem(ItemTier.GOLD, props())); + public static final RegistryObject IRON_HAMMER = ITEMS.register("iron_hammer", () -> new HammerItem(ItemTier.IRON, props())); + public static final RegistryObject DIAMOND_HAMMER = ITEMS.register("diamond_hammer", () -> new HammerItem(ItemTier.DIAMOND, props())); + public static final RegistryObject NETHERITE_HAMMER = ITEMS.register("netherite_hammer", () -> new HammerItem(ItemTier.NETHERITE, props())); + + // Compressed Hammers + public static final RegistryObject COMPRESSED_WOODEN_HAMMER = ITEMS.register("compressed_wooden_hammer", () -> new HammerItem(ItemTier.WOOD, props())); + public static final RegistryObject COMPRESSED_STONE_HAMMER = ITEMS.register("compressed_stone_hammer", () -> new HammerItem(ItemTier.STONE, props())); + public static final RegistryObject COMPRESSED_GOLDEN_HAMMER = ITEMS.register("compressed_golden_hammer", () -> new HammerItem(ItemTier.GOLD, props())); + public static final RegistryObject COMPRESSED_IRON_HAMMER = ITEMS.register("compressed_iron_hammer", () -> new HammerItem(ItemTier.IRON, props())); + public static final RegistryObject COMPRESSED_DIAMOND_HAMMER = ITEMS.register("compressed_diamond_hammer", () -> new HammerItem(ItemTier.DIAMOND, props())); + public static final RegistryObject COMPRESSED_NETHERITE_HAMMER = ITEMS.register("compressed_netherite_hammer", () -> new HammerItem(ItemTier.NETHERITE, props())); + + // Ore Pieces todo re evaluate + public static final RegistryObject IRON_ORE_PIECES = registerSimpleItem("iron_ore_pieces"); + public static final RegistryObject COPPER_ORE_PIECES = registerSimpleItem("copper_ore_pieces"); + public static final RegistryObject GOLD_ORE_PIECES = registerSimpleItem("gold_ore_pieces"); + + // Pebbles + public static final RegistryObject STONE_PEBBLE = registerSimpleItem("stone_pebble"); + public static final RegistryObject DEEPSLATE_PEBBLE = registerSimpleItem("deepslate_pebble"); + + // Misc + public static final RegistryObject PORCELAIN_CLAY = registerSimpleItem("porcelain_clay"); + + // Fluids + public static final RegistryObject WITCH_WATER_BUCKET = ITEMS.register("witch_water_bucket", () -> new FluidBucketItem(props().craftRemainder(Items.BUCKET).stacksTo(1))); + + public static RegistryObject registerSimpleItem(String name) { + return ITEMS.register(name, () -> new Item(props())); + } + + // Returns new properties with creative tab set + public static Item.Properties props() { + return new Item.Properties(); + } + + // Register a block item + public static RegistryObject registerItemBlock(RegistryObject block) { + return ITEMS.register(block.getId().getPath(), () -> new BlockItem(block.get(), props())); + } + + // BlockItems + public static final RegistryObject DUST; + public static final RegistryObject CRUSHED_NETHERRACK; + public static final RegistryObject CRUSHED_END_STONE; + + public static final RegistryObject COMPRESSED_COBBLESTONE; + public static final RegistryObject COMPRESSED_DIRT; + public static final RegistryObject COMPRESSED_SAND; + public static final RegistryObject COMPRESSED_DUST; + public static final RegistryObject COMPRESSED_CRUSHED_NETHERRACK; + public static final RegistryObject COMPRESSED_CRUSHED_END_STONE; + + // Barrels + public static final RegistryObject OAK_BARREL = registerItemBlock(EBlocks.OAK_BARREL); + public static final RegistryObject SPRUCE_BARREL = registerItemBlock(EBlocks.SPRUCE_BARREL); + public static final RegistryObject BIRCH_BARREL = registerItemBlock(EBlocks.BIRCH_BARREL); + public static final RegistryObject JUNGLE_BARREL = registerItemBlock(EBlocks.JUNGLE_BARREL); + public static final RegistryObject ACACIA_BARREL = registerItemBlock(EBlocks.ACACIA_BARREL); + public static final RegistryObject DARK_OAK_BARREL = registerItemBlock(EBlocks.DARK_OAK_BARREL); + public static final RegistryObject CRIMSON_BARREL = registerItemBlock(EBlocks.CRIMSON_BARREL); + public static final RegistryObject WARPED_BARREL = registerItemBlock(EBlocks.WARPED_BARREL); + public static final RegistryObject STONE_BARREL = registerItemBlock(EBlocks.STONE_BARREL); + + // Sieves + public static final RegistryObject OAK_SIEVE = registerItemBlock(EBlocks.OAK_SIEVE); + public static final RegistryObject SPRUCE_SIEVE = registerItemBlock(EBlocks.SPRUCE_SIEVE); + public static final RegistryObject BIRCH_SIEVE = registerItemBlock(EBlocks.BIRCH_SIEVE); + public static final RegistryObject JUNGLE_SIEVE = registerItemBlock(EBlocks.JUNGLE_SIEVE); + public static final RegistryObject ACACIA_SIEVE = registerItemBlock(EBlocks.ACACIA_SIEVE); + public static final RegistryObject DARK_OAK_SIEVE = registerItemBlock(EBlocks.DARK_OAK_SIEVE); + public static final RegistryObject CRIMSON_SIEVE = registerItemBlock(EBlocks.CRIMSON_SIEVE); + public static final RegistryObject WARPED_SIEVE = registerItemBlock(EBlocks.WARPED_SIEVE); + + // Compressed Sieves + //public static final RegistryObject HEAVY_OAK_SIEVE; + //public static final RegistryObject HEAVY_SPRUCE_SIEVE; + //public static final RegistryObject HEAVY_BIRCH_SIEVE; + //public static final RegistryObject HEAVY_JUNGLE_SIEVE; + //public static final RegistryObject HEAVY_ACACIA_SIEVE; + //public static final RegistryObject HEAVY_DARK_OAK_SIEVE; + //public static final RegistryObject HEAVY_CRIMSON_SIEVE; + //public static final RegistryObject HEAVY_WARPED_SIEVE; + + // Lava Crucibles + public static final RegistryObject PORCELAIN_CRUCIBLE = registerItemBlock(EBlocks.PORCELAIN_CRUCIBLE); + public static final RegistryObject WARPED_CRUCIBLE = registerItemBlock(EBlocks.WARPED_CRUCIBLE); + public static final RegistryObject CRIMSON_CRUCIBLE = registerItemBlock(EBlocks.CRIMSON_CRUCIBLE); + public static final RegistryObject UNFIRED_CRUCIBLE = registerItemBlock(EBlocks.UNFIRED_CRUCIBLE); + + // Water Crucibles + public static final RegistryObject OAK_CRUCIBLE = registerItemBlock(EBlocks.OAK_CRUCIBLE); + public static final RegistryObject SPRUCE_CRUCIBLE = registerItemBlock(EBlocks.SPRUCE_CRUCIBLE); + public static final RegistryObject BIRCH_CRUCIBLE = registerItemBlock(EBlocks.BIRCH_CRUCIBLE); + public static final RegistryObject JUNGLE_CRUCIBLE = registerItemBlock(EBlocks.JUNGLE_CRUCIBLE); + public static final RegistryObject ACACIA_CRUCIBLE = registerItemBlock(EBlocks.ACACIA_CRUCIBLE); + public static final RegistryObject DARK_OAK_CRUCIBLE = registerItemBlock(EBlocks.DARK_OAK_CRUCIBLE); + + static { + DUST = registerItemBlock(EBlocks.DUST); + CRUSHED_NETHERRACK = registerItemBlock(EBlocks.CRUSHED_NETHERRACK); + CRUSHED_END_STONE = registerItemBlock(EBlocks.CRUSHED_END_STONE); + COMPRESSED_COBBLESTONE = registerItemBlock(EBlocks.COMPRESSED_COBBLESTONE); + COMPRESSED_DIRT = registerItemBlock(EBlocks.COMPRESSED_DIRT); + COMPRESSED_SAND = registerItemBlock(EBlocks.COMPRESSED_SAND); + COMPRESSED_DUST = registerItemBlock(EBlocks.COMPRESSED_DUST); + COMPRESSED_CRUSHED_NETHERRACK = registerItemBlock(EBlocks.COMPRESSED_CRUSHED_NETHERRACK); + COMPRESSED_CRUSHED_END_STONE = registerItemBlock(EBlocks.COMPRESSED_CRUSHED_END_STONE); + OAK_BARREL = registerItemBlock(EBlocks.OAK_BARREL); + SPRUCE_BARREL = registerItemBlock(EBlocks.SPRUCE_BARREL); + BIRCH_BARREL = registerItemBlock(EBlocks.BIRCH_BARREL); + JUNGLE_BARREL = registerItemBlock(EBlocks.JUNGLE_BARREL); + ACACIA_BARREL = registerItemBlock(EBlocks.ACACIA_BARREL); + DARK_OAK_BARREL = registerItemBlock(EBlocks.DARK_OAK_BARREL); + CRIMSON_BARREL = registerItemBlock(EBlocks.CRIMSON_BARREL); + WARPED_BARREL = registerItemBlock(EBlocks.WARPED_BARREL); + STONE_BARREL = registerItemBlock(EBlocks.STONE_BARREL); + OAK_SIEVE = registerItemBlock(EBlocks.OAK_SIEVE); + SPRUCE_SIEVE = registerItemBlock(EBlocks.SPRUCE_SIEVE); + BIRCH_SIEVE = registerItemBlock(EBlocks.BIRCH_SIEVE); + JUNGLE_SIEVE = registerItemBlock(EBlocks.JUNGLE_SIEVE); + ACACIA_SIEVE = registerItemBlock(EBlocks.ACACIA_SIEVE); + DARK_OAK_SIEVE = registerItemBlock(EBlocks.DARK_OAK_SIEVE); + CRIMSON_SIEVE = registerItemBlock(EBlocks.CRIMSON_SIEVE); + WARPED_SIEVE = registerItemBlock(EBlocks.WARPED_SIEVE); + //HEAVY_OAK_SIEVE = registerItemBlock(EBlocks.HEAVY_OAK_SIEVE); + //HEAVY_SPRUCE_SIEVE = registerItemBlock(EBlocks.HEAVY_SPRUCE_SIEVE); + //HEAVY_BIRCH_SIEVE = registerItemBlock(EBlocks.HEAVY_BIRCH_SIEVE); + //HEAVY_JUNGLE_SIEVE = registerItemBlock(EBlocks.HEAVY_JUNGLE_SIEVE); + //HEAVY_ACACIA_SIEVE = registerItemBlock(EBlocks.HEAVY_ACACIA_SIEVE); + //HEAVY_DARK_OAK_SIEVE = registerItemBlock(EBlocks.HEAVY_DARK_OAK_SIEVE); + //HEAVY_CRIMSON_SIEVE = registerItemBlock(EBlocks.HEAVY_CRIMSON_SIEVE); + //HEAVY_WARPED_SIEVE = registerItemBlock(EBlocks.HEAVY_WARPED_SIEVE); + PORCELAIN_CRUCIBLE = registerItemBlock(EBlocks.PORCELAIN_CRUCIBLE); + WARPED_CRUCIBLE = registerItemBlock(EBlocks.WARPED_CRUCIBLE); + CRIMSON_CRUCIBLE = registerItemBlock(EBlocks.CRIMSON_CRUCIBLE); + UNFIRED_CRUCIBLE = registerItemBlock(EBlocks.UNFIRED_CRUCIBLE); + OAK_CRUCIBLE = registerItemBlock(EBlocks.OAK_CRUCIBLE); + SPRUCE_CRUCIBLE = registerItemBlock(EBlocks.SPRUCE_CRUCIBLE); + BIRCH_CRUCIBLE = registerItemBlock(EBlocks.BIRCH_CRUCIBLE); + JUNGLE_CRUCIBLE = registerItemBlock(EBlocks.JUNGLE_CRUCIBLE); + ACACIA_CRUCIBLE = registerItemBlock(EBlocks.ACACIA_CRUCIBLE); + DARK_OAK_CRUCIBLE = registerItemBlock(EBlocks.DARK_OAK_CRUCIBLE); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/registry/ELootFunctions.java b/src/main/java/thedarkcolour/exnihiloreborn/registry/ELootFunctions.java new file mode 100644 index 00000000..94868709 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/registry/ELootFunctions.java @@ -0,0 +1,18 @@ +package thedarkcolour.exnihiloreborn.registry; + +import net.minecraft.loot.LootFunctionType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.loot.InfestedString; + +public class ELootFunctions { + public static final LootFunctionType INFESTED_STRING = register("infested_string", new LootFunctionType(new InfestedString.Serializer())); + + // Trigger classloading + public static void init() {} + + private static LootFunctionType register(String name, LootFunctionType type) { + return Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(ExNihiloReborn.ID, name), type); + } +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/registry/ERecipeSerializers.java b/src/main/java/thedarkcolour/exnihiloreborn/registry/ERecipeSerializers.java new file mode 100644 index 00000000..9d0b6a65 --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/registry/ERecipeSerializers.java @@ -0,0 +1,30 @@ +package thedarkcolour.exnihiloreborn.registry; + +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.recipe.RewardRecipe; +import thedarkcolour.exnihiloreborn.recipe.barrel.BarrelCompostRecipe; +import thedarkcolour.exnihiloreborn.recipe.crucible.CrucibleRecipe; +import thedarkcolour.exnihiloreborn.recipe.hammer.CompressedHammerRecipe; +import thedarkcolour.exnihiloreborn.recipe.hammer.HammerRecipe; +import thedarkcolour.exnihiloreborn.recipe.sieve.AbstractSieveRecipe; +import thedarkcolour.exnihiloreborn.recipe.sieve.CompressedSieveRecipe; +import thedarkcolour.exnihiloreborn.recipe.sieve.SieveRecipe; + +public class ERecipeSerializers { + public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, ExNihiloReborn.ID); + + public static final RegistryObject> BARREL_COMPOST = RECIPE_SERIALIZERS.register("barrel_compost", BarrelCompostRecipe.Serializer::new); + + public static final RegistryObject> HAMMER = RECIPE_SERIALIZERS.register("hammer", () -> new RewardRecipe.Serializer<>(HammerRecipe::new)); + public static final RegistryObject> COMPRESSED_HAMMER = RECIPE_SERIALIZERS.register("compressed_hammer", () -> new RewardRecipe.Serializer<>(CompressedHammerRecipe::new)); + + public static final RegistryObject> LAVA_CRUCIBLE = RECIPE_SERIALIZERS.register("lava_crucible", () -> new CrucibleRecipe.Serializer(ERecipeTypes.LAVA_CRUCIBLE)); + public static final RegistryObject> WATER_CRUCIBLE = RECIPE_SERIALIZERS.register("water_crucible", () -> new CrucibleRecipe.Serializer(ERecipeTypes.WATER_CRUCIBLE)); + + public static final RegistryObject> SIEVE = RECIPE_SERIALIZERS.register("sieve", () -> new AbstractSieveRecipe.Serializer<>(SieveRecipe::new)); + public static final RegistryObject> COMPRESSED_SIEVE = RECIPE_SERIALIZERS.register("compressed_sieve", () -> new AbstractSieveRecipe.Serializer<>(CompressedSieveRecipe::new)); +} diff --git a/src/main/java/thedarkcolour/exnihiloreborn/registry/ERecipeTypes.java b/src/main/java/thedarkcolour/exnihiloreborn/registry/ERecipeTypes.java new file mode 100644 index 00000000..d891438f --- /dev/null +++ b/src/main/java/thedarkcolour/exnihiloreborn/registry/ERecipeTypes.java @@ -0,0 +1,27 @@ +package thedarkcolour.exnihiloreborn.registry; + +import net.minecraft.world.item.crafting.RecipeType; +import thedarkcolour.exnihiloreborn.ExNihiloReborn; +import thedarkcolour.exnihiloreborn.recipe.barrel.BarrelCompostRecipe; +import thedarkcolour.exnihiloreborn.recipe.crucible.CrucibleRecipe; +import thedarkcolour.exnihiloreborn.recipe.hammer.CompressedHammerRecipe; +import thedarkcolour.exnihiloreborn.recipe.hammer.HammerRecipe; +import thedarkcolour.exnihiloreborn.recipe.sieve.CompressedSieveRecipe; +import thedarkcolour.exnihiloreborn.recipe.sieve.SieveRecipe; + +public class ERecipeTypes { + public static final RecipeType BARREL_COMPOST = RecipeType.register(ExNihiloReborn.ID + ":barrel_compost"); + + public static final RecipeType LAVA_CRUCIBLE = RecipeType.register(ExNihiloReborn.ID + ":lava_crucible"); + public static final RecipeType WATER_CRUCIBLE = RecipeType.register(ExNihiloReborn.ID + ":water_crucible"); + + public static final RecipeType HAMMER = RecipeType.register(ExNihiloReborn.ID + ":hammer"); + public static final RecipeType COMPRESSED_HAMMER = RecipeType.register(ExNihiloReborn.ID + ":compressed_hammer"); + + + public static final RecipeType SIEVE = RecipeType.register(ExNihiloReborn.ID + ":sieve"); + public static final RecipeType COMPRESSED_SIEVE = RecipeType.register(ExNihiloReborn.ID + ":compressed_sieve"); + + // Trigger classloading + public static void init() {} +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 00000000..9f0a08ed --- /dev/null +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1,3 @@ +public net.minecraft.world.item.crafting.RecipeManager m_44054_(Lnet/minecraft/world/item/crafting/RecipeType;)Ljava/util/Map; # byType +public net.minecraft.client.renderer.texture.TextureAtlasSprite f_118349_ # x +public net.minecraft.client.renderer.texture.TextureAtlasSprite f_118350_ # y diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 00000000..4723424a --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,26 @@ +modLoader="javafml" +loaderVersion="[36,)" +license="All rights reserved" + +[[mods]] +modId="exnihiloreborn" +version="${file.jarVersion}" +displayName="Ex Nihilo Reborn" +credits="Herobrine knows all." +authors="TheDarkColour" +description=''' +Gives life to the original Ex Nihilo. +''' +[[dependencies.exnihiloreborn]] + modId="forge" + mandatory=true + versionRange="[36,)" + ordering="NONE" + side="BOTH" + +[[dependencies.exnihiloreborn]] + modId="minecraft" + mandatory=true + versionRange="[1.16.5,1.17)" + ordering="NONE" + side="BOTH" diff --git a/src/main/resources/assets/exnihiloreborn/blockstates/infested_leaves.json b/src/main/resources/assets/exnihiloreborn/blockstates/infested_leaves.json new file mode 100644 index 00000000..217f92e3 --- /dev/null +++ b/src/main/resources/assets/exnihiloreborn/blockstates/infested_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "exnihiloreborn:block/infested_leaves" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/exnihiloreborn/models/block/infested_leaves.json b/src/main/resources/assets/exnihiloreborn/models/block/infested_leaves.json new file mode 100644 index 00000000..8a9be127 --- /dev/null +++ b/src/main/resources/assets/exnihiloreborn/models/block/infested_leaves.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/oak_leaves" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/exnihiloreborn/models/block/old_crucible.json b/src/main/resources/assets/exnihiloreborn/models/block/old_crucible.json new file mode 100644 index 00000000..04db1c15 --- /dev/null +++ b/src/main/resources/assets/exnihiloreborn/models/block/old_crucible.json @@ -0,0 +1,257 @@ +{ + "ambientocclusion": false, + "parent": "minecraft:block/block", + "elements": [ + { + "from": [0, 3, 0], + "to": [2, 16, 16], + "faces": { + "down": {"texture": "#inside"}, + "up": {"texture": "#top", "cullface": "up"}, + "north": {"texture": "#side", "cullface": "north"}, + "south": {"texture": "#side", "cullface": "south"}, + "west": {"texture": "#side", "cullface": "west"}, + "east": {"texture": "#side"} + } + }, + { + "from": [2, 3, 2], + "to": [14, 4, 14], + "faces": { + "down": {"texture": "#inside"}, + "up": {"texture": "#inside", "cullface": "up"}, + "north": {"texture": "#side", "cullface": "north"}, + "south": { + "texture": "#side", + "cullface": "south" + }, + "west": { + "texture": "#side", + "cullface": "west" + }, + "east": { + "texture": "#side", + "cullface": "east" + } + } + }, + { + "from": [ + 14, + 3, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#inside" + }, + "up": { + "texture": "#top", + "cullface": "up" + }, + "north": { + "texture": "#side", + "cullface": "north" + }, + "south": { + "texture": "#side", + "cullface": "south" + }, + "west": { + "texture": "#side" + }, + "east": { + "texture": "#side", + "cullface": "east" + } + } + }, + { + "from": [ + 2, + 3, + 0 + ], + "to": [ + 14, + 16, + 2 + ], + "faces": { + "down": { + "texture": "#inside" + }, + "up": { + "texture": "#top", + "cullface": "up" + }, + "north": { + "texture": "#side", + "cullface": "north" + }, + "south": { + "texture": "#side" + }, + "west": { + "texture": "#side", + "cullface": "west" + }, + "east": { + "texture": "#side", + "cullface": "east" + } + } + }, + { + "from": [ + 2, + 3, + 14 + ], + "to": [ + 14, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#inside" + }, + "up": { + "texture": "#top", + "cullface": "up" + }, + "north": { + "texture": "#side" + }, + "south": { + "texture": "#side", + "cullface": "south" + }, + "west": { + "texture": "#side", + "cullface": "west" + }, + "east": { + "texture": "#side", + "cullface": "east" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 4, + 3, + 2 + ], + "faces": { + "down": { + "texture": "#bottom" + }, + "up": { + "texture": "#top" + }, + "north": { + "texture": "#side" + }, + "south": {"texture": "#side"}, + "west": {"texture": "#side"}, + "east": {"texture": "#side"} + } + }, + { + "from": [0, 0, 2], + "to": [2, 3, 4], + "faces": { + "down": {"texture": "#bottom"}, + "up": {"texture": "#top"}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side"}, + "east": {"texture": "#side"} + } + }, + { + "from": [12, 0, 0], + "to": [16, 3, 2], + "faces": { + "down": {"texture": "#bottom"}, + "up": {"texture": "#top"}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side"}, + "east": {"texture": "#side"} + } + }, + { + "from": [14, 0, 2], + "to": [16, 3, 4], + "faces": { + "down": {"texture": "#bottom"}, + "up": {"texture": "#top"}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side"}, + "east": {"texture": "#side"} + } + }, + { + "from": [0, 0, 14], + "to": [4, 3, 16], + "faces": { + "down": {"texture": "#bottom"}, + "up": {"texture": "#top"}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side"}, + "east": {"texture": "#side"} + } + }, + { + "from": [0, 0, 12], + "to": [2, 3, 14], + "faces": { + "down": {"texture": "#bottom"}, + "up": {"texture": "#top"}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side"}, + "east": {"texture": "#side"} + } + }, + { + "from": [12, 0, 14], + "to": [16, 3, 16], + "faces": { + "down": {"texture": "#bottom"}, + "up": {"texture": "#top"}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side"}, + "east": {"texture": "#side"} + } + }, + { + "from": [14, 0, 12], + "to": [16, 3, 14], + "faces": { + "down": {"texture": "#bottom"}, + "up": {"texture": "#top"}, + "north": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side"}, + "east": {"texture": "#side"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/exnihiloreborn/models/block/template_barrel.json b/src/main/resources/assets/exnihiloreborn/models/block/template_barrel.json new file mode 100644 index 00000000..8cb7848a --- /dev/null +++ b/src/main/resources/assets/exnihiloreborn/models/block/template_barrel.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "particle": "#barrel" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [2, 16, 15], + "faces": { + "north": {"uv": [14, 0, 15, 16], "texture": "#barrel"}, + "east": {"uv": [1, 0, 15, 16], "texture": "#barrel"}, + "south": {"uv": [1, 0, 2, 16], "texture": "#barrel"}, + "west": {"uv": [1, 0, 15, 16], "texture": "#barrel"}, + "up": {"uv": [14, 1, 15, 15], "texture": "#barrel", "cullface": "up"}, + "down": {"uv": [1, 1, 2, 15], "texture": "#barrel", "cullface": "down"} + } + }, + { + "from": [2, 0, 2], + "to": [14, 1, 14], + "faces": { + "up": {"uv": [2, 2, 14, 14], "texture": "#barrel"}, + "down": {"uv": [14, 2, 2, 14], "texture": "#barrel", "cullface": "down"} + } + }, + { + "from": [2, 0, 14], + "to": [14, 16, 15], + "faces": { + "north": {"uv": [2, 0, 14, 16], "texture": "#barrel"}, + "south": {"uv": [2, 0, 14, 16], "texture": "#barrel"}, + "up": {"uv": [2, 1, 14, 2], "texture": "#barrel", "cullface": "up"}, + "down": {"uv": [2, 1, 14, 2], "texture": "#barrel", "cullface": "down"} + } + }, + { + "from": [2, 0, 1], + "to": [14, 16, 2], + "faces": { + "north": {"uv": [2, 0, 14, 16], "texture": "#barrel"}, + "south": {"uv": [2, 0, 14, 16], "texture": "#barrel"}, + "up": {"uv": [2, 14, 14, 15], "texture": "#barrel", "cullface": "up"}, + "down": {"uv": [2, 14, 14, 15], "texture": "#barrel", "cullface": "down"} + } + }, + { + "from": [14, 0, 1], + "to": [15, 16, 15], + "faces": { + "north": {"uv": [1, 0, 2, 16], "texture": "#barrel"}, + "east": {"uv": [1, 0, 15, 16], "texture": "#barrel"}, + "south": {"uv": [14, 0, 15, 16], "texture": "#barrel"}, + "west": {"uv": [1, 0, 15, 16], "texture": "#barrel"}, + "up": {"uv": [1, 1, 2, 15], "texture": "#barrel", "cullface": "up"}, + "down": {"uv": [14, 1, 15, 15], "texture": "#barrel", "cullface": "down"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/exnihiloreborn/models/block/template_crucible.json b/src/main/resources/assets/exnihiloreborn/models/block/template_crucible.json new file mode 100644 index 00000000..eb988696 --- /dev/null +++ b/src/main/resources/assets/exnihiloreborn/models/block/template_crucible.json @@ -0,0 +1,145 @@ +{ + "ambientocclusion": false, + "parent": "minecraft:block/block", + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [ 0, 3, 0 ], + "to": [ 2, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 2 ], + "to": [ 14, 4, 14 ], + "faces": { + "up": { "texture": "#inside", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 14, 3, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 0 ], + "to": [ 14, 16, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "up" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 2, 3, 14 ], + "to": [ 14, 16, 16 ], + "faces": { + "north": { "texture": "#side", "cullface": "up" }, + "south": { "texture": "#side", "cullface": "south" }, + "up": { "texture": "#top", "cullface": "up" }, + "down": { "texture": "#inside" } + } + }, + { + "from": [ 0, 0, 0 ], + "to": [ 4, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 2 ], + "to": [ 2, 3, 4 ], + "faces": { + "east": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 0 ], + "to": [ 16, 3, 2 ], + "faces": { + "north": { "texture": "#side", "cullface": "north" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 2 ], + "to": [ 16, 3, 4 ], + "faces": { + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 14 ], + "to": [ 4, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 0, 0, 12 ], + "to": [ 2, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side" }, + "west": { "texture": "#side", "cullface": "west" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 12, 0, 14 ], + "to": [ 16, 3, 16 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + }, + { + "from": [ 14, 0, 12 ], + "to": [ 16, 3, 14 ], + "faces": { + "north": { "texture": "#side" }, + "east": { "texture": "#side", "cullface": "east" }, + "west": { "texture": "#side" }, + "down": { "texture": "#bottom", "cullface": "down" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/exnihiloreborn/models/block/template_sieve.json b/src/main/resources/assets/exnihiloreborn/models/block/template_sieve.json new file mode 100644 index 00000000..66e3195b --- /dev/null +++ b/src/main/resources/assets/exnihiloreborn/models/block/template_sieve.json @@ -0,0 +1,105 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "#texture" + }, + "name": "blockSieve", + "elements": [ + { + "from": [ 0, 11, 0 ], + "to": [ 15, 16, 1 ], + "faces": { + "up": { "texture": "#texture"}, + "down": { "texture": "#texture"}, + "north": { "texture": "#texture"}, + "south": { "texture": "#texture"}, + "west": { "texture": "#texture"}, + "east": { "texture": "#texture" } + } + }, + { + "from": [ 15, 11, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "up": { "texture": "#texture"}, + "down": { "texture": "#texture"}, + "north": { "texture": "#texture"}, + "south": { "texture": "#texture"}, + "west": { "texture": "#texture"}, + "east": { "texture": "#texture" } + } + }, + { + "from": [ 1, 11, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "up": { "texture": "#texture"}, + "down": { "texture": "#texture"}, + "north": { "texture": "#texture"}, + "south": { "texture": "#texture"}, + "west": { "texture": "#texture"}, + "east": { "texture": "#texture" } + } + }, + { + "from": [ 0, 11, 1 ], + "to": [ 1, 16, 16 ], + "faces": { + "up": { "texture": "#texture"}, + "down": { "texture": "#texture"}, + "north": { "texture": "#texture"}, + "south": { "texture": "#texture"}, + "west": { "texture": "#texture"}, + "east": { "texture": "#texture" } + } + }, + { + "from": [1, 0, 1], + "to": [2, 16, 2], + "faces": { + "up": { "texture": "#texture"}, + "down": { "texture": "#texture"}, + "north": { "texture": "#texture"}, + "south": { "texture": "#texture"}, + "west": { "texture": "#texture"}, + "east": { "texture": "#texture" } + } + }, + { + "from": [1, 0, 14], + "to": [2, 16, 15], + "faces": { + "up": { "texture": "#texture"}, + "down": { "texture": "#texture"}, + "north": { "texture": "#texture"}, + "south": { "texture": "#texture"}, + "west": { "texture": "#texture"}, + "east": { "texture": "#texture" } + } + }, + { + "from": [14, 0, 1], + "to": [15, 16, 2], + "faces": { + "up": { "texture": "#texture"}, + "down": { "texture": "#texture"}, + "north": { "texture": "#texture"}, + "south": { "texture": "#texture"}, + "west": { "texture": "#texture"}, + "east": { "texture": "#texture" } + } + }, + { + "from": [14, 0, 14], + "to": [15, 16, 15], + "faces": { + "up": { "texture": "#texture"}, + "down": { "texture": "#texture"}, + "north": { "texture": "#texture"}, + "south": { "texture": "#texture"}, + "west": { "texture": "#texture"}, + "east": { "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/compost_dirt.png b/src/main/resources/assets/exnihiloreborn/textures/block/compost_dirt.png new file mode 100644 index 00000000..5044f4b4 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/compost_dirt.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/crushed_end_stone.png b/src/main/resources/assets/exnihiloreborn/textures/block/crushed_end_stone.png new file mode 100644 index 00000000..3a6350be Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/crushed_end_stone.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/crushed_netherrack.png b/src/main/resources/assets/exnihiloreborn/textures/block/crushed_netherrack.png new file mode 100644 index 00000000..affd1052 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/crushed_netherrack.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/dust.png b/src/main/resources/assets/exnihiloreborn/textures/block/dust.png new file mode 100644 index 00000000..1aea2676 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/dust.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/porcelain_crucible.png b/src/main/resources/assets/exnihiloreborn/textures/block/porcelain_crucible.png new file mode 100644 index 00000000..ae4f6558 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/porcelain_crucible.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/unfired_crucible.png b/src/main/resources/assets/exnihiloreborn/textures/block/unfired_crucible.png new file mode 100644 index 00000000..05ca6923 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/unfired_crucible.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.pdn b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.pdn new file mode 100644 index 00000000..9769f0f5 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.pdn differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.png b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.png new file mode 100644 index 00000000..0f2c4f08 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.png.mcmeta b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.pdn b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.pdn new file mode 100644 index 00000000..a257952c Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.pdn differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.png b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.png new file mode 100644 index 00000000..1fc70ed8 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.png.mcmeta b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/src/main/resources/assets/exnihiloreborn/textures/block/witch_water_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/bone_crook.png b/src/main/resources/assets/exnihiloreborn/textures/item/bone_crook.png new file mode 100644 index 00000000..f8282b39 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/bone_crook.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/cooked_silk_worm.png b/src/main/resources/assets/exnihiloreborn/textures/item/cooked_silk_worm.png new file mode 100644 index 00000000..8cbd0aca Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/cooked_silk_worm.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/crook.png b/src/main/resources/assets/exnihiloreborn/textures/item/crook.png new file mode 100644 index 00000000..dcbfe96e Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/crook.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/diamond_hammer.png b/src/main/resources/assets/exnihiloreborn/textures/item/diamond_hammer.png new file mode 100644 index 00000000..a8294bd4 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/diamond_hammer.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/golden_hammer.png b/src/main/resources/assets/exnihiloreborn/textures/item/golden_hammer.png new file mode 100644 index 00000000..9821b7a7 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/golden_hammer.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/iron_hammer.png b/src/main/resources/assets/exnihiloreborn/textures/item/iron_hammer.png new file mode 100644 index 00000000..1cd543da Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/iron_hammer.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/silk_worm.png b/src/main/resources/assets/exnihiloreborn/textures/item/silk_worm.png new file mode 100644 index 00000000..90a981e2 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/silk_worm.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/stone_hammer.png b/src/main/resources/assets/exnihiloreborn/textures/item/stone_hammer.png new file mode 100644 index 00000000..8b54ecbc Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/stone_hammer.png differ diff --git a/src/main/resources/assets/exnihiloreborn/textures/item/wooden_hammer.png b/src/main/resources/assets/exnihiloreborn/textures/item/wooden_hammer.png new file mode 100644 index 00000000..9c440330 Binary files /dev/null and b/src/main/resources/assets/exnihiloreborn/textures/item/wooden_hammer.png differ diff --git a/src/main/resources/data/exnihiloreborn/loot_modifiers/compressed_hammer.json b/src/main/resources/data/exnihiloreborn/loot_modifiers/compressed_hammer.json new file mode 100644 index 00000000..aab14377 --- /dev/null +++ b/src/main/resources/data/exnihiloreborn/loot_modifiers/compressed_hammer.json @@ -0,0 +1,10 @@ +{ + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "tag": "exnihiloreborn:compressed_hammers" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/exnihiloreborn/loot_modifiers/crook.json b/src/main/resources/data/exnihiloreborn/loot_modifiers/crook.json new file mode 100644 index 00000000..3204ef8d --- /dev/null +++ b/src/main/resources/data/exnihiloreborn/loot_modifiers/crook.json @@ -0,0 +1,10 @@ +{ + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "tag": "exnihiloreborn:crooks" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/exnihiloreborn/loot_modifiers/hammer.json b/src/main/resources/data/exnihiloreborn/loot_modifiers/hammer.json new file mode 100644 index 00000000..a464d3e8 --- /dev/null +++ b/src/main/resources/data/exnihiloreborn/loot_modifiers/hammer.json @@ -0,0 +1,10 @@ +{ + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "tag": "exnihiloreborn:hammers" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json b/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json new file mode 100644 index 00000000..de7885f8 --- /dev/null +++ b/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "entries":[ + "exnihiloreborn:crook", + "exnihiloreborn:hammer", + "exnihiloreborn:compressed_hammer" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 00000000..87c40c61 --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Ex Nihilo Reborn resources", + "pack_format": 6 + } +}