diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..4740853
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2f459b0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,22 @@
+# gradle
+
+.gradle/
+build/
+out/
+classes/
+bin/
+
+# eclipse
+
+*.launch
+
+# fabric
+
+run/
+
+# java
+
+hs_err_*.log
+replay_*.log
+*.hprof
+*.jfr
diff --git a/.project b/.project
new file mode 100644
index 0000000..6b24044
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+
+
+ quickiemod
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 0000000..a40ec5d
--- /dev/null
+++ b/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,13 @@
+arguments=
+auto.sync=false
+build.scans.enabled=false
+connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
+connection.project.dir=
+eclipse.preferences.version=1
+gradle.user.home=
+java.home=
+jvm.arguments=
+offline.mode=false
+override.workspace.settings=false
+show.console.view=true
+show.executions.view=true
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..06d2104
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,13 @@
+#
+#Sat Jun 01 10:37:20 CEST 2024
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=21
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..4131d38
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'fabric-loom' version '1.6-SNAPSHOT'
+ id 'maven-publish'
+}
+
+version = project.mod_version
+group = project.maven_group
+
+base {
+ archivesName = project.archives_base_name
+}
+
+repositories {
+ // Add repositories to retrieve artifacts from in here.
+ // You should only use this when depending on other mods because
+ // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
+ // See https://docs.gradle.org/current/userguide/declaring_repositories.html
+ // for more information about repositories.
+}
+
+fabricApi {
+ configureDataGeneration()
+}
+
+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}"
+
+ // Fabric API. This is technically optional, but you probably want it anyway.
+ modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
+
+}
+
+processResources {
+ inputs.property "version", project.version
+
+ filesMatching("fabric.mod.json") {
+ expand "version": project.version
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ it.options.release = 21
+}
+
+java {
+ // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
+ // if it is present.
+ // If you remove this line, sources will not be generated.
+ withSourcesJar()
+
+ sourceCompatibility = JavaVersion.VERSION_21
+ targetCompatibility = JavaVersion.VERSION_21
+}
+
+jar {
+ from("LICENSE") {
+ rename { "${it}_${project.base.archivesName.get()}"}
+ }
+}
+
+// configure the maven publication
+publishing {
+ publications {
+ create("mavenJava", MavenPublication) {
+ artifactId = project.archives_base_name
+ from components.java
+ }
+ }
+
+ // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
+ repositories {
+ // Add repositories to publish to here.
+ // Notice: This block does NOT have the same function as the block in the top level.
+ // The repositories here will be used for publishing your artifact, not for
+ // retrieving dependencies.
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..03e7047
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,17 @@
+# Done to increase the memory available to gradle.
+org.gradle.jvmargs=-Xmx1G
+org.gradle.parallel=true
+
+# Fabric Properties
+# check these on https://fabricmc.net/develop
+minecraft_version=1.20.6
+yarn_mappings=1.20.6+build.3
+loader_version=0.15.11
+
+# Mod Properties
+mod_version=1.20.6.0
+maven_group=de.jottyfan.quickiemod
+archives_base_name=quickiemod
+
+# Dependencies
+fabric_version=0.99.4+1.20.6
\ 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 0000000..e644113
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 0000000..b82aa23
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..1aa94a4
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,249 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original 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 POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# 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 ;; #(
+ MSYS* | 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
+ if ! command -v java >/dev/null 2>&1
+ then
+ 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
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# 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"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..7101f8e
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,92 @@
+@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=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 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!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..75c4d72
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,10 @@
+pluginManagement {
+ repositories {
+ maven {
+ name = 'Fabric'
+ url = 'https://maven.fabricmc.net/'
+ }
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/jottyfan/quickiemod/QuickieMod.java b/src/main/java/de/jottyfan/quickiemod/QuickieMod.java
new file mode 100644
index 0000000..d53c7dd
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/QuickieMod.java
@@ -0,0 +1,27 @@
+package de.jottyfan.quickiemod;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import de.jottyfan.quickiemod.init.RegistryManager;
+import net.fabricmc.api.ModInitializer;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class QuickieMod implements ModInitializer {
+ public static final String MODID = "quickiemod";
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(MODID);
+
+ @Override
+ public void onInitialize() {
+ LOGGER.info("loading {}", MODID);
+ RegistryManager.registerItems();
+ RegistryManager.registerBlocks();
+ RegistryManager.registerFeatures();
+ RegistryManager.registerItemGroup();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/jottyfan/quickiemod/QuickieModClient.java b/src/main/java/de/jottyfan/quickiemod/QuickieModClient.java
new file mode 100644
index 0000000..415f51d
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/QuickieModClient.java
@@ -0,0 +1,17 @@
+package de.jottyfan.quickiemod;
+
+import net.fabricmc.api.ClientModInitializer;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+@Environment(EnvType.CLIENT)
+public class QuickieModClient implements ClientModInitializer {
+ @Override
+ public void onInitializeClient() {
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/QuickieModDataGenerator.java b/src/main/java/de/jottyfan/quickiemod/QuickieModDataGenerator.java
new file mode 100644
index 0000000..395d3db
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/QuickieModDataGenerator.java
@@ -0,0 +1,23 @@
+package de.jottyfan.quickiemod;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
+import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class QuickieModDataGenerator implements DataGeneratorEntrypoint {
+ private static final Logger LOGGER = LoggerFactory.getLogger(QuickieMod.MODID);
+
+
+ @Override
+ public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
+ // TODO: implement
+ LOGGER.debug("initializing data generator");
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockDirtSalpeter.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDirtSalpeter.java
new file mode 100644
index 0000000..51c91f8
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDirtSalpeter.java
@@ -0,0 +1,46 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+import com.mojang.serialization.MapCodec;
+
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
+import net.minecraft.block.FallingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockDirtSalpeter extends FallingBlock {
+
+ public BlockDirtSalpeter() {
+ super(AbstractBlock.Settings.create().hardness(3.1f));
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState blockState, Builder builder) {
+ Integer count = (Double.valueOf(new Random().nextDouble() * 10).intValue() / 4) + 1;
+ boolean spawnBoneMeal = new Random().nextDouble() > 0.5f;
+ ItemStack boneMealStack = new ItemStack(Items.BONE_MEAL);
+ ItemStack salpeterStack = new ItemStack(QuickieItems.SALPETER.getItem(), count);
+ ItemStack dirtStack = new ItemStack(Blocks.DIRT);
+ ItemStack[] spawnies = spawnBoneMeal ? new ItemStack[] { boneMealStack, salpeterStack, dirtStack }
+ : new ItemStack[] { salpeterStack, dirtStack };
+ return Arrays.asList(spawnies);
+ }
+
+ @Override
+ protected MapCodec extends FallingBlock> getCodec() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockKelpstack.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockKelpstack.java
new file mode 100644
index 0000000..8d84f20
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockKelpstack.java
@@ -0,0 +1,38 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.mojang.serialization.MapCodec;
+
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.FallingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+import net.minecraft.sound.BlockSoundGroup;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockKelpstack extends FallingBlock {
+
+ public BlockKelpstack() {
+ super(AbstractBlock.Settings.create().hardness(0.1f).slipperiness(1.0f)
+ .breakInstantly().sounds(BlockSoundGroup.WET_GRASS));
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState blockState, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(Items.KELP, 9) });
+ }
+
+ @Override
+ protected MapCodec extends FallingBlock> getCodec() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreDeepslateSulphor.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreDeepslateSulphor.java
new file mode 100644
index 0000000..fad79b6
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreDeepslateSulphor.java
@@ -0,0 +1,30 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.ExperienceDroppingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockOreDeepslateSulphor extends ExperienceDroppingBlock {
+
+ public BlockOreDeepslateSulphor() {
+ super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(1.9f).requiresTool());
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState state, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR.getItem(), 4) });
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreNetherSulphor.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreNetherSulphor.java
new file mode 100644
index 0000000..8350eae
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreNetherSulphor.java
@@ -0,0 +1,29 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.ExperienceDroppingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockOreNetherSulphor extends ExperienceDroppingBlock {
+
+ public BlockOreNetherSulphor() {
+ super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(2.1f).requiresTool());
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState state, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR.getItem()) });
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSalpeter.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSalpeter.java
new file mode 100644
index 0000000..3c5d085
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSalpeter.java
@@ -0,0 +1,30 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.ExperienceDroppingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+import net.minecraft.util.math.random.Random;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockOreSalpeter extends ExperienceDroppingBlock {
+
+ public BlockOreSalpeter() {
+ super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(3.1f).requiresTool());
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState state, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER.getItem(), 2 + Random.create().nextInt(3)) });
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSandSalpeter.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSandSalpeter.java
new file mode 100644
index 0000000..6f40080
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSandSalpeter.java
@@ -0,0 +1,31 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
+import net.minecraft.block.ExperienceDroppingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+import net.minecraft.util.math.random.Random;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockOreSandSalpeter extends ExperienceDroppingBlock {
+
+ public BlockOreSandSalpeter() {
+ super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(2.9f).requiresTool());
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState state, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER.getItem(), 7 + Random.create().nextInt(4)), new ItemStack(Blocks.SAND) });
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSulphor.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSulphor.java
new file mode 100644
index 0000000..e1d22f4
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockOreSulphor.java
@@ -0,0 +1,30 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.ExperienceDroppingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockOreSulphor extends ExperienceDroppingBlock {
+
+ public BlockOreSulphor() {
+ super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(1.9f).requiresTool());
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState state, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR.getItem()) });
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockSalpeter.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockSalpeter.java
new file mode 100644
index 0000000..9a4426a
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockSalpeter.java
@@ -0,0 +1,29 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.ExperienceDroppingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockSalpeter extends ExperienceDroppingBlock {
+
+ public BlockSalpeter() {
+ super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(0.5f));
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState state, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER.getItem(), 9) });
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockSandSalpeter.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockSandSalpeter.java
new file mode 100644
index 0000000..35c8be4
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockSandSalpeter.java
@@ -0,0 +1,38 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.mojang.serialization.MapCodec;
+
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
+import net.minecraft.block.FallingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+import net.minecraft.util.math.random.Random;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockSandSalpeter extends FallingBlock {
+
+ public BlockSandSalpeter() {
+ super(AbstractBlock.Settings.create().hardness(3.1f).requiresTool());
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState state, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER.getItem(), 3 + Random.create().nextInt(2)), new ItemStack(Blocks.SAND) });
+ }
+
+ @Override
+ protected MapCodec extends FallingBlock> getCodec() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockSulphor.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockSulphor.java
new file mode 100644
index 0000000..5769b06
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockSulphor.java
@@ -0,0 +1,29 @@
+package de.jottyfan.quickiemod.blocks;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.jottyfan.quickiemod.blocks.help.IntProviderHelper;
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.ExperienceDroppingBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.loot.context.LootContextParameterSet.Builder;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class BlockSulphor extends ExperienceDroppingBlock {
+
+ public BlockSulphor() {
+ super(IntProviderHelper.of(0, 2), AbstractBlock.Settings.create().hardness(0.5f));
+ }
+
+ @Override
+ public List getDroppedStacks(BlockState state, Builder builder) {
+ return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR.getItem(), 9) });
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java b/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java
new file mode 100644
index 0000000..7ffb15a
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java
@@ -0,0 +1,39 @@
+package de.jottyfan.quickiemod.blocks;
+
+import net.minecraft.block.Block;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public enum QuickieBlocks {
+ // @formatter:off
+ KELPSTACK(new BlockKelpstack(), "kelpstack"),
+ DIRT_SALPETER(new BlockDirtSalpeter(), "dirtsalpeter"),
+ ORE_NETHER_SULPHOR(new BlockOreNetherSulphor(), "orenethersulphor"),
+ ORE_SALPETER(new BlockOreSalpeter(), "oresalpeter"),
+ ORE_SAND_SALPETER(new BlockSandSalpeter(), "oresandsalpeter"),
+ ORE_SULPHOR(new BlockOreSulphor(), "oresulphor"),
+ ORE_DEEPSLATESULPHOR(new BlockOreDeepslateSulphor(), "oredeepslatesulphor"),
+ SAND_SALPETER(new BlockSandSalpeter(), "sandsalpeter"),
+ BLOCKSULPHOR(new BlockSulphor(), "blocksulphor"),
+ BLOCKSALPETER(new BlockSalpeter(), "blocksalpeter");
+ // @formatter:on
+
+ private final Block block;
+ private final String name;
+
+ private QuickieBlocks(Block block, String name) {
+ this.block = block;
+ this.name = name;
+ }
+
+ public final Block getBlock() {
+ return block;
+ }
+
+ public final String getName() {
+ return name;
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/help/IntProviderHelper.java b/src/main/java/de/jottyfan/quickiemod/blocks/help/IntProviderHelper.java
new file mode 100644
index 0000000..c73f186
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/blocks/help/IntProviderHelper.java
@@ -0,0 +1,37 @@
+package de.jottyfan.quickiemod.blocks.help;
+
+import net.minecraft.util.math.intprovider.IntProvider;
+import net.minecraft.util.math.intprovider.IntProviderType;
+import net.minecraft.util.math.random.Random;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class IntProviderHelper {
+ public static final IntProvider of(Integer min, Integer max) {
+ return new IntProvider() {
+
+ @Override
+ public IntProviderType> getType() {
+ return IntProviderType.CONSTANT;
+ }
+
+ @Override
+ public int getMin() {
+ return min;
+ }
+
+ @Override
+ public int getMax() {
+ return max;
+ }
+
+ @Override
+ public int get(Random random) {
+ return random.nextBetween(min, max);
+ }
+ };
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/init/FeaturesManager.java b/src/main/java/de/jottyfan/quickiemod/init/FeaturesManager.java
new file mode 100644
index 0000000..f355d0a
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/init/FeaturesManager.java
@@ -0,0 +1,66 @@
+package de.jottyfan.quickiemod.init;
+
+import java.util.function.BiConsumer;
+
+import de.jottyfan.quickiemod.QuickieMod;
+import net.fabricmc.fabric.api.biome.v1.BiomeModificationContext;
+import net.fabricmc.fabric.api.biome.v1.BiomeSelectionContext;
+import net.minecraft.registry.RegistryKey;
+import net.minecraft.registry.RegistryKeys;
+import net.minecraft.util.Identifier;
+import net.minecraft.world.gen.GenerationStep;
+import net.minecraft.world.gen.feature.ConfiguredFeature;
+import net.minecraft.world.gen.feature.PlacedFeature;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class FeaturesManager {
+
+ public static final RegistryKey> CF_ORESULFUR = genCf("oresulphor");
+ public static final RegistryKey> CF_OREDEEPSLATESULFUR = genCf("oredepslatesulphor");
+ public static final RegistryKey> CF_ORESALPETER = genCf("oresalpeter");
+ public static final RegistryKey> CF_ORENETHERSULPHOR = genCf("orenethersulphore");
+ public static final RegistryKey> CF_BLOCKSULPHOR = genCf("blocksulphor");
+ public static final RegistryKey> CF_DIRTSALPETER = genCf("dirtsalpeter");
+ public static final RegistryKey> CF_SANDSALPETER = genCf("sandsalpeter");
+ public static final RegistryKey> CF_ORESANDSALPETER = genCf("oresandsalpeter");
+
+ public static final RegistryKey PF_ORESULPHOR = genPf("oresulphor");
+ public static final RegistryKey PF_OREDEEPSLATESULPHOR = genPf("oredeepslatesulphor");
+ public static final RegistryKey PF_ORESALPETER = genPf("oresalpeter");
+ public static final RegistryKey PF_ORENETHERSULPHOR = genPf("orenethersulphor");
+ public static final RegistryKey PF_BLOCKSULPHOR = genPf("blocksulphor");
+ public static final RegistryKey PF_DIRTSALPETER = genPf("dirtsalpeter");
+ public static final RegistryKey PF_SANDSALPETER = genPf("sandsalpeter");
+ public static final RegistryKey PF_ORESANDSALPETER = genPf("oresandsalpeter");
+
+ private static final RegistryKey> genCf(String name) {
+ return RegistryKey.of(RegistryKeys.CONFIGURED_FEATURE, new Identifier(QuickieMod.MODID, name));
+ }
+
+ private static final RegistryKey genPf(String name) {
+ return RegistryKey.of(RegistryKeys.PLACED_FEATURE, new Identifier(QuickieMod.MODID, name));
+ }
+
+ protected static final BiConsumer overworldOres() {
+ return (bsc, bmc) -> {
+ bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESULPHOR);
+ bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESALPETER);
+ bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_DIRTSALPETER);
+ bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_SANDSALPETER);
+ bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORESANDSALPETER);
+ bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_OREDEEPSLATESULPHOR);
+ };
+ }
+
+ protected static final BiConsumer netherOres() {
+ return (bsc, bmc) -> {
+ bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_ORENETHERSULPHOR);
+ bmc.getGenerationSettings().addFeature(GenerationStep.Feature.UNDERGROUND_ORES, PF_BLOCKSULPHOR);
+ };
+ }
+
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/init/RegistryManager.java b/src/main/java/de/jottyfan/quickiemod/init/RegistryManager.java
new file mode 100644
index 0000000..5fe7d21
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/init/RegistryManager.java
@@ -0,0 +1,71 @@
+package de.jottyfan.quickiemod.init;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import de.jottyfan.quickiemod.QuickieMod;
+import de.jottyfan.quickiemod.blocks.QuickieBlocks;
+import de.jottyfan.quickiemod.items.QuickieItems;
+import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
+import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
+import net.fabricmc.fabric.api.biome.v1.ModificationPhase;
+import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
+import net.fabricmc.fabric.api.registry.FuelRegistry;
+import net.minecraft.item.BlockItem;
+import net.minecraft.item.Item.Settings;
+import net.minecraft.item.ItemStack;
+import net.minecraft.registry.Registries;
+import net.minecraft.registry.Registry;
+import net.minecraft.registry.RegistryKey;
+import net.minecraft.registry.RegistryKeys;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class RegistryManager {
+ private static final Logger LOGGER = LoggerFactory.getLogger(QuickieMod.MODID);
+
+ public static final void registerItemGroup() {
+ Registry.register(Registries.ITEM_GROUP, RegistryKey.of(RegistryKeys.ITEM_GROUP, new Identifier(QuickieMod.MODID, "itemgroups")),
+ FabricItemGroup.builder().icon(() -> new ItemStack(QuickieItems.ROTTEN_FLESH_STRIPES.getItem())).displayName(Text.literal(QuickieMod.MODID))
+ .entries((enabledFeatures, stacks) -> {
+ for (QuickieItems i : QuickieItems.values()) {
+ stacks.add(new ItemStack(i.getItem()));
+ }
+ for (QuickieBlocks b : QuickieBlocks.values()) {
+ stacks.add(new ItemStack(b.getBlock()));
+ }
+ }).build());
+ }
+
+ public static final void registerItems() {
+ LOGGER.debug("registering items");
+ for (QuickieItems i : QuickieItems.values()) {
+ Registry.register(Registries.ITEM, new Identifier(QuickieMod.MODID, i.getName()), i.getItem());
+ }
+ FuelRegistry.INSTANCE.add(QuickieItems.SULPHOR.getItem(), 200);
+ FuelRegistry.INSTANCE.add(QuickieBlocks.BLOCKSULPHOR.getBlock(), 2000);
+ }
+
+ public static final void registerBlocks() {
+ LOGGER.debug("registering blocks");
+ for (QuickieBlocks b : QuickieBlocks.values()) {
+ Registry.register(Registries.BLOCK, new Identifier(QuickieMod.MODID, b.getName()), b.getBlock());
+ Registry.register(Registries.ITEM, new Identifier(QuickieMod.MODID, b.getName()), new BlockItem(b.getBlock(), new Settings()));
+ }
+ }
+
+ public static final void registerFeatures() {
+ // Overworld features
+ BiomeModifications.create(new Identifier(QuickieMod.MODID, "features")).add(ModificationPhase.ADDITIONS,
+ BiomeSelectors.foundInOverworld(), FeaturesManager.overworldOres());
+
+ // Nether features
+ BiomeModifications.create(new Identifier(QuickieMod.MODID, "nether_features")).add(ModificationPhase.ADDITIONS,
+ BiomeSelectors.foundInTheNether(), FeaturesManager.netherOres());
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/item/ModdedItemUsageContext.java b/src/main/java/de/jottyfan/quickiemod/item/ModdedItemUsageContext.java
new file mode 100644
index 0000000..8e98bc6
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/item/ModdedItemUsageContext.java
@@ -0,0 +1,21 @@
+package de.jottyfan.quickiemod.item;
+
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.ItemUsageContext;
+import net.minecraft.util.Hand;
+import net.minecraft.util.hit.BlockHitResult;
+import net.minecraft.world.World;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class ModdedItemUsageContext extends ItemUsageContext {
+
+ public ModdedItemUsageContext(World world, PlayerEntity player, Hand hand, ItemStack stack, BlockHitResult hit) {
+ super(world, player, hand, stack, hit);
+ }
+
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/items/ItemCarrotstack.java b/src/main/java/de/jottyfan/quickiemod/items/ItemCarrotstack.java
new file mode 100644
index 0000000..a79f52e
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/items/ItemCarrotstack.java
@@ -0,0 +1,17 @@
+package de.jottyfan.quickiemod.items;
+
+import net.minecraft.component.type.FoodComponent;
+import net.minecraft.item.Item;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class ItemCarrotstack extends Item {
+
+ public ItemCarrotstack() {
+ super(new Item.Settings().maxCount(64)
+ .food(new FoodComponent.Builder().nutrition(12).saturationModifier(0.6F).build()));
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/items/ItemRottenFleshStripes.java b/src/main/java/de/jottyfan/quickiemod/items/ItemRottenFleshStripes.java
new file mode 100644
index 0000000..2a6f385
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/items/ItemRottenFleshStripes.java
@@ -0,0 +1,15 @@
+package de.jottyfan.quickiemod.items;
+
+import net.minecraft.item.Item;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class ItemRottenFleshStripes extends Item {
+
+ public ItemRottenFleshStripes() {
+ super(new Item.Settings().maxCount(64));
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/items/ItemSalpeter.java b/src/main/java/de/jottyfan/quickiemod/items/ItemSalpeter.java
new file mode 100644
index 0000000..96a0760
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/items/ItemSalpeter.java
@@ -0,0 +1,15 @@
+package de.jottyfan.quickiemod.items;
+
+import net.minecraft.item.Item;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class ItemSalpeter extends Item {
+
+ public ItemSalpeter() {
+ super(new Item.Settings());
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/items/ItemStub.java b/src/main/java/de/jottyfan/quickiemod/items/ItemStub.java
new file mode 100644
index 0000000..e4d7850
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/items/ItemStub.java
@@ -0,0 +1,14 @@
+package de.jottyfan.quickiemod.items;
+
+import net.minecraft.item.Item;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class ItemStub extends Item {
+ public ItemStub() {
+ super(new Item.Settings().maxCount(64));
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/items/ItemSulphor.java b/src/main/java/de/jottyfan/quickiemod/items/ItemSulphor.java
new file mode 100644
index 0000000..bf7cc5e
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/items/ItemSulphor.java
@@ -0,0 +1,41 @@
+package de.jottyfan.quickiemod.items;
+
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.Hand;
+import net.minecraft.util.TypedActionResult;
+import net.minecraft.world.World;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class ItemSulphor extends Item {
+
+ public ItemSulphor() {
+ super(new Item.Settings());
+ }
+
+ @Override
+ public TypedActionResult use(World world, PlayerEntity user, Hand hand) {
+ ItemStack itemStack = user.getStackInHand(hand);
+ // TODO: reactivate when sulforpad is available
+// BlockHitResult hitResult = BoatItem.raycast(world, user, RaycastContext.FluidHandling.SOURCE_ONLY);
+// if (((HitResult) hitResult).getType() == HitResult.Type.MISS) {
+// return TypedActionResult.pass(itemStack);
+// }
+// if (((HitResult) hitResult).getType() == HitResult.Type.BLOCK) {
+// if (!world.isClient) {
+// BlockPos pos = hitResult.getBlockPos();
+// if (BlockSulforpad.getAllowedBlockHolder().contains(world.getBlockState(pos).getBlock()) && world.getBlockState(pos.up()).isAir()) {
+// world.setBlockState(pos.up(), QuickieBlocks.SULFORPAD.getDefaultState());
+// itemStack.decrement(1);
+// }
+// }
+// return TypedActionResult.success(itemStack, world.isClient());
+// }
+ return TypedActionResult.pass(itemStack);
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/items/QuickieItems.java b/src/main/java/de/jottyfan/quickiemod/items/QuickieItems.java
new file mode 100644
index 0000000..b011800
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/items/QuickieItems.java
@@ -0,0 +1,34 @@
+package de.jottyfan.quickiemod.items;
+
+import net.minecraft.item.Item;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public enum QuickieItems {
+ // @formatter:off
+ ROTTEN_FLESH_STRIPES(new ItemRottenFleshStripes(), "rotten_flesh_stripes"),
+ CARROTSTACK(new ItemCarrotstack(), "carrotstack"),
+ STUB(new ItemStub(), "stub"),
+ SALPETER(new ItemSalpeter(), "salpeter"),
+ SULPHOR(new ItemSulphor(), "sulphor");
+ // @formatter:on
+
+ private final Item item;
+ private final String name;
+
+ private QuickieItems(Item item, String name) {
+ this.item = item;
+ this.name = name;
+ }
+
+ public final Item getItem() {
+ return item;
+ }
+
+ public final String getName() {
+ return name;
+ }
+}
diff --git a/src/main/java/de/jottyfan/quickiemod/text/PrefixedText.java b/src/main/java/de/jottyfan/quickiemod/text/PrefixedText.java
new file mode 100644
index 0000000..175229b
--- /dev/null
+++ b/src/main/java/de/jottyfan/quickiemod/text/PrefixedText.java
@@ -0,0 +1,52 @@
+package de.jottyfan.quickiemod.text;
+
+import java.util.List;
+
+import net.minecraft.text.OrderedText;
+import net.minecraft.text.Style;
+import net.minecraft.text.Text;
+import net.minecraft.text.TextContent;
+
+/**
+ *
+ * @author jotty
+ *
+ */
+public class PrefixedText implements Text {
+
+ private final String pattern;
+ private final Text text;
+
+ private PrefixedText(String pattern, Text text) {
+ this.pattern = pattern;
+ this.text = text;
+ }
+
+ public final static PrefixedText instance(String pattern, Text text) {
+ return new PrefixedText(pattern, text);
+ }
+
+ private Text generateText() {
+ return Text.of(pattern.replace("%s", text.getString()));
+ }
+
+ @Override
+ public OrderedText asOrderedText() {
+ return generateText().asOrderedText();
+ }
+
+ @Override
+ public TextContent getContent() {
+ return generateText().getContent();
+ }
+
+ @Override
+ public List getSiblings() {
+ return generateText().getSiblings();
+ }
+
+ @Override
+ public Style getStyle() {
+ return text.getStyle();
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/blocksalpeter.json b/src/main/resources/assets/quickiemod/blockstates/blocksalpeter.json
new file mode 100644
index 0000000..6dfbf76
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/blocksalpeter.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/blocksalpeter"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/blocksulphor.json b/src/main/resources/assets/quickiemod/blockstates/blocksulphor.json
new file mode 100644
index 0000000..53372bf
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/blocksulphor.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/blocksulphor"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/kelpstack.json b/src/main/resources/assets/quickiemod/blockstates/kelpstack.json
new file mode 100644
index 0000000..44308ba
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/kelpstack.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/kelpstack"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/oredeepslatesulphor.json b/src/main/resources/assets/quickiemod/blockstates/oredeepslatesulphor.json
new file mode 100644
index 0000000..55bcfb7
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/oredeepslatesulphor.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/oredeepslatesulphor"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/orenethersulphor.json b/src/main/resources/assets/quickiemod/blockstates/orenethersulphor.json
new file mode 100644
index 0000000..96fe466
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/orenethersulphor.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/orenethersulphor"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/oresalpeter.json b/src/main/resources/assets/quickiemod/blockstates/oresalpeter.json
new file mode 100644
index 0000000..5e645db
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/oresalpeter.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/oresalpeter"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/oresandsalpeter.json b/src/main/resources/assets/quickiemod/blockstates/oresandsalpeter.json
new file mode 100644
index 0000000..aaea60d
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/oresandsalpeter.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/oresandsalpeter"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/oresulphor.json b/src/main/resources/assets/quickiemod/blockstates/oresulphor.json
new file mode 100644
index 0000000..fb0d815
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/oresulphor.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/oresulphor"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/blockstates/sandsalpeter.json b/src/main/resources/assets/quickiemod/blockstates/sandsalpeter.json
new file mode 100644
index 0000000..f187967
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/blockstates/sandsalpeter.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "quickiemod:block/sandsalpeter"
+ }
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/icon.png b/src/main/resources/assets/quickiemod/icon.png
new file mode 100644
index 0000000..0e4cf1a
Binary files /dev/null and b/src/main/resources/assets/quickiemod/icon.png differ
diff --git a/src/main/resources/assets/quickiemod/lang/de_de.json b/src/main/resources/assets/quickiemod/lang/de_de.json
new file mode 100644
index 0000000..ab4efb8
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/lang/de_de.json
@@ -0,0 +1,110 @@
+{
+ "itemGroup.quickiemod.all": "quickiemod Items",
+ "item.quickiemod.speedpowderaxe": "Fluchtpulveraxt",
+ "item.quickiemod.speedpowderpickaxe": "Fluchtpulverspitzhacke",
+ "item.quickiemod.speedpowdershovel": "Fluchtpulverschaufel",
+ "item.quickiemod.speedpowderhoe": "Fluchtpulverfeldhacke",
+ "item.quickiemod.speedpowderwaterhoe": "bewässerte Fluchtpulverfeldhacke",
+ "item.quickiemod.speedpowder": "Fluchtpulver",
+ "item.quickiemod.quickiepowder": "Eilpulver",
+ "item.quickiemod.quickiepowderaxe": "Eilpulveraxt",
+ "item.quickiemod.quickiepowderpickaxe": "Eilpulverspitzhacke",
+ "item.quickiemod.quickiepowdershovel": "Eilpulverschaufel",
+ "item.quickiemod.quickiepowderhoe": "Eilpulverfeldhacke",
+ "item.quickiemod.quickiepowderwaterhoe": "bewässerte Eilpulverfeldhacke",
+ "item.quickiemod.sulphor": "Schwefel",
+ "item.quickiemod.salpeter": "Salpeter",
+ "item.quickiemod.construction0": "leerer Bauplan",
+ "item.quickiemod.construction1": "begonnener Bauplan",
+ "item.quickiemod.construction2": "fertiger Bauplan",
+ "item.quickiemod.pencil": "Bleistift",
+ "item.quickiemod.levelup": "Aufwerter",
+ "item.quickiemod.backpack_black": "schwarzer Rucksack",
+ "item.quickiemod.backpack_blue": "blauer Rucksack",
+ "item.quickiemod.backpack_brown": "brauner Rucksack",
+ "item.quickiemod.backpack_cyan": "türkiser Rucksack",
+ "item.quickiemod.backpack_green": "grüner Rucksack",
+ "item.quickiemod.backpack_pink": "rosaner Rucksack",
+ "item.quickiemod.backpack_red": "roter Rucksack",
+ "item.quickiemod.backpack_white": "weißer Rucksack",
+ "item.quickiemod.backpack_yellow": "gelber Rucksack",
+ "item.quickiemod.backpack_darkgray": "dunkelgrauer Rucksack",
+ "item.quickiemod.backpack_lightgray": "hellgrauer Rucksack",
+ "item.quickiemod.backpack_lightgreen": "hellgrüner Rucksack",
+ "item.quickiemod.backpack_magenta": "pinker Rucksack",
+ "item.quickiemod.backpack_orange": "orangener Rucksack",
+ "item.quickiemod.backpack_purple": "lilaner Rucksack",
+ "item.quickiemod.backpack_lightblue": "hellblauer Rucksack",
+ "item.quickiemod.bag": "Beutel",
+ "item.quickiemod.rotten_flesh_stripes": "geschnittenes Gammelfleisch",
+ "item.quickiemod.carrotstack": "Karottenbündel",
+ "item.quickiemod.cotton": "Baumwolle",
+ "item.quickiemod.cottonseed": "Baumwollsaat",
+ "item.quickiemod.canola": "Raps",
+ "item.quickiemod.canolaseed": "Rapssaat",
+ "item.quickiemod.canolabottle": "Rapsöl",
+ "item.quickiemod.canolabottlestack": "Rapsölsammlung",
+ "item.quickiemod.stub": "Stummel",
+ "item.quickiemod.oxidizedcopperpowder": "oxidiertes Kupferpulver",
+ "item.quickiemod.speedingot": "Fluchtpulverbarren",
+ "item.quickiemod.quickieingot": "Eilpulverbarren",
+ "block.quickiemod.orenethersulphor": "Nether-Schwefel",
+ "block.quickiemod.oresalpeter": "Salpetererz",
+ "block.quickiemod.oresandsalpeter": "Salpetergestein",
+ "block.quickiemod.oresulphor": "Schwefelgestein",
+ "block.quickiemod.oredeepslatesulphor": "Schwefeltiefengestein",
+ "block.quickiemod.dirtsalpeter": "Salpetererde",
+ "block.quickiemod.sandsalpeter": "Salpetersand",
+ "block.quickiemod.constructionborder": "Bauplangrenzblock",
+ "block.quickiemod.rotateclockwise": "im Urzeigersinn Bauplandreher",
+ "block.quickiemod.rotatecounterclockwise": "gegen den Urzeigersinn Bauplandreher",
+ "block.quickiemod.mirrorhorizontal": "horizontaler Bauplanspiegler",
+ "block.quickiemod.mirrorvertical": "vertikaler Bauplanspiegler",
+ "block.quickiemod.moveup": "Höhenpositionsaddierer",
+ "block.quickiemod.movedown": "Höhenpositionssubtrahierer",
+ "block.quickiemod.menu": "Bauplanwerkbank",
+ "block.quickiemod.lavahoarder": "voller Lavasauger",
+ "block.quickiemod.emptylavahoarder": "Lavasauger",
+ "block.quickiemod.itemhoarder": "Itemsauger",
+ "block.quickiemod.monsterhoarder": "Monstersauger",
+ "block.quickiemod.kelpstack": "Seegrassbündel",
+ "block.quickiemod.cottonplant": "Baumwollpflanze",
+ "block.quickiemod.blocksulphor": "Schwefelblock",
+ "block.quickiemod.blocksalpeter": "Salpeterblock",
+ "block.quickiemod.blockspeedpowder": "Fluchtpulverblock",
+ "block.quickiemod.blockquickiepowder": "Eilpulverblock",
+ "block.quickiemod.drill": "Bohrer",
+ "block.quickiemod.drilleast": "Ost-Bohrer",
+ "block.quickiemod.drillsouth": "Süd-Bohrer",
+ "block.quickiemod.drillwest": "West-Bohrer",
+ "block.quickiemod.drillnorth": "Nord-Bohrer",
+ "block.quickiemod.drillstop": "Bohrerstopper",
+ "block.quickiemod.blockstackerup": "Hochstapler",
+ "block.quickiemod.blockstackerdown": "Tiefstapler",
+ "block.quickiemod.blockstackereast": "Oststapler",
+ "block.quickiemod.blockstackerwest": "Weststapler",
+ "block.quickiemod.blockstackernorth": "Nordstapler",
+ "block.quickiemod.blockstackersouth": "Südstapler",
+ "block.quickiemod.blockspreader": "Blockverteiler",
+ "block.quickiemod.sulforpad": "Schwefelablagerung",
+ "container.quickiemod.backpack": "Rucksack",
+ "container.quickiemod.blockstacker": "Blockstapler",
+ "msg.buildingplan.start": "beginne Konstruktionsaufnahme bei %s,%s,%s",
+ "msg.buildingplan.end": "beende Konstruktionsaufnahme bei %s,%s,%s",
+ "msg.buildingplan.null": "Der Bauplan ist kaputt.",
+ "msg.buildingplan.missing": "Zum Bauen fehlt noch: %s",
+ "msg.buildingplan.rotateclockwise": "Der Bauplan wurde im Uhrzeigersinn gedreht.",
+ "msg.buildingplan.rotatecounterclockwise": "Der Bauplan wurde gegen den Uhrzeigersinn gedreht.",
+ "msg.buildingplan.mirrorhorizontal": "Der Bauplan wurde horizontal gespiegelt.",
+ "msg.buildingplan.mirrorvertical": "Der Bauplan wurde vertikal gespiegelt.",
+ "msg.buildingplan.move": "Der Bauplan wurde in der Höhe um %s Blöcke verschoben.",
+ "msg.buildingplan.failonblock": "Der Bau wurde abgelehnt, es ist im Weg: %s",
+ "msg.buildingplan.failonplayer": "Der Bau wurde abgelehnt, um Spieler %s nicht zu gefährden.",
+ "msg.itemhoarder.summary": "Der Itemsauger enthält: %s",
+ "msg.notyetimplemented": "leider noch nicht verfügbar",
+ "msg.backpack.transfer.filled": "Der Rucksack wurde befüllt.",
+ "msg.backpack.transfer.cleared": "Der Rucksackinhalt wurde soweit möglich geleert.",
+ "msg.backpack.transfer.cancel": "Entweder der Rucksack oder die Kiste sind nicht komplett leer.",
+ "msg.drill.fuelinfo": "Der Bohrer hat noch eine Ladung für den Abbau von %s Blöcken. Er kann mit Rapsöl aufgeladen werden.",
+ "error.unleveling.inventory.full": "Es ist kein Platz mehr frei, um die Aufwertungen abzulegen."
+}
diff --git a/src/main/resources/assets/quickiemod/lang/en_us.json b/src/main/resources/assets/quickiemod/lang/en_us.json
new file mode 100644
index 0000000..d2070c8
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/lang/en_us.json
@@ -0,0 +1,110 @@
+{
+ "itemGroup.quickiemod.all": "quickiemod items",
+ "item.quickiemod.speedpowderaxe": "speedpowder axe",
+ "item.quickiemod.speedpowderpickaxe": "speedpowder pickaxe",
+ "item.quickiemod.speedpowdershovel": "speedpowder shovel",
+ "item.quickiemod.speedpowderhoe": "speedpowder hoe",
+ "item.quickiemod.speedpowderwaterhoe": "watered speedpowder hoe",
+ "item.quickiemod.speedpowder": "speedpowder",
+ "item.quickiemod.quickiepowder": "hurrypowder",
+ "item.quickiemod.quickiepowderaxe": "hurrypowder axe",
+ "item.quickiemod.quickiepowderpickaxe": "hurrypowder pickaxe",
+ "item.quickiemod.quickiepowdershovel": "hurrypowder shovel",
+ "item.quickiemod.quickiepowderhoe": "hurrypowder hoe",
+ "item.quickiemod.quickiepowderwaterhoe": "watered hurrypowder hoe",
+ "item.quickiemod.sulphor": "sulfur",
+ "item.quickiemod.salpeter": "salpeter",
+ "item.quickiemod.construction0": "empty building plan",
+ "item.quickiemod.construction1": "started building plan",
+ "item.quickiemod.construction2": "finished building plan",
+ "item.quickiemod.pencil": "pencil",
+ "item.quickiemod.levelup": "level up",
+ "item.quickiemod.backpack_black": "black backpack",
+ "item.quickiemod.backpack_blue": "blue backpack",
+ "item.quickiemod.backpack_brown": "brown backpack",
+ "item.quickiemod.backpack_cyan": "cyan backpack",
+ "item.quickiemod.backpack_green": "green backpack",
+ "item.quickiemod.backpack_pink": "pink backpack",
+ "item.quickiemod.backpack_red": "red backpack",
+ "item.quickiemod.backpack_white": "white backpack",
+ "item.quickiemod.backpack_yellow": "yellow backpack",
+ "item.quickiemod.backpack_darkgray": "dark gray backpack",
+ "item.quickiemod.backpack_lightgray": "light gray backpack",
+ "item.quickiemod.backpack_lightgreen": "lime backpack",
+ "item.quickiemod.backpack_magenta": "magenta backpack",
+ "item.quickiemod.backpack_orange": "orange backpack",
+ "item.quickiemod.backpack_purple": "purple backpack",
+ "item.quickiemod.backpack_lightblue": "light blue backpack",
+ "item.quickiemod.bag": "bag",
+ "item.quickiemod.rotten_flesh_stripes": "rotten flesh stripes",
+ "item.quickiemod.carrotstack": "a bundle of carrots",
+ "item.quickiemod.cotton": "cotton",
+ "item.quickiemod.cottonseed": "cotton seed",
+ "item.quickiemod.canola": "canola",
+ "item.quickiemod.canolaseed": "canola seed",
+ "item.quickiemod.canolabottle": "canola oil",
+ "item.quickiemod.canolabottlestack": "canola oil collection",
+ "item.quickiemod.stub": "stub",
+ "item.quickiemod.oxidizedcopperpowder": "oxidized copper powder",
+ "item.quickiemod.speedingot": "Speedpowderingot",
+ "item.quickiemod.quickieingot": "Hurrypowderingot",
+ "block.quickiemod.orenethersulphor": "nether sulfur",
+ "block.quickiemod.oresalpeter": "salpeter ore",
+ "block.quickiemod.oresandsalpeter": "salpeter stone",
+ "block.quickiemod.oresulphor": "sulfur stone",
+ "block.quickiemod.oredeepslatesulphor": "deepslate sulfur stone",
+ "block.quickiemod.dirtsalpeter": "salpeter dirt",
+ "block.quickiemod.sandsalpeter": "salpeter sand",
+ "block.quickiemod.constructionborder": "building plan border block",
+ "block.quickiemod.rotateclockwise": "rotate clockwise building plan",
+ "block.quickiemod.rotatecounterclockwise": "rotate counterclockwise building plan",
+ "block.quickiemod.mirrorhorizontal": "horizontal building plan mirror",
+ "block.quickiemod.mirrorvertical": "vertical building plan mirror",
+ "block.quickiemod.moveup": "height position adder",
+ "block.quickiemod.movedown": "height position substractor",
+ "block.quickiemod.menu": "building plan crafting table",
+ "block.quickiemod.lavahoarder": "filled lava hoarder",
+ "block.quickiemod.emptylavahoarder": "lava hoarder",
+ "block.quickiemod.itemhoarder": "item hoarder",
+ "block.quickiemod.monsterhoarder": "monster hoarder",
+ "block.quickiemod.kelpstack": "kelp bundle",
+ "block.quickiemod.cottonplant": "cotton plant",
+ "block.quickiemod.blocksulphor": "block of sulfur",
+ "block.quickiemod.blocksalpeter": "block of salpeter",
+ "block.quickiemod.blockspeedpowder": "block of speedpowder",
+ "block.quickiemod.blockquickiepowder": "block of hurrypowder",
+ "block.quickiemod.drill": "drill",
+ "block.quickiemod.drilleast": "east drill",
+ "block.quickiemod.drillsouth": "south drill",
+ "block.quickiemod.drillwest": "west drill",
+ "block.quickiemod.drillnorth": "north drill",
+ "block.quickiemod.drillstop": "drill stopper",
+ "block.quickiemod.blockstackerup": "up stacker",
+ "block.quickiemod.blockstackerdown": "down stacker",
+ "block.quickiemod.blockstackereast": "east stacker",
+ "block.quickiemod.blockstackerwest": "west stacker",
+ "block.quickiemod.blockstackernorth": "north stacker",
+ "block.quickiemod.blockstackersouth": "south stacker",
+ "block.quickiemod.blockspreader": "block spreader",
+ "block.quickiemod.sulforpad": "sulphur deposition",
+ "container.quickiemod.backpack": "backpack",
+ "container.quickiemod.blockstacker": "block stacker",
+ "msg.buildingplan.start": "started recording of construction at %s,%s,%s",
+ "msg.buildingplan.end": "finished recording of construction at %s,%s,%s",
+ "msg.buildingplan.null": "The building plan is damaged.",
+ "msg.buildingplan.missing": "Cannot complete until you deliver %s",
+ "msg.buildingplan.rotateclockwise": "Rotated the building plan clockwise",
+ "msg.buildingplan.rotatecounterclockwise": "Rotated the building plan counterclockwise",
+ "msg.buildingplan.mirrorhorizontal": "Mirrored the building plan horizontally",
+ "msg.buildingplan.mirrorvertical": "Mirrored the building plan vertically",
+ "msg.buildingplan.move": "The building plan has been moved in height for %s blocks.",
+ "msg.buildingplan.failonblock": "The building execution was rejected because of %s",
+ "msg.buildingplan.failonplayer": "The building execution was rejected because of %s who could be injured.",
+ "msg.itemhoarder.summary": "The item hoarder contains: %s",
+ "msg.notyetimplemented": "not yet implemented",
+ "msg.backpack.transfer.filled": "Filled the backpack.",
+ "msg.backpack.transfer.cleared": "Cleared the backpack as much as possible.",
+ "msg.backpack.transfer.cancel": "Eigther backpack or chest are not completely empty.",
+ "msg.drill.fuelinfo": "The drill still has a charge for mining %s blocks. It can be charged with canola oil.",
+ "error.unleveling.inventory.full": "There is no free stack in your inventory for the level ups."
+}
diff --git a/src/main/resources/assets/quickiemod/models/block/blocksalpeter.json b/src/main/resources/assets/quickiemod/models/block/blocksalpeter.json
new file mode 100644
index 0000000..d1b361e
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/blocksalpeter.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "quickiemod:block/blocksalpeter"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/block/blocksulphor.json b/src/main/resources/assets/quickiemod/models/block/blocksulphor.json
new file mode 100644
index 0000000..5436927
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/blocksulphor.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "quickiemod:block/blocksulphor"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/block/dirtsalpeter.json b/src/main/resources/assets/quickiemod/models/block/dirtsalpeter.json
new file mode 100644
index 0000000..863507e
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/dirtsalpeter.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "quickiemod:block/dirtsalpeter"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/block/kelpstack.json b/src/main/resources/assets/quickiemod/models/block/kelpstack.json
new file mode 100644
index 0000000..7a09f11
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/kelpstack.json
@@ -0,0 +1,25 @@
+{
+ "parent": "block/block",
+ "textures": {
+ "particle": "quickiemod:block/kelpstack_side",
+ "down": "quickiemod:block/kelpstack_bottom",
+ "up": "quickiemod:block/kelpstack_top",
+ "north": "quickiemod:block/kelpstack_side",
+ "east": "quickiemod:block/kelpstack_side",
+ "south": "quickiemod:block/kelpstack_side",
+ "west": "quickiemod:block/kelpstack_side"
+ },
+ "elements": [
+ { "from": [ 0, 0, 0 ],
+ "to": [ 16, 16, 16 ],
+ "faces": {
+ "down": { "texture": "#down", "cullface": "down" },
+ "up": { "texture": "#up", "cullface": "up" },
+ "north": { "texture": "#north", "cullface": "north" },
+ "south": { "uv": [16, 0, 0, 16], "texture": "#south", "cullface": "south" },
+ "west": { "texture": "#west", "cullface": "west" },
+ "east": { "uv": [16, 0, 0, 16], "texture": "#east", "cullface": "east" }
+ }
+ }
+ ]
+}
diff --git a/src/main/resources/assets/quickiemod/models/block/oredeepslatesulphor.json b/src/main/resources/assets/quickiemod/models/block/oredeepslatesulphor.json
new file mode 100644
index 0000000..c8f4f98
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/oredeepslatesulphor.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "quickiemod:block/oredeepslatesulphor"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/block/orenethersulphor.json b/src/main/resources/assets/quickiemod/models/block/orenethersulphor.json
new file mode 100644
index 0000000..95df982
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/orenethersulphor.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "quickiemod:block/orenethersulphor"
+ }
+}
diff --git a/src/main/resources/assets/quickiemod/models/block/oresalpeter.json b/src/main/resources/assets/quickiemod/models/block/oresalpeter.json
new file mode 100644
index 0000000..67cedfc
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/oresalpeter.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "quickiemod:block/oresalpeter"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/block/oresandsalpeter.json b/src/main/resources/assets/quickiemod/models/block/oresandsalpeter.json
new file mode 100644
index 0000000..0b6e904
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/oresandsalpeter.json
@@ -0,0 +1,7 @@
+{
+ "parent": "block/cube_column",
+ "textures": {
+ "end" : "minecraft:block/sandstone_top",
+ "side": "quickiemod:block/oresandsalpeter"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/block/oresulphor.json b/src/main/resources/assets/quickiemod/models/block/oresulphor.json
new file mode 100644
index 0000000..b247f00
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/oresulphor.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "quickiemod:block/oresulphor"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/block/sandsalpeter.json b/src/main/resources/assets/quickiemod/models/block/sandsalpeter.json
new file mode 100644
index 0000000..1b1260f
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/block/sandsalpeter.json
@@ -0,0 +1,6 @@
+{
+ "parent": "block/cube_all",
+ "textures": {
+ "all": "quickiemod:block/sandsalpeter"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/blocksalpeter.json b/src/main/resources/assets/quickiemod/models/item/blocksalpeter.json
new file mode 100644
index 0000000..9c55fd2
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/blocksalpeter.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/blocksalpeter",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/blocksulphor.json b/src/main/resources/assets/quickiemod/models/item/blocksulphor.json
new file mode 100644
index 0000000..838c873
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/blocksulphor.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/blocksulphor",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/carrotstack.json b/src/main/resources/assets/quickiemod/models/item/carrotstack.json
new file mode 100644
index 0000000..a129d6e
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/carrotstack.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "quickiemod:item/carrotstack"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/dirtsalpeter.json b/src/main/resources/assets/quickiemod/models/item/dirtsalpeter.json
new file mode 100644
index 0000000..e3ca1fd
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/dirtsalpeter.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/dirtsalpeter",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/kelpstack.json b/src/main/resources/assets/quickiemod/models/item/kelpstack.json
new file mode 100644
index 0000000..b3c3481
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/kelpstack.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/kelpstack",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/oredeepslatesulphor.json b/src/main/resources/assets/quickiemod/models/item/oredeepslatesulphor.json
new file mode 100644
index 0000000..bc87ddc
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/oredeepslatesulphor.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/oredeepslatesulphor",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/orenethersulphor.json b/src/main/resources/assets/quickiemod/models/item/orenethersulphor.json
new file mode 100644
index 0000000..f1f86d7
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/orenethersulphor.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/orenethersulphor",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/oresalpeter.json b/src/main/resources/assets/quickiemod/models/item/oresalpeter.json
new file mode 100644
index 0000000..c8e2ce9
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/oresalpeter.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/oresalpeter",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/oresandsalpeter.json b/src/main/resources/assets/quickiemod/models/item/oresandsalpeter.json
new file mode 100644
index 0000000..ce2e6e3
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/oresandsalpeter.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/oresandsalpeter",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/oresulphor.json b/src/main/resources/assets/quickiemod/models/item/oresulphor.json
new file mode 100644
index 0000000..06fdb4c
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/oresulphor.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/oresulphor",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/rotten_flesh_stripes.json b/src/main/resources/assets/quickiemod/models/item/rotten_flesh_stripes.json
new file mode 100644
index 0000000..df2eaa1
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/rotten_flesh_stripes.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/coal",
+ "textures": {
+ "layer0": "quickiemod:item/rotten_flesh_stripes"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/salpeter.json b/src/main/resources/assets/quickiemod/models/item/salpeter.json
new file mode 100644
index 0000000..98f1001
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/salpeter.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/coal",
+ "textures": {
+ "layer0": "quickiemod:item/salpeter"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/sandsalpeter.json b/src/main/resources/assets/quickiemod/models/item/sandsalpeter.json
new file mode 100644
index 0000000..228b847
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/sandsalpeter.json
@@ -0,0 +1,10 @@
+{
+ "parent": "quickiemod:block/sandsalpeter",
+ "display": {
+ "thirdperson": {
+ "rotation": [ 10, -45, 170 ],
+ "translation": [ 0, 1.5, -2.75 ],
+ "scale": [ 0.375, 0.375, 0.375 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/stub.json b/src/main/resources/assets/quickiemod/models/item/stub.json
new file mode 100644
index 0000000..9950e1a
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/stub.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/stick",
+ "textures": {
+ "layer0": "quickiemod:item/stub"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/models/item/sulphor.json b/src/main/resources/assets/quickiemod/models/item/sulphor.json
new file mode 100644
index 0000000..25184d5
--- /dev/null
+++ b/src/main/resources/assets/quickiemod/models/item/sulphor.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/coal",
+ "textures": {
+ "layer0": "quickiemod:item/sulphor"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/quickiemod/textures/block/blocksalpeter.png b/src/main/resources/assets/quickiemod/textures/block/blocksalpeter.png
new file mode 100644
index 0000000..2d5f6f9
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/blocksalpeter.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/blocksulphor.png b/src/main/resources/assets/quickiemod/textures/block/blocksulphor.png
new file mode 100644
index 0000000..ff97253
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/blocksulphor.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/dirtsalpeter.png b/src/main/resources/assets/quickiemod/textures/block/dirtsalpeter.png
new file mode 100644
index 0000000..c4ab012
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/dirtsalpeter.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/kelpstack_bottom.png b/src/main/resources/assets/quickiemod/textures/block/kelpstack_bottom.png
new file mode 100644
index 0000000..d9b32b5
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/kelpstack_bottom.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/kelpstack_side.png b/src/main/resources/assets/quickiemod/textures/block/kelpstack_side.png
new file mode 100644
index 0000000..7e60401
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/kelpstack_side.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/kelpstack_top.png b/src/main/resources/assets/quickiemod/textures/block/kelpstack_top.png
new file mode 100644
index 0000000..cba95e6
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/kelpstack_top.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/oredeepslatesulphor.png b/src/main/resources/assets/quickiemod/textures/block/oredeepslatesulphor.png
new file mode 100644
index 0000000..da2828b
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/oredeepslatesulphor.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/orenethersulphor.png b/src/main/resources/assets/quickiemod/textures/block/orenethersulphor.png
new file mode 100644
index 0000000..a2ea4fc
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/orenethersulphor.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/oresalpeter.png b/src/main/resources/assets/quickiemod/textures/block/oresalpeter.png
new file mode 100644
index 0000000..0c46350
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/oresalpeter.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/oresandsalpeter.png b/src/main/resources/assets/quickiemod/textures/block/oresandsalpeter.png
new file mode 100644
index 0000000..db9326b
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/oresandsalpeter.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/oresulphor.png b/src/main/resources/assets/quickiemod/textures/block/oresulphor.png
new file mode 100644
index 0000000..f408b21
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/oresulphor.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/block/sandsalpeter.png b/src/main/resources/assets/quickiemod/textures/block/sandsalpeter.png
new file mode 100644
index 0000000..0cbd907
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/sandsalpeter.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/item/carrotstack.png b/src/main/resources/assets/quickiemod/textures/item/carrotstack.png
new file mode 100644
index 0000000..6c3737a
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/item/carrotstack.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/item/rotten_flesh_stripes.png b/src/main/resources/assets/quickiemod/textures/item/rotten_flesh_stripes.png
new file mode 100644
index 0000000..229a057
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/item/rotten_flesh_stripes.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/item/salpeter.png b/src/main/resources/assets/quickiemod/textures/item/salpeter.png
new file mode 100644
index 0000000..cd765cc
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/item/salpeter.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/item/stub.png b/src/main/resources/assets/quickiemod/textures/item/stub.png
new file mode 100644
index 0000000..cd67920
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/item/stub.png differ
diff --git a/src/main/resources/assets/quickiemod/textures/item/sulphor.png b/src/main/resources/assets/quickiemod/textures/item/sulphor.png
new file mode 100644
index 0000000..8dc98aa
Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/item/sulphor.png differ
diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json
new file mode 100644
index 0000000..406d026
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json
@@ -0,0 +1,12 @@
+ {
+ "replace": false,
+ "values": [
+ "quickiemod:oresulphor",
+ "quickiemod:oredeepslatesulphor",
+ "quickiemod:orenethersulphor",
+ "quickiemod:oresalpeter",
+ "quickiemod:oresandsalpeter",
+ "quickiemod:sandsalpeter",
+ "quickiemod:dirtsalpeter"
+ ]
+ }
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_brain_coral.json b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_brain_coral.json
new file mode 100644
index 0000000..0b889dd
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_brain_coral.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:blasting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "minecraft:dead_brain_coral_block"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 3,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_bubble_coral.json b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_bubble_coral.json
new file mode 100644
index 0000000..520fe09
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_bubble_coral.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:blasting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "minecraft:dead_bubble_coral_block"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 3,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_fire_coral.json b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_fire_coral.json
new file mode 100644
index 0000000..c73e6bf
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_fire_coral.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:blasting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "minecraft:dead_fire_coral_block"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 3,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_horn_coral.json b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_horn_coral.json
new file mode 100644
index 0000000..387ae41
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_horn_coral.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:blasting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "minecraft:dead_horn_coral_block"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 3,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_tube_coral.json b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_tube_coral.json
new file mode 100644
index 0000000..d960c8e
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/blasting_salpeter_from_tube_coral.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:blasting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "minecraft:dead_tube_coral_block"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 3,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/campfire_dried_kelpblock.json b/src/main/resources/data/quickiemod/recipes/campfire_dried_kelpblock.json
new file mode 100644
index 0000000..7f8a3cf
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/campfire_dried_kelpblock.json
@@ -0,0 +1,11 @@
+{
+ "type": "minecraft:campfire_cooking",
+ "ingredient": {
+ "item": "quickiemod:kelpstack"
+ },
+ "result": {
+ "id": "minecraft:dried_kelp_block"
+ },
+ "experience": 0.9,
+ "cookingtime": 615
+}
diff --git a/src/main/resources/data/quickiemod/recipes/campfire_torch.json b/src/main/resources/data/quickiemod/recipes/campfire_torch.json
new file mode 100644
index 0000000..4921fb6
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/campfire_torch.json
@@ -0,0 +1,11 @@
+{
+ "type": "minecraft:campfire_cooking",
+ "ingredient": {
+ "item": "quickiemod:stub"
+ },
+ "result": {
+ "id":"minecraft:torch"
+ },
+ "experience": 0.1,
+ "cookingtime": 20
+}
diff --git a/src/main/resources/data/quickiemod/recipes/shaped_blocksalpeter.json b/src/main/resources/data/quickiemod/recipes/shaped_blocksalpeter.json
new file mode 100644
index 0000000..6803764
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shaped_blocksalpeter.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "sss",
+ "sss",
+ "sss"
+ ],
+ "key": {
+ "s": {
+ "item": "quickiemod:salpeter"
+ }
+ },
+ "result": {
+ "id": "quickiemod:blocksalpeter",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/shaped_blocksulphor.json b/src/main/resources/data/quickiemod/recipes/shaped_blocksulphor.json
new file mode 100644
index 0000000..5fb16d7
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shaped_blocksulphor.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "sss",
+ "sss",
+ "sss"
+ ],
+ "key": {
+ "s": {
+ "item": "quickiemod:sulphor"
+ }
+ },
+ "result": {
+ "id": "quickiemod:blocksulphor",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/shaped_carrotstack_from_carrots.json b/src/main/resources/data/quickiemod/recipes/shaped_carrotstack_from_carrots.json
new file mode 100644
index 0000000..cb32703
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shaped_carrotstack_from_carrots.json
@@ -0,0 +1,15 @@
+{
+ "type": "crafting_shaped",
+ "pattern": [
+ "cc",
+ "cc"
+ ],
+ "key": {
+ "c": {
+ "item": "minecraft:carrot"
+ }
+ },
+ "result": {
+ "id": "quickiemod:carrotstack"
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/shaped_kelpstack_from_kelp.json b/src/main/resources/data/quickiemod/recipes/shaped_kelpstack_from_kelp.json
new file mode 100644
index 0000000..785c73f
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shaped_kelpstack_from_kelp.json
@@ -0,0 +1,17 @@
+{
+ "type": "minecraft:crafting_shaped",
+ "pattern": [
+ "kkk",
+ "kkk",
+ "kkk"
+ ],
+ "key": {
+ "k": {
+ "item": "minecraft:kelp"
+ }
+ },
+ "result": {
+ "id": "quickiemod:kelpstack",
+ "count": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/shapeless_carrots_from_carrotstack.json b/src/main/resources/data/quickiemod/recipes/shapeless_carrots_from_carrotstack.json
new file mode 100644
index 0000000..0724312
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shapeless_carrots_from_carrotstack.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:crafting_shapeless",
+ "ingredients": [
+ {
+ "item": "quickiemod:carrotstack"
+ }
+ ],
+ "result": {
+ "id": "minecraft:carrot",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/shapeless_salpeter_from_block.json b/src/main/resources/data/quickiemod/recipes/shapeless_salpeter_from_block.json
new file mode 100644
index 0000000..1758e0f
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shapeless_salpeter_from_block.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:crafting_shapeless",
+ "ingredients": [
+ {
+ "item": "quickiemod:blocksalpeter"
+ }
+ ],
+ "result": {
+ "id": "quickiemod:salpeter",
+ "count": 9
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/shapeless_string_from_wool.json b/src/main/resources/data/quickiemod/recipes/shapeless_string_from_wool.json
new file mode 100644
index 0000000..187497d
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shapeless_string_from_wool.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:crafting_shapeless",
+ "ingredients": [
+ {
+ "item": "minecraft:white_wool"
+ }
+ ],
+ "result": {
+ "id": "minecraft:string",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/shapeless_stub.json b/src/main/resources/data/quickiemod/recipes/shapeless_stub.json
new file mode 100644
index 0000000..19325e8
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shapeless_stub.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:crafting_shapeless",
+ "ingredients": [
+ {
+ "item": "minecraft:stick"
+ }
+ ],
+ "result": {
+ "id": "quickiemod:stub",
+ "count": 4
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/shapeless_sulphor_from_block.json b/src/main/resources/data/quickiemod/recipes/shapeless_sulphor_from_block.json
new file mode 100644
index 0000000..449b3db
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/shapeless_sulphor_from_block.json
@@ -0,0 +1,12 @@
+{
+ "type": "minecraft:crafting_shapeless",
+ "ingredients": [
+ {
+ "item": "quickiemod:blocksulphor"
+ }
+ ],
+ "result": {
+ "id": "quickiemod:sulphor",
+ "count": 9
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/recipes/smelting_salpeter1.json b/src/main/resources/data/quickiemod/recipes/smelting_salpeter1.json
new file mode 100644
index 0000000..c17f95f
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/smelting_salpeter1.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:smelting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "quickiemod:dirtsalpeter"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 1,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/smelting_salpeter2.json b/src/main/resources/data/quickiemod/recipes/smelting_salpeter2.json
new file mode 100644
index 0000000..27ccf61
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/smelting_salpeter2.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:smelting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "quickiemod:oresalpeter"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 1,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/smelting_salpeter3.json b/src/main/resources/data/quickiemod/recipes/smelting_salpeter3.json
new file mode 100644
index 0000000..4450012
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/smelting_salpeter3.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:smelting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "quickiemod:oresandsalpeter"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 1,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/smelting_salpeter4.json b/src/main/resources/data/quickiemod/recipes/smelting_salpeter4.json
new file mode 100644
index 0000000..732cb25
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/smelting_salpeter4.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:smelting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "quickiemod:sandsalpeter"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:salpeter"
+ },
+ "count": 1,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/smelting_sulfur1.json b/src/main/resources/data/quickiemod/recipes/smelting_sulfur1.json
new file mode 100644
index 0000000..8b658df
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/smelting_sulfur1.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:smelting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "quickiemod:orenethersulphor"
+ }
+ ],
+ "result": {
+ "id":"quickiemod:sulphor"
+ },
+ "count": 1,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/smelting_sulfur2.json b/src/main/resources/data/quickiemod/recipes/smelting_sulfur2.json
new file mode 100644
index 0000000..41bd30a
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/smelting_sulfur2.json
@@ -0,0 +1,15 @@
+{
+ "type": "minecraft:smelting",
+ "group": "ores",
+ "ingredient": [
+ {
+ "item": "quickiemod:oresulphor"
+ }
+ ],
+ "result": {
+ "id": "quickiemod:sulphor"
+ },
+ "count": 1,
+ "experience": 0.5,
+ "cookingtime": 200
+}
diff --git a/src/main/resources/data/quickiemod/recipes/smoking_dried_kelpblock.json b/src/main/resources/data/quickiemod/recipes/smoking_dried_kelpblock.json
new file mode 100644
index 0000000..4424036
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/smoking_dried_kelpblock.json
@@ -0,0 +1,11 @@
+{
+ "type": "minecraft:smoking",
+ "ingredient": {
+ "item": "quickiemod:kelpstack"
+ },
+ "result": {
+ "id": "minecraft:dried_kelp_block"
+ },
+ "experience": 0,
+ "cookingtime": 100
+}
diff --git a/src/main/resources/data/quickiemod/recipes/smoking_leather_from_flesh_stripes.json b/src/main/resources/data/quickiemod/recipes/smoking_leather_from_flesh_stripes.json
new file mode 100644
index 0000000..41aea97
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/smoking_leather_from_flesh_stripes.json
@@ -0,0 +1,11 @@
+{
+ "type": "minecraft:smoking",
+ "ingredient": {
+ "item": "quickiemod:rotten_flesh_stripes"
+ },
+ "result": {
+ "id":"minecraft:leather"
+ },
+ "experience": 0,
+ "cookingtime": 100
+}
diff --git a/src/main/resources/data/quickiemod/recipes/stonecutting_flesh_stripes.json b/src/main/resources/data/quickiemod/recipes/stonecutting_flesh_stripes.json
new file mode 100644
index 0000000..636154a
--- /dev/null
+++ b/src/main/resources/data/quickiemod/recipes/stonecutting_flesh_stripes.json
@@ -0,0 +1,10 @@
+{
+ "type": "minecraft:stonecutting",
+ "ingredient": {
+ "item": "minecraft:rotten_flesh"
+ },
+ "result": {
+ "id": "quickiemod:rotten_flesh_stripes"
+ },
+ "count": 2
+}
diff --git a/src/main/resources/data/quickiemod/tag/items/ores/oresalpeter.json b/src/main/resources/data/quickiemod/tag/items/ores/oresalpeter.json
new file mode 100644
index 0000000..ca98968
--- /dev/null
+++ b/src/main/resources/data/quickiemod/tag/items/ores/oresalpeter.json
@@ -0,0 +1,6 @@
+{
+ "replace": false,
+ "values": [
+ "quickiemod:oresalpeter"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/tag/items/ores/oresulphor.json b/src/main/resources/data/quickiemod/tag/items/ores/oresulphor.json
new file mode 100644
index 0000000..7345052
--- /dev/null
+++ b/src/main/resources/data/quickiemod/tag/items/ores/oresulphor.json
@@ -0,0 +1,6 @@
+{
+ "replace": false,
+ "values": [
+ "quickiemod:oresulphor"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/configured_feature/blocksulphor.json b/src/main/resources/data/quickiemod/worldgen/configured_feature/blocksulphor.json
new file mode 100644
index 0000000..a736aeb
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/configured_feature/blocksulphor.json
@@ -0,0 +1,18 @@
+{
+ "type": "minecraft:ore",
+ "config": {
+ "discard_chance_on_air_exposure": 0.0,
+ "size": 3,
+ "targets": [
+ {
+ "state": {
+ "Name": "quickiemod:blocksulphor"
+ },
+ "target": {
+ "predicate_type": "minecraft:block_match",
+ "block": "minecraft:netherrack"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/configured_feature/dirtsalpeter.json b/src/main/resources/data/quickiemod/worldgen/configured_feature/dirtsalpeter.json
new file mode 100644
index 0000000..f48442f
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/configured_feature/dirtsalpeter.json
@@ -0,0 +1,18 @@
+{
+ "type": "minecraft:ore",
+ "config": {
+ "discard_chance_on_air_exposure": 0.0,
+ "size": 4,
+ "targets": [
+ {
+ "state": {
+ "Name": "quickiemod:dirtsalpeter"
+ },
+ "target": {
+ "predicate_type": "minecraft:block_match",
+ "block": "minecraft:dirt"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/configured_feature/oredeepslatesulphor.json b/src/main/resources/data/quickiemod/worldgen/configured_feature/oredeepslatesulphor.json
new file mode 100644
index 0000000..906a1e4
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/configured_feature/oredeepslatesulphor.json
@@ -0,0 +1,18 @@
+{
+ "type": "minecraft:ore",
+ "config": {
+ "discard_chance_on_air_exposure": 0.0,
+ "size": 20,
+ "targets": [
+ {
+ "state": {
+ "Name": "quickiemod:oredeepslatesulphor"
+ },
+ "target": {
+ "predicate_type": "minecraft:tag_match",
+ "tag": "minecraft:deepslate_ore_replaceables"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/configured_feature/orenethersulphor.json b/src/main/resources/data/quickiemod/worldgen/configured_feature/orenethersulphor.json
new file mode 100644
index 0000000..98720cd
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/configured_feature/orenethersulphor.json
@@ -0,0 +1,18 @@
+{
+ "type": "minecraft:ore",
+ "config": {
+ "discard_chance_on_air_exposure": 0.0,
+ "size": 20,
+ "targets": [
+ {
+ "state": {
+ "Name": "quickiemod:orenethersulphor"
+ },
+ "target": {
+ "predicate_type": "minecraft:block_match",
+ "block": "minecraft:netherrack"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/configured_feature/oresalpeter.json b/src/main/resources/data/quickiemod/worldgen/configured_feature/oresalpeter.json
new file mode 100644
index 0000000..0c2fe76
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/configured_feature/oresalpeter.json
@@ -0,0 +1,18 @@
+{
+ "type": "minecraft:ore",
+ "config": {
+ "discard_chance_on_air_exposure": 0.0,
+ "size": 12,
+ "targets": [
+ {
+ "state": {
+ "Name": "quickiemod:oresalpeter"
+ },
+ "target": {
+ "predicate_type": "minecraft:tag_match",
+ "tag": "minecraft:stone_ore_replaceables"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/configured_feature/oresandsalpeter.json b/src/main/resources/data/quickiemod/worldgen/configured_feature/oresandsalpeter.json
new file mode 100644
index 0000000..b52da16
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/configured_feature/oresandsalpeter.json
@@ -0,0 +1,18 @@
+{
+ "type": "minecraft:ore",
+ "config": {
+ "discard_chance_on_air_exposure": 0.0,
+ "size": 6,
+ "targets": [
+ {
+ "state": {
+ "Name": "quickiemod:oresandsalpeter"
+ },
+ "target": {
+ "predicate_type": "minecraft:block_match",
+ "block": "minecraft:sandstone"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/configured_feature/oresulphor.json b/src/main/resources/data/quickiemod/worldgen/configured_feature/oresulphor.json
new file mode 100644
index 0000000..fa022cd
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/configured_feature/oresulphor.json
@@ -0,0 +1,18 @@
+{
+ "type": "minecraft:ore",
+ "config": {
+ "discard_chance_on_air_exposure": 0.0,
+ "size": 10,
+ "targets": [
+ {
+ "state": {
+ "Name": "quickiemod:oresulphor"
+ },
+ "target": {
+ "predicate_type": "minecraft:tag_match",
+ "tag": "minecraft:stone_ore_replaceables"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/configured_feature/sandsalpeter.json b/src/main/resources/data/quickiemod/worldgen/configured_feature/sandsalpeter.json
new file mode 100644
index 0000000..f539992
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/configured_feature/sandsalpeter.json
@@ -0,0 +1,18 @@
+{
+ "type": "minecraft:ore",
+ "config": {
+ "discard_chance_on_air_exposure": 0.0,
+ "size": 8,
+ "targets": [
+ {
+ "state": {
+ "Name": "quickiemod:sandsalpeter"
+ },
+ "target": {
+ "predicate_type": "minecraft:block_match",
+ "block": "minecraft:sand"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/placed_feature/blocksulphor.json b/src/main/resources/data/quickiemod/worldgen/placed_feature/blocksulphor.json
new file mode 100644
index 0000000..f60d526
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/placed_feature/blocksulphor.json
@@ -0,0 +1,24 @@
+{
+ "feature": "quickiemod:blocksulphor",
+ "placement": [
+ {
+ "type": "minecraft:count",
+ "count": 4
+ },
+ {
+ "type": "minecraft:in_square"
+ },
+ {
+ "type": "minecraft:height_range",
+ "height": {
+ "type": "minecraft:trapezoid",
+ "max_inclusive": {
+ "absolute": 125
+ },
+ "min_inclusive": {
+ "absolute": 5
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/placed_feature/dirtsalpeter.json b/src/main/resources/data/quickiemod/worldgen/placed_feature/dirtsalpeter.json
new file mode 100644
index 0000000..7e9cc41
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/placed_feature/dirtsalpeter.json
@@ -0,0 +1,24 @@
+{
+ "feature": "quickiemod:dirtsalpeter",
+ "placement": [
+ {
+ "type": "minecraft:count",
+ "count": 5
+ },
+ {
+ "type": "minecraft:in_square"
+ },
+ {
+ "type": "minecraft:height_range",
+ "height": {
+ "type": "minecraft:trapezoid",
+ "max_inclusive": {
+ "absolute": 125
+ },
+ "min_inclusive": {
+ "absolute": 16
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/placed_feature/oredeepslatesulphor.json b/src/main/resources/data/quickiemod/worldgen/placed_feature/oredeepslatesulphor.json
new file mode 100644
index 0000000..d05d339
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/placed_feature/oredeepslatesulphor.json
@@ -0,0 +1,24 @@
+{
+ "feature": "quickiemod:oredeepslatesulphor",
+ "placement": [
+ {
+ "type": "minecraft:count",
+ "count": 9
+ },
+ {
+ "type": "minecraft:in_square"
+ },
+ {
+ "type": "minecraft:height_range",
+ "height": {
+ "type": "minecraft:trapezoid",
+ "max_inclusive": {
+ "absolute": 0
+ },
+ "min_inclusive": {
+ "absolute": -125
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/placed_feature/orenethersulphor.json b/src/main/resources/data/quickiemod/worldgen/placed_feature/orenethersulphor.json
new file mode 100644
index 0000000..9beffb3
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/placed_feature/orenethersulphor.json
@@ -0,0 +1,24 @@
+{
+ "feature": "quickiemod:orenethersulphor",
+ "placement": [
+ {
+ "type": "minecraft:count",
+ "count": 12
+ },
+ {
+ "type": "minecraft:in_square"
+ },
+ {
+ "type": "minecraft:height_range",
+ "height": {
+ "type": "minecraft:trapezoid",
+ "max_inclusive": {
+ "absolute": 125
+ },
+ "min_inclusive": {
+ "absolute": 5
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/placed_feature/oresalpeter.json b/src/main/resources/data/quickiemod/worldgen/placed_feature/oresalpeter.json
new file mode 100644
index 0000000..7c5f6e6
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/placed_feature/oresalpeter.json
@@ -0,0 +1,24 @@
+{
+ "feature": "quickiemod:oresalpeter",
+ "placement": [
+ {
+ "type": "minecraft:count",
+ "count": 10
+ },
+ {
+ "type": "minecraft:in_square"
+ },
+ {
+ "type": "minecraft:height_range",
+ "height": {
+ "type": "minecraft:trapezoid",
+ "max_inclusive": {
+ "absolute": 125
+ },
+ "min_inclusive": {
+ "absolute": 0
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/placed_feature/oresandsalpeter.json b/src/main/resources/data/quickiemod/worldgen/placed_feature/oresandsalpeter.json
new file mode 100644
index 0000000..0c62c27
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/placed_feature/oresandsalpeter.json
@@ -0,0 +1,24 @@
+{
+ "feature": "quickiemod:oresandsalpeter",
+ "placement": [
+ {
+ "type": "minecraft:count",
+ "count": 15
+ },
+ {
+ "type": "minecraft:in_square"
+ },
+ {
+ "type": "minecraft:height_range",
+ "height": {
+ "type": "minecraft:trapezoid",
+ "max_inclusive": {
+ "absolute": 125
+ },
+ "min_inclusive": {
+ "absolute": 32
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/placed_feature/oresulphor.json b/src/main/resources/data/quickiemod/worldgen/placed_feature/oresulphor.json
new file mode 100644
index 0000000..b6a3f9b
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/placed_feature/oresulphor.json
@@ -0,0 +1,24 @@
+{
+ "feature": "quickiemod:oresulphor",
+ "placement": [
+ {
+ "type": "minecraft:count",
+ "count": 9
+ },
+ {
+ "type": "minecraft:in_square"
+ },
+ {
+ "type": "minecraft:height_range",
+ "height": {
+ "type": "minecraft:trapezoid",
+ "max_inclusive": {
+ "absolute": 64
+ },
+ "min_inclusive": {
+ "absolute": 0
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/quickiemod/worldgen/placed_feature/sandsalpeter.json b/src/main/resources/data/quickiemod/worldgen/placed_feature/sandsalpeter.json
new file mode 100644
index 0000000..3a95911
--- /dev/null
+++ b/src/main/resources/data/quickiemod/worldgen/placed_feature/sandsalpeter.json
@@ -0,0 +1,24 @@
+{
+ "feature": "quickiemod:sandsalpeter",
+ "placement": [
+ {
+ "type": "minecraft:count",
+ "count": 10
+ },
+ {
+ "type": "minecraft:in_square"
+ },
+ {
+ "type": "minecraft:height_range",
+ "height": {
+ "type": "minecraft:trapezoid",
+ "max_inclusive": {
+ "absolute": 125
+ },
+ "min_inclusive": {
+ "absolute": 32
+ }
+ }
+ }
+ ]
+}
\ 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 0000000..42f9ac7
--- /dev/null
+++ b/src/main/resources/fabric.mod.json
@@ -0,0 +1,37 @@
+{
+ "schemaVersion": 1,
+ "id": "quickiemod",
+ "version": "${version}",
+ "name": "QuickieMod",
+ "description": "Speed up daily work in Minecraft.",
+ "authors": [
+ "jottyfan"
+ ],
+ "contact": {
+ "homepage": "https://gitlab.com/jottyfan/quickiemod/",
+ "sources": "https://gitlab.com/jottyfan/quickiemod/"
+ },
+ "license": "see license file",
+ "icon": "assets/quickiemod/icon.png",
+ "environment": "*",
+ "entrypoints": {
+ "main": [
+ "de.jottyfan.quickiemod.QuickieMod"
+ ],
+ "fabric-datagen": [
+ "de.jottyfan.quickiemod.QuickieModDataGenerator"
+ ],
+ "client": [
+ "de.jottyfan.quickiemod.QuickieModClient"
+ ]
+ },
+ "depends": {
+ "fabricloader": ">=0.15.11",
+ "minecraft": "~1.20.6",
+ "java": ">=21",
+ "fabric-api": "*"
+ },
+ "suggests": {
+ "flamingo": "*"
+ }
+}