welcome to the world of javasound

This commit is contained in:
a dinosaur 2023-07-03 15:45:00 +10:00
commit c84ba2549d
31 changed files with 2748 additions and 0 deletions

42
.gitignore vendored Normal file
View File

@ -0,0 +1,42 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

39
build.gradle.kts Normal file
View File

@ -0,0 +1,39 @@
plugins {
`kotlin-dsl`
kotlin("plugin.serialization") version "1.5.31"
}
group = "gay.pizza.foundation"
version = "0.1.0-SNAPSHOT"
repositories {
gradlePluginPortal()
}
dependencies {
implementation("org.jetbrains.kotlinx", "kotlinx-serialization-json", "1.3.3")
testImplementation(kotlin("test"))
}
tasks.test {
useJUnitPlatform()
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
tasks.compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
gradlePlugin {
plugins {
create(name) {
id = "${group}.${name}"
implementationClass = "${id}.ResourcesGeneratorPlugin"
}
}
}

0
gradle.properties Normal file
View File

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

234
gradlew vendored Executable file
View File

@ -0,0 +1,234 @@
#!/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/master/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
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&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
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
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
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# 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" "$@"

89
gradlew.bat vendored Normal file
View File

@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

3
settings.gradle.kts Normal file
View File

@ -0,0 +1,3 @@
rootProject.name = "drywall"

View File

@ -0,0 +1,171 @@
package gay.pizza.foundation.drywall
import gay.pizza.foundation.drywall.enums.Lang
import gay.pizza.foundation.drywall.settings.*
import gay.pizza.foundation.drywall.util.ResourcePath
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.encodeToStream
import java.io.FileOutputStream
import java.nio.file.Files
import java.nio.file.Path
import kotlin.io.path.Path
class ResourceWriter(private val modId: String)
{
@Serializable
data class Tag(val replace: Boolean, val values: Collection<String>)
private val langs: MutableMap<String, MutableMap<String, String>> = mutableMapOf()
private val mineables: MutableMap<String, MutableList<String>> = mutableMapOf()
private val needsTool: MutableMap<String, MutableList<String>> = mutableMapOf()
private val blockStates: MutableMap<String, BlockStateSettings.BlockState> = mutableMapOf()
private val blockModels: MutableMap<String, ModelSettings.Model> = mutableMapOf()
private val itemModels: MutableMap<String, ModelSettings.Model> = mutableMapOf()
private val lootTables: MutableMap<String, LootTableSettings.LootTable> = mutableMapOf()
private val recipes: MutableMap<String, AbstractRecipeSettings.Recipe> = mutableMapOf()
private var defaultBlockState: BlockStateSettings? = null
private var defaultBlockModel: ModelSettings? = null
private var defaultItemModel: ModelSettings? = null
private var defaultLootTable: LootTableSettings? = null
private var fabricMod: FabricModSettings.FabricMod? = null
private val mixins: MutableMap<String, MixinSettings.Mixins> = mutableMapOf()
fun defaultItemModel(settings: ModelSettings.() -> Unit)
{
defaultItemModel(ModelSettings().apply(settings))
}
fun defaultItemModel(settings: ModelSettings)
{
this.defaultItemModel = settings
}
fun defaultLootTable(settings: LootTableSettings.() -> Unit)
{
defaultLootTable(LootTableSettings().apply(settings))
}
fun defaultLootTable(settings: LootTableSettings)
{
this.defaultLootTable = settings
}
fun defaultBlockState(settings: BlockStateSettings.() -> Unit)
{
defaultBlockState(BlockStateSettings().apply(settings))
}
fun defaultBlockState(settings: BlockStateSettings)
{
this.defaultBlockState = settings
}
fun text(key: String, string: String, lang: Lang = Lang.US_ENGLISH)
{
langs.getOrPut(lang.toString()) { mutableMapOf() }[key] = string
}
fun itemGroupName(name: String, lang: Lang = Lang.US_ENGLISH)
{
text("itemGroup.$modId.$modId", name, lang)
}
fun block(id: String, settings: BlockSettings.() -> Unit)
{
block(BlockSettings(id).apply(settings))
}
fun block(settings: BlockSettings)
{
val blockId = settings.id
val jsonName = "${blockId}.json"
val resPath = ResourcePath.PATH_BLOCK.resolve(modId, blockId)
settings.displayNames.forEach { text("block.$modId.${blockId}", it.value, it.key) }
settings.tool?.let { mineables.getOrPut(it) { mutableListOf() }.add(resPath) }
settings.level?.let { needsTool.getOrPut("needs_${it}_tool") { mutableListOf() }.add(resPath) }
(settings.blockState ?: defaultBlockState)?.let { blockStates[jsonName] = it.serialisable(modId, blockId) }
(settings.model ?: defaultBlockModel)?.let { blockModels[jsonName] = it.serialisable(modId, blockId) }
(settings.itemModel ?: defaultItemModel)?.let { itemModels[jsonName] = it.serialisable(modId, blockId) }
(settings.lootTable ?: defaultLootTable)?.let { lootTables[jsonName] = it.serialisable(modId, blockId) }
settings.recipes.forEachIndexed { idx, it ->
val recipeName = if (idx > 0)
"${blockId}_${(idx).toString(16)}.json"
else jsonName
recipes[recipeName] = it.serialisable(modId, blockId)
}
}
fun fabricMod(settings: FabricModSettings.() -> Unit)
{
fabricMod(FabricModSettings().apply(settings))
}
fun fabricMod(settings: FabricModSettings)
{
fabricMod = settings.serialisable(modId)
settings.mixins.forEach {
if (it.value.packagePath != null)
mixins.put(it.key ?: "$modId.mixins.json", it.value.serialisable())
}
}
fun writeAll(dirResources: Path)
{
val dirAssets = dirResources.resolve(Path("assets", modId))
val dirBlockStates = dirAssets.resolve("blockstates")
val dirLang = dirAssets.resolve("lang")
val dirBlockModel = dirAssets.resolve(Path("models", "block"))
val dirItemModel = dirAssets.resolve(Path("models", "item"))
var dirModData = dirResources.resolve(Path("data", modId))
val dirLootBlocks = dirModData.resolve(Path("loot_tables", "blocks"))
var dirRecipes = dirModData.resolve(Path("recipes"))
val dirTagBlocks = dirResources.resolve(Path("data", "minecraft", "tags", "blocks"))
val dirMcMineable = dirTagBlocks.resolve("mineable")
blockStates.forEach { encodeWrite(it.value, dirBlockStates.resolve(it.key)) }
blockModels.forEach { encodeWrite(it.value, dirBlockModel.resolve(it.key)) }
itemModels.forEach { encodeWrite(it.value, dirItemModel.resolve(it.key)) }
lootTables.forEach { encodeWrite(it.value, dirLootBlocks.resolve(it.key)) }
recipes.forEach { encodeWrite(it.value, dirRecipes.resolve(it.key)) }
langs.forEach { encodeWrite(it.value, dirLang.resolve("${it.key}.json")) }
mineables.forEach { encodeWrite(Tag(false, it.value), dirMcMineable.resolve("${it.key}.json")) }
needsTool.forEach { encodeWrite(Tag(false, it.value), dirTagBlocks.resolve("${it.key}.json")) }
fabricMod.let { encodeWrite(it, dirResources.resolve("fabric.mod.json")) }
mixins.forEach { encodeWrite(it.value, dirResources.resolve(it.key)) }
}
@OptIn(ExperimentalSerializationApi::class)
private val json = Json {
encodeDefaults = true
explicitNulls = false
prettyPrint = true
prettyPrintIndent = " "
}
private fun openFile(filePath: Path): FileOutputStream
{
val dirPath = filePath.parent
if (!dirPath.toFile().isDirectory)
Files.createDirectories(dirPath)
return FileOutputStream(filePath.toFile())
}
@OptIn(ExperimentalSerializationApi::class)
@SuppressWarnings("deprecation")
private inline fun <reified T> encodeWrite(obj: T, fileName: Path)
{
val out = openFile(fileName)
json.encodeToStream(obj, out)
out.write('\n'.code)
out.flush()
}
}

View File

@ -0,0 +1,24 @@
package gay.pizza.foundation.drywall
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.TaskAction
import java.io.File
open class ResourcesGenerator : DefaultTask()
{
@get:Input
var modId: String = ""
@get:Input
var configuration: ResourceWriter.() -> Unit = {}
@get:InputFile
var outputDirectory: File = File("")
@TaskAction
fun generateResources()
{
val writer = ResourceWriter(modId).apply(configuration)
writer.writeAll(outputDirectory.toPath())
}
}

View File

@ -0,0 +1,16 @@
package gay.pizza.foundation.drywall
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.create
class ResourcesGeneratorPlugin: Plugin<Project>
{
override fun apply(target: Project)
{
val genResources = target.tasks.create<ResourcesGenerator>("genResources")
target.afterEvaluate {
project.tasks.getByName("jar").dependsOn(genResources)
}
}
}

View File

@ -0,0 +1,910 @@
package gay.pizza.foundation.drywall.enums
import gay.pizza.foundation.drywall.util.ResourcePath
enum class Blocks(private val id: String)
{
ACACIA_BUTTON("acacia_button"),
ACACIA_DOOR("acacia_door"),
ACACIA_FENCE("acacia_fence"),
ACACIA_FENCE_GATE("acacia_fence_gate"),
ACACIA_LEAVES("acacia_leaves"),
ACACIA_LOG("acacia_log"),
ACACIA_PLANKS("acacia_planks"),
ACACIA_PRESSURE_PLATE("acacia_pressure_plate"),
ACACIA_SAPLING("acacia_sapling"),
ACACIA_SIGN("acacia_sign"),
ACACIA_SLAB("acacia_slab"),
ACACIA_STAIRS("acacia_stairs"),
ACACIA_TRAPDOOR("acacia_trapdoor"),
ACACIA_WALL_SIGN("acacia_wall_sign"),
ACACIA_WOOD("acacia_wood"),
ACTIVATOR_RAIL("activator_rail"),
AIR("air"),
ALLIUM("allium"),
AMETHYST_BLOCK("amethyst_block"),
AMETHYST_CLUSTER("amethyst_cluster"),
ANCIENT_DEBRIS("ancient_debris"),
ANDESITE("andesite"),
ANDESITE_SLAB("andesite_slab"),
ANDESITE_STAIRS("andesite_stairs"),
ANDESITE_WALL("andesite_wall"),
ANVIL("anvil"),
ATTACHED_MELON_STEM("attached_melon_stem"),
ATTACHED_PUMPKIN_STEM("attached_pumpkin_stem"),
AZALEA("azalea"),
AZALEA_LEAVES("azalea_leaves"),
AZURE_BLUET("azure_bluet"),
BAMBOO("bamboo"),
BAMBOO_SAPLING("bamboo_sapling"),
BARREL("barrel"),
BARRIER("barrier"),
BASALT("basalt"),
BEACON("beacon"),
BEDROCK("bedrock"),
BEE_NEST("bee_nest"),
BEEHIVE("beehive"),
BEETROOTS("beetroots"),
BELL("bell"),
BIG_DRIPLEAF("big_dripleaf"),
BIG_DRIPLEAF_STEM("big_dripleaf_stem"),
BIRCH_BUTTON("birch_button"),
BIRCH_DOOR("birch_door"),
BIRCH_FENCE("birch_fence"),
BIRCH_FENCE_GATE("birch_fence_gate"),
BIRCH_LEAVES("birch_leaves"),
BIRCH_LOG("birch_log"),
BIRCH_PLANKS("birch_planks"),
BIRCH_PRESSURE_PLATE("birch_pressure_plate"),
BIRCH_SAPLING("birch_sapling"),
BIRCH_SIGN("birch_sign"),
BIRCH_SLAB("birch_slab"),
BIRCH_STAIRS("birch_stairs"),
BIRCH_TRAPDOOR("birch_trapdoor"),
BIRCH_WALL_SIGN("birch_wall_sign"),
BIRCH_WOOD("birch_wood"),
BLACK_BANNER("black_banner"),
BLACK_BED("black_bed"),
BLACK_CANDLE("black_candle"),
BLACK_CANDLE_CAKE("black_candle_cake"),
BLACK_CARPET("black_carpet"),
BLACK_CONCRETE("black_concrete"),
BLACK_CONCRETE_POWDER("black_concrete_powder"),
BLACK_GLAZED_TERRACOTTA("black_glazed_terracotta"),
BLACK_SHULKER_BOX("black_shulker_box"),
BLACK_STAINED_GLASS("black_stained_glass"),
BLACK_STAINED_GLASS_PANE("black_stained_glass_pane"),
BLACK_TERRACOTTA("black_terracotta"),
BLACK_WALL_BANNER("black_wall_banner"),
BLACK_WOOL("black_wool"),
BLACKSTONE("blackstone"),
BLACKSTONE_SLAB("blackstone_slab"),
BLACKSTONE_STAIRS("blackstone_stairs"),
BLACKSTONE_WALL("blackstone_wall"),
BLAST_FURNACE("blast_furnace"),
BLUE_BANNER("blue_banner"),
BLUE_BED("blue_bed"),
BLUE_CANDLE("blue_candle"),
BLUE_CANDLE_CAKE("blue_candle_cake"),
BLUE_CARPET("blue_carpet"),
BLUE_CONCRETE("blue_concrete"),
BLUE_CONCRETE_POWDER("blue_concrete_powder"),
BLUE_GLAZED_TERRACOTTA("blue_glazed_terracotta"),
BLUE_ICE("blue_ice"),
BLUE_ORCHID("blue_orchid"),
BLUE_SHULKER_BOX("blue_shulker_box"),
BLUE_STAINED_GLASS("blue_stained_glass"),
BLUE_STAINED_GLASS_PANE("blue_stained_glass_pane"),
BLUE_TERRACOTTA("blue_terracotta"),
BLUE_WALL_BANNER("blue_wall_banner"),
BLUE_WOOL("blue_wool"),
BONE_BLOCK("bone_block"),
BOOKSHELF("bookshelf"),
BRAIN_CORAL("brain_coral"),
BRAIN_CORAL_BLOCK("brain_coral_block"),
BRAIN_CORAL_FAN("brain_coral_fan"),
BRAIN_CORAL_WALL_FAN("brain_coral_wall_fan"),
BREWING_STAND("brewing_stand"),
BRICK_SLAB("brick_slab"),
BRICK_STAIRS("brick_stairs"),
BRICK_WALL("brick_wall"),
BRICKS("bricks"),
BROWN_BANNER("brown_banner"),
BROWN_BED("brown_bed"),
BROWN_CANDLE("brown_candle"),
BROWN_CANDLE_CAKE("brown_candle_cake"),
BROWN_CARPET("brown_carpet"),
BROWN_CONCRETE("brown_concrete"),
BROWN_CONCRETE_POWDER("brown_concrete_powder"),
BROWN_GLAZED_TERRACOTTA("brown_glazed_terracotta"),
BROWN_MUSHROOM("brown_mushroom"),
BROWN_MUSHROOM_BLOCK("brown_mushroom_block"),
BROWN_SHULKER_BOX("brown_shulker_box"),
BROWN_STAINED_GLASS("brown_stained_glass"),
BROWN_STAINED_GLASS_PANE("brown_stained_glass_pane"),
BROWN_TERRACOTTA("brown_terracotta"),
BROWN_WALL_BANNER("brown_wall_banner"),
BROWN_WOOL("brown_wool"),
BUBBLE_COLUMN("bubble_column"),
BUBBLE_CORAL("bubble_coral"),
BUBBLE_CORAL_BLOCK("bubble_coral_block"),
BUBBLE_CORAL_FAN("bubble_coral_fan"),
BUBBLE_CORAL_WALL_FAN("bubble_coral_wall_fan"),
BUDDING_AMETHYST("budding_amethyst"),
CACTUS("cactus"),
CAKE("cake"),
CALCITE("calcite"),
CAMPFIRE("campfire"),
CANDLE("candle"),
CANDLE_CAKE("candle_cake"),
CARROTS("carrots"),
CARTOGRAPHY_TABLE("cartography_table"),
CARVED_PUMPKIN("carved_pumpkin"),
CAULDRON("cauldron"),
CAVE_AIR("cave_air"),
CAVE_VINES("cave_vines"),
CAVE_VINES_PLANT("cave_vines_plant"),
CHAIN("chain"),
CHAIN_COMMAND_BLOCK("chain_command_block"),
CHEST("chest"),
CHIPPED_ANVIL("chipped_anvil"),
CHISELED_DEEPSLATE("chiseled_deepslate"),
CHISELED_NETHER_BRICKS("chiseled_nether_bricks"),
CHISELED_POLISHED_BLACKSTONE("chiseled_polished_blackstone"),
CHISELED_QUARTZ_BLOCK("chiseled_quartz_block"),
CHISELED_RED_SANDSTONE("chiseled_red_sandstone"),
CHISELED_SANDSTONE("chiseled_sandstone"),
CHISELED_STONE_BRICKS("chiseled_stone_bricks"),
CHORUS_FLOWER("chorus_flower"),
CHORUS_PLANT("chorus_plant"),
CLAY("clay"),
COAL_BLOCK("coal_block"),
COAL_ORE("coal_ore"),
COARSE_DIRT("coarse_dirt"),
COBBLED_DEEPSLATE("cobbled_deepslate"),
COBBLED_DEEPSLATE_SLAB("cobbled_deepslate_slab"),
COBBLED_DEEPSLATE_STAIRS("cobbled_deepslate_stairs"),
COBBLED_DEEPSLATE_WALL("cobbled_deepslate_wall"),
COBBLESTONE("cobblestone"),
COBBLESTONE_SLAB("cobblestone_slab"),
COBBLESTONE_STAIRS("cobblestone_stairs"),
COBBLESTONE_WALL("cobblestone_wall"),
COBWEB("cobweb"),
COCOA("cocoa"),
COMMAND_BLOCK("command_block"),
COMPARATOR("comparator"),
COMPOSTER("composter"),
CONDUIT("conduit"),
COPPER_BLOCK("copper_block"),
COPPER_ORE("copper_ore"),
CORNFLOWER("cornflower"),
CRACKED_DEEPSLATE_BRICKS("cracked_deepslate_bricks"),
CRACKED_DEEPSLATE_TILES("cracked_deepslate_tiles"),
CRACKED_NETHER_BRICKS("cracked_nether_bricks"),
CRACKED_POLISHED_BLACKSTONE_BRICKS("cracked_polished_blackstone_bricks"),
CRACKED_STONE_BRICKS("cracked_stone_bricks"),
CRAFTING_TABLE("crafting_table"),
CREEPER_HEAD("creeper_head"),
CREEPER_WALL_HEAD("creeper_wall_head"),
CRIMSON_BUTTON("crimson_button"),
CRIMSON_DOOR("crimson_door"),
CRIMSON_FENCE("crimson_fence"),
CRIMSON_FENCE_GATE("crimson_fence_gate"),
CRIMSON_FUNGUS("crimson_fungus"),
CRIMSON_HYPHAE("crimson_hyphae"),
CRIMSON_NYLIUM("crimson_nylium"),
CRIMSON_PLANKS("crimson_planks"),
CRIMSON_PRESSURE_PLATE("crimson_pressure_plate"),
CRIMSON_ROOTS("crimson_roots"),
CRIMSON_SIGN("crimson_sign"),
CRIMSON_SLAB("crimson_slab"),
CRIMSON_STAIRS("crimson_stairs"),
CRIMSON_STEM("crimson_stem"),
CRIMSON_TRAPDOOR("crimson_trapdoor"),
CRIMSON_WALL_SIGN("crimson_wall_sign"),
CRYING_OBSIDIAN("crying_obsidian"),
CUT_COPPER("cut_copper"),
CUT_COPPER_SLAB("cut_copper_slab"),
CUT_COPPER_STAIRS("cut_copper_stairs"),
CUT_RED_SANDSTONE("cut_red_sandstone"),
CUT_RED_SANDSTONE_SLAB("cut_red_sandstone_slab"),
CUT_SANDSTONE("cut_sandstone"),
CUT_SANDSTONE_SLAB("cut_sandstone_slab"),
CYAN_BANNER("cyan_banner"),
CYAN_BED("cyan_bed"),
CYAN_CANDLE("cyan_candle"),
CYAN_CANDLE_CAKE("cyan_candle_cake"),
CYAN_CARPET("cyan_carpet"),
CYAN_CONCRETE("cyan_concrete"),
CYAN_CONCRETE_POWDER("cyan_concrete_powder"),
CYAN_GLAZED_TERRACOTTA("cyan_glazed_terracotta"),
CYAN_SHULKER_BOX("cyan_shulker_box"),
CYAN_STAINED_GLASS("cyan_stained_glass"),
CYAN_STAINED_GLASS_PANE("cyan_stained_glass_pane"),
CYAN_TERRACOTTA("cyan_terracotta"),
CYAN_WALL_BANNER("cyan_wall_banner"),
CYAN_WOOL("cyan_wool"),
DAMAGED_ANVIL("damaged_anvil"),
DANDELION("dandelion"),
DARK_OAK_BUTTON("dark_oak_button"),
DARK_OAK_DOOR("dark_oak_door"),
DARK_OAK_FENCE("dark_oak_fence"),
DARK_OAK_FENCE_GATE("dark_oak_fence_gate"),
DARK_OAK_LEAVES("dark_oak_leaves"),
DARK_OAK_LOG("dark_oak_log"),
DARK_OAK_PLANKS("dark_oak_planks"),
DARK_OAK_PRESSURE_PLATE("dark_oak_pressure_plate"),
DARK_OAK_SAPLING("dark_oak_sapling"),
DARK_OAK_SIGN("dark_oak_sign"),
DARK_OAK_SLAB("dark_oak_slab"),
DARK_OAK_STAIRS("dark_oak_stairs"),
DARK_OAK_TRAPDOOR("dark_oak_trapdoor"),
DARK_OAK_WALL_SIGN("dark_oak_wall_sign"),
DARK_OAK_WOOD("dark_oak_wood"),
DARK_PRISMARINE("dark_prismarine"),
DARK_PRISMARINE_SLAB("dark_prismarine_slab"),
DARK_PRISMARINE_STAIRS("dark_prismarine_stairs"),
DAYLIGHT_DETECTOR("daylight_detector"),
DEAD_BRAIN_CORAL("dead_brain_coral"),
DEAD_BRAIN_CORAL_BLOCK("dead_brain_coral_block"),
DEAD_BRAIN_CORAL_FAN("dead_brain_coral_fan"),
DEAD_BRAIN_CORAL_WALL_FAN("dead_brain_coral_wall_fan"),
DEAD_BUBBLE_CORAL("dead_bubble_coral"),
DEAD_BUBBLE_CORAL_BLOCK("dead_bubble_coral_block"),
DEAD_BUBBLE_CORAL_FAN("dead_bubble_coral_fan"),
DEAD_BUBBLE_CORAL_WALL_FAN("dead_bubble_coral_wall_fan"),
DEAD_BUSH("dead_bush"),
DEAD_FIRE_CORAL("dead_fire_coral"),
DEAD_FIRE_CORAL_BLOCK("dead_fire_coral_block"),
DEAD_FIRE_CORAL_FAN("dead_fire_coral_fan"),
DEAD_FIRE_CORAL_WALL_FAN("dead_fire_coral_wall_fan"),
DEAD_HORN_CORAL("dead_horn_coral"),
DEAD_HORN_CORAL_BLOCK("dead_horn_coral_block"),
DEAD_HORN_CORAL_FAN("dead_horn_coral_fan"),
DEAD_HORN_CORAL_WALL_FAN("dead_horn_coral_wall_fan"),
DEAD_TUBE_CORAL("dead_tube_coral"),
DEAD_TUBE_CORAL_BLOCK("dead_tube_coral_block"),
DEAD_TUBE_CORAL_FAN("dead_tube_coral_fan"),
DEAD_TUBE_CORAL_WALL_FAN("dead_tube_coral_wall_fan"),
DEEPSLATE("deepslate"),
DEEPSLATE_BRICK_SLAB("deepslate_brick_slab"),
DEEPSLATE_BRICK_STAIRS("deepslate_brick_stairs"),
DEEPSLATE_BRICK_WALL("deepslate_brick_wall"),
DEEPSLATE_BRICKS("deepslate_bricks"),
DEEPSLATE_COAL_ORE("deepslate_coal_ore"),
DEEPSLATE_COPPER_ORE("deepslate_copper_ore"),
DEEPSLATE_DIAMOND_ORE("deepslate_diamond_ore"),
DEEPSLATE_EMERALD_ORE("deepslate_emerald_ore"),
DEEPSLATE_GOLD_ORE("deepslate_gold_ore"),
DEEPSLATE_IRON_ORE("deepslate_iron_ore"),
DEEPSLATE_LAPIS_ORE("deepslate_lapis_ore"),
DEEPSLATE_REDSTONE_ORE("deepslate_redstone_ore"),
DEEPSLATE_TILE_SLAB("deepslate_tile_slab"),
DEEPSLATE_TILE_STAIRS("deepslate_tile_stairs"),
DEEPSLATE_TILE_WALL("deepslate_tile_wall"),
DEEPSLATE_TILES("deepslate_tiles"),
DETECTOR_RAIL("detector_rail"),
DIAMOND_BLOCK("diamond_block"),
DIAMOND_ORE("diamond_ore"),
DIORITE("diorite"),
DIORITE_SLAB("diorite_slab"),
DIORITE_STAIRS("diorite_stairs"),
DIORITE_WALL("diorite_wall"),
DIRT("dirt"),
DIRT_PATH("dirt_path"),
DISPENSER("dispenser"),
DRAGON_EGG("dragon_egg"),
DRAGON_HEAD("dragon_head"),
DRAGON_WALL_HEAD("dragon_wall_head"),
DRIED_KELP_BLOCK("dried_kelp_block"),
DRIPSTONE_BLOCK("dripstone_block"),
DROPPER("dropper"),
EMERALD_BLOCK("emerald_block"),
EMERALD_ORE("emerald_ore"),
ENCHANTING_TABLE("enchanting_table"),
END_GATEWAY("end_gateway"),
END_PORTAL("end_portal"),
END_PORTAL_FRAME("end_portal_frame"),
END_ROD("end_rod"),
END_STONE("end_stone"),
END_STONE_BRICK_SLAB("end_stone_brick_slab"),
END_STONE_BRICK_STAIRS("end_stone_brick_stairs"),
END_STONE_BRICK_WALL("end_stone_brick_wall"),
END_STONE_BRICKS("end_stone_bricks"),
ENDER_CHEST("ender_chest"),
EXPOSED_COPPER("exposed_copper"),
EXPOSED_CUT_COPPER("exposed_cut_copper"),
EXPOSED_CUT_COPPER_SLAB("exposed_cut_copper_slab"),
EXPOSED_CUT_COPPER_STAIRS("exposed_cut_copper_stairs"),
FARMLAND("farmland"),
FERN("fern"),
FIRE("fire"),
FIRE_CORAL("fire_coral"),
FIRE_CORAL_BLOCK("fire_coral_block"),
FIRE_CORAL_FAN("fire_coral_fan"),
FIRE_CORAL_WALL_FAN("fire_coral_wall_fan"),
FLETCHING_TABLE("fletching_table"),
FLOWER_POT("flower_pot"),
FLOWERING_AZALEA("flowering_azalea"),
FLOWERING_AZALEA_LEAVES("flowering_azalea_leaves"),
FROSTED_ICE("frosted_ice"),
FURNACE("furnace"),
GILDED_BLACKSTONE("gilded_blackstone"),
GLASS("glass"),
GLASS_PANE("glass_pane"),
GLOW_LICHEN("glow_lichen"),
GLOWSTONE("glowstone"),
GOLD_BLOCK("gold_block"),
GOLD_ORE("gold_ore"),
GRANITE("granite"),
GRANITE_SLAB("granite_slab"),
GRANITE_STAIRS("granite_stairs"),
GRANITE_WALL("granite_wall"),
GRASS("grass"),
GRASS_BLOCK("grass_block"),
GRAVEL("gravel"),
GRAY_BANNER("gray_banner"),
GRAY_BED("gray_bed"),
GRAY_CANDLE("gray_candle"),
GRAY_CANDLE_CAKE("gray_candle_cake"),
GRAY_CARPET("gray_carpet"),
GRAY_CONCRETE("gray_concrete"),
GRAY_CONCRETE_POWDER("gray_concrete_powder"),
GRAY_GLAZED_TERRACOTTA("gray_glazed_terracotta"),
GRAY_SHULKER_BOX("gray_shulker_box"),
GRAY_STAINED_GLASS("gray_stained_glass"),
GRAY_STAINED_GLASS_PANE("gray_stained_glass_pane"),
GRAY_TERRACOTTA("gray_terracotta"),
GRAY_WALL_BANNER("gray_wall_banner"),
GRAY_WOOL("gray_wool"),
GREEN_BANNER("green_banner"),
GREEN_BED("green_bed"),
GREEN_CANDLE("green_candle"),
GREEN_CANDLE_CAKE("green_candle_cake"),
GREEN_CARPET("green_carpet"),
GREEN_CONCRETE("green_concrete"),
GREEN_CONCRETE_POWDER("green_concrete_powder"),
GREEN_GLAZED_TERRACOTTA("green_glazed_terracotta"),
GREEN_SHULKER_BOX("green_shulker_box"),
GREEN_STAINED_GLASS("green_stained_glass"),
GREEN_STAINED_GLASS_PANE("green_stained_glass_pane"),
GREEN_TERRACOTTA("green_terracotta"),
GREEN_WALL_BANNER("green_wall_banner"),
GREEN_WOOL("green_wool"),
GRINDSTONE("grindstone"),
HANGING_ROOTS("hanging_roots"),
HAY_BLOCK("hay_block"),
HEAVY_WEIGHTED_PRESSURE_PLATE("heavy_weighted_pressure_plate"),
HONEY_BLOCK("honey_block"),
HONEYCOMB_BLOCK("honeycomb_block"),
HOPPER("hopper"),
HORN_CORAL("horn_coral"),
HORN_CORAL_BLOCK("horn_coral_block"),
HORN_CORAL_FAN("horn_coral_fan"),
HORN_CORAL_WALL_FAN("horn_coral_wall_fan"),
ICE("ice"),
INFESTED_CHISELED_STONE_BRICKS("infested_chiseled_stone_bricks"),
INFESTED_COBBLESTONE("infested_cobblestone"),
INFESTED_CRACKED_STONE_BRICKS("infested_cracked_stone_bricks"),
INFESTED_DEEPSLATE("infested_deepslate"),
INFESTED_MOSSY_STONE_BRICKS("infested_mossy_stone_bricks"),
INFESTED_STONE("infested_stone"),
INFESTED_STONE_BRICKS("infested_stone_bricks"),
IRON_BARS("iron_bars"),
IRON_BLOCK("iron_block"),
IRON_DOOR("iron_door"),
IRON_ORE("iron_ore"),
IRON_TRAPDOOR("iron_trapdoor"),
JACK_O_LANTERN("jack_o_lantern"),
JIGSAW("jigsaw"),
JUKEBOX("jukebox"),
JUNGLE_BUTTON("jungle_button"),
JUNGLE_DOOR("jungle_door"),
JUNGLE_FENCE("jungle_fence"),
JUNGLE_FENCE_GATE("jungle_fence_gate"),
JUNGLE_LEAVES("jungle_leaves"),
JUNGLE_LOG("jungle_log"),
JUNGLE_PLANKS("jungle_planks"),
JUNGLE_PRESSURE_PLATE("jungle_pressure_plate"),
JUNGLE_SAPLING("jungle_sapling"),
JUNGLE_SIGN("jungle_sign"),
JUNGLE_SLAB("jungle_slab"),
JUNGLE_STAIRS("jungle_stairs"),
JUNGLE_TRAPDOOR("jungle_trapdoor"),
JUNGLE_WALL_SIGN("jungle_wall_sign"),
JUNGLE_WOOD("jungle_wood"),
KELP("kelp"),
KELP_PLANT("kelp_plant"),
LADDER("ladder"),
LANTERN("lantern"),
LAPIS_BLOCK("lapis_block"),
LAPIS_ORE("lapis_ore"),
LARGE_AMETHYST_BUD("large_amethyst_bud"),
LARGE_FERN("large_fern"),
LAVA("lava"),
LAVA_CAULDRON("lava_cauldron"),
LECTERN("lectern"),
LEVER("lever"),
LIGHT("light"),
LIGHT_BLUE_BANNER("light_blue_banner"),
LIGHT_BLUE_BED("light_blue_bed"),
LIGHT_BLUE_CANDLE("light_blue_candle"),
LIGHT_BLUE_CANDLE_CAKE("light_blue_candle_cake"),
LIGHT_BLUE_CARPET("light_blue_carpet"),
LIGHT_BLUE_CONCRETE("light_blue_concrete"),
LIGHT_BLUE_CONCRETE_POWDER("light_blue_concrete_powder"),
LIGHT_BLUE_GLAZED_TERRACOTTA("light_blue_glazed_terracotta"),
LIGHT_BLUE_SHULKER_BOX("light_blue_shulker_box"),
LIGHT_BLUE_STAINED_GLASS("light_blue_stained_glass"),
LIGHT_BLUE_STAINED_GLASS_PANE("light_blue_stained_glass_pane"),
LIGHT_BLUE_TERRACOTTA("light_blue_terracotta"),
LIGHT_BLUE_WALL_BANNER("light_blue_wall_banner"),
LIGHT_BLUE_WOOL("light_blue_wool"),
LIGHT_GRAY_BANNER("light_gray_banner"),
LIGHT_GRAY_BED("light_gray_bed"),
LIGHT_GRAY_CANDLE("light_gray_candle"),
LIGHT_GRAY_CANDLE_CAKE("light_gray_candle_cake"),
LIGHT_GRAY_CARPET("light_gray_carpet"),
LIGHT_GRAY_CONCRETE("light_gray_concrete"),
LIGHT_GRAY_CONCRETE_POWDER("light_gray_concrete_powder"),
LIGHT_GRAY_GLAZED_TERRACOTTA("light_gray_glazed_terracotta"),
LIGHT_GRAY_SHULKER_BOX("light_gray_shulker_box"),
LIGHT_GRAY_STAINED_GLASS("light_gray_stained_glass"),
LIGHT_GRAY_STAINED_GLASS_PANE("light_gray_stained_glass_pane"),
LIGHT_GRAY_TERRACOTTA("light_gray_terracotta"),
LIGHT_GRAY_WALL_BANNER("light_gray_wall_banner"),
LIGHT_GRAY_WOOL("light_gray_wool"),
LIGHT_WEIGHTED_PRESSURE_PLATE("light_weighted_pressure_plate"),
LIGHTNING_ROD("lightning_rod"),
LILAC("lilac"),
LILY_OF_THE_VALLEY("lily_of_the_valley"),
LILY_PAD("lily_pad"),
LIME_BANNER("lime_banner"),
LIME_BED("lime_bed"),
LIME_CANDLE("lime_candle"),
LIME_CANDLE_CAKE("lime_candle_cake"),
LIME_CARPET("lime_carpet"),
LIME_CONCRETE("lime_concrete"),
LIME_CONCRETE_POWDER("lime_concrete_powder"),
LIME_GLAZED_TERRACOTTA("lime_glazed_terracotta"),
LIME_SHULKER_BOX("lime_shulker_box"),
LIME_STAINED_GLASS("lime_stained_glass"),
LIME_STAINED_GLASS_PANE("lime_stained_glass_pane"),
LIME_TERRACOTTA("lime_terracotta"),
LIME_WALL_BANNER("lime_wall_banner"),
LIME_WOOL("lime_wool"),
LODESTONE("lodestone"),
LOOM("loom"),
MAGENTA_BANNER("magenta_banner"),
MAGENTA_BED("magenta_bed"),
MAGENTA_CANDLE("magenta_candle"),
MAGENTA_CANDLE_CAKE("magenta_candle_cake"),
MAGENTA_CARPET("magenta_carpet"),
MAGENTA_CONCRETE("magenta_concrete"),
MAGENTA_CONCRETE_POWDER("magenta_concrete_powder"),
MAGENTA_GLAZED_TERRACOTTA("magenta_glazed_terracotta"),
MAGENTA_SHULKER_BOX("magenta_shulker_box"),
MAGENTA_STAINED_GLASS("magenta_stained_glass"),
MAGENTA_STAINED_GLASS_PANE("magenta_stained_glass_pane"),
MAGENTA_TERRACOTTA("magenta_terracotta"),
MAGENTA_WALL_BANNER("magenta_wall_banner"),
MAGENTA_WOOL("magenta_wool"),
MAGMA_BLOCK("magma_block"),
MEDIUM_AMETHYST_BUD("medium_amethyst_bud"),
MELON("melon"),
MELON_STEM("melon_stem"),
MOSS_BLOCK("moss_block"),
MOSS_CARPET("moss_carpet"),
MOSSY_COBBLESTONE("mossy_cobblestone"),
MOSSY_COBBLESTONE_SLAB("mossy_cobblestone_slab"),
MOSSY_COBBLESTONE_STAIRS("mossy_cobblestone_stairs"),
MOSSY_COBBLESTONE_WALL("mossy_cobblestone_wall"),
MOSSY_STONE_BRICK_SLAB("mossy_stone_brick_slab"),
MOSSY_STONE_BRICK_STAIRS("mossy_stone_brick_stairs"),
MOSSY_STONE_BRICK_WALL("mossy_stone_brick_wall"),
MOSSY_STONE_BRICKS("mossy_stone_bricks"),
MOVING_PISTON("moving_piston"),
MUSHROOM_STEM("mushroom_stem"),
MYCELIUM("mycelium"),
NETHER_BRICK_FENCE("nether_brick_fence"),
NETHER_BRICK_SLAB("nether_brick_slab"),
NETHER_BRICK_STAIRS("nether_brick_stairs"),
NETHER_BRICK_WALL("nether_brick_wall"),
NETHER_BRICKS("nether_bricks"),
NETHER_GOLD_ORE("nether_gold_ore"),
NETHER_PORTAL("nether_portal"),
NETHER_QUARTZ_ORE("nether_quartz_ore"),
NETHER_SPROUTS("nether_sprouts"),
NETHER_WART("nether_wart"),
NETHER_WART_BLOCK("nether_wart_block"),
NETHERITE_BLOCK("netherite_block"),
NETHERRACK("netherrack"),
NOTE_BLOCK("note_block"),
OAK_BUTTON("oak_button"),
OAK_DOOR("oak_door"),
OAK_FENCE("oak_fence"),
OAK_FENCE_GATE("oak_fence_gate"),
OAK_LEAVES("oak_leaves"),
OAK_LOG("oak_log"),
OAK_PLANKS("oak_planks"),
OAK_PRESSURE_PLATE("oak_pressure_plate"),
OAK_SAPLING("oak_sapling"),
OAK_SIGN("oak_sign"),
OAK_SLAB("oak_slab"),
OAK_STAIRS("oak_stairs"),
OAK_TRAPDOOR("oak_trapdoor"),
OAK_WALL_SIGN("oak_wall_sign"),
OAK_WOOD("oak_wood"),
OBSERVER("observer"),
OBSIDIAN("obsidian"),
ORANGE_BANNER("orange_banner"),
ORANGE_BED("orange_bed"),
ORANGE_CANDLE("orange_candle"),
ORANGE_CANDLE_CAKE("orange_candle_cake"),
ORANGE_CARPET("orange_carpet"),
ORANGE_CONCRETE("orange_concrete"),
ORANGE_CONCRETE_POWDER("orange_concrete_powder"),
ORANGE_GLAZED_TERRACOTTA("orange_glazed_terracotta"),
ORANGE_SHULKER_BOX("orange_shulker_box"),
ORANGE_STAINED_GLASS("orange_stained_glass"),
ORANGE_STAINED_GLASS_PANE("orange_stained_glass_pane"),
ORANGE_TERRACOTTA("orange_terracotta"),
ORANGE_TULIP("orange_tulip"),
ORANGE_WALL_BANNER("orange_wall_banner"),
ORANGE_WOOL("orange_wool"),
OXEYE_DAISY("oxeye_daisy"),
OXIDIZED_COPPER("oxidized_copper"),
OXIDIZED_CUT_COPPER("oxidized_cut_copper"),
OXIDIZED_CUT_COPPER_SLAB("oxidized_cut_copper_slab"),
OXIDIZED_CUT_COPPER_STAIRS("oxidized_cut_copper_stairs"),
PACKED_ICE("packed_ice"),
PEONY("peony"),
PETRIFIED_OAK_SLAB("petrified_oak_slab"),
PINK_BANNER("pink_banner"),
PINK_BED("pink_bed"),
PINK_CANDLE("pink_candle"),
PINK_CANDLE_CAKE("pink_candle_cake"),
PINK_CARPET("pink_carpet"),
PINK_CONCRETE("pink_concrete"),
PINK_CONCRETE_POWDER("pink_concrete_powder"),
PINK_GLAZED_TERRACOTTA("pink_glazed_terracotta"),
PINK_SHULKER_BOX("pink_shulker_box"),
PINK_STAINED_GLASS("pink_stained_glass"),
PINK_STAINED_GLASS_PANE("pink_stained_glass_pane"),
PINK_TERRACOTTA("pink_terracotta"),
PINK_TULIP("pink_tulip"),
PINK_WALL_BANNER("pink_wall_banner"),
PINK_WOOL("pink_wool"),
PISTON("piston"),
PISTON_HEAD("piston_head"),
PLAYER_HEAD("player_head"),
PLAYER_WALL_HEAD("player_wall_head"),
PODZOL("podzol"),
POINTED_DRIPSTONE("pointed_dripstone"),
POLISHED_ANDESITE("polished_andesite"),
POLISHED_ANDESITE_SLAB("polished_andesite_slab"),
POLISHED_ANDESITE_STAIRS("polished_andesite_stairs"),
POLISHED_BASALT("polished_basalt"),
POLISHED_BLACKSTONE("polished_blackstone"),
POLISHED_BLACKSTONE_BRICK_SLAB("polished_blackstone_brick_slab"),
POLISHED_BLACKSTONE_BRICK_STAIRS("polished_blackstone_brick_stairs"),
POLISHED_BLACKSTONE_BRICK_WALL("polished_blackstone_brick_wall"),
POLISHED_BLACKSTONE_BRICKS("polished_blackstone_bricks"),
POLISHED_BLACKSTONE_BUTTON("polished_blackstone_button"),
POLISHED_BLACKSTONE_PRESSURE_PLATE("polished_blackstone_pressure_plate"),
POLISHED_BLACKSTONE_SLAB("polished_blackstone_slab"),
POLISHED_BLACKSTONE_STAIRS("polished_blackstone_stairs"),
POLISHED_BLACKSTONE_WALL("polished_blackstone_wall"),
POLISHED_DEEPSLATE("polished_deepslate"),
POLISHED_DEEPSLATE_SLAB("polished_deepslate_slab"),
POLISHED_DEEPSLATE_STAIRS("polished_deepslate_stairs"),
POLISHED_DEEPSLATE_WALL("polished_deepslate_wall"),
POLISHED_DIORITE("polished_diorite"),
POLISHED_DIORITE_SLAB("polished_diorite_slab"),
POLISHED_DIORITE_STAIRS("polished_diorite_stairs"),
POLISHED_GRANITE("polished_granite"),
POLISHED_GRANITE_SLAB("polished_granite_slab"),
POLISHED_GRANITE_STAIRS("polished_granite_stairs"),
POPPY("poppy"),
POTATOES("potatoes"),
POTTED_ACACIA_SAPLING("potted_acacia_sapling"),
POTTED_ALLIUM("potted_allium"),
POTTED_AZALEA_BUSH("potted_azalea_bush"),
POTTED_AZURE_BLUET("potted_azure_bluet"),
POTTED_BAMBOO("potted_bamboo"),
POTTED_BIRCH_SAPLING("potted_birch_sapling"),
POTTED_BLUE_ORCHID("potted_blue_orchid"),
POTTED_BROWN_MUSHROOM("potted_brown_mushroom"),
POTTED_CACTUS("potted_cactus"),
POTTED_CORNFLOWER("potted_cornflower"),
POTTED_CRIMSON_FUNGUS("potted_crimson_fungus"),
POTTED_CRIMSON_ROOTS("potted_crimson_roots"),
POTTED_DANDELION("potted_dandelion"),
POTTED_DARK_OAK_SAPLING("potted_dark_oak_sapling"),
POTTED_DEAD_BUSH("potted_dead_bush"),
POTTED_FERN("potted_fern"),
POTTED_FLOWERING_AZALEA_BUSH("potted_flowering_azalea_bush"),
POTTED_JUNGLE_SAPLING("potted_jungle_sapling"),
POTTED_LILY_OF_THE_VALLEY("potted_lily_of_the_valley"),
POTTED_OAK_SAPLING("potted_oak_sapling"),
POTTED_ORANGE_TULIP("potted_orange_tulip"),
POTTED_OXEYE_DAISY("potted_oxeye_daisy"),
POTTED_PINK_TULIP("potted_pink_tulip"),
POTTED_POPPY("potted_poppy"),
POTTED_RED_MUSHROOM("potted_red_mushroom"),
POTTED_RED_TULIP("potted_red_tulip"),
POTTED_SPRUCE_SAPLING("potted_spruce_sapling"),
POTTED_WARPED_FUNGUS("potted_warped_fungus"),
POTTED_WARPED_ROOTS("potted_warped_roots"),
POTTED_WHITE_TULIP("potted_white_tulip"),
POTTED_WITHER_ROSE("potted_wither_rose"),
POWDER_SNOW("powder_snow"),
POWDER_SNOW_CAULDRON("powder_snow_cauldron"),
POWERED_RAIL("powered_rail"),
PRISMARINE("prismarine"),
PRISMARINE_BRICK_SLAB("prismarine_brick_slab"),
PRISMARINE_BRICK_STAIRS("prismarine_brick_stairs"),
PRISMARINE_BRICKS("prismarine_bricks"),
PRISMARINE_SLAB("prismarine_slab"),
PRISMARINE_STAIRS("prismarine_stairs"),
PRISMARINE_WALL("prismarine_wall"),
PUMPKIN("pumpkin"),
PUMPKIN_STEM("pumpkin_stem"),
PURPLE_BANNER("purple_banner"),
PURPLE_BED("purple_bed"),
PURPLE_CANDLE("purple_candle"),
PURPLE_CANDLE_CAKE("purple_candle_cake"),
PURPLE_CARPET("purple_carpet"),
PURPLE_CONCRETE("purple_concrete"),
PURPLE_CONCRETE_POWDER("purple_concrete_powder"),
PURPLE_GLAZED_TERRACOTTA("purple_glazed_terracotta"),
PURPLE_SHULKER_BOX("purple_shulker_box"),
PURPLE_STAINED_GLASS("purple_stained_glass"),
PURPLE_STAINED_GLASS_PANE("purple_stained_glass_pane"),
PURPLE_TERRACOTTA("purple_terracotta"),
PURPLE_WALL_BANNER("purple_wall_banner"),
PURPLE_WOOL("purple_wool"),
PURPUR_BLOCK("purpur_block"),
PURPUR_PILLAR("purpur_pillar"),
PURPUR_SLAB("purpur_slab"),
PURPUR_STAIRS("purpur_stairs"),
QUARTZ_BLOCK("quartz_block"),
QUARTZ_BRICKS("quartz_bricks"),
QUARTZ_PILLAR("quartz_pillar"),
QUARTZ_SLAB("quartz_slab"),
QUARTZ_STAIRS("quartz_stairs"),
RAIL("rail"),
RAW_COPPER_BLOCK("raw_copper_block"),
RAW_GOLD_BLOCK("raw_gold_block"),
RAW_IRON_BLOCK("raw_iron_block"),
RED_BANNER("red_banner"),
RED_BED("red_bed"),
RED_CANDLE("red_candle"),
RED_CANDLE_CAKE("red_candle_cake"),
RED_CARPET("red_carpet"),
RED_CONCRETE("red_concrete"),
RED_CONCRETE_POWDER("red_concrete_powder"),
RED_GLAZED_TERRACOTTA("red_glazed_terracotta"),
RED_MUSHROOM("red_mushroom"),
RED_MUSHROOM_BLOCK("red_mushroom_block"),
RED_NETHER_BRICK_SLAB("red_nether_brick_slab"),
RED_NETHER_BRICK_STAIRS("red_nether_brick_stairs"),
RED_NETHER_BRICK_WALL("red_nether_brick_wall"),
RED_NETHER_BRICKS("red_nether_bricks"),
RED_SAND("red_sand"),
RED_SANDSTONE("red_sandstone"),
RED_SANDSTONE_SLAB("red_sandstone_slab"),
RED_SANDSTONE_STAIRS("red_sandstone_stairs"),
RED_SANDSTONE_WALL("red_sandstone_wall"),
RED_SHULKER_BOX("red_shulker_box"),
RED_STAINED_GLASS("red_stained_glass"),
RED_STAINED_GLASS_PANE("red_stained_glass_pane"),
RED_TERRACOTTA("red_terracotta"),
RED_TULIP("red_tulip"),
RED_WALL_BANNER("red_wall_banner"),
RED_WOOL("red_wool"),
REDSTONE_BLOCK("redstone_block"),
REDSTONE_LAMP("redstone_lamp"),
REDSTONE_ORE("redstone_ore"),
REDSTONE_TORCH("redstone_torch"),
REDSTONE_WALL_TORCH("redstone_wall_torch"),
REDSTONE_WIRE("redstone_wire"),
REPEATER("repeater"),
REPEATING_COMMAND_BLOCK("repeating_command_block"),
RESPAWN_ANCHOR("respawn_anchor"),
ROOTED_DIRT("rooted_dirt"),
ROSE_BUSH("rose_bush"),
SAND("sand"),
SANDSTONE("sandstone"),
SANDSTONE_SLAB("sandstone_slab"),
SANDSTONE_STAIRS("sandstone_stairs"),
SANDSTONE_WALL("sandstone_wall"),
SCAFFOLDING("scaffolding"),
SCULK_SENSOR("sculk_sensor"),
SEA_LANTERN("sea_lantern"),
SEA_PICKLE("sea_pickle"),
SEAGRASS("seagrass"),
SHROOMLIGHT("shroomlight"),
SHULKER_BOX("shulker_box"),
SKELETON_SKULL("skeleton_skull"),
SKELETON_WALL_SKULL("skeleton_wall_skull"),
SLIME_BLOCK("slime_block"),
SMALL_AMETHYST_BUD("small_amethyst_bud"),
SMALL_DRIPLEAF("small_dripleaf"),
SMITHING_TABLE("smithing_table"),
SMOKER("smoker"),
SMOOTH_BASALT("smooth_basalt"),
SMOOTH_QUARTZ("smooth_quartz"),
SMOOTH_QUARTZ_SLAB("smooth_quartz_slab"),
SMOOTH_QUARTZ_STAIRS("smooth_quartz_stairs"),
SMOOTH_RED_SANDSTONE("smooth_red_sandstone"),
SMOOTH_RED_SANDSTONE_SLAB("smooth_red_sandstone_slab"),
SMOOTH_RED_SANDSTONE_STAIRS("smooth_red_sandstone_stairs"),
SMOOTH_SANDSTONE("smooth_sandstone"),
SMOOTH_SANDSTONE_SLAB("smooth_sandstone_slab"),
SMOOTH_SANDSTONE_STAIRS("smooth_sandstone_stairs"),
SMOOTH_STONE("smooth_stone"),
SMOOTH_STONE_SLAB("smooth_stone_slab"),
SNOW("snow"),
SNOW_BLOCK("snow_block"),
SOUL_CAMPFIRE("soul_campfire"),
SOUL_FIRE("soul_fire"),
SOUL_LANTERN("soul_lantern"),
SOUL_SAND("soul_sand"),
SOUL_SOIL("soul_soil"),
SOUL_TORCH("soul_torch"),
SOUL_WALL_TORCH("soul_wall_torch"),
SPAWNER("spawner"),
SPONGE("sponge"),
SPORE_BLOSSOM("spore_blossom"),
SPRUCE_BUTTON("spruce_button"),
SPRUCE_DOOR("spruce_door"),
SPRUCE_FENCE("spruce_fence"),
SPRUCE_FENCE_GATE("spruce_fence_gate"),
SPRUCE_LEAVES("spruce_leaves"),
SPRUCE_LOG("spruce_log"),
SPRUCE_PLANKS("spruce_planks"),
SPRUCE_PRESSURE_PLATE("spruce_pressure_plate"),
SPRUCE_SAPLING("spruce_sapling"),
SPRUCE_SIGN("spruce_sign"),
SPRUCE_SLAB("spruce_slab"),
SPRUCE_STAIRS("spruce_stairs"),
SPRUCE_TRAPDOOR("spruce_trapdoor"),
SPRUCE_WALL_SIGN("spruce_wall_sign"),
SPRUCE_WOOD("spruce_wood"),
STICKY_PISTON("sticky_piston"),
STONE("stone"),
STONE_BRICK_SLAB("stone_brick_slab"),
STONE_BRICK_STAIRS("stone_brick_stairs"),
STONE_BRICK_WALL("stone_brick_wall"),
STONE_BRICKS("stone_bricks"),
STONE_BUTTON("stone_button"),
STONE_PRESSURE_PLATE("stone_pressure_plate"),
STONE_SLAB("stone_slab"),
STONE_STAIRS("stone_stairs"),
STONECUTTER("stonecutter"),
STRIPPED_ACACIA_LOG("stripped_acacia_log"),
STRIPPED_ACACIA_WOOD("stripped_acacia_wood"),
STRIPPED_BIRCH_LOG("stripped_birch_log"),
STRIPPED_BIRCH_WOOD("stripped_birch_wood"),
STRIPPED_CRIMSON_HYPHAE("stripped_crimson_hyphae"),
STRIPPED_CRIMSON_STEM("stripped_crimson_stem"),
STRIPPED_DARK_OAK_LOG("stripped_dark_oak_log"),
STRIPPED_DARK_OAK_WOOD("stripped_dark_oak_wood"),
STRIPPED_JUNGLE_LOG("stripped_jungle_log"),
STRIPPED_JUNGLE_WOOD("stripped_jungle_wood"),
STRIPPED_OAK_LOG("stripped_oak_log"),
STRIPPED_OAK_WOOD("stripped_oak_wood"),
STRIPPED_SPRUCE_LOG("stripped_spruce_log"),
STRIPPED_SPRUCE_WOOD("stripped_spruce_wood"),
STRIPPED_WARPED_HYPHAE("stripped_warped_hyphae"),
STRIPPED_WARPED_STEM("stripped_warped_stem"),
STRUCTURE_BLOCK("structure_block"),
STRUCTURE_VOID("structure_void"),
SUGAR_CANE("sugar_cane"),
SUNFLOWER("sunflower"),
SWEET_BERRY_BUSH("sweet_berry_bush"),
TALL_GRASS("tall_grass"),
TALL_SEAGRASS("tall_seagrass"),
TARGET("target"),
TERRACOTTA("terracotta"),
TINTED_GLASS("tinted_glass"),
TNT("tnt"),
TORCH("torch"),
TRAPPED_CHEST("trapped_chest"),
TRIPWIRE("tripwire"),
TRIPWIRE_HOOK("tripwire_hook"),
TUBE_CORAL("tube_coral"),
TUBE_CORAL_BLOCK("tube_coral_block"),
TUBE_CORAL_FAN("tube_coral_fan"),
TUBE_CORAL_WALL_FAN("tube_coral_wall_fan"),
TUFF("tuff"),
TURTLE_EGG("turtle_egg"),
TWISTING_VINES("twisting_vines"),
TWISTING_VINES_PLANT("twisting_vines_plant"),
VINE("vine"),
VOID_AIR("void_air"),
WALL_TORCH("wall_torch"),
WARPED_BUTTON("warped_button"),
WARPED_DOOR("warped_door"),
WARPED_FENCE("warped_fence"),
WARPED_FENCE_GATE("warped_fence_gate"),
WARPED_FUNGUS("warped_fungus"),
WARPED_HYPHAE("warped_hyphae"),
WARPED_NYLIUM("warped_nylium"),
WARPED_PLANKS("warped_planks"),
WARPED_PRESSURE_PLATE("warped_pressure_plate"),
WARPED_ROOTS("warped_roots"),
WARPED_SIGN("warped_sign"),
WARPED_SLAB("warped_slab"),
WARPED_STAIRS("warped_stairs"),
WARPED_STEM("warped_stem"),
WARPED_TRAPDOOR("warped_trapdoor"),
WARPED_WALL_SIGN("warped_wall_sign"),
WARPED_WART_BLOCK("warped_wart_block"),
WATER("water"),
WATER_CAULDRON("water_cauldron"),
WAXED_COPPER_BLOCK("waxed_copper_block"),
WAXED_CUT_COPPER("waxed_cut_copper"),
WAXED_CUT_COPPER_SLAB("waxed_cut_copper_slab"),
WAXED_CUT_COPPER_STAIRS("waxed_cut_copper_stairs"),
WAXED_EXPOSED_COPPER("waxed_exposed_copper"),
WAXED_EXPOSED_CUT_COPPER("waxed_exposed_cut_copper"),
WAXED_EXPOSED_CUT_COPPER_SLAB("waxed_exposed_cut_copper_slab"),
WAXED_EXPOSED_CUT_COPPER_STAIRS("waxed_exposed_cut_copper_stairs"),
WAXED_OXIDIZED_COPPER("waxed_oxidized_copper"),
WAXED_OXIDIZED_CUT_COPPER("waxed_oxidized_cut_copper"),
WAXED_OXIDIZED_CUT_COPPER_SLAB("waxed_oxidized_cut_copper_slab"),
WAXED_OXIDIZED_CUT_COPPER_STAIRS("waxed_oxidized_cut_copper_stairs"),
WAXED_WEATHERED_COPPER("waxed_weathered_copper"),
WAXED_WEATHERED_CUT_COPPER("waxed_weathered_cut_copper"),
WAXED_WEATHERED_CUT_COPPER_SLAB("waxed_weathered_cut_copper_slab"),
WAXED_WEATHERED_CUT_COPPER_STAIRS("waxed_weathered_cut_copper_stairs"),
WEATHERED_COPPER("weathered_copper"),
WEATHERED_CUT_COPPER("weathered_cut_copper"),
WEATHERED_CUT_COPPER_SLAB("weathered_cut_copper_slab"),
WEATHERED_CUT_COPPER_STAIRS("weathered_cut_copper_stairs"),
WEEPING_VINES("weeping_vines"),
WEEPING_VINES_PLANT("weeping_vines_plant"),
WET_SPONGE("wet_sponge"),
WHEAT("wheat"),
WHITE_BANNER("white_banner"),
WHITE_BED("white_bed"),
WHITE_CANDLE("white_candle"),
WHITE_CANDLE_CAKE("white_candle_cake"),
WHITE_CARPET("white_carpet"),
WHITE_CONCRETE("white_concrete"),
WHITE_CONCRETE_POWDER("white_concrete_powder"),
WHITE_GLAZED_TERRACOTTA("white_glazed_terracotta"),
WHITE_SHULKER_BOX("white_shulker_box"),
WHITE_STAINED_GLASS("white_stained_glass"),
WHITE_STAINED_GLASS_PANE("white_stained_glass_pane"),
WHITE_TERRACOTTA("white_terracotta"),
WHITE_TULIP("white_tulip"),
WHITE_WALL_BANNER("white_wall_banner"),
WHITE_WOOL("white_wool"),
WITHER_ROSE("wither_rose"),
WITHER_SKELETON_SKULL("wither_skeleton_skull"),
WITHER_SKELETON_WALL_SKULL("wither_skeleton_wall_skull"),
YELLOW_BANNER("yellow_banner"),
YELLOW_BED("yellow_bed"),
YELLOW_CANDLE("yellow_candle"),
YELLOW_CANDLE_CAKE("yellow_candle_cake"),
YELLOW_CARPET("yellow_carpet"),
YELLOW_CONCRETE("yellow_concrete"),
YELLOW_CONCRETE_POWDER("yellow_concrete_powder"),
YELLOW_GLAZED_TERRACOTTA("yellow_glazed_terracotta"),
YELLOW_SHULKER_BOX("yellow_shulker_box"),
YELLOW_STAINED_GLASS("yellow_stained_glass"),
YELLOW_STAINED_GLASS_PANE("yellow_stained_glass_pane"),
YELLOW_TERRACOTTA("yellow_terracotta"),
YELLOW_WALL_BANNER("yellow_wall_banner"),
YELLOW_WOOL("yellow_wool"),
ZOMBIE_HEAD("zombie_head"),
ZOMBIE_WALL_HEAD("zombie_wall_head");
fun toPath(): ResourcePath
{
return ResourcePath.ofNamespace("minecraft", id)
}
}

View File

@ -0,0 +1,11 @@
package gay.pizza.foundation.drywall.enums
enum class ConditionType(private val value: String)
{
SURVIVES_EXPLOSION("survives_explosion");
override fun toString(): String
{
return "minecraft:$value"
}
}

View File

@ -0,0 +1,11 @@
package gay.pizza.foundation.drywall.enums
data class EntryPoint(val name: String)
{
companion object
{
final val MAIN = EntryPoint("main")
final val CLIENT = EntryPoint("client")
final val SERVER = EntryPoint("server")
}
}

View File

@ -0,0 +1,13 @@
package gay.pizza.foundation.drywall.enums
enum class EnvironmentType(private val value: String)
{
EVERYWHERE("*"),
CLIENT("client"),
SERVER("server");
override fun toString(): String
{
return value
}
}

View File

@ -0,0 +1,342 @@
package gay.pizza.foundation.drywall.enums
import gay.pizza.foundation.drywall.util.ResourcePath
enum class Items(private val id: String)
{
ACACIA_BOAT("acacia_boat"),
AMETHYST_SHARD("amethyst_shard"),
APPLE("apple"),
ARMOR_STAND("armor_stand"),
ARROW("arrow"),
AXOLOTL_BUCKET("axolotl_bucket"),
AXOLOTL_SPAWN_EGG("axolotl_spawn_egg"),
BAKED_POTATO("baked_potato"),
BAT_SPAWN_EGG("bat_spawn_egg"),
BEE_SPAWN_EGG("bee_spawn_egg"),
BEEF("beef"),
BEETROOT("beetroot"),
BEETROOT_SEEDS("beetroot_seeds"),
BEETROOT_SOUP("beetroot_soup"),
BIRCH_BOAT("birch_boat"),
BLACK_DYE("black_dye"),
BLAZE_POWDER("blaze_powder"),
BLAZE_ROD("blaze_rod"),
BLAZE_SPAWN_EGG("blaze_spawn_egg"),
BLUE_DYE("blue_dye"),
BONE("bone"),
BONE_MEAL("bone_meal"),
BOOK("book"),
BOW("bow"),
BOWL("bowl"),
BREAD("bread"),
BRICK("brick"),
BROWN_DYE("brown_dye"),
BUCKET("bucket"),
BUNDLE("bundle"),
CARROT("carrot"),
CARROT_ON_A_STICK("carrot_on_a_stick"),
CAT_SPAWN_EGG("cat_spawn_egg"),
CAVE_SPIDER_SPAWN_EGG("cave_spider_spawn_egg"),
CHAINMAIL_BOOTS("chainmail_boots"),
CHAINMAIL_CHESTPLATE("chainmail_chestplate"),
CHAINMAIL_HELMET("chainmail_helmet"),
CHAINMAIL_LEGGINGS("chainmail_leggings"),
CHARCOAL("charcoal"),
CHEST_MINECART("chest_minecart"),
CHICKEN("chicken"),
CHICKEN_SPAWN_EGG("chicken_spawn_egg"),
CHORUS_FRUIT("chorus_fruit"),
CLAY_BALL("clay_ball"),
CLOCK("clock"),
COAL("coal"),
COCOA_BEANS("cocoa_beans"),
COD("cod"),
COD_BUCKET("cod_bucket"),
COD_SPAWN_EGG("cod_spawn_egg"),
COMMAND_BLOCK_MINECART("command_block_minecart"),
COMPASS("compass"),
COOKED_BEEF("cooked_beef"),
COOKED_CHICKEN("cooked_chicken"),
COOKED_COD("cooked_cod"),
COOKED_MUTTON("cooked_mutton"),
COOKED_PORKCHOP("cooked_porkchop"),
COOKED_RABBIT("cooked_rabbit"),
COOKED_SALMON("cooked_salmon"),
COOKIE("cookie"),
COPPER_INGOT("copper_ingot"),
COW_SPAWN_EGG("cow_spawn_egg"),
CREEPER_BANNER_PATTERN("creeper_banner_pattern"),
CREEPER_SPAWN_EGG("creeper_spawn_egg"),
CROSSBOW("crossbow"),
CYAN_DYE("cyan_dye"),
DARK_OAK_BOAT("dark_oak_boat"),
DEBUG_STICK("debug_stick"),
DIAMOND("diamond"),
DIAMOND_AXE("diamond_axe"),
DIAMOND_BOOTS("diamond_boots"),
DIAMOND_CHESTPLATE("diamond_chestplate"),
DIAMOND_HELMET("diamond_helmet"),
DIAMOND_HOE("diamond_hoe"),
DIAMOND_HORSE_ARMOR("diamond_horse_armor"),
DIAMOND_LEGGINGS("diamond_leggings"),
DIAMOND_PICKAXE("diamond_pickaxe"),
DIAMOND_SHOVEL("diamond_shovel"),
DIAMOND_SWORD("diamond_sword"),
DOLPHIN_SPAWN_EGG("dolphin_spawn_egg"),
DONKEY_SPAWN_EGG("donkey_spawn_egg"),
DRAGON_BREATH("dragon_breath"),
DRIED_KELP("dried_kelp"),
DROWNED_SPAWN_EGG("drowned_spawn_egg"),
EGG("egg"),
ELDER_GUARDIAN_SPAWN_EGG("elder_guardian_spawn_egg"),
ELYTRA("elytra"),
EMERALD("emerald"),
ENCHANTED_BOOK("enchanted_book"),
ENCHANTED_GOLDEN_APPLE("enchanted_golden_apple"),
END_CRYSTAL("end_crystal"),
ENDER_EYE("ender_eye"),
ENDER_PEARL("ender_pearl"),
ENDERMAN_SPAWN_EGG("enderman_spawn_egg"),
ENDERMITE_SPAWN_EGG("endermite_spawn_egg"),
EVOKER_SPAWN_EGG("evoker_spawn_egg"),
EXPERIENCE_BOTTLE("experience_bottle"),
FEATHER("feather"),
FERMENTED_SPIDER_EYE("fermented_spider_eye"),
FILLED_MAP("filled_map"),
FIRE_CHARGE("fire_charge"),
FIREWORK_ROCKET("firework_rocket"),
FIREWORK_STAR("firework_star"),
FISHING_ROD("fishing_rod"),
FLINT("flint"),
FLINT_AND_STEEL("flint_and_steel"),
FLOWER_BANNER_PATTERN("flower_banner_pattern"),
FOX_SPAWN_EGG("fox_spawn_egg"),
FURNACE_MINECART("furnace_minecart"),
GHAST_SPAWN_EGG("ghast_spawn_egg"),
GHAST_TEAR("ghast_tear"),
GLASS_BOTTLE("glass_bottle"),
GLISTERING_MELON_SLICE("glistering_melon_slice"),
GLOBE_BANNER_PATTERN("globe_banner_pattern"),
GLOW_BERRIES("glow_berries"),
GLOW_INK_SAC("glow_ink_sac"),
GLOW_ITEM_FRAME("glow_item_frame"),
GLOW_SQUID_SPAWN_EGG("glow_squid_spawn_egg"),
GLOWSTONE_DUST("glowstone_dust"),
GOAT_SPAWN_EGG("goat_spawn_egg"),
GOLD_INGOT("gold_ingot"),
GOLD_NUGGET("gold_nugget"),
GOLDEN_APPLE("golden_apple"),
GOLDEN_AXE("golden_axe"),
GOLDEN_BOOTS("golden_boots"),
GOLDEN_CARROT("golden_carrot"),
GOLDEN_CHESTPLATE("golden_chestplate"),
GOLDEN_HELMET("golden_helmet"),
GOLDEN_HOE("golden_hoe"),
GOLDEN_HORSE_ARMOR("golden_horse_armor"),
GOLDEN_LEGGINGS("golden_leggings"),
GOLDEN_PICKAXE("golden_pickaxe"),
GOLDEN_SHOVEL("golden_shovel"),
GOLDEN_SWORD("golden_sword"),
GRAY_DYE("gray_dye"),
GREEN_DYE("green_dye"),
GUARDIAN_SPAWN_EGG("guardian_spawn_egg"),
GUNPOWDER("gunpowder"),
HEART_OF_THE_SEA("heart_of_the_sea"),
HOGLIN_SPAWN_EGG("hoglin_spawn_egg"),
HONEY_BOTTLE("honey_bottle"),
HONEYCOMB("honeycomb"),
HOPPER_MINECART("hopper_minecart"),
HORSE_SPAWN_EGG("horse_spawn_egg"),
HUSK_SPAWN_EGG("husk_spawn_egg"),
INK_SAC("ink_sac"),
IRON_AXE("iron_axe"),
IRON_BOOTS("iron_boots"),
IRON_CHESTPLATE("iron_chestplate"),
IRON_HELMET("iron_helmet"),
IRON_HOE("iron_hoe"),
IRON_HORSE_ARMOR("iron_horse_armor"),
IRON_INGOT("iron_ingot"),
IRON_LEGGINGS("iron_leggings"),
IRON_NUGGET("iron_nugget"),
IRON_PICKAXE("iron_pickaxe"),
IRON_SHOVEL("iron_shovel"),
IRON_SWORD("iron_sword"),
ITEM_FRAME("item_frame"),
JUNGLE_BOAT("jungle_boat"),
KNOWLEDGE_BOOK("knowledge_book"),
LAPIS_LAZULI("lapis_lazuli"),
LAVA_BUCKET("lava_bucket"),
LEAD("lead"),
LEATHER("leather"),
LEATHER_BOOTS("leather_boots"),
LEATHER_CHESTPLATE("leather_chestplate"),
LEATHER_HELMET("leather_helmet"),
LEATHER_HORSE_ARMOR("leather_horse_armor"),
LEATHER_LEGGINGS("leather_leggings"),
LIGHT_BLUE_DYE("light_blue_dye"),
LIGHT_GRAY_DYE("light_gray_dye"),
LIME_DYE("lime_dye"),
LINGERING_POTION("lingering_potion"),
LLAMA_SPAWN_EGG("llama_spawn_egg"),
MAGENTA_DYE("magenta_dye"),
MAGMA_CREAM("magma_cream"),
MAGMA_CUBE_SPAWN_EGG("magma_cube_spawn_egg"),
MAP("map"),
MELON_SEEDS("melon_seeds"),
MELON_SLICE("melon_slice"),
MILK_BUCKET("milk_bucket"),
MINECART("minecart"),
MOJANG_BANNER_PATTERN("mojang_banner_pattern"),
MOOSHROOM_SPAWN_EGG("mooshroom_spawn_egg"),
MULE_SPAWN_EGG("mule_spawn_egg"),
MUSHROOM_STEW("mushroom_stew"),
MUSIC_DISC_11("music_disc_11"),
MUSIC_DISC_13("music_disc_13"),
MUSIC_DISC_BLOCKS("music_disc_blocks"),
MUSIC_DISC_CAT("music_disc_cat"),
MUSIC_DISC_CHIRP("music_disc_chirp"),
MUSIC_DISC_FAR("music_disc_far"),
MUSIC_DISC_MALL("music_disc_mall"),
MUSIC_DISC_MELLOHI("music_disc_mellohi"),
MUSIC_DISC_OTHERSIDE("music_disc_otherside"),
MUSIC_DISC_PIGSTEP("music_disc_pigstep"),
MUSIC_DISC_STAL("music_disc_stal"),
MUSIC_DISC_STRAD("music_disc_strad"),
MUSIC_DISC_WAIT("music_disc_wait"),
MUSIC_DISC_WARD("music_disc_ward"),
MUTTON("mutton"),
NAME_TAG("name_tag"),
NAUTILUS_SHELL("nautilus_shell"),
NETHER_BRICK("nether_brick"),
NETHER_STAR("nether_star"),
NETHERITE_AXE("netherite_axe"),
NETHERITE_BOOTS("netherite_boots"),
NETHERITE_CHESTPLATE("netherite_chestplate"),
NETHERITE_HELMET("netherite_helmet"),
NETHERITE_HOE("netherite_hoe"),
NETHERITE_INGOT("netherite_ingot"),
NETHERITE_LEGGINGS("netherite_leggings"),
NETHERITE_PICKAXE("netherite_pickaxe"),
NETHERITE_SCRAP("netherite_scrap"),
NETHERITE_SHOVEL("netherite_shovel"),
NETHERITE_SWORD("netherite_sword"),
OAK_BOAT("oak_boat"),
OCELOT_SPAWN_EGG("ocelot_spawn_egg"),
ORANGE_DYE("orange_dye"),
PAINTING("painting"),
PANDA_SPAWN_EGG("panda_spawn_egg"),
PAPER("paper"),
PARROT_SPAWN_EGG("parrot_spawn_egg"),
PHANTOM_MEMBRANE("phantom_membrane"),
PHANTOM_SPAWN_EGG("phantom_spawn_egg"),
PIG_SPAWN_EGG("pig_spawn_egg"),
PIGLIN_BRUTE_SPAWN_EGG("piglin_brute_spawn_egg"),
PIGLIN_SPAWN_EGG("piglin_spawn_egg"),
PILLAGER_SPAWN_EGG("pillager_spawn_egg"),
PINK_DYE("pink_dye"),
POISONOUS_POTATO("poisonous_potato"),
POLAR_BEAR_SPAWN_EGG("polar_bear_spawn_egg"),
POPPED_CHORUS_FRUIT("popped_chorus_fruit"),
PORKCHOP("porkchop"),
POTATO("potato"),
POTION("potion"),
POWDER_SNOW_BUCKET("powder_snow_bucket"),
PRISMARINE_CRYSTALS("prismarine_crystals"),
PRISMARINE_SHARD("prismarine_shard"),
PUFFERFISH("pufferfish"),
PUFFERFISH_BUCKET("pufferfish_bucket"),
PUFFERFISH_SPAWN_EGG("pufferfish_spawn_egg"),
PUMPKIN_PIE("pumpkin_pie"),
PUMPKIN_SEEDS("pumpkin_seeds"),
PURPLE_DYE("purple_dye"),
QUARTZ("quartz"),
RABBIT("rabbit"),
RABBIT_FOOT("rabbit_foot"),
RABBIT_HIDE("rabbit_hide"),
RABBIT_SPAWN_EGG("rabbit_spawn_egg"),
RABBIT_STEW("rabbit_stew"),
RAVAGER_SPAWN_EGG("ravager_spawn_egg"),
RAW_COPPER("raw_copper"),
RAW_GOLD("raw_gold"),
RAW_IRON("raw_iron"),
RED_DYE("red_dye"),
REDSTONE("redstone"),
ROTTEN_FLESH("rotten_flesh"),
SADDLE("saddle"),
SALMON("salmon"),
SALMON_BUCKET("salmon_bucket"),
SALMON_SPAWN_EGG("salmon_spawn_egg"),
SCUTE("scute"),
SHEARS("shears"),
SHEEP_SPAWN_EGG("sheep_spawn_egg"),
SHIELD("shield"),
SHULKER_SHELL("shulker_shell"),
SHULKER_SPAWN_EGG("shulker_spawn_egg"),
SILVERFISH_SPAWN_EGG("silverfish_spawn_egg"),
SKELETON_HORSE_SPAWN_EGG("skeleton_horse_spawn_egg"),
SKELETON_SPAWN_EGG("skeleton_spawn_egg"),
SKULL_BANNER_PATTERN("skull_banner_pattern"),
SLIME_BALL("slime_ball"),
SLIME_SPAWN_EGG("slime_spawn_egg"),
SNOWBALL("snowball"),
SPECTRAL_ARROW("spectral_arrow"),
SPIDER_EYE("spider_eye"),
SPIDER_SPAWN_EGG("spider_spawn_egg"),
SPLASH_POTION("splash_potion"),
SPRUCE_BOAT("spruce_boat"),
SPYGLASS("spyglass"),
SQUID_SPAWN_EGG("squid_spawn_egg"),
STICK("stick"),
STONE_AXE("stone_axe"),
STONE_HOE("stone_hoe"),
STONE_PICKAXE("stone_pickaxe"),
STONE_SHOVEL("stone_shovel"),
STONE_SWORD("stone_sword"),
STRAY_SPAWN_EGG("stray_spawn_egg"),
STRIDER_SPAWN_EGG("strider_spawn_egg"),
STRING("string"),
SUGAR("sugar"),
SUSPICIOUS_STEW("suspicious_stew"),
SWEET_BERRIES("sweet_berries"),
TIPPED_ARROW("tipped_arrow"),
TNT_MINECART("tnt_minecart"),
TOTEM_OF_UNDYING("totem_of_undying"),
TRADER_LLAMA_SPAWN_EGG("trader_llama_spawn_egg"),
TRIDENT("trident"),
TROPICAL_FISH("tropical_fish"),
TROPICAL_FISH_BUCKET("tropical_fish_bucket"),
TROPICAL_FISH_SPAWN_EGG("tropical_fish_spawn_egg"),
TURTLE_HELMET("turtle_helmet"),
TURTLE_SPAWN_EGG("turtle_spawn_egg"),
VEX_SPAWN_EGG("vex_spawn_egg"),
VILLAGER_SPAWN_EGG("villager_spawn_egg"),
VINDICATOR_SPAWN_EGG("vindicator_spawn_egg"),
WANDERING_TRADER_SPAWN_EGG("wandering_trader_spawn_egg"),
WARPED_FUNGUS_ON_A_STICK("warped_fungus_on_a_stick"),
WATER_BUCKET("water_bucket"),
WHEAT("wheat"),
WHEAT_SEEDS("wheat_seeds"),
WHITE_DYE("white_dye"),
WITCH_SPAWN_EGG("witch_spawn_egg"),
WITHER_SKELETON_SPAWN_EGG("wither_skeleton_spawn_egg"),
WOLF_SPAWN_EGG("wolf_spawn_egg"),
WOODEN_AXE("wooden_axe"),
WOODEN_HOE("wooden_hoe"),
WOODEN_PICKAXE("wooden_pickaxe"),
WOODEN_SHOVEL("wooden_shovel"),
WOODEN_SWORD("wooden_sword"),
WRITABLE_BOOK("writable_book"),
WRITTEN_BOOK("written_book"),
YELLOW_DYE("yellow_dye"),
ZOGLIN_SPAWN_EGG("zoglin_spawn_egg"),
ZOMBIE_HORSE_SPAWN_EGG("zombie_horse_spawn_egg"),
ZOMBIE_SPAWN_EGG("zombie_spawn_egg"),
ZOMBIE_VILLAGER_SPAWN_EGG("zombie_villager_spawn_egg"),
ZOMBIFIED_PIGLIN_SPAWN_EGG("zombified_piglin_spawn_egg");
fun toPath(): ResourcePath
{
return ResourcePath.ofNamespace("minecraft", id)
}
}

View File

@ -0,0 +1,12 @@
package gay.pizza.foundation.drywall.enums
public enum class Lang(val value: String)
{
US_ENGLISH("en_us"),
FRENCH("fr_fr");
override fun toString(): String
{
return value
}
}

View File

@ -0,0 +1,22 @@
package gay.pizza.foundation.drywall.enums
enum class LootContextType(val value: String)
{
EMPTY("empty"),
CHEST("chest"),
COMMAND("command"),
SELECTOR("selector"),
FISHING("fishing"),
ENTITY("entity"),
GIFT("gift"),
BARTER("barter"),
ADVANCEMENT_REWARD("advancement_reward"),
ADVANCEMENT_ENTITY("advancement_entity"),
GENERIC("generic"),
BLOCK("block");
override fun toString(): String
{
return "minecraft:$value"
}
}

View File

@ -0,0 +1,18 @@
package gay.pizza.foundation.drywall.enums
enum class LootEntryType(val value: String)
{
ITEM("item"),
TAG("tag"),
LOOT_TABLE("loot_table"),
GROUP("group"),
ALTERNATIVES("alternatives"),
SEQUENCE("sequence"),
DYNAMIC("dynamic"),
EMPTY("empty");
override fun toString(): String
{
return "minecraft:$value"
}
}

View File

@ -0,0 +1,18 @@
package gay.pizza.foundation.drywall.enums
enum class MixinCompatibilityLevel
{
JAVA_6,
JAVA_7,
JAVA_8,
JAVA_9,
JAVA_10,
JAVA_11,
JAVA_12,
JAVA_13,
JAVA_14,
JAVA_15,
JAVA_16,
JAVA_17,
JAVA_18
}

View File

@ -0,0 +1,32 @@
package gay.pizza.foundation.drywall.enums
enum class RecipeType(val value: String, val special: String? = null)
{
BLASTING("blasting"),
COOKING("campfire_cooking"),
SHAPED("crafting_shaped"),
SHAPELESS("crafting_shapeless"),
SMELTING("smelting"),
SMITHING("smithing"),
SMOKING("smoking"),
STONECUTTING("stonecutting"),
SPECIAL_ARMORDYE("crafting_special_", "armordye"),
SPECIAL_BANNERDUPLICATE("crafting_special_", "bannerduplicate"),
SPECIAL_BOOKCLONING("crafting_special_", "bookcloning"),
SPECIAL_FIREWORK_ROCKET("crafting_special_", "firework_rocket"),
SPECIAL_FIREWORK_STAR("crafting_special_", "firework_star"),
SPECIAL_FIREWORK_STAR_FADE("crafting_special_", "firework_star_fade"),
SPECIAL_MAPCLONING("crafting_special_", "mapcloning"),
SPECIAL_MAPEXTENDING("crafting_special_", "mapextending"),
SPECIAL_REPAIRITEM("crafting_special_", "repairitem"),
SPECIAL_SHIELDDECORATION("crafting_special_", "shielddecoration"),
SPECIAL_SHULKERBOXCOLORING("crafting_special_", "shulkerboxcoloring"),
SPECIAL_TIPPEDARROW("crafting_special_", "tippedarrow"),
SPECIAL_SUSPICIOUSSTEW("crafting_special_", "suspiciousstew");
override fun toString(): String
{
return special?.let { "minecraft:$value$special" } ?: "minecraft:$value"
}
}

View File

@ -0,0 +1,30 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.enums.RecipeType
import kotlinx.serialization.Serializable
abstract class AbstractRecipeSettings(protected val type: RecipeType)
{
@Serializable
data class Recipe(
val type: String,
val group: String? = null,
val pattern: List<String>?,
val key: Map<String, Item>?,
val ingredients: List<Item>?,
val result: Result)
{
@Serializable
data class Item(
val item: String,
val tag: String? = null)
//TODO: this looks different in non crafting recipes
@Serializable
data class Result(
val count: Int? = null,
val item: String)
}
abstract fun serialisable(namespace: String, id: String): Recipe
}

View File

@ -0,0 +1,110 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.enums.Lang
import gay.pizza.foundation.drywall.enums.RecipeType
class BlockSettings(val id: String)
{
private val _displayNames: MutableMap<Lang, String> = mutableMapOf()
private var _tool: String? = null
private var _level: String? = null
private var _model: ModelSettings? = null
private var _itemModel: ModelSettings? = null
private var _blockState: BlockStateSettings? = null
private var _lootTable: LootTableSettings? = null
private var _recipes: MutableList<AbstractRecipeSettings> = mutableListOf()
val displayNames: Map<Lang, String> get() = _displayNames.toMap()
val tool: String? get() = _tool
val level: String? get() = _level
val model: ModelSettings? get() = _model
val itemModel: ModelSettings? get() = _itemModel
val blockState: BlockStateSettings? get() = _blockState
val lootTable: LootTableSettings? get() = _lootTable
val recipes: List<AbstractRecipeSettings> get() = _recipes.toList()
fun displayName(text: String, lang: Lang = Lang.US_ENGLISH): BlockSettings
{
this._displayNames[lang] = text
return this
}
fun needsTool(tool: String): BlockSettings
{
this._tool = tool
return this
}
fun needsToolLevel(level: String): BlockSettings
{
this._level = level
return this
}
fun model(settings: ModelSettings.() -> Unit): BlockSettings
{
return model(ModelSettings().apply(settings))
}
fun model(settings: ModelSettings): BlockSettings
{
this._model = settings
return this
}
fun itemModel(settings: ModelSettings.() -> Unit): BlockSettings
{
return itemModel(ModelSettings().apply(settings))
}
fun itemModel(settings: ModelSettings): BlockSettings
{
this._itemModel = settings
return this
}
fun blockState(settings: BlockStateSettings.() -> Unit): BlockSettings
{
return blockState(BlockStateSettings().apply(settings))
}
fun blockState(settings: BlockStateSettings): BlockSettings
{
this._blockState = settings
return this
}
fun lootTable(settings: LootTableSettings.() -> Unit): BlockSettings
{
return lootTable(LootTableSettings().apply(settings))
}
fun lootTable(settings: LootTableSettings): BlockSettings
{
this._lootTable = settings
return this
}
fun shapedRecipe(settings: ShapedRecipeSettings.() -> Unit): BlockSettings
{
return shapedRecipe(ShapedRecipeSettings().apply(settings))
}
fun shapedRecipe(settings: ShapedRecipeSettings): BlockSettings
{
this._recipes.add(settings)
return this
}
fun shapelessRecipe(settings: ShapelessRecipeSettings.() -> Unit): BlockSettings
{
return shapelessRecipe(ShapelessRecipeSettings().apply(settings))
}
fun shapelessRecipe(settings: ShapelessRecipeSettings): BlockSettings
{
this._recipes.add(settings)
return this
}
}

View File

@ -0,0 +1,105 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.util.ResourcePath
import kotlinx.serialization.Serializable
class BlockStateSettings
{
private data class Variant(
val model: ResourcePath,
val x: Int,
val y: Int,
val uvlock: Boolean)
companion object
{
const val STATE_NORMAL = ""
val DEFAULT_BLOCK_MODEL = BlockStateSettings()
.variant(model = ResourcePath.PATH_BLOCK_MODEL)
val DEFAULT_HORIZONTAL_FACING_VARIANTS = BlockStateSettings()
.horizontalFacingVariants()
val DEFAULT_AXIS_VARIANTS = BlockStateSettings()
.axisVariants()
val DEFAULT_HORIZONTAL_AXIS_VARIANTS = BlockStateSettings()
.horizontalAxisVariants()
}
private val variants: MutableMap<String, Variant> = mutableMapOf()
fun variant(state: String = STATE_NORMAL,
model: ResourcePath = ResourcePath.PATH_BLOCK_MODEL,
x: Int = 0,
y: Int = 0,
uvlock: Boolean = false): BlockStateSettings
{
variants[state] = Variant(model, x, y, uvlock)
return this
}
fun horizontalFacingVariants(extra: String, model: ResourcePath = ResourcePath.PATH_BLOCK_MODEL, yNorth: Int = 0): BlockStateSettings
{
variant("${extra},facing=north", model, y = Math.floorMod(yNorth, 360))
variant("${extra},facing=east", model, y = Math.floorMod(yNorth + 90, 360))
variant("${extra},facing=south", model, y = Math.floorMod(yNorth + 180, 360))
variant("${extra},facing=west", model, y = Math.floorMod(yNorth + 270, 360))
return this
}
fun horizontalFacingVariants(model: ResourcePath = ResourcePath.PATH_BLOCK_MODEL, yNorth: Int = 0): BlockStateSettings
{
variant("facing=north", model, y = Math.floorMod(yNorth, 360))
variant("facing=east", model, y = Math.floorMod(yNorth + 90, 360))
variant("facing=south", model, y = Math.floorMod(yNorth + 180, 360))
variant("facing=west", model, y = Math.floorMod(yNorth + 270, 360))
return this
}
fun axisVariants(extra: String, model: ResourcePath = ResourcePath.PATH_BLOCK_MODEL): BlockStateSettings
{
variant("${extra},axis=y", model)
variant("${extra},axis=z", model, x = 270)
variant("${extra},axis=x", model, x = 90, y = 90)
return this
}
fun axisVariants(model: ResourcePath = ResourcePath.PATH_BLOCK_MODEL): BlockStateSettings
{
variant("axis=y", model)
variant("axis=z", model, x = 270)
variant("axis=x", model, x = 90, y = 90)
return this
}
fun horizontalAxisVariants(model: ResourcePath = ResourcePath.PATH_BLOCK_MODEL, x: Int = 90, z: Int = 0): BlockStateSettings
{
variant("axis=x", model, y = Math.floorMod(x, 360))
variant("axis=z", model, y = Math.floorMod(z, 360))
return this
}
fun horizontalAxisVariants(extra: String, model: ResourcePath = ResourcePath.PATH_BLOCK_MODEL, x: Int = 90, z: Int = 0): BlockStateSettings
{
variant("${extra},axis=x", model, y = Math.floorMod(x, 360))
variant("${extra},axis=z", model, y = Math.floorMod(z, 360))
return this
}
@Serializable
data class BlockState(val variants: Map<String, Variant>)
{
@Serializable
data class Variant(val model: String, val x: Int? = null, val y: Int? = null, val uvlock: Boolean? = null)
}
fun serialisable(namespace: String, blockId: String): BlockState
{
return BlockState(this.variants.entries.associate {
it.key to BlockState.Variant(
it.value.model.resolve(namespace, blockId),
if (it.value.x != 0) it.value.x else null,
if (it.value.y != 0) it.value.y else null,
if (it.value.uvlock) true else null)
})
}
}

View File

@ -0,0 +1,147 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.enums.EntryPoint
import gay.pizza.foundation.drywall.enums.EnvironmentType
import kotlinx.serialization.Serializable
import org.gradle.api.internal.provider.MissingValueException
class FabricModSettings
{
private var _modId: String? = null
private var _version: String? = null
private var _name: String? = null
private var _description: String? = null
private var _license: String? = null
private var _icon: String? = null
private var _environment: EnvironmentType = EnvironmentType.EVERYWHERE
private val _authors: MutableList<String> = mutableListOf()
private val _entrypoints: MutableMap<EntryPoint, MutableList<String>> = mutableMapOf()
private val _depends: MutableMap<String, String> = mutableMapOf()
private val _mixins: MutableMap<String?, MixinSettings> = mutableMapOf()
val mixins: Map<String?, MixinSettings> get() = _mixins.toMap()
fun id(id: String): FabricModSettings
{
_modId = id
return this
}
fun version(version: Any): FabricModSettings
{
_version = "${version}"
return this
}
fun displayName(name: String): FabricModSettings
{
_name = name
return this
}
fun description(text: String): FabricModSettings
{
_description = text
return this
}
fun author(name: String): FabricModSettings
{
_authors.add(name)
return this
}
fun license(name: String): FabricModSettings
{
_license = name
return this
}
fun icon(path: String): FabricModSettings
{
_icon = path
return this
}
fun environment(environment: EnvironmentType): FabricModSettings
{
_environment = environment
return this
}
fun entryPoint(entryPoint: EntryPoint, vararg classPath: String): FabricModSettings
{
_entrypoints.getOrPut(entryPoint) { mutableListOf() } += classPath
return this
}
fun depends(modName: String, modVersion: String = "*"): FabricModSettings
{
_depends[modName] = modVersion
return this
}
fun mixins(settings: MixinSettings.() -> Unit): FabricModSettings
{
return mixins(MixinSettings().apply(settings))
}
fun mixins(settings: MixinSettings): FabricModSettings
{
_mixins.put(null, settings)
return this
}
fun mixins(name: String): FabricModSettings
{
return mixins(name, MixinSettings())
}
fun mixins(name: String, settings: MixinSettings.() -> Unit): FabricModSettings
{
return mixins(name, MixinSettings().apply(settings))
}
fun mixins(name: String, settings: MixinSettings): FabricModSettings
{
_mixins.put(name, settings)
return this
}
@Serializable
data class FabricMod(
val schemaVersion: Int,
val id: String,
val version: String,
val name: String?,
val description: String?,
val authors: List<String>?,
val license: String?,
val icon: String?,
val environment: String?,
val entrypoints: Map<String, List<String>>?,
val mixins: List<String>?,
val depends: Map<String, String>?)
fun serialisable(namespace: String): FabricMod
{
if (_version.isNullOrBlank())
throw MissingValueException("missing required version string")
return FabricMod(1,
_modId ?: namespace,
_version!!,
_name,
_description,
_authors,
_license,
_icon ?: "assets/$namespace/icon.png",
"$_environment",
_entrypoints.entries.associate { it.key.name to it.value.toList() },
mixins.ifEmpty { null }?.let{it.keys.map { it ?: "$namespace.mixins.json" } },
_depends)
}
}

View File

@ -0,0 +1,69 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.util.ResourcePath
import gay.pizza.foundation.drywall.enums.ConditionType
import gay.pizza.foundation.drywall.enums.LootContextType
import gay.pizza.foundation.drywall.enums.LootEntryType
import kotlinx.serialization.Serializable
class LootTableSettings
{
data class Pool(val rolls: Int, val entries: List<Entry>, val conditions: List<Predicate>)
{
data class Entry(val type: LootEntryType, val name: ResourcePath)
data class Predicate(val condition: ConditionType)
}
companion object
{
val DEFAULT_BLOCK = LootTableSettings()
.type(LootContextType.BLOCK)
.pool(1, listOf(
Pool.Entry(LootEntryType.ITEM, ResourcePath.PATH_BLOCK)
))
}
private var ctxType: LootContextType? = null
private val pools: MutableList<Pool> = mutableListOf()
fun type(type: LootContextType): LootTableSettings
{
this.ctxType = type
return this
}
fun pool(rolls: Int, entries: List<Pool.Entry>, conditions: List<Pool.Predicate> = emptyList()): LootTableSettings
{
this.pools.add(Pool(rolls, entries, conditions))
return this
}
@Serializable
data class LootTable(val type: String?, val pools: List<Pool>)
{
@Serializable
data class Pool(val rolls: Int, val entries: List<Entry>, val conditions: List<Predicate>? = null)
{
@Serializable
data class Predicate(val condition: String)
@Serializable
data class Entry(val type: String, val name: String)
}
}
fun serialisable(namespace: String, blockId: String): LootTable
{
// TODO: conditions
return LootTable(this.ctxType?.toString(), this.pools.map {
LootTable.Pool(
it.rolls,
it.entries.map {
LootTable.Pool.Entry(it.type.toString(), it.name.resolve(namespace, blockId))
},
if (it.conditions.isNotEmpty()) it.conditions.map {
LootTable.Pool.Predicate(it.condition.toString())
} else null
)
})
}
}

View File

@ -0,0 +1,85 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.enums.MixinCompatibilityLevel
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
class MixinSettings()
{
private var _packagePath: String? = null
private var _compatibilityLevel: MixinCompatibilityLevel? = null
private val _mixins: MutableList<String> = mutableListOf()
private val _client: MutableList<String> = mutableListOf()
private val _server: MutableList<String> = mutableListOf()
//private val _injectors: MutableMap<String, Int> = mutableMapOf()
val packagePath: String? get() = _packagePath
fun packagePath(path: String): MixinSettings
{
_packagePath = path
return this
}
fun compatibilityLevel(javaVersion: MixinCompatibilityLevel): MixinSettings
{
_compatibilityLevel = javaVersion
return this
}
fun mixin(className: String): MixinSettings
{
_mixins.add(className)
return this
}
fun clientMixin(className: String): MixinSettings
{
_client.add(className)
return this
}
fun serverMixin(className: String): MixinSettings
{
_server.add(className)
return this
}
//fun injector(className: String, what: Int): MixinSettings
//{
// _injectors.put(className, what)
// return this
//}
@Serializable
data class Mixins(
val required: Boolean,
val minVersion: String,
@SerialName("package") val packagePath: String,
val compatibilityLevel: String?,
val mixins: List<String>?,
val client: List<String>?,
val server: List<String>?)
//val injectors: Map<String, Int>?)
//TODO: injector settings
//defaultRequire: int
//defaultGroup: str
//namespace: str
//injectionPoints: list<str>
//dynamicSelectors: list<str>
//maxShiftBy: int
fun serialisable(): Mixins
{
return Mixins(
true,
"0.8",
_packagePath!!,
_compatibilityLevel?.let { "$it" },
_mixins.ifEmpty { null },
_client.ifEmpty { null },
_server.ifEmpty { null })
//_injectors.ifEmpty { null })
}
}

View File

@ -0,0 +1,29 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.util.ResourcePath
import kotlinx.serialization.Serializable
class ModelSettings
{
companion object
{
val DEFAULT_ITEM_BLOCK_MODEL = ModelSettings().parent(ResourcePath.PATH_BLOCK_MODEL)
}
private var parent: ResourcePath? = null
fun parent(path: ResourcePath): ModelSettings
{
this.parent = path
return this
}
@Serializable
data class Model(val parent: String?, val textures: Map<String, String>? = null)
fun serialisable(namespace: String, blockId: String): Model
{
//TODO: textures
return Model(this.parent?.resolve(namespace, blockId))
}
}

View File

@ -0,0 +1,62 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.enums.Blocks
import gay.pizza.foundation.drywall.enums.Items
import gay.pizza.foundation.drywall.enums.RecipeType
import gay.pizza.foundation.drywall.util.ResourcePath
class ShapedRecipeSettings: AbstractRecipeSettings(RecipeType.SHAPED)
{
private val patternLines: MutableList<String> = mutableListOf()
private val keys: MutableMap<Char, ResourcePath> = mutableMapOf()
private var result: ResourcePath? = null
private var resultCount = 1
fun pattern(line1: String, line2: String, line3: String): ShapedRecipeSettings
{
patternLines.add(line1)
patternLines.add(line2)
patternLines.add(line3)
return this
}
fun key(key: Char, item: Items): ShapedRecipeSettings
{
return key(key, item.toPath())
}
fun key(key: Char, blockItem: Blocks): ShapedRecipeSettings
{
return key(key, blockItem.toPath())
}
fun key(key: Char, itemPath: ResourcePath): ShapedRecipeSettings
{
// TODO: Tag???
keys[key] = itemPath
return this
}
fun result(count: Int): ShapedRecipeSettings
{
resultCount = count
return this
}
fun result(itemPath: ResourcePath, count: Int = 1): ShapedRecipeSettings
{
result = itemPath
resultCount = count
return this
}
override fun serialisable(namespace: String, id: String): Recipe
{
return Recipe("$type", null,
this.patternLines.toList(),
this.keys.entries.associate { "${it.key}" to Recipe.Item(it.value.resolve(namespace, id)) },
null,
Recipe.Result(this.resultCount, result?.resolve(namespace, id) ?: "$namespace:$id")
)
}
}

View File

@ -0,0 +1,52 @@
package gay.pizza.foundation.drywall.settings
import gay.pizza.foundation.drywall.enums.Blocks
import gay.pizza.foundation.drywall.enums.Items
import gay.pizza.foundation.drywall.enums.RecipeType
import gay.pizza.foundation.drywall.util.ResourcePath
class ShapelessRecipeSettings: AbstractRecipeSettings(RecipeType.SHAPELESS)
{
private val ingredients: MutableList<ResourcePath> = mutableListOf()
private var result: ResourcePath? = null
private var resultCount = 1
fun ingredient(item: Items): ShapelessRecipeSettings
{
return ingredient(item.toPath())
}
fun ingredient(blockItem: Blocks): ShapelessRecipeSettings
{
return ingredient(blockItem.toPath())
}
fun ingredient(itemPath: ResourcePath): ShapelessRecipeSettings
{
ingredients.add(itemPath)
return this
}
fun result(count: Int): ShapelessRecipeSettings
{
resultCount = count
return this
}
fun result(itemPath: ResourcePath, count: Int = 1): ShapelessRecipeSettings
{
result = itemPath
resultCount = count
return this
}
override fun serialisable(namespace: String, id: String): Recipe
{
return Recipe("$type", null,
null,
null,
ingredients.map { Recipe.Item(it.resolve(namespace, id)) },
Recipe.Result(this.resultCount, result?.resolve(namespace, id) ?: "$namespace:$id")
)
}
}

View File

@ -0,0 +1,47 @@
package gay.pizza.foundation.drywall.util
class ResourcePath private constructor(private val namespace: String?, vararg path: String)
{
companion object
{
val ID = "*"
val PATH_BLOCK = ResourcePath.of(ID)
val PATH_BLOCK_MODEL = ResourcePath.of("block", ID)
fun of(vararg path: String): ResourcePath
{
return ResourcePath(null, *path)
}
fun ofNamespace(namespace: String, vararg path: String): ResourcePath
{
return ResourcePath(namespace, *path)
}
}
private val tokens: List<String>
init
{
this.tokens = path.asList()
}
fun resolve(namespace: String, id: String): String
{
return "${this.namespace ?: namespace}:${
tokens.joinToString(separator = "/") {
when (it)
{
ID -> id
else -> it
}
}}"
}
override fun toString(): String
{
val path = tokens.joinToString(separator = "/")
return namespace?.let { "$it:$path" } ?: path
}
}