diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000..dfe0770424
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..be328f581f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,28 @@
+# gradle
+
+.gradle/
+build/
+out/
+classes/
+
+# idea
+
+.idea/
+*.iml
+*.ipr
+*.iws
+
+# vscode
+
+.settings/
+.vscode/
+bin/
+.classpath
+.project
+
+# fabric
+
+run/
+backup/
+/deps/
+/remappedSrc/
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000..a3976385b2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,12 @@
+## About GlobalSpawn
+
+Global spawn lets you set a default spawn for all players.
+Unlike vanialla that spawn can even be in a separate dimension.
+Useful for modpacks that start in the Nether or other dimensions.
+
+## Features
+
+Configure the global spawn via:
+- Config file
+- Mod Menu
+- or "/globalspawn" command
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000000..361701d473
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,92 @@
+plugins {
+ id 'fabric-loom' version '0.5-SNAPSHOT'
+ id 'maven-publish'
+}
+
+sourceCompatibility = JavaVersion.VERSION_1_8
+targetCompatibility = JavaVersion.VERSION_1_8
+
+archivesBaseName = project.archives_base_name
+version = project.mod_version
+group = project.maven_group
+
+minecraft {
+ //accessWidener = file("src/main/resources/starry_sky.accesswidener")
+}
+
+repositories {
+ maven {
+ name = "Ladysnake Libs"
+ url = 'https://dl.bintray.com/ladysnake/libs'
+ }
+ maven {
+ url 'https://maven.fabricmc.net/io/github/prospector/modmenu/'
+ }
+ maven {
+ name "cotton-config"
+ url 'http://server.bbkr.space:8081/artifactory/libs-release'
+ }
+
+}
+
+dependencies {
+ //to change the versions see the gradle.properties file
+ minecraft "com.mojang:minecraft:${project.minecraft_version}"
+ mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
+ modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
+
+ modImplementation ("net.fabricmc.fabric-api:fabric-api:${project.fabric_version}") {
+ force = true //Force the version we want rather than trusting Gradle to pick it over transitive suggestions
+ }
+
+ modImplementation ("me.shedaniel.cloth:config-2:${project.cloth_config_version}"){
+ exclude module: 'fabric-api'
+ }
+ include ("me.shedaniel.cloth:config-2:${project.cloth_config_version}"){
+ exclude module: 'fabric-api'
+ }
+
+ modImplementation ("me.sargunvohra.mcmods:autoconfig1u:${project.auto_config_version}"){
+ exclude module: 'fabric-api'
+ }
+ include ("me.sargunvohra.mcmods:autoconfig1u:${project.auto_config_version}"){
+ exclude module: 'fabric-api'
+ }
+
+ modImplementation ("io.github.prospector:modmenu:${project.mod_menu_version}"){
+ exclude module: 'fabric-api'
+ }
+
+}
+
+processResources {
+ inputs.property "version", project.version
+
+ from(sourceSets.main.resources.srcDirs) {
+ include "fabric.mod.json"
+ expand "version": project.version
+ }
+
+ from(sourceSets.main.resources.srcDirs) {
+ exclude "fabric.mod.json"
+ }
+}
+
+// ensure that the encoding is set to UTF-8, no matter what the system default is
+// this fixes some edge cases with special characters not displaying correctly
+// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
+tasks.withType(JavaCompile) {
+ options.encoding = "UTF-8"
+}
+
+// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
+// if it is present.
+// If you remove this task, sources will not be generated.
+task sourcesJar(type: Jar, dependsOn: classes) {
+ classifier = "sources"
+ from sourceSets.main.allSource
+}
+
+jar {
+ from "LICENSE"
+}
diff --git a/client.launch b/client.launch
new file mode 100644
index 0000000000..832ed453d7
--- /dev/null
+++ b/client.launch
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000000..35cf4f87bc
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,20 @@
+# Done to increase the memory available to gradle.
+org.gradle.jvmargs = -Xmx2G
+
+# Fabric Properties
+# check these on https://fabricmc.net/use
+minecraft_version=20w49a
+yarn_mappings=20w49a+build.5
+loader_version=0.10.8
+
+# Mod Properties
+mod_version = 1.0.0-1.16.4
+maven_group = de.dafuqs.spectrum
+archives_base_name = spectrum
+
+# Dependencies
+# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
+fabric_version=0.27.2+1.17
+auto_config_version = 3.2.0-unstable
+cloth_config_version = 4.7.0-unstable
+mod_menu_version = 1.14.6+build.31
\ 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 0000000000..5c2d1cf016
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 0000000000..4b7e1f3d38
--- /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-5.5.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000000..8e25e6c19d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,188 @@
+#!/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, switch paths to Windows format before running java
+if $cygwin ; 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=$((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"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000000..9618d8d960
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,100 @@
+@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 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 init
+
+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 init
+
+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
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+: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 %CMD_LINE_ARGS%
+
+: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/images/icon.xcf b/images/icon.xcf
new file mode 100644
index 0000000000..67e92e2a76
Binary files /dev/null and b/images/icon.xcf differ
diff --git a/server.launch b/server.launch
new file mode 100644
index 0000000000..832ed453d7
--- /dev/null
+++ b/server.launch
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000000..5b60df3d25
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,10 @@
+pluginManagement {
+ repositories {
+ jcenter()
+ maven {
+ name = 'Fabric'
+ url = 'https://maven.fabricmc.net/'
+ }
+ gradlePluginPortal()
+ }
+}
diff --git a/src/main/java/de/dafuqs/spectrum/MixinHandler.java b/src/main/java/de/dafuqs/spectrum/MixinHandler.java
new file mode 100644
index 0000000000..2b7b576dc3
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/MixinHandler.java
@@ -0,0 +1,38 @@
+package de.dafuqs.spectrum;
+
+import de.dafuqs.spectrum.enchantments.SpectrumEnchantments;
+import de.dafuqs.spectrum.items.misc.Spawner;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.block.entity.MobSpawnerBlockEntity;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.item.ItemStack;
+import net.minecraft.sound.SoundCategory;
+import net.minecraft.sound.SoundEvents;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+import org.jetbrains.annotations.Nullable;
+
+public class MixinHandler {
+
+ public static boolean checkResonanceForSpawnerMining(World world, PlayerEntity entity, BlockPos pos, BlockState blockState, @Nullable BlockEntity blockEntity, ItemStack stack) {
+ if (blockState.equals(Blocks.SPAWNER.getDefaultState())) {
+ if (EnchantmentHelper.getLevel(SpectrumEnchantments.SUPER_SILK, stack) > 0) {
+ if (blockEntity instanceof MobSpawnerBlockEntity) {
+ ItemStack itemStack = Spawner.fromBlockEntity(blockEntity);
+
+ Block.dropStack(world, pos, itemStack);
+ world.playSound(null, pos, SoundEvents.BLOCK_METAL_BREAK, SoundCategory.BLOCKS, 1.0F, 0.8F + world.random.nextFloat() * 0.4F);
+ world.setBlockState(pos, Blocks.AIR.getDefaultState());
+ return true;
+ }
+ }
+
+ }
+ return false;
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumClient.java b/src/main/java/de/dafuqs/spectrum/SpectrumClient.java
new file mode 100644
index 0000000000..d2a417fcd2
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/SpectrumClient.java
@@ -0,0 +1,12 @@
+package de.dafuqs.spectrum;
+
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import net.fabricmc.api.ClientModInitializer;
+
+public class SpectrumClient implements ClientModInitializer {
+
+ @Override
+ public void onInitializeClient() {
+ SpectrumBlocks.registerClient();
+ }
+}
diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java
new file mode 100644
index 0000000000..ec1c8ce8b5
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java
@@ -0,0 +1,33 @@
+package de.dafuqs.spectrum;
+
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import de.dafuqs.spectrum.config.SpectrumConfig;
+import de.dafuqs.spectrum.enchantments.SpectrumEnchantments;
+import de.dafuqs.spectrum.items.SpectrumItems;
+import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
+import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer;
+import net.fabricmc.api.ModInitializer;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class SpectrumCommon implements ModInitializer {
+
+ public static final String MOD_ID = "spectrum";
+ public static SpectrumConfig GLOBAL_SPAWN_CONFIG;
+ public static final Logger LOGGER = LogManager.getLogger(MOD_ID);
+
+ @Override
+ public void onInitialize() {
+
+ //Set up config
+ LOGGER.info("Loading config file...");
+ AutoConfig.register(SpectrumConfig.class, JanksonConfigSerializer::new);
+ GLOBAL_SPAWN_CONFIG = AutoConfig.getConfigHolder(SpectrumConfig.class).getConfig();
+ LOGGER.info("Finished loading config file.");
+
+ SpectrumBlocks.register();
+ SpectrumItems.register();
+ SpectrumEnchantments.register();
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingCitrineBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingCitrineBlock.java
new file mode 100644
index 0000000000..66354655a6
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingCitrineBlock.java
@@ -0,0 +1,32 @@
+package de.dafuqs.spectrum.blocks.BuddingBlocks;
+
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import net.minecraft.block.Block;
+
+public class BuddingCitrineBlock extends BuddingSpectrumBlock {
+
+ public BuddingCitrineBlock(Settings settings) {
+ super(settings);
+ }
+
+ @Override
+ protected Block getSmall() {
+ return SpectrumBlocks.SMALL_CITRINE_BUD;
+ }
+
+ @Override
+ protected Block getMedium() {
+ return SpectrumBlocks.MEDIUM_CITRINE_BUD;
+ }
+
+ @Override
+ protected Block getLarge() {
+ return SpectrumBlocks.LARGE_CITRINE_BUD;
+ }
+
+ @Override
+ protected Block getCluster() {
+ return SpectrumBlocks.CITRINE_CLUSTER;
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingMoonstoneBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingMoonstoneBlock.java
new file mode 100644
index 0000000000..cb94098d97
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingMoonstoneBlock.java
@@ -0,0 +1,32 @@
+package de.dafuqs.spectrum.blocks.BuddingBlocks;
+
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import net.minecraft.block.Block;
+
+public class BuddingMoonstoneBlock extends BuddingSpectrumBlock {
+
+ public BuddingMoonstoneBlock(Settings settings) {
+ super(settings);
+ }
+
+ @Override
+ protected Block getSmall() {
+ return SpectrumBlocks.SMALL_MOONSTONE_BUD;
+ }
+
+ @Override
+ protected Block getMedium() {
+ return SpectrumBlocks.MEDIUM_MOONSTONE_BUD;
+ }
+
+ @Override
+ protected Block getLarge() {
+ return SpectrumBlocks.LARGE_MOONSTONE_BUD;
+ }
+
+ @Override
+ protected Block getCluster() {
+ return SpectrumBlocks.MOONSTONE_CLUSTER;
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingOnyxBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingOnyxBlock.java
new file mode 100644
index 0000000000..cad6da7fed
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingOnyxBlock.java
@@ -0,0 +1,32 @@
+package de.dafuqs.spectrum.blocks.BuddingBlocks;
+
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import net.minecraft.block.Block;
+
+public class BuddingOnyxBlock extends BuddingSpectrumBlock {
+
+ public BuddingOnyxBlock(Settings settings) {
+ super(settings);
+ }
+
+ @Override
+ protected Block getSmall() {
+ return SpectrumBlocks.SMALL_ONYX_BUD;
+ }
+
+ @Override
+ protected Block getMedium() {
+ return SpectrumBlocks.MEDIUM_ONYX_BUD;
+ }
+
+ @Override
+ protected Block getLarge() {
+ return SpectrumBlocks.LARGE_ONYX_BUD;
+ }
+
+ @Override
+ protected Block getCluster() {
+ return SpectrumBlocks.ONYX_CLUSTER;
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingSpectrumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingSpectrumBlock.java
new file mode 100644
index 0000000000..5de8a5fb20
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingSpectrumBlock.java
@@ -0,0 +1,52 @@
+package de.dafuqs.spectrum.blocks.BuddingBlocks;
+
+import net.minecraft.block.AmethystClusterBlock;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.BuddingAmethystBlock;
+import net.minecraft.fluid.Fluids;
+import net.minecraft.server.world.ServerWorld;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+
+import java.util.Random;
+
+public abstract class BuddingSpectrumBlock extends BuddingAmethystBlock {
+
+ private static final Direction[] DIRECTIONS = Direction.values();
+
+ public BuddingSpectrumBlock(Settings settings) {
+ super(settings);
+ }
+
+ protected abstract Block getSmall();
+ protected abstract Block getMedium();
+ protected abstract Block getLarge();
+ protected abstract Block getCluster();
+
+ @Override
+ public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
+ if (random.nextInt(5) == 0) {
+ Direction direction = DIRECTIONS[random.nextInt(DIRECTIONS.length)];
+ BlockPos blockPos = pos.offset(direction);
+ BlockState blockState = world.getBlockState(blockPos);
+ Block block = null;
+ if (BuddingAmethystBlock.method_31626(blockState)) {
+ block = getSmall();
+ } else if (blockState.isOf(getSmall()) && blockState.get(AmethystClusterBlock.FACING) == direction) {
+ block = getMedium();
+ } else if (blockState.isOf(getMedium()) && blockState.get(AmethystClusterBlock.FACING) == direction) {
+ block = getLarge();
+ } else if (blockState.isOf(getLarge()) && blockState.get(AmethystClusterBlock.FACING) == direction) {
+ block = getCluster();
+ }
+
+ if (block != null) {
+ BlockState blockState2 = (block.getDefaultState().with(AmethystClusterBlock.FACING, direction)).with(AmethystClusterBlock.WATERLOGGED, blockState.getFluidState().getFluid() == Fluids.WATER);
+ world.setBlockState(blockPos, blockState2);
+ }
+
+ }
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingTopazBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingTopazBlock.java
new file mode 100644
index 0000000000..4b58333f4f
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/BuddingBlocks/BuddingTopazBlock.java
@@ -0,0 +1,32 @@
+package de.dafuqs.spectrum.blocks.BuddingBlocks;
+
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import net.minecraft.block.Block;
+
+public class BuddingTopazBlock extends BuddingSpectrumBlock {
+
+ public BuddingTopazBlock(Settings settings) {
+ super(settings);
+ }
+
+ @Override
+ protected Block getSmall() {
+ return SpectrumBlocks.SMALL_TOPAZ_BUD;
+ }
+
+ @Override
+ protected Block getMedium() {
+ return SpectrumBlocks.MEDIUM_TOPAZ_BUD;
+ }
+
+ @Override
+ protected Block getLarge() {
+ return SpectrumBlocks.LARGE_TOPAZ_BUD;
+ }
+
+ @Override
+ protected Block getCluster() {
+ return SpectrumBlocks.TOPAZ_CLUSTER;
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/DirectionalBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/DirectionalBlock.java
new file mode 100644
index 0000000000..659addd248
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/DirectionalBlock.java
@@ -0,0 +1,14 @@
+package de.dafuqs.spectrum.blocks;
+
+import net.minecraft.block.PillarBlock;
+import net.minecraft.util.math.Direction;
+
+public class DirectionalBlock extends PillarBlock {
+
+ public DirectionalBlock(Settings settings) {
+ super(settings);
+ this.setDefaultState((this.stateManager.getDefaultState()).with(AXIS, Direction.Axis.Y));
+ }
+
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/blocks/SpectrumBlocks.java
new file mode 100644
index 0000000000..81e29ad6cb
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/SpectrumBlocks.java
@@ -0,0 +1,266 @@
+package de.dafuqs.spectrum.blocks;
+
+import de.dafuqs.spectrum.SpectrumCommon;
+import de.dafuqs.spectrum.blocks.BuddingBlocks.BuddingCitrineBlock;
+import de.dafuqs.spectrum.blocks.BuddingBlocks.BuddingMoonstoneBlock;
+import de.dafuqs.spectrum.blocks.BuddingBlocks.BuddingOnyxBlock;
+import de.dafuqs.spectrum.blocks.BuddingBlocks.BuddingTopazBlock;
+import de.dafuqs.spectrum.blocks.melon.AttachedGlisteringStemBlock;
+import de.dafuqs.spectrum.blocks.melon.GlisteringMelonBlock;
+import de.dafuqs.spectrum.blocks.melon.GlisteringStemBlock;
+import de.dafuqs.spectrum.items.SpectrumItemSettings;
+import de.dafuqs.spectrum.items.SpectrumItems;
+import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
+import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
+import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
+import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
+import net.minecraft.block.*;
+import net.minecraft.client.render.RenderLayer;
+import net.minecraft.item.BlockItem;
+import net.minecraft.sound.BlockSoundGroup;
+import net.minecraft.state.property.Properties;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+
+import java.util.function.ToIntFunction;
+
+public class SpectrumBlocks {
+
+ private static ToIntFunction createLightLevelFromBlockState(int litLevel) {
+ return (blockState) -> {
+ return (Boolean)blockState.get(Properties.LIT) ? litLevel : 0;
+ };
+ }
+
+ public static FabricItemSettings blockItemSettings = new FabricItemSettings().group(SpectrumItemSettings.ITEM_GROUP_BUILDING);
+
+ // TODO: hardness
+ public static final Block CITRINE_BLOCK = new AmethystBlock(FabricBlockSettings.of(Material.AMETHYST, MapColor.YELLOW).hardness(1.5f).sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+ public static final Block BUDDING_CITRINE = new BuddingCitrineBlock(FabricBlockSettings.of(Material.AMETHYST).hardness(1.5F).ticksRandomly().sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+ public static final Block CITRINE_CLUSTER = new AmethystClusterBlock(7, 3, FabricBlockSettings.of(Material.AMETHYST).hardness(1.5F).nonOpaque().requiresTool().breakByTool(FabricToolTags.PICKAXES, 2).sounds(BlockSoundGroup.AMETHYST_CLUSTER).luminance(createLightLevelFromBlockState(7)));
+ public static final Block LARGE_CITRINE_BUD = new AmethystClusterBlock(5, 3, FabricBlockSettings.copyOf(CITRINE_CLUSTER).sounds(BlockSoundGroup.LARGE_AMETHYST_BUD).luminance(createLightLevelFromBlockState(5)));
+ public static final Block MEDIUM_CITRINE_BUD = new AmethystClusterBlock(4, 3, FabricBlockSettings.copyOf(CITRINE_CLUSTER).sounds(BlockSoundGroup.MEDIUM_AMETHYST_BUD).luminance(createLightLevelFromBlockState(3)));
+ public static final Block SMALL_CITRINE_BUD = new AmethystClusterBlock(3, 4, FabricBlockSettings.copyOf(CITRINE_CLUSTER).sounds(BlockSoundGroup.SMALL_AMETHYST_BUD).luminance(createLightLevelFromBlockState(2)));
+
+ public static final Block TOPAZ_BLOCK = new AmethystBlock(FabricBlockSettings.of(Material.AMETHYST, MapColor.BLUE).hardness(1.5F).sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+ public static final Block BUDDING_TOPAZ = new BuddingTopazBlock(FabricBlockSettings.of(Material.AMETHYST).hardness(1.5F).ticksRandomly().sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+ public static final Block TOPAZ_CLUSTER = new AmethystClusterBlock(7, 3, FabricBlockSettings.of(Material.AMETHYST).hardness(1.5F).nonOpaque().requiresTool().breakByTool(FabricToolTags.PICKAXES, 2).sounds(BlockSoundGroup.AMETHYST_CLUSTER).luminance(createLightLevelFromBlockState(6)));
+ public static final Block LARGE_TOPAZ_BUD = new AmethystClusterBlock(5, 3, FabricBlockSettings.copyOf(TOPAZ_CLUSTER).sounds(BlockSoundGroup.LARGE_AMETHYST_BUD).luminance(createLightLevelFromBlockState(4)));
+ public static final Block MEDIUM_TOPAZ_BUD = new AmethystClusterBlock(4, 3, FabricBlockSettings.copyOf(TOPAZ_CLUSTER).sounds(BlockSoundGroup.MEDIUM_AMETHYST_BUD).luminance(createLightLevelFromBlockState(2)));
+ public static final Block SMALL_TOPAZ_BUD = new AmethystClusterBlock(3, 4, FabricBlockSettings.copyOf(TOPAZ_CLUSTER).sounds(BlockSoundGroup.SMALL_AMETHYST_BUD).luminance(createLightLevelFromBlockState(1)));
+
+ public static final Block ONYX_BLOCK = new AmethystBlock(FabricBlockSettings.of(Material.AMETHYST, MapColor.BLACK).hardness(1.5F).sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+ public static final Block BUDDING_ONYX = new BuddingOnyxBlock(FabricBlockSettings.of(Material.AMETHYST).hardness(1.5F).ticksRandomly().sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+ public static final Block ONYX_CLUSTER = new AmethystClusterBlock(7, 3, FabricBlockSettings.of(Material.AMETHYST).hardness(1.5F).nonOpaque().requiresTool().breakByTool(FabricToolTags.PICKAXES, 2).sounds(BlockSoundGroup.AMETHYST_CLUSTER).luminance(createLightLevelFromBlockState(3)));
+ public static final Block LARGE_ONYX_BUD = new AmethystClusterBlock(5, 3, FabricBlockSettings.copyOf(ONYX_CLUSTER).sounds(BlockSoundGroup.LARGE_AMETHYST_BUD).luminance(createLightLevelFromBlockState(2)));
+ public static final Block MEDIUM_ONYX_BUD = new AmethystClusterBlock(4, 3, FabricBlockSettings.copyOf(ONYX_CLUSTER).sounds(BlockSoundGroup.MEDIUM_AMETHYST_BUD).luminance(createLightLevelFromBlockState(1)));
+ public static final Block SMALL_ONYX_BUD = new AmethystClusterBlock(3, 4, FabricBlockSettings.copyOf(ONYX_CLUSTER).sounds(BlockSoundGroup.SMALL_AMETHYST_BUD).luminance(createLightLevelFromBlockState(0)));
+
+ public static final Block MOONSTONE_BLOCK = new AmethystBlock(FabricBlockSettings.of(Material.AMETHYST, MapColor.WHITE).hardness(1.5F).sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+ public static final Block BUDDING_MOONSTONE = new BuddingMoonstoneBlock(FabricBlockSettings.of(Material.AMETHYST).hardness(1.5F).ticksRandomly().sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+ public static final Block MOONSTONE_CLUSTER = new AmethystClusterBlock(7, 3, FabricBlockSettings.of(Material.AMETHYST).hardness(1.5F).nonOpaque().requiresTool().breakByTool(FabricToolTags.PICKAXES, 2).sounds(BlockSoundGroup.AMETHYST_CLUSTER).luminance(createLightLevelFromBlockState(14)));
+ public static final Block LARGE_MOONSTONE_BUD = new AmethystClusterBlock(5, 3, FabricBlockSettings.copyOf(MOONSTONE_CLUSTER).sounds(BlockSoundGroup.LARGE_AMETHYST_BUD).luminance(createLightLevelFromBlockState(10)));
+ public static final Block MEDIUM_MOONSTONE_BUD = new AmethystClusterBlock(4, 3, FabricBlockSettings.copyOf(MOONSTONE_CLUSTER).sounds(BlockSoundGroup.MEDIUM_AMETHYST_BUD).luminance(createLightLevelFromBlockState(7)));
+ public static final Block SMALL_MOONSTONE_BUD = new AmethystClusterBlock(3, 4, FabricBlockSettings.copyOf(MOONSTONE_CLUSTER).sounds(BlockSoundGroup.SMALL_AMETHYST_BUD).luminance(createLightLevelFromBlockState(4)));
+
+ public static final Block RAINBOW_MOONSTONE_BLOCK = new AmethystBlock(FabricBlockSettings.of(Material.AMETHYST, MapColor.DIAMOND).hardness(1.5F).sounds(BlockSoundGroup.AMETHYST_BLOCK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 2));
+
+ public static final Block TUFF_SLAB = new SlabBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block TUFF_WALL = new WallBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block TUFF_STAIRS = new SpectrumStairsBlock(Blocks.TUFF.getDefaultState(), AbstractBlock.Settings.copy(Blocks.TUFF));
+
+ public static final Block POLISHED_TUFF = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block POLISHED_TUFF_SLAB = new SlabBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block POLISHED_TUFF_WALL = new WallBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block POLISHED_TUFF_STAIRS = new SpectrumStairsBlock(POLISHED_TUFF.getDefaultState(), AbstractBlock.Settings.copy(POLISHED_TUFF));
+
+ public static final Block TUFF_BRICKS = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block TUFF_BRICK_SLAB = new SlabBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block TUFF_BRICK_WALL = new WallBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block TUFF_BRICK_STAIRS = new SpectrumStairsBlock(TUFF_BRICKS.getDefaultState(), AbstractBlock.Settings.copy(TUFF_BRICKS));
+
+ public static final Block AMETHYST_CHISELED_TUFF = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(5));
+ public static final Block TOPAZ_CHISELED_TUFF = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(6));
+ public static final Block CITRINE_CHISELED_TUFF = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(7));
+ public static final Block ONYX_CHISELED_TUFF = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(3));
+ public static final Block MOONSTONE_CHISELED_TUFF = new DirectionalBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(12));
+
+ public static final Block CALCITE_SLAB = new SlabBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block CALCITE_WALL = new WallBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block CALCITE_STAIRS = new SpectrumStairsBlock(Blocks.CALCITE.getDefaultState(), AbstractBlock.Settings.copy(Blocks.CALCITE));
+
+ public static final Block POLISHED_CALCITE = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block POLISHED_CALCITE_SLAB = new SlabBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block POLISHED_CALCITE_WALL = new WallBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block POLISHED_CALCITE_STAIRS = new SpectrumStairsBlock(POLISHED_CALCITE.getDefaultState(), AbstractBlock.Settings.copy(POLISHED_CALCITE));
+
+ public static final Block CALCITE_BRICKS = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block CALCITE_BRICK_SLAB = new SlabBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block CALCITE_BRICK_WALL = new WallBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f));
+ public static final Block CALCITE_BRICK_STAIRS = new SpectrumStairsBlock(CALCITE_BRICKS.getDefaultState(), AbstractBlock.Settings.copy(CALCITE_BRICKS));
+
+ public static final Block AMETHYST_CHISELED_CALCITE = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(5));
+ public static final Block TOPAZ_CHISELED_CALCITE = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(6));
+ public static final Block CITRINE_CHISELED_CALCITE = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(7));
+ public static final Block ONYX_CHISELED_CALCITE = new Block(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(3));
+ public static final Block MOONSTONE_CHISELED_CALCITE = new DirectionalBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f).luminance(12));
+
+ public static final Block GLISTERING_MELON = new GlisteringMelonBlock(FabricBlockSettings.of(Material.GOURD, MapColor.LIME).strength(1.0F).sounds(BlockSoundGroup.WOOD));
+ public static final Block GLISTERING_MELON_STEM = new GlisteringStemBlock((GourdBlock) GLISTERING_MELON, () -> SpectrumItems.GLISTERING_MELON_SEEDS, FabricBlockSettings.of(Material.PLANT).noCollision().nonOpaque().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.STEM));
+ public static final Block ATTACHED_GLISTERING_MELON_STEM = new AttachedGlisteringStemBlock((GourdBlock) GLISTERING_MELON, () -> SpectrumItems.GLISTERING_MELON_SEEDS, FabricBlockSettings.of(Material.PLANT).nonOpaque().noCollision().breakInstantly().sounds(BlockSoundGroup.WOOD));
+
+ private static void registerBlock(String name, Block block) {
+ Registry.register(Registry.BLOCK, new Identifier(SpectrumCommon.MOD_ID, name), block);
+ }
+
+ private static void registerBlockItem(String name, BlockItem blockItem) {
+ Registry.register(Registry.ITEM, new Identifier(SpectrumCommon.MOD_ID, name), blockItem);
+ }
+
+ public static void register() {
+ registerBlock("small_citrine_bud", SMALL_CITRINE_BUD);
+ registerBlockItem("small_citrine_bud", new BlockItem(SMALL_CITRINE_BUD, blockItemSettings));
+ registerBlock("medium_citrine_bud", MEDIUM_CITRINE_BUD);
+ registerBlockItem("medium_citrine_bud", new BlockItem(MEDIUM_CITRINE_BUD, blockItemSettings));
+ registerBlock("large_citrine_bud", LARGE_CITRINE_BUD);
+ registerBlockItem("large_citrine_bud", new BlockItem(LARGE_CITRINE_BUD, blockItemSettings));
+ registerBlock("citrine_cluster", CITRINE_CLUSTER);
+ registerBlockItem("citrine_cluster", new BlockItem(CITRINE_CLUSTER, blockItemSettings));
+ registerBlock("citrine_block", CITRINE_BLOCK);
+ registerBlockItem("citrine_block", new BlockItem(CITRINE_BLOCK, blockItemSettings));
+ registerBlock("budding_citrine", BUDDING_CITRINE);
+ registerBlockItem("budding_citrine", new BlockItem(BUDDING_CITRINE, blockItemSettings));
+ registerBlock("small_topaz_bud", SMALL_TOPAZ_BUD);
+ registerBlockItem("small_topaz_bud", new BlockItem(SMALL_TOPAZ_BUD, blockItemSettings));
+ registerBlock("medium_topaz_bud", MEDIUM_TOPAZ_BUD);
+ registerBlockItem("medium_topaz_bud", new BlockItem(MEDIUM_TOPAZ_BUD, blockItemSettings));
+ registerBlock("large_topaz_bud", LARGE_TOPAZ_BUD);
+ registerBlockItem("large_topaz_bud", new BlockItem(LARGE_TOPAZ_BUD, blockItemSettings));
+ registerBlock("topaz_cluster", TOPAZ_CLUSTER);
+ registerBlockItem("topaz_cluster", new BlockItem(TOPAZ_CLUSTER, blockItemSettings));
+ registerBlock("topaz_block", TOPAZ_BLOCK);
+ registerBlockItem("topaz_block", new BlockItem(TOPAZ_BLOCK, blockItemSettings));
+ registerBlock("budding_topaz", BUDDING_TOPAZ);
+ registerBlockItem("budding_topaz", new BlockItem(BUDDING_TOPAZ, blockItemSettings));
+ registerBlock("small_onyx_bud", SMALL_ONYX_BUD);
+ registerBlockItem("small_onyx_bud", new BlockItem(SMALL_ONYX_BUD, blockItemSettings));
+ registerBlock("medium_onyx_bud", MEDIUM_ONYX_BUD);
+ registerBlockItem("medium_onyx_bud", new BlockItem(MEDIUM_ONYX_BUD, blockItemSettings));
+ registerBlock("large_onyx_bud", LARGE_ONYX_BUD);
+ registerBlockItem("large_onyx_bud", new BlockItem(LARGE_ONYX_BUD, blockItemSettings));
+ registerBlock("onyx_cluster", ONYX_CLUSTER);
+ registerBlockItem("onyx_cluster", new BlockItem(ONYX_CLUSTER, blockItemSettings));
+ registerBlock("onyx_block", ONYX_BLOCK);
+ registerBlockItem("onyx_block", new BlockItem(ONYX_BLOCK, blockItemSettings));
+ registerBlock("budding_onyx", BUDDING_ONYX);
+ registerBlockItem("budding_onyx", new BlockItem(BUDDING_ONYX, blockItemSettings));
+ registerBlock("small_moonstone_bud", SMALL_MOONSTONE_BUD);
+ registerBlockItem("small_moonstone_bud", new BlockItem(SMALL_MOONSTONE_BUD, blockItemSettings));
+ registerBlock("medium_moonstone_bud", MEDIUM_MOONSTONE_BUD);
+ registerBlockItem("medium_moonstone_bud", new BlockItem(MEDIUM_MOONSTONE_BUD, blockItemSettings));
+ registerBlock("large_moonstone_bud", LARGE_MOONSTONE_BUD);
+ registerBlockItem("large_moonstone_bud", new BlockItem(LARGE_MOONSTONE_BUD, blockItemSettings));
+ registerBlock("moonstone_cluster", MOONSTONE_CLUSTER);
+ registerBlockItem("moonstone_cluster", new BlockItem(MOONSTONE_CLUSTER, blockItemSettings));
+ registerBlock("moonstone_block", MOONSTONE_BLOCK);
+ registerBlockItem("moonstone_block", new BlockItem(MOONSTONE_BLOCK, blockItemSettings));
+ registerBlock("budding_moonstone", BUDDING_MOONSTONE);
+ registerBlockItem("budding_moonstone", new BlockItem(BUDDING_MOONSTONE, blockItemSettings));
+ registerBlock("tuff_slab", TUFF_SLAB);
+ registerBlockItem("tuff_slab", new BlockItem(TUFF_SLAB, blockItemSettings));
+ registerBlock("tuff_wall", TUFF_WALL);
+ registerBlockItem("tuff_wall", new BlockItem(TUFF_WALL, blockItemSettings));
+ registerBlock("tuff_stairs", TUFF_STAIRS);
+ registerBlockItem("tuff_stairs", new BlockItem(TUFF_STAIRS, blockItemSettings));
+ registerBlock("polished_tuff", POLISHED_TUFF);
+ registerBlockItem("polished_tuff", new BlockItem(POLISHED_TUFF, blockItemSettings));
+ registerBlock("polished_tuff_slab", POLISHED_TUFF_SLAB);
+ registerBlockItem("polished_tuff_slab", new BlockItem(POLISHED_TUFF_SLAB, blockItemSettings));
+ registerBlock("polished_tuff_wall", POLISHED_TUFF_WALL);
+ registerBlockItem("polished_tuff_wall", new BlockItem(POLISHED_TUFF_WALL, blockItemSettings));
+ registerBlock("polished_tuff_stairs", POLISHED_TUFF_STAIRS);
+ registerBlockItem("polished_tuff_stairs", new BlockItem(POLISHED_TUFF_STAIRS, blockItemSettings));
+ registerBlock("tuff_bricks", TUFF_BRICKS);
+ registerBlockItem("tuff_bricks", new BlockItem(TUFF_BRICKS, blockItemSettings));
+ registerBlock("tuff_brick_slab", TUFF_BRICK_SLAB);
+ registerBlockItem("tuff_brick_slab", new BlockItem(TUFF_BRICK_SLAB, blockItemSettings));
+ registerBlock("tuff_brick_wall", TUFF_BRICK_WALL);
+ registerBlockItem("tuff_brick_wall", new BlockItem(TUFF_BRICK_WALL, blockItemSettings));
+ registerBlock("tuff_brick_stairs", TUFF_BRICK_STAIRS);
+ registerBlockItem("tuff_brick_stairs", new BlockItem(TUFF_BRICK_STAIRS, blockItemSettings));
+ registerBlock("amethyst_chiseled_tuff", AMETHYST_CHISELED_TUFF);
+ registerBlockItem("amethyst_chiseled_tuff", new BlockItem(AMETHYST_CHISELED_TUFF, blockItemSettings));
+ registerBlock("topaz_chiseled_tuff", TOPAZ_CHISELED_TUFF);
+ registerBlockItem("topaz_chiseled_tuff", new BlockItem(TOPAZ_CHISELED_TUFF, blockItemSettings));
+ registerBlock("citrine_chiseled_tuff", CITRINE_CHISELED_TUFF);
+ registerBlockItem("citrine_chiseled_tuff", new BlockItem(CITRINE_CHISELED_TUFF, blockItemSettings));
+ registerBlock("onyx_chiseled_tuff", ONYX_CHISELED_TUFF);
+ registerBlockItem("onyx_chiseled_tuff", new BlockItem(ONYX_CHISELED_TUFF, blockItemSettings));
+ registerBlock("moonstone_chiseled_tuff", MOONSTONE_CHISELED_TUFF);
+ registerBlockItem("moonstone_chiseled_tuff", new BlockItem(MOONSTONE_CHISELED_TUFF, blockItemSettings));
+ registerBlock("calcite_slab", CALCITE_SLAB);
+ registerBlockItem("calcite_slab", new BlockItem(CALCITE_SLAB, blockItemSettings));
+ registerBlock("calcite_wall", CALCITE_WALL);
+ registerBlockItem("calcite_wall", new BlockItem(CALCITE_WALL, blockItemSettings));
+ registerBlock("calcite_stairs", CALCITE_STAIRS);
+ registerBlockItem("calcite_stairs", new BlockItem(CALCITE_STAIRS, blockItemSettings));
+ registerBlock("polished_calcite", POLISHED_CALCITE);
+ registerBlockItem("polished_calcite", new BlockItem(POLISHED_CALCITE, blockItemSettings));
+ registerBlock("polished_calcite_slab", POLISHED_CALCITE_SLAB);
+ registerBlockItem("polished_calcite_slab", new BlockItem(POLISHED_CALCITE_SLAB, blockItemSettings));
+ registerBlock("polished_calcite_wall", POLISHED_CALCITE_WALL);
+ registerBlockItem("polished_calcite_wall", new BlockItem(POLISHED_CALCITE_WALL, blockItemSettings));
+ registerBlock("polished_calcite_stairs", POLISHED_CALCITE_STAIRS);
+ registerBlockItem("polished_calcite_stairs", new BlockItem(POLISHED_CALCITE_STAIRS, blockItemSettings));
+ registerBlock("calcite_bricks", CALCITE_BRICKS);
+ registerBlockItem("calcite_bricks", new BlockItem(CALCITE_BRICKS, blockItemSettings));
+ registerBlock("calcite_brick_slab", CALCITE_BRICK_SLAB);
+ registerBlockItem("calcite_brick_slab", new BlockItem(CALCITE_BRICK_SLAB, blockItemSettings));
+ registerBlock("calcite_brick_wall", CALCITE_BRICK_WALL);
+ registerBlockItem("calcite_brick_wall", new BlockItem(CALCITE_BRICK_WALL, blockItemSettings));
+ registerBlock("calcite_brick_stairs", CALCITE_BRICK_STAIRS);
+ registerBlockItem("calcite_brick_stairs", new BlockItem(CALCITE_BRICK_STAIRS, blockItemSettings));
+ registerBlock("amethyst_chiseled_calcite", AMETHYST_CHISELED_CALCITE);
+ registerBlockItem("amethyst_chiseled_calcite", new BlockItem(AMETHYST_CHISELED_CALCITE, blockItemSettings));
+ registerBlock("topaz_chiseled_calcite", TOPAZ_CHISELED_CALCITE);
+ registerBlockItem("topaz_chiseled_calcite", new BlockItem(TOPAZ_CHISELED_CALCITE, blockItemSettings));
+ registerBlock("citrine_chiseled_calcite", CITRINE_CHISELED_CALCITE);
+ registerBlockItem("citrine_chiseled_calcite", new BlockItem(CITRINE_CHISELED_CALCITE, blockItemSettings));
+ registerBlock("onyx_chiseled_calcite", ONYX_CHISELED_CALCITE);
+ registerBlockItem("onyx_chiseled_calcite", new BlockItem(ONYX_CHISELED_CALCITE, blockItemSettings));
+ registerBlock("moonstone_chiseled_calcite", MOONSTONE_CHISELED_CALCITE);
+ registerBlockItem("moonstone_chiseled_calcite", new BlockItem(MOONSTONE_CHISELED_CALCITE, blockItemSettings));
+ registerBlock("rainbow_moonstone_block", RAINBOW_MOONSTONE_BLOCK);
+ registerBlockItem("rainbow_moonstone_block", new BlockItem(RAINBOW_MOONSTONE_BLOCK, blockItemSettings));
+
+ registerBlock("glistering_melon", GLISTERING_MELON);
+ registerBlockItem("glistering_melon", new BlockItem(GLISTERING_MELON, blockItemSettings));
+ registerBlock("glistering_melon_stem", GLISTERING_MELON_STEM);
+ registerBlock("attached_glistering_melon_stem", ATTACHED_GLISTERING_MELON_STEM);
+ }
+
+ public static void registerClient() {
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.CITRINE_CLUSTER, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.SMALL_CITRINE_BUD, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.MEDIUM_CITRINE_BUD, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.LARGE_CITRINE_BUD, RenderLayer.getCutout());
+
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.ONYX_CLUSTER, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.SMALL_ONYX_BUD, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.MEDIUM_ONYX_BUD, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.LARGE_ONYX_BUD, RenderLayer.getCutout());
+
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.TOPAZ_CLUSTER, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.SMALL_TOPAZ_BUD, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.MEDIUM_TOPAZ_BUD, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.LARGE_TOPAZ_BUD, RenderLayer.getCutout());
+
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.MOONSTONE_CLUSTER, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.SMALL_MOONSTONE_BUD, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.MEDIUM_MOONSTONE_BUD, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.LARGE_MOONSTONE_BUD, RenderLayer.getCutout());
+
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.GLISTERING_MELON_STEM, RenderLayer.getCutout());
+ BlockRenderLayerMap.INSTANCE.putBlock(SpectrumBlocks.ATTACHED_GLISTERING_MELON_STEM, RenderLayer.getCutout());
+ }
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/SpectrumStairsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/SpectrumStairsBlock.java
new file mode 100644
index 0000000000..825beb6238
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/SpectrumStairsBlock.java
@@ -0,0 +1,12 @@
+package de.dafuqs.spectrum.blocks;
+
+import net.minecraft.block.BlockState;
+import net.minecraft.block.StairsBlock;
+
+public class SpectrumStairsBlock extends StairsBlock {
+
+ protected SpectrumStairsBlock(BlockState baseBlockState, Settings settings) {
+ super(baseBlockState, settings);
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/melon/AttachedGlisteringStemBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/melon/AttachedGlisteringStemBlock.java
new file mode 100644
index 0000000000..adc1739a4f
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/melon/AttachedGlisteringStemBlock.java
@@ -0,0 +1,15 @@
+package de.dafuqs.spectrum.blocks.melon;
+
+import net.minecraft.block.AttachedStemBlock;
+import net.minecraft.block.GourdBlock;
+import net.minecraft.item.Item;
+
+import java.util.function.Supplier;
+
+public class AttachedGlisteringStemBlock extends AttachedStemBlock {
+
+ public AttachedGlisteringStemBlock(GourdBlock gourdBlock, Supplier- supplier, Settings settings) {
+ super(gourdBlock, supplier, settings);
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/melon/GlisteringMelonBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/melon/GlisteringMelonBlock.java
new file mode 100644
index 0000000000..30fc28d7d1
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/melon/GlisteringMelonBlock.java
@@ -0,0 +1,22 @@
+package de.dafuqs.spectrum.blocks.melon;
+
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import net.minecraft.block.AttachedStemBlock;
+import net.minecraft.block.MelonBlock;
+import net.minecraft.block.StemBlock;
+
+public class GlisteringMelonBlock extends MelonBlock {
+
+ public GlisteringMelonBlock(Settings settings) {
+ super(settings);
+ }
+
+ public StemBlock getStem() {
+ return (StemBlock) SpectrumBlocks.GLISTERING_MELON_STEM;
+ }
+
+ public AttachedStemBlock getAttachedStem() {
+ return (AttachedStemBlock) SpectrumBlocks.ATTACHED_GLISTERING_MELON_STEM;
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/blocks/melon/GlisteringStemBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/melon/GlisteringStemBlock.java
new file mode 100644
index 0000000000..1b49b4e78d
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/blocks/melon/GlisteringStemBlock.java
@@ -0,0 +1,15 @@
+package de.dafuqs.spectrum.blocks.melon;
+
+import net.minecraft.block.GourdBlock;
+import net.minecraft.block.StemBlock;
+import net.minecraft.item.Item;
+
+import java.util.function.Supplier;
+
+public class GlisteringStemBlock extends StemBlock {
+
+ public GlisteringStemBlock(GourdBlock gourdBlock, Supplier
- supplier, Settings settings) {
+ super(gourdBlock, supplier, settings);
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/config/ModMenuConfig.java b/src/main/java/de/dafuqs/spectrum/config/ModMenuConfig.java
new file mode 100644
index 0000000000..024ec0e410
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/config/ModMenuConfig.java
@@ -0,0 +1,18 @@
+package de.dafuqs.spectrum.config;
+
+
+import io.github.prospector.modmenu.api.ConfigScreenFactory;
+import io.github.prospector.modmenu.api.ModMenuApi;
+import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+
+@Environment(EnvType.CLIENT)
+public class ModMenuConfig implements ModMenuApi {
+
+ @Override
+ public ConfigScreenFactory> getModConfigScreenFactory() {
+ return parent -> AutoConfig.getConfigScreen(SpectrumConfig.class, parent).get();
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java
new file mode 100644
index 0000000000..6fcaf5c195
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java
@@ -0,0 +1,9 @@
+package de.dafuqs.spectrum.config;
+
+import me.sargunvohra.mcmods.autoconfig1u.ConfigData;
+import me.sargunvohra.mcmods.autoconfig1u.annotation.Config;
+
+@Config(name = "Spectrum")
+public class SpectrumConfig implements ConfigData {
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/enchantments/ResonanceEnchantment.java b/src/main/java/de/dafuqs/spectrum/enchantments/ResonanceEnchantment.java
new file mode 100644
index 0000000000..2522be5e6d
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/enchantments/ResonanceEnchantment.java
@@ -0,0 +1,42 @@
+package de.dafuqs.spectrum.enchantments;
+
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.Enchantments;
+import net.minecraft.enchantment.SilkTouchEnchantment;
+import net.minecraft.entity.EquipmentSlot;
+
+public class ResonanceEnchantment extends SilkTouchEnchantment {
+
+ public ResonanceEnchantment(Enchantment.Rarity weight, EquipmentSlot... slotTypes) {
+ super(weight, slotTypes);
+ }
+
+ public int getMinPower(int level) {
+ return 15;
+ }
+
+ public int getMaxPower(int level) {
+ return super.getMinPower(level) + 50;
+ }
+
+ public int getMaxLevel() {
+ return 1;
+ }
+
+ public boolean isTreasure() {
+ return true;
+ }
+
+ public boolean isAvailableForEnchantedBookOffer() {
+ return false;
+ }
+
+ public boolean isAvailableForRandomSelection() {
+ return false;
+ }
+
+ public boolean canAccept(Enchantment other) {
+ return super.canAccept(other) && other != Enchantments.FORTUNE;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/dafuqs/spectrum/enchantments/SpectrumEnchantments.java b/src/main/java/de/dafuqs/spectrum/enchantments/SpectrumEnchantments.java
new file mode 100644
index 0000000000..8e1082d891
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/enchantments/SpectrumEnchantments.java
@@ -0,0 +1,17 @@
+package de.dafuqs.spectrum.enchantments;
+
+import de.dafuqs.spectrum.SpectrumCommon;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+
+public class SpectrumEnchantments {
+
+ public static final Enchantment SUPER_SILK = new ResonanceEnchantment(Enchantment.Rarity.VERY_RARE, EquipmentSlot.MAINHAND);
+
+ public static void register() {
+ Registry.register(Registry.ENCHANTMENT, new Identifier(SpectrumCommon.MOD_ID, "resonance"), SUPER_SILK);
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/items/SpectrumItemSettings.java b/src/main/java/de/dafuqs/spectrum/items/SpectrumItemSettings.java
new file mode 100644
index 0000000000..0246a70fe0
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/SpectrumItemSettings.java
@@ -0,0 +1,21 @@
+package de.dafuqs.spectrum.items;
+
+import de.dafuqs.spectrum.SpectrumCommon;
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
+import net.minecraft.item.ItemGroup;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.Identifier;
+
+public class SpectrumItemSettings {
+
+ public static final ItemGroup ITEM_GROUP = FabricItemGroupBuilder.build(
+ new Identifier(SpectrumCommon.MOD_ID, "general"),
+ () -> new ItemStack(SpectrumItems.BEDROCK_PICKAXE));
+
+ public static final ItemGroup ITEM_GROUP_BUILDING = FabricItemGroupBuilder.build(
+ new Identifier(SpectrumCommon.MOD_ID, "building"),
+ () -> new ItemStack(SpectrumBlocks.CITRINE_BLOCK));
+
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/items/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/items/SpectrumItems.java
new file mode 100644
index 0000000000..2ab0cbd3a8
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/SpectrumItems.java
@@ -0,0 +1,78 @@
+package de.dafuqs.spectrum.items;
+
+import de.dafuqs.spectrum.SpectrumCommon;
+import de.dafuqs.spectrum.blocks.SpectrumBlocks;
+import de.dafuqs.spectrum.items.armor.BedrockArmorMaterial;
+import de.dafuqs.spectrum.items.misc.Spawner;
+import de.dafuqs.spectrum.items.tools.*;
+import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
+import net.minecraft.block.Blocks;
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.item.*;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.Rarity;
+import net.minecraft.util.registry.Registry;
+
+public class SpectrumItems {
+
+ public static FabricItemSettings bedrockItemSettings = new FabricItemSettings().group(SpectrumItemSettings.ITEM_GROUP).rarity(Rarity.RARE);
+ public static FabricItemSettings buildingBlockSettings = new FabricItemSettings().group(SpectrumItemSettings.ITEM_GROUP_BUILDING);
+
+ // Bedrock Tools
+ public static ToolItem BEDROCK_PICKAXE = new BedrockPickaxeItem(BedrockToolMaterial.INSTANCE, 1, -2.8F, bedrockItemSettings);
+ public static ToolItem BEDROCK_AXE = new BedrockAxeItem(BedrockToolMaterial.INSTANCE, 6, -3.0F, bedrockItemSettings);
+ public static ToolItem BEDROCK_SHOVEL = new BedrockShovelItem(BedrockToolMaterial.INSTANCE, 2, -3.0F, bedrockItemSettings);
+ public static ToolItem BEDROCK_SWORD = new BedrockSwordItem(BedrockToolMaterial.INSTANCE, 5, -2.4F, bedrockItemSettings);
+ public static ToolItem BEDROCK_HOE = new BedrockHoeItem(BedrockToolMaterial.INSTANCE, -2, -0.0F, bedrockItemSettings);
+
+ // General bedrock tools
+ /*public static ToolItem BEDROCK_SHEARS = new ShearsItem(BedrockToolMaterial.INSTANCE, 3, -2.4F, new Item.Settings().group(ItemGroup.COMBAT));
+ public static ToolItem FLINT_AND_BEDROCK = new SwordItem(BedrockToolMaterial.INSTANCE, 3, -2.4F, new Item.Settings().group(ItemGroup.COMBAT));
+ public static ToolItem BEDROCK_FISHING_ROD = new SwordItem(BedrockToolMaterial.INSTANCE, 3, -2.4F, new Item.Settings().group(ItemGroup.COMBAT));
+ public static ToolItem BEDROCK_SHIELD = new ShieldItem(BedrockToolMaterial.INSTANCE, 3, -2.4F, new Item.Settings().group(ItemGroup.COMBAT));
+ public static ToolItem BEDROCK_BOW = new SwordItem(BedrockToolMaterial.INSTANCE, 3, -2.4F, new Item.Settings().group(ItemGroup.COMBAT));*/
+
+ // Bedrock Armor
+ public static final BedrockArmorMaterial BEDROCK_ARMOR_MATERIAL = new BedrockArmorMaterial();
+ public static final Item BEDROCK_HELMET = new ArmorItem(BEDROCK_ARMOR_MATERIAL, EquipmentSlot.HEAD, bedrockItemSettings);
+ public static final Item BEDROCK_CHESTPLATE = new ArmorItem(BEDROCK_ARMOR_MATERIAL, EquipmentSlot.CHEST, bedrockItemSettings);
+ public static final Item BEDROCK_LEGGINGS = new ArmorItem(BEDROCK_ARMOR_MATERIAL, EquipmentSlot.LEGS, bedrockItemSettings);
+ public static final Item BEDROCK_BOOTS = new ArmorItem(BEDROCK_ARMOR_MATERIAL, EquipmentSlot.FEET, bedrockItemSettings);
+
+ public static final Item SPAWNER = new Spawner(Blocks.SPAWNER, bedrockItemSettings.maxCount(64));
+ public static final Item GLISTERING_MELON_SEEDS = new AliasedBlockItem(SpectrumBlocks.GLISTERING_MELON_STEM, bedrockItemSettings.maxCount(64));
+
+ public static final Item CITRINE_SHARD_ITEM = new Item(buildingBlockSettings);
+ public static final Item TOPAZ_SHARD_ITEM = new Item(buildingBlockSettings);
+ public static final Item ONYX_SHARD_ITEM = new Item(buildingBlockSettings);
+ public static final Item MOONSTONE_SHARD_ITEM = new Item(buildingBlockSettings);
+ public static final Item RAINBOW_MOONSTONE_SHARD_ITEM = new Item(buildingBlockSettings);
+
+ private static void registerItem(String name, Item item) {
+ Registry.register(Registry.ITEM, new Identifier(SpectrumCommon.MOD_ID, name), item);
+ }
+
+ public static void register() {
+ registerItem("bedrock_pickaxe", BEDROCK_PICKAXE);
+ registerItem("bedrock_axe", BEDROCK_AXE);
+ registerItem("bedrock_shovel", BEDROCK_SHOVEL);
+ registerItem("bedrock_sword", BEDROCK_SWORD);
+ registerItem("bedrock_hoe", BEDROCK_HOE);
+
+ registerItem("bedrock_helmet", BEDROCK_HELMET);
+ registerItem("bedrock_chestplate", BEDROCK_CHESTPLATE);
+ registerItem("bedrock_leggings", BEDROCK_LEGGINGS);
+ registerItem("bedrock_boots", BEDROCK_BOOTS);
+
+ registerItem("spawner", SPAWNER);
+ registerItem("glistering_melon_seeds", GLISTERING_MELON_SEEDS);
+
+ registerItem("citrine_shard", CITRINE_SHARD_ITEM);
+ registerItem("topaz_shard", TOPAZ_SHARD_ITEM);
+ registerItem("onyx_shard", ONYX_SHARD_ITEM);
+ registerItem("moonstone_shard", MOONSTONE_SHARD_ITEM);
+ registerItem("rainbow_moonstone_shard", RAINBOW_MOONSTONE_SHARD_ITEM);
+ }
+
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/items/armor/BedrockArmorMaterial.java b/src/main/java/de/dafuqs/spectrum/items/armor/BedrockArmorMaterial.java
new file mode 100644
index 0000000000..53bf17b0c2
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/armor/BedrockArmorMaterial.java
@@ -0,0 +1,63 @@
+package de.dafuqs.spectrum.items.armor;
+
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.item.ArmorMaterial;
+import net.minecraft.recipe.Ingredient;
+import net.minecraft.sound.SoundEvent;
+import net.minecraft.sound.SoundEvents;
+
+public class BedrockArmorMaterial implements ArmorMaterial {
+
+ @Override
+ public int getDurability(EquipmentSlot slot) {
+ return 0;
+ }
+
+ @Override
+ public int getProtectionAmount(EquipmentSlot slot) {
+ switch (slot) {
+ case HEAD:
+ case FEET:
+ return 6;
+ case LEGS:
+ return 10;
+ case CHEST:
+ return 14;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
+ public int getEnchantability() {
+ return 0;
+ }
+
+ @Override
+ public SoundEvent getEquipSound() {
+ return SoundEvents.ITEM_ARMOR_EQUIP_NETHERITE;
+ }
+
+ @Override
+ public Ingredient getRepairIngredient() {
+ return null;
+ }
+
+ @Environment(EnvType.CLIENT)
+ public String getName() {
+ return "bedrock";
+ }
+
+ @Override
+ public float getToughness() {
+ return 3;
+ }
+
+ @Override
+ public float getKnockbackResistance() {
+ return 0.25F;
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/items/misc/BedrockIngot.java b/src/main/java/de/dafuqs/spectrum/items/misc/BedrockIngot.java
new file mode 100644
index 0000000000..46fb6995be
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/misc/BedrockIngot.java
@@ -0,0 +1,11 @@
+package de.dafuqs.spectrum.items.misc;
+
+import net.minecraft.item.Item;
+
+public class BedrockIngot extends Item {
+
+ public BedrockIngot(Settings settings) {
+ super(settings);
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/items/misc/Spawner.java b/src/main/java/de/dafuqs/spectrum/items/misc/Spawner.java
new file mode 100644
index 0000000000..00ee393502
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/misc/Spawner.java
@@ -0,0 +1,71 @@
+package de.dafuqs.spectrum.items.misc;
+
+import de.dafuqs.spectrum.items.SpectrumItems;
+import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
+import net.minecraft.block.Block;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.client.item.TooltipContext;
+import net.minecraft.entity.EntityType;
+import net.minecraft.item.BlockItem;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.text.Text;
+import net.minecraft.text.TranslatableText;
+import net.minecraft.world.World;
+
+import java.util.List;
+import java.util.Optional;
+
+public class Spawner extends BlockItem {
+
+ public Spawner(Block block, FabricItemSettings fabricItemSettings) {
+ super(block, fabricItemSettings);
+ }
+
+ @Override
+ public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) {
+ if(itemStack.getTag() != null && itemStack.getTag().get("BlockEntityTag") != null) {
+ Optional> entityType;
+
+ CompoundTag blockEntityTag = itemStack.getTag().getCompound("BlockEntityTag");
+
+ String spawningEntityType = blockEntityTag.getCompound("SpawnData").getString("id");
+ entityType = EntityType.get(spawningEntityType);
+ short spawnCount = blockEntityTag.getShort("SpawnCount");
+ short minSpawnDelay = blockEntityTag.getShort("MinSpawnDelay");
+ short maxSpawnDelay = blockEntityTag.getShort("MaxSpawnDelay");
+ short spawnRange = blockEntityTag.getShort("SpawnRange");
+ short requiredPlayerRange = blockEntityTag.getShort("RequiredPlayerRange");
+
+ if(entityType.isPresent()) {
+ tooltip.add(new TranslatableText(entityType.get().getTranslationKey()));
+ } else {
+ tooltip.add(new TranslatableText("item.spectrum.spawner.tooltip.unknown_mob"));
+ }
+ tooltip.add(new TranslatableText("item.spectrum.spawner.tooltip.spawn_count", spawnCount));
+ tooltip.add(new TranslatableText("item.spectrum.spawner.tooltip.min_spawn_delay", minSpawnDelay));
+ tooltip.add(new TranslatableText("item.spectrum.spawner.tooltip.max_spawn_delay", maxSpawnDelay));
+ tooltip.add(new TranslatableText("item.spectrum.spawner.tooltip.spawn_range", spawnRange));
+ tooltip.add(new TranslatableText("item.spectrum.spawner.tooltip.required_player_range", requiredPlayerRange));
+ }
+ }
+
+ public static ItemStack fromBlockEntity(BlockEntity blockEntity) {
+ ItemStack itemStack = new ItemStack(SpectrumItems.SPAWNER, 1);
+
+ CompoundTag blockEntityTag = new CompoundTag();
+ blockEntity.toTag(blockEntityTag);
+
+ blockEntityTag.remove("x");
+ blockEntityTag.remove("y");
+ blockEntityTag.remove("z");
+ blockEntityTag.remove("id");
+ blockEntityTag.remove("delay");
+
+ CompoundTag itemStackTag = new CompoundTag();
+ itemStackTag.put("BlockEntityTag", blockEntityTag);
+ itemStack.setTag(itemStackTag);
+ return itemStack;
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/BedrockAxeItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockAxeItem.java
new file mode 100644
index 0000000000..85f3523b42
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockAxeItem.java
@@ -0,0 +1,17 @@
+package de.dafuqs.spectrum.items.tools;
+
+import net.minecraft.item.AxeItem;
+import net.minecraft.item.ToolMaterial;
+
+public class BedrockAxeItem extends AxeItem {
+
+ public BedrockAxeItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) {
+ super(material, attackDamage, attackSpeed, settings);
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return false;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/BedrockHoeItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockHoeItem.java
new file mode 100644
index 0000000000..45f35c6143
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockHoeItem.java
@@ -0,0 +1,17 @@
+package de.dafuqs.spectrum.items.tools;
+
+import net.minecraft.item.HoeItem;
+import net.minecraft.item.ToolMaterial;
+
+public class BedrockHoeItem extends HoeItem {
+
+ public BedrockHoeItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) {
+ super(material, attackDamage, attackSpeed, settings);
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return false;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/BedrockPickaxeItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockPickaxeItem.java
new file mode 100644
index 0000000000..e6bb00b73b
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockPickaxeItem.java
@@ -0,0 +1,17 @@
+package de.dafuqs.spectrum.items.tools;
+
+import net.minecraft.item.PickaxeItem;
+import net.minecraft.item.ToolMaterial;
+
+public class BedrockPickaxeItem extends PickaxeItem {
+
+ public BedrockPickaxeItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) {
+ super(material, attackDamage, attackSpeed, settings);
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return false;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/BedrockShovelItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockShovelItem.java
new file mode 100644
index 0000000000..3a7d233a79
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockShovelItem.java
@@ -0,0 +1,18 @@
+package de.dafuqs.spectrum.items.tools;
+
+import net.minecraft.item.ShovelItem;
+import net.minecraft.item.ToolMaterial;
+
+public class BedrockShovelItem extends ShovelItem {
+
+ public BedrockShovelItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) {
+ super(material, attackDamage, attackSpeed, settings);
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return false;
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/BedrockSwordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockSwordItem.java
new file mode 100644
index 0000000000..038fe11c1a
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockSwordItem.java
@@ -0,0 +1,17 @@
+package de.dafuqs.spectrum.items.tools;
+
+import net.minecraft.item.SwordItem;
+import net.minecraft.item.ToolMaterial;
+
+public class BedrockSwordItem extends SwordItem {
+
+ public BedrockSwordItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) {
+ super(material, attackDamage, attackSpeed, settings);
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return false;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/BedrockToolMaterial.java b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockToolMaterial.java
new file mode 100644
index 0000000000..9e9ec2a8c5
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockToolMaterial.java
@@ -0,0 +1,40 @@
+package de.dafuqs.spectrum.items.tools;
+
+import net.minecraft.item.ToolMaterial;
+import net.minecraft.recipe.Ingredient;
+
+public class BedrockToolMaterial implements ToolMaterial {
+
+ public static final BedrockToolMaterial INSTANCE = new BedrockToolMaterial();
+
+ @Override
+ public int getDurability() {
+ return 0;
+ }
+
+ @Override
+ public float getMiningSpeedMultiplier() {
+ return 15F;
+ }
+
+ @Override
+ public float getAttackDamage() {
+ return 8.0F;
+ }
+
+ @Override
+ public int getMiningLevel() {
+ return 5;
+ }
+
+ @Override
+ public int getEnchantability() {
+ return 0;
+ }
+
+ @Override
+ public Ingredient getRepairIngredient() {
+ return null; // doesn't need to be repaired
+ }
+
+}
diff --git a/src/main/java/de/dafuqs/spectrum/mixin/MobSpawnerBlockEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/MobSpawnerBlockEntityMixin.java
new file mode 100644
index 0000000000..93621924e7
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/mixin/MobSpawnerBlockEntityMixin.java
@@ -0,0 +1,17 @@
+package de.dafuqs.spectrum.mixin;
+
+import net.minecraft.block.entity.MobSpawnerBlockEntity;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+@Mixin(MobSpawnerBlockEntity.class)
+public abstract class MobSpawnerBlockEntityMixin {
+
+ @Inject(method = "copyItemDataRequiresOperator", at = @At("HEAD"), cancellable = true)
+ public void allowPlacingSpawnerWithBlockData(CallbackInfoReturnable callbackInfoReturnable) {
+ callbackInfoReturnable.setReturnValue(false);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/dafuqs/spectrum/mixin/SpawnerBlockMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/SpawnerBlockMixin.java
new file mode 100644
index 0000000000..6aba1f0b89
--- /dev/null
+++ b/src/main/java/de/dafuqs/spectrum/mixin/SpawnerBlockMixin.java
@@ -0,0 +1,27 @@
+package de.dafuqs.spectrum.mixin;
+
+import de.dafuqs.spectrum.MixinHandler;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+import org.jetbrains.annotations.Nullable;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(Block.class)
+public abstract class SpawnerBlockMixin {
+
+ @Inject(method = "afterBreak", at = @At("HEAD"), cancellable = true)
+ public void afterBreak(World world, PlayerEntity player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack, CallbackInfo callbackInfo) {
+ if(MixinHandler.checkResonanceForSpawnerMining(world, player, pos, state, blockEntity, stack)) {
+ callbackInfo.cancel();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/models/armor/bedrock_layer_1.png b/src/main/resources/assets/minecraft/textures/models/armor/bedrock_layer_1.png
new file mode 100644
index 0000000000..0b10b495f6
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/models/armor/bedrock_layer_1.png differ
diff --git a/src/main/resources/assets/minecraft/textures/models/armor/bedrock_layer_2.png b/src/main/resources/assets/minecraft/textures/models/armor/bedrock_layer_2.png
new file mode 100644
index 0000000000..2feec94dbf
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/models/armor/bedrock_layer_2.png differ
diff --git a/src/main/resources/assets/spectrum/blockstates/amethyst_chiseled_calcite.json b/src/main/resources/assets/spectrum/blockstates/amethyst_chiseled_calcite.json
new file mode 100644
index 0000000000..e491ce29de
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/amethyst_chiseled_calcite.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/amethyst_chiseled_calcite" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/amethyst_chiseled_tuff.json b/src/main/resources/assets/spectrum/blockstates/amethyst_chiseled_tuff.json
new file mode 100644
index 0000000000..1ad14631e4
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/amethyst_chiseled_tuff.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/amethyst_chiseled_tuff" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/attached_glistering_melon_stem.json b/src/main/resources/assets/spectrum/blockstates/attached_glistering_melon_stem.json
new file mode 100644
index 0000000000..d3988f78be
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/attached_glistering_melon_stem.json
@@ -0,0 +1,19 @@
+{
+ "variants": {
+ "facing=east": {
+ "model": "spectrum:block/attached_glistering_melon_stem",
+ "y": 180
+ },
+ "facing=north": {
+ "model": "spectrum:block/attached_glistering_melon_stem",
+ "y": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/attached_glistering_melon_stem",
+ "y": 270
+ },
+ "facing=west": {
+ "model": "spectrum:block/attached_glistering_melon_stem"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/budding_citrine.json b/src/main/resources/assets/spectrum/blockstates/budding_citrine.json
new file mode 100644
index 0000000000..a6af9241fd
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/budding_citrine.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/budding_citrine" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/budding_moonstone.json b/src/main/resources/assets/spectrum/blockstates/budding_moonstone.json
new file mode 100644
index 0000000000..a9b09283c2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/budding_moonstone.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/budding_moonstone" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/budding_onyx.json b/src/main/resources/assets/spectrum/blockstates/budding_onyx.json
new file mode 100644
index 0000000000..0e6df566c6
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/budding_onyx.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/budding_onyx" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/budding_topaz.json b/src/main/resources/assets/spectrum/blockstates/budding_topaz.json
new file mode 100644
index 0000000000..0e300ec3f1
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/budding_topaz.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/budding_topaz" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/calcite_brick_slab.json b/src/main/resources/assets/spectrum/blockstates/calcite_brick_slab.json
new file mode 100644
index 0000000000..7fea3ac79a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/calcite_brick_slab.json
@@ -0,0 +1,13 @@
+{
+ "variants": {
+ "type=bottom": {
+ "model": "spectrum:block/calcite_brick_slab"
+ },
+ "type=double": {
+ "model": "spectrum:block/calcite_bricks"
+ },
+ "type=top": {
+ "model": "spectrum:block/calcite_brick_slab_top"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/calcite_brick_stairs.json b/src/main/resources/assets/spectrum/blockstates/calcite_brick_stairs.json
new file mode 100644
index 0000000000..229d556990
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/calcite_brick_stairs.json
@@ -0,0 +1,209 @@
+{
+ "variants": {
+ "facing=east,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/calcite_brick_stairs_inner"
+ },
+ "facing=east,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/calcite_brick_stairs_outer"
+ },
+ "facing=east,half=bottom,shape=straight": {
+ "model": "spectrum:block/calcite_brick_stairs"
+ },
+ "facing=east,half=top,shape=inner_left": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=inner_right": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_left": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_right": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=straight": {
+ "model": "spectrum:block/calcite_brick_stairs",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=straight": {
+ "model": "spectrum:block/calcite_brick_stairs",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_left": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_right": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_left": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_right": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=straight": {
+ "model": "spectrum:block/calcite_brick_stairs",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/calcite_brick_stairs_inner"
+ },
+ "facing=south,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/calcite_brick_stairs_outer"
+ },
+ "facing=south,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=straight": {
+ "model": "spectrum:block/calcite_brick_stairs",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_left": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_right": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_left": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_right": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=straight": {
+ "model": "spectrum:block/calcite_brick_stairs",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=straight": {
+ "model": "spectrum:block/calcite_brick_stairs",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_left": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_right": {
+ "model": "spectrum:block/calcite_brick_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_left": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_right": {
+ "model": "spectrum:block/calcite_brick_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=straight": {
+ "model": "spectrum:block/calcite_brick_stairs",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/calcite_brick_wall.json b/src/main/resources/assets/spectrum/blockstates/calcite_brick_wall.json
new file mode 100644
index 0000000000..853b7c4f7b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/calcite_brick_wall.json
@@ -0,0 +1,90 @@
+{
+ "multipart": [
+ {
+ "when": {
+ "up": "true"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_post"
+ }
+ },
+ {
+ "when": {
+ "north": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_side",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_side",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_side",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_side",
+ "y": 270,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "north": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_side_tall",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_side_tall",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_side_tall",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_brick_wall_side_tall",
+ "y": 270,
+ "uvlock": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/calcite_bricks.json b/src/main/resources/assets/spectrum/blockstates/calcite_bricks.json
new file mode 100644
index 0000000000..839c0e5ef5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/calcite_bricks.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/calcite_bricks" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/calcite_slab.json b/src/main/resources/assets/spectrum/blockstates/calcite_slab.json
new file mode 100644
index 0000000000..c4938fec70
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/calcite_slab.json
@@ -0,0 +1,13 @@
+{
+ "variants": {
+ "type=bottom": {
+ "model": "spectrum:block/calcite_slab"
+ },
+ "type=double": {
+ "model": "minecraft:block/calcite"
+ },
+ "type=top": {
+ "model": "spectrum:block/calcite_slab_top"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/calcite_stairs.json b/src/main/resources/assets/spectrum/blockstates/calcite_stairs.json
new file mode 100644
index 0000000000..f666a71af1
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/calcite_stairs.json
@@ -0,0 +1,209 @@
+{
+ "variants": {
+ "facing=east,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/calcite_stairs_inner"
+ },
+ "facing=east,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/calcite_stairs_outer"
+ },
+ "facing=east,half=bottom,shape=straight": {
+ "model": "spectrum:block/calcite_stairs"
+ },
+ "facing=east,half=top,shape=inner_left": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=inner_right": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_left": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_right": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=straight": {
+ "model": "spectrum:block/calcite_stairs",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=straight": {
+ "model": "spectrum:block/calcite_stairs",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_left": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_right": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_left": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_right": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=straight": {
+ "model": "spectrum:block/calcite_stairs",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/calcite_stairs_inner"
+ },
+ "facing=south,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/calcite_stairs_outer"
+ },
+ "facing=south,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=straight": {
+ "model": "spectrum:block/calcite_stairs",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_left": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_right": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_left": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_right": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=straight": {
+ "model": "spectrum:block/calcite_stairs",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=straight": {
+ "model": "spectrum:block/calcite_stairs",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_left": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_right": {
+ "model": "spectrum:block/calcite_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_left": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_right": {
+ "model": "spectrum:block/calcite_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=straight": {
+ "model": "spectrum:block/calcite_stairs",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/calcite_wall.json b/src/main/resources/assets/spectrum/blockstates/calcite_wall.json
new file mode 100644
index 0000000000..0930377835
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/calcite_wall.json
@@ -0,0 +1,90 @@
+{
+ "multipart": [
+ {
+ "when": {
+ "up": "true"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_post"
+ }
+ },
+ {
+ "when": {
+ "north": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_side",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_side",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_side",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_side",
+ "y": 270,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "north": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_side_tall",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_side_tall",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_side_tall",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/calcite_wall_side_tall",
+ "y": 270,
+ "uvlock": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/citrine_block.json b/src/main/resources/assets/spectrum/blockstates/citrine_block.json
new file mode 100644
index 0000000000..0f2df63337
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/citrine_block.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/citrine_block" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/citrine_chiseled_calcite.json b/src/main/resources/assets/spectrum/blockstates/citrine_chiseled_calcite.json
new file mode 100644
index 0000000000..f5c3172642
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/citrine_chiseled_calcite.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/citrine_chiseled_calcite" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/citrine_chiseled_tuff.json b/src/main/resources/assets/spectrum/blockstates/citrine_chiseled_tuff.json
new file mode 100644
index 0000000000..17627b0179
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/citrine_chiseled_tuff.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/citrine_chiseled_tuff" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/citrine_cluster.json b/src/main/resources/assets/spectrum/blockstates/citrine_cluster.json
new file mode 100644
index 0000000000..9838011983
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/citrine_cluster.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/citrine_cluster",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/citrine_cluster",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/citrine_cluster",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/citrine_cluster",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/citrine_cluster"
+ },
+ "facing=west": {
+ "model": "spectrum:block/citrine_cluster",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/glistering_melon.json b/src/main/resources/assets/spectrum/blockstates/glistering_melon.json
new file mode 100644
index 0000000000..81dd24239b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/glistering_melon.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "spectrum:block/glistering_melon"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/glistering_melon_stem.json b/src/main/resources/assets/spectrum/blockstates/glistering_melon_stem.json
new file mode 100644
index 0000000000..656b0fee60
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/glistering_melon_stem.json
@@ -0,0 +1,28 @@
+{
+ "variants": {
+ "age=0": {
+ "model": "spectrum:block/glistering_melon_stem_stage0"
+ },
+ "age=1": {
+ "model": "spectrum:block/glistering_melon_stem_stage1"
+ },
+ "age=2": {
+ "model": "spectrum:block/glistering_melon_stem_stage2"
+ },
+ "age=3": {
+ "model": "spectrum:block/glistering_melon_stem_stage3"
+ },
+ "age=4": {
+ "model": "spectrum:block/glistering_melon_stem_stage4"
+ },
+ "age=5": {
+ "model": "spectrum:block/glistering_melon_stem_stage5"
+ },
+ "age=6": {
+ "model": "spectrum:block/glistering_melon_stem_stage6"
+ },
+ "age=7": {
+ "model": "spectrum:block/glistering_melon_stem_stage7"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/large_citrine_bud.json b/src/main/resources/assets/spectrum/blockstates/large_citrine_bud.json
new file mode 100644
index 0000000000..cdcd12c2af
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/large_citrine_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/large_citrine_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/large_citrine_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/large_citrine_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/large_citrine_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/large_citrine_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/large_citrine_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/large_moonstone_bud.json b/src/main/resources/assets/spectrum/blockstates/large_moonstone_bud.json
new file mode 100644
index 0000000000..0467f02a4a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/large_moonstone_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/large_moonstone_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/large_moonstone_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/large_moonstone_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/large_moonstone_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/large_moonstone_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/large_moonstone_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/large_onyx_bud.json b/src/main/resources/assets/spectrum/blockstates/large_onyx_bud.json
new file mode 100644
index 0000000000..c0eab90414
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/large_onyx_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/large_onyx_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/large_onyx_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/large_onyx_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/large_onyx_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/large_onyx_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/large_onyx_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/large_topaz_bud.json b/src/main/resources/assets/spectrum/blockstates/large_topaz_bud.json
new file mode 100644
index 0000000000..11c3fa92d2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/large_topaz_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/large_topaz_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/large_topaz_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/large_topaz_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/large_topaz_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/large_topaz_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/large_topaz_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/medium_citrine_bud.json b/src/main/resources/assets/spectrum/blockstates/medium_citrine_bud.json
new file mode 100644
index 0000000000..855a835ed9
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/medium_citrine_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/medium_citrine_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/medium_citrine_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/medium_citrine_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/medium_citrine_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/medium_citrine_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/medium_citrine_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/medium_moonstone_bud.json b/src/main/resources/assets/spectrum/blockstates/medium_moonstone_bud.json
new file mode 100644
index 0000000000..44b64db1c5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/medium_moonstone_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/medium_moonstone_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/medium_moonstone_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/medium_moonstone_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/medium_moonstone_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/medium_moonstone_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/medium_moonstone_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/medium_onyx_bud.json b/src/main/resources/assets/spectrum/blockstates/medium_onyx_bud.json
new file mode 100644
index 0000000000..a0621f47e2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/medium_onyx_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/medium_onyx_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/medium_onyx_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/medium_onyx_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/medium_onyx_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/medium_onyx_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/medium_onyx_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/medium_topaz_bud.json b/src/main/resources/assets/spectrum/blockstates/medium_topaz_bud.json
new file mode 100644
index 0000000000..cae0bb2262
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/medium_topaz_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/medium_topaz_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/medium_topaz_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/medium_topaz_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/medium_topaz_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/medium_topaz_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/medium_topaz_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/moonstone_block.json b/src/main/resources/assets/spectrum/blockstates/moonstone_block.json
new file mode 100644
index 0000000000..d4999cac00
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/moonstone_block.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/moonstone_block" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/moonstone_chiseled_calcite.json b/src/main/resources/assets/spectrum/blockstates/moonstone_chiseled_calcite.json
new file mode 100644
index 0000000000..c13ba940fd
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/moonstone_chiseled_calcite.json
@@ -0,0 +1,16 @@
+{
+ "variants": {
+ "axis=x": {
+ "model": "spectrum:block/moonstone_chiseled_calcite",
+ "x": 90,
+ "y": 90
+ },
+ "axis=y": {
+ "model": "spectrum:block/moonstone_chiseled_calcite"
+ },
+ "axis=z": {
+ "model": "spectrum:block/moonstone_chiseled_calcite",
+ "x": 90
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/moonstone_chiseled_tuff.json b/src/main/resources/assets/spectrum/blockstates/moonstone_chiseled_tuff.json
new file mode 100644
index 0000000000..85781831c7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/moonstone_chiseled_tuff.json
@@ -0,0 +1,16 @@
+{
+ "variants": {
+ "axis=x": {
+ "model": "spectrum:block/moonstone_chiseled_tuff",
+ "x": 90,
+ "y": 90
+ },
+ "axis=y": {
+ "model": "spectrum:block/moonstone_chiseled_tuff"
+ },
+ "axis=z": {
+ "model": "spectrum:block/moonstone_chiseled_tuff",
+ "x": 90
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/moonstone_cluster.json b/src/main/resources/assets/spectrum/blockstates/moonstone_cluster.json
new file mode 100644
index 0000000000..6d6f72503d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/moonstone_cluster.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/moonstone_cluster",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/moonstone_cluster",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/moonstone_cluster",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/moonstone_cluster",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/moonstone_cluster"
+ },
+ "facing=west": {
+ "model": "spectrum:block/moonstone_cluster",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/onyx_block.json b/src/main/resources/assets/spectrum/blockstates/onyx_block.json
new file mode 100644
index 0000000000..8b95e84093
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/onyx_block.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/onyx_block" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/onyx_chiseled_calcite.json b/src/main/resources/assets/spectrum/blockstates/onyx_chiseled_calcite.json
new file mode 100644
index 0000000000..40eb9b9cef
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/onyx_chiseled_calcite.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/onyx_chiseled_calcite" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/onyx_chiseled_tuff.json b/src/main/resources/assets/spectrum/blockstates/onyx_chiseled_tuff.json
new file mode 100644
index 0000000000..1d7d033185
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/onyx_chiseled_tuff.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/onyx_chiseled_tuff" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/onyx_cluster.json b/src/main/resources/assets/spectrum/blockstates/onyx_cluster.json
new file mode 100644
index 0000000000..61a1a54f8a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/onyx_cluster.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/onyx_cluster",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/onyx_cluster",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/onyx_cluster",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/onyx_cluster",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/onyx_cluster"
+ },
+ "facing=west": {
+ "model": "spectrum:block/onyx_cluster",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/polished_calcite.json b/src/main/resources/assets/spectrum/blockstates/polished_calcite.json
new file mode 100644
index 0000000000..80cba37385
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/polished_calcite.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/polished_calcite" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/polished_calcite_slab.json b/src/main/resources/assets/spectrum/blockstates/polished_calcite_slab.json
new file mode 100644
index 0000000000..f0c236db9d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/polished_calcite_slab.json
@@ -0,0 +1,13 @@
+{
+ "variants": {
+ "type=bottom": {
+ "model": "spectrum:block/polished_calcite_slab"
+ },
+ "type=double": {
+ "model": "spectrum:block/polished_calcite"
+ },
+ "type=top": {
+ "model": "spectrum:block/polished_calcite_slab_top"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/polished_calcite_stairs.json b/src/main/resources/assets/spectrum/blockstates/polished_calcite_stairs.json
new file mode 100644
index 0000000000..c03dd12302
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/polished_calcite_stairs.json
@@ -0,0 +1,209 @@
+{
+ "variants": {
+ "facing=east,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/polished_calcite_stairs_inner"
+ },
+ "facing=east,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/polished_calcite_stairs_outer"
+ },
+ "facing=east,half=bottom,shape=straight": {
+ "model": "spectrum:block/polished_calcite_stairs"
+ },
+ "facing=east,half=top,shape=inner_left": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=inner_right": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_left": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_right": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=straight": {
+ "model": "spectrum:block/polished_calcite_stairs",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=straight": {
+ "model": "spectrum:block/polished_calcite_stairs",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_left": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_right": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_left": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_right": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=straight": {
+ "model": "spectrum:block/polished_calcite_stairs",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/polished_calcite_stairs_inner"
+ },
+ "facing=south,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/polished_calcite_stairs_outer"
+ },
+ "facing=south,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=straight": {
+ "model": "spectrum:block/polished_calcite_stairs",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_left": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_right": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_left": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_right": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=straight": {
+ "model": "spectrum:block/polished_calcite_stairs",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=straight": {
+ "model": "spectrum:block/polished_calcite_stairs",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_left": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_right": {
+ "model": "spectrum:block/polished_calcite_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_left": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_right": {
+ "model": "spectrum:block/polished_calcite_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=straight": {
+ "model": "spectrum:block/polished_calcite_stairs",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/polished_calcite_wall.json b/src/main/resources/assets/spectrum/blockstates/polished_calcite_wall.json
new file mode 100644
index 0000000000..dbd2614640
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/polished_calcite_wall.json
@@ -0,0 +1,90 @@
+{
+ "multipart": [
+ {
+ "when": {
+ "up": "true"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_post"
+ }
+ },
+ {
+ "when": {
+ "north": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_side",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_side",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_side",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_side",
+ "y": 270,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "north": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_side_tall",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_side_tall",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_side_tall",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_calcite_wall_side_tall",
+ "y": 270,
+ "uvlock": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/polished_tuff.json b/src/main/resources/assets/spectrum/blockstates/polished_tuff.json
new file mode 100644
index 0000000000..342d784d34
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/polished_tuff.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/polished_tuff" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/polished_tuff_slab.json b/src/main/resources/assets/spectrum/blockstates/polished_tuff_slab.json
new file mode 100644
index 0000000000..21735b7c13
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/polished_tuff_slab.json
@@ -0,0 +1,13 @@
+{
+ "variants": {
+ "type=bottom": {
+ "model": "spectrum:block/polished_tuff_slab"
+ },
+ "type=double": {
+ "model": "spectrum:block/polished_tuff"
+ },
+ "type=top": {
+ "model": "spectrum:block/polished_tuff_slab_top"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/polished_tuff_stairs.json b/src/main/resources/assets/spectrum/blockstates/polished_tuff_stairs.json
new file mode 100644
index 0000000000..f678748359
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/polished_tuff_stairs.json
@@ -0,0 +1,209 @@
+{
+ "variants": {
+ "facing=east,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/polished_tuff_stairs_inner"
+ },
+ "facing=east,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/polished_tuff_stairs_outer"
+ },
+ "facing=east,half=bottom,shape=straight": {
+ "model": "spectrum:block/polished_tuff_stairs"
+ },
+ "facing=east,half=top,shape=inner_left": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=inner_right": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_left": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_right": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=straight": {
+ "model": "spectrum:block/polished_tuff_stairs",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=straight": {
+ "model": "spectrum:block/polished_tuff_stairs",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_left": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_right": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_left": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_right": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=straight": {
+ "model": "spectrum:block/polished_tuff_stairs",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/polished_tuff_stairs_inner"
+ },
+ "facing=south,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/polished_tuff_stairs_outer"
+ },
+ "facing=south,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=straight": {
+ "model": "spectrum:block/polished_tuff_stairs",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_left": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_right": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_left": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_right": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=straight": {
+ "model": "spectrum:block/polished_tuff_stairs",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=straight": {
+ "model": "spectrum:block/polished_tuff_stairs",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_left": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_right": {
+ "model": "spectrum:block/polished_tuff_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_left": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_right": {
+ "model": "spectrum:block/polished_tuff_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=straight": {
+ "model": "spectrum:block/polished_tuff_stairs",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/polished_tuff_wall.json b/src/main/resources/assets/spectrum/blockstates/polished_tuff_wall.json
new file mode 100644
index 0000000000..136a12311a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/polished_tuff_wall.json
@@ -0,0 +1,90 @@
+{
+ "multipart": [
+ {
+ "when": {
+ "up": "true"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_post"
+ }
+ },
+ {
+ "when": {
+ "north": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_side",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_side",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_side",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_side",
+ "y": 270,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "north": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_side_tall",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_side_tall",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_side_tall",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/polished_tuff_wall_side_tall",
+ "y": 270,
+ "uvlock": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/rainbow_moonstone_block.json b/src/main/resources/assets/spectrum/blockstates/rainbow_moonstone_block.json
new file mode 100644
index 0000000000..c4de17593f
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/rainbow_moonstone_block.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/rainbow_moonstone_block" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/small_citrine_bud.json b/src/main/resources/assets/spectrum/blockstates/small_citrine_bud.json
new file mode 100644
index 0000000000..fa05a80ce0
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/small_citrine_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/small_citrine_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/small_citrine_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/small_citrine_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/small_citrine_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/small_citrine_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/small_citrine_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/small_moonstone_bud.json b/src/main/resources/assets/spectrum/blockstates/small_moonstone_bud.json
new file mode 100644
index 0000000000..d5678a3c99
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/small_moonstone_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/small_moonstone_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/small_moonstone_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/small_moonstone_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/small_moonstone_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/small_moonstone_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/small_moonstone_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/small_onyx_bud.json b/src/main/resources/assets/spectrum/blockstates/small_onyx_bud.json
new file mode 100644
index 0000000000..f76c126479
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/small_onyx_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/small_onyx_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/small_onyx_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/small_onyx_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/small_onyx_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/small_onyx_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/small_onyx_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/small_topaz_bud.json b/src/main/resources/assets/spectrum/blockstates/small_topaz_bud.json
new file mode 100644
index 0000000000..2d01931d3d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/small_topaz_bud.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/small_topaz_bud",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/small_topaz_bud",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/small_topaz_bud",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/small_topaz_bud",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/small_topaz_bud"
+ },
+ "facing=west": {
+ "model": "spectrum:block/small_topaz_bud",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/topaz_block.json b/src/main/resources/assets/spectrum/blockstates/topaz_block.json
new file mode 100644
index 0000000000..487088b1d3
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/topaz_block.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/topaz_block" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/topaz_chiseled_calcite.json b/src/main/resources/assets/spectrum/blockstates/topaz_chiseled_calcite.json
new file mode 100644
index 0000000000..c152baf67b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/topaz_chiseled_calcite.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/topaz_chiseled_calcite" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/topaz_chiseled_tuff.json b/src/main/resources/assets/spectrum/blockstates/topaz_chiseled_tuff.json
new file mode 100644
index 0000000000..1109ca283b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/topaz_chiseled_tuff.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/topaz_chiseled_tuff" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/topaz_cluster.json b/src/main/resources/assets/spectrum/blockstates/topaz_cluster.json
new file mode 100644
index 0000000000..cb5830d977
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/topaz_cluster.json
@@ -0,0 +1,30 @@
+{
+ "variants": {
+ "facing=down": {
+ "model": "spectrum:block/topaz_cluster",
+ "x": 180
+ },
+ "facing=east": {
+ "model": "spectrum:block/topaz_cluster",
+ "x": 90,
+ "y": 90
+ },
+ "facing=north": {
+ "model": "spectrum:block/topaz_cluster",
+ "x": 90
+ },
+ "facing=south": {
+ "model": "spectrum:block/topaz_cluster",
+ "x": 90,
+ "y": 180
+ },
+ "facing=up": {
+ "model": "spectrum:block/topaz_cluster"
+ },
+ "facing=west": {
+ "model": "spectrum:block/topaz_cluster",
+ "x": 90,
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/tuff_brick_slab.json b/src/main/resources/assets/spectrum/blockstates/tuff_brick_slab.json
new file mode 100644
index 0000000000..2701d70275
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/tuff_brick_slab.json
@@ -0,0 +1,13 @@
+{
+ "variants": {
+ "type=bottom": {
+ "model": "spectrum:block/tuff_brick_slab"
+ },
+ "type=double": {
+ "model": "spectrum:block/tuff_bricks"
+ },
+ "type=top": {
+ "model": "spectrum:block/tuff_brick_slab_top"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/tuff_brick_stairs.json b/src/main/resources/assets/spectrum/blockstates/tuff_brick_stairs.json
new file mode 100644
index 0000000000..d4231bd53e
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/tuff_brick_stairs.json
@@ -0,0 +1,209 @@
+{
+ "variants": {
+ "facing=east,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/tuff_brick_stairs_inner"
+ },
+ "facing=east,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/tuff_brick_stairs_outer"
+ },
+ "facing=east,half=bottom,shape=straight": {
+ "model": "spectrum:block/tuff_brick_stairs"
+ },
+ "facing=east,half=top,shape=inner_left": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=inner_right": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_left": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_right": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=straight": {
+ "model": "spectrum:block/tuff_brick_stairs",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=straight": {
+ "model": "spectrum:block/tuff_brick_stairs",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_left": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_right": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_left": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_right": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=straight": {
+ "model": "spectrum:block/tuff_brick_stairs",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/tuff_brick_stairs_inner"
+ },
+ "facing=south,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/tuff_brick_stairs_outer"
+ },
+ "facing=south,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=straight": {
+ "model": "spectrum:block/tuff_brick_stairs",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_left": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_right": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_left": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_right": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=straight": {
+ "model": "spectrum:block/tuff_brick_stairs",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=straight": {
+ "model": "spectrum:block/tuff_brick_stairs",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_left": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_right": {
+ "model": "spectrum:block/tuff_brick_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_left": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_right": {
+ "model": "spectrum:block/tuff_brick_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=straight": {
+ "model": "spectrum:block/tuff_brick_stairs",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/tuff_brick_wall.json b/src/main/resources/assets/spectrum/blockstates/tuff_brick_wall.json
new file mode 100644
index 0000000000..02181ea7a5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/tuff_brick_wall.json
@@ -0,0 +1,90 @@
+{
+ "multipart": [
+ {
+ "when": {
+ "up": "true"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_post"
+ }
+ },
+ {
+ "when": {
+ "north": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_side",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_side",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_side",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_side",
+ "y": 270,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "north": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_side_tall",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_side_tall",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_side_tall",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_brick_wall_side_tall",
+ "y": 270,
+ "uvlock": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/tuff_bricks.json b/src/main/resources/assets/spectrum/blockstates/tuff_bricks.json
new file mode 100644
index 0000000000..05aa080cb2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/tuff_bricks.json
@@ -0,0 +1,5 @@
+{
+ "variants": {
+ "": { "model": "spectrum:block/tuff_bricks" }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/tuff_slab.json b/src/main/resources/assets/spectrum/blockstates/tuff_slab.json
new file mode 100644
index 0000000000..73d0578529
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/tuff_slab.json
@@ -0,0 +1,13 @@
+{
+ "variants": {
+ "type=bottom": {
+ "model": "spectrum:block/tuff_slab"
+ },
+ "type=double": {
+ "model": "minecraft:block/tuff"
+ },
+ "type=top": {
+ "model": "spectrum:block/tuff_slab_top"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/tuff_stairs.json b/src/main/resources/assets/spectrum/blockstates/tuff_stairs.json
new file mode 100644
index 0000000000..0300ad3140
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/tuff_stairs.json
@@ -0,0 +1,209 @@
+{
+ "variants": {
+ "facing=east,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/tuff_stairs_inner"
+ },
+ "facing=east,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=east,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/tuff_stairs_outer"
+ },
+ "facing=east,half=bottom,shape=straight": {
+ "model": "spectrum:block/tuff_stairs"
+ },
+ "facing=east,half=top,shape=inner_left": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=inner_right": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_left": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=outer_right": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=east,half=top,shape=straight": {
+ "model": "spectrum:block/tuff_stairs",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=bottom,shape=straight": {
+ "model": "spectrum:block/tuff_stairs",
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_left": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=inner_right": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_left": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=outer_right": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "x": 180,
+ "uvlock": true
+ },
+ "facing=north,half=top,shape=straight": {
+ "model": "spectrum:block/tuff_stairs",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/tuff_stairs_inner"
+ },
+ "facing=south,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/tuff_stairs_outer"
+ },
+ "facing=south,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=bottom,shape=straight": {
+ "model": "spectrum:block/tuff_stairs",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_left": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=inner_right": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_left": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=outer_right": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=south,half=top,shape=straight": {
+ "model": "spectrum:block/tuff_stairs",
+ "x": 180,
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_left": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=inner_right": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_left": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "y": 90,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=outer_right": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=bottom,shape=straight": {
+ "model": "spectrum:block/tuff_stairs",
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_left": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=inner_right": {
+ "model": "spectrum:block/tuff_stairs_inner",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_left": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=outer_right": {
+ "model": "spectrum:block/tuff_stairs_outer",
+ "x": 180,
+ "y": 270,
+ "uvlock": true
+ },
+ "facing=west,half=top,shape=straight": {
+ "model": "spectrum:block/tuff_stairs",
+ "x": 180,
+ "y": 180,
+ "uvlock": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/blockstates/tuff_wall.json b/src/main/resources/assets/spectrum/blockstates/tuff_wall.json
new file mode 100644
index 0000000000..5f7ae3438d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/blockstates/tuff_wall.json
@@ -0,0 +1,90 @@
+{
+ "multipart": [
+ {
+ "when": {
+ "up": "true"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_post"
+ }
+ },
+ {
+ "when": {
+ "north": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_side",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_side",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_side",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "low"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_side",
+ "y": 270,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "north": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_side_tall",
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "east": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_side_tall",
+ "y": 90,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "south": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_side_tall",
+ "y": 180,
+ "uvlock": true
+ }
+ },
+ {
+ "when": {
+ "west": "tall"
+ },
+ "apply": {
+ "model": "spectrum:block/tuff_wall_side_tall",
+ "y": 270,
+ "uvlock": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/icon.png b/src/main/resources/assets/spectrum/icon.png
new file mode 100644
index 0000000000..15161297ab
Binary files /dev/null and b/src/main/resources/assets/spectrum/icon.png differ
diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json
new file mode 100644
index 0000000000..ada0922443
--- /dev/null
+++ b/src/main/resources/assets/spectrum/lang/en_us.json
@@ -0,0 +1,142 @@
+{
+ "itemGroup.spectrum.general": "Spectrum General",
+ "itemGroup.spectrum.building": "Spectrum Blocks",
+
+ "enchantment.spectrum.resonance": "Resonance",
+
+ "item.spectrum.bedrock_pickaxe": "Bedrock Pickaxe",
+ "item.spectrum.bedrock_axe": "Bedrock Axe",
+ "item.spectrum.bedrock_sword": "Bedrock Sword",
+ "item.spectrum.bedrock_shovel": "Bedrock Shovel",
+ "item.spectrum.bedrock_hoe": "Bedrock Hoe",
+ "item.spectrum.bedrock_helmet": "Bedrock Helmet",
+ "item.spectrum.bedrock_chestplate": "Bedrock Chestplate",
+ "item.spectrum.bedrock_leggings": "Bedrock Leggings",
+ "item.spectrum.bedrock_boots": "Bedrock Boots",
+
+ "item.spectrum.spawner": "Spawner",
+ "item.spectrum.spawner.tooltip.unknown_mob": "Unknown Mob",
+ "item.spectrum.spawner.tooltip.spawn_count": "Spawn Count: %d",
+ "item.spectrum.spawner.tooltip.min_spawn_delay": "Min Spawn Delay: %d",
+ "item.spectrum.spawner.tooltip.max_spawn_delay": "Max Spawn Delay: %d",
+ "item.spectrum.spawner.tooltip.spawn_range": "Spawn Range: %d",
+ "item.spectrum.spawner.tooltip.required_player_range": "Required Player Range: %d",
+
+ "item.spectrum.citrine_shard": "Citrine Shard",
+ "item.spectrum.topaz_shard": "Topaz Shard",
+ "item.spectrum.onyx_shard": "Onyx Shard",
+ "item.spectrum.moonstone_shard": "Moonstone Shard",
+ "item.spectrum.rainbow_moonstone_shard": "Rainbow Moonstone Shard",
+
+ "item.spectrum.glistering_melon_seeds": "Glistering Melon Seeds",
+ "block.spectrum.glistering_melon": "Glistering Melon",
+ "block.spectrum.glistering_melon_stem": "Glistering Melon Stem",
+ "block.spectrum.attached_glistering_melon_stem": "Glistering Melon Stem",
+
+ "block.spectrum.rainbow_moonstone_block": "Block of Rainbow Moonstone",
+ "block.spectrum.small_citrine_bud": "Small Citrine Bud",
+ "block.spectrum.medium_citrine_bud": "Medium Citrine Bud",
+ "block.spectrum.large_citrine_bud": "Large Citrine Bud",
+ "block.spectrum.citrine_cluster": "Citrine Cluster",
+ "block.spectrum.citrine_block": "Block of Citrine",
+ "block.spectrum.budding_citrine": "Budding Citrine",
+ "block.spectrum.small_topaz_bud": "Small Topaz Bud",
+ "block.spectrum.medium_topaz_bud": "Medium Topaz Bud",
+ "block.spectrum.large_topaz_bud": "Large Topaz Bud",
+ "block.spectrum.topaz_cluster": "Topaz Cluster",
+ "block.spectrum.topaz_block": "Block of Topaz",
+ "block.spectrum.budding_topaz": "Budding Topaz",
+ "block.spectrum.small_onyx_bud": "Small Onyx Bud",
+ "block.spectrum.medium_onyx_bud": "Medium Onyx Bud",
+ "block.spectrum.large_onyx_bud": "Large Onxy Bud",
+ "block.spectrum.onyx_cluster": "Onyx Cluster",
+ "block.spectrum.onyx_block": "Block of Onyx",
+ "block.spectrum.budding_onyx": "Budding Onyx",
+ "block.spectrum.small_moonstone_bud": "Small Moonstone Bud",
+ "block.spectrum.medium_moonstone_bud": "Medium Moonstone Bud",
+ "block.spectrum.large_moonstone_bud": "Large Moonstone Bud",
+ "block.spectrum.moonstone_cluster": "Moonstone Cluster",
+ "block.spectrum.moonstone_block": "Block of Moonstone",
+ "block.spectrum.budding_moonstone": "Budding Moonstone",
+
+ "block.spectrum.tuff_slab": "Tuff Slab",
+ "block.spectrum.tuff_wall": "Tuff Wall",
+ "block.spectrum.tuff_stairs": "Tuff Wall",
+ "block.spectrum.polished_tuff": "Polished Tuff",
+ "block.spectrum.polished_tuff_slab": "Polished Tuff Slab",
+ "block.spectrum.polished_tuff_wall": "Polished Tuff Wall",
+ "block.spectrum.polished_tuff_stairs": "Polished Tuff Stairs",
+ "block.spectrum.tuff_bricks": "Polished Tuff Bricks",
+ "block.spectrum.tuff_brick_slab": "Tuff Brick Slab",
+ "block.spectrum.tuff_brick_wall": "Tuff Brick Wall",
+ "block.spectrum.tuff_brick_stairs": "Tuff Brick Stair",
+ "block.spectrum.amethyst_chiseled_tuff": "Amethyst Chiseled Tuff",
+ "block.spectrum.topaz_chiseled_tuff": "Topaz Chiseled Tuff",
+ "block.spectrum.citrine_chiseled_tuff": "Citrine Chiseled Tuff",
+ "block.spectrum.onyx_chiseled_tuff": "Onxy Chiseled Tuff",
+ "block.spectrum.moonstone_chiseled_tuff": "Moonstone Chiseled Tuff",
+
+ "block.spectrum.calcite_slab": "Calcite Slab",
+ "block.spectrum.calcite_wall": "Calcite Wall",
+ "block.spectrum.calcite_stairs": "Calcite Wall",
+ "block.spectrum.polished_calcite": "Polished Calcite",
+ "block.spectrum.polished_calcite_slab": "Polished Calcite Slab",
+ "block.spectrum.polished_calcite_wall": "Polished Calcite Wall",
+ "block.spectrum.polished_calcite_stairs": "Polished Calcite Stairs",
+ "block.spectrum.calcite_bricks": "Polished Calcite Bricks",
+ "block.spectrum.calcite_brick_slab": "Calcite Brick Slab",
+ "block.spectrum.calcite_brick_wall": "Calcite Brick Wall",
+ "block.spectrum.calcite_brick_stairs": "Calcite Brick Stair",
+ "block.spectrum.amethyst_chiseled_calcite": "Amethyst Chiseled Calcite",
+ "block.spectrum.topaz_chiseled_calcite": "Topaz Chiseled Calcite",
+ "block.spectrum.citrine_chiseled_calcite": "Citrine Chiseled Calcite",
+ "block.spectrum.onyx_chiseled_calcite": "Onxy Chiseled Calcite",
+ "block.spectrum.moonstone_chiseled_calcite": "Moonstone Chiseled Calcite",
+
+ "advancements.spectrum.find_geode.title": "Shiny",
+ "advancements.spectrum.find_geode.description": "Find a geode underground.",
+ "advancements.spectrum.harvest_gem.title": "Shiny",
+ "advancements.spectrum.harvest_gem.description": "Find a geode underground.",
+ "advancements.spectrum.craft_energy_collector.title": "Roger that",
+ "advancements.spectrum.craft_energy_collector.description": "Contruct a collector powerful enough to harvest energy from gem geodes.",
+ "advancements.spectrum.place_energy_collector.title": "A new form of energy",
+ "advancements.spectrum.place_energy_collector.description": "Place the collector in the center of a geode and watch it work.",
+
+ "advancements.spectrum.get_resonance_enchanted_tool.title": "A new form of energy",
+ "advancements.spectrum.get_resonance_enchanted_tool.description": "Some blocks in the world resonate a powerful energy. Mining them with simple tools seems to disturb that energy, destroying the block, leaving you without a drop whatsoever. Maybe you can tune your tools to the same frequencies, preserving the precious treasures you came across?",
+
+ "advancements.spectrum.craft_decay.title": "That which should not be",
+ "advancements.spectrum.craft_decay.description": "The alchemists were wrong. There is no universal solvent. But you're sure there is something else...",
+ "advancements.spectrum.place_decay.title": "Organic Matter",
+ "advancements.spectrum.place_decay.description": "Feed it leaves, lean back and watch it devour.",
+ "advancements.spectrum.drop_decay.title": "I don't need no Transmutation",
+ "advancements.spectrum.drop_decay.description": "",
+ "advancements.spectrum.craft_decay2.title": "That which must not be",
+ "advancements.spectrum.craft_decay2.description": "Your first experiments were successful. But there has to be more...",
+ "advancements.spectrum.place_decay2.title": "Place Black Decay",
+ "advancements.spectrum.place_decay2.description": "It's WAY more powerful than your first experiment. It seems to destroy everything it touches after a while. Is there something sturdy enough to withstand it's destructive potential?",
+ "advancements.spectrum.drop_decay2.title": "It... feeds on Obsidian?",
+ "advancements.spectrum.drop_decay2.description": "Obsidian doesn't seem to stop it, either. But the result of your little experiment is pretty interesting nonetheless!",
+ "advancements.spectrum.craft_decay3.title": "That which should never have been",
+ "advancements.spectrum.craft_decay3.description": "It looks like there is still more. Create world-devouring decay by infusing pure crystals with the power of the void.",
+ "advancements.spectrum.place_decay3.title": "Was have you done",
+ "advancements.spectrum.place_decay3.description": "There is no going back... (for now?)",
+
+ "advancements.spectrum.mine_bedrock.title": "Groundbreaking",
+ "advancements.spectrum.mine_bedrock.description": "Break decayed bedrock by using a Netherite Pickaxe.",
+ "advancements.spectrum.enter_dimension.title": "What was once impenetrable",
+ "advancements.spectrum.enter_dimension.description": "Find out what lies between the once impenetrable floor",
+
+ "advancements.spectrum.craft_sapling.title": "Let it grow, let it grow!",
+ "advancements.spectrum.craft_sapling.description": "You're sure combining the remains of the decayed leaves with a young sapling will yield something interesting.",
+ "advancements.spectrum.plant_sapling.title": "A failed experiment?",
+ "advancements.spectrum.plant_sapling.description": "It looks... kinda dead?",
+ "advancements.spectrum.grow_sapling.title": "A successful experiment!",
+ "advancements.spectrum.grow_sapling.description": "It grew! ...somewhat.",
+
+ "advancements.spectrum.burning_curiosity.title": "Burning Curoisity",
+ "advancements.spectrum.burning_curiosity.description": ".",
+ "advancements.spectrum.grow_glistering_melon_plant.title": "A sign of Prosperity",
+ "advancements.spectrum.grow_glistering_melon_plant.description": "Get a glistering melon.. plant!"
+
+}
diff --git a/src/main/resources/assets/spectrum/models/block/amethyst_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/block/amethyst_chiseled_calcite.json
new file mode 100644
index 0000000000..62866b7f49
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/amethyst_chiseled_calcite.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/amethyst_chiseled_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/amethyst_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/block/amethyst_chiseled_tuff.json
new file mode 100644
index 0000000000..cc4f72ab8e
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/amethyst_chiseled_tuff.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/amethyst_chiseled_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/attached_glistering_melon_stem.json b/src/main/resources/assets/spectrum/models/block/attached_glistering_melon_stem.json
new file mode 100644
index 0000000000..2ccbb86347
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/attached_glistering_melon_stem.json
@@ -0,0 +1,7 @@
+{
+ "parent": "minecraft:block/stem_fruit",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem",
+ "upperstem": "spectrum:block/attached_glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/budding_citrine.json b/src/main/resources/assets/spectrum/models/block/budding_citrine.json
new file mode 100644
index 0000000000..1ca08d544f
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/budding_citrine.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/budding_citrine"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/budding_moonstone.json b/src/main/resources/assets/spectrum/models/block/budding_moonstone.json
new file mode 100644
index 0000000000..e0503c4a21
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/budding_moonstone.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/budding_moonstone"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/budding_onyx.json b/src/main/resources/assets/spectrum/models/block/budding_onyx.json
new file mode 100644
index 0000000000..3c5bd59900
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/budding_onyx.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/budding_onyx"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/budding_topaz.json b/src/main/resources/assets/spectrum/models/block/budding_topaz.json
new file mode 100644
index 0000000000..be16376696
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/budding_topaz.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/budding_topaz"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_slab.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_slab.json
new file mode 100644
index 0000000000..1fb75fc368
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_slab.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab",
+ "textures": {
+ "bottom": "spectrum:block/calcite_bricks",
+ "top": "spectrum:block/calcite_bricks",
+ "side": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_slab_top.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_slab_top.json
new file mode 100644
index 0000000000..2b88e0536c
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_slab_top.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab_top",
+ "textures": {
+ "bottom": "spectrum:block/calcite_bricks",
+ "top": "spectrum:block/calcite_bricks",
+ "side": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs.json
new file mode 100644
index 0000000000..2e1d047527
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/stairs",
+ "textures": {
+ "bottom": "spectrum:block/calcite_bricks",
+ "top": "spectrum:block/calcite_bricks",
+ "side": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs_inner.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs_inner.json
new file mode 100644
index 0000000000..dc2c5610f8
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs_inner.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/inner_stairs",
+ "textures": {
+ "bottom": "spectrum:block/calcite_bricks",
+ "top": "spectrum:block/calcite_bricks",
+ "side": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs_outer.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs_outer.json
new file mode 100644
index 0000000000..6691448b66
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_stairs_outer.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/outer_stairs",
+ "textures": {
+ "bottom": "spectrum:block/calcite_bricks",
+ "top": "spectrum:block/calcite_bricks",
+ "side": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_inventory.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_inventory.json
new file mode 100644
index 0000000000..bcc3e8df0c
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_inventory.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/wall_inventory",
+ "textures": {
+ "wall": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_post.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_post.json
new file mode 100644
index 0000000000..414178a6bc
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_post.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_post",
+ "textures": {
+ "wall": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_side.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_side.json
new file mode 100644
index 0000000000..dd122d97f2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_side.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side",
+ "textures": {
+ "wall": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_side_tall.json b/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_side_tall.json
new file mode 100644
index 0000000000..15ef00b624
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_brick_wall_side_tall.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side_tall",
+ "textures": {
+ "wall": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_bricks.json b/src/main/resources/assets/spectrum/models/block/calcite_bricks.json
new file mode 100644
index 0000000000..07b3b610ba
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_bricks.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/calcite_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_slab.json b/src/main/resources/assets/spectrum/models/block/calcite_slab.json
new file mode 100644
index 0000000000..b179e738ca
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_slab.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab",
+ "textures": {
+ "bottom": "minecraft:block/calcite",
+ "top": "minecraft:block/calcite",
+ "side": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_slab_top.json b/src/main/resources/assets/spectrum/models/block/calcite_slab_top.json
new file mode 100644
index 0000000000..561703fea9
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_slab_top.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab_top",
+ "textures": {
+ "bottom": "minecraft:block/calcite",
+ "top": "minecraft:block/calcite",
+ "side": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_stairs.json b/src/main/resources/assets/spectrum/models/block/calcite_stairs.json
new file mode 100644
index 0000000000..d92d8d21b1
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_stairs.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/stairs",
+ "textures": {
+ "bottom": "minecraft:block/calcite",
+ "top": "minecraft:block/calcite",
+ "side": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_stairs_inner.json b/src/main/resources/assets/spectrum/models/block/calcite_stairs_inner.json
new file mode 100644
index 0000000000..c279c96483
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_stairs_inner.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/inner_stairs",
+ "textures": {
+ "bottom": "minecraft:block/calcite",
+ "top": "minecraft:block/calcite",
+ "side": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_stairs_outer.json b/src/main/resources/assets/spectrum/models/block/calcite_stairs_outer.json
new file mode 100644
index 0000000000..27a15535c7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_stairs_outer.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/outer_stairs",
+ "textures": {
+ "bottom": "minecraft:block/calcite",
+ "top": "minecraft:block/calcite",
+ "side": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_wall_inventory.json b/src/main/resources/assets/spectrum/models/block/calcite_wall_inventory.json
new file mode 100644
index 0000000000..b4e686e953
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_wall_inventory.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/wall_inventory",
+ "textures": {
+ "wall": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_wall_post.json b/src/main/resources/assets/spectrum/models/block/calcite_wall_post.json
new file mode 100644
index 0000000000..09ef780f3c
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_wall_post.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_post",
+ "textures": {
+ "wall": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_wall_side.json b/src/main/resources/assets/spectrum/models/block/calcite_wall_side.json
new file mode 100644
index 0000000000..073899b7b2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_wall_side.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side",
+ "textures": {
+ "wall": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/calcite_wall_side_tall.json b/src/main/resources/assets/spectrum/models/block/calcite_wall_side_tall.json
new file mode 100644
index 0000000000..569ada4e92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/calcite_wall_side_tall.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side_tall",
+ "textures": {
+ "wall": "minecraft:block/calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/citrine_block.json b/src/main/resources/assets/spectrum/models/block/citrine_block.json
new file mode 100644
index 0000000000..eb0247025a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/citrine_block.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/citrine_block"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/citrine_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/block/citrine_chiseled_calcite.json
new file mode 100644
index 0000000000..49f4db27a6
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/citrine_chiseled_calcite.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/citrine_chiseled_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/citrine_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/block/citrine_chiseled_tuff.json
new file mode 100644
index 0000000000..b703245253
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/citrine_chiseled_tuff.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/citrine_chiseled_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/citrine_cluster.json b/src/main/resources/assets/spectrum/models/block/citrine_cluster.json
new file mode 100644
index 0000000000..a25ef15a1b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/citrine_cluster.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/citrine_cluster"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon.json b/src/main/resources/assets/spectrum/models/block/glistering_melon.json
new file mode 100644
index 0000000000..85f54ddee6
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon.json
@@ -0,0 +1,7 @@
+{
+ "parent": "minecraft:block/cube_column",
+ "textures": {
+ "end": "spectrum:block/glistering_melon_top",
+ "side": "spectrum:block/glistering_melon_side"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage0.json b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage0.json
new file mode 100644
index 0000000000..cdfa1fd2cc
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage0.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/stem_growth0",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage1.json b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage1.json
new file mode 100644
index 0000000000..5f53ccae13
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage1.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/stem_growth1",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage2.json b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage2.json
new file mode 100644
index 0000000000..db9d6138d5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage2.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/stem_growth2",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage3.json b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage3.json
new file mode 100644
index 0000000000..5226d266b9
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage3.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/stem_growth3",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage4.json b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage4.json
new file mode 100644
index 0000000000..2d8ec278f5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage4.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/stem_growth4",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage5.json b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage5.json
new file mode 100644
index 0000000000..0b19764d0b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage5.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/stem_growth5",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage6.json b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage6.json
new file mode 100644
index 0000000000..aabc73a629
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage6.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/stem_growth6",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage7.json b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage7.json
new file mode 100644
index 0000000000..a05a7a62d7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/glistering_melon_stem_stage7.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/stem_growth7",
+ "textures": {
+ "stem": "spectrum:block/glistering_melon_stem"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/large_citrine_bud.json b/src/main/resources/assets/spectrum/models/block/large_citrine_bud.json
new file mode 100644
index 0000000000..352e753ad8
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/large_citrine_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/large_citrine_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/large_moonstone_bud.json b/src/main/resources/assets/spectrum/models/block/large_moonstone_bud.json
new file mode 100644
index 0000000000..6bf6b20eeb
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/large_moonstone_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/large_moonstone_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/large_onyx_bud.json b/src/main/resources/assets/spectrum/models/block/large_onyx_bud.json
new file mode 100644
index 0000000000..12b4b9541e
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/large_onyx_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/large_onyx_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/large_topaz_bud.json b/src/main/resources/assets/spectrum/models/block/large_topaz_bud.json
new file mode 100644
index 0000000000..eda6da5215
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/large_topaz_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/large_topaz_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/medium_citrine_bud.json b/src/main/resources/assets/spectrum/models/block/medium_citrine_bud.json
new file mode 100644
index 0000000000..c689d33610
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/medium_citrine_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/medium_citrine_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/medium_moonstone_bud.json b/src/main/resources/assets/spectrum/models/block/medium_moonstone_bud.json
new file mode 100644
index 0000000000..fa0c327862
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/medium_moonstone_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/medium_moonstone_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/medium_onyx_bud.json b/src/main/resources/assets/spectrum/models/block/medium_onyx_bud.json
new file mode 100644
index 0000000000..57ae6bd7af
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/medium_onyx_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/medium_onyx_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/medium_topaz_bud.json b/src/main/resources/assets/spectrum/models/block/medium_topaz_bud.json
new file mode 100644
index 0000000000..9b38fbe9cd
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/medium_topaz_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/medium_topaz_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/moonstone_block.json b/src/main/resources/assets/spectrum/models/block/moonstone_block.json
new file mode 100644
index 0000000000..ce53bfcab2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/moonstone_block.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/moonstone_block"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/moonstone_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/block/moonstone_chiseled_calcite.json
new file mode 100644
index 0000000000..cf39368cf5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/moonstone_chiseled_calcite.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/moonstone_chiseled_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/moonstone_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/block/moonstone_chiseled_tuff.json
new file mode 100644
index 0000000000..630b0c9848
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/moonstone_chiseled_tuff.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/moonstone_chiseled_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/moonstone_cluster.json b/src/main/resources/assets/spectrum/models/block/moonstone_cluster.json
new file mode 100644
index 0000000000..3c72a44f24
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/moonstone_cluster.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/moonstone_cluster"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/onyx_block.json b/src/main/resources/assets/spectrum/models/block/onyx_block.json
new file mode 100644
index 0000000000..c3e91b6c33
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/onyx_block.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/onyx_block"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/onyx_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/block/onyx_chiseled_calcite.json
new file mode 100644
index 0000000000..71cc94fc5e
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/onyx_chiseled_calcite.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/onyx_chiseled_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/onyx_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/block/onyx_chiseled_tuff.json
new file mode 100644
index 0000000000..437198eec2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/onyx_chiseled_tuff.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/onyx_chiseled_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/onyx_cluster.json b/src/main/resources/assets/spectrum/models/block/onyx_cluster.json
new file mode 100644
index 0000000000..532600b945
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/onyx_cluster.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/onyx_cluster"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite.json b/src/main/resources/assets/spectrum/models/block/polished_calcite.json
new file mode 100644
index 0000000000..ffc54fc675
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_slab.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_slab.json
new file mode 100644
index 0000000000..664375a8f5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_slab.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab",
+ "textures": {
+ "bottom": "spectrum:block/polished_calcite",
+ "top": "spectrum:block/polished_calcite",
+ "side": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_slab_top.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_slab_top.json
new file mode 100644
index 0000000000..735b47c6bd
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_slab_top.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab_top",
+ "textures": {
+ "bottom": "spectrum:block/polished_calcite",
+ "top": "spectrum:block/polished_calcite",
+ "side": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs.json
new file mode 100644
index 0000000000..7bc1a34598
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/stairs",
+ "textures": {
+ "bottom": "spectrum:block/polished_calcite",
+ "top": "spectrum:block/polished_calcite",
+ "side": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs_inner.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs_inner.json
new file mode 100644
index 0000000000..b2a1499d6d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs_inner.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/inner_stairs",
+ "textures": {
+ "bottom": "spectrum:block/polished_calcite",
+ "top": "spectrum:block/polished_calcite",
+ "side": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs_outer.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs_outer.json
new file mode 100644
index 0000000000..521974c267
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_stairs_outer.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/outer_stairs",
+ "textures": {
+ "bottom": "spectrum:block/polished_calcite",
+ "top": "spectrum:block/polished_calcite",
+ "side": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_inventory.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_inventory.json
new file mode 100644
index 0000000000..fb515fc6db
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_inventory.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/wall_inventory",
+ "textures": {
+ "wall": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_post.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_post.json
new file mode 100644
index 0000000000..87a68cfd52
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_post.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_post",
+ "textures": {
+ "wall": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_side.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_side.json
new file mode 100644
index 0000000000..d1acd9eceb
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_side.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side",
+ "textures": {
+ "wall": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_side_tall.json b/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_side_tall.json
new file mode 100644
index 0000000000..655967b274
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_calcite_wall_side_tall.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side_tall",
+ "textures": {
+ "wall": "spectrum:block/polished_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff.json b/src/main/resources/assets/spectrum/models/block/polished_tuff.json
new file mode 100644
index 0000000000..313ad1b210
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_slab.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_slab.json
new file mode 100644
index 0000000000..4a064a31ac
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_slab.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab",
+ "textures": {
+ "bottom": "spectrum:block/polished_tuff",
+ "top": "spectrum:block/polished_tuff",
+ "side": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_slab_top.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_slab_top.json
new file mode 100644
index 0000000000..a4293bada3
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_slab_top.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab_top",
+ "textures": {
+ "bottom": "spectrum:block/polished_tuff",
+ "top": "spectrum:block/polished_tuff",
+ "side": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs.json
new file mode 100644
index 0000000000..4ba18a4ca3
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/stairs",
+ "textures": {
+ "bottom": "spectrum:block/polished_tuff",
+ "top": "spectrum:block/polished_tuff",
+ "side": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs_inner.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs_inner.json
new file mode 100644
index 0000000000..68895cbbee
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs_inner.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/inner_stairs",
+ "textures": {
+ "bottom": "spectrum:block/polished_tuff",
+ "top": "spectrum:block/polished_tuff",
+ "side": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs_outer.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs_outer.json
new file mode 100644
index 0000000000..1430e0e98c
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_stairs_outer.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/outer_stairs",
+ "textures": {
+ "bottom": "spectrum:block/polished_tuff",
+ "top": "spectrum:block/polished_tuff",
+ "side": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_inventory.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_inventory.json
new file mode 100644
index 0000000000..0f4d58fbef
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_inventory.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/wall_inventory",
+ "textures": {
+ "wall": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_post.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_post.json
new file mode 100644
index 0000000000..52a743f2d3
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_post.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_post",
+ "textures": {
+ "wall": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_side.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_side.json
new file mode 100644
index 0000000000..8c7c46e524
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_side.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side",
+ "textures": {
+ "wall": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_side_tall.json b/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_side_tall.json
new file mode 100644
index 0000000000..fb24c366a7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/polished_tuff_wall_side_tall.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side_tall",
+ "textures": {
+ "wall": "spectrum:block/polished_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/rainbow_moonstone_block.json b/src/main/resources/assets/spectrum/models/block/rainbow_moonstone_block.json
new file mode 100644
index 0000000000..73c30f732b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/rainbow_moonstone_block.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/rainbow_moonstone_block"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/small_citrine_bud.json b/src/main/resources/assets/spectrum/models/block/small_citrine_bud.json
new file mode 100644
index 0000000000..5dcc9c7b72
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/small_citrine_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/small_citrine_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/small_moonstone_bud.json b/src/main/resources/assets/spectrum/models/block/small_moonstone_bud.json
new file mode 100644
index 0000000000..ea705a034d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/small_moonstone_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/small_moonstone_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/small_onyx_bud.json b/src/main/resources/assets/spectrum/models/block/small_onyx_bud.json
new file mode 100644
index 0000000000..f573385dd7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/small_onyx_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/small_onyx_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/small_topaz_bud.json b/src/main/resources/assets/spectrum/models/block/small_topaz_bud.json
new file mode 100644
index 0000000000..dc4d61cba0
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/small_topaz_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/small_topaz_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/topaz_block.json b/src/main/resources/assets/spectrum/models/block/topaz_block.json
new file mode 100644
index 0000000000..2de7f384a8
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/topaz_block.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/topaz_block"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/topaz_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/block/topaz_chiseled_calcite.json
new file mode 100644
index 0000000000..5ad415a340
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/topaz_chiseled_calcite.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/topaz_chiseled_calcite"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/topaz_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/block/topaz_chiseled_tuff.json
new file mode 100644
index 0000000000..38c2040467
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/topaz_chiseled_tuff.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/topaz_chiseled_tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/topaz_cluster.json b/src/main/resources/assets/spectrum/models/block/topaz_cluster.json
new file mode 100644
index 0000000000..5950972f8d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/topaz_cluster.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cross",
+ "textures": {
+ "cross": "spectrum:block/topaz_cluster"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_slab.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_slab.json
new file mode 100644
index 0000000000..50046c7365
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_slab.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab",
+ "textures": {
+ "bottom": "spectrum:block/tuff_bricks",
+ "top": "spectrum:block/tuff_bricks",
+ "side": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_slab_top.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_slab_top.json
new file mode 100644
index 0000000000..4f354224ff
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_slab_top.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab_top",
+ "textures": {
+ "bottom": "spectrum:block/tuff_bricks",
+ "top": "spectrum:block/tuff_bricks",
+ "side": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs.json
new file mode 100644
index 0000000000..34f10a106f
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/stairs",
+ "textures": {
+ "bottom": "spectrum:block/tuff_bricks",
+ "top": "spectrum:block/tuff_bricks",
+ "side": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs_inner.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs_inner.json
new file mode 100644
index 0000000000..315a603979
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs_inner.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/inner_stairs",
+ "textures": {
+ "bottom": "spectrum:block/tuff_bricks",
+ "top": "spectrum:block/tuff_bricks",
+ "side": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs_outer.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs_outer.json
new file mode 100644
index 0000000000..3d67c63d2d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_stairs_outer.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/outer_stairs",
+ "textures": {
+ "bottom": "spectrum:block/tuff_bricks",
+ "top": "spectrum:block/tuff_bricks",
+ "side": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_inventory.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_inventory.json
new file mode 100644
index 0000000000..57d2c99309
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_inventory.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/wall_inventory",
+ "textures": {
+ "wall": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_post.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_post.json
new file mode 100644
index 0000000000..e073a2c184
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_post.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_post",
+ "textures": {
+ "wall": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_side.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_side.json
new file mode 100644
index 0000000000..e3eeb6e173
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_side.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side",
+ "textures": {
+ "wall": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_side_tall.json b/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_side_tall.json
new file mode 100644
index 0000000000..3661d931eb
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_brick_wall_side_tall.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side_tall",
+ "textures": {
+ "wall": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_bricks.json b/src/main/resources/assets/spectrum/models/block/tuff_bricks.json
new file mode 100644
index 0000000000..c0b0224cd3
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_bricks.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "spectrum:block/tuff_bricks"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_slab.json b/src/main/resources/assets/spectrum/models/block/tuff_slab.json
new file mode 100644
index 0000000000..a6035bd4d9
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_slab.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab",
+ "textures": {
+ "bottom": "minecraft:block/tuff",
+ "top": "minecraft:block/tuff",
+ "side": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_slab_top.json b/src/main/resources/assets/spectrum/models/block/tuff_slab_top.json
new file mode 100644
index 0000000000..515fb53bba
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_slab_top.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/slab_top",
+ "textures": {
+ "bottom": "minecraft:block/tuff",
+ "top": "minecraft:block/tuff",
+ "side": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_stairs.json b/src/main/resources/assets/spectrum/models/block/tuff_stairs.json
new file mode 100644
index 0000000000..e2fcd69ee9
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_stairs.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/stairs",
+ "textures": {
+ "bottom": "minecraft:block/tuff",
+ "top": "minecraft:block/tuff",
+ "side": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_stairs_inner.json b/src/main/resources/assets/spectrum/models/block/tuff_stairs_inner.json
new file mode 100644
index 0000000000..60a675f828
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_stairs_inner.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/inner_stairs",
+ "textures": {
+ "bottom": "minecraft:block/tuff",
+ "top": "minecraft:block/tuff",
+ "side": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_stairs_outer.json b/src/main/resources/assets/spectrum/models/block/tuff_stairs_outer.json
new file mode 100644
index 0000000000..30b9738fc3
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_stairs_outer.json
@@ -0,0 +1,8 @@
+{
+ "parent": "minecraft:block/outer_stairs",
+ "textures": {
+ "bottom": "minecraft:block/tuff",
+ "top": "minecraft:block/tuff",
+ "side": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_wall_inventory.json b/src/main/resources/assets/spectrum/models/block/tuff_wall_inventory.json
new file mode 100644
index 0000000000..f071950219
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_wall_inventory.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/wall_inventory",
+ "textures": {
+ "wall": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_wall_post.json b/src/main/resources/assets/spectrum/models/block/tuff_wall_post.json
new file mode 100644
index 0000000000..66c4787653
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_wall_post.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_post",
+ "textures": {
+ "wall": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_wall_side.json b/src/main/resources/assets/spectrum/models/block/tuff_wall_side.json
new file mode 100644
index 0000000000..1590701cac
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_wall_side.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side",
+ "textures": {
+ "wall": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/block/tuff_wall_side_tall.json b/src/main/resources/assets/spectrum/models/block/tuff_wall_side_tall.json
new file mode 100644
index 0000000000..9b7e3338c1
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/block/tuff_wall_side_tall.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/template_wall_side_tall",
+ "textures": {
+ "wall": "minecraft:block/tuff"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/amethyst_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/item/amethyst_chiseled_calcite.json
new file mode 100644
index 0000000000..1a52a39cda
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/amethyst_chiseled_calcite.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/amethyst_chiseled_calcite"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/amethyst_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/item/amethyst_chiseled_tuff.json
new file mode 100644
index 0000000000..dad1c9be64
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/amethyst_chiseled_tuff.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/amethyst_chiseled_tuff"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_axe.json b/src/main/resources/assets/spectrum/models/item/bedrock_axe.json
new file mode 100644
index 0000000000..497488fcc7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_axe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_axe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_boots.json b/src/main/resources/assets/spectrum/models/item/bedrock_boots.json
new file mode 100644
index 0000000000..320399213d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_boots.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_boots"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_chestplate.json b/src/main/resources/assets/spectrum/models/item/bedrock_chestplate.json
new file mode 100644
index 0000000000..f03cef6832
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_chestplate.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_chestplate"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_helmet.json b/src/main/resources/assets/spectrum/models/item/bedrock_helmet.json
new file mode 100644
index 0000000000..101e402d95
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_helmet.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_helmet"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_hoe.json b/src/main/resources/assets/spectrum/models/item/bedrock_hoe.json
new file mode 100644
index 0000000000..18660633c4
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_hoe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_hoe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_leggings.json b/src/main/resources/assets/spectrum/models/item/bedrock_leggings.json
new file mode 100644
index 0000000000..10c1610fe0
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_leggings.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_leggings"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_pickaxe.json b/src/main/resources/assets/spectrum/models/item/bedrock_pickaxe.json
new file mode 100644
index 0000000000..01d4d225f5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_pickaxe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_pickaxe"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_shovel.json b/src/main/resources/assets/spectrum/models/item/bedrock_shovel.json
new file mode 100644
index 0000000000..4e7f4235a5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_shovel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_shovel"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/bedrock_sword.json b/src/main/resources/assets/spectrum/models/item/bedrock_sword.json
new file mode 100644
index 0000000000..c8a78cbb39
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/bedrock_sword.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/bedrock_sword"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/budding_citrine.json b/src/main/resources/assets/spectrum/models/item/budding_citrine.json
new file mode 100644
index 0000000000..87918ba72e
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/budding_citrine.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/budding_citrine"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/budding_moonstone.json b/src/main/resources/assets/spectrum/models/item/budding_moonstone.json
new file mode 100644
index 0000000000..66b6324d90
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/budding_moonstone.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/budding_moonstone"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/budding_onyx.json b/src/main/resources/assets/spectrum/models/item/budding_onyx.json
new file mode 100644
index 0000000000..dac80b03ac
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/budding_onyx.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/budding_onyx"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/budding_topaz.json b/src/main/resources/assets/spectrum/models/item/budding_topaz.json
new file mode 100644
index 0000000000..4c24199e05
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/budding_topaz.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/budding_topaz"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/calcite_brick_slab.json b/src/main/resources/assets/spectrum/models/item/calcite_brick_slab.json
new file mode 100644
index 0000000000..1c873d9ff4
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/calcite_brick_slab.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/calcite_brick_slab"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/calcite_brick_stairs.json b/src/main/resources/assets/spectrum/models/item/calcite_brick_stairs.json
new file mode 100644
index 0000000000..27863f7e74
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/calcite_brick_stairs.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/calcite_brick_stairs"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/calcite_brick_wall.json b/src/main/resources/assets/spectrum/models/item/calcite_brick_wall.json
new file mode 100644
index 0000000000..b608755282
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/calcite_brick_wall.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/calcite_brick_wall_inventory"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/calcite_bricks.json b/src/main/resources/assets/spectrum/models/item/calcite_bricks.json
new file mode 100644
index 0000000000..521d7db8e8
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/calcite_bricks.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/calcite_bricks"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/calcite_slab.json b/src/main/resources/assets/spectrum/models/item/calcite_slab.json
new file mode 100644
index 0000000000..4fcc7c4781
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/calcite_slab.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/calcite_slab"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/calcite_stairs.json b/src/main/resources/assets/spectrum/models/item/calcite_stairs.json
new file mode 100644
index 0000000000..5418fdffa5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/calcite_stairs.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/calcite_stairs"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/calcite_wall.json b/src/main/resources/assets/spectrum/models/item/calcite_wall.json
new file mode 100644
index 0000000000..69203f5f2f
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/calcite_wall.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/calcite_wall_inventory"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/citrine_block.json b/src/main/resources/assets/spectrum/models/item/citrine_block.json
new file mode 100644
index 0000000000..8ddf391f48
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/citrine_block.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/citrine_block"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/citrine_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/item/citrine_chiseled_calcite.json
new file mode 100644
index 0000000000..0ceaa4622e
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/citrine_chiseled_calcite.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/citrine_chiseled_calcite"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/citrine_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/item/citrine_chiseled_tuff.json
new file mode 100644
index 0000000000..3baca878ea
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/citrine_chiseled_tuff.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/citrine_chiseled_tuff"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/citrine_cluster.json b/src/main/resources/assets/spectrum/models/item/citrine_cluster.json
new file mode 100644
index 0000000000..857d2ddab7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/citrine_cluster.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/citrine_cluster"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/citrine_shard.json b/src/main/resources/assets/spectrum/models/item/citrine_shard.json
new file mode 100644
index 0000000000..bdc36e7c2f
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/citrine_shard.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/citrine_shard"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/glistering_melon.json b/src/main/resources/assets/spectrum/models/item/glistering_melon.json
new file mode 100644
index 0000000000..c7da47ed28
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/glistering_melon.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/glistering_melon"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/glistering_melon_seeds.json b/src/main/resources/assets/spectrum/models/item/glistering_melon_seeds.json
new file mode 100644
index 0000000000..b10c35ab7d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/glistering_melon_seeds.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:item/glistering_melon_seeds"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/large_citrine_bud.json b/src/main/resources/assets/spectrum/models/item/large_citrine_bud.json
new file mode 100644
index 0000000000..9d2bf90c16
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/large_citrine_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/large_citrine_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/large_moonstone_bud.json b/src/main/resources/assets/spectrum/models/item/large_moonstone_bud.json
new file mode 100644
index 0000000000..92f78c3d65
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/large_moonstone_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/large_moonstone_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/large_onyx_bud.json b/src/main/resources/assets/spectrum/models/item/large_onyx_bud.json
new file mode 100644
index 0000000000..eb85ffb8f7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/large_onyx_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/large_onyx_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/large_topaz_bud.json b/src/main/resources/assets/spectrum/models/item/large_topaz_bud.json
new file mode 100644
index 0000000000..357bc12940
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/large_topaz_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/large_topaz_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/medium_citrine_bud.json b/src/main/resources/assets/spectrum/models/item/medium_citrine_bud.json
new file mode 100644
index 0000000000..2f2a492712
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/medium_citrine_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/medium_citrine_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/medium_moonstone_bud.json b/src/main/resources/assets/spectrum/models/item/medium_moonstone_bud.json
new file mode 100644
index 0000000000..56883a99ee
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/medium_moonstone_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/medium_moonstone_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/medium_onyx_bud.json b/src/main/resources/assets/spectrum/models/item/medium_onyx_bud.json
new file mode 100644
index 0000000000..4a6d0c453b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/medium_onyx_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/medium_onyx_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/medium_topaz_bud.json b/src/main/resources/assets/spectrum/models/item/medium_topaz_bud.json
new file mode 100644
index 0000000000..ce99295968
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/medium_topaz_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/medium_topaz_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/moonstone_block.json b/src/main/resources/assets/spectrum/models/item/moonstone_block.json
new file mode 100644
index 0000000000..df222f5972
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/moonstone_block.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/moonstone_block"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/moonstone_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/item/moonstone_chiseled_calcite.json
new file mode 100644
index 0000000000..977b3de812
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/moonstone_chiseled_calcite.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/moonstone_chiseled_calcite"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/moonstone_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/item/moonstone_chiseled_tuff.json
new file mode 100644
index 0000000000..5acdd94dca
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/moonstone_chiseled_tuff.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/moonstone_chiseled_tuff"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/moonstone_cluster.json b/src/main/resources/assets/spectrum/models/item/moonstone_cluster.json
new file mode 100644
index 0000000000..33b5ad5e97
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/moonstone_cluster.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/moonstone_cluster"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/moonstone_shard.json b/src/main/resources/assets/spectrum/models/item/moonstone_shard.json
new file mode 100644
index 0000000000..7acb87d11a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/moonstone_shard.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/moonstone_shard"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/onyx_block.json b/src/main/resources/assets/spectrum/models/item/onyx_block.json
new file mode 100644
index 0000000000..9383d4806c
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/onyx_block.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/onyx_block"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/onyx_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/item/onyx_chiseled_calcite.json
new file mode 100644
index 0000000000..350afdfc6d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/onyx_chiseled_calcite.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/onyx_chiseled_calcite"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/onyx_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/item/onyx_chiseled_tuff.json
new file mode 100644
index 0000000000..c82d041735
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/onyx_chiseled_tuff.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/onyx_chiseled_tuff"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/onyx_cluster.json b/src/main/resources/assets/spectrum/models/item/onyx_cluster.json
new file mode 100644
index 0000000000..644ab35d7a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/onyx_cluster.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/onyx_cluster"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/onyx_shard.json b/src/main/resources/assets/spectrum/models/item/onyx_shard.json
new file mode 100644
index 0000000000..ecff28464a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/onyx_shard.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/onyx_shard"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/polished_calcite.json b/src/main/resources/assets/spectrum/models/item/polished_calcite.json
new file mode 100644
index 0000000000..5664376b3a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/polished_calcite.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/polished_calcite"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/polished_calcite_slab.json b/src/main/resources/assets/spectrum/models/item/polished_calcite_slab.json
new file mode 100644
index 0000000000..1526385dcc
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/polished_calcite_slab.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/polished_calcite_slab"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/polished_calcite_stairs.json b/src/main/resources/assets/spectrum/models/item/polished_calcite_stairs.json
new file mode 100644
index 0000000000..d0b3e49050
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/polished_calcite_stairs.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/polished_calcite_stairs"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/polished_calcite_wall.json b/src/main/resources/assets/spectrum/models/item/polished_calcite_wall.json
new file mode 100644
index 0000000000..d8f8ab2f2d
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/polished_calcite_wall.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/polished_calcite_wall_inventory"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/polished_tuff.json b/src/main/resources/assets/spectrum/models/item/polished_tuff.json
new file mode 100644
index 0000000000..e1fe14eeb5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/polished_tuff.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/polished_tuff"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/polished_tuff_slab.json b/src/main/resources/assets/spectrum/models/item/polished_tuff_slab.json
new file mode 100644
index 0000000000..1e56f24a76
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/polished_tuff_slab.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/polished_tuff_slab"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/polished_tuff_stairs.json b/src/main/resources/assets/spectrum/models/item/polished_tuff_stairs.json
new file mode 100644
index 0000000000..10c97040d1
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/polished_tuff_stairs.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/polished_tuff_stairs"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/polished_tuff_wall.json b/src/main/resources/assets/spectrum/models/item/polished_tuff_wall.json
new file mode 100644
index 0000000000..0239f3ac3b
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/polished_tuff_wall.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/polished_tuff_wall_inventory"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/rainbow_moonstone_block.json b/src/main/resources/assets/spectrum/models/item/rainbow_moonstone_block.json
new file mode 100644
index 0000000000..e7db31e4b5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/rainbow_moonstone_block.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/rainbow_moonstone_block"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/rainbow_moonstone_shard.json b/src/main/resources/assets/spectrum/models/item/rainbow_moonstone_shard.json
new file mode 100644
index 0000000000..a151d7540f
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/rainbow_moonstone_shard.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/rainbow_moonstone_shard"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/small_citrine_bud.json b/src/main/resources/assets/spectrum/models/item/small_citrine_bud.json
new file mode 100644
index 0000000000..bc7488e827
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/small_citrine_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/small_citrine_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/small_moonstone_bud.json b/src/main/resources/assets/spectrum/models/item/small_moonstone_bud.json
new file mode 100644
index 0000000000..a7f7067ff0
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/small_moonstone_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/small_moonstone_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/small_onyx_bud.json b/src/main/resources/assets/spectrum/models/item/small_onyx_bud.json
new file mode 100644
index 0000000000..8a17d81ce7
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/small_onyx_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/small_onyx_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/small_topaz_bud.json b/src/main/resources/assets/spectrum/models/item/small_topaz_bud.json
new file mode 100644
index 0000000000..0dbd248143
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/small_topaz_bud.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/small_topaz_bud"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/spawner.json b/src/main/resources/assets/spectrum/models/item/spawner.json
new file mode 100644
index 0000000000..57db230cf6
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/spawner.json
@@ -0,0 +1,3 @@
+{
+ "parent": "minecraft:block/spawner"
+}
diff --git a/src/main/resources/assets/spectrum/models/item/topaz_block.json b/src/main/resources/assets/spectrum/models/item/topaz_block.json
new file mode 100644
index 0000000000..da76a589c2
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/topaz_block.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/topaz_block"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/topaz_chiseled_calcite.json b/src/main/resources/assets/spectrum/models/item/topaz_chiseled_calcite.json
new file mode 100644
index 0000000000..7cfa44eadd
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/topaz_chiseled_calcite.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/topaz_chiseled_calcite"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/topaz_chiseled_tuff.json b/src/main/resources/assets/spectrum/models/item/topaz_chiseled_tuff.json
new file mode 100644
index 0000000000..682bcedb46
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/topaz_chiseled_tuff.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/topaz_chiseled_tuff"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/topaz_cluster.json b/src/main/resources/assets/spectrum/models/item/topaz_cluster.json
new file mode 100644
index 0000000000..6db6c63ec6
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/topaz_cluster.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "spectrum:block/topaz_cluster"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/topaz_shard.json b/src/main/resources/assets/spectrum/models/item/topaz_shard.json
new file mode 100644
index 0000000000..0b79e66935
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/topaz_shard.json
@@ -0,0 +1,6 @@
+{
+ "parent": "builtin/generated",
+ "textures": {
+ "layer0": "spectrum:item/topaz_shard"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/tuff_brick_slab.json b/src/main/resources/assets/spectrum/models/item/tuff_brick_slab.json
new file mode 100644
index 0000000000..353fbdc9ad
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/tuff_brick_slab.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/tuff_brick_slab"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/tuff_brick_stairs.json b/src/main/resources/assets/spectrum/models/item/tuff_brick_stairs.json
new file mode 100644
index 0000000000..afe48289d5
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/tuff_brick_stairs.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/tuff_brick_stairs"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/tuff_brick_wall.json b/src/main/resources/assets/spectrum/models/item/tuff_brick_wall.json
new file mode 100644
index 0000000000..849f36ce4a
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/tuff_brick_wall.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/tuff_brick_wall_inventory"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/tuff_bricks.json b/src/main/resources/assets/spectrum/models/item/tuff_bricks.json
new file mode 100644
index 0000000000..08d34cb730
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/tuff_bricks.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/tuff_bricks"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/tuff_slab.json b/src/main/resources/assets/spectrum/models/item/tuff_slab.json
new file mode 100644
index 0000000000..0f509fe2c9
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/tuff_slab.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/tuff_slab"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/tuff_stairs.json b/src/main/resources/assets/spectrum/models/item/tuff_stairs.json
new file mode 100644
index 0000000000..62f25b0b37
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/tuff_stairs.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/tuff_stairs"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/models/item/tuff_wall.json b/src/main/resources/assets/spectrum/models/item/tuff_wall.json
new file mode 100644
index 0000000000..d0fdc9986f
--- /dev/null
+++ b/src/main/resources/assets/spectrum/models/item/tuff_wall.json
@@ -0,0 +1,3 @@
+{
+ "parent": "spectrum:block/tuff_wall_inventory"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_calcite.png b/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_calcite.png
new file mode 100644
index 0000000000..d4c48ec874
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_calcite.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_calcite.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_calcite.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_calcite.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_tuff.png b/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_tuff.png
new file mode 100644
index 0000000000..ce424ea4ca
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_tuff.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_tuff.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_tuff.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/amethyst_chiseled_tuff.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/attached_glistering_melon_stem.png b/src/main/resources/assets/spectrum/textures/block/attached_glistering_melon_stem.png
new file mode 100644
index 0000000000..94165169d5
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/attached_glistering_melon_stem.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/budding_citrine.png b/src/main/resources/assets/spectrum/textures/block/budding_citrine.png
new file mode 100644
index 0000000000..54a1be11ac
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/budding_citrine.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/budding_moonstone.png b/src/main/resources/assets/spectrum/textures/block/budding_moonstone.png
new file mode 100644
index 0000000000..725309012f
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/budding_moonstone.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/budding_onyx.png b/src/main/resources/assets/spectrum/textures/block/budding_onyx.png
new file mode 100644
index 0000000000..ab116ecdee
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/budding_onyx.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/budding_topaz.png b/src/main/resources/assets/spectrum/textures/block/budding_topaz.png
new file mode 100644
index 0000000000..adb0198955
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/budding_topaz.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/calcite_bricks.png b/src/main/resources/assets/spectrum/textures/block/calcite_bricks.png
new file mode 100644
index 0000000000..f675c57019
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/calcite_bricks.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/citrine_block.png b/src/main/resources/assets/spectrum/textures/block/citrine_block.png
new file mode 100644
index 0000000000..0884e3a7fa
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/citrine_block.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_calcite.png b/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_calcite.png
new file mode 100644
index 0000000000..53e3a47620
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_calcite.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_calcite.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_calcite.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_calcite.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_tuff.png b/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_tuff.png
new file mode 100644
index 0000000000..8ce518a2c8
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_tuff.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_tuff.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_tuff.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/citrine_chiseled_tuff.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/citrine_cluster.png b/src/main/resources/assets/spectrum/textures/block/citrine_cluster.png
new file mode 100644
index 0000000000..d837b23301
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/citrine_cluster.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/glistering_melon_side.png b/src/main/resources/assets/spectrum/textures/block/glistering_melon_side.png
new file mode 100644
index 0000000000..9c380340fe
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/glistering_melon_side.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/glistering_melon_stem.png b/src/main/resources/assets/spectrum/textures/block/glistering_melon_stem.png
new file mode 100644
index 0000000000..f551a4eeeb
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/glistering_melon_stem.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/glistering_melon_top.png b/src/main/resources/assets/spectrum/textures/block/glistering_melon_top.png
new file mode 100644
index 0000000000..38725fac8e
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/glistering_melon_top.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/large_citrine_bud.png b/src/main/resources/assets/spectrum/textures/block/large_citrine_bud.png
new file mode 100644
index 0000000000..2d12c27fc6
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/large_citrine_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/large_moonstone_bud.png b/src/main/resources/assets/spectrum/textures/block/large_moonstone_bud.png
new file mode 100644
index 0000000000..3d846f03be
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/large_moonstone_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/large_onyx_bud.png b/src/main/resources/assets/spectrum/textures/block/large_onyx_bud.png
new file mode 100644
index 0000000000..dd6f8f9c6c
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/large_onyx_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/large_topaz_bud.png b/src/main/resources/assets/spectrum/textures/block/large_topaz_bud.png
new file mode 100644
index 0000000000..ec96323c87
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/large_topaz_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/medium_citrine_bud.png b/src/main/resources/assets/spectrum/textures/block/medium_citrine_bud.png
new file mode 100644
index 0000000000..a3e1805510
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/medium_citrine_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/medium_moonstone_bud.png b/src/main/resources/assets/spectrum/textures/block/medium_moonstone_bud.png
new file mode 100644
index 0000000000..8d7c198564
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/medium_moonstone_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/medium_onyx_bud.png b/src/main/resources/assets/spectrum/textures/block/medium_onyx_bud.png
new file mode 100644
index 0000000000..3244ee3785
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/medium_onyx_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/medium_topaz_bud.png b/src/main/resources/assets/spectrum/textures/block/medium_topaz_bud.png
new file mode 100644
index 0000000000..de65ebeafd
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/medium_topaz_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/moonstone_block.png b/src/main/resources/assets/spectrum/textures/block/moonstone_block.png
new file mode 100644
index 0000000000..627c7063f0
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/moonstone_block.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_calcite.png b/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_calcite.png
new file mode 100644
index 0000000000..c8d3627ed5
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_calcite.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_calcite.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_calcite.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_calcite.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_tuff.png b/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_tuff.png
new file mode 100644
index 0000000000..ba7ddcb1d8
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_tuff.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_tuff.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_tuff.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/moonstone_chiseled_tuff.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/moonstone_cluster.png b/src/main/resources/assets/spectrum/textures/block/moonstone_cluster.png
new file mode 100644
index 0000000000..c1e6666a4b
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/moonstone_cluster.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/onyx_block.png b/src/main/resources/assets/spectrum/textures/block/onyx_block.png
new file mode 100644
index 0000000000..9ddebbda3b
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/onyx_block.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_calcite.png b/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_calcite.png
new file mode 100644
index 0000000000..bb0d627a61
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_calcite.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_calcite.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_calcite.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_calcite.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_tuff.png b/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_tuff.png
new file mode 100644
index 0000000000..214faf21df
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_tuff.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_tuff.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_tuff.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/onyx_chiseled_tuff.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/onyx_cluster.png b/src/main/resources/assets/spectrum/textures/block/onyx_cluster.png
new file mode 100644
index 0000000000..7c90218fa7
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/onyx_cluster.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/polished_calcite.png b/src/main/resources/assets/spectrum/textures/block/polished_calcite.png
new file mode 100644
index 0000000000..78a423778f
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/polished_calcite.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/polished_tuff.png b/src/main/resources/assets/spectrum/textures/block/polished_tuff.png
new file mode 100644
index 0000000000..970ec10590
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/polished_tuff.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/rainbow_moonstone_block.png b/src/main/resources/assets/spectrum/textures/block/rainbow_moonstone_block.png
new file mode 100644
index 0000000000..2d725e725b
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/rainbow_moonstone_block.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/small_citrine_bud.png b/src/main/resources/assets/spectrum/textures/block/small_citrine_bud.png
new file mode 100644
index 0000000000..357110044b
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/small_citrine_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/small_moonstone_bud.png b/src/main/resources/assets/spectrum/textures/block/small_moonstone_bud.png
new file mode 100644
index 0000000000..03ea8836b3
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/small_moonstone_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/small_onyx_bud.png b/src/main/resources/assets/spectrum/textures/block/small_onyx_bud.png
new file mode 100644
index 0000000000..fec74bd10b
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/small_onyx_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/small_topaz_bud.png b/src/main/resources/assets/spectrum/textures/block/small_topaz_bud.png
new file mode 100644
index 0000000000..a8803c4da8
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/small_topaz_bud.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/topaz_block.png b/src/main/resources/assets/spectrum/textures/block/topaz_block.png
new file mode 100644
index 0000000000..2c6b8fa177
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/topaz_block.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_calcite.png b/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_calcite.png
new file mode 100644
index 0000000000..1da1736075
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_calcite.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_calcite.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_calcite.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_calcite.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_tuff.png b/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_tuff.png
new file mode 100644
index 0000000000..21e314efd1
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_tuff.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_tuff.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_tuff.png.mcmeta
new file mode 100644
index 0000000000..034019ff92
--- /dev/null
+++ b/src/main/resources/assets/spectrum/textures/block/topaz_chiseled_tuff.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation": {
+ "frametime": 3
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/spectrum/textures/block/topaz_cluster.png b/src/main/resources/assets/spectrum/textures/block/topaz_cluster.png
new file mode 100644
index 0000000000..de0e2ee5bb
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/topaz_cluster.png differ
diff --git a/src/main/resources/assets/spectrum/textures/block/tuff_bricks.png b/src/main/resources/assets/spectrum/textures/block/tuff_bricks.png
new file mode 100644
index 0000000000..2dafdba6d5
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/block/tuff_bricks.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_axe.png b/src/main/resources/assets/spectrum/textures/item/bedrock_axe.png
new file mode 100644
index 0000000000..783ac32f50
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_axe.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_boots.png b/src/main/resources/assets/spectrum/textures/item/bedrock_boots.png
new file mode 100644
index 0000000000..455c324e42
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_boots.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_chestplate.png b/src/main/resources/assets/spectrum/textures/item/bedrock_chestplate.png
new file mode 100644
index 0000000000..c336e982de
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_chestplate.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_helmet.png b/src/main/resources/assets/spectrum/textures/item/bedrock_helmet.png
new file mode 100644
index 0000000000..5fe1615001
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_helmet.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_hoe.png b/src/main/resources/assets/spectrum/textures/item/bedrock_hoe.png
new file mode 100644
index 0000000000..e74cdca60e
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_hoe.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_leggings.png b/src/main/resources/assets/spectrum/textures/item/bedrock_leggings.png
new file mode 100644
index 0000000000..c524e55f57
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_leggings.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_pickaxe.png b/src/main/resources/assets/spectrum/textures/item/bedrock_pickaxe.png
new file mode 100644
index 0000000000..4b0483355b
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_pickaxe.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_shovel.png b/src/main/resources/assets/spectrum/textures/item/bedrock_shovel.png
new file mode 100644
index 0000000000..ed69f10af2
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_shovel.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/bedrock_sword.png b/src/main/resources/assets/spectrum/textures/item/bedrock_sword.png
new file mode 100644
index 0000000000..98d7a686fd
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/bedrock_sword.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/citrine_shard.png b/src/main/resources/assets/spectrum/textures/item/citrine_shard.png
new file mode 100644
index 0000000000..9620e0a3a4
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/citrine_shard.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/glistering_melon_seeds.png b/src/main/resources/assets/spectrum/textures/item/glistering_melon_seeds.png
new file mode 100644
index 0000000000..ef8ed99f9c
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/glistering_melon_seeds.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/moonstone_shard.png b/src/main/resources/assets/spectrum/textures/item/moonstone_shard.png
new file mode 100644
index 0000000000..0740fb05ad
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/moonstone_shard.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/onyx_shard.png b/src/main/resources/assets/spectrum/textures/item/onyx_shard.png
new file mode 100644
index 0000000000..7e83bc2d6a
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/onyx_shard.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/rainbow_moonstone_shard.png b/src/main/resources/assets/spectrum/textures/item/rainbow_moonstone_shard.png
new file mode 100644
index 0000000000..9fc6284cd3
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/rainbow_moonstone_shard.png differ
diff --git a/src/main/resources/assets/spectrum/textures/item/topaz_shard.png b/src/main/resources/assets/spectrum/textures/item/topaz_shard.png
new file mode 100644
index 0000000000..e7d284d72d
Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/topaz_shard.png differ
diff --git a/src/main/resources/data/fabric/tags/items/axes.json b/src/main/resources/data/fabric/tags/items/axes.json
new file mode 100644
index 0000000000..8e2ab75d95
--- /dev/null
+++ b/src/main/resources/data/fabric/tags/items/axes.json
@@ -0,0 +1,6 @@
+{
+ "replace": false,
+ "values": [
+ "spectrum:bedrock_axe"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/fabric/tags/items/hoes.json b/src/main/resources/data/fabric/tags/items/hoes.json
new file mode 100644
index 0000000000..a7fe77976f
--- /dev/null
+++ b/src/main/resources/data/fabric/tags/items/hoes.json
@@ -0,0 +1,6 @@
+{
+ "replace": false,
+ "values": [
+ "spectrum:bedrock_hoe"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/fabric/tags/items/pickaxes.json b/src/main/resources/data/fabric/tags/items/pickaxes.json
new file mode 100644
index 0000000000..c75f319787
--- /dev/null
+++ b/src/main/resources/data/fabric/tags/items/pickaxes.json
@@ -0,0 +1,6 @@
+{
+ "replace": false,
+ "values": [
+ "spectrum:bedrock_pickaxe"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/fabric/tags/items/shovels.json b/src/main/resources/data/fabric/tags/items/shovels.json
new file mode 100644
index 0000000000..a0e86d80f6
--- /dev/null
+++ b/src/main/resources/data/fabric/tags/items/shovels.json
@@ -0,0 +1,6 @@
+{
+ "replace": false,
+ "values": [
+ "spectrum:bedrock_shovel"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/fabric/tags/items/swords.json b/src/main/resources/data/fabric/tags/items/swords.json
new file mode 100644
index 0000000000..cb2f95d51e
--- /dev/null
+++ b/src/main/resources/data/fabric/tags/items/swords.json
@@ -0,0 +1,6 @@
+{
+ "replace": false,
+ "values": [
+ "spectrum:bedrock_sword"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/amethyst_cluster.json b/src/main/resources/data/minecraft/loot_tables/blocks/amethyst_cluster.json
new file mode 100644
index 0000000000..63dcc6055b
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/amethyst_cluster.json
@@ -0,0 +1,73 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:amethyst_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:amethyst_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": 4.0,
+ "add": false
+ },
+ {
+ "function": "minecraft:apply_bonus",
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "minecraft:amethyst_shard"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/budding_amethyst.json b/src/main/resources/data/minecraft/loot_tables/blocks/budding_amethyst.json
new file mode 100644
index 0000000000..b46d4555db
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/budding_amethyst.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:budding_amethyst"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:budding_amethyst"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/infested_chiseled_stone_bricks.json b/src/main/resources/data/minecraft/loot_tables/blocks/infested_chiseled_stone_bricks.json
new file mode 100644
index 0000000000..2c146cb720
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/infested_chiseled_stone_bricks.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:infested_chiseled_stone_bricks"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:chiseled_stone_bricks"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/infested_cobblestone.json b/src/main/resources/data/minecraft/loot_tables/blocks/infested_cobblestone.json
new file mode 100644
index 0000000000..0350af8a5a
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/infested_cobblestone.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:infested_cobblestone"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:cobblestone"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/infested_cracked_stone_bricks.json b/src/main/resources/data/minecraft/loot_tables/blocks/infested_cracked_stone_bricks.json
new file mode 100644
index 0000000000..8707f4d84a
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/infested_cracked_stone_bricks.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:infested_cracked_stone_bricks"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:cracked_stone_bricks"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/infested_mossy_stone_bricks.json b/src/main/resources/data/minecraft/loot_tables/blocks/infested_mossy_stone_bricks.json
new file mode 100644
index 0000000000..9ede0ed787
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/infested_mossy_stone_bricks.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:infested_mossy_stone_bricks"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:mossy_stone_bricks"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/infested_stone.json b/src/main/resources/data/minecraft/loot_tables/blocks/infested_stone.json
new file mode 100644
index 0000000000..a8d6c8cf81
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/infested_stone.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:infested_stone"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:stone"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/infested_stone_bricks.json b/src/main/resources/data/minecraft/loot_tables/blocks/infested_stone_bricks.json
new file mode 100644
index 0000000000..6c8b38ee02
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/infested_stone_bricks.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:infested_stone_bricks"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:stone_bricks"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/large_amethyst_bud.json b/src/main/resources/data/minecraft/loot_tables/blocks/large_amethyst_bud.json
new file mode 100644
index 0000000000..b34d6df9f5
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/large_amethyst_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:large_amethyst_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:large_amethyst_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/medium_amethyst_bud.json b/src/main/resources/data/minecraft/loot_tables/blocks/medium_amethyst_bud.json
new file mode 100644
index 0000000000..1306a54cd7
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/medium_amethyst_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:medium_amethyst_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:medium_amethyst_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_tables/blocks/small_amethyst_bud.json b/src/main/resources/data/minecraft/loot_tables/blocks/small_amethyst_bud.json
new file mode 100644
index 0000000000..57fb9aa171
--- /dev/null
+++ b/src/main/resources/data/minecraft/loot_tables/blocks/small_amethyst_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:small_amethyst_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "minecraft:small_amethyst_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/tags/blocks/slabs.json b/src/main/resources/data/minecraft/tags/blocks/slabs.json
new file mode 100644
index 0000000000..b45180fbb3
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/slabs.json
@@ -0,0 +1,11 @@
+{
+ "replace": false,
+ "values": [
+ "spectrum:tuff_slab",
+ "spectrum:polished_tuff_slab",
+ "spectrum:tuff_brick_slab",
+ "spectrum:calcite_slab",
+ "spectrum:polished_calcite_slab",
+ "spectrum:calcite_brick_slab"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/tags/blocks/stairs.json b/src/main/resources/data/minecraft/tags/blocks/stairs.json
new file mode 100644
index 0000000000..62ab8537c7
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/stairs.json
@@ -0,0 +1,11 @@
+{
+ "replace": false,
+ "values": [
+ "spectrum:tuff_stairs",
+ "spectrum:polished_tuff_stairs",
+ "spectrum:tuff_brick_stairs",
+ "spectrum:calcite_stairs",
+ "spectrum:polished_calcite_stairs",
+ "spectrum:calcite_brick_stairs"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/minecraft/tags/blocks/walls.json b/src/main/resources/data/minecraft/tags/blocks/walls.json
new file mode 100644
index 0000000000..2538a0f2be
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/walls.json
@@ -0,0 +1,11 @@
+{
+ "replace": false,
+ "values": [
+ "spectrum:tuff_wall",
+ "spectrum:polished_tuff_wall",
+ "spectrum:tuff_brick_wall",
+ "spectrum:calcite_wall",
+ "spectrum:polished_calcite_wall",
+ "spectrum:calcite_brick_wall"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/amethyst_chiseled_calcite.json b/src/main/resources/data/spectrum/loot_tables/blocks/amethyst_chiseled_calcite.json
new file mode 100644
index 0000000000..e80c78b73f
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/amethyst_chiseled_calcite.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:amethyst_chiseled_calcite"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/amethyst_chiseled_tuff.json b/src/main/resources/data/spectrum/loot_tables/blocks/amethyst_chiseled_tuff.json
new file mode 100644
index 0000000000..afe16061bf
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/amethyst_chiseled_tuff.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:amethyst_chiseled_tuff"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/budding_citrine.json b/src/main/resources/data/spectrum/loot_tables/blocks/budding_citrine.json
new file mode 100644
index 0000000000..57fa10b564
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/budding_citrine.json
@@ -0,0 +1,30 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:budding_citrine"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/budding_moonstone.json b/src/main/resources/data/spectrum/loot_tables/blocks/budding_moonstone.json
new file mode 100644
index 0000000000..404b11fe1e
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/budding_moonstone.json
@@ -0,0 +1,30 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:budding_moonstone"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/budding_onyx.json b/src/main/resources/data/spectrum/loot_tables/blocks/budding_onyx.json
new file mode 100644
index 0000000000..55b5b66907
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/budding_onyx.json
@@ -0,0 +1,30 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:budding_onyx"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/budding_topaz.json b/src/main/resources/data/spectrum/loot_tables/blocks/budding_topaz.json
new file mode 100644
index 0000000000..38c9a7d8e4
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/budding_topaz.json
@@ -0,0 +1,30 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:budding_topaz"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_slab.json b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_slab.json
new file mode 100644
index 0000000000..901448e475
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_slab.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:calcite_brick_slab"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_stairs.json b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_stairs.json
new file mode 100644
index 0000000000..585d00ab5e
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_stairs.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:calcite_brick_stairs"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_wall.json b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_wall.json
new file mode 100644
index 0000000000..e6051dcb70
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_brick_wall.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:calcite_brick_wall"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/calcite_bricks.json b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_bricks.json
new file mode 100644
index 0000000000..af2a8933d2
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_bricks.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:calcite_bricks"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/calcite_slab.json b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_slab.json
new file mode 100644
index 0000000000..1a68dd80a6
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_slab.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:calcite_slab"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/calcite_stairs.json b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_stairs.json
new file mode 100644
index 0000000000..615de32ea1
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_stairs.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:calcite_stairs"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/calcite_wall.json b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_wall.json
new file mode 100644
index 0000000000..40722ee183
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/calcite_wall.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:calcite_wall"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/citrine_block.json b/src/main/resources/data/spectrum/loot_tables/blocks/citrine_block.json
new file mode 100644
index 0000000000..93f2bb7f2c
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/citrine_block.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:citrine_block"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/citrine_chiseled_calcite.json b/src/main/resources/data/spectrum/loot_tables/blocks/citrine_chiseled_calcite.json
new file mode 100644
index 0000000000..b789b0dfcf
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/citrine_chiseled_calcite.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:citrine_chiseled_calcite"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/citrine_chiseled_tuff.json b/src/main/resources/data/spectrum/loot_tables/blocks/citrine_chiseled_tuff.json
new file mode 100644
index 0000000000..6185859bc0
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/citrine_chiseled_tuff.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:citrine_chiseled_tuff"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/citrine_cluster.json b/src/main/resources/data/spectrum/loot_tables/blocks/citrine_cluster.json
new file mode 100644
index 0000000000..37d4174e0e
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/citrine_cluster.json
@@ -0,0 +1,73 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:citrine_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:citrine_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": 4.0,
+ "add": false
+ },
+ {
+ "function": "minecraft:apply_bonus",
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "spectrum:citrine_shard"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/glistering_melon.json b/src/main/resources/data/spectrum/loot_tables/blocks/glistering_melon.json
new file mode 100644
index 0000000000..d02c6d8a1f
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/glistering_melon.json
@@ -0,0 +1,67 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:glistering_melon"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": {
+ "type": "minecraft:uniform",
+ "min": 2.0,
+ "max": 4.0
+ },
+ "add": false
+ },
+ {
+ "function": "minecraft:apply_bonus",
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:uniform_bonus_count",
+ "parameters": {
+ "bonusMultiplier": 1
+ }
+ },
+ {
+ "function": "minecraft:limit_count",
+ "limit": {
+ "max": 9.0
+ }
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "minecraft:glistering_melon_slice"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/glistering_melon_stem.json b/src/main/resources/data/spectrum/loot_tables/blocks/glistering_melon_stem.json
new file mode 100644
index 0000000000..046f017e61
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/glistering_melon_stem.json
@@ -0,0 +1,166 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "conditions": [
+ {
+ "condition": "minecraft:block_state_property",
+ "block": "spectrum:glistering_melon_stem",
+ "properties": {
+ "age": "0"
+ }
+ }
+ ],
+ "count": {
+ "type": "minecraft:binomial",
+ "n": 3.0,
+ "p": 0.03333333
+ },
+ "add": false
+ },
+ {
+ "function": "minecraft:set_count",
+ "conditions": [
+ {
+ "condition": "minecraft:block_state_property",
+ "block": "spectrum:glistering_melon_stem",
+ "properties": {
+ "age": "1"
+ }
+ }
+ ],
+ "count": {
+ "type": "minecraft:binomial",
+ "n": 3.0,
+ "p": 0.6666667
+ },
+ "add": false
+ },
+ {
+ "function": "minecraft:set_count",
+ "conditions": [
+ {
+ "condition": "minecraft:block_state_property",
+ "block": "spectrum:glistering_melon_stem",
+ "properties": {
+ "age": "2"
+ }
+ }
+ ],
+ "count": {
+ "type": "minecraft:binomial",
+ "n": 3.0,
+ "p": 0.1
+ },
+ "add": false
+ },
+ {
+ "function": "minecraft:set_count",
+ "conditions": [
+ {
+ "condition": "minecraft:block_state_property",
+ "block": "spectrum:glistering_melon_stem",
+ "properties": {
+ "age": "3"
+ }
+ }
+ ],
+ "count": {
+ "type": "minecraft:binomial",
+ "n": 3.0,
+ "p": 0.1333333
+ },
+ "add": false
+ },
+ {
+ "function": "minecraft:set_count",
+ "conditions": [
+ {
+ "condition": "minecraft:block_state_property",
+ "block": "spectrum:glistering_melon_stem",
+ "properties": {
+ "age": "4"
+ }
+ }
+ ],
+ "count": {
+ "type": "minecraft:binomial",
+ "n": 3.0,
+ "p": 0.1666666
+ },
+ "add": false
+ },
+ {
+ "function": "minecraft:set_count",
+ "conditions": [
+ {
+ "condition": "minecraft:block_state_property",
+ "block": "spectrum:glistering_melon_stem",
+ "properties": {
+ "age": "5"
+ }
+ }
+ ],
+ "count": {
+ "type": "minecraft:binomial",
+ "n": 3.0,
+ "p": 0.2
+ },
+ "add": false
+ },
+ {
+ "function": "minecraft:set_count",
+ "conditions": [
+ {
+ "condition": "minecraft:block_state_property",
+ "block": "spectrum:glistering_melon_stem",
+ "properties": {
+ "age": "6"
+ }
+ }
+ ],
+ "count": {
+ "type": "minecraft:binomial",
+ "n": 3.0,
+ "p": 0.23333333
+ },
+ "add": false
+ },
+ {
+ "function": "minecraft:set_count",
+ "conditions": [
+ {
+ "condition": "minecraft:block_state_property",
+ "block": "spectrum:glistering_melon_stem",
+ "properties": {
+ "age": "7"
+ }
+ }
+ ],
+ "count": {
+ "type": "minecraft:binomial",
+ "n": 3.0,
+ "p": 0.26666666
+ },
+ "add": false
+ }
+ ],
+ "name": "spectrum:glistering_melon_seeds"
+ }
+ ],
+ "functions": [
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/large_citrine_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/large_citrine_bud.json
new file mode 100644
index 0000000000..4ea9562bc1
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/large_citrine_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:large_citrine_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:large_citrine_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/large_moonstone_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/large_moonstone_bud.json
new file mode 100644
index 0000000000..93c6bf5f9f
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/large_moonstone_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:large_moonstone_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:large_moonstone_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/large_onyx_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/large_onyx_bud.json
new file mode 100644
index 0000000000..d736ad5a42
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/large_onyx_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:large_onyx_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:large_onyx_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/large_topaz_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/large_topaz_bud.json
new file mode 100644
index 0000000000..611e0691bc
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/large_topaz_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:large_topaz_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:large_topaz_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/medium_citrine_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/medium_citrine_bud.json
new file mode 100644
index 0000000000..22f770d9f5
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/medium_citrine_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:medium_citrine_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:medium_citrine_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/medium_moonstone_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/medium_moonstone_bud.json
new file mode 100644
index 0000000000..6a8405eff3
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/medium_moonstone_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:medium_moonstone_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:medium_moonstone_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/medium_onyx_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/medium_onyx_bud.json
new file mode 100644
index 0000000000..c7ac7f6bdb
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/medium_onyx_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:medium_onyx_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:medium_onyx_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/medium_topaz_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/medium_topaz_bud.json
new file mode 100644
index 0000000000..2bab3d1e7e
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/medium_topaz_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:medium_topaz_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:medium_topaz_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_block.json b/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_block.json
new file mode 100644
index 0000000000..8a6576c0a2
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_block.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:moonstone_block"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_chiseled_calcite.json b/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_chiseled_calcite.json
new file mode 100644
index 0000000000..b807d71059
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_chiseled_calcite.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:moonstone_chiseled_calcite"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_chiseled_tuff.json b/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_chiseled_tuff.json
new file mode 100644
index 0000000000..3c5b6a57f6
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_chiseled_tuff.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:moonstone_chiseled_tuff"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_cluster.json b/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_cluster.json
new file mode 100644
index 0000000000..6c5c73e2c5
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/moonstone_cluster.json
@@ -0,0 +1,73 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:moonstone_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:moonstone_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": 4.0,
+ "add": false
+ },
+ {
+ "function": "minecraft:apply_bonus",
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "spectrum:moonstone_shard"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/onyx_block.json b/src/main/resources/data/spectrum/loot_tables/blocks/onyx_block.json
new file mode 100644
index 0000000000..7c39ed0898
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/onyx_block.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:onyx_block"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/onyx_chiseled_calcite.json b/src/main/resources/data/spectrum/loot_tables/blocks/onyx_chiseled_calcite.json
new file mode 100644
index 0000000000..da1722bd21
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/onyx_chiseled_calcite.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:onyx_chiseled_calcite"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/onyx_chiseled_tuff.json b/src/main/resources/data/spectrum/loot_tables/blocks/onyx_chiseled_tuff.json
new file mode 100644
index 0000000000..a266824864
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/onyx_chiseled_tuff.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:onyx_chiseled_tuff"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/onyx_cluster.json b/src/main/resources/data/spectrum/loot_tables/blocks/onyx_cluster.json
new file mode 100644
index 0000000000..246e5d5d0f
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/onyx_cluster.json
@@ -0,0 +1,73 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:onyx_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:onyx_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": 4.0,
+ "add": false
+ },
+ {
+ "function": "minecraft:apply_bonus",
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "spectrum:onyx_shard"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite.json b/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite.json
new file mode 100644
index 0000000000..14ccf9f43d
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:polished_calcite"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_slab.json b/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_slab.json
new file mode 100644
index 0000000000..dc75e5604e
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_slab.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:polished_calcite_slab"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_stairs.json b/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_stairs.json
new file mode 100644
index 0000000000..238d69067d
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_stairs.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:polished_calcite_stairs"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_wall.json b/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_wall.json
new file mode 100644
index 0000000000..68f965d61e
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/polished_calcite_wall.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:polished_calcite_wall"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff.json b/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff.json
new file mode 100644
index 0000000000..6d77a720e2
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:polished_tuff"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_slab.json b/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_slab.json
new file mode 100644
index 0000000000..4b99e92c8b
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_slab.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:polished_tuff_slab"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_stairs.json b/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_stairs.json
new file mode 100644
index 0000000000..4ebac3295c
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_stairs.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:polished_tuff_stairs"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_wall.json b/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_wall.json
new file mode 100644
index 0000000000..0b5662f5fe
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/polished_tuff_wall.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:polished_tuff_wall"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/rainbow_moonstone_block.json b/src/main/resources/data/spectrum/loot_tables/blocks/rainbow_moonstone_block.json
new file mode 100644
index 0000000000..9aa14ae520
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/rainbow_moonstone_block.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:rainbow_moonstone_block"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/small_citrine_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/small_citrine_bud.json
new file mode 100644
index 0000000000..b70ab0d1b8
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/small_citrine_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:small_citrine_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:small_citrine_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/small_moonstone_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/small_moonstone_bud.json
new file mode 100644
index 0000000000..d6867fce8c
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/small_moonstone_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:small_moonstone_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:small_moonstone_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/small_onyx_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/small_onyx_bud.json
new file mode 100644
index 0000000000..cbd712b86a
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/small_onyx_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:small_onyx_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:small_onyx_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/small_topaz_bud.json b/src/main/resources/data/spectrum/loot_tables/blocks/small_topaz_bud.json
new file mode 100644
index 0000000000..07db7491ec
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/small_topaz_bud.json
@@ -0,0 +1,54 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:small_topaz_bud"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:small_topaz_bud"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/topaz_block.json b/src/main/resources/data/spectrum/loot_tables/blocks/topaz_block.json
new file mode 100644
index 0000000000..0812cce504
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/topaz_block.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:topaz_block"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/topaz_chiseled_calcite.json b/src/main/resources/data/spectrum/loot_tables/blocks/topaz_chiseled_calcite.json
new file mode 100644
index 0000000000..d8aae75539
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/topaz_chiseled_calcite.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:topaz_chiseled_calcite"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/topaz_chiseled_tuff.json b/src/main/resources/data/spectrum/loot_tables/blocks/topaz_chiseled_tuff.json
new file mode 100644
index 0000000000..de5c85911b
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/topaz_chiseled_tuff.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:topaz_chiseled_tuff"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/topaz_cluster.json b/src/main/resources/data/spectrum/loot_tables/blocks/topaz_cluster.json
new file mode 100644
index 0000000000..948cd11cdc
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/topaz_cluster.json
@@ -0,0 +1,73 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "rolls": 1.0,
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "spectrum:resonance",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:topaz_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "spectrum:topaz_cluster"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": 4.0,
+ "add": false
+ },
+ {
+ "function": "minecraft:apply_bonus",
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "spectrum:topaz_shard"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_slab.json b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_slab.json
new file mode 100644
index 0000000000..61e515396d
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_slab.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:tuff_brick_slab"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_stairs.json b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_stairs.json
new file mode 100644
index 0000000000..fc9cdd47d2
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_stairs.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:tuff_brick_stairs"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_wall.json b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_wall.json
new file mode 100644
index 0000000000..9356677128
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_brick_wall.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:tuff_brick_wall"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/tuff_bricks.json b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_bricks.json
new file mode 100644
index 0000000000..2ffff1fec8
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_bricks.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:tuff_bricks"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/tuff_slab.json b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_slab.json
new file mode 100644
index 0000000000..60b79e82e9
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_slab.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:tuff_slab"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/tuff_stairs.json b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_stairs.json
new file mode 100644
index 0000000000..fb26704c6f
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_stairs.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:tuff_stairs"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/tuff_wall.json b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_wall.json
new file mode 100644
index 0000000000..900a539765
--- /dev/null
+++ b/src/main/resources/data/spectrum/loot_tables/blocks/tuff_wall.json
@@ -0,0 +1,19 @@
+{
+"type": "minecraft:block",
+"pools": [
+{
+ "rolls": 1,
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "spectrum:tuff_wall"
+ }
+ ],
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ]
+}
+]
+}
diff --git a/src/main/resources/data/spectrum/recipes/blasting/calcite_brick_stairs_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/blasting/calcite_brick_stairs_to_polished_calcite.json
new file mode 100644
index 0000000000..8feb201494
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/calcite_brick_stairs_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:calcite_brick_stairs"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/calcite_brick_wall_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/blasting/calcite_brick_wall_to_polished_calcite.json
new file mode 100644
index 0000000000..d82394c999
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/calcite_brick_wall_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:calcite_brick_wall"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/calcite_bricks_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/blasting/calcite_bricks_to_polished_calcite.json
new file mode 100644
index 0000000000..4d66c808fa
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/calcite_bricks_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:calcite_bricks"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/calcite_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/blasting/calcite_to_polished_calcite.json
new file mode 100644
index 0000000000..cab4d77aa5
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/calcite_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "minecraft:calcite"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/polished_calcite_stairs_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/blasting/polished_calcite_stairs_to_polished_calcite.json
new file mode 100644
index 0000000000..7cedcf15cd
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/polished_calcite_stairs_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite_stairs"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/polished_calcite_wall_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/blasting/polished_calcite_wall_to_polished_calcite.json
new file mode 100644
index 0000000000..f8d126239b
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/polished_calcite_wall_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite_wall"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/polished_tuff_stairs_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/blasting/polished_tuff_stairs_to_polished_tuff.json
new file mode 100644
index 0000000000..9acfcc253c
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/polished_tuff_stairs_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff_stairs"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/polished_tuff_wall_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/blasting/polished_tuff_wall_to_polished_tuff.json
new file mode 100644
index 0000000000..bd62752acd
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/polished_tuff_wall_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff_wall"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/tuff_brick_stairs_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/blasting/tuff_brick_stairs_to_polished_tuff.json
new file mode 100644
index 0000000000..ac9413aa26
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/tuff_brick_stairs_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:tuff_brick_stairs"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/tuff_brick_wall_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/blasting/tuff_brick_wall_to_polished_tuff.json
new file mode 100644
index 0000000000..a326acf392
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/tuff_brick_wall_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:tuff_brick_wall"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/tuff_bricks_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/blasting/tuff_bricks_to_polished_tuff.json
new file mode 100644
index 0000000000..697ed27f26
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/tuff_bricks_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "spectrum:tuff_bricks"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/blasting/tuff_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/blasting/tuff_to_polished_tuff.json
new file mode 100644
index 0000000000..aeb68d8665
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/blasting/tuff_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:blasting",
+ "ingredient": {
+ "item": "minecraft:tuff"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_calcite_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_calcite_from_cluster.json
new file mode 100644
index 0000000000..c923ff61ff
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_calcite_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "minecraft:amethyst_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:amethyst_chiseled_calcite",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_calcite_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_calcite_from_shards.json
new file mode 100644
index 0000000000..e67536cfee
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_calcite_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "XWX",
+ "WXW",
+ "XWX"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "minecraft:amethyst_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:amethyst_chiseled_calcite",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_tuff_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_tuff_from_cluster.json
new file mode 100644
index 0000000000..3f7f3d45af
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_tuff_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "minecraft:amethyst_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:amethyst_chiseled_tuff",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_tuff_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_tuff_from_shards.json
new file mode 100644
index 0000000000..ca318e82e4
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/amethyst_chiseled_tuff_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "XWX",
+ "WXW",
+ "XWX"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "minecraft:amethyst_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:amethyst_chiseled_tuff",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_slab.json b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_slab.json
new file mode 100644
index 0000000000..18a05ce6f1
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_slab.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:calcite_bricks"
+ }
+ },
+ "result": {
+ "item": "spectrum:calcite_brick_slab",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_stairs.json b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_stairs.json
new file mode 100644
index 0000000000..f03b423afd
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_stairs.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "W ",
+ "WW ",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:calcite_bricks"
+ }
+ },
+ "result": {
+ "item": "spectrum:calcite_brick_stairs",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_wall.json b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_wall.json
new file mode 100644
index 0000000000..a2ed6484cd
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_brick_wall.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:calcite_bricks"
+ }
+ },
+ "result": {
+ "item": "spectrum:calcite_brick_wall",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/calcite_bricks.json b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_bricks.json
new file mode 100644
index 0000000000..75ce2a8750
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_bricks.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WW",
+ "WW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ }
+ },
+ "result": {
+ "item": "spectrum:calcite_bricks",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/calcite_slab.json b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_slab.json
new file mode 100644
index 0000000000..e249c73975
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_slab.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "minecraft:calcite"
+ }
+ },
+ "result": {
+ "item": "spectrum:calcite_slab",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/calcite_stairs.json b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_stairs.json
new file mode 100644
index 0000000000..77439e5ff1
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_stairs.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "W ",
+ "WW ",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "minecraft:calcite"
+ }
+ },
+ "result": {
+ "item": "spectrum:calcite_stairs",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/calcite_wall.json b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_wall.json
new file mode 100644
index 0000000000..0b928cb3c2
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/calcite_wall.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "minecraft:calcite"
+ }
+ },
+ "result": {
+ "item": "spectrum:calcite_wall",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/citrine_block.json b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_block.json
new file mode 100644
index 0000000000..f7fd6b064f
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_block.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WW",
+ "WW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:citrine_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:citrine_block",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_calcite_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_calcite_from_cluster.json
new file mode 100644
index 0000000000..60851cbe97
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_calcite_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "spectrum:citrine_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:citrine_chiseled_calcite",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_calcite_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_calcite_from_shards.json
new file mode 100644
index 0000000000..32a21cc3a6
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_calcite_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WXW",
+ "XXX",
+ "WXW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "spectrum:citrine_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:citrine_chiseled_calcite",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_tuff_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_tuff_from_cluster.json
new file mode 100644
index 0000000000..6ad5483260
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_tuff_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "spectrum:citrine_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:citrine_chiseled_tuff",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_tuff_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_tuff_from_shards.json
new file mode 100644
index 0000000000..da799c4432
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/citrine_chiseled_tuff_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WXW",
+ "XXX",
+ "WXW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "spectrum:citrine_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:citrine_chiseled_tuff",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_block.json b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_block.json
new file mode 100644
index 0000000000..0713e15cac
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_block.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WW",
+ "WW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:moonstone_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:moonstone_block",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_calcite_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_calcite_from_cluster.json
new file mode 100644
index 0000000000..34c3c5272a
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_calcite_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "spectrum:moonstone_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:moonstone_chiseled_calcite",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_calcite_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_calcite_from_shards.json
new file mode 100644
index 0000000000..da7a5f3cb7
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_calcite_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "XXX",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "spectrum:moonstone_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:moonstone_chiseled_calcite",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_tuff_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_tuff_from_cluster.json
new file mode 100644
index 0000000000..0450ccf873
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_tuff_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "spectrum:moonstone_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:moonstone_chiseled_tuff",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_tuff_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_tuff_from_shards.json
new file mode 100644
index 0000000000..9beb3d71b7
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/moonstone_chiseled_tuff_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "XXX",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "spectrum:moonstone_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:moonstone_chiseled_tuff",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/onyx_block.json b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_block.json
new file mode 100644
index 0000000000..05a9df0e41
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_block.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WW",
+ "WW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:onyx_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:onyx_block",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_calcite_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_calcite_from_cluster.json
new file mode 100644
index 0000000000..910a8f0a8b
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_calcite_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "spectrum:onyx_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:onyx_chiseled_calcite",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_calcite_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_calcite_from_shards.json
new file mode 100644
index 0000000000..039046cfe6
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_calcite_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WXW",
+ "XXX",
+ "WXW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "spectrum:onyx_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:onyx_chiseled_calcite",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_tuff_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_tuff_from_cluster.json
new file mode 100644
index 0000000000..7b306be605
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_tuff_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "spectrum:onyx_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:onyx_chiseled_tuff",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_tuff_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_tuff_from_shards.json
new file mode 100644
index 0000000000..14ed11534b
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/onyx_chiseled_tuff_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WXW",
+ "XXX",
+ "WXW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "spectrum:onyx_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:onyx_chiseled_tuff",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_slab.json b/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_slab.json
new file mode 100644
index 0000000000..74d38e0ce6
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_slab.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ }
+ },
+ "result": {
+ "item": "spectrum:polished_calcite_slab",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_stairs.json b/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_stairs.json
new file mode 100644
index 0000000000..e9d79423cd
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_stairs.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "W ",
+ "WW ",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ }
+ },
+ "result": {
+ "item": "spectrum:polished_calcite_stairs",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_wall.json b/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_wall.json
new file mode 100644
index 0000000000..7ff4e29689
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/polished_calcite_wall.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ }
+ },
+ "result": {
+ "item": "spectrum:polished_calcite_wall",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_slab.json b/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_slab.json
new file mode 100644
index 0000000000..3806ff3891
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_slab.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ }
+ },
+ "result": {
+ "item": "spectrum:polished_tuff_slab",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_stairs.json b/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_stairs.json
new file mode 100644
index 0000000000..04dbe0da54
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_stairs.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "W ",
+ "WW ",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ }
+ },
+ "result": {
+ "item": "spectrum:polished_tuff_stairs",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_wall.json b/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_wall.json
new file mode 100644
index 0000000000..0696e79672
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/polished_tuff_wall.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ }
+ },
+ "result": {
+ "item": "spectrum:polished_tuff_wall",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/topaz_block.json b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_block.json
new file mode 100644
index 0000000000..7adbd146f2
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_block.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WW",
+ "WW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:topaz_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:topaz_block",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_calcite_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_calcite_from_cluster.json
new file mode 100644
index 0000000000..5d503b7ecb
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_calcite_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "spectrum:topaz_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:topaz_chiseled_calcite",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_calcite_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_calcite_from_shards.json
new file mode 100644
index 0000000000..e5cad76f9c
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_calcite_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "XWX",
+ "WWW",
+ "XWX"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_calcite"
+ },
+ "X": {
+ "item": "spectrum:topaz_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:topaz_chiseled_calcite",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_tuff_from_cluster.json b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_tuff_from_cluster.json
new file mode 100644
index 0000000000..6197729ca7
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_tuff_from_cluster.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WXW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "spectrum:topaz_cluster"
+ }
+ },
+ "result": {
+ "item": "spectrum:topaz_chiseled_tuff",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_tuff_from_shards.json b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_tuff_from_shards.json
new file mode 100644
index 0000000000..3b455a350d
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/topaz_chiseled_tuff_from_shards.json
@@ -0,0 +1,20 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "XWX",
+ "WWW",
+ "XWX"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ },
+ "X": {
+ "item": "spectrum:topaz_shard"
+ }
+ },
+ "result": {
+ "item": "spectrum:topaz_chiseled_tuff",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_slab.json b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_slab.json
new file mode 100644
index 0000000000..bb2932b4dd
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_slab.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:tuff_bricks"
+ }
+ },
+ "result": {
+ "item": "spectrum:tuff_brick_slab",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_stairs.json b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_stairs.json
new file mode 100644
index 0000000000..8a98e21805
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_stairs.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "W ",
+ "WW ",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:tuff_bricks"
+ }
+ },
+ "result": {
+ "item": "spectrum:tuff_brick_stairs",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_wall.json b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_wall.json
new file mode 100644
index 0000000000..7f5f11dcce
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_brick_wall.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:tuff_bricks"
+ }
+ },
+ "result": {
+ "item": "spectrum:tuff_brick_wall",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/tuff_bricks.json b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_bricks.json
new file mode 100644
index 0000000000..2451641a3f
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_bricks.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WW",
+ "WW"
+ ],
+ "key": {
+ "W": {
+ "item": "spectrum:polished_tuff"
+ }
+ },
+ "result": {
+ "item": "spectrum:tuff_bricks",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/tuff_slab.json b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_slab.json
new file mode 100644
index 0000000000..3ef67cbcc5
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_slab.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "minecraft:tuff"
+ }
+ },
+ "result": {
+ "item": "spectrum:tuff_slab",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/tuff_stairs.json b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_stairs.json
new file mode 100644
index 0000000000..13280005bc
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_stairs.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "W ",
+ "WW ",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "minecraft:tuff"
+ }
+ },
+ "result": {
+ "item": "spectrum:tuff_stairs",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/crafting_table/tuff_wall.json b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_wall.json
new file mode 100644
index 0000000000..968e394e4f
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/crafting_table/tuff_wall.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "WWW",
+ "WWW"
+ ],
+ "key": {
+ "W": {
+ "item": "minecraft:tuff"
+ }
+ },
+ "result": {
+ "item": "spectrum:tuff_wall",
+ "count": 6
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/glistering_melon.json b/src/main/resources/data/spectrum/recipes/glistering_melon.json
new file mode 100644
index 0000000000..7de41799e8
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/glistering_melon.json
@@ -0,0 +1,16 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "MMM",
+ "MMM",
+ "MMM"
+ ],
+ "key": {
+ "M": {
+ "item": "minecraft:glistering_melon_slice"
+ }
+ },
+ "result": {
+ "item": "spectrum:glistering_melon"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/calcite_brick_stairs_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/smelting/calcite_brick_stairs_to_polished_calcite.json
new file mode 100644
index 0000000000..adacaa1b19
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/calcite_brick_stairs_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:calcite_brick_stairs"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/calcite_brick_wall_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/smelting/calcite_brick_wall_to_polished_calcite.json
new file mode 100644
index 0000000000..b43025e536
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/calcite_brick_wall_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:calcite_brick_wall"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/calcite_bricks_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/smelting/calcite_bricks_to_polished_calcite.json
new file mode 100644
index 0000000000..8746bb2a5e
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/calcite_bricks_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:calcite_bricks"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/calcite_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/smelting/calcite_to_polished_calcite.json
new file mode 100644
index 0000000000..eb4b41a459
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/calcite_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "minecraft:calcite"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/polished_calcite_stairs_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/smelting/polished_calcite_stairs_to_polished_calcite.json
new file mode 100644
index 0000000000..1b7f36487c
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/polished_calcite_stairs_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite_stairs"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/polished_calcite_wall_to_polished_calcite.json b/src/main/resources/data/spectrum/recipes/smelting/polished_calcite_wall_to_polished_calcite.json
new file mode 100644
index 0000000000..03da65a301
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/polished_calcite_wall_to_polished_calcite.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite_wall"
+ },
+ "result": "spectrum:polished_calcite",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/polished_tuff_stairs_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/smelting/polished_tuff_stairs_to_polished_tuff.json
new file mode 100644
index 0000000000..a6acf65235
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/polished_tuff_stairs_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff_stairs"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/polished_tuff_wall_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/smelting/polished_tuff_wall_to_polished_tuff.json
new file mode 100644
index 0000000000..403a40ecfc
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/polished_tuff_wall_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff_wall"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/tuff_brick_stairs_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/smelting/tuff_brick_stairs_to_polished_tuff.json
new file mode 100644
index 0000000000..512a22b91b
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/tuff_brick_stairs_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:tuff_brick_stairs"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/tuff_brick_wall_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/smelting/tuff_brick_wall_to_polished_tuff.json
new file mode 100644
index 0000000000..8d51461888
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/tuff_brick_wall_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:tuff_brick_wall"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/tuff_bricks_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/smelting/tuff_bricks_to_polished_tuff.json
new file mode 100644
index 0000000000..8f37d2542f
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/tuff_bricks_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "spectrum:tuff_bricks"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/smelting/tuff_to_polished_tuff.json b/src/main/resources/data/spectrum/recipes/smelting/tuff_to_polished_tuff.json
new file mode 100644
index 0000000000..9c57595886
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/smelting/tuff_to_polished_tuff.json
@@ -0,0 +1,9 @@
+{
+ "type": "minecraft:smelting",
+ "ingredient": {
+ "item": "minecraft:tuff"
+ },
+ "result": "spectrum:polished_tuff",
+ "experience": 0.1,
+ "cookingtime": 200
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_slab.json b/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_slab.json
new file mode 100644
index 0000000000..eee8487a63
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_slab.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "minecraft:calcite"
+ },
+ "result": "spectrum:calcite_slab",
+ "count": 2
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_stairs.json b/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_stairs.json
new file mode 100644
index 0000000000..8fd12a0ae0
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_stairs.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "minecraft:calcite"
+ },
+ "result": "spectrum:calcite_stairs",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_wall.json b/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_wall.json
new file mode 100644
index 0000000000..09e94d561b
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/calcite_to_calcite_wall.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "minecraft:calcite"
+ },
+ "result": "spectrum:calcite_wall",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_slab.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_slab.json
new file mode 100644
index 0000000000..a251a661a4
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_slab.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:calcite_bricks"
+ },
+ "result": "spectrum:calcite_brick_slab",
+ "count": 2
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_stairs.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_stairs.json
new file mode 100644
index 0000000000..11e1e45931
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_stairs.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:calcite_bricks"
+ },
+ "result": "spectrum:calcite_brick_stairs",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_wall.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_wall.json
new file mode 100644
index 0000000000..0a7e6c45e9
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_bricks_to_calcite_brick_wall.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:calcite_bricks"
+ },
+ "result": "spectrum:calcite_brick_wall",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_slab.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_slab.json
new file mode 100644
index 0000000000..8cc450efd3
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_slab.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite"
+ },
+ "result": "spectrum:calcite_brick_slab",
+ "count": 2
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_stairs.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_stairs.json
new file mode 100644
index 0000000000..32804dd219
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_stairs.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite"
+ },
+ "result": "spectrum:calcite_brick_stairs",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_wall.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_wall.json
new file mode 100644
index 0000000000..fd02c52884
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_brick_wall.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite"
+ },
+ "result": "spectrum:calcite_brick_wall",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_bricks.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_bricks.json
new file mode 100644
index 0000000000..3e567ca6ad
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_calcite_bricks.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite"
+ },
+ "result": "spectrum:calcite_bricks",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_slab.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_slab.json
new file mode 100644
index 0000000000..329aaf83be
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_slab.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite"
+ },
+ "result": "spectrum:polished_calcite_slab",
+ "count": 2
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_stairs.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_stairs.json
new file mode 100644
index 0000000000..553440e221
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_stairs.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite"
+ },
+ "result": "spectrum:polished_calcite_stairs",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_wall.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_wall.json
new file mode 100644
index 0000000000..858b730edf
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_calcite_to_polished_calcite_wall.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_calcite"
+ },
+ "result": "spectrum:polished_calcite_wall",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_slab.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_slab.json
new file mode 100644
index 0000000000..2fbcd0cb21
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_slab.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:tuff_bricks"
+ },
+ "result": "spectrum:tuff_brick_slab",
+ "count": 2
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_stairs.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_stairs.json
new file mode 100644
index 0000000000..90c3e776b1
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_stairs.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:tuff_bricks"
+ },
+ "result": "spectrum:tuff_brick_stairs",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_wall.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_wall.json
new file mode 100644
index 0000000000..a7bbd29687
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_bricks_to_tuff_brick_wall.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:tuff_bricks"
+ },
+ "result": "spectrum:tuff_brick_wall",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_slab.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_slab.json
new file mode 100644
index 0000000000..90a56bb645
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_slab.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff"
+ },
+ "result": "spectrum:polished_tuff_slab",
+ "count": 2
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_stairs.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_stairs.json
new file mode 100644
index 0000000000..267e263d41
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_stairs.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff"
+ },
+ "result": "spectrum:polished_tuff_stairs",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_wall.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_wall.json
new file mode 100644
index 0000000000..b3f3451e67
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_polished_tuff_wall.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff"
+ },
+ "result": "spectrum:polished_tuff_wall",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_slab.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_slab.json
new file mode 100644
index 0000000000..00c101ebf2
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_slab.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff"
+ },
+ "result": "spectrum:tuff_brick_slab",
+ "count": 2
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_stairs.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_stairs.json
new file mode 100644
index 0000000000..63aa062790
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_stairs.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff"
+ },
+ "result": "spectrum:tuff_brick_stairs",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_wall.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_wall.json
new file mode 100644
index 0000000000..5e08f9709d
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_brick_wall.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff"
+ },
+ "result": "spectrum:tuff_brick_wall",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_bricks.json b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_bricks.json
new file mode 100644
index 0000000000..b545996cee
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/polished_tuff_to_tuff_bricks.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "spectrum:polished_tuff"
+ },
+ "result": "spectrum:tuff_bricks",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_slab.json b/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_slab.json
new file mode 100644
index 0000000000..a4f05e3b6b
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_slab.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "minecraft:tuff"
+ },
+ "result": "spectrum:tuff_slab",
+ "count": 2
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_stairs.json b/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_stairs.json
new file mode 100644
index 0000000000..ca3c3a40fe
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_stairs.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "minecraft:tuff"
+ },
+ "result": "spectrum:tuff_stairs",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_wall.json b/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_wall.json
new file mode 100644
index 0000000000..dab3943673
--- /dev/null
+++ b/src/main/resources/data/spectrum/recipes/stonecutting/tuff_to_tuff_wall.json
@@ -0,0 +1,8 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "minecraft:tuff"
+ },
+ "result": "spectrum:tuff_wall",
+ "count": 1
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/blocks/altar_blocks.json b/src/main/resources/data/spectrum/tags/blocks/altar_blocks.json
new file mode 100644
index 0000000000..4498538232
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/blocks/altar_blocks.json
@@ -0,0 +1,8 @@
+{
+ "values": [
+ "spectrum:polished_tuff",
+ "spectrum:tuff_bricks",
+ "spectrum:polished_calcite",
+ "spectrum:calcite_bricks"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/blocks/amethyst_chiseled.json b/src/main/resources/data/spectrum/tags/blocks/amethyst_chiseled.json
new file mode 100644
index 0000000000..ae611bdb0d
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/blocks/amethyst_chiseled.json
@@ -0,0 +1,6 @@
+{
+ "values": [
+ "spectrum:amethyst_chiseled_tuff",
+ "spectrum:amethyst_chiseled_calcite"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/blocks/citrine_chiseled.json b/src/main/resources/data/spectrum/tags/blocks/citrine_chiseled.json
new file mode 100644
index 0000000000..680659cd5d
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/blocks/citrine_chiseled.json
@@ -0,0 +1,6 @@
+{
+ "values": [
+ "spectrum:citrine_chiseled_tuff",
+ "spectrum:citrine_chiseled_calcite"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/blocks/gem_blocks.json b/src/main/resources/data/spectrum/tags/blocks/gem_blocks.json
new file mode 100644
index 0000000000..96a7f4c86e
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/blocks/gem_blocks.json
@@ -0,0 +1,9 @@
+{
+ "values": [
+ "minecraft:amethyst_block",
+ "spectrum:citrine_block",
+ "spectrum:onyx_block",
+ "spectrum:moonstone_block",
+ "spectrum:topaz_block"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/blocks/gem_chiseled.json b/src/main/resources/data/spectrum/tags/blocks/gem_chiseled.json
new file mode 100644
index 0000000000..a2a5329fee
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/blocks/gem_chiseled.json
@@ -0,0 +1,14 @@
+{
+ "values": [
+ "spectrum:amethyst_chiseled_tuff",
+ "spectrum:topaz_chiseled_tuff",
+ "spectrum:citrine_chiseled_tuff",
+ "spectrum:onyx_chiseled_tuff",
+ "spectrum:moonstone_chiseled_tuff",
+ "spectrum:amethyst_chiseled_calcite",
+ "spectrum:topaz_chiseled_calcite",
+ "spectrum:citrine_chiseled_calcite",
+ "spectrum:onyx_chiseled_calcite",
+ "spectrum:moonstone_chiseled_calcite"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/blocks/moonstone_chiseled.json b/src/main/resources/data/spectrum/tags/blocks/moonstone_chiseled.json
new file mode 100644
index 0000000000..0efebc14c1
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/blocks/moonstone_chiseled.json
@@ -0,0 +1,6 @@
+{
+ "values": [
+ "spectrum:moonstone_chiseled_tuff",
+ "spectrum:moonstone_chiseled_calcite"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/blocks/onyx_chiseled.json b/src/main/resources/data/spectrum/tags/blocks/onyx_chiseled.json
new file mode 100644
index 0000000000..99e9f10023
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/blocks/onyx_chiseled.json
@@ -0,0 +1,6 @@
+{
+ "values": [
+ "spectrum:onyx_chiseled_tuff",
+ "spectrum:onyx_chiseled_calcite"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/blocks/topaz_chiseled.json b/src/main/resources/data/spectrum/tags/blocks/topaz_chiseled.json
new file mode 100644
index 0000000000..17ed474bbd
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/blocks/topaz_chiseled.json
@@ -0,0 +1,6 @@
+{
+ "values": [
+ "spectrum:topaz_chiseled_tuff",
+ "spectrum:topaz_chiseled_calcite"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/items/gem_buds.json b/src/main/resources/data/spectrum/tags/items/gem_buds.json
new file mode 100644
index 0000000000..9b640ac551
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/items/gem_buds.json
@@ -0,0 +1,19 @@
+{
+ "values": [
+ "minecraft:small_amethyst_bud",
+ "minecraft:medium_amethyst_bud",
+ "minecraft:large_amethyst_bud",
+ "spectrum:small_citrine_bud",
+ "spectrum:medium_citrine_bud",
+ "spectrum:large_citrine_bud",
+ "spectrum:small_topaz_bud",
+ "spectrum:medium_topaz_bud",
+ "spectrum:large_topaz_bud",
+ "spectrum:small_onyx_bud",
+ "spectrum:medium_onyx_bud",
+ "spectrum:large_onyx_bud",
+ "spectrum:small_moonstone_bud",
+ "spectrum:medium_moonstone_bud",
+ "spectrum:large_moonstone_bud"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/items/gem_clusters.json b/src/main/resources/data/spectrum/tags/items/gem_clusters.json
new file mode 100644
index 0000000000..47f83aac67
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/items/gem_clusters.json
@@ -0,0 +1,9 @@
+{
+ "values": [
+ "minecraft:amethyst_cluster",
+ "spectrum:citrine_cluster",
+ "spectrum:topaz_cluster",
+ "spectrum:onyx_cluster",
+ "spectrum:moonstone_cluster"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/spectrum/tags/items/gem_shards.json b/src/main/resources/data/spectrum/tags/items/gem_shards.json
new file mode 100644
index 0000000000..cfe9d6a794
--- /dev/null
+++ b/src/main/resources/data/spectrum/tags/items/gem_shards.json
@@ -0,0 +1,10 @@
+{
+ "values": [
+ "minecraft:amethyst_shard",
+ "spectrum:citrine_shard",
+ "spectrum:topaz_shard",
+ "spectrum:moonstone_shard",
+ "spectrum:onyx_shard",
+ "spectrum:rainbow_moonstone_shard"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
new file mode 100644
index 0000000000..cd767c34a2
--- /dev/null
+++ b/src/main/resources/fabric.mod.json
@@ -0,0 +1,40 @@
+{
+ "schemaVersion": 1,
+ "id": "spectrum",
+ "version": "${version}",
+
+ "name": "Spectrum",
+ "description": "A mod about gems, colors and decay",
+ "authors": [
+ "DaFuqs"
+ ],
+ "contact": {
+ "homepage": "https://github.com/DaFuqs/",
+ "sources": "https://github.com/DaFuqs/Spectrum"
+ },
+
+ "license": "MIT",
+ "icon": "assets/spectrum/icon.png",
+
+ "environment": "*",
+ "entrypoints": {
+ "main": [
+ "de.dafuqs.spectrum.SpectrumCommon"
+ ],
+ "client": [
+ "de.dafuqs.spectrum.SpectrumClient"
+ ],
+ "modmenu": [
+ "de.dafuqs.spectrum.config.ModMenuConfig"
+ ]
+ },
+ "mixins": [
+ "spectrum.mixins.json"
+ ],
+ "depends": {
+ "fabricloader": ">=0.10.8",
+ "fabric": "*",
+ "minecraft": ">=1.16.4"
+ },
+ "suggests": { }
+}
diff --git a/src/main/resources/spectrum.mixins.json b/src/main/resources/spectrum.mixins.json
new file mode 100644
index 0000000000..fb1739d251
--- /dev/null
+++ b/src/main/resources/spectrum.mixins.json
@@ -0,0 +1,14 @@
+{
+ "required": true,
+ "package": "de.dafuqs.spectrum.mixin",
+ "compatibilityLevel": "JAVA_8",
+ "mixins": [
+ "SpawnerBlockMixin",
+ "MobSpawnerBlockEntityMixin"
+ ],
+ "client": [
+ ],
+ "injectors": {
+ "defaultRequire": 1
+ }
+}