diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d9f4e50539..ca78c5d3b0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,16 @@ jobs: path: gradle.properties properties: 'mod_id mod_name java_version' + - name: Read Lib Version + id: 'lib_version' + uses: Gu-ZT/toml-reader-action@1.0.0 + with: + file: gradle/libs.versions.toml + fields: | + versions.minecraft + versions.neoForge + versions.anvillib + - name: Setup Java ${{ steps.properties.outputs.java_version }} uses: actions/setup-java@v3.6.0 with: @@ -67,10 +77,16 @@ jobs: continue-on-error: true - name: gametest - uses: Anvil-Dev/dedicated-server-launch-test@1.21.1-neoforge + uses: Anvil-Dev/dedicated-server-launch-test@universal continue-on-error: false with: - mod: build/libs/anvilcraft-neoforge-${{ steps.version.outputs.version }}.jar + mods: | + build/libs/anvilcraft-neoforge-${{ steps.version.outputs.version }}.jar + minecraft_version: ${{ steps.lib_version.outputs.versions_minecraft }} + mod_loader: 'neoforge' + loader_version: ${{ steps.lib_version.outputs.versions_neoForge }} + extra-mods: "anvil-lib:${{ steps.lib_version.outputs.versions_anvillib }}" + quiet-setup: 'True' - name: publish neoforge mc mod uses: Kir-Antipov/mc-publish@v3.3 @@ -78,9 +94,9 @@ jobs: with: name: "${{ steps.properties.outputs.mod_name }} For NeoForge v${{ steps.version.outputs.version }}" version: ${{ steps.version.outputs.version }} - game-versions: 1.21.1 + game-versions: 26.1.2 version-type: ${{ env.VERSION_TYPE }} - java: 21 + java: ${{ steps.properties.outputs.java_version }} fail-mode: skip changelog: Early test version, please download and play with caution. 早期测试版本,请谨慎下载游玩 dependencies: | diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 47171a8df4..21c54effc9 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -29,6 +29,16 @@ jobs: path: gradle.properties properties: 'mod_id mod_name java_version' + - name: Read Lib Version + id: 'lib_version' + uses: Gu-ZT/toml-reader-action@1.0.0 + with: + file: gradle/libs.versions.toml + fields: | + versions.minecraft + versions.neoForge + versions.anvillib + - name: Setup Java ${{ steps.properties.outputs.java_version }} uses: actions/setup-java@v3.6.0 with: @@ -58,7 +68,12 @@ jobs: path: build/libs/anvilcraft-neoforge-${{ steps.version.outputs.version }}.jar - name: gametest - uses: Anvil-Dev/dedicated-server-launch-test@1.21.1-neoforge + uses: Anvil-Dev/dedicated-server-launch-test@universal with: - mod: build/libs/anvilcraft-neoforge-${{ steps.version.outputs.version }}.jar - extra-mods: patchouli:1.21-87-neoforge cloth-config:15.0.140+neoforge + mods: | + build/libs/anvilcraft-neoforge-${{ steps.version.outputs.version }}.jar + minecraft_version: ${{ steps.lib_version.outputs.versions_minecraft }} + mod_loader: 'neoforge' + loader_version: ${{ steps.lib_version.outputs.versions_neoForge }} + extra-mods: "anvil-lib:${{ steps.lib_version.outputs.versions_anvillib }}" + quiet-setup: 'True' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d3ce9b58d3..376b5610c2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -70,9 +70,9 @@ jobs: with: name: "${{ steps.properties.outputs.mod_name }} For NeoForge v${{ steps.version.outputs.version }}" version: ${{ steps.version.outputs.version }} - game-versions: 1.21.1 + game-versions: 26.1.2 version-type: ${{ env.VERSION_TYPE }} - java: 21 + java: ${{ steps.properties.outputs.java_version }} fail-mode: skip changelog: ${{ github.event.release.body }} dependencies: | diff --git a/.github/workflows/style_check.yml b/.github/workflows/style_check.yml index c47b7b6098..4792bd7783 100644 --- a/.github/workflows/style_check.yml +++ b/.github/workflows/style_check.yml @@ -14,17 +14,17 @@ jobs: uses: actions/checkout@v4 with: ref: refs/pull/${{ github.event.number }}/merge - - name: Setup Java 17 + - name: Setup Java 25 uses: actions/setup-java@v3.6.0 with: distribution: zulu - java-version: 17 + java-version: 25 - uses: reviewdog/action-setup@v1 with: reviewdog_version: latest - name: download checkstyle - run: curl -o checkstyle.jar -L https://github.com/checkstyle/checkstyle/releases/download/checkstyle-12.1.2/checkstyle-12.1.2-all.jar + run: curl -o checkstyle.jar -L https://github.com/checkstyle/checkstyle/releases/download/checkstyle-13.4.2/checkstyle-13.4.2-all.jar - name: checkstyle env: REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: java -jar checkstyle.jar -c style.xml -f xml src | reviewdog -f=checkstyle -name="Checkstyle" -reporter=github-pr-review -fail-level=any \ No newline at end of file + run: java -jar checkstyle.jar -c style.xml -f xml src | reviewdog -f=checkstyle -name="Checkstyle" -reporter=github-pr-review -fail-level=any diff --git a/build.gradle b/build.gradle index 6a1e3d695b..5033768f39 100644 --- a/build.gradle +++ b/build.gradle @@ -39,18 +39,24 @@ apply from: "$rootDir/gradle/scripts/resources.gradle" apply from: "$rootDir/dependencies.gradle" // Mojang ships Java 21 to end users starting in 1.20.5, so mods should target Java 21. -java.toolchain.languageVersion = JavaLanguageVersion.of(21) +java.toolchain.languageVersion = JavaLanguageVersion.of(java_version) // Include resources generated by data generators. sourceSets.main.resources { srcDir 'src/generated/resources' } compileJava.options.encoding = 'UTF-8' -machete { - // disable machete locally for faster builds - enabled = false -} +// disable machete locally for faster builds +machete.enabled = false + +lombok.version = "1.18.44" -lombok { - version = "1.18.34" +allprojects { + gradle.projectsEvaluated { + tasks.withType(JavaCompile).tap { + configureEach { + options.compilerArgs << "-Xmaxerrs" << "10000" + } + } + } } diff --git a/dependencies.gradle b/dependencies.gradle index a52d5ddd00..1206180915 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,21 +1,20 @@ dependencies { // AnvilLib - runtimeOnly(libs.anvillib) - compileOnly(libs.bundles.anvillib) + api(libs.anvillib) interfaceInjectionData(libs.anvillib.recipe) interfaceInjectionData(libs.anvillib.moveableEntityBlock) - jarJar(libs.anvillib) + // jarJar(libs.anvillib) // JEI - compileOnlyApi(libs.jei.common.api) { transitive = false } - compileOnlyApi(libs.jei.forge.api) { transitive = false } - implementation(libs.jei.forge) { transitive = false } + compileClasspath(libs.jei.common.api) { transitive = false } + compileClasspath(libs.jei.forge.api) { transitive = false } + compileClasspath(libs.jei.forge) { transitive = false } + runtimeClasspath(libs.jei.forge) { transitive = false } - // Sodium, Iris, Embeddium - compileOnly(libs.sodium) - compileOnly(libs.embeddium) - compileOnly(libs.iris) + // Sodium, Iris + compileClasspath(libs.sodium) + compileClasspath(libs.iris) // Jade - compileOnly(libs.jade) + compileClasspath(libs.jade) } diff --git a/gradle.properties b/gradle.properties index 15815e1c57..1d31c50be0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Jvm info -java_version=21 -org.gradle.jvmargs=-Xmx1G +java_version=25 +org.gradle.jvmargs=-Xmx2G org.gradle.daemon=false org.gradle.debug=false @@ -17,8 +17,8 @@ mod_url=https://github.com/Anvil-Dev/AnvilCraft # Development info maven_group=dev.dubhe -minecraft_version_range=[1.21,1.21.1) -neo_version_range=[21.0.0-beta,) +minecraft_version_range=[26.1,26.2) +neo_version_range=[26.1.0.0-beta,) # The loader version range can only use the major version of FML as bounds loader_version_range=[4,) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 43b8f2f280..339a5a711e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,39 +1,25 @@ [versions] -minecraft = "1.21.1" -neoForge = "21.1.219" -jei = "19.21.0.247" -jade = "15.3.4+neoforge" -parchment = "2024.11.17" -modDevGradle = "2.0.140" +minecraft = "26.1.2" +neoForge = "26.1.2.71" +jei = "29.6.2.31" +jade = "26.1.1+neoforge" +modDevGradle = "2.0.141" lombok = "8.7.1" -machete = "1.+" -anvillib = "2.0.0+snapshot.314" -sodium = "mc1.21.1-0.6.13-neoforge" -embeddium = "1.0.11+mc1.21.1" -iris = "1.8.1+1.21.1-neoforge" +machete = "1.2.0" +anvillib = "2.0.0+snapshot.453" +sodium = "mc26.1.2-0.8.10-neoforge" +iris = "1.10.9+26.1-neoforge" [libraries] -jei-common-api = { group = "mezz.jei", name = "jei-1.21.1-common-api", version.ref = "jei" } -jei-forge-api = { group = "mezz.jei", name = "jei-1.21.1-neoforge-api", version.ref = "jei" } -jei-forge = { group = "mezz.jei", name = "jei-1.21.1-neoforge", version.ref = "jei" } +jei-common-api = { group = "mezz.jei", name = "jei-26.1.2-common-api", version.ref = "jei" } +jei-forge-api = { group = "mezz.jei", name = "jei-26.1.2-neoforge-api", version.ref = "jei" } +jei-forge = { group = "mezz.jei", name = "jei-26.1.2-neoforge", version.ref = "jei" } sodium = { group = "maven.modrinth", name = "sodium", version.ref = "sodium"} -embeddium = { group = "maven.modrinth", name = "embeddium", version.ref = "embeddium"} iris = { group = "maven.modrinth", name = "iris", version.ref = "iris"} jade = { group = "maven.modrinth", name = "jade", version.ref = "jade" } -anvillib-codec = { group = "dev.anvilcraft.lib", name = "anvillib-codec-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-config = { group = "dev.anvilcraft.lib", name = "anvillib-config-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-recipe = { group = "dev.anvilcraft.lib", name = "anvillib-recipe-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-registrum = { group = "dev.anvilcraft.lib", name = "anvillib-registrum-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-moveableEntityBlock = { group = "dev.anvilcraft.lib", name = "anvillib-moveable-entity-block-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-multiblock = { group = "dev.anvilcraft.lib", name = "anvillib-multiblock-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-network = { group = "dev.anvilcraft.lib", name = "anvillib-network-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-integration = { group = "dev.anvilcraft.lib", name = "anvillib-integration-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-util = { group = "dev.anvilcraft.lib", name = "anvillib-util-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-wheel = { group = "dev.anvilcraft.lib", name = "anvillib-wheel-neoforge-1.21.1", version.ref = "anvillib" } -anvillib = { group = "dev.anvilcraft.lib", name = "anvillib-neoforge-1.21.1", version.ref = "anvillib" } - -[bundles] -anvillib = [ "anvillib-codec", "anvillib-config", "anvillib-recipe", "anvillib-registrum", "anvillib-moveableEntityBlock", "anvillib-multiblock", "anvillib-network", "anvillib-integration", "anvillib-util", "anvillib-wheel" ] +anvillib-recipe = { group = "dev.anvilcraft.lib", name = "anvillib-recipe-neoforge-26.1", version.ref = "anvillib" } +anvillib-moveableEntityBlock = { group = "dev.anvilcraft.lib", name = "anvillib-moveable-entity-block-neoforge-26.1", version.ref = "anvillib" } +anvillib = { group = "dev.anvilcraft.lib", name = "anvillib-neoforge-26.1", version.ref = "anvillib" } [plugins] modDevGradle = { id = "net.neoforged.moddev", version.ref = "modDevGradle" } diff --git a/gradle/scripts/jars.gradle b/gradle/scripts/jars.gradle index beb0aab815..423b85e157 100644 --- a/gradle/scripts/jars.gradle +++ b/gradle/scripts/jars.gradle @@ -19,6 +19,4 @@ jar { } } -base { - archivesName = "${project.name}-${libs.versions.minecraft.get()}" -} +base.archivesName = "${project.name}-${libs.versions.minecraft.get()}" diff --git a/gradle/scripts/moddevgradle.gradle b/gradle/scripts/moddevgradle.gradle index a28e38a15f..7c4c5a8c4c 100644 --- a/gradle/scripts/moddevgradle.gradle +++ b/gradle/scripts/moddevgradle.gradle @@ -1,11 +1,6 @@ neoForge { version = libs.versions.neoForge.get() - parchment { - minecraftVersion = "1.21.1" - mappingsVersion = libs.versions.parchment.get() - } - // This line is optional. Access Transformers are automatically detected accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg') @@ -31,6 +26,8 @@ neoForge { jvmArgument "-XX:+AllowEnhancedClassRedefinition" } + jvmArgument "-XX:+IgnoreUnrecognizedVMOptions" + // Recommended logging level for the console // You can set various levels here. // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels @@ -43,6 +40,34 @@ neoForge { systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id } + clientMSA { + client() + devLogin = true + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id + } + + clientRenderDoc { + client() + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id + systemProperty 'anvillib.rendering.debugMode', 'true' + systemProperty('neoforge.rendernurse.renderdoc.library', file("libs/renderdoc.dll").absolutePath) + programArgument("--renderDebugLabels") + jvmArgument("-javaagent:" + file("libs/renderdoc-loader.jar").absolutePath) + } + + clientRenderDocMSA { + client() + devLogin = true + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id + systemProperty 'anvillib.rendering.debugMode', 'true' + systemProperty('neoforge.rendernurse.renderdoc.library', file("libs/renderdoc.dll").absolutePath) + programArgument("--renderDebugLabels") + jvmArgument("-javaagent:" + file("libs/renderdoc-loader.jar").absolutePath) + } + server { server() programArgument '--nogui' @@ -58,7 +83,7 @@ neoForge { } data { - data() + clientData() // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it // gameDirectory = project.file('run-data') diff --git a/gradle/scripts/publishing.gradle b/gradle/scripts/publishing.gradle index fa5db15117..39d53323e7 100644 --- a/gradle/scripts/publishing.gradle +++ b/gradle/scripts/publishing.gradle @@ -1,13 +1,13 @@ -artifacts { - archives tasks.jar - archives tasks.sourcesJar +tasks.named("assemble") { + dependsOn tasks.jar + dependsOn tasks.sourcesJar } publishing { publications { mavenJava(MavenPublication) { groupId = project.group - artifactId = project.archivesBaseName + artifactId = project.base.archivesName.get() version = project.version from components.java diff --git a/gradle/scripts/repositories.gradle b/gradle/scripts/repositories.gradle index d2747e6322..5991a2a942 100644 --- a/gradle/scripts/repositories.gradle +++ b/gradle/scripts/repositories.gradle @@ -8,11 +8,13 @@ repositories { url = "https://server.cjsah.net:1002/maven/" content { includeGroup "dev.anvilcraft.lib" + includeGroup "dev.dubhe" } } ) filter { includeGroup "dev.anvilcraft.lib" + includeGroup "dev.dubhe" } } maven { // Sodium, Embeddium, Iris, Jade diff --git a/gradle/scripts/resources.gradle b/gradle/scripts/resources.gradle index 8abbe13120..cff98551c8 100644 --- a/gradle/scripts/resources.gradle +++ b/gradle/scripts/resources.gradle @@ -11,18 +11,18 @@ def supporters = getConfig("supporters") // See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html tasks.withType(ProcessResources).configureEach { var replaceProperties = [ - minecraft_version : libs.versions.minecraft.get(), - minecraft_version_range: minecraft_version_range, - neo_version : libs.versions.neoForge.get(), - neo_version_range : neo_version_range, - loader_version_range : loader_version_range, - mod_id : mod_id, - mod_name : mod_name, - mod_license : mod_license, - mod_version : version, - mod_description : mod_description, - "contributors" : contributors, - "supporters" : supporters + minecraft_version : libs.versions.minecraft.get(), + minecraft_version_range : minecraft_version_range, + neo_version : libs.versions.neoForge.get(), + neo_version_range : neo_version_range, + loader_version_range : loader_version_range, + mod_id : mod_id, + mod_name : mod_name, + mod_license : mod_license, + mod_version : version, + mod_description : mod_description, + "contributors" : contributors, + "supporters" : supporters ] inputs.properties replaceProperties diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37f853b1c8..1a704683a0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 4c677d6a49..80bd0a9f9d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,15 +2,15 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - maven { url 'https://maven.neoforged.net/releases' } - maven { url "https://maven.fabricmc.net/" } - maven { url "https://maven.architectury.dev/" } - maven { url "https://maven.shedaniel.me/" } + maven { url = 'https://maven.neoforged.net/releases' } + maven { url = "https://maven.fabricmc.net/" } + maven { url = "https://maven.architectury.dev/" } + maven { url = "https://maven.shedaniel.me/" } } } plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' } rootProject.name = mod_id + "-neoforge" diff --git a/src/generated/resources/assets/anvilcraft/blockstates/black_chocolate_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/black_chocolate_slab.json index c902f59f82..586a1cb675 100644 --- a/src/generated/resources/assets/anvilcraft/blockstates/black_chocolate_slab.json +++ b/src/generated/resources/assets/anvilcraft/blockstates/black_chocolate_slab.json @@ -4,7 +4,7 @@ "model": "anvilcraft:block/black_chocolate_slab" }, "type=double": { - "model": "anvilcraft:block/black_chocolate_block" + "model": "anvilcraft:block/black_chocolate" }, "type=top": { "model": "anvilcraft:block/black_chocolate_slab_top" diff --git a/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete.json new file mode 100644 index 0000000000..0a35ff1d3b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/black_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/black_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/black_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_slab.json new file mode 100644 index 0000000000..fe35e088bf --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/black_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/black_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/black_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_stair.json new file mode 100644 index 0000000000..2ddad1fdf4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/black_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/black_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/black_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/black_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/black_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/black_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/black_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/black_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/black_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_wall.json new file mode 100644 index 0000000000..91faa30c07 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/black_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/black_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete.json new file mode 100644 index 0000000000..b2966c3645 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/blue_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/blue_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/blue_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..d82f1854dc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/blue_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/blue_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/blue_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..3eae44159c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/blue_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..7f1b3951e4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/blue_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/blue_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete.json new file mode 100644 index 0000000000..2299bd2a9e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/brown_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/brown_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/brown_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_slab.json new file mode 100644 index 0000000000..556cb234b4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/brown_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/brown_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/brown_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_stair.json new file mode 100644 index 0000000000..22f412c796 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/brown_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_wall.json new file mode 100644 index 0000000000..7743d4dfeb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/brown_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/brown_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/burning_heater.json b/src/generated/resources/assets/anvilcraft/blockstates/burning_heater.json new file mode 100644 index 0000000000..b7d5d72df3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/burning_heater.json @@ -0,0 +1,13 @@ +{ + "variants": { + "level=0": { + "model": "anvilcraft:block/burning_heater" + }, + "level=1": { + "model": "anvilcraft:block/burning_heater_smoldering" + }, + "level=2": { + "model": "anvilcraft:block/burning_heater_lit" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/chocolate_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/chocolate_slab.json index 79dd18f3c7..e9b122dbd6 100644 --- a/src/generated/resources/assets/anvilcraft/blockstates/chocolate_slab.json +++ b/src/generated/resources/assets/anvilcraft/blockstates/chocolate_slab.json @@ -4,7 +4,7 @@ "model": "anvilcraft:block/chocolate_slab" }, "type=double": { - "model": "anvilcraft:block/chocolate_block" + "model": "anvilcraft:block/chocolate" }, "type=top": { "model": "anvilcraft:block/chocolate_slab_top" diff --git a/src/generated/resources/assets/anvilcraft/blockstates/crate.json b/src/generated/resources/assets/anvilcraft/blockstates/crate.json new file mode 100644 index 0000000000..64358cd310 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/crate.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "anvilcraft:block/crate" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/cut_flint_pillar.json b/src/generated/resources/assets/anvilcraft/blockstates/cut_flint_pillar.json index 50ec48348f..b41fe5a29a 100644 --- a/src/generated/resources/assets/anvilcraft/blockstates/cut_flint_pillar.json +++ b/src/generated/resources/assets/anvilcraft/blockstates/cut_flint_pillar.json @@ -1,15 +1,14 @@ { "variants": { "axis=x": { - "model": "anvilcraft:block/cut_flint_pillar_horizontal", - "x": 90, - "y": 90 + "model": "anvilcraft:block/cut_flint_pillar", + "z": 90 }, "axis=y": { "model": "anvilcraft:block/cut_flint_pillar" }, "axis=z": { - "model": "anvilcraft:block/cut_flint_pillar_horizontal", + "model": "anvilcraft:block/cut_flint_pillar", "x": 90 } } diff --git a/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete.json new file mode 100644 index 0000000000..bd98d10bc7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/cyan_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/cyan_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/cyan_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_slab.json new file mode 100644 index 0000000000..14f70aabc8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/cyan_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/cyan_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/cyan_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_stair.json new file mode 100644 index 0000000000..60d2727217 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/cyan_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_wall.json new file mode 100644 index 0000000000..99d6bd584f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/cyan_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/fe_collector.json b/src/generated/resources/assets/anvilcraft/blockstates/fe_collector.json new file mode 100644 index 0000000000..7b8de9960d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/fe_collector.json @@ -0,0 +1,11 @@ +{ + "variants": { + "axis=x": { + "model": "anvilcraft:block/fe_collector_base" + }, + "axis=z": { + "model": "anvilcraft:block/fe_collector_base", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete.json new file mode 100644 index 0000000000..68319c3872 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/gray_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/gray_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/gray_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..ac3278ddd4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/gray_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/gray_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/gray_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..42e49c58d3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/gray_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..b957307075 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/gray_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/gray_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete.json new file mode 100644 index 0000000000..58de77e41d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/green_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/green_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/green_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_slab.json new file mode 100644 index 0000000000..4a2bccd74d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/green_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/green_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/green_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_stair.json new file mode 100644 index 0000000000..4e5d115d41 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/green_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/green_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/green_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/green_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/green_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/green_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/green_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/green_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/green_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_wall.json new file mode 100644 index 0000000000..5fff4afd4c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/green_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/green_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete.json new file mode 100644 index 0000000000..f907e748f4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/light_blue_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..150fec5c4f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/light_blue_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..0db1c019ea --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..60c30156ed --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/light_blue_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete.json new file mode 100644 index 0000000000..b718a4d387 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/light_gray_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..b35238063b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/light_gray_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..88ab15924b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..3e61af1591 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/light_gray_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete.json new file mode 100644 index 0000000000..ba47364a42 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/lime_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/lime_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/lime_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_slab.json new file mode 100644 index 0000000000..0913f1ce36 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/lime_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/lime_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/lime_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_stair.json new file mode 100644 index 0000000000..c88ae9625b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/lime_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_wall.json new file mode 100644 index 0000000000..61b218ba23 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/lime_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/lime_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete.json new file mode 100644 index 0000000000..b533e92462 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/magenta_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/magenta_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/magenta_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_slab.json new file mode 100644 index 0000000000..354187e54c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/magenta_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/magenta_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/magenta_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_stair.json new file mode 100644 index 0000000000..cf6ef40fed --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/magenta_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_wall.json new file mode 100644 index 0000000000..3cc095cb6d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/magenta_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete.json new file mode 100644 index 0000000000..7287f2f1ec --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/orange_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/orange_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/orange_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_slab.json new file mode 100644 index 0000000000..bd0c6d20b1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/orange_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/orange_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/orange_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_stair.json new file mode 100644 index 0000000000..89f2af9b77 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/orange_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_wall.json new file mode 100644 index 0000000000..17482198aa --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/orange_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/orange_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete.json new file mode 100644 index 0000000000..9c7187351a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/pink_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/pink_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/pink_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_slab.json new file mode 100644 index 0000000000..66adb50779 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/pink_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/pink_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/pink_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_stair.json new file mode 100644 index 0000000000..87e5e793b2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/pink_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_wall.json new file mode 100644 index 0000000000..a515789761 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/pink_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/pink_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete.json new file mode 100644 index 0000000000..82f4ea5d00 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/purple_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/purple_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/purple_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_slab.json new file mode 100644 index 0000000000..716e9a6d21 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/purple_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/purple_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/purple_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_stair.json new file mode 100644 index 0000000000..d9ca4dadca --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/purple_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_wall.json new file mode 100644 index 0000000000..4c2dd4f916 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/purple_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/purple_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete.json new file mode 100644 index 0000000000..1b0cabacbd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/red_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/red_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/red_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_slab.json new file mode 100644 index 0000000000..e849791941 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/red_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/red_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/red_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_stair.json new file mode 100644 index 0000000000..44aebfca1f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/red_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/red_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/red_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/red_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/red_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/red_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/red_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/red_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/red_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_wall.json new file mode 100644 index 0000000000..816ef2f709 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/red_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/red_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black.json deleted file mode 100644 index c7e5fb1918..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_black" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_black" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_black" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_slab.json deleted file mode 100644 index cb9b882c4b..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_black_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_black" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_black_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_stair.json deleted file mode 100644 index 7b20c1a300..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_black_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_black_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_black_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_black_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_black_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_black_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_black_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_black_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_black_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_wall.json deleted file mode 100644 index 4844c5ce8b..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_black_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_black_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue.json deleted file mode 100644 index e901f92307..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_blue" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_blue" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_blue" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_slab.json deleted file mode 100644 index a061bee7a9..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_blue_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_blue" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_blue_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_stair.json deleted file mode 100644 index b5478fce13..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_blue_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_wall.json deleted file mode 100644 index 05b266c539..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_blue_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_blue_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown.json deleted file mode 100644 index cfd3978a92..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_brown" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_brown" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_brown" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_slab.json deleted file mode 100644 index 3ad779ce46..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_brown_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_brown" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_brown_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_stair.json deleted file mode 100644 index 81cdf89dcc..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_brown_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_wall.json deleted file mode 100644 index 7d18baf4b4..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_brown_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_brown_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan.json deleted file mode 100644 index 320b5f25c2..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_cyan" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_cyan" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_cyan" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_slab.json deleted file mode 100644 index d3686159b4..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_cyan_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_cyan" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_cyan_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_stair.json deleted file mode 100644 index a7bbfe7996..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_cyan_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_wall.json deleted file mode 100644 index 6aa1663aed..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_cyan_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_cyan_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray.json deleted file mode 100644 index c1e904e628..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_gray" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_gray" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_gray" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_slab.json deleted file mode 100644 index 607c49a9bf..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_gray_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_gray" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_gray_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_stair.json deleted file mode 100644 index 3214fb950c..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_gray_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_wall.json deleted file mode 100644 index e596bf8de4..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_gray_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_gray_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green.json deleted file mode 100644 index bac5b5bb79..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_green" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_green" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_green" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_slab.json deleted file mode 100644 index 8746824724..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_green_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_green" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_green_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_stair.json deleted file mode 100644 index 8770543a18..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_green_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_green_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_green_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_green_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_green_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_green_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_green_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_green_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_green_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_wall.json deleted file mode 100644 index 9bba397d60..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_green_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_green_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue.json deleted file mode 100644 index d5b8832e81..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_light_blue" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_light_blue" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_light_blue" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_slab.json deleted file mode 100644 index 75377e8da4..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_light_blue" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_stair.json deleted file mode 100644 index 0afe735f46..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_wall.json deleted file mode 100644 index a5bc5d2138..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_blue_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_blue_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray.json deleted file mode 100644 index 3e11c9f8a4..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_light_gray" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_light_gray" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_light_gray" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_slab.json deleted file mode 100644 index 781afd236e..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_light_gray" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_stair.json deleted file mode 100644 index 71b4b0e1d8..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_wall.json deleted file mode 100644 index b8ef108017..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_light_gray_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_light_gray_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime.json deleted file mode 100644 index 5ae3b885d2..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_lime" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_lime" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_lime" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_slab.json deleted file mode 100644 index 2812c5d52f..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_lime_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_lime" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_lime_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_stair.json deleted file mode 100644 index a98e09f95a..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_lime_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_wall.json deleted file mode 100644 index 431a3cb033..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_lime_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_lime_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta.json deleted file mode 100644 index 0a5230c5a3..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_magenta" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_magenta" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_magenta" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_slab.json deleted file mode 100644 index 3efc2c5e05..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_magenta_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_magenta" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_magenta_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_stair.json deleted file mode 100644 index 76ac675521..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_magenta_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_wall.json deleted file mode 100644 index 72d0a0634a..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_magenta_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_magenta_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange.json deleted file mode 100644 index 38eb319cf0..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_orange" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_orange" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_orange" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_slab.json deleted file mode 100644 index f721430307..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_orange_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_orange" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_orange_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_stair.json deleted file mode 100644 index 559dbee286..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_orange_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_wall.json deleted file mode 100644 index 0fdc047eb1..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_orange_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_orange_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink.json deleted file mode 100644 index 1f18cdb8e2..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_pink" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_pink" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_pink" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_slab.json deleted file mode 100644 index dd855e3643..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_pink_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_pink" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_pink_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_stair.json deleted file mode 100644 index aceb282c55..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_pink_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_wall.json deleted file mode 100644 index c6101f97df..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_pink_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_pink_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple.json deleted file mode 100644 index f4d89ca86c..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_purple" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_purple" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_purple" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_slab.json deleted file mode 100644 index 573d22f81a..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_purple_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_purple" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_purple_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_stair.json deleted file mode 100644 index 0a09263f3c..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_purple_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_wall.json deleted file mode 100644 index ef8da8de8f..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_purple_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_purple_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red.json deleted file mode 100644 index a49afa7a27..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_red" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_red" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_red" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_slab.json deleted file mode 100644 index 09ba9f35e7..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_red_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_red" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_red_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_stair.json deleted file mode 100644 index a4f5ebd9cb..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_red_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_red_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_red_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_red_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_red_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_red_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_red_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_red_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_red_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_wall.json deleted file mode 100644 index a7f526f09e..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_red_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_red_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white.json deleted file mode 100644 index db5ead9ff3..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_white" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_white" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_white" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_slab.json deleted file mode 100644 index 465ebdf0c0..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_white_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_white" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_white_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_stair.json deleted file mode 100644 index 0be7b90d02..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_white_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_white_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_white_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_white_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_white_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_white_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_white_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_white_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_white_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_wall.json deleted file mode 100644 index 7f6199a760..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_white_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_white_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow.json deleted file mode 100644 index da3e6fafb4..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "half=bottom": { - "model": "anvilcraft:block/reinforced_concrete_bottom_yellow" - }, - "half=single": { - "model": "anvilcraft:block/reinforced_concrete_yellow" - }, - "half=top": { - "model": "anvilcraft:block/reinforced_concrete_top_yellow" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_slab.json deleted file mode 100644 index bd5918db24..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "anvilcraft:block/reinforced_concrete_yellow_slab" - }, - "type=double": { - "model": "anvilcraft:block/reinforced_concrete_yellow" - }, - "type=top": { - "model": "anvilcraft:block/reinforced_concrete_yellow_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_stair.json deleted file mode 100644 index f9dd69c4fb..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_stair.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair" - }, - "facing=east,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "anvilcraft:block/reinforced_concrete_yellow_stair", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_wall.json deleted file mode 100644 index 23ba3074e1..0000000000 --- a/src/generated/resources/assets/anvilcraft/blockstates/reinforced_concrete_yellow_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_post" - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_side_tall", - "uvlock": true, - "y": 90 - }, - "when": { - "east": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_side", - "uvlock": true - }, - "when": { - "north": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_side_tall", - "uvlock": true - }, - "when": { - "north": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_side_tall", - "uvlock": true, - "y": 180 - }, - "when": { - "south": "tall" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "low" - } - }, - { - "apply": { - "model": "anvilcraft:block/reinforced_concrete_yellow_wall_side_tall", - "uvlock": true, - "y": 270 - }, - "when": { - "west": "tall" - } - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/stamping_platform.json b/src/generated/resources/assets/anvilcraft/blockstates/stamping_platform.json index cb3d639c88..873ddb6735 100644 --- a/src/generated/resources/assets/anvilcraft/blockstates/stamping_platform.json +++ b/src/generated/resources/assets/anvilcraft/blockstates/stamping_platform.json @@ -1,32 +1,17 @@ { "variants": { - "facing=east,waterlogged=false": { + "facing=east": { "model": "anvilcraft:block/stamping_platform", "y": 90 }, - "facing=east,waterlogged=true": { - "model": "anvilcraft:block/stamping_platform", - "y": 90 - }, - "facing=north,waterlogged=false": { + "facing=north": { "model": "anvilcraft:block/stamping_platform" }, - "facing=north,waterlogged=true": { - "model": "anvilcraft:block/stamping_platform" - }, - "facing=south,waterlogged=false": { + "facing=south": { "model": "anvilcraft:block/stamping_platform", "y": 180 }, - "facing=south,waterlogged=true": { - "model": "anvilcraft:block/stamping_platform", - "y": 180 - }, - "facing=west,waterlogged=false": { - "model": "anvilcraft:block/stamping_platform", - "y": 270 - }, - "facing=west,waterlogged=true": { + "facing=west": { "model": "anvilcraft:block/stamping_platform", "y": 270 } diff --git a/src/generated/resources/assets/anvilcraft/blockstates/sugar_block.json b/src/generated/resources/assets/anvilcraft/blockstates/sugar_block.json index 496bf0752d..700268b9fc 100644 --- a/src/generated/resources/assets/anvilcraft/blockstates/sugar_block.json +++ b/src/generated/resources/assets/anvilcraft/blockstates/sugar_block.json @@ -4,13 +4,13 @@ "model": "anvilcraft:block/sugar_block" }, "fragmentation_degree=1": { - "model": "anvilcraft:block/sugar_block1" + "model": "anvilcraft:block/sugar_block_1" }, "fragmentation_degree=2": { - "model": "anvilcraft:block/sugar_block2" + "model": "anvilcraft:block/sugar_block_2" }, "fragmentation_degree=3": { - "model": "anvilcraft:block/sugar_block3" + "model": "anvilcraft:block/sugar_block_3" } } } \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/white_chocolate_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/white_chocolate_slab.json index 8b3a0366f7..6fee097b81 100644 --- a/src/generated/resources/assets/anvilcraft/blockstates/white_chocolate_slab.json +++ b/src/generated/resources/assets/anvilcraft/blockstates/white_chocolate_slab.json @@ -4,7 +4,7 @@ "model": "anvilcraft:block/white_chocolate_slab" }, "type=double": { - "model": "anvilcraft:block/white_chocolate_block" + "model": "anvilcraft:block/white_chocolate" }, "type=top": { "model": "anvilcraft:block/white_chocolate_slab_top" diff --git a/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete.json new file mode 100644 index 0000000000..66e19b5599 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/white_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/white_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/white_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_slab.json new file mode 100644 index 0000000000..3ad6c6c359 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/white_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/white_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/white_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_stair.json new file mode 100644 index 0000000000..b0932676f8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/white_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/white_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/white_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/white_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/white_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/white_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/white_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/white_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/white_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_wall.json new file mode 100644 index 0000000000..007069b9eb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/white_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/white_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete.json new file mode 100644 index 0000000000..6432ce2c0c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete.json @@ -0,0 +1,13 @@ +{ + "variants": { + "half=bottom": { + "model": "anvilcraft:block/yellow_reinforced_concrete_bottom" + }, + "half=single": { + "model": "anvilcraft:block/yellow_reinforced_concrete" + }, + "half=top": { + "model": "anvilcraft:block/yellow_reinforced_concrete_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_slab.json new file mode 100644 index 0000000000..b49ebc6814 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "anvilcraft:block/yellow_reinforced_concrete_slab" + }, + "type=double": { + "model": "anvilcraft:block/yellow_reinforced_concrete" + }, + "type=top": { + "model": "anvilcraft:block/yellow_reinforced_concrete_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_stair.json new file mode 100644 index 0000000000..fbf6e717fa --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_stair.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair" + }, + "facing=east,half=top,shape=inner_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "anvilcraft:block/yellow_reinforced_concrete_stair", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_wall.json new file mode 100644 index 0000000000..05274d1675 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/blockstates/yellow_reinforced_concrete_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/abnormal_amulet.json b/src/generated/resources/assets/anvilcraft/items/abnormal_amulet.json new file mode 100644 index 0000000000..6d8b7d4e29 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/abnormal_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/abnormal_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/acceleration_ring.json b/src/generated/resources/assets/anvilcraft/items/acceleration_ring.json new file mode 100644 index 0000000000..8362b446ee --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/acceleration_ring.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/acceleration_ring" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/activator_sliding_rail.json b/src/generated/resources/assets/anvilcraft/items/activator_sliding_rail.json new file mode 100644 index 0000000000..cfde81d585 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/activator_sliding_rail.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/activator_sliding_rail" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/active_silencer.json b/src/generated/resources/assets/anvilcraft/items/active_silencer.json new file mode 100644 index 0000000000..84746e8e1d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/active_silencer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/active_silencer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/advanced_comparator.json b/src/generated/resources/assets/anvilcraft/items/advanced_comparator.json new file mode 100644 index 0000000000..17f1acbb4d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/advanced_comparator.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/advanced_comparator" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/amber.json b/src/generated/resources/assets/anvilcraft/items/amber.json new file mode 100644 index 0000000000..e551c29763 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/amber.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/amber" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/amber_block.json b/src/generated/resources/assets/anvilcraft/items/amber_block.json new file mode 100644 index 0000000000..3a289802e1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/amber_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/amber_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/amethyst_axe.json b/src/generated/resources/assets/anvilcraft/items/amethyst_axe.json new file mode 100644 index 0000000000..d3448223c6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/amethyst_axe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/amethyst_axe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/amethyst_hoe.json b/src/generated/resources/assets/anvilcraft/items/amethyst_hoe.json new file mode 100644 index 0000000000..fc77eb475f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/amethyst_hoe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/amethyst_hoe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/amethyst_pickaxe.json b/src/generated/resources/assets/anvilcraft/items/amethyst_pickaxe.json new file mode 100644 index 0000000000..0e658aed0a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/amethyst_pickaxe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/amethyst_pickaxe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/amethyst_shovel.json b/src/generated/resources/assets/anvilcraft/items/amethyst_shovel.json new file mode 100644 index 0000000000..a970846d00 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/amethyst_shovel.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/amethyst_shovel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/amethyst_sword.json b/src/generated/resources/assets/anvilcraft/items/amethyst_sword.json new file mode 100644 index 0000000000..c6236e2cf8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/amethyst_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/amethyst_sword" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/amulet_box.json b/src/generated/resources/assets/anvilcraft/items/amulet_box.json new file mode 100644 index 0000000000..c29eefa636 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/amulet_box.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/amulet_box" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/anvil_amulet.json b/src/generated/resources/assets/anvilcraft/items/anvil_amulet.json new file mode 100644 index 0000000000..d3086a367b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/anvil_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/anvil_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/anvil_hammer.json b/src/generated/resources/assets/anvilcraft/items/anvil_hammer.json new file mode 100644 index 0000000000..e4d1b02152 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/anvil_hammer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/anvil_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/anvil_railgun.json b/src/generated/resources/assets/anvilcraft/items/anvil_railgun.json new file mode 100644 index 0000000000..5b9ccc882f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/anvil_railgun.json @@ -0,0 +1,19 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "anvilcraft:item/anvil_railgun" + }, + "on_true": { + "type": "minecraft:model", + "model": "anvilcraft:item/anvil_railgun_exhausted" + }, + "predicate": "anvilcraft:integer_component", + "property": "minecraft:component", + "value": { + "type": "anvilcraft:stored_energy", + "value": 0 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/arrow.json b/src/generated/resources/assets/anvilcraft/items/arrow.json new file mode 100644 index 0000000000..5acaff4efc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/arrow.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/arrow" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/batch_crafter.json b/src/generated/resources/assets/anvilcraft/items/batch_crafter.json new file mode 100644 index 0000000000..5e85f1fa7a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/batch_crafter.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/batch_crafter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/batch_cutter.json b/src/generated/resources/assets/anvilcraft/items/batch_cutter.json new file mode 100644 index 0000000000..443e372b47 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/batch_cutter.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/batch_cutter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/beef_mushroom_stew.json b/src/generated/resources/assets/anvilcraft/items/beef_mushroom_stew.json new file mode 100644 index 0000000000..0d90b378f7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/beef_mushroom_stew.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/beef_mushroom_stew" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/berry_cake_block.json b/src/generated/resources/assets/anvilcraft/items/berry_cake_block.json new file mode 100644 index 0000000000..4ba9ef3e1d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/berry_cake_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/berry_cake_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/berry_cream_block.json b/src/generated/resources/assets/anvilcraft/items/berry_cream_block.json new file mode 100644 index 0000000000..3592a58414 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/berry_cream_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/berry_cream_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/black_cement_bucket.json new file mode 100644 index 0000000000..8eba74964c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:black_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_chocolate_block.json b/src/generated/resources/assets/anvilcraft/items/black_chocolate_block.json new file mode 100644 index 0000000000..5f3091cf49 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_chocolate_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/black_chocolate_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_chocolate_slab.json b/src/generated/resources/assets/anvilcraft/items/black_chocolate_slab.json new file mode 100644 index 0000000000..e988fc071d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_chocolate_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/black_chocolate_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_chocolate_stairs.json b/src/generated/resources/assets/anvilcraft/items/black_chocolate_stairs.json new file mode 100644 index 0000000000..086ff3faf4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_chocolate_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/black_chocolate_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_hole.json b/src/generated/resources/assets/anvilcraft/items/black_hole.json new file mode 100644 index 0000000000..062666638d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_hole.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/black_hole" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete.json new file mode 100644 index 0000000000..3fd837e3ca --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/black_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_slab.json new file mode 100644 index 0000000000..280f6dfd8f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/black_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_stair.json new file mode 100644 index 0000000000..c4c9362ed0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/black_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_wall.json new file mode 100644 index 0000000000..d3f3165d96 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/black_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/black_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/block_comparator.json b/src/generated/resources/assets/anvilcraft/items/block_comparator.json new file mode 100644 index 0000000000..c84522f005 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/block_comparator.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/block_comparator" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/block_devourer.json b/src/generated/resources/assets/anvilcraft/items/block_devourer.json new file mode 100644 index 0000000000..6f58245bed --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/block_devourer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/block_devourer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/block_placer.json b/src/generated/resources/assets/anvilcraft/items/block_placer.json new file mode 100644 index 0000000000..763fdceca0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/block_placer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/block_placer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/blue_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/blue_cement_bucket.json new file mode 100644 index 0000000000..2281a9a702 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/blue_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:blue_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete.json new file mode 100644 index 0000000000..77fb890ae6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..5fc2c79e92 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/blue_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..5e6d12bcb7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/blue_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..42dde903fe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/blue_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/blue_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brass_block.json b/src/generated/resources/assets/anvilcraft/items/brass_block.json new file mode 100644 index 0000000000..947d2a3548 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brass_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/brass_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brass_ingot.json b/src/generated/resources/assets/anvilcraft/items/brass_ingot.json new file mode 100644 index 0000000000..20c1121988 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brass_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/brass_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brass_nugget.json b/src/generated/resources/assets/anvilcraft/items/brass_nugget.json new file mode 100644 index 0000000000..ad270a1d86 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brass_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/brass_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brass_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/brass_pressure_plate.json new file mode 100644 index 0000000000..2bb251d39d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brass_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/brass_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/bronze_block.json b/src/generated/resources/assets/anvilcraft/items/bronze_block.json new file mode 100644 index 0000000000..87062d04bf --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/bronze_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/bronze_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/bronze_ingot.json b/src/generated/resources/assets/anvilcraft/items/bronze_ingot.json new file mode 100644 index 0000000000..8769f6974e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/bronze_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/bronze_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/bronze_nugget.json b/src/generated/resources/assets/anvilcraft/items/bronze_nugget.json new file mode 100644 index 0000000000..05773c85cb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/bronze_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/bronze_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/bronze_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/bronze_pressure_plate.json new file mode 100644 index 0000000000..d2a3fea5e6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/bronze_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/bronze_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brown_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/brown_cement_bucket.json new file mode 100644 index 0000000000..c4c1fbf44a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brown_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:brown_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete.json new file mode 100644 index 0000000000..0b097714a2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/brown_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_slab.json new file mode 100644 index 0000000000..801ea5f465 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/brown_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_stair.json new file mode 100644 index 0000000000..5233718ed3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/brown_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_wall.json new file mode 100644 index 0000000000..31a2481c97 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/brown_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/brown_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/burning_heater.json b/src/generated/resources/assets/anvilcraft/items/burning_heater.json new file mode 100644 index 0000000000..4db3e9f060 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/burning_heater.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/burning_heater" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cake_base_block.json b/src/generated/resources/assets/anvilcraft/items/cake_base_block.json new file mode 100644 index 0000000000..d52dbc0b9d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cake_base_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cake_base_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cake_block.json b/src/generated/resources/assets/anvilcraft/items/cake_block.json new file mode 100644 index 0000000000..0b77f2d4c7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cake_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cake_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/canned_food.json b/src/generated/resources/assets/anvilcraft/items/canned_food.json new file mode 100644 index 0000000000..0fc9f936cc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/canned_food.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/canned_food" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/capacitor.json b/src/generated/resources/assets/anvilcraft/items/capacitor.json new file mode 100644 index 0000000000..32e7baf86c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/capacitor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/capacitor" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/capacitor_empty.json b/src/generated/resources/assets/anvilcraft/items/capacitor_empty.json new file mode 100644 index 0000000000..51f78bdb1e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/capacitor_empty.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/capacitor_empty" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cat_amulet.json b/src/generated/resources/assets/anvilcraft/items/cat_amulet.json new file mode 100644 index 0000000000..ef1dda1c24 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cat_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/cat_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil.json b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil.json new file mode 100644 index 0000000000..af48295406 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/celestial_forging_anvil" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_amplifier.json b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_amplifier.json new file mode 100644 index 0000000000..780f2645f9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_amplifier.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/celestial_forging_anvil_amplifier" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_fluid_interface.json b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_fluid_interface.json new file mode 100644 index 0000000000..cc36310245 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_fluid_interface.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/celestial_forging_anvil_fluid_interface" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_laser_interface.json b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_laser_interface.json new file mode 100644 index 0000000000..465c515915 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_laser_interface.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/celestial_forging_anvil_laser_interface" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_logistics_interface.json b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_logistics_interface.json new file mode 100644 index 0000000000..a15e71e4f8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_logistics_interface.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/celestial_forging_anvil_logistics_interface" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_portal.json b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_portal.json new file mode 100644 index 0000000000..7fbb450825 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/celestial_forging_anvil_portal.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/celestial_forging_anvil_portal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/charge_collector.json b/src/generated/resources/assets/anvilcraft/items/charge_collector.json new file mode 100644 index 0000000000..1271558618 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/charge_collector.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/charge_collector" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/charged_neutronium_ingot.json b/src/generated/resources/assets/anvilcraft/items/charged_neutronium_ingot.json new file mode 100644 index 0000000000..6d49a930cb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/charged_neutronium_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/charged_neutronium_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/charger.json b/src/generated/resources/assets/anvilcraft/items/charger.json new file mode 100644 index 0000000000..0a879d83d1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/charger.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/charger" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chocolate.json b/src/generated/resources/assets/anvilcraft/items/chocolate.json new file mode 100644 index 0000000000..e0cb3fe5a4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chocolate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/chocolate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chocolate_black.json b/src/generated/resources/assets/anvilcraft/items/chocolate_black.json new file mode 100644 index 0000000000..4d4e6a3351 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chocolate_black.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/chocolate_black" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chocolate_block.json b/src/generated/resources/assets/anvilcraft/items/chocolate_block.json new file mode 100644 index 0000000000..93b149174f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chocolate_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/chocolate_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chocolate_cake_block.json b/src/generated/resources/assets/anvilcraft/items/chocolate_cake_block.json new file mode 100644 index 0000000000..9f07b87965 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chocolate_cake_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/chocolate_cake_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chocolate_cream_block.json b/src/generated/resources/assets/anvilcraft/items/chocolate_cream_block.json new file mode 100644 index 0000000000..f65cf7e373 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chocolate_cream_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/chocolate_cream_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chocolate_slab.json b/src/generated/resources/assets/anvilcraft/items/chocolate_slab.json new file mode 100644 index 0000000000..58e1dd0c31 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chocolate_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/chocolate_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chocolate_stairs.json b/src/generated/resources/assets/anvilcraft/items/chocolate_stairs.json new file mode 100644 index 0000000000..666722fdc8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chocolate_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/chocolate_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chocolate_white.json b/src/generated/resources/assets/anvilcraft/items/chocolate_white.json new file mode 100644 index 0000000000..b1945813db --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chocolate_white.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/chocolate_white" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chromatic_stone.json b/src/generated/resources/assets/anvilcraft/items/chromatic_stone.json new file mode 100644 index 0000000000..5facdc3102 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chromatic_stone.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/chromatic_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/chute.json b/src/generated/resources/assets/anvilcraft/items/chute.json new file mode 100644 index 0000000000..0805d76e42 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/chute.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/chute" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cinerite.json b/src/generated/resources/assets/anvilcraft/items/cinerite.json new file mode 100644 index 0000000000..fa1a33a0e4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cinerite.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cinerite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/circuit_board.json b/src/generated/resources/assets/anvilcraft/items/circuit_board.json new file mode 100644 index 0000000000..440b395f19 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/circuit_board.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/circuit_board" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cocoa_butter.json b/src/generated/resources/assets/anvilcraft/items/cocoa_butter.json new file mode 100644 index 0000000000..502e94828e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cocoa_butter.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/cocoa_butter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cocoa_liquor.json b/src/generated/resources/assets/anvilcraft/items/cocoa_liquor.json new file mode 100644 index 0000000000..765fd8a3c9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cocoa_liquor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/cocoa_liquor" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cocoa_powder.json b/src/generated/resources/assets/anvilcraft/items/cocoa_powder.json new file mode 100644 index 0000000000..e46d7ef99d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cocoa_powder.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/cocoa_powder" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/comrade_amulet.json b/src/generated/resources/assets/anvilcraft/items/comrade_amulet.json new file mode 100644 index 0000000000..27fc90ffb8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/comrade_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/comrade_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/confined_energy_anvilon.json b/src/generated/resources/assets/anvilcraft/items/confined_energy_anvilon.json new file mode 100644 index 0000000000..fa86ee1ca4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/confined_energy_anvilon.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/confined_energy_anvilon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/confined_mass_anvilon.json b/src/generated/resources/assets/anvilcraft/items/confined_mass_anvilon.json new file mode 100644 index 0000000000..a229f1e3e9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/confined_mass_anvilon.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/confined_mass_anvilon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/confined_neutronium_ingot.json b/src/generated/resources/assets/anvilcraft/items/confined_neutronium_ingot.json new file mode 100644 index 0000000000..6e02e64dae --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/confined_neutronium_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/confined_neutronium_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/confined_space_anvilon.json b/src/generated/resources/assets/anvilcraft/items/confined_space_anvilon.json new file mode 100644 index 0000000000..30548171d3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/confined_space_anvilon.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/confined_space_anvilon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/confined_time_anvilon.json b/src/generated/resources/assets/anvilcraft/items/confined_time_anvilon.json new file mode 100644 index 0000000000..4d72744808 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/confined_time_anvilon.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/confined_time_anvilon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/confinement_chamber.json b/src/generated/resources/assets/anvilcraft/items/confinement_chamber.json new file mode 100644 index 0000000000..aa16200b19 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/confinement_chamber.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/confinement_chamber" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/controllable_sand.json b/src/generated/resources/assets/anvilcraft/items/controllable_sand.json new file mode 100644 index 0000000000..7efe4b1092 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/controllable_sand.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/controllable_sand" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/copper_nugget.json b/src/generated/resources/assets/anvilcraft/items/copper_nugget.json new file mode 100644 index 0000000000..7194b18ea7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/copper_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/copper_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/copper_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/copper_pressure_plate.json new file mode 100644 index 0000000000..be2ab71600 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/copper_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/copper_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/corrupted_beacon.json b/src/generated/resources/assets/anvilcraft/items/corrupted_beacon.json new file mode 100644 index 0000000000..bd3b774197 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/corrupted_beacon.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/corrupted_beacon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/crab_claw.json b/src/generated/resources/assets/anvilcraft/items/crab_claw.json new file mode 100644 index 0000000000..24ebdb28fa --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/crab_claw.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/crab_claw" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/crab_trap.json b/src/generated/resources/assets/anvilcraft/items/crab_trap.json new file mode 100644 index 0000000000..a11dbe6fbd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/crab_trap.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/crab_trap" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/crate.json b/src/generated/resources/assets/anvilcraft/items/crate.json new file mode 100644 index 0000000000..399ca7c516 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/crate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/crate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cream.json b/src/generated/resources/assets/anvilcraft/items/cream.json new file mode 100644 index 0000000000..602f23674b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cream.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/cream" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cream_block.json b/src/generated/resources/assets/anvilcraft/items/cream_block.json new file mode 100644 index 0000000000..341c6e22a6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cream_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cream_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/creamy_bread_roll.json b/src/generated/resources/assets/anvilcraft/items/creamy_bread_roll.json new file mode 100644 index 0000000000..c3cd88bf6c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/creamy_bread_roll.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/creamy_bread_roll" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/creative_generator.json b/src/generated/resources/assets/anvilcraft/items/creative_generator.json new file mode 100644 index 0000000000..6a9d276a52 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/creative_generator.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/creative_generator" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/crushing_table.json b/src/generated/resources/assets/anvilcraft/items/crushing_table.json new file mode 100644 index 0000000000..c2878b210a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/crushing_table.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/crushing_table" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cursed_gold_block.json b/src/generated/resources/assets/anvilcraft/items/cursed_gold_block.json new file mode 100644 index 0000000000..2035033edd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cursed_gold_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cursed_gold_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cursed_gold_ingot.json b/src/generated/resources/assets/anvilcraft/items/cursed_gold_ingot.json new file mode 100644 index 0000000000..7883559efd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cursed_gold_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/cursed_gold_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cursed_gold_nugget.json b/src/generated/resources/assets/anvilcraft/items/cursed_gold_nugget.json new file mode 100644 index 0000000000..412967abdc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cursed_gold_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/cursed_gold_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_block.json b/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_block.json new file mode 100644 index 0000000000..3ba4a68152 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_ember_metal_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_pillar.json b/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_pillar.json new file mode 100644 index 0000000000..d2dc6893e1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_pillar.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_ember_metal_pillar" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_slab.json b/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_slab.json new file mode 100644 index 0000000000..9db038a1a8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_ember_metal_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_stairs.json b/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_stairs.json new file mode 100644 index 0000000000..fe70b3bd54 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_ember_metal_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_ember_metal_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_flint_block.json b/src/generated/resources/assets/anvilcraft/items/cut_flint_block.json new file mode 100644 index 0000000000..a9e2c35d54 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_flint_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_flint_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_flint_pillar.json b/src/generated/resources/assets/anvilcraft/items/cut_flint_pillar.json new file mode 100644 index 0000000000..57fbfb6cf9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_flint_pillar.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_flint_pillar" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_flint_slab.json b/src/generated/resources/assets/anvilcraft/items/cut_flint_slab.json new file mode 100644 index 0000000000..4f2e219e15 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_flint_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_flint_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_flint_stairs.json b/src/generated/resources/assets/anvilcraft/items/cut_flint_stairs.json new file mode 100644 index 0000000000..4f0768ca39 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_flint_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_flint_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_block.json b/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_block.json new file mode 100644 index 0000000000..5398722de1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_frost_metal_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_pillar.json b/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_pillar.json new file mode 100644 index 0000000000..520d9cd1e7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_pillar.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_frost_metal_pillar" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_slab.json b/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_slab.json new file mode 100644 index 0000000000..87a062f48e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_frost_metal_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_stairs.json b/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_stairs.json new file mode 100644 index 0000000000..96156e02c7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_frost_metal_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_frost_metal_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_block.json b/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_block.json new file mode 100644 index 0000000000..2c8ac37cfb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_heavy_iron_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_slab.json b/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_slab.json new file mode 100644 index 0000000000..2585d05e75 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_heavy_iron_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_stairs.json b/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_stairs.json new file mode 100644 index 0000000000..52a7003c5b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_heavy_iron_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_heavy_iron_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_block.json b/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_block.json new file mode 100644 index 0000000000..d56a54fb8f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_royal_steel_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_pillar.json b/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_pillar.json new file mode 100644 index 0000000000..4e73753fb5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_pillar.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_royal_steel_pillar" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_slab.json b/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_slab.json new file mode 100644 index 0000000000..c51522789d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_royal_steel_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_stairs.json b/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_stairs.json new file mode 100644 index 0000000000..c4976dde1e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cut_royal_steel_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cut_royal_steel_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cyan_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/cyan_cement_bucket.json new file mode 100644 index 0000000000..f01b1995a3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cyan_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:cyan_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete.json new file mode 100644 index 0000000000..3c5017203e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cyan_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_slab.json new file mode 100644 index 0000000000..50216c73f6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cyan_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_stair.json new file mode 100644 index 0000000000..d2bbc6c269 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cyan_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_wall.json new file mode 100644 index 0000000000..af16b23a25 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/cyan_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/cyan_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deepslate_lead_ore.json b/src/generated/resources/assets/anvilcraft/items/deepslate_lead_ore.json new file mode 100644 index 0000000000..0d0da391d8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deepslate_lead_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/deepslate_lead_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deepslate_silver_ore.json b/src/generated/resources/assets/anvilcraft/items/deepslate_silver_ore.json new file mode 100644 index 0000000000..8c2f55de5d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deepslate_silver_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/deepslate_silver_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deepslate_tin_ore.json b/src/generated/resources/assets/anvilcraft/items/deepslate_tin_ore.json new file mode 100644 index 0000000000..215b1d2a55 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deepslate_tin_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/deepslate_tin_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deepslate_titanium_ore.json b/src/generated/resources/assets/anvilcraft/items/deepslate_titanium_ore.json new file mode 100644 index 0000000000..d7c6b42c0f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deepslate_titanium_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/deepslate_titanium_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deepslate_tungsten_ore.json b/src/generated/resources/assets/anvilcraft/items/deepslate_tungsten_ore.json new file mode 100644 index 0000000000..d77c31e0d1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deepslate_tungsten_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/deepslate_tungsten_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deepslate_uranium_ore.json b/src/generated/resources/assets/anvilcraft/items/deepslate_uranium_ore.json new file mode 100644 index 0000000000..5c4294fd5a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deepslate_uranium_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/deepslate_uranium_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deepslate_zinc_ore.json b/src/generated/resources/assets/anvilcraft/items/deepslate_zinc_ore.json new file mode 100644 index 0000000000..399d6fa86a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deepslate_zinc_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/deepslate_zinc_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deflection_ring.json b/src/generated/resources/assets/anvilcraft/items/deflection_ring.json new file mode 100644 index 0000000000..431788d3ca --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deflection_ring.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/deflection_ring" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/deformation_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/deformation_smithing_template.json new file mode 100644 index 0000000000..393ba688de --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/deformation_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/deformation_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/detector_sliding_rail.json b/src/generated/resources/assets/anvilcraft/items/detector_sliding_rail.json new file mode 100644 index 0000000000..d137b67b60 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/detector_sliding_rail.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/detector_sliding_rail" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/discharger.json b/src/generated/resources/assets/anvilcraft/items/discharger.json new file mode 100644 index 0000000000..cc0f79e063 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/discharger.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/discharger" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/disk.json b/src/generated/resources/assets/anvilcraft/items/disk.json new file mode 100644 index 0000000000..facb665f4f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/disk.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/disk" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/dog_amulet.json b/src/generated/resources/assets/anvilcraft/items/dog_amulet.json new file mode 100644 index 0000000000..f89e5441fa --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/dog_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/dog_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/dough.json b/src/generated/resources/assets/anvilcraft/items/dough.json new file mode 100644 index 0000000000..33ed249239 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/dough.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/dough" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/dragon_rod.json b/src/generated/resources/assets/anvilcraft/items/dragon_rod.json new file mode 100644 index 0000000000..36d9c6c5a2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/dragon_rod.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/dragon_rod" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/dyson_sphere_component.json b/src/generated/resources/assets/anvilcraft/items/dyson_sphere_component.json new file mode 100644 index 0000000000..135ff4a5ba --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/dyson_sphere_component.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/dyson_sphere_component" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/earth_core_shard.json b/src/generated/resources/assets/anvilcraft/items/earth_core_shard.json new file mode 100644 index 0000000000..4df781a1b7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/earth_core_shard.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/earth_core_shard" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/earth_core_shard_block.json b/src/generated/resources/assets/anvilcraft/items/earth_core_shard_block.json new file mode 100644 index 0000000000..f7d2dc79c7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/earth_core_shard_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/earth_core_shard_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/earth_core_shard_ore.json b/src/generated/resources/assets/anvilcraft/items/earth_core_shard_ore.json new file mode 100644 index 0000000000..396229769c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/earth_core_shard_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/earth_core_shard_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/eight_to_one_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/eight_to_one_smithing_template.json new file mode 100644 index 0000000000..063f218dcf --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/eight_to_one_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/eight_to_one_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_anvil.json b/src/generated/resources/assets/anvilcraft/items/ember_anvil.json new file mode 100644 index 0000000000..a45e784a32 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_anvil.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ember_anvil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_anvil_hammer.json b/src/generated/resources/assets/anvilcraft/items/ember_anvil_hammer.json new file mode 100644 index 0000000000..6497620992 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_anvil_hammer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_anvil_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_dragon_rod.json b/src/generated/resources/assets/anvilcraft/items/ember_dragon_rod.json new file mode 100644 index 0000000000..07cba9ad6f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_dragon_rod.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_dragon_rod" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_glass.json b/src/generated/resources/assets/anvilcraft/items/ember_glass.json new file mode 100644 index 0000000000..729d093132 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_glass.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ember_glass" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_grindstone.json b/src/generated/resources/assets/anvilcraft/items/ember_grindstone.json new file mode 100644 index 0000000000..01a4e67226 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_grindstone.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ember_grindstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_axe.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_axe.json new file mode 100644 index 0000000000..149c2ecde3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_axe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_axe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_block.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_block.json new file mode 100644 index 0000000000..da2665b329 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ember_metal_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_heavy_halberd.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_heavy_halberd.json new file mode 100644 index 0000000000..49e51a5463 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_heavy_halberd.json @@ -0,0 +1,14 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_heavy_halberd" + }, + "on_true": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_heavy_halberd_throwing" + }, + "property": "minecraft:using_item" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_hoe.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_hoe.json new file mode 100644 index 0000000000..e995360daf --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_hoe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_hoe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_ingot.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_ingot.json new file mode 100644 index 0000000000..2f96d85642 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_nugget.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_nugget.json new file mode 100644 index 0000000000..3b3b58b0bd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_pickaxe.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_pickaxe.json new file mode 100644 index 0000000000..5f2645d174 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_pickaxe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_pickaxe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_resonator.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_resonator.json new file mode 100644 index 0000000000..60fcc4ff16 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_resonator.json @@ -0,0 +1,41 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_resonance_axe" + }, + "when": "axe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_resonance_hoe" + }, + "when": "hoe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_resonance_pickaxe" + }, + "when": "pickaxe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_resonance_shovel" + }, + "when": "shovel" + } + ], + "component": "anvilcraft:resonate_mode", + "fallback": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_resonator" + }, + "property": "minecraft:component" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_shovel.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_shovel.json new file mode 100644 index 0000000000..e8288b0a00 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_shovel.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_shovel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_sword.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_sword.json new file mode 100644 index 0000000000..769b247521 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_sword" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_metal_upgrade_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/ember_metal_upgrade_smithing_template.json new file mode 100644 index 0000000000..d1100390c6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_metal_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ember_metal_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ember_smithing_table.json b/src/generated/resources/assets/anvilcraft/items/ember_smithing_table.json new file mode 100644 index 0000000000..a2609d79bc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ember_smithing_table.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ember_smithing_table" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/emerald_amulet.json b/src/generated/resources/assets/anvilcraft/items/emerald_amulet.json new file mode 100644 index 0000000000..2bb77f104d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/emerald_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/emerald_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/end_dust.json b/src/generated/resources/assets/anvilcraft/items/end_dust.json new file mode 100644 index 0000000000..072a6e1c86 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/end_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/end_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/energy_weapon_platform.json b/src/generated/resources/assets/anvilcraft/items/energy_weapon_platform.json new file mode 100644 index 0000000000..d1a60d2117 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/energy_weapon_platform.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/energy_weapon_platform" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/exp_bucket.json b/src/generated/resources/assets/anvilcraft/items/exp_bucket.json new file mode 100644 index 0000000000..ad3b62c52d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/exp_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:exp_fluid", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/exp_gem.json b/src/generated/resources/assets/anvilcraft/items/exp_gem.json new file mode 100644 index 0000000000..d578f7a776 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/exp_gem.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/exp_gem" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/exp_gem_block.json b/src/generated/resources/assets/anvilcraft/items/exp_gem_block.json new file mode 100644 index 0000000000..a9f6249fd2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/exp_gem_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/exp_gem_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/exposed_copper_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/exposed_copper_pressure_plate.json new file mode 100644 index 0000000000..db443e4d2d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/exposed_copper_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/exposed_copper_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/fe_collector.json b/src/generated/resources/assets/anvilcraft/items/fe_collector.json new file mode 100644 index 0000000000..cc601c426f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/fe_collector.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/fe_collector" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/feather_amulet.json b/src/generated/resources/assets/anvilcraft/items/feather_amulet.json new file mode 100644 index 0000000000..8862a541f8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/feather_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/feather_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ferrite_core_magnet_block.json b/src/generated/resources/assets/anvilcraft/items/ferrite_core_magnet_block.json new file mode 100644 index 0000000000..11c69fa96f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ferrite_core_magnet_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ferrite_core_magnet_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/filter.json b/src/generated/resources/assets/anvilcraft/items/filter.json new file mode 100644 index 0000000000..0c5e1d0a7f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/filter.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/filter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/fish_tank.json b/src/generated/resources/assets/anvilcraft/items/fish_tank.json new file mode 100644 index 0000000000..e8e0c5d98c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/fish_tank.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/fish_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/flint_block.json b/src/generated/resources/assets/anvilcraft/items/flint_block.json new file mode 100644 index 0000000000..44c29dd4a4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/flint_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/flint_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/flour.json b/src/generated/resources/assets/anvilcraft/items/flour.json new file mode 100644 index 0000000000..42ef167841 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/flour.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/flour" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/fluid_tank.json b/src/generated/resources/assets/anvilcraft/items/fluid_tank.json new file mode 100644 index 0000000000..6aeb5ea11f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/fluid_tank.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/four_to_one_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/four_to_one_smithing_template.json new file mode 100644 index 0000000000..0711a08334 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/four_to_one_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/four_to_one_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_anvil.json b/src/generated/resources/assets/anvilcraft/items/frost_anvil.json new file mode 100644 index 0000000000..ca08c46f9c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_anvil.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/frost_anvil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_glass.json b/src/generated/resources/assets/anvilcraft/items/frost_glass.json new file mode 100644 index 0000000000..05a2eb8b40 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_glass.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/frost_glass" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_grindstone.json b/src/generated/resources/assets/anvilcraft/items/frost_grindstone.json new file mode 100644 index 0000000000..36aa1cc252 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_grindstone.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/frost_grindstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_axe.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_axe.json new file mode 100644 index 0000000000..f176baa391 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_axe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_axe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_block.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_block.json new file mode 100644 index 0000000000..6a8ac9aa9b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/frost_metal_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_heavy_halberd.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_heavy_halberd.json new file mode 100644 index 0000000000..d2048c77cd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_heavy_halberd.json @@ -0,0 +1,14 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_heavy_halberd" + }, + "on_true": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_heavy_halberd_throwing" + }, + "property": "minecraft:using_item" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_hoe.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_hoe.json new file mode 100644 index 0000000000..5e45f27f37 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_hoe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_hoe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_ingot.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_ingot.json new file mode 100644 index 0000000000..6efa430756 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_nugget.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_nugget.json new file mode 100644 index 0000000000..ee8b24c989 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_pickaxe.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_pickaxe.json new file mode 100644 index 0000000000..8df8e7051e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_pickaxe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_pickaxe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_resonator.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_resonator.json new file mode 100644 index 0000000000..308aceb97a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_resonator.json @@ -0,0 +1,41 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_resonance_axe" + }, + "when": "axe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_resonance_hoe" + }, + "when": "hoe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_resonance_pickaxe" + }, + "when": "pickaxe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_resonance_shovel" + }, + "when": "shovel" + } + ], + "component": "anvilcraft:resonate_mode", + "fallback": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_resonator" + }, + "property": "minecraft:component" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_shovel.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_shovel.json new file mode 100644 index 0000000000..f6b570744c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_shovel.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_shovel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_sword.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_sword.json new file mode 100644 index 0000000000..47f4b84255 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_sword" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_metal_upgrade_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/frost_metal_upgrade_smithing_template.json new file mode 100644 index 0000000000..4c1695edfa --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_metal_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/frost_metal_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/frost_smithing_table.json b/src/generated/resources/assets/anvilcraft/items/frost_smithing_table.json new file mode 100644 index 0000000000..53c6f13023 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/frost_smithing_table.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/frost_smithing_table" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/gem_amulet.json b/src/generated/resources/assets/anvilcraft/items/gem_amulet.json new file mode 100644 index 0000000000..ea6e9da047 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/gem_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/gem_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/geode.json b/src/generated/resources/assets/anvilcraft/items/geode.json new file mode 100644 index 0000000000..788fe404ba --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/geode.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/geode" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/giant_anvil.json b/src/generated/resources/assets/anvilcraft/items/giant_anvil.json new file mode 100644 index 0000000000..232f182b4d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/giant_anvil.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/giant_anvil" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/glowing_netherite_block.json b/src/generated/resources/assets/anvilcraft/items/glowing_netherite_block.json new file mode 100644 index 0000000000..2f4e2eedc6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/glowing_netherite_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/glowing_netherite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/glowing_tungsten_block.json b/src/generated/resources/assets/anvilcraft/items/glowing_tungsten_block.json new file mode 100644 index 0000000000..72d7e70f0f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/glowing_tungsten_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/glowing_tungsten_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/gray_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/gray_cement_bucket.json new file mode 100644 index 0000000000..fca4bcfe7f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/gray_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:gray_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete.json new file mode 100644 index 0000000000..ec532a5001 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..11e7a298d9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/gray_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..ae0aa55b3c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/gray_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..61d8500b5e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/gray_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/gray_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/green_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/green_cement_bucket.json new file mode 100644 index 0000000000..04e2165400 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/green_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:green_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete.json new file mode 100644 index 0000000000..7e485a6171 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/green_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_slab.json new file mode 100644 index 0000000000..c4b8f9bf96 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/green_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_stair.json new file mode 100644 index 0000000000..b2807b0b46 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/green_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_wall.json new file mode 100644 index 0000000000..5ef2206f4d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/green_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/green_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/guide_book.json b/src/generated/resources/assets/anvilcraft/items/guide_book.json new file mode 100644 index 0000000000..dd02b7f130 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/guide_book.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/guide_book" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/gunpowder_block.json b/src/generated/resources/assets/anvilcraft/items/gunpowder_block.json new file mode 100644 index 0000000000..fedadbb629 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/gunpowder_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/gunpowder_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/hardend_resin.json b/src/generated/resources/assets/anvilcraft/items/hardend_resin.json new file mode 100644 index 0000000000..77bb889cc4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/hardend_resin.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/hardend_resin" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heat_collector.json b/src/generated/resources/assets/anvilcraft/items/heat_collector.json new file mode 100644 index 0000000000..a33d4b04c9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heat_collector.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heat_collector" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heated_netherite_block.json b/src/generated/resources/assets/anvilcraft/items/heated_netherite_block.json new file mode 100644 index 0000000000..73557da7c2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heated_netherite_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heated_netherite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heated_tungsten_block.json b/src/generated/resources/assets/anvilcraft/items/heated_tungsten_block.json new file mode 100644 index 0000000000..292bf1791c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heated_tungsten_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heated_tungsten_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heater.json b/src/generated/resources/assets/anvilcraft/items/heater.json new file mode 100644 index 0000000000..32fb9e13ea --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heater.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heater" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heavy_halberd_core.json b/src/generated/resources/assets/anvilcraft/items/heavy_halberd_core.json new file mode 100644 index 0000000000..a39d7c4333 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heavy_halberd_core.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/heavy_halberd_core" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heavy_iron_beam.json b/src/generated/resources/assets/anvilcraft/items/heavy_iron_beam.json new file mode 100644 index 0000000000..96e683f7fe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heavy_iron_beam.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/heavy_iron_beam" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heavy_iron_block.json b/src/generated/resources/assets/anvilcraft/items/heavy_iron_block.json new file mode 100644 index 0000000000..d547dc973d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heavy_iron_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heavy_iron_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heavy_iron_column.json b/src/generated/resources/assets/anvilcraft/items/heavy_iron_column.json new file mode 100644 index 0000000000..3e405fc80e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heavy_iron_column.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heavy_iron_column" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heavy_iron_door.json b/src/generated/resources/assets/anvilcraft/items/heavy_iron_door.json new file mode 100644 index 0000000000..266db5a488 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heavy_iron_door.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/heavy_iron_door" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heavy_iron_plate.json b/src/generated/resources/assets/anvilcraft/items/heavy_iron_plate.json new file mode 100644 index 0000000000..6ae8639e71 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heavy_iron_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heavy_iron_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heavy_iron_trapdoor.json b/src/generated/resources/assets/anvilcraft/items/heavy_iron_trapdoor.json new file mode 100644 index 0000000000..2e158b7f22 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heavy_iron_trapdoor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heavy_iron_trapdoor_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heavy_iron_wall.json b/src/generated/resources/assets/anvilcraft/items/heavy_iron_wall.json new file mode 100644 index 0000000000..c1f36c8106 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heavy_iron_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/heavy_iron_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/heliostats.json b/src/generated/resources/assets/anvilcraft/items/heliostats.json new file mode 100644 index 0000000000..c3de6a81bc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/heliostats.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/heliostats" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/hollow_magnet_block.json b/src/generated/resources/assets/anvilcraft/items/hollow_magnet_block.json new file mode 100644 index 0000000000..48383580b4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/hollow_magnet_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/hollow_magnet_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/hyperdimension_storage_station.json b/src/generated/resources/assets/anvilcraft/items/hyperdimension_storage_station.json new file mode 100644 index 0000000000..0e99c91d2b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/hyperdimension_storage_station.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/hyperdimension_storage_station" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/impact_pile.json b/src/generated/resources/assets/anvilcraft/items/impact_pile.json new file mode 100644 index 0000000000..1db2fded41 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/impact_pile.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/impact_pile" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/incandescent_netherite_block.json b/src/generated/resources/assets/anvilcraft/items/incandescent_netherite_block.json new file mode 100644 index 0000000000..2d8f0879c6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/incandescent_netherite_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/incandescent_netherite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/incandescent_tungsten_block.json b/src/generated/resources/assets/anvilcraft/items/incandescent_tungsten_block.json new file mode 100644 index 0000000000..91d1c50d4f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/incandescent_tungsten_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/incandescent_tungsten_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/induction_light.json b/src/generated/resources/assets/anvilcraft/items/induction_light.json new file mode 100644 index 0000000000..9d8ccdd94a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/induction_light.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/induction_light" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ionocraft.json b/src/generated/resources/assets/anvilcraft/items/ionocraft.json new file mode 100644 index 0000000000..18997f6212 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ionocraft.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ionocraft" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ionocraft_backpack.json b/src/generated/resources/assets/anvilcraft/items/ionocraft_backpack.json new file mode 100644 index 0000000000..5a55d8fdae --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ionocraft_backpack.json @@ -0,0 +1,19 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "anvilcraft:item/ionocraft_backpack" + }, + "on_true": { + "type": "minecraft:model", + "model": "anvilcraft:item/ionocraft_backpack_exhausted" + }, + "predicate": "anvilcraft:integer_component", + "property": "minecraft:component", + "value": { + "type": "anvilcraft:flight_time", + "value": 0 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/item_collector.json b/src/generated/resources/assets/anvilcraft/items/item_collector.json new file mode 100644 index 0000000000..71d725cd1c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/item_collector.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/item_collector" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/item_detector.json b/src/generated/resources/assets/anvilcraft/items/item_detector.json new file mode 100644 index 0000000000..3b386cea96 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/item_detector.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/item_detector" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/jewelcrafting_table.json b/src/generated/resources/assets/anvilcraft/items/jewelcrafting_table.json new file mode 100644 index 0000000000..7e0f7b7f39 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/jewelcrafting_table.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/jewelcrafting_table" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/large_cake.json b/src/generated/resources/assets/anvilcraft/items/large_cake.json new file mode 100644 index 0000000000..344fd0421f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/large_cake.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/large_cake" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/large_crate.json b/src/generated/resources/assets/anvilcraft/items/large_crate.json new file mode 100644 index 0000000000..4ebaba08b2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/large_crate.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/large_crate" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/large_fluid_tank.json b/src/generated/resources/assets/anvilcraft/items/large_fluid_tank.json new file mode 100644 index 0000000000..4d40a88a07 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/large_fluid_tank.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/large_fluid_tank" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/laser_receiver.json b/src/generated/resources/assets/anvilcraft/items/laser_receiver.json new file mode 100644 index 0000000000..c87112e092 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/laser_receiver.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/laser_receiver" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lead_block.json b/src/generated/resources/assets/anvilcraft/items/lead_block.json new file mode 100644 index 0000000000..7cb8cb01de --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lead_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/lead_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lead_ingot.json b/src/generated/resources/assets/anvilcraft/items/lead_ingot.json new file mode 100644 index 0000000000..2458d672cc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lead_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/lead_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lead_nugget.json b/src/generated/resources/assets/anvilcraft/items/lead_nugget.json new file mode 100644 index 0000000000..400b3f47f3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lead_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/lead_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lead_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/lead_pressure_plate.json new file mode 100644 index 0000000000..afb5109381 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lead_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/lead_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/levitation_powder.json b/src/generated/resources/assets/anvilcraft/items/levitation_powder.json new file mode 100644 index 0000000000..d8e56e3db8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/levitation_powder.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/levitation_powder" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/levitation_powder_block.json b/src/generated/resources/assets/anvilcraft/items/levitation_powder_block.json new file mode 100644 index 0000000000..ca33826568 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/levitation_powder_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/levitation_powder_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_blue_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/light_blue_cement_bucket.json new file mode 100644 index 0000000000..9bd215bebf --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_blue_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:light_blue_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete.json new file mode 100644 index 0000000000..9093f3825c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/light_blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..ee71478626 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/light_blue_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..ec1cc6c763 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/light_blue_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..3344f191ba --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_blue_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/light_blue_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_gray_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/light_gray_cement_bucket.json new file mode 100644 index 0000000000..2a54e45e92 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_gray_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:light_gray_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete.json new file mode 100644 index 0000000000..27723804e7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/light_gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..88a98b75ff --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/light_gray_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..bc92d0a4ec --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/light_gray_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..c366ed6252 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/light_gray_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/light_gray_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lime_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/lime_cement_bucket.json new file mode 100644 index 0000000000..9e982de29a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lime_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:lime_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lime_powder.json b/src/generated/resources/assets/anvilcraft/items/lime_powder.json new file mode 100644 index 0000000000..ca6eee2b12 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lime_powder.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/lime_powder" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete.json new file mode 100644 index 0000000000..1cdb741a40 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/lime_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_slab.json new file mode 100644 index 0000000000..2d52db487a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/lime_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_stair.json new file mode 100644 index 0000000000..8b5a02faff --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/lime_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_wall.json new file mode 100644 index 0000000000..86afbcfca7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/lime_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/lime_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/load_monitor.json b/src/generated/resources/assets/anvilcraft/items/load_monitor.json new file mode 100644 index 0000000000..d8cd9414a6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/load_monitor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/load_monitor_0" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magenta_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/magenta_cement_bucket.json new file mode 100644 index 0000000000..fb7c94b148 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magenta_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:magenta_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete.json new file mode 100644 index 0000000000..2a182bd406 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/magenta_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_slab.json new file mode 100644 index 0000000000..c933549afb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/magenta_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_stair.json new file mode 100644 index 0000000000..beea1b55e7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/magenta_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_wall.json new file mode 100644 index 0000000000..22b801a56b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magenta_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/magenta_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magnet.json b/src/generated/resources/assets/anvilcraft/items/magnet.json new file mode 100644 index 0000000000..a53cd7d4bd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magnet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/magnet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magnet_block.json b/src/generated/resources/assets/anvilcraft/items/magnet_block.json new file mode 100644 index 0000000000..50790d0472 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magnet_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/magnet_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magnet_ingot.json b/src/generated/resources/assets/anvilcraft/items/magnet_ingot.json new file mode 100644 index 0000000000..009280ac27 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magnet_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/magnet_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magnetic_chute.json b/src/generated/resources/assets/anvilcraft/items/magnetic_chute.json new file mode 100644 index 0000000000..e6726f45fe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magnetic_chute.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/magnetic_chute" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/magnetoelectric_core.json b/src/generated/resources/assets/anvilcraft/items/magnetoelectric_core.json new file mode 100644 index 0000000000..232d4a74db --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/magnetoelectric_core.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/magnetoelectric_core" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/melt_gem_bucket.json b/src/generated/resources/assets/anvilcraft/items/melt_gem_bucket.json new file mode 100644 index 0000000000..cde12c71a1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/melt_gem_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:melt_gem", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/menger_sponge.json b/src/generated/resources/assets/anvilcraft/items/menger_sponge.json new file mode 100644 index 0000000000..d1cbd8959e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/menger_sponge.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/menger_sponge" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/mineral_fountain.json b/src/generated/resources/assets/anvilcraft/items/mineral_fountain.json new file mode 100644 index 0000000000..953b36ebeb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/mineral_fountain.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/mineral_fountain" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/mob_amber_block.json b/src/generated/resources/assets/anvilcraft/items/mob_amber_block.json new file mode 100644 index 0000000000..7fe73e1712 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/mob_amber_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/mob_amber_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/multiphase_matter.json b/src/generated/resources/assets/anvilcraft/items/multiphase_matter.json new file mode 100644 index 0000000000..47771dab25 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/multiphase_matter.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multiphase_matter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/multiphase_matter_block.json b/src/generated/resources/assets/anvilcraft/items/multiphase_matter_block.json new file mode 100644 index 0000000000..cec961b73b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/multiphase_matter_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/multiphase_matter_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/multiphase_transcendium.json b/src/generated/resources/assets/anvilcraft/items/multiphase_transcendium.json new file mode 100644 index 0000000000..47d6b2fe8d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/multiphase_transcendium.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multiphase_transcendium" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/multitool.json b/src/generated/resources/assets/anvilcraft/items/multitool.json new file mode 100644 index 0000000000..9a548a164f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/multitool.json @@ -0,0 +1,77 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_brush" + }, + "when": "brush" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_carrot_on_a_stick" + }, + "when": "carrot_on_a_stick" + }, + { + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_fishing_rod" + }, + "on_true": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_fishing_rod_cast" + }, + "property": "minecraft:fishing_rod/cast" + }, + "when": "fishing_rod" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_flint_and_steel" + }, + "when": "flint_and_steel" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_magnet" + }, + "when": "magnet" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_shears" + }, + "when": "shears" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_spyglass" + }, + "when": "spyglass" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool_warped_fungus_on_a_stick" + }, + "when": "warped_fungus_on_a_stick" + } + ], + "component": "anvilcraft:multitool_mode", + "fallback": { + "type": "minecraft:model", + "model": "anvilcraft:item/multitool" + }, + "property": "minecraft:component" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/nature_amulet.json b/src/generated/resources/assets/anvilcraft/items/nature_amulet.json new file mode 100644 index 0000000000..64df8d39a0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/nature_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/nature_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/negative_matter.json b/src/generated/resources/assets/anvilcraft/items/negative_matter.json new file mode 100644 index 0000000000..49699dbbe5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/negative_matter.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/negative_matter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/negative_matter_block.json b/src/generated/resources/assets/anvilcraft/items/negative_matter_block.json new file mode 100644 index 0000000000..51b419a50a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/negative_matter_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/negative_matter_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/negative_matter_nugget.json b/src/generated/resources/assets/anvilcraft/items/negative_matter_nugget.json new file mode 100644 index 0000000000..1ec2291292 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/negative_matter_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/negative_matter_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/neoforge.json b/src/generated/resources/assets/anvilcraft/items/neoforge.json new file mode 100644 index 0000000000..c0d111631e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/neoforge.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/neoforge" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/nesting_shulker_box.json b/src/generated/resources/assets/anvilcraft/items/nesting_shulker_box.json new file mode 100644 index 0000000000..ba5394a4ab --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/nesting_shulker_box.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/nesting_shulker_box" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/nether_dust.json b/src/generated/resources/assets/anvilcraft/items/nether_dust.json new file mode 100644 index 0000000000..c54db835eb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/nether_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/nether_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/netherite_crystal_nucleus.json b/src/generated/resources/assets/anvilcraft/items/netherite_crystal_nucleus.json new file mode 100644 index 0000000000..6ae1168d41 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/netherite_crystal_nucleus.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/netherite_crystal_nucleus" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/neutron_irradiator.json b/src/generated/resources/assets/anvilcraft/items/neutron_irradiator.json new file mode 100644 index 0000000000..c4766c4c26 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/neutron_irradiator.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/neutron_irradiator" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/neutronium_ingot.json b/src/generated/resources/assets/anvilcraft/items/neutronium_ingot.json new file mode 100644 index 0000000000..2832add10b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/neutronium_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/neutronium_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/oil_bucket.json b/src/generated/resources/assets/anvilcraft/items/oil_bucket.json new file mode 100644 index 0000000000..7d2b4ec749 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/oil_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:oil", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/orange_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/orange_cement_bucket.json new file mode 100644 index 0000000000..e505e5859b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/orange_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:orange_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete.json new file mode 100644 index 0000000000..5290257dad --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/orange_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_slab.json new file mode 100644 index 0000000000..4acf2b49c2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/orange_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_stair.json new file mode 100644 index 0000000000..e9888e796a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/orange_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_wall.json new file mode 100644 index 0000000000..894bc925eb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/orange_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/orange_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/over_nesting_shulker_box.json b/src/generated/resources/assets/anvilcraft/items/over_nesting_shulker_box.json new file mode 100644 index 0000000000..0c9b78f68c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/over_nesting_shulker_box.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/over_nesting_shulker_box" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/overheated_ember_metal_block.json b/src/generated/resources/assets/anvilcraft/items/overheated_ember_metal_block.json new file mode 100644 index 0000000000..9b7e62de7f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/overheated_ember_metal_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/overheated_ember_metal_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/overseer.json b/src/generated/resources/assets/anvilcraft/items/overseer.json new file mode 100644 index 0000000000..98f7b4a2b5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/overseer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/overseer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/oxidized_copper_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/oxidized_copper_pressure_plate.json new file mode 100644 index 0000000000..edb0ecab29 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/oxidized_copper_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/oxidized_copper_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/penrose_sphere_component.json b/src/generated/resources/assets/anvilcraft/items/penrose_sphere_component.json new file mode 100644 index 0000000000..18a7d440e3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/penrose_sphere_component.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/penrose_sphere_component" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/permutation_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/permutation_smithing_template.json new file mode 100644 index 0000000000..6d061bfd81 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/permutation_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/permutation_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/piezoelectric_crystal.json b/src/generated/resources/assets/anvilcraft/items/piezoelectric_crystal.json new file mode 100644 index 0000000000..2273762003 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/piezoelectric_crystal.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/piezoelectric_crystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/pill.json b/src/generated/resources/assets/anvilcraft/items/pill.json new file mode 100644 index 0000000000..dd6fee9c4b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/pill.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/pill" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/pill_box.json b/src/generated/resources/assets/anvilcraft/items/pill_box.json new file mode 100644 index 0000000000..4b12d33e1e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/pill_box.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/pill_box" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/pink_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/pink_cement_bucket.json new file mode 100644 index 0000000000..077c2c39d5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/pink_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:pink_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete.json new file mode 100644 index 0000000000..e728733ec8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/pink_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_slab.json new file mode 100644 index 0000000000..9a684e21f5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/pink_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_stair.json new file mode 100644 index 0000000000..6cdcc362cd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/pink_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_wall.json new file mode 100644 index 0000000000..ab89acd172 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/pink_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/pink_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/plutonium_block.json b/src/generated/resources/assets/anvilcraft/items/plutonium_block.json new file mode 100644 index 0000000000..cc5befc7d9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/plutonium_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/plutonium_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/plutonium_ingot.json b/src/generated/resources/assets/anvilcraft/items/plutonium_ingot.json new file mode 100644 index 0000000000..b49384eca0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/plutonium_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/plutonium_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/plutonium_nugget.json b/src/generated/resources/assets/anvilcraft/items/plutonium_nugget.json new file mode 100644 index 0000000000..67e5563a9f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/plutonium_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/plutonium_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/plutonium_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/plutonium_pressure_plate.json new file mode 100644 index 0000000000..1cbd68350d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/plutonium_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/plutonium_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/polished_flint_block.json b/src/generated/resources/assets/anvilcraft/items/polished_flint_block.json new file mode 100644 index 0000000000..0e63df0e2f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/polished_flint_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/polished_flint_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_block.json b/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_block.json new file mode 100644 index 0000000000..5cf5301264 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/polished_heavy_iron_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_slab.json b/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_slab.json new file mode 100644 index 0000000000..6b1ddd01fc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/polished_heavy_iron_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_stairs.json b/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_stairs.json new file mode 100644 index 0000000000..8e1d44a7d1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/polished_heavy_iron_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/polished_heavy_iron_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/power_converter_big.json b/src/generated/resources/assets/anvilcraft/items/power_converter_big.json new file mode 100644 index 0000000000..516ab1c1eb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/power_converter_big.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/power_converter_big" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/power_converter_middle.json b/src/generated/resources/assets/anvilcraft/items/power_converter_middle.json new file mode 100644 index 0000000000..68ca26a205 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/power_converter_middle.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/power_converter_middle" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/power_converter_small.json b/src/generated/resources/assets/anvilcraft/items/power_converter_small.json new file mode 100644 index 0000000000..c0914f4840 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/power_converter_small.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/power_converter_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/powered_sliding_rail.json b/src/generated/resources/assets/anvilcraft/items/powered_sliding_rail.json new file mode 100644 index 0000000000..ab28739ebe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/powered_sliding_rail.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/powered_sliding_rail" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/prismarine_blade.json b/src/generated/resources/assets/anvilcraft/items/prismarine_blade.json new file mode 100644 index 0000000000..11a29155b4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/prismarine_blade.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/prismarine_blade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/prismarine_cluster.json b/src/generated/resources/assets/anvilcraft/items/prismarine_cluster.json new file mode 100644 index 0000000000..36c2fd3fdd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/prismarine_cluster.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/prismarine_cluster" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/processor.json b/src/generated/resources/assets/anvilcraft/items/processor.json new file mode 100644 index 0000000000..698bd5610a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/processor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/processor" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/propel_piston.json b/src/generated/resources/assets/anvilcraft/items/propel_piston.json new file mode 100644 index 0000000000..84d5736027 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/propel_piston.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/propel_piston" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/pulse_generator.json b/src/generated/resources/assets/anvilcraft/items/pulse_generator.json new file mode 100644 index 0000000000..a2d99dcbe4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/pulse_generator.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/pulse_generator" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/purple_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/purple_cement_bucket.json new file mode 100644 index 0000000000..bf4a6bc2e9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/purple_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:purple_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete.json new file mode 100644 index 0000000000..bd4d2fda3a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/purple_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_slab.json new file mode 100644 index 0000000000..c18eb38eac --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/purple_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_stair.json new file mode 100644 index 0000000000..f52e51ac3f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/purple_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_wall.json new file mode 100644 index 0000000000..7f3aee0131 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/purple_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/purple_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/quartz_sand.json b/src/generated/resources/assets/anvilcraft/items/quartz_sand.json new file mode 100644 index 0000000000..bf623f6a71 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/quartz_sand.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/quartz_sand" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_lead.json b/src/generated/resources/assets/anvilcraft/items/raw_lead.json new file mode 100644 index 0000000000..aee0343985 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_lead.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/raw_lead" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_lead_block.json b/src/generated/resources/assets/anvilcraft/items/raw_lead_block.json new file mode 100644 index 0000000000..56b78fb77c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_lead_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/raw_lead_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_silver.json b/src/generated/resources/assets/anvilcraft/items/raw_silver.json new file mode 100644 index 0000000000..b78b226e07 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_silver.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/raw_silver" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_silver_block.json b/src/generated/resources/assets/anvilcraft/items/raw_silver_block.json new file mode 100644 index 0000000000..e660a1dde2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_silver_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/raw_silver_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_tin.json b/src/generated/resources/assets/anvilcraft/items/raw_tin.json new file mode 100644 index 0000000000..95671c6820 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_tin.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/raw_tin" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_tin_block.json b/src/generated/resources/assets/anvilcraft/items/raw_tin_block.json new file mode 100644 index 0000000000..9ded8e0a57 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_tin_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/raw_tin_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_titanium.json b/src/generated/resources/assets/anvilcraft/items/raw_titanium.json new file mode 100644 index 0000000000..9bb901dd7c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_titanium.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/raw_titanium" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_titanium_block.json b/src/generated/resources/assets/anvilcraft/items/raw_titanium_block.json new file mode 100644 index 0000000000..9c8bb23e14 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_titanium_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/raw_titanium_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_tungsten.json b/src/generated/resources/assets/anvilcraft/items/raw_tungsten.json new file mode 100644 index 0000000000..d8dbfa35fe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_tungsten.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/raw_tungsten" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_tungsten_block.json b/src/generated/resources/assets/anvilcraft/items/raw_tungsten_block.json new file mode 100644 index 0000000000..ae92c12100 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_tungsten_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/raw_tungsten_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_uranium.json b/src/generated/resources/assets/anvilcraft/items/raw_uranium.json new file mode 100644 index 0000000000..10ca5b630b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_uranium.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/raw_uranium" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_uranium_block.json b/src/generated/resources/assets/anvilcraft/items/raw_uranium_block.json new file mode 100644 index 0000000000..3fb3344073 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_uranium_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/raw_uranium_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_zinc.json b/src/generated/resources/assets/anvilcraft/items/raw_zinc.json new file mode 100644 index 0000000000..9224f013eb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_zinc.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/raw_zinc" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/raw_zinc_block.json b/src/generated/resources/assets/anvilcraft/items/raw_zinc_block.json new file mode 100644 index 0000000000..40f3290c9a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/raw_zinc_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/raw_zinc_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/recovery_pearl.json b/src/generated/resources/assets/anvilcraft/items/recovery_pearl.json new file mode 100644 index 0000000000..61d5c195ff --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/recovery_pearl.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/recovery_pearl" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/red_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/red_cement_bucket.json new file mode 100644 index 0000000000..ec05b89734 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/red_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:red_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete.json new file mode 100644 index 0000000000..16e5ced55d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/red_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_slab.json new file mode 100644 index 0000000000..e5a7e88b9e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/red_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_stair.json new file mode 100644 index 0000000000..01b5177658 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/red_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_wall.json new file mode 100644 index 0000000000..e8f2f75f24 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/red_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/red_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/redhot_netherite_block.json b/src/generated/resources/assets/anvilcraft/items/redhot_netherite_block.json new file mode 100644 index 0000000000..0cff738ee6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/redhot_netherite_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/redhot_netherite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/redhot_tungsten_block.json b/src/generated/resources/assets/anvilcraft/items/redhot_tungsten_block.json new file mode 100644 index 0000000000..4f08c2d6b7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/redhot_tungsten_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/redhot_tungsten_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/remote_transmission_pole.json b/src/generated/resources/assets/anvilcraft/items/remote_transmission_pole.json new file mode 100644 index 0000000000..84b9b085a8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/remote_transmission_pole.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/remote_transmission_pole" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/resentful_amber_block.json b/src/generated/resources/assets/anvilcraft/items/resentful_amber_block.json new file mode 100644 index 0000000000..5e3afd54ff --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/resentful_amber_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/resentful_amber_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/resin.json b/src/generated/resources/assets/anvilcraft/items/resin.json new file mode 100644 index 0000000000..f9ddad2f82 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/resin.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/resin" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/resin_block.json b/src/generated/resources/assets/anvilcraft/items/resin_block.json new file mode 100644 index 0000000000..a62118da11 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/resin_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/resin_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/resonator_core.json b/src/generated/resources/assets/anvilcraft/items/resonator_core.json new file mode 100644 index 0000000000..95ad3826b3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/resonator_core.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/resonator_core" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/rotten_flesh_block.json b/src/generated/resources/assets/anvilcraft/items/rotten_flesh_block.json new file mode 100644 index 0000000000..27172610e6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/rotten_flesh_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/rotten_flesh_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_anvil.json b/src/generated/resources/assets/anvilcraft/items/royal_anvil.json new file mode 100644 index 0000000000..0161aaeec6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_anvil.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/royal_anvil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_anvil_hammer.json b/src/generated/resources/assets/anvilcraft/items/royal_anvil_hammer.json new file mode 100644 index 0000000000..2c19e7b487 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_anvil_hammer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_anvil_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_dragon_rod.json b/src/generated/resources/assets/anvilcraft/items/royal_dragon_rod.json new file mode 100644 index 0000000000..3437714270 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_dragon_rod.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_dragon_rod" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_grindstone.json b/src/generated/resources/assets/anvilcraft/items/royal_grindstone.json new file mode 100644 index 0000000000..aa0402380d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_grindstone.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/royal_grindstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_smithing_table.json b/src/generated/resources/assets/anvilcraft/items/royal_smithing_table.json new file mode 100644 index 0000000000..5ed8c8371d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_smithing_table.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/royal_smithing_table" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_axe.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_axe.json new file mode 100644 index 0000000000..e28cc695fa --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_axe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_steel_axe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_block.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_block.json new file mode 100644 index 0000000000..a23035c27a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/royal_steel_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_hoe.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_hoe.json new file mode 100644 index 0000000000..5d92a22348 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_hoe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_steel_hoe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_ingot.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_ingot.json new file mode 100644 index 0000000000..d98a73fd21 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_steel_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_nugget.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_nugget.json new file mode 100644 index 0000000000..3b473fac06 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_steel_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_pickaxe.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_pickaxe.json new file mode 100644 index 0000000000..42f00fbd25 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_pickaxe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_steel_pickaxe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_shovel.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_shovel.json new file mode 100644 index 0000000000..2da3d74d8f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_shovel.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_steel_shovel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_sword.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_sword.json new file mode 100644 index 0000000000..992a2195ef --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_steel_sword" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/royal_steel_upgrade_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/royal_steel_upgrade_smithing_template.json new file mode 100644 index 0000000000..68f31f8139 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/royal_steel_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/royal_steel_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ruby.json b/src/generated/resources/assets/anvilcraft/items/ruby.json new file mode 100644 index 0000000000..563d9f4210 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ruby.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ruby" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ruby_amulet.json b/src/generated/resources/assets/anvilcraft/items/ruby_amulet.json new file mode 100644 index 0000000000..39d7903497 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ruby_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/ruby_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ruby_block.json b/src/generated/resources/assets/anvilcraft/items/ruby_block.json new file mode 100644 index 0000000000..2fd101f2ea --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ruby_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ruby_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ruby_laser.json b/src/generated/resources/assets/anvilcraft/items/ruby_laser.json new file mode 100644 index 0000000000..d2f1c44284 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ruby_laser.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ruby_laser" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/ruby_prism.json b/src/generated/resources/assets/anvilcraft/items/ruby_prism.json new file mode 100644 index 0000000000..db531c05e4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/ruby_prism.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/ruby_prism" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sapphire.json b/src/generated/resources/assets/anvilcraft/items/sapphire.json new file mode 100644 index 0000000000..d6c227c922 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sapphire.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/sapphire" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sapphire_amulet.json b/src/generated/resources/assets/anvilcraft/items/sapphire_amulet.json new file mode 100644 index 0000000000..fecbce50ad --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sapphire_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/sapphire_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sapphire_block.json b/src/generated/resources/assets/anvilcraft/items/sapphire_block.json new file mode 100644 index 0000000000..8677d92fd5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sapphire_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/sapphire_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sea_heart_shell.json b/src/generated/resources/assets/anvilcraft/items/sea_heart_shell.json new file mode 100644 index 0000000000..a95e2a8ad8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sea_heart_shell.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/sea_heart_shell" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sea_heart_shell_shard.json b/src/generated/resources/assets/anvilcraft/items/sea_heart_shell_shard.json new file mode 100644 index 0000000000..206cf3e3ca --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sea_heart_shell_shard.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/sea_heart_shell_shard" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/seeds_pack.json b/src/generated/resources/assets/anvilcraft/items/seeds_pack.json new file mode 100644 index 0000000000..97dc766f5b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/seeds_pack.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/seeds_pack" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/shulker_container.json b/src/generated/resources/assets/anvilcraft/items/shulker_container.json new file mode 100644 index 0000000000..5c8da42297 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/shulker_container.json @@ -0,0 +1,7 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/shulker_container" + }, + "oversized_in_gui": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/silence_amulet.json b/src/generated/resources/assets/anvilcraft/items/silence_amulet.json new file mode 100644 index 0000000000..2b40a7bd93 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/silence_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/silence_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/silver_block.json b/src/generated/resources/assets/anvilcraft/items/silver_block.json new file mode 100644 index 0000000000..8a82d90fcc --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/silver_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/silver_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/silver_ingot.json b/src/generated/resources/assets/anvilcraft/items/silver_ingot.json new file mode 100644 index 0000000000..c1ceab40ef --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/silver_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/silver_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/silver_nugget.json b/src/generated/resources/assets/anvilcraft/items/silver_nugget.json new file mode 100644 index 0000000000..bb2e0dc436 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/silver_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/silver_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/silver_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/silver_pressure_plate.json new file mode 100644 index 0000000000..40d1ad666f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/silver_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/silver_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/singularity_crystal.json b/src/generated/resources/assets/anvilcraft/items/singularity_crystal.json new file mode 100644 index 0000000000..70b573023e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/singularity_crystal.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/singularity_crystal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sliding_rail.json b/src/generated/resources/assets/anvilcraft/items/sliding_rail.json new file mode 100644 index 0000000000..a810cc092a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sliding_rail.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/sliding_rail" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sliding_rail_stop.json b/src/generated/resources/assets/anvilcraft/items/sliding_rail_stop.json new file mode 100644 index 0000000000..6919c462d0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sliding_rail_stop.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/sliding_rail_stop" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/smooth_royal_steel_block.json b/src/generated/resources/assets/anvilcraft/items/smooth_royal_steel_block.json new file mode 100644 index 0000000000..02002fe3fe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/smooth_royal_steel_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/smooth_royal_steel_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/space_overcompressor.json b/src/generated/resources/assets/anvilcraft/items/space_overcompressor.json new file mode 100644 index 0000000000..5778286147 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/space_overcompressor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/space_overcompressor" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/spectral_anvil.json b/src/generated/resources/assets/anvilcraft/items/spectral_anvil.json new file mode 100644 index 0000000000..912d9a97a9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/spectral_anvil.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/spectral_anvil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/spectral_slingshot.json b/src/generated/resources/assets/anvilcraft/items/spectral_slingshot.json new file mode 100644 index 0000000000..c2b1a5fbf3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/spectral_slingshot.json @@ -0,0 +1,9 @@ +{ + "model": { + "type": "minecraft:special", + "base": "anvilcraft:item/spectral_slingshot", + "model": { + "type": "anvilcraft:spectral_slingshot" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/spectral_weapon_launcher.json b/src/generated/resources/assets/anvilcraft/items/spectral_weapon_launcher.json new file mode 100644 index 0000000000..3b58e3489e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/spectral_weapon_launcher.json @@ -0,0 +1,25 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "anvilcraft:item/spectral_weapon_launcher", + "model": { + "type": "anvilcraft:spectral_weapon_launcher" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "anvilcraft:item/spectral_weapon_launcher_off", + "model": { + "type": "anvilcraft:spectral_weapon_launcher" + } + }, + "predicate": "anvilcraft:integer_component", + "property": "minecraft:component", + "value": { + "type": "anvilcraft:stored_energy", + "value": 0 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sponge_gemmule.json b/src/generated/resources/assets/anvilcraft/items/sponge_gemmule.json new file mode 100644 index 0000000000..6075586a58 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sponge_gemmule.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/sponge_gemmule" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/stable_neutronium_ingot.json b/src/generated/resources/assets/anvilcraft/items/stable_neutronium_ingot.json new file mode 100644 index 0000000000..7a6e07bc0d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/stable_neutronium_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/stable_neutronium_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/stamping_platform.json b/src/generated/resources/assets/anvilcraft/items/stamping_platform.json new file mode 100644 index 0000000000..1474787fbd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/stamping_platform.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/stamping_platform" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/structure_tool.json b/src/generated/resources/assets/anvilcraft/items/structure_tool.json new file mode 100644 index 0000000000..981714c02d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/structure_tool.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "minecraft:item/paper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sturdy_deepslate.json b/src/generated/resources/assets/anvilcraft/items/sturdy_deepslate.json new file mode 100644 index 0000000000..56656105a3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sturdy_deepslate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/sturdy_deepslate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/sugar_block.json b/src/generated/resources/assets/anvilcraft/items/sugar_block.json new file mode 100644 index 0000000000..a6128cebfe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/sugar_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/sugar_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/supercapacitor.json b/src/generated/resources/assets/anvilcraft/items/supercapacitor.json new file mode 100644 index 0000000000..349538169b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/supercapacitor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/supercapacitor" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/supercapacitor_empty.json b/src/generated/resources/assets/anvilcraft/items/supercapacitor_empty.json new file mode 100644 index 0000000000..85b153bfa3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/supercapacitor_empty.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/supercapacitor_empty" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/supercritical_nesting_shulker_box.json b/src/generated/resources/assets/anvilcraft/items/supercritical_nesting_shulker_box.json new file mode 100644 index 0000000000..e0d20aa4f5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/supercritical_nesting_shulker_box.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/supercritical_nesting_shulker_box" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tempering_glass.json b/src/generated/resources/assets/anvilcraft/items/tempering_glass.json new file mode 100644 index 0000000000..c595ce0f62 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tempering_glass.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/tempering_glass" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tesla_tower.json b/src/generated/resources/assets/anvilcraft/items/tesla_tower.json new file mode 100644 index 0000000000..a056a1c638 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tesla_tower.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/tesla_tower_overall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tin_block.json b/src/generated/resources/assets/anvilcraft/items/tin_block.json new file mode 100644 index 0000000000..a0a9547667 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tin_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/tin_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tin_can.json b/src/generated/resources/assets/anvilcraft/items/tin_can.json new file mode 100644 index 0000000000..aaa87775a2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tin_can.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/tin_can" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tin_ingot.json b/src/generated/resources/assets/anvilcraft/items/tin_ingot.json new file mode 100644 index 0000000000..cf25179f00 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tin_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/tin_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tin_nugget.json b/src/generated/resources/assets/anvilcraft/items/tin_nugget.json new file mode 100644 index 0000000000..67a6b15a80 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tin_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/tin_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tin_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/tin_pressure_plate.json new file mode 100644 index 0000000000..6fba116684 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tin_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/tin_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/titanium_block.json b/src/generated/resources/assets/anvilcraft/items/titanium_block.json new file mode 100644 index 0000000000..a158af81d4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/titanium_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/titanium_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/titanium_ingot.json b/src/generated/resources/assets/anvilcraft/items/titanium_ingot.json new file mode 100644 index 0000000000..fc926ac192 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/titanium_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/titanium_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/titanium_nugget.json b/src/generated/resources/assets/anvilcraft/items/titanium_nugget.json new file mode 100644 index 0000000000..e91267edd3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/titanium_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/titanium_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/titanium_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/titanium_pressure_plate.json new file mode 100644 index 0000000000..3838b5392f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/titanium_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/titanium_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/topaz.json b/src/generated/resources/assets/anvilcraft/items/topaz.json new file mode 100644 index 0000000000..6151a354da --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/topaz.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/topaz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/topaz_amulet.json b/src/generated/resources/assets/anvilcraft/items/topaz_amulet.json new file mode 100644 index 0000000000..3e606e3b06 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/topaz_amulet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/topaz_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/topaz_block.json b/src/generated/resources/assets/anvilcraft/items/topaz_block.json new file mode 100644 index 0000000000..70129a3114 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/topaz_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/topaz_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/totem_of_rage.json b/src/generated/resources/assets/anvilcraft/items/totem_of_rage.json new file mode 100644 index 0000000000..ae2af0b07a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/totem_of_rage.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/totem_of_rage" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/totem_of_recovery.json b/src/generated/resources/assets/anvilcraft/items/totem_of_recovery.json new file mode 100644 index 0000000000..623000238d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/totem_of_recovery.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/totem_of_recovery" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendence_anvil.json b/src/generated/resources/assets/anvilcraft/items/transcendence_anvil.json new file mode 100644 index 0000000000..fd3df168d7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendence_anvil.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/transcendence_anvil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendence_anvil_hammer.json b/src/generated/resources/assets/anvilcraft/items/transcendence_anvil_hammer.json new file mode 100644 index 0000000000..efa8f0eac0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendence_anvil_hammer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_anvil_hammer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendence_dragon_rod.json b/src/generated/resources/assets/anvilcraft/items/transcendence_dragon_rod.json new file mode 100644 index 0000000000..7371ce8e3b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendence_dragon_rod.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_dragon_rod" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendence_heavy_halberd.json b/src/generated/resources/assets/anvilcraft/items/transcendence_heavy_halberd.json new file mode 100644 index 0000000000..1b635ef135 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendence_heavy_halberd.json @@ -0,0 +1,14 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_heavy_halberd" + }, + "on_true": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_heavy_halberd_throwing" + }, + "property": "minecraft:using_item" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendence_resonator.json b/src/generated/resources/assets/anvilcraft/items/transcendence_resonator.json new file mode 100644 index 0000000000..e8cf9b5b8b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendence_resonator.json @@ -0,0 +1,41 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_resonance_axe" + }, + "when": "axe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_resonance_hoe" + }, + "when": "hoe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_resonance_pickaxe" + }, + "when": "pickaxe" + }, + { + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_resonance_shovel" + }, + "when": "shovel" + } + ], + "component": "anvilcraft:resonate_mode", + "fallback": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendence_resonator" + }, + "property": "minecraft:component" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendium_block.json b/src/generated/resources/assets/anvilcraft/items/transcendium_block.json new file mode 100644 index 0000000000..da03fad22c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendium_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/transcendium_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendium_ingot.json b/src/generated/resources/assets/anvilcraft/items/transcendium_ingot.json new file mode 100644 index 0000000000..fcf797649e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendium_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendium_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendium_nugget.json b/src/generated/resources/assets/anvilcraft/items/transcendium_nugget.json new file mode 100644 index 0000000000..98333a9ff6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendium_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendium_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transcendium_upgrade_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/transcendium_upgrade_smithing_template.json new file mode 100644 index 0000000000..9a4919c60c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transcendium_upgrade_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transcendium_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transmission_pole.json b/src/generated/resources/assets/anvilcraft/items/transmission_pole.json new file mode 100644 index 0000000000..7ad8e85b92 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transmission_pole.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/transmission_pole" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/transparent_crafting_table.json b/src/generated/resources/assets/anvilcraft/items/transparent_crafting_table.json new file mode 100644 index 0000000000..c6029f97d1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/transparent_crafting_table.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/transparent_crafting_table" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tungsten_block.json b/src/generated/resources/assets/anvilcraft/items/tungsten_block.json new file mode 100644 index 0000000000..ea24b9aea0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tungsten_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/tungsten_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tungsten_ingot.json b/src/generated/resources/assets/anvilcraft/items/tungsten_ingot.json new file mode 100644 index 0000000000..78d6626ae3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tungsten_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/tungsten_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tungsten_nugget.json b/src/generated/resources/assets/anvilcraft/items/tungsten_nugget.json new file mode 100644 index 0000000000..f669280749 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tungsten_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/tungsten_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/tungsten_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/tungsten_pressure_plate.json new file mode 100644 index 0000000000..64d281c9ca --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/tungsten_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/tungsten_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/two_to_one_smithing_template.json b/src/generated/resources/assets/anvilcraft/items/two_to_one_smithing_template.json new file mode 100644 index 0000000000..20a4142a8b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/two_to_one_smithing_template.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/two_to_one_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/uranium_block.json b/src/generated/resources/assets/anvilcraft/items/uranium_block.json new file mode 100644 index 0000000000..f324d90f25 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/uranium_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/uranium_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/uranium_ingot.json b/src/generated/resources/assets/anvilcraft/items/uranium_ingot.json new file mode 100644 index 0000000000..90ce8d6485 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/uranium_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/uranium_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/uranium_nugget.json b/src/generated/resources/assets/anvilcraft/items/uranium_nugget.json new file mode 100644 index 0000000000..58d55b6b36 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/uranium_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/uranium_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/uranium_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/uranium_pressure_plate.json new file mode 100644 index 0000000000..80157762a8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/uranium_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/uranium_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/utusan.json b/src/generated/resources/assets/anvilcraft/items/utusan.json new file mode 100644 index 0000000000..6c80073d6f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/utusan.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/utusan" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/void_energy_collector.json b/src/generated/resources/assets/anvilcraft/items/void_energy_collector.json new file mode 100644 index 0000000000..ad5fe62eef --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/void_energy_collector.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/void_energy_collector" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/void_matter.json b/src/generated/resources/assets/anvilcraft/items/void_matter.json new file mode 100644 index 0000000000..5c0971384a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/void_matter.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/void_matter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/void_matter_block.json b/src/generated/resources/assets/anvilcraft/items/void_matter_block.json new file mode 100644 index 0000000000..79dd41bf65 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/void_matter_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/void_matter_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/void_stone.json b/src/generated/resources/assets/anvilcraft/items/void_stone.json new file mode 100644 index 0000000000..71be848c5a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/void_stone.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/void_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/weathered_copper_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/weathered_copper_pressure_plate.json new file mode 100644 index 0000000000..34749a8db4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/weathered_copper_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/weathered_copper_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/white_cement_bucket.json new file mode 100644 index 0000000000..85c1ae46ef --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:white_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_chocolate_block.json b/src/generated/resources/assets/anvilcraft/items/white_chocolate_block.json new file mode 100644 index 0000000000..3e533b2ae7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_chocolate_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/white_chocolate_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_chocolate_slab.json b/src/generated/resources/assets/anvilcraft/items/white_chocolate_slab.json new file mode 100644 index 0000000000..ef558cac11 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_chocolate_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/white_chocolate_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_chocolate_stairs.json b/src/generated/resources/assets/anvilcraft/items/white_chocolate_stairs.json new file mode 100644 index 0000000000..aa81b32453 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_chocolate_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/white_chocolate_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_hole.json b/src/generated/resources/assets/anvilcraft/items/white_hole.json new file mode 100644 index 0000000000..cf6d41b686 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_hole.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/white_hole" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete.json new file mode 100644 index 0000000000..cc0afaf67e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/white_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_slab.json new file mode 100644 index 0000000000..718f3aac5c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/white_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_stair.json new file mode 100644 index 0000000000..3bcaff44a7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/white_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_wall.json new file mode 100644 index 0000000000..1f790b2ab9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/white_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/white_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/wood_fiber.json b/src/generated/resources/assets/anvilcraft/items/wood_fiber.json new file mode 100644 index 0000000000..82125d8473 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/wood_fiber.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/wood_fiber" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/yellow_cement_bucket.json b/src/generated/resources/assets/anvilcraft/items/yellow_cement_bucket.json new file mode 100644 index 0000000000..9bdbaa0f2f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/yellow_cement_bucket.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "anvilcraft:yellow_cement", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete.json new file mode 100644 index 0000000000..5ef4b9ce36 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/yellow_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_slab.json new file mode 100644 index 0000000000..458eed5ea5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/yellow_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_stair.json new file mode 100644 index 0000000000..965be649e3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_stair.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/yellow_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_wall.json b/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_wall.json new file mode 100644 index 0000000000..f79ff3b039 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/yellow_reinforced_concrete_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/yellow_reinforced_concrete_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/zinc_block.json b/src/generated/resources/assets/anvilcraft/items/zinc_block.json new file mode 100644 index 0000000000..61c6cc6a95 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/zinc_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/zinc_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/zinc_ingot.json b/src/generated/resources/assets/anvilcraft/items/zinc_ingot.json new file mode 100644 index 0000000000..1e59b7cc90 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/zinc_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/zinc_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/zinc_nugget.json b/src/generated/resources/assets/anvilcraft/items/zinc_nugget.json new file mode 100644 index 0000000000..94afc09fd9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/zinc_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:item/zinc_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/items/zinc_pressure_plate.json b/src/generated/resources/assets/anvilcraft/items/zinc_pressure_plate.json new file mode 100644 index 0000000000..edf5e6de4a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/items/zinc_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "anvilcraft:block/zinc_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/lang/en_ud.json b/src/generated/resources/assets/anvilcraft/lang/en_ud.json index cf6f87ecd9..795d499c95 100644 --- a/src/generated/resources/assets/anvilcraft/lang/en_ud.json +++ b/src/generated/resources/assets/anvilcraft/lang/en_ud.json @@ -143,6 +143,12 @@ "anvilcraft.configuration.giant_anvil_max_shock_radius.tooltip": "ɹoᴉʌɐɥǝq ʞɔoɥs s,ꞁᴉʌuɐ ʇuɐᴉᵷ ɟo snᴉpɐɹ ɯnɯᴉxɐW", "anvilcraft.configuration.goggle_mode": "ǝpoW ǝꞁᵷᵷo⅁", "anvilcraft.configuration.goggle_mode.tooltip": "oɟuᴉ ǝꞁᵷᵷoᵷ ɹǝɯɯɐɥ ꞁᴉʌuɐ ǝɥʇ ɟo ǝpoɯ ǝɥ⟘", + "anvilcraft.configuration.ground_heave_particle_chance": "ǝɔuɐɥƆ ǝꞁɔᴉʇɹɐԀ ǝʌɐǝH punoɹ⅁", + "anvilcraft.configuration.ground_heave_particle_chance.tooltip": "sǝꞁɔᴉʇɹɐd ǝʌɐǝɥ punoɹᵷ suʍɐds ʞɔoꞁq ɥɔɐǝ (0˙⥝-0˙0) ʎʇᴉꞁᴉqɐqoɹԀ", + "anvilcraft.configuration.ground_heave_particle_count": "ʇunoƆ ǝꞁɔᴉʇɹɐԀ ǝʌɐǝH punoɹ⅁", + "anvilcraft.configuration.ground_heave_particle_count.tooltip": "ʇɔǝɟɟǝ ǝʌɐǝɥ punoɹᵷ ʎq pǝuʍɐds ʞɔoꞁq ɹǝd sǝꞁɔᴉʇɹɐd ɟo ɹǝqɯnN", + "anvilcraft.configuration.ground_heave_particles_enabled": "pǝꞁqɐuƎ sǝꞁɔᴉʇɹɐԀ ǝʌɐǝH punoɹ⅁", + "anvilcraft.configuration.ground_heave_particles_enabled.tooltip": "ɯsᴉuɐɥɔǝɯ ʞɔoɥs sɹǝᵷᵷᴉɹʇ ꞁᴉʌuɐ ʇuɐᴉᵷ uǝɥʍ punos puɐ sǝꞁɔᴉʇɹɐd ǝʌɐʍʞɔoɥs ǝʌɐǝɥ punoɹᵷ ǝꞁqɐuƎ", "anvilcraft.configuration.heliostats_detection_interval": "ꞁɐʌɹǝʇuᴉ uoᴉʇɔǝʇǝp sʇɐʇsoᴉꞁǝH", "anvilcraft.configuration.heliostats_detection_interval.tooltip": "suoᴉʇɔǝʇǝp ʇɐʇsoᴉꞁǝɥ uǝǝʍʇǝq sʞɔᴉʇ ɟo ɹǝqɯnu ǝɥ⟘", "anvilcraft.configuration.heliostats_render_distance": "ǝɔuɐʇsᴉᗡ ɹǝpuǝᴚ sʇɐʇsoᴉꞁǝH", @@ -153,6 +159,8 @@ "anvilcraft.configuration.induction_light_block_ripening_cooldown.tooltip": "uʍopꞁooɔ ᵷuᴉuǝdᴉɹ ʞɔoꞁq ʇɥᵷᴉꞁ uoᴉʇɔnpuI", "anvilcraft.configuration.induction_light_block_ripening_range": "ǝᵷuɐᴚ ᵷuᴉuǝdᴉᴚ ʞɔoꞁᗺ ʇɥᵷᴉꞀ uoᴉʇɔnpuI", "anvilcraft.configuration.induction_light_block_ripening_range.tooltip": "ǝᵷuɐɹ ᵷuᴉuǝdᴉɹ ʞɔoꞁq ʇɥᵷᴉꞁ uoᴉʇɔnpuI", + "anvilcraft.configuration.iono_craft_backpack_exhaust_particles_enabled": "pǝꞁqɐuƎ sǝꞁɔᴉʇɹɐԀ ʇsnɐɥxƎ ʞɔɐdʞɔɐᗺ ʇɟɐɹƆ ouoI", + "anvilcraft.configuration.iono_craft_backpack_exhaust_particles_enabled.tooltip": "ʞɔɐdʞɔɐq ʇɟɐɹɔouoᴉ ɥʇᴉʍ ᵷuᴉʎꞁɟ uǝɥʍ sǝꞁɔᴉʇɹɐd ʇsnɐɥxǝ ǝꞁqɐuƎ", "anvilcraft.configuration.iono_craft_backpack_hud": "pnH ʞɔɐdʞɔɐᗺ ʇɟɐɹƆ ouoI", "anvilcraft.configuration.iono_craft_backpack_hud.button": "pnH ʞɔɐdʞɔɐᗺ ʇɟɐɹƆ ouoI", "anvilcraft.configuration.iono_craft_backpack_hud.enabled": "pǝꞁqɐuƎ", @@ -234,17 +242,30 @@ "block.anvilcraft.black_chocolate_slab": "qɐꞁS ǝʇɐꞁoɔoɥƆ ʞɔɐꞁᗺ", "block.anvilcraft.black_chocolate_stairs": "sɹᴉɐʇS ǝʇɐꞁoɔoɥƆ ʞɔɐꞁᗺ", "block.anvilcraft.black_hole": "ǝꞁoH ʞɔɐꞁᗺ", + "block.anvilcraft.black_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞɔɐꞁᗺ", + "block.anvilcraft.black_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞɔɐꞁᗺ", + "block.anvilcraft.black_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞɔɐꞁᗺ", + "block.anvilcraft.black_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞɔɐꞁᗺ", "block.anvilcraft.block_comparator": "ɹoʇɐɹɐdɯoƆ ʞɔoꞁᗺ", "block.anvilcraft.block_devourer": "ɹǝɹnoʌǝᗡ ʞɔoꞁᗺ", "block.anvilcraft.block_placer": "ɹǝɔɐꞁԀ ʞɔoꞁᗺ", "block.anvilcraft.blue_cement": "ʇuǝɯǝƆ ǝnꞁᗺ", "block.anvilcraft.blue_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ǝnꞁᗺ", + "block.anvilcraft.blue_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ", + "block.anvilcraft.blue_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ", + "block.anvilcraft.blue_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ", + "block.anvilcraft.blue_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ", "block.anvilcraft.brass_block": "ssɐɹᗺ ɟo ʞɔoꞁᗺ", "block.anvilcraft.brass_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ssɐɹᗺ", "block.anvilcraft.bronze_block": "ǝzuoɹᗺ ɟo ʞɔoꞁᗺ", "block.anvilcraft.bronze_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ǝzuoɹᗺ", "block.anvilcraft.brown_cement": "ʇuǝɯǝƆ uʍoɹᗺ", "block.anvilcraft.brown_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ uʍoɹᗺ", + "block.anvilcraft.brown_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uʍoɹᗺ", + "block.anvilcraft.brown_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uʍoɹᗺ", + "block.anvilcraft.brown_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uʍoɹᗺ", + "block.anvilcraft.brown_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uʍoɹᗺ", + "block.anvilcraft.burning_heater": "ɹǝʇɐǝH ᵷuᴉuɹnᗺ", "block.anvilcraft.cake_base_block": "ʞɔoꞁᗺ ǝsɐᗺ ǝʞɐƆ", "block.anvilcraft.cake_block": "ʞɔoꞁᗺ ǝʞɐƆ", "block.anvilcraft.celestial_forging_anvil": "ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", @@ -252,6 +273,7 @@ "block.anvilcraft.celestial_forging_anvil_fluid_interface": "ǝɔɐɟɹǝʇuI pᴉnꞁℲ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", "block.anvilcraft.celestial_forging_anvil_laser_interface": "ǝɔɐɟɹǝʇuI ɹǝsɐꞀ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", "block.anvilcraft.celestial_forging_anvil_logistics_interface": "ǝɔɐɟɹǝʇuI sɔᴉʇsᴉᵷoꞀ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", + "block.anvilcraft.celestial_forging_anvil_portal": "ꞁɐʇɹoԀ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", "block.anvilcraft.charge_collector": "ɹoʇɔǝꞁꞁoƆ ǝᵷɹɐɥƆ", "block.anvilcraft.charger": "ɹǝᵷɹɐɥƆ", "block.anvilcraft.chocolate_block": "ǝʇɐꞁoɔoɥƆ ɟo ʞɔoꞁᗺ", @@ -272,6 +294,7 @@ "block.anvilcraft.copper_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɹǝddoƆ", "block.anvilcraft.corrupted_beacon": "uoɔɐǝᗺ pǝʇdnɹɹoƆ", "block.anvilcraft.crab_trap": "dɐɹ⟘ qɐɹƆ", + "block.anvilcraft.crate": "ǝʇɐɹƆ", "block.anvilcraft.cream_block": "ʞɔoꞁᗺ ɯɐǝɹƆ", "block.anvilcraft.creative_generator": "ɹoʇɐɹǝuǝ⅁ ǝʌᴉʇɐǝɹƆ", "block.anvilcraft.crushing_table": "ǝꞁqɐ⟘ ᵷuᴉɥsnɹƆ", @@ -297,6 +320,10 @@ "block.anvilcraft.cut_royal_steel_stairs": "sɹᴉɐʇS ꞁǝǝʇS ꞁɐʎoᴚ ʇnƆ", "block.anvilcraft.cyan_cement": "ʇuǝɯǝƆ uɐʎƆ", "block.anvilcraft.cyan_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ uɐʎƆ", + "block.anvilcraft.cyan_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uɐʎƆ", + "block.anvilcraft.cyan_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uɐʎƆ", + "block.anvilcraft.cyan_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uɐʎƆ", + "block.anvilcraft.cyan_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uɐʎƆ", "block.anvilcraft.deepslate_lead_ore": "ǝɹO pɐǝꞀ ǝʇɐꞁsdǝǝᗡ", "block.anvilcraft.deepslate_silver_ore": "ǝɹO ɹǝʌꞁᴉS ǝʇɐꞁsdǝǝᗡ", "block.anvilcraft.deepslate_tin_ore": "ǝɹO uᴉ⟘ ǝʇɐꞁsdǝǝᗡ", @@ -319,8 +346,8 @@ "block.anvilcraft.exp_fluid_cauldron": "uoɹpꞁnɐƆ pᴉnꞁℲ dxƎ", "block.anvilcraft.exp_gem_block": "ɯǝ⅁ ǝɔuǝᴉɹǝdxƎ ɟo ʞɔoꞁᗺ", "block.anvilcraft.exposed_copper_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɹǝddoƆ pǝsodxƎ", + "block.anvilcraft.fe_collector": "ɹoʇɔǝꞁꞁoƆ ƎℲ", "block.anvilcraft.ferrite_core_magnet_block": "ʇǝuᵷɐW ɟo ʞɔoꞁᗺ pǝɹoƆ-ǝʇᴉɹɹǝℲ", - "block.anvilcraft.fire_cauldron": "uoɹpꞁnɐƆ ǝɹᴉℲ", "block.anvilcraft.fish_tank": "ʞuɐ⟘ ɥsᴉℲ", "block.anvilcraft.flint_block": "ʞɔoꞁᗺ ʇuᴉꞁℲ", "block.anvilcraft.fluid_tank": "ʞuɐ⟘ pᴉnꞁℲ", @@ -334,8 +361,16 @@ "block.anvilcraft.glowing_tungsten_block": "uǝʇsᵷun⟘ ɟo ʞɔoꞁᗺ ᵷuᴉʍoꞁ⅁", "block.anvilcraft.gray_cement": "ʇuǝɯǝƆ ʎɐɹ⅁", "block.anvilcraft.gray_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ʎɐɹ⅁", + "block.anvilcraft.gray_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁", + "block.anvilcraft.gray_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁", + "block.anvilcraft.gray_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁", + "block.anvilcraft.gray_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁", "block.anvilcraft.green_cement": "ʇuǝɯǝƆ uǝǝɹ⅁", "block.anvilcraft.green_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ uǝǝɹ⅁", + "block.anvilcraft.green_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uǝǝɹ⅁", + "block.anvilcraft.green_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uǝǝɹ⅁", + "block.anvilcraft.green_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uǝǝɹ⅁", + "block.anvilcraft.green_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uǝǝɹ⅁", "block.anvilcraft.gunpowder_block": "ʞɔoꞁᗺ ɹǝpʍodun⅁", "block.anvilcraft.heat_collector": "ɹoʇɔǝꞁꞁoƆ ʇɐǝH", "block.anvilcraft.heat_collector.placement_too_close_to_another": "ɹoʇɔǝꞁꞁoɔ ʇɐǝɥ ɹǝɥʇouɐ oʇ ǝsoꞁɔ oo⟘", @@ -354,6 +389,7 @@ "block.anvilcraft.heliostats.placement_no_pos": "ʇǝs ʇou uoᴉʇᴉsod uoᴉʇɐᴉpɐɹɹI", "block.anvilcraft.hollow_magnet_block": "ʇǝuᵷɐW ɟo ʞɔoꞁᗺ pǝʍoꞁꞁoH", "block.anvilcraft.honey_cauldron": "uoɹpꞁnɐƆ ʎǝuoH", + "block.anvilcraft.hyperdimension_storage_station": "uoᴉʇɐʇS ǝᵷɐɹoʇS uoᴉsuǝɯᴉpɹǝdʎH", "block.anvilcraft.impact_pile": "ǝꞁᴉԀ ʇɔɐdɯI", "block.anvilcraft.incandescent_netherite_block": "ǝʇᴉɹǝɥʇǝN ɟo ʞɔoꞁᗺ ʇuǝɔsǝpuɐɔuI", "block.anvilcraft.incandescent_tungsten_block": "uǝʇsᵷun⟘ ɟo ʞɔoꞁᗺ ʇuǝɔsǝpuɐɔuI", @@ -362,6 +398,7 @@ "block.anvilcraft.item_detector": "ɹoʇɔǝʇǝᗡ ɯǝʇI", "block.anvilcraft.jewelcrafting_table": "ǝꞁqɐ⟘ ᵷuᴉʇɟɐɹƆ ꞁǝʍǝՐ", "block.anvilcraft.large_cake": "ǝʞɐƆ ǝᵷɹɐꞀ", + "block.anvilcraft.large_crate": "ǝʇɐɹƆ ǝᵷɹɐꞀ", "block.anvilcraft.large_fluid_tank": "ʞuɐ⟘ pᴉnꞁℲ ǝᵷɹɐꞀ", "block.anvilcraft.laser_receiver": "ɹǝʌᴉǝɔǝᴚ ɹǝsɐꞀ", "block.anvilcraft.lava_cauldron": "uoɹpꞁnɐƆ ɐʌɐꞀ", @@ -370,13 +407,29 @@ "block.anvilcraft.levitation_powder_block": "ɹǝpʍoԀ uoᴉʇɐʇᴉʌǝꞀ ɟo ʞɔoꞁᗺ", "block.anvilcraft.light_blue_cement": "ʇuǝɯǝƆ ǝnꞁᗺ ʇɥᵷᴉꞀ", "block.anvilcraft.light_blue_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ǝnꞁᗺ ʇɥᵷᴉꞀ", + "block.anvilcraft.light_blue_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ ʇɥᵷᴉꞀ", + "block.anvilcraft.light_blue_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ ʇɥᵷᴉꞀ", + "block.anvilcraft.light_blue_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ ʇɥᵷᴉꞀ", + "block.anvilcraft.light_blue_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ ʇɥᵷᴉꞀ", "block.anvilcraft.light_gray_cement": "ʇuǝɯǝƆ ʎɐɹ⅁ ʇɥᵷᴉꞀ", "block.anvilcraft.light_gray_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ʎɐɹ⅁ ʇɥᵷᴉꞀ", + "block.anvilcraft.light_gray_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁ ʇɥᵷᴉꞀ", + "block.anvilcraft.light_gray_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁ ʇɥᵷᴉꞀ", + "block.anvilcraft.light_gray_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁ ʇɥᵷᴉꞀ", + "block.anvilcraft.light_gray_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁ ʇɥᵷᴉꞀ", "block.anvilcraft.lime_cement": "ʇuǝɯǝƆ ǝɯᴉꞀ", "block.anvilcraft.lime_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ǝɯᴉꞀ", + "block.anvilcraft.lime_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝɯᴉꞀ", + "block.anvilcraft.lime_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝɯᴉꞀ", + "block.anvilcraft.lime_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝɯᴉꞀ", + "block.anvilcraft.lime_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝɯᴉꞀ", "block.anvilcraft.load_monitor": "ɹoʇᴉuoW pɐoꞀ", "block.anvilcraft.magenta_cement": "ʇuǝɯǝƆ ɐʇuǝᵷɐW", "block.anvilcraft.magenta_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ɐʇuǝᵷɐW", + "block.anvilcraft.magenta_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ɐʇuǝᵷɐW", + "block.anvilcraft.magenta_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ɐʇuǝᵷɐW", + "block.anvilcraft.magenta_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ɐʇuǝᵷɐW", + "block.anvilcraft.magenta_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ɐʇuǝᵷɐW", "block.anvilcraft.magnet_block": "ʇǝuᵷɐW ɟo ʞɔoꞁᗺ", "block.anvilcraft.magnetic_chute": "ǝʇnɥƆ ɔᴉʇǝuᵷɐW", "block.anvilcraft.magnetoelectric_core": "ǝɹoƆ ɔᴉɹʇɔǝꞁǝoʇǝuᵷɐW", @@ -396,6 +449,10 @@ "block.anvilcraft.oil_cauldron": "uoɹpꞁnɐƆ ꞁᴉO", "block.anvilcraft.orange_cement": "ʇuǝɯǝƆ ǝᵷuɐɹO", "block.anvilcraft.orange_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ǝᵷuɐɹO", + "block.anvilcraft.orange_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝᵷuɐɹO", + "block.anvilcraft.orange_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝᵷuɐɹO", + "block.anvilcraft.orange_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝᵷuɐɹO", + "block.anvilcraft.orange_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝᵷuɐɹO", "block.anvilcraft.over_nesting_shulker_box": "xoᗺ ɹǝʞꞁnɥS ᵷuᴉʇsǝN ɹǝʌO", "block.anvilcraft.overheated_ember_metal_block": "ꞁɐʇǝW ɹǝqɯƎ ɟo ʞɔoꞁᗺ pǝʇɐǝɥɹǝʌO", "block.anvilcraft.overseer": "ɹǝǝsɹǝʌO", @@ -403,6 +460,10 @@ "block.anvilcraft.piezoelectric_crystal": "ꞁɐʇsʎɹƆ ɔᴉɹʇɔǝꞁǝozǝᴉԀ", "block.anvilcraft.pink_cement": "ʇuǝɯǝƆ ʞuᴉԀ", "block.anvilcraft.pink_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ʞuᴉԀ", + "block.anvilcraft.pink_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞuᴉԀ", + "block.anvilcraft.pink_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞuᴉԀ", + "block.anvilcraft.pink_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞuᴉԀ", + "block.anvilcraft.pink_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞuᴉԀ", "block.anvilcraft.plasma_jets": "sʇǝՐ ɐɯsɐꞁԀ", "block.anvilcraft.plutonium_block": "ɯnᴉuoʇnꞁԀ ɟo ʞɔoꞁᗺ", "block.anvilcraft.plutonium_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɯnᴉuoʇnꞁԀ", @@ -418,6 +479,10 @@ "block.anvilcraft.pulse_generator": "ɹoʇɐɹǝuǝ⅁ ǝsꞁnԀ", "block.anvilcraft.purple_cement": "ʇuǝɯǝƆ ǝꞁdɹnԀ", "block.anvilcraft.purple_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ǝꞁdɹnԀ", + "block.anvilcraft.purple_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝꞁdɹnԀ", + "block.anvilcraft.purple_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝꞁdɹnԀ", + "block.anvilcraft.purple_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝꞁdɹnԀ", + "block.anvilcraft.purple_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝꞁdɹnԀ", "block.anvilcraft.quartz_sand": "puɐS zʇɹɐnꝹ", "block.anvilcraft.raw_lead_block": "pɐǝꞀ ʍɐᴚ ɟo ʞɔoꞁᗺ", "block.anvilcraft.raw_silver_block": "ɹǝʌꞁᴉS ʍɐᴚ ɟo ʞɔoꞁᗺ", @@ -428,72 +493,12 @@ "block.anvilcraft.raw_zinc_block": "ɔuᴉZ ʍɐᴚ ɟo ʞɔoꞁᗺ", "block.anvilcraft.red_cement": "ʇuǝɯǝƆ pǝᴚ", "block.anvilcraft.red_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ pǝᴚ", + "block.anvilcraft.red_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ pǝᴚ", + "block.anvilcraft.red_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ pǝᴚ", + "block.anvilcraft.red_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ pǝᴚ", + "block.anvilcraft.red_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ pǝᴚ", "block.anvilcraft.redhot_netherite_block": "ǝʇᴉɹǝɥʇǝN ɟo ʞɔoꞁᗺ ʇoɥpǝᴚ", "block.anvilcraft.redhot_tungsten_block": "uǝʇsᵷun⟘ ɟo ʞɔoꞁᗺ ʇoɥpǝᴚ", - "block.anvilcraft.reinforced_concrete_black": "ʞɔɐꞁᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_black_slab": "qɐꞁS ʞɔɐꞁᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_black_stair": "ɹᴉɐʇS ʞɔɐꞁᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_black_wall": "ꞁꞁɐM ʞɔɐꞁᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_blue": "ǝnꞁᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_blue_slab": "qɐꞁS ǝnꞁᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_blue_stair": "ɹᴉɐʇS ǝnꞁᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_blue_wall": "ꞁꞁɐM ǝnꞁᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_brown": "uʍoɹᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_brown_slab": "qɐꞁS uʍoɹᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_brown_stair": "ɹᴉɐʇS uʍoɹᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_brown_wall": "ꞁꞁɐM uʍoɹᗺ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_cyan": "uɐʎƆ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_cyan_slab": "qɐꞁS uɐʎƆ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_cyan_stair": "ɹᴉɐʇS uɐʎƆ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_cyan_wall": "ꞁꞁɐM uɐʎƆ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_gray": "ʎɐɹ⅁ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_gray_slab": "qɐꞁS ʎɐɹ⅁ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_gray_stair": "ɹᴉɐʇS ʎɐɹ⅁ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_gray_wall": "ꞁꞁɐM ʎɐɹ⅁ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_green": "uǝǝɹ⅁ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_green_slab": "qɐꞁS uǝǝɹ⅁ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_green_stair": "ɹᴉɐʇS uǝǝɹ⅁ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_green_wall": "ꞁꞁɐM uǝǝɹ⅁ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_light_blue": "ǝnꞁᗺ ʇɥᵷᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_light_blue_slab": "qɐꞁS ǝnꞁᗺ ʇɥᵷᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_light_blue_stair": "ɹᴉɐʇS ǝnꞁᗺ ʇɥᵷᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_light_blue_wall": "ꞁꞁɐM ǝnꞁᗺ ʇɥᵷᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_light_gray": "ʎɐɹ⅁ ʇɥᵷᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_light_gray_slab": "qɐꞁS ʎɐɹ⅁ ʇɥᵷᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_light_gray_stair": "ɹᴉɐʇS ʎɐɹ⅁ ʇɥᵷᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_light_gray_wall": "ꞁꞁɐM ʎɐɹ⅁ ʇɥᵷᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_lime": "ǝɯᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_lime_slab": "qɐꞁS ǝɯᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_lime_stair": "ɹᴉɐʇS ǝɯᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_lime_wall": "ꞁꞁɐM ǝɯᴉꞀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_magenta": "ɐʇuǝᵷɐW ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_magenta_slab": "qɐꞁS ɐʇuǝᵷɐW ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_magenta_stair": "ɹᴉɐʇS ɐʇuǝᵷɐW ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_magenta_wall": "ꞁꞁɐM ɐʇuǝᵷɐW ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_orange": "ǝᵷuɐɹO ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_orange_slab": "qɐꞁS ǝᵷuɐɹO ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_orange_stair": "ɹᴉɐʇS ǝᵷuɐɹO ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_orange_wall": "ꞁꞁɐM ǝᵷuɐɹO ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_pink": "ʞuᴉԀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_pink_slab": "qɐꞁS ʞuᴉԀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_pink_stair": "ɹᴉɐʇS ʞuᴉԀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_pink_wall": "ꞁꞁɐM ʞuᴉԀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_purple": "ǝꞁdɹnԀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_purple_slab": "qɐꞁS ǝꞁdɹnԀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_purple_stair": "ɹᴉɐʇS ǝꞁdɹnԀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_purple_wall": "ꞁꞁɐM ǝꞁdɹnԀ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_red": "pǝᴚ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_red_slab": "qɐꞁS pǝᴚ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_red_stair": "ɹᴉɐʇS pǝᴚ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_red_wall": "ꞁꞁɐM pǝᴚ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_white": "ǝʇᴉɥM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_white_slab": "qɐꞁS ǝʇᴉɥM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_white_stair": "ɹᴉɐʇS ǝʇᴉɥM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_white_wall": "ꞁꞁɐM ǝʇᴉɥM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_yellow": "ʍoꞁꞁǝ⅄ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_yellow_slab": "qɐꞁS ʍoꞁꞁǝ⅄ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_yellow_stair": "ɹᴉɐʇS ʍoꞁꞁǝ⅄ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", - "block.anvilcraft.reinforced_concrete_yellow_wall": "ꞁꞁɐM ʍoꞁꞁǝ⅄ ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ", "block.anvilcraft.remote_transmission_pole": "ǝꞁoԀ uoᴉssᴉɯsuɐɹ⟘ ǝʇoɯǝᴚ", "block.anvilcraft.resentful_amber_block": "ɹǝqɯⱯ ɟo ʞɔoꞁᗺ ꞁnɟʇuǝsǝᴚ", "block.anvilcraft.resin_block": "uᴉsǝᴚ ɟo ʞɔoꞁᗺ", @@ -546,10 +551,24 @@ "block.anvilcraft.white_chocolate_slab": "qɐꞁS ǝʇɐꞁoɔoɥƆ ǝʇᴉɥM", "block.anvilcraft.white_chocolate_stairs": "sɹᴉɐʇS ǝʇɐꞁoɔoɥƆ ǝʇᴉɥM", "block.anvilcraft.white_hole": "ǝꞁoH ǝʇᴉɥM", + "block.anvilcraft.white_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝʇᴉɥM", + "block.anvilcraft.white_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝʇᴉɥM", + "block.anvilcraft.white_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝʇᴉɥM", + "block.anvilcraft.white_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝʇᴉɥM", "block.anvilcraft.yellow_cement": "ʇuǝɯǝƆ ʍoꞁꞁǝ⅄", "block.anvilcraft.yellow_cement_cauldron": "uoɹpꞁnɐƆ ʇuǝɯǝƆ ʍoꞁꞁǝ⅄", + "block.anvilcraft.yellow_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʍoꞁꞁǝ⅄", + "block.anvilcraft.yellow_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʍoꞁꞁǝ⅄", + "block.anvilcraft.yellow_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʍoꞁꞁǝ⅄", + "block.anvilcraft.yellow_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʍoꞁꞁǝ⅄", "block.anvilcraft.zinc_block": "ɔuᴉZ ɟo ʞɔoꞁᗺ", "block.anvilcraft.zinc_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɔuᴉZ", + "category.anvilcraft.enchanted": "sɯǝʇI pǝʇuɐɥɔuƎ", + "category.anvilcraft.foods_and_drinks": "sʞuᴉɹᗡ puɐ spooℲ", + "category.anvilcraft.namespace": "sɯǝʇI %s", + "category.anvilcraft.namespace.anvilcraft": "ʇɟɐɹƆꞁᴉʌuⱯ", + "category.anvilcraft.redstone": "sɯǝʇI ǝuoʇspǝᴚ", + "category.anvilcraft.unknown_namespace": "<%s> uʍouʞu∩", "command.anvilcraft.multiBlock.multi_block_pos": " sᴉ sod ʇɹɐd uᴉɐW", "command.anvilcraft.multiBlock.not_multi_block": "ʞɔoꞁq-ᴉʇꞁnɯ ɐ ʇou sᴉ ʞɔoꞁq sᴉɥ⟘", "command.anvilcraft.multiphase.apply.not_player": "ɹǝʎɐꞁd ʇou sᴉ ɹǝuunɹ puɐɯɯoƆ", @@ -575,6 +594,9 @@ "command.anvilcraft.powergrid.info.total_generate": "%s :ǝʇɐɹǝuǝᵷ ɹǝʍod ꞁɐʇo⟘", "command.anvilcraft.powergrid.info.transmitter": "(%5$s :ǝᵷuɐᴚ) %4$s '%3$s '%2$s ʇɐ %1$s", "command.anvilcraft.universe.no_id": "puɐɥ uo sɯǝʇᴉ uᴉ ᗡI puᴉɟ ʇouuɐɔ puɐ pǝpᴉʌoɹd ᗡI oN", + "config.jade.plugin_anvilcraft.burning_heater_provider": "ɹǝʇɐǝH ᵷuᴉuɹnᗺ", + "config.jade.plugin_anvilcraft.charger_provider": "ɹǝᵷɹɐɥƆ", + "config.jade.plugin_anvilcraft.discharger_provider": "ɹǝᵷɹɐɥɔsᴉᗡ", "config.jade.plugin_anvilcraft.heatable_block_provider": "ʞɔoꞁᗺ ǝꞁqɐʇɐǝH", "config.jade.plugin_anvilcraft.item_detector": "ɹoʇɔǝʇǝᗡ ɯǝʇI", "config.jade.plugin_anvilcraft.power_provider": "ɹǝʍoԀ ʇɟɐɹƆ ꞁᴉʌuⱯ", @@ -584,6 +606,8 @@ "config.waila.plugin_anvilcraft.power_provider": "ɹǝʍoԀ ʇɟɐɹƆ ꞁᴉʌuⱯ", "config.waila.plugin_anvilcraft.warning_percent": "pꞁoɥsǝɹɥ⟘ ᵷuᴉuɹɐM", "curios.identifier.ionocraft_backpack": "ʞɔɐdʞɔɐᗺ ʇɟɐɹɔouoI", + "death.attack.anvilcraft.falling_giant_anvil": "suoᴉʇɐɹqᴉʌ punoɹᵷ ʎq pǝsnɐɔ ǝɔuɐuosǝɹ ɔᴉɯǝʇsʎs oʇ ǝnp pǝᴉp %1$s", + "death.attack.anvilcraft.heater_burn": "ɹǝʇɐǝɥ ǝɥʇ ʎq ǝuop ꞁꞁǝʍ sɐʍ %1$s", "death.attack.anvilcraft.laser": "ɹǝsɐꞁ ʎq pǝɔɹǝᴉd sɐʍ %1$s", "death.attack.anvilcraft.lost_in_time": "ǝɯᴉʇ ɟo ɹǝʌᴉɹ ǝɥʇ uᴉ ʇsoꞁ sɐʍ %1$s", "effect.anvilcraft.rage": "ǝᵷɐᴚ", @@ -612,7 +636,7 @@ "entity.anvilcraft.thrown_ember_metal_heavy_halberd": "pɹǝqꞁɐH ʎʌɐǝH ꞁɐʇǝW ɹǝqɯƎ uʍoɹɥ⟘", "entity.anvilcraft.thrown_frost_metal_heavy_halberd": "pɹǝqꞁɐH ʎʌɐǝH ꞁɐʇǝW ʇsoɹℲ uʍoɹɥ⟘", "entity.anvilcraft.thrown_transcendence_heavy_halberd": "pɹǝqꞁɐH ʎʌɐǝH ǝɔuǝpuǝɔsuɐɹ⟘ uʍoɹɥ⟘", - "entity.minecraft.villager.anvilcraft.jeweler": "ɹǝꞁǝʍǝՐ", + "entity.anvilcraft.villager.jeweler": "ɹǝꞁǝʍǝՐ", "fluid.anvilcraft.fire": "(uoɹpꞁnɐƆ ǝɹᴉℲ ɟo ʇuǝʇuoɔ ǝɥ⟘) ꞁᴉO ᵷuᴉuɹnᗺ", "gui.anvilcraft.category.anvil_collision": "uoᴉsᴉꞁꞁoƆ ꞁᴉʌuⱯ", "gui.anvilcraft.category.anvil_collision.consume": "%d :ꞁᴉʌuⱯ ǝɯnsuoƆ", @@ -713,7 +737,12 @@ "intro.anvilcraft.patchouli.structural_engineering": "()$˙ssǝɹᵷoɹd ɹno puɐʇsɹǝpun ʇouuɐɔ ʎꞁdɯᴉs ǝꞁdoǝd uoɯɯoƆ ˙ʎɹɐuᴉpɹo ǝɥʇ puoʎǝq sn sǝʇɐʌǝꞁǝ ʇɐɥʇ ʇɔnpoɹd ɐ ʇnq 'uoᴉʇnꞁos ǝuo ʎꞁuo ɥʇᴉʍ ǝᵷpǝꞁʍouʞ pᴉᵷᴉɹ ɐ ʇou sᴉ ʎᵷoꞁouɥɔǝ⟘(999999#)$(ᘔɹq)$ ˙suoᴉʇɔunɟ ꞁɐᴉɔǝds ɥʇᴉʍ sǝuᴉɥɔɐɯ ᵷuᴉɹǝǝuᴉᵷuǝ ǝʇɐǝɹɔ uɐɔ ǝʍ 'sǝɹnʇɔnɹʇs ʞɔoꞁq-ᴉʇꞁnɯ ɔᴉɟᴉɔǝds ᵷuᴉpꞁᴉnq ʎᗺ", "intro.anvilcraft.patchouli.technology_application": "˙ʎᵷoꞁouɥɔǝʇ ʇɟɐɹɔꞁᴉʌuⱯ ǝɥʇ ɥᵷnoɹɥʇ sǝɔuɐʇsqns ʍǝu ɟo uoᴉʇɐɯɹoɟsuɐɹʇ ɹo uoᴉʇɔnpoɹd ǝɥ⟘", "item.anvilcraft.abnormal_amulet": "ʇǝꞁnɯⱯ ꞁɐɯɹouqⱯ", + "item.anvilcraft.acceleration_ring": "ᵷuᴉᴚ uoᴉʇɐɹǝꞁǝɔɔⱯ", + "item.anvilcraft.activator_sliding_rail": "ꞁᴉɐᴚ ᵷuᴉpᴉꞁS ɹoʇɐʌᴉʇɔⱯ", + "item.anvilcraft.active_silencer": "ɹǝɔuǝꞁᴉS ǝʌᴉʇɔⱯ", + "item.anvilcraft.advanced_comparator": "ɹoʇɐɹɐdɯoƆ pǝɔuɐʌpⱯ", "item.anvilcraft.amber": "ɹǝqɯⱯ", + "item.anvilcraft.amber_block": "ʞɔoꞁᗺ ɹǝqɯⱯ", "item.anvilcraft.amethyst_axe": "ǝxⱯ ʇsʎɥʇǝɯⱯ", "item.anvilcraft.amethyst_hoe": "ǝoH ʇsʎɥʇǝɯⱯ", "item.anvilcraft.amethyst_pickaxe": "ǝxɐʞɔᴉԀ ʇsʎɥʇǝɯⱯ", @@ -724,46 +753,148 @@ "item.anvilcraft.anvil_amulet": "ʇǝꞁnɯⱯ ꞁᴉʌuⱯ", "item.anvilcraft.anvil_hammer": "ɹǝɯɯɐH ꞁᴉʌuⱯ", "item.anvilcraft.anvil_railgun": "unᵷꞁᴉɐᴚ ꞁᴉʌuⱯ", + "item.anvilcraft.arrow": "ʍoɹɹⱯ", + "item.anvilcraft.batch_crafter": "ɹǝʇɟɐɹƆ ɥɔʇɐᗺ", + "item.anvilcraft.batch_cutter": "ɹǝʇʇnƆ ɥɔʇɐᗺ", "item.anvilcraft.beef_mushroom_stew": "ʍǝʇS ɯooɹɥsnW ɟǝǝᗺ", + "item.anvilcraft.berry_cake_block": "ʞɔoꞁᗺ ǝʞɐƆ ʎɹɹǝᗺ", + "item.anvilcraft.berry_cream_block": "ʞɔoꞁᗺ ɯɐǝɹƆ ʎɹɹǝᗺ", "item.anvilcraft.black_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ʞɔɐꞁᗺ", + "item.anvilcraft.black_chocolate_block": "ʞɔoꞁᗺ ǝʇɐꞁoɔoɥƆ ʞɔɐꞁᗺ", + "item.anvilcraft.black_chocolate_slab": "qɐꞁS ǝʇɐꞁoɔoɥƆ ʞɔɐꞁᗺ", + "item.anvilcraft.black_chocolate_stairs": "sɹᴉɐʇS ǝʇɐꞁoɔoɥƆ ʞɔɐꞁᗺ", + "item.anvilcraft.black_hole": "ǝꞁoH ʞɔɐꞁᗺ", + "item.anvilcraft.black_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞɔɐꞁᗺ", + "item.anvilcraft.black_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞɔɐꞁᗺ", + "item.anvilcraft.black_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞɔɐꞁᗺ", + "item.anvilcraft.black_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞɔɐꞁᗺ", + "item.anvilcraft.block_comparator": "ɹoʇɐɹɐdɯoƆ ʞɔoꞁᗺ", + "item.anvilcraft.block_devourer": "ɹǝɹnoʌǝᗡ ʞɔoꞁᗺ", + "item.anvilcraft.block_placer": "ɹǝɔɐꞁԀ ʞɔoꞁᗺ", "item.anvilcraft.blue_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ǝnꞁᗺ", + "item.anvilcraft.blue_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ", + "item.anvilcraft.blue_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ", + "item.anvilcraft.blue_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ", + "item.anvilcraft.blue_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ", + "item.anvilcraft.brass_block": "ʞɔoꞁᗺ ssɐɹᗺ", "item.anvilcraft.brass_ingot": "ʇoᵷuI ssɐɹᗺ", "item.anvilcraft.brass_nugget": "ʇǝᵷᵷnN ssɐɹᗺ", + "item.anvilcraft.brass_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ssɐɹᗺ", + "item.anvilcraft.bronze_block": "ʞɔoꞁᗺ ǝzuoɹᗺ", "item.anvilcraft.bronze_ingot": "ʇoᵷuI ǝzuoɹᗺ", "item.anvilcraft.bronze_nugget": "ʇǝᵷᵷnN ǝzuoɹᗺ", + "item.anvilcraft.bronze_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ǝzuoɹᗺ", "item.anvilcraft.brown_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ uʍoɹᗺ", + "item.anvilcraft.brown_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uʍoɹᗺ", + "item.anvilcraft.brown_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uʍoɹᗺ", + "item.anvilcraft.brown_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uʍoɹᗺ", + "item.anvilcraft.brown_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uʍoɹᗺ", + "item.anvilcraft.burning_heater": "ɹǝʇɐǝH ᵷuᴉuɹnᗺ", + "item.anvilcraft.cake_base_block": "ʞɔoꞁᗺ ǝsɐᗺ ǝʞɐƆ", + "item.anvilcraft.cake_block": "ʞɔoꞁᗺ ǝʞɐƆ", "item.anvilcraft.canned_food": "pooℲ pǝuuɐƆ", "item.anvilcraft.capacitor": "ɹoʇᴉɔɐdɐƆ", "item.anvilcraft.capacitor_empty": "ɹoʇᴉɔɐdɐƆ ʎʇdɯƎ", "item.anvilcraft.cat_amulet": "ʇǝꞁnɯⱯ ʇɐƆ", + "item.anvilcraft.celestial_forging_anvil": "ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", + "item.anvilcraft.celestial_forging_anvil_amplifier": "ɹǝᴉɟᴉꞁdɯⱯ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", + "item.anvilcraft.celestial_forging_anvil_fluid_interface": "ǝɔɐɟɹǝʇuI pᴉnꞁℲ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", + "item.anvilcraft.celestial_forging_anvil_laser_interface": "ǝɔɐɟɹǝʇuI ɹǝsɐꞀ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", + "item.anvilcraft.celestial_forging_anvil_logistics_interface": "ǝɔɐɟɹǝʇuI sɔᴉʇsᴉᵷoꞀ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", + "item.anvilcraft.celestial_forging_anvil_portal": "ꞁɐʇɹoԀ ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ", + "item.anvilcraft.charge_collector": "ɹoʇɔǝꞁꞁoƆ ǝᵷɹɐɥƆ", "item.anvilcraft.charged_neutronium_ingot": "ʇoᵷuI ɯnᴉuoɹʇnǝN pǝᵷɹɐɥƆ", + "item.anvilcraft.charger": "ɹǝᵷɹɐɥƆ", "item.anvilcraft.chocolate": "ǝʇɐꞁoɔoɥƆ", "item.anvilcraft.chocolate_black": "ʞɔɐꞁᗺ ǝʇɐꞁoɔoɥƆ", + "item.anvilcraft.chocolate_block": "ʞɔoꞁᗺ ǝʇɐꞁoɔoɥƆ", + "item.anvilcraft.chocolate_cake_block": "ʞɔoꞁᗺ ǝʞɐƆ ǝʇɐꞁoɔoɥƆ", + "item.anvilcraft.chocolate_cream_block": "ʞɔoꞁᗺ ɯɐǝɹƆ ǝʇɐꞁoɔoɥƆ", + "item.anvilcraft.chocolate_slab": "qɐꞁS ǝʇɐꞁoɔoɥƆ", + "item.anvilcraft.chocolate_stairs": "sɹᴉɐʇS ǝʇɐꞁoɔoɥƆ", "item.anvilcraft.chocolate_white": "ǝʇᴉɥM ǝʇɐꞁoɔoɥƆ", + "item.anvilcraft.chromatic_stone": "ǝuoʇS ɔᴉʇɐɯoɹɥƆ", + "item.anvilcraft.chute": "ǝʇnɥƆ", + "item.anvilcraft.cinerite": "ǝʇᴉɹǝuᴉƆ", "item.anvilcraft.circuit_board": "pɹɐoᗺ ʇᴉnɔɹᴉƆ", "item.anvilcraft.cocoa_butter": "ɹǝʇʇnᗺ ɐoɔoƆ", "item.anvilcraft.cocoa_liquor": "ɹonbᴉꞀ ɐoɔoƆ", "item.anvilcraft.cocoa_powder": "ɹǝpʍoԀ ɐoɔoƆ", "item.anvilcraft.comrade_amulet": "ʇǝꞁnɯⱯ ǝpɐɹɯoƆ", "item.anvilcraft.comrade_amulet.tooltip": ":sɹǝʎɐꞁd pǝuᵷᴉS", + "item.anvilcraft.confined_energy_anvilon": "uoꞁᴉʌuⱯ ʎᵷɹǝuƎ pǝuᴉɟuoƆ", + "item.anvilcraft.confined_mass_anvilon": "uoꞁᴉʌuⱯ ssɐW pǝuᴉɟuoƆ", + "item.anvilcraft.confined_neutronium_ingot": "ʇoᵷuI ɯnᴉuoɹʇnǝN pǝuᴉɟuoƆ", + "item.anvilcraft.confined_space_anvilon": "uoꞁᴉʌuⱯ ǝɔɐdS pǝuᴉɟuoƆ", + "item.anvilcraft.confined_time_anvilon": "uoꞁᴉʌuⱯ ǝɯᴉ⟘ pǝuᴉɟuoƆ", + "item.anvilcraft.confinement_chamber": "ɹǝqɯɐɥƆ ʇuǝɯǝuᴉɟuoƆ", + "item.anvilcraft.controllable_sand": "puɐS ǝꞁqɐꞁꞁoɹʇuoƆ", "item.anvilcraft.copper_nugget": "ʇǝᵷᵷnN ɹǝddoƆ", + "item.anvilcraft.copper_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɹǝddoƆ", + "item.anvilcraft.corrupted_beacon": "uoɔɐǝᗺ pǝʇdnɹɹoƆ", "item.anvilcraft.crab_claw": "ʍɐꞁƆ qɐɹƆ", + "item.anvilcraft.crab_trap": "dɐɹ⟘ qɐɹƆ", + "item.anvilcraft.crate": "ǝʇɐɹƆ", "item.anvilcraft.cream": "ɯɐǝɹƆ", + "item.anvilcraft.cream_block": "ʞɔoꞁᗺ ɯɐǝɹƆ", "item.anvilcraft.creamy_bread_roll": "ꞁꞁoᴚ pɐǝɹᗺ ʎɯɐǝɹƆ", + "item.anvilcraft.creative_generator": "ɹoʇɐɹǝuǝ⅁ ǝʌᴉʇɐǝɹƆ", + "item.anvilcraft.crushing_table": "ǝꞁqɐ⟘ ᵷuᴉɥsnɹƆ", + "item.anvilcraft.cursed_gold_block": "ʞɔoꞁᗺ pꞁo⅁ pǝsɹnƆ", "item.anvilcraft.cursed_gold_ingot": "ʇoᵷuI pꞁo⅁ pǝsɹnƆ", "item.anvilcraft.cursed_gold_nugget": "ʇǝᵷᵷnN pꞁo⅁ pǝsɹnƆ", + "item.anvilcraft.cut_ember_metal_block": "ʞɔoꞁᗺ ꞁɐʇǝW ɹǝqɯƎ ʇnƆ", + "item.anvilcraft.cut_ember_metal_pillar": "ɹɐꞁꞁᴉԀ ꞁɐʇǝW ɹǝqɯƎ ʇnƆ", + "item.anvilcraft.cut_ember_metal_slab": "qɐꞁS ꞁɐʇǝW ɹǝqɯƎ ʇnƆ", + "item.anvilcraft.cut_ember_metal_stairs": "sɹᴉɐʇS ꞁɐʇǝW ɹǝqɯƎ ʇnƆ", + "item.anvilcraft.cut_flint_block": "ʞɔoꞁᗺ ʇuᴉꞁℲ ʇnƆ", + "item.anvilcraft.cut_flint_pillar": "ɹɐꞁꞁᴉԀ ʇuᴉꞁℲ ʇnƆ", + "item.anvilcraft.cut_flint_slab": "qɐꞁS ʇuᴉꞁℲ ʇnƆ", + "item.anvilcraft.cut_flint_stairs": "sɹᴉɐʇS ʇuᴉꞁℲ ʇnƆ", + "item.anvilcraft.cut_frost_metal_block": "ʞɔoꞁᗺ ꞁɐʇǝW ʇsoɹℲ ʇnƆ", + "item.anvilcraft.cut_frost_metal_pillar": "ɹɐꞁꞁᴉԀ ꞁɐʇǝW ʇsoɹℲ ʇnƆ", + "item.anvilcraft.cut_frost_metal_slab": "qɐꞁS ꞁɐʇǝW ʇsoɹℲ ʇnƆ", + "item.anvilcraft.cut_frost_metal_stairs": "sɹᴉɐʇS ꞁɐʇǝW ʇsoɹℲ ʇnƆ", + "item.anvilcraft.cut_heavy_iron_block": "ʞɔoꞁᗺ uoɹI ʎʌɐǝH ʇnƆ", + "item.anvilcraft.cut_heavy_iron_slab": "qɐꞁS uoɹI ʎʌɐǝH ʇnƆ", + "item.anvilcraft.cut_heavy_iron_stairs": "sɹᴉɐʇS uoɹI ʎʌɐǝH ʇnƆ", + "item.anvilcraft.cut_royal_steel_block": "ʞɔoꞁᗺ ꞁǝǝʇS ꞁɐʎoᴚ ʇnƆ", + "item.anvilcraft.cut_royal_steel_pillar": "ɹɐꞁꞁᴉԀ ꞁǝǝʇS ꞁɐʎoᴚ ʇnƆ", + "item.anvilcraft.cut_royal_steel_slab": "qɐꞁS ꞁǝǝʇS ꞁɐʎoᴚ ʇnƆ", + "item.anvilcraft.cut_royal_steel_stairs": "sɹᴉɐʇS ꞁǝǝʇS ꞁɐʎoᴚ ʇnƆ", "item.anvilcraft.cyan_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ uɐʎƆ", + "item.anvilcraft.cyan_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uɐʎƆ", + "item.anvilcraft.cyan_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uɐʎƆ", + "item.anvilcraft.cyan_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uɐʎƆ", + "item.anvilcraft.cyan_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uɐʎƆ", + "item.anvilcraft.deepslate_lead_ore": "ǝɹO pɐǝꞀ ǝʇɐꞁsdǝǝᗡ", + "item.anvilcraft.deepslate_silver_ore": "ǝɹO ɹǝʌꞁᴉS ǝʇɐꞁsdǝǝᗡ", + "item.anvilcraft.deepslate_tin_ore": "ǝɹO uᴉ⟘ ǝʇɐꞁsdǝǝᗡ", + "item.anvilcraft.deepslate_titanium_ore": "ǝɹO ɯnᴉuɐʇᴉ⟘ ǝʇɐꞁsdǝǝᗡ", + "item.anvilcraft.deepslate_tungsten_ore": "ǝɹO uǝʇsᵷun⟘ ǝʇɐꞁsdǝǝᗡ", + "item.anvilcraft.deepslate_uranium_ore": "ǝɹO ɯnᴉuɐɹ∩ ǝʇɐꞁsdǝǝᗡ", + "item.anvilcraft.deepslate_zinc_ore": "ǝɹO ɔuᴉZ ǝʇɐꞁsdǝǝᗡ", + "item.anvilcraft.deflection_ring": "ᵷuᴉᴚ uoᴉʇɔǝꞁɟǝᗡ", "item.anvilcraft.deformation_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS uoᴉʇɐɯɹoɟǝᗡ", + "item.anvilcraft.detector_sliding_rail": "ꞁᴉɐᴚ ᵷuᴉpᴉꞁS ɹoʇɔǝʇǝᗡ", + "item.anvilcraft.discharger": "ɹǝᵷɹɐɥɔsᴉᗡ", "item.anvilcraft.disk": "ʞsᴉᗡ", "item.anvilcraft.disk.stored_from": "%s :ɯoɹɟ pǝɹoʇS", "item.anvilcraft.dog_amulet": "ʇǝꞁnɯⱯ ᵷoᗡ", "item.anvilcraft.dough": "ɥᵷnoᗡ", "item.anvilcraft.dragon_rod": "poᴚ uoᵷɐɹᗡ", + "item.anvilcraft.dyson_sphere_component": "ʇuǝuodɯoƆ ǝɹǝɥdS uosʎᗡ", "item.anvilcraft.earth_core_shard": "pɹɐɥS ǝɹoƆ ɥʇɹɐƎ", + "item.anvilcraft.earth_core_shard_block": "ʞɔoꞁᗺ pɹɐɥS ǝɹoƆ ɥʇɹɐƎ", + "item.anvilcraft.earth_core_shard_ore": "ǝɹO pɹɐɥS ǝɹoƆ ɥʇɹɐƎ", "item.anvilcraft.eight_to_one_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS ǝuO oʇ ʇɥᵷᴉƎ", + "item.anvilcraft.ember_anvil": "ꞁᴉʌuⱯ ɹǝqɯƎ", "item.anvilcraft.ember_anvil_hammer": "ɹǝɯɯɐH ꞁᴉʌuⱯ ɹǝqɯƎ", "item.anvilcraft.ember_dragon_rod": "poᴚ uoᵷɐɹᗡ ɹǝqɯƎ", + "item.anvilcraft.ember_glass": "ssɐꞁ⅁ ɹǝqɯƎ", + "item.anvilcraft.ember_grindstone": "ǝuoʇspuᴉɹ⅁ ɹǝqɯƎ", "item.anvilcraft.ember_metal_axe": "ǝxⱯ ꞁɐʇǝW ɹǝqɯƎ", + "item.anvilcraft.ember_metal_block": "ʞɔoꞁᗺ ꞁɐʇǝW ɹǝqɯƎ", "item.anvilcraft.ember_metal_heavy_halberd": "pɹǝqꞁɐH ʎʌɐǝH ꞁɐʇǝW ɹǝqɯƎ", "item.anvilcraft.ember_metal_hoe": "ǝoH ꞁɐʇǝW ɹǝqɯƎ", "item.anvilcraft.ember_metal_ingot": "ʇoᵷuI ꞁɐʇǝW ɹǝqɯƎ", @@ -773,15 +904,28 @@ "item.anvilcraft.ember_metal_shovel": "ꞁǝʌoɥS ꞁɐʇǝW ɹǝqɯƎ", "item.anvilcraft.ember_metal_sword": "pɹoʍS ꞁɐʇǝW ɹǝqɯƎ", "item.anvilcraft.ember_metal_upgrade_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS", + "item.anvilcraft.ember_smithing_table": "ǝꞁqɐ⟘ ᵷuᴉɥʇᴉɯS ɹǝqɯƎ", "item.anvilcraft.emerald_amulet": "ʇǝꞁnɯⱯ pꞁɐɹǝɯƎ", + "item.anvilcraft.end_dust": "ʇsnᗡ puƎ", "item.anvilcraft.energy_weapon_platform": "ɯɹoɟʇɐꞁԀ uodɐǝM ʎᵷɹǝuƎ", "item.anvilcraft.exp_bucket": "ʇǝʞɔnᗺ dxƎ", "item.anvilcraft.exp_gem": "ɯǝ⅁ dxƎ", + "item.anvilcraft.exp_gem_block": "ʞɔoꞁᗺ ɯǝ⅁ dxƎ", + "item.anvilcraft.exposed_copper_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɹǝddoƆ pǝsodxƎ", + "item.anvilcraft.fe_collector": "ɹoʇɔǝꞁꞁoƆ ǝℲ", "item.anvilcraft.feather_amulet": "ʇǝꞁnɯⱯ ɹǝɥʇɐǝℲ", + "item.anvilcraft.ferrite_core_magnet_block": "ʞɔoꞁᗺ ʇǝuᵷɐW ǝɹoƆ ǝʇᴉɹɹǝℲ", "item.anvilcraft.filter": "ɹǝʇꞁᴉℲ", + "item.anvilcraft.fish_tank": "ʞuɐ⟘ ɥsᴉℲ", + "item.anvilcraft.flint_block": "ʞɔoꞁᗺ ʇuᴉꞁℲ", "item.anvilcraft.flour": "ɹnoꞁℲ", + "item.anvilcraft.fluid_tank": "ʞuɐ⟘ pᴉnꞁℲ", "item.anvilcraft.four_to_one_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS ǝuO oʇ ɹnoℲ", + "item.anvilcraft.frost_anvil": "ꞁᴉʌuⱯ ʇsoɹℲ", + "item.anvilcraft.frost_glass": "ssɐꞁ⅁ ʇsoɹℲ", + "item.anvilcraft.frost_grindstone": "ǝuoʇspuᴉɹ⅁ ʇsoɹℲ", "item.anvilcraft.frost_metal_axe": "ǝxⱯ ꞁɐʇǝW ʇsoɹℲ", + "item.anvilcraft.frost_metal_block": "ʞɔoꞁᗺ ꞁɐʇǝW ʇsoɹℲ", "item.anvilcraft.frost_metal_heavy_halberd": "pɹǝqꞁɐH ʎʌɐǝH ꞁɐʇǝW ʇsoɹℲ", "item.anvilcraft.frost_metal_hoe": "ǝoH ꞁɐʇǝW ʇsoɹℲ", "item.anvilcraft.frost_metal_ingot": "ʇoᵷuI ꞁɐʇǝW ʇsoɹℲ", @@ -791,66 +935,187 @@ "item.anvilcraft.frost_metal_shovel": "ꞁǝʌoɥS ꞁɐʇǝW ʇsoɹℲ", "item.anvilcraft.frost_metal_sword": "pɹoʍS ꞁɐʇǝW ʇsoɹℲ", "item.anvilcraft.frost_metal_upgrade_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS", + "item.anvilcraft.frost_smithing_table": "ǝꞁqɐ⟘ ᵷuᴉɥʇᴉɯS ʇsoɹℲ", "item.anvilcraft.gem_amulet": "ʇǝꞁnɯⱯ ɯǝ⅁", "item.anvilcraft.geode": "ǝpoǝ⅁", "item.anvilcraft.geode.find": "%s pǝʇɐɔoꞁ 'ǝpoǝᵷ ʇsʎɥʇǝɯɐ pǝʇɔǝdsnS", + "item.anvilcraft.giant_anvil": "ꞁᴉʌuⱯ ʇuɐᴉ⅁", + "item.anvilcraft.glowing_netherite_block": "ʞɔoꞁᗺ ǝʇᴉɹǝɥʇǝN ᵷuᴉʍoꞁ⅁", + "item.anvilcraft.glowing_tungsten_block": "ʞɔoꞁᗺ uǝʇsᵷun⟘ ᵷuᴉʍoꞁ⅁", "item.anvilcraft.gray_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ʎɐɹ⅁", + "item.anvilcraft.gray_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁", + "item.anvilcraft.gray_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁", + "item.anvilcraft.gray_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁", + "item.anvilcraft.gray_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁", "item.anvilcraft.green_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ uǝǝɹ⅁", + "item.anvilcraft.green_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uǝǝɹ⅁", + "item.anvilcraft.green_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uǝǝɹ⅁", + "item.anvilcraft.green_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uǝǝɹ⅁", + "item.anvilcraft.green_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ uǝǝɹ⅁", "item.anvilcraft.guide_book": "ʞooᗺ ǝpᴉn⅁ ʇɟɐɹƆꞁᴉʌuⱯ", + "item.anvilcraft.gunpowder_block": "ʞɔoꞁᗺ ɹǝpʍodun⅁", "item.anvilcraft.hardend_resin": "uᴉsǝᴚ puǝpɹɐH", + "item.anvilcraft.heat_collector": "ɹoʇɔǝꞁꞁoƆ ʇɐǝH", + "item.anvilcraft.heated_netherite_block": "ʞɔoꞁᗺ ǝʇᴉɹǝɥʇǝN pǝʇɐǝH", + "item.anvilcraft.heated_tungsten_block": "ʞɔoꞁᗺ uǝʇsᵷun⟘ pǝʇɐǝH", + "item.anvilcraft.heater": "ɹǝʇɐǝH", "item.anvilcraft.heavy_halberd_core": "ǝɹoƆ pɹǝqꞁɐH ʎʌɐǝH", + "item.anvilcraft.heavy_iron_beam": "ɯɐǝᗺ uoɹI ʎʌɐǝH", + "item.anvilcraft.heavy_iron_block": "ʞɔoꞁᗺ uoɹI ʎʌɐǝH", + "item.anvilcraft.heavy_iron_column": "uɯnꞁoƆ uoɹI ʎʌɐǝH", + "item.anvilcraft.heavy_iron_door": "ɹooᗡ uoɹI ʎʌɐǝH", + "item.anvilcraft.heavy_iron_plate": "ǝʇɐꞁԀ uoɹI ʎʌɐǝH", + "item.anvilcraft.heavy_iron_trapdoor": "ɹoopdɐɹ⟘ uoɹI ʎʌɐǝH", + "item.anvilcraft.heavy_iron_wall": "ꞁꞁɐM uoɹI ʎʌɐǝH", + "item.anvilcraft.heliostats": "sʇɐʇsoᴉꞁǝH", "item.anvilcraft.heliostats.pos_set": "%s ǝʇɐᴉpɐɹɹᴉ ꞁꞁᴉM", + "item.anvilcraft.hollow_magnet_block": "ʞɔoꞁᗺ ʇǝuᵷɐW ʍoꞁꞁoH", + "item.anvilcraft.hyperdimension_storage_station": "uoᴉʇɐʇS ǝᵷɐɹoʇS uoᴉsuǝɯᴉpɹǝdʎH", + "item.anvilcraft.impact_pile": "ǝꞁᴉԀ ʇɔɐdɯI", + "item.anvilcraft.incandescent_netherite_block": "ʞɔoꞁᗺ ǝʇᴉɹǝɥʇǝN ʇuǝɔsǝpuɐɔuI", + "item.anvilcraft.incandescent_tungsten_block": "ʞɔoꞁᗺ uǝʇsᵷun⟘ ʇuǝɔsǝpuɐɔuI", + "item.anvilcraft.induction_light": "ʇɥᵷᴉꞀ uoᴉʇɔnpuI", "item.anvilcraft.inherent_enchantment.tooltip": ":sʇuǝɯʇuɐɥɔuǝ ʇuǝɹǝɥuI", "item.anvilcraft.ionocraft": "ʇɟɐɹɔouoI", "item.anvilcraft.ionocraft_backpack": "ʞɔɐdʞɔɐᗺ ʇɟɐɹɔouoI", "item.anvilcraft.ionocraft_backpack.flight_time": "s%d :ǝɯᴉ⟘ ʇɥᵷᴉꞁℲ", - "item.anvilcraft.ionocraft_backpack.flight_time_energy": "s%s :ǝɯᴉ⟘ ʇɥᵷᴉꞁℲ 'ՐW%s :ʎᵷɹǝuƎ ᵷuᴉuᴉɐɯǝᴚ", + "item.anvilcraft.item_collector": "ɹoʇɔǝꞁꞁoƆ ɯǝʇI", + "item.anvilcraft.item_detector": "ɹoʇɔǝʇǝᗡ ɯǝʇI", + "item.anvilcraft.jewelcrafting_table": "ǝꞁqɐ⟘ ᵷuᴉʇɟɐɹɔꞁǝʍǝՐ", + "item.anvilcraft.large_cake": "ǝʞɐƆ ǝᵷɹɐꞀ", + "item.anvilcraft.large_crate": "ǝʇɐɹƆ ǝᵷɹɐꞀ", + "item.anvilcraft.large_fluid_tank": "ʞuɐ⟘ pᴉnꞁℲ ǝᵷɹɐꞀ", + "item.anvilcraft.laser_receiver": "ɹǝʌᴉǝɔǝᴚ ɹǝsɐꞀ", + "item.anvilcraft.lead_block": "ʞɔoꞁᗺ pɐǝꞀ", "item.anvilcraft.lead_ingot": "ʇoᵷuI pɐǝꞀ", "item.anvilcraft.lead_nugget": "ʇǝᵷᵷnN pɐǝꞀ", + "item.anvilcraft.lead_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ pɐǝꞀ", "item.anvilcraft.levitation_powder": "ɹǝpʍoԀ uoᴉʇɐʇᴉʌǝꞀ", + "item.anvilcraft.levitation_powder_block": "ʞɔoꞁᗺ ɹǝpʍoԀ uoᴉʇɐʇᴉʌǝꞀ", "item.anvilcraft.light_blue_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ǝnꞁᗺ ʇɥᵷᴉꞀ", + "item.anvilcraft.light_blue_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ ʇɥᵷᴉꞀ", + "item.anvilcraft.light_blue_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ ʇɥᵷᴉꞀ", + "item.anvilcraft.light_blue_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ ʇɥᵷᴉꞀ", + "item.anvilcraft.light_blue_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝnꞁᗺ ʇɥᵷᴉꞀ", "item.anvilcraft.light_gray_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ʎɐɹ⅁ ʇɥᵷᴉꞀ", + "item.anvilcraft.light_gray_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁ ʇɥᵷᴉꞀ", + "item.anvilcraft.light_gray_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁ ʇɥᵷᴉꞀ", + "item.anvilcraft.light_gray_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁ ʇɥᵷᴉꞀ", + "item.anvilcraft.light_gray_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʎɐɹ⅁ ʇɥᵷᴉꞀ", "item.anvilcraft.lime_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ǝɯᴉꞀ", "item.anvilcraft.lime_powder": "ɹǝpʍoԀ ǝɯᴉꞀ", + "item.anvilcraft.lime_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝɯᴉꞀ", + "item.anvilcraft.lime_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝɯᴉꞀ", + "item.anvilcraft.lime_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝɯᴉꞀ", + "item.anvilcraft.lime_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝɯᴉꞀ", + "item.anvilcraft.load_monitor": "ɹoʇᴉuoW pɐoꞀ", "item.anvilcraft.magenta_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ɐʇuǝᵷɐW", + "item.anvilcraft.magenta_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ɐʇuǝᵷɐW", + "item.anvilcraft.magenta_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ɐʇuǝᵷɐW", + "item.anvilcraft.magenta_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ɐʇuǝᵷɐW", + "item.anvilcraft.magenta_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ɐʇuǝᵷɐW", "item.anvilcraft.magnet": "ʇǝuᵷɐW", + "item.anvilcraft.magnet_block": "ʞɔoꞁᗺ ʇǝuᵷɐW", "item.anvilcraft.magnet_ingot": "ʇoᵷuI ʇǝuᵷɐW", + "item.anvilcraft.magnetic_chute": "ǝʇnɥƆ ɔᴉʇǝuᵷɐW", + "item.anvilcraft.magnetoelectric_core": "ǝɹoƆ ɔᴉɹʇɔǝꞁǝoʇǝuᵷɐW", "item.anvilcraft.melt_gem_bucket": "ʇǝʞɔnᗺ ɯǝ⅁ ʇꞁǝW", + "item.anvilcraft.menger_sponge": "ǝᵷuodS ɹǝᵷuǝW", + "item.anvilcraft.mineral_fountain": "uᴉɐʇunoℲ ꞁɐɹǝuᴉW", + "item.anvilcraft.mob_amber_block": "ʞɔoꞁᗺ ɹǝqɯⱯ qoW", "item.anvilcraft.multiphase_matter": "ɹǝʇʇɐW ǝsɐɥdᴉʇꞁnW", + "item.anvilcraft.multiphase_matter_block": "ʞɔoꞁᗺ ɹǝʇʇɐW ǝsɐɥdᴉʇꞁnW", "item.anvilcraft.multiphase_transcendium": "ɯnᴉpuǝɔsuɐɹ⟘ ǝsɐɥdᴉʇꞁnW", "item.anvilcraft.multitool": "ꞁooʇᴉʇꞁnW", "item.anvilcraft.nature_amulet": "ʇǝꞁnɯⱯ ǝɹnʇɐN", "item.anvilcraft.negative_matter": "ɹǝʇʇɐW ǝʌᴉʇɐᵷǝN", + "item.anvilcraft.negative_matter_block": "ʞɔoꞁᗺ ɹǝʇʇɐW ǝʌᴉʇɐᵷǝN", "item.anvilcraft.negative_matter_nugget": "ʇǝᵷᵷnN ɹǝʇʇɐW ǝʌᴉʇɐᵷǝN", + "item.anvilcraft.neoforge": "ǝᵷɹoɟoǝN", + "item.anvilcraft.nesting_shulker_box": "xoᗺ ɹǝʞꞁnɥS ᵷuᴉʇsǝN", + "item.anvilcraft.nether_dust": "ʇsnᗡ ɹǝɥʇǝN", "item.anvilcraft.netherite_crystal_nucleus": "snǝꞁɔnN ꞁɐʇsʎɹƆ ǝʇᴉɹǝɥʇǝN", + "item.anvilcraft.neutron_irradiator": "ɹoʇɐᴉpɐɹɹI uoɹʇnǝN", "item.anvilcraft.neutronium_ingot": "ʇoᵷuI ɯnᴉuoɹʇnǝN", "item.anvilcraft.oil_bucket": "ʇǝʞɔnᗺ ꞁᴉO", "item.anvilcraft.orange_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ǝᵷuɐɹO", + "item.anvilcraft.orange_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝᵷuɐɹO", + "item.anvilcraft.orange_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝᵷuɐɹO", + "item.anvilcraft.orange_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝᵷuɐɹO", + "item.anvilcraft.orange_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝᵷuɐɹO", + "item.anvilcraft.over_nesting_shulker_box": "xoᗺ ɹǝʞꞁnɥS ᵷuᴉʇsǝN ɹǝʌO", + "item.anvilcraft.overheated_ember_metal_block": "ʞɔoꞁᗺ ꞁɐʇǝW ɹǝqɯƎ pǝʇɐǝɥɹǝʌO", + "item.anvilcraft.overseer": "ɹǝǝsɹǝʌO", + "item.anvilcraft.oxidized_copper_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɹǝddoƆ pǝzᴉpᴉxO", + "item.anvilcraft.penrose_sphere_component": "ʇuǝuodɯoƆ ǝɹǝɥdS ǝsoɹuǝԀ", "item.anvilcraft.permutation_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS uoᴉʇɐʇnɯɹǝԀ", + "item.anvilcraft.piezoelectric_crystal": "ꞁɐʇsʎɹƆ ɔᴉɹʇɔǝꞁǝozǝᴉԀ", "item.anvilcraft.pill": "ꞁꞁᴉԀ", "item.anvilcraft.pill.tooltip": "ʎꞁʞɔᴉnb uǝʞɐʇ ǝq uɐɔ 'sʇɔǝɟɟǝ ᵷuᴉpuodsǝɹɹoɔ ǝʌǝᴉɥɔɐ oʇ uoᴉʇod ɥʇᴉʍ ɹǝɥʇǝᵷoʇ ǝpɐɯ sꞁꞁᴉԀ", "item.anvilcraft.pill_box": "xoᗺ ꞁꞁᴉԀ", "item.anvilcraft.pink_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ʞuᴉԀ", + "item.anvilcraft.pink_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞuᴉԀ", + "item.anvilcraft.pink_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞuᴉԀ", + "item.anvilcraft.pink_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞuᴉԀ", + "item.anvilcraft.pink_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʞuᴉԀ", + "item.anvilcraft.plutonium_block": "ʞɔoꞁᗺ ɯnᴉuoʇnꞁԀ", "item.anvilcraft.plutonium_ingot": "ʇoᵷuI ɯnᴉuoʇnꞁԀ", "item.anvilcraft.plutonium_nugget": "ʇǝᵷᵷnN ɯnᴉuoʇnꞁԀ", + "item.anvilcraft.plutonium_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɯnᴉuoʇnꞁԀ", + "item.anvilcraft.polished_flint_block": "ʞɔoꞁᗺ ʇuᴉꞁℲ pǝɥsᴉꞁoԀ", + "item.anvilcraft.polished_heavy_iron_block": "ʞɔoꞁᗺ uoɹI ʎʌɐǝH pǝɥsᴉꞁoԀ", + "item.anvilcraft.polished_heavy_iron_slab": "qɐꞁS uoɹI ʎʌɐǝH pǝɥsᴉꞁoԀ", + "item.anvilcraft.polished_heavy_iron_stairs": "sɹᴉɐʇS uoɹI ʎʌɐǝH pǝɥsᴉꞁoԀ", + "item.anvilcraft.power_converter_big": "ᵷᴉᗺ ɹǝʇɹǝʌuoƆ ɹǝʍoԀ", + "item.anvilcraft.power_converter_middle": "ǝꞁppᴉW ɹǝʇɹǝʌuoƆ ɹǝʍoԀ", + "item.anvilcraft.power_converter_small": "ꞁꞁɐɯS ɹǝʇɹǝʌuoƆ ɹǝʍoԀ", + "item.anvilcraft.powered_sliding_rail": "ꞁᴉɐᴚ ᵷuᴉpᴉꞁS pǝɹǝʍoԀ", "item.anvilcraft.prismarine_blade": "ǝpɐꞁᗺ ǝuᴉɹɐɯsᴉɹԀ", "item.anvilcraft.prismarine_cluster": "ɹǝʇsnꞁƆ ǝuᴉɹɐɯsᴉɹԀ", "item.anvilcraft.processor": "ɹossǝɔoɹԀ", + "item.anvilcraft.propel_piston": "uoʇsᴉԀ ꞁǝdoɹԀ", + "item.anvilcraft.pulse_generator": "ɹoʇɐɹǝuǝ⅁ ǝsꞁnԀ", "item.anvilcraft.purple_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ǝꞁdɹnԀ", + "item.anvilcraft.purple_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝꞁdɹnԀ", + "item.anvilcraft.purple_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝꞁdɹnԀ", + "item.anvilcraft.purple_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝꞁdɹnԀ", + "item.anvilcraft.purple_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝꞁdɹnԀ", + "item.anvilcraft.quartz_sand": "puɐS zʇɹɐnꝹ", "item.anvilcraft.raw_lead": "pɐǝꞀ ʍɐᴚ", + "item.anvilcraft.raw_lead_block": "ʞɔoꞁᗺ pɐǝꞀ ʍɐᴚ", "item.anvilcraft.raw_silver": "ɹǝʌꞁᴉS ʍɐᴚ", + "item.anvilcraft.raw_silver_block": "ʞɔoꞁᗺ ɹǝʌꞁᴉS ʍɐᴚ", "item.anvilcraft.raw_tin": "uᴉ⟘ ʍɐᴚ", + "item.anvilcraft.raw_tin_block": "ʞɔoꞁᗺ uᴉ⟘ ʍɐᴚ", "item.anvilcraft.raw_titanium": "ɯnᴉuɐʇᴉ⟘ ʍɐᴚ", + "item.anvilcraft.raw_titanium_block": "ʞɔoꞁᗺ ɯnᴉuɐʇᴉ⟘ ʍɐᴚ", "item.anvilcraft.raw_tungsten": "uǝʇsᵷun⟘ ʍɐᴚ", + "item.anvilcraft.raw_tungsten_block": "ʞɔoꞁᗺ uǝʇsᵷun⟘ ʍɐᴚ", "item.anvilcraft.raw_uranium": "ɯnᴉuɐɹ∩ ʍɐᴚ", + "item.anvilcraft.raw_uranium_block": "ʞɔoꞁᗺ ɯnᴉuɐɹ∩ ʍɐᴚ", "item.anvilcraft.raw_zinc": "ɔuᴉZ ʍɐᴚ", + "item.anvilcraft.raw_zinc_block": "ʞɔoꞁᗺ ɔuᴉZ ʍɐᴚ", "item.anvilcraft.recovery_pearl": "ꞁɹɐǝԀ ʎɹǝʌoɔǝᴚ", "item.anvilcraft.red_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ pǝᴚ", + "item.anvilcraft.red_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ pǝᴚ", + "item.anvilcraft.red_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ pǝᴚ", + "item.anvilcraft.red_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ pǝᴚ", + "item.anvilcraft.red_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ pǝᴚ", + "item.anvilcraft.redhot_netherite_block": "ʞɔoꞁᗺ ǝʇᴉɹǝɥʇǝN ʇoɥpǝᴚ", + "item.anvilcraft.redhot_tungsten_block": "ʞɔoꞁᗺ uǝʇsᵷun⟘ ʇoɥpǝᴚ", + "item.anvilcraft.remote_transmission_pole": "ǝꞁoԀ uoᴉssᴉɯsuɐɹ⟘ ǝʇoɯǝᴚ", + "item.anvilcraft.resentful_amber_block": "ʞɔoꞁᗺ ɹǝqɯⱯ ꞁnɟʇuǝsǝᴚ", "item.anvilcraft.resin": "uᴉsǝᴚ", + "item.anvilcraft.resin_block": "ʞɔoꞁᗺ uᴉsǝᴚ", "item.anvilcraft.resonator_core": "ǝɹoƆ ɹoʇɐuosǝᴚ", + "item.anvilcraft.rotten_flesh_block": "ʞɔoꞁᗺ ɥsǝꞁℲ uǝʇʇoᴚ", + "item.anvilcraft.royal_anvil": "ꞁᴉʌuⱯ ꞁɐʎoᴚ", "item.anvilcraft.royal_anvil_hammer": "ɹǝɯɯɐH ꞁᴉʌuⱯ ꞁɐʎoᴚ", "item.anvilcraft.royal_dragon_rod": "poᴚ uoᵷɐɹᗡ ꞁɐʎoᴚ", + "item.anvilcraft.royal_grindstone": "ǝuoʇspuᴉɹ⅁ ꞁɐʎoᴚ", + "item.anvilcraft.royal_smithing_table": "ǝꞁqɐ⟘ ᵷuᴉɥʇᴉɯS ꞁɐʎoᴚ", "item.anvilcraft.royal_steel_axe": "ǝxⱯ ꞁǝǝʇS ꞁɐʎoᴚ", + "item.anvilcraft.royal_steel_block": "ʞɔoꞁᗺ ꞁǝǝʇS ꞁɐʎoᴚ", "item.anvilcraft.royal_steel_hoe": "ǝoH ꞁǝǝʇS ꞁɐʎoᴚ", "item.anvilcraft.royal_steel_ingot": "ʇoᵷuI ꞁǝǝʇS ꞁɐʎoᴚ", "item.anvilcraft.royal_steel_nugget": "ʇǝᵷᵷnN ꞁǝǝʇS ꞁɐʎoᴚ", @@ -860,51 +1125,101 @@ "item.anvilcraft.royal_steel_upgrade_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS", "item.anvilcraft.ruby": "ʎqnᴚ", "item.anvilcraft.ruby_amulet": "ʇǝꞁnɯⱯ ʎqnᴚ", + "item.anvilcraft.ruby_block": "ʞɔoꞁᗺ ʎqnᴚ", + "item.anvilcraft.ruby_laser": "ɹǝsɐꞀ ʎqnᴚ", + "item.anvilcraft.ruby_prism": "ɯsᴉɹԀ ʎqnᴚ", "item.anvilcraft.sapphire": "ǝɹᴉɥddɐS", "item.anvilcraft.sapphire_amulet": "ʇǝꞁnɯⱯ ǝɹᴉɥddɐS", + "item.anvilcraft.sapphire_block": "ʞɔoꞁᗺ ǝɹᴉɥddɐS", "item.anvilcraft.sea_heart_shell": "ꞁꞁǝɥS ʇɹɐǝH ɐǝS", "item.anvilcraft.sea_heart_shell_shard": "pɹɐɥS ꞁꞁǝɥS ʇɹɐǝH ɐǝS", "item.anvilcraft.seeds_pack": "ʞɔɐԀ spǝǝS", + "item.anvilcraft.shulker_container": "ɹǝuᴉɐʇuoƆ ɹǝʞꞁnɥS", "item.anvilcraft.silence_amulet": "ʇǝꞁnɯⱯ ǝɔuǝꞁᴉS", + "item.anvilcraft.silver_block": "ʞɔoꞁᗺ ɹǝʌꞁᴉS", "item.anvilcraft.silver_ingot": "ʇoᵷuI ɹǝʌꞁᴉS", "item.anvilcraft.silver_nugget": "ʇǝᵷᵷnN ɹǝʌꞁᴉS", + "item.anvilcraft.silver_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɹǝʌꞁᴉS", + "item.anvilcraft.singularity_crystal": "ꞁɐʇsʎɹƆ ʎʇᴉɹɐꞁnᵷuᴉS", + "item.anvilcraft.sliding_rail": "ꞁᴉɐᴚ ᵷuᴉpᴉꞁS", + "item.anvilcraft.sliding_rail_stop": "doʇS ꞁᴉɐᴚ ᵷuᴉpᴉꞁS", + "item.anvilcraft.smooth_royal_steel_block": "ʞɔoꞁᗺ ꞁǝǝʇS ꞁɐʎoᴚ ɥʇooɯS", + "item.anvilcraft.space_overcompressor": "ɹossǝɹdɯoɔɹǝʌO ǝɔɐdS", + "item.anvilcraft.spectral_anvil": "ꞁᴉʌuⱯ ꞁɐɹʇɔǝdS", "item.anvilcraft.spectral_slingshot": "ʇoɥsᵷuᴉꞁS ꞁɐɹʇɔǝdS", "item.anvilcraft.spectral_slingshot.unload_return": "pǝpɐoꞁu∩ uǝɥʍ pǝuɹnʇǝᴚ", "item.anvilcraft.spectral_slingshot.unload_vanish": "pǝpɐoꞁu∩ uǝɥʍ sǝɥsᴉuɐɅ", "item.anvilcraft.spectral_weapon_launcher": "ɹǝɥɔunɐꞀ uodɐǝM ꞁɐɹʇɔǝdS", "item.anvilcraft.sponge_gemmule": "ǝꞁnɯɯǝ⅁ ǝᵷuodS", "item.anvilcraft.stable_neutronium_ingot": "ʇoᵷuI ɯnᴉuoɹʇnǝN ǝꞁqɐʇS", + "item.anvilcraft.stamping_platform": "ɯɹoɟʇɐꞁԀ ᵷuᴉdɯɐʇS", "item.anvilcraft.structure_tool": "ꞁoo⟘ ǝɹnʇɔnɹʇS", + "item.anvilcraft.sturdy_deepslate": "ǝʇɐꞁsdǝǝᗡ ʎpɹnʇS", + "item.anvilcraft.sugar_block": "ʞɔoꞁᗺ ɹɐᵷnS", "item.anvilcraft.supercapacitor": "ɹoʇᴉɔɐdɐɔɹǝdnS", "item.anvilcraft.supercapacitor_empty": "ɹoʇᴉɔɐdɐɔɹǝdnS ʎʇdɯƎ", + "item.anvilcraft.supercritical_nesting_shulker_box": "xoᗺ ɹǝʞꞁnɥS ᵷuᴉʇsǝN ꞁɐɔᴉʇᴉɹɔɹǝdnS", + "item.anvilcraft.tempering_glass": "ssɐꞁ⅁ ᵷuᴉɹǝdɯǝ⟘", + "item.anvilcraft.tesla_tower": "ɹǝʍo⟘ ɐꞁsǝ⟘", + "item.anvilcraft.tin_block": "ʞɔoꞁᗺ uᴉ⟘", "item.anvilcraft.tin_can": "uɐƆ uᴉ⟘", "item.anvilcraft.tin_ingot": "ʇoᵷuI uᴉ⟘", "item.anvilcraft.tin_nugget": "ʇǝᵷᵷnN uᴉ⟘", + "item.anvilcraft.tin_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ uᴉ⟘", + "item.anvilcraft.titanium_block": "ʞɔoꞁᗺ ɯnᴉuɐʇᴉ⟘", "item.anvilcraft.titanium_ingot": "ʇoᵷuI ɯnᴉuɐʇᴉ⟘", "item.anvilcraft.titanium_nugget": "ʇǝᵷᵷnN ɯnᴉuɐʇᴉ⟘", + "item.anvilcraft.titanium_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɯnᴉuɐʇᴉ⟘", "item.anvilcraft.topaz": "zɐdo⟘", "item.anvilcraft.topaz_amulet": "ʇǝꞁnɯⱯ zɐdo⟘", + "item.anvilcraft.topaz_block": "ʞɔoꞁᗺ zɐdo⟘", "item.anvilcraft.totem_of_rage": "ǝᵷɐᴚ ɟo ɯǝʇo⟘", "item.anvilcraft.totem_of_recovery": "ʎɹǝʌoɔǝᴚ ɟo ɯǝʇo⟘", + "item.anvilcraft.transcendence_anvil": "ꞁᴉʌuⱯ ǝɔuǝpuǝɔsuɐɹ⟘", "item.anvilcraft.transcendence_anvil_hammer": "ɹǝɯɯɐH ꞁᴉʌuⱯ ǝɔuǝpuǝɔsuɐɹ⟘", "item.anvilcraft.transcendence_dragon_rod": "poᴚ uoᵷɐɹᗡ ǝɔuǝpuǝɔsuɐɹ⟘", "item.anvilcraft.transcendence_heavy_halberd": "pɹǝqꞁɐH ʎʌɐǝH ǝɔuǝpuǝɔsuɐɹ⟘", "item.anvilcraft.transcendence_resonator": "ɹoʇɐuosǝᴚ ǝɔuǝpuǝɔsuɐɹ⟘", + "item.anvilcraft.transcendium_block": "ʞɔoꞁᗺ ɯnᴉpuǝɔsuɐɹ⟘", "item.anvilcraft.transcendium_ingot": "ʇoᵷuI ɯnᴉpuǝɔsuɐɹ⟘", "item.anvilcraft.transcendium_nugget": "ʇǝᵷᵷnN ɯnᴉpuǝɔsuɐɹ⟘", "item.anvilcraft.transcendium_upgrade_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS", + "item.anvilcraft.transmission_pole": "ǝꞁoԀ uoᴉssᴉɯsuɐɹ⟘", + "item.anvilcraft.transparent_crafting_table": "ǝꞁqɐ⟘ ᵷuᴉʇɟɐɹƆ ʇuǝɹɐdsuɐɹ⟘", + "item.anvilcraft.tungsten_block": "ʞɔoꞁᗺ uǝʇsᵷun⟘", "item.anvilcraft.tungsten_ingot": "ʇoᵷuI uǝʇsᵷun⟘", "item.anvilcraft.tungsten_nugget": "ʇǝᵷᵷnN uǝʇsᵷun⟘", + "item.anvilcraft.tungsten_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ uǝʇsᵷun⟘", "item.anvilcraft.two_to_one_smithing_template": "ǝʇɐꞁdɯǝ⟘ ᵷuᴉɥʇᴉɯS ǝuO oʇ oʍ⟘", + "item.anvilcraft.uranium_block": "ʞɔoꞁᗺ ɯnᴉuɐɹ∩", "item.anvilcraft.uranium_ingot": "ʇoᵷuI ɯnᴉuɐɹ∩", "item.anvilcraft.uranium_nugget": "ʇǝᵷᵷnN ɯnᴉuɐɹ∩", + "item.anvilcraft.uranium_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɯnᴉuɐɹ∩", "item.anvilcraft.utusan": "uɐsnʇ∩", + "item.anvilcraft.void_energy_collector": "ɹoʇɔǝꞁꞁoƆ ʎᵷɹǝuƎ pᴉoɅ", "item.anvilcraft.void_matter": "ɹǝʇʇɐW pᴉoɅ", + "item.anvilcraft.void_matter_block": "ʞɔoꞁᗺ ɹǝʇʇɐW pᴉoɅ", + "item.anvilcraft.void_stone": "ǝuoʇS pᴉoɅ", + "item.anvilcraft.weathered_copper_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɹǝddoƆ pǝɹǝɥʇɐǝM", "item.anvilcraft.white_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ǝʇᴉɥM", + "item.anvilcraft.white_chocolate_block": "ʞɔoꞁᗺ ǝʇɐꞁoɔoɥƆ ǝʇᴉɥM", + "item.anvilcraft.white_chocolate_slab": "qɐꞁS ǝʇɐꞁoɔoɥƆ ǝʇᴉɥM", + "item.anvilcraft.white_chocolate_stairs": "sɹᴉɐʇS ǝʇɐꞁoɔoɥƆ ǝʇᴉɥM", + "item.anvilcraft.white_hole": "ǝꞁoH ǝʇᴉɥM", + "item.anvilcraft.white_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝʇᴉɥM", + "item.anvilcraft.white_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝʇᴉɥM", + "item.anvilcraft.white_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝʇᴉɥM", + "item.anvilcraft.white_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ǝʇᴉɥM", "item.anvilcraft.wood_fiber": "ɹǝqᴉℲ pooM", "item.anvilcraft.yellow_cement_bucket": "ʇǝʞɔnᗺ ʇuǝɯǝƆ ʍoꞁꞁǝ⅄", + "item.anvilcraft.yellow_reinforced_concrete": "ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʍoꞁꞁǝ⅄", + "item.anvilcraft.yellow_reinforced_concrete_slab": "qɐꞁS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʍoꞁꞁǝ⅄", + "item.anvilcraft.yellow_reinforced_concrete_stair": "ɹᴉɐʇS ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʍoꞁꞁǝ⅄", + "item.anvilcraft.yellow_reinforced_concrete_wall": "ꞁꞁɐM ǝʇǝɹɔuoƆ pǝɔɹoɟuᴉǝᴚ ʍoꞁꞁǝ⅄", + "item.anvilcraft.zinc_block": "ʞɔoꞁᗺ ɔuᴉZ", "item.anvilcraft.zinc_ingot": "ʇoᵷuI ɔuᴉZ", "item.anvilcraft.zinc_nugget": "ʇǝᵷᵷnN ɔuᴉZ", + "item.anvilcraft.zinc_pressure_plate": "ǝʇɐꞁԀ ǝɹnssǝɹԀ ɔuᴉZ", "itemGroup.anvilcraft.building_blocks": "sʞɔoꞁᗺ ᵷuᴉpꞁᴉnᗺ :ʇɟɐɹƆꞁᴉʌuⱯ", "itemGroup.anvilcraft.functional_blocks": "sʞɔoꞁᗺ ꞁɐuoᴉʇɔunℲ :ʇɟɐɹƆꞁᴉʌuⱯ", "itemGroup.anvilcraft.ingredients": "sʇuǝᴉpǝɹᵷuI :ʇɟɐɹƆꞁᴉʌuⱯ", @@ -922,10 +1237,11 @@ "jei.anvilcraft.tooltip.not_consumed": "pǝɯnsuoƆ ʇoN", "key.anvilcraft.switch_phase": "ǝsɐɥԀ ɥɔʇᴉʍS", "key.anvilcraft.switch_resonate_mode": "ǝpoW ǝʇɐuosǝᴚ ɥɔʇᴉʍS", + "key.anvilcraft.switch_tool_mode": "ǝpoW ꞁooʇᴉʇꞁnW ɥɔʇᴉʍS", "key.anvilcraft.thought": "ʇɥᵷnoɥ⟘", "key.anvilcraft.toggle_goggle": "ǝpoW ǝꞁᵷᵷo⅁ ǝꞁᵷᵷo⟘", "key.anvilcraft.use_pill_box": "xoᗺ ꞁꞁᴉԀ ǝs∩", - "key.categories.anvilcraft": "ʇɟɐɹƆꞁᴉʌuⱯ", + "key.category.anvilcraft.all": "ʇɟɐɹƆꞁᴉʌuⱯ", "message.anvilcraft.chute.cannot_place": "uoᴉʇɔǝɹᴉp sᴉɥʇ ǝɔɐɟ ʇouuɐɔ ǝʇnɥƆ", "message.anvilcraft.code_gen_check": "˙sɯǝʇᴉ sɐɥ ʇoꞁs ʇndʇno ǝɥʇ ɟᴉ puɐ ǝqnɔ ɐ sᴉ ɐǝɹɐ pǝʇɔǝꞁǝs ǝɥʇ ɟᴉ ʞɔǝɥɔ ǝsɐǝꞁԀ", "message.anvilcraft.code_gen_filed": "pǝꞁᴉɐɟ uoᴉʇɐɹǝuǝᵷ ǝpoƆ", @@ -965,7 +1281,7 @@ "screen.anvilcraft.button.pulse_generator.start_mode.loop": "ǝpoW dooꞀ :ǝpoW", "screen.anvilcraft.button.pulse_generator.start_mode.rising": "ǝpoW ᵷuᴉsᴉᴚ :ǝpoW", "screen.anvilcraft.button.record": "%s :ᵷuᴉɹǝʇꞁᴉɟ ɯǝʇᴉ uoᴉʇuǝʇǝᴚ", - "screen.anvilcraft.button.redstone_control": "spꞁoɥsǝɹɥʇ ǝuᴉɯɹǝʇǝp oʇ ꞁɐuᵷᴉs ǝʇɐuɹǝʇꞁɐ ǝs∩\nuo ꞁoɹʇuoɔ ǝuoʇspǝᴚ", + "screen.anvilcraft.button.redstone_control": "uo ꞁoɹʇuoɔ ǝuoʇspǝᴚ", "screen.anvilcraft.button.redstone_control_off": "ɟɟo ꞁoɹʇuoɔ ǝuoʇspǝᴚ", "screen.anvilcraft.button.reverse": "ǝsɹǝʌǝɹ ʇndʇnO", "screen.anvilcraft.button.reverse_off": "ꞁɐɯɹou ʇndʇnO", @@ -1066,18 +1382,30 @@ "screen.anvilcraft.structure_tool.to_data_gen": "uǝ⅁ ɐʇɐᗡ o⟘", "screen.anvilcraft.structure_tool.to_json": "NOSՐ o⟘", "screen.anvilcraft.structure_tool.to_kubejs": "SՐǝqnꞰ o⟘", - "screen.anvilcraft.tesla_tower.filter.has_custom_name": "ɹǝʇꞁᴉℲ ʎʇᴉʇuƎ pǝɯɐN ɯoʇsnƆ", - "screen.anvilcraft.tesla_tower.filter.is_baby_friendly": "ɹǝʇꞁᴉℲ ʎʇᴉʇuƎ ʎꞁpuǝᴉɹℲ ʎqɐᗺ", - "screen.anvilcraft.tesla_tower.filter.is_entity_id": "ɹǝʇꞁᴉℲ ʎʇᴉʇuƎ", - "screen.anvilcraft.tesla_tower.filter.is_friendly": "ɹǝʇꞁᴉℲ ʎʇᴉʇuƎ ʎꞁpuǝᴉɹℲ", - "screen.anvilcraft.tesla_tower.filter.is_on_vehicle": "ɹǝʇꞁᴉℲ ǝꞁɔᴉɥǝɅ uO", - "screen.anvilcraft.tesla_tower.filter.is_pet": "ɹǝʇꞁᴉℲ ʇǝԀ", - "screen.anvilcraft.tesla_tower.filter.is_player": "ɹǝʇꞁᴉℲ ɹǝʎɐꞁԀ", - "screen.anvilcraft.tesla_tower.filter.is_player_id": "ɹǝʇꞁᴉℲ pI ɹǝʎɐꞁԀ", - "screen.anvilcraft.tesla_tower.filter.unknown": "ɹǝʇꞁᴉℲ uʍouʞu∩", + "screen.anvilcraft.tesla_tower.filter.has_custom_name": "ʎʇᴉʇuƎ pǝɯɐN ɯoʇsnƆ", + "screen.anvilcraft.tesla_tower.filter.is_baby_friendly": "ʎʇᴉʇuƎ ʎꞁpuǝᴉɹℲ ʎqɐᗺ", + "screen.anvilcraft.tesla_tower.filter.is_entity_id": "ʎʇᴉʇuƎ", + "screen.anvilcraft.tesla_tower.filter.is_friendly": "ʎʇᴉʇuƎ ʎꞁpuǝᴉɹℲ", + "screen.anvilcraft.tesla_tower.filter.is_hostile": "ʎʇᴉʇuƎ ǝꞁᴉʇsoH", + "screen.anvilcraft.tesla_tower.filter.is_neutral": "ʎʇᴉʇuƎ ꞁɐɹʇnǝN", + "screen.anvilcraft.tesla_tower.filter.is_on_vehicle": "ǝꞁɔᴉɥǝɅ uO", + "screen.anvilcraft.tesla_tower.filter.is_pet": "ʇǝԀ", + "screen.anvilcraft.tesla_tower.filter.is_player": "ɹǝʎɐꞁԀ", + "screen.anvilcraft.tesla_tower.filter.is_player_id": "pI ɹǝʎɐꞁԀ", + "screen.anvilcraft.tesla_tower.filter.unknown": "uʍouʞu∩", "screen.anvilcraft.tooltip.cfa_amplifier": "ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ ǝɥʇ uo ʎꞁꞁɐuoᵷɐᴉp pǝɔɐꞁd ǝq ʇsnɯ ʇI", "screen.anvilcraft.tooltip.cfa_interface": "ɯoʇʇoq ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ ǝɥʇ ɟo ǝpᴉs ǝɥʇ ʇsuᴉɐᵷɐ ʎꞁʇɥᵷᴉʇ pǝɔɐꞁd ǝq ʇsnɯ ʇI", "screen.anvilcraft.transcendium_upgrade_smithing_template": "ǝpɐɹᵷd∩ ɯnᴉpuǝɔsuɐɹ⟘", + "subtitles.anvilcraft.burning_heater": "pǝꞁʞɔɐɹɔ ɹǝʇɐǝH ᵷuᴉuɹnᗺ", + "subtitles.anvilcraft.giant_anvil_land": "pǝpuɐꞁ ꞁᴉʌuⱯ ʇuɐᴉ⅁", + "subtitles.anvilcraft.giant_anvil_resin_shock": "ʞɔoɥs uᴉsǝɹ ꞁᴉʌuⱯ ʇuɐᴉ⅁", + "subtitles.anvilcraft.giant_anvil_shock": "ǝʌɐʍʞɔoɥs ꞁᴉʌuⱯ ʇuɐᴉ⅁", + "subtitles.anvilcraft.plasma_jet": "ᵷuᴉɹɐoɹ ʇǝՐ ɐɯsɐꞁԀ", + "subtitles.anvilcraft.plasma_jet_lava": "ʇsɹnq ʇǝՐ ɐɯsɐꞁԀ", + "subtitles.anvilcraft.smart_block_placer_extend": "pǝpuǝʇxǝ ɹǝɔɐꞁԀ ʞɔoꞁᗺ ʇɹɐɯS", + "subtitles.anvilcraft.smart_block_placer_retract": "pǝʇɔɐɹʇǝɹ ɹǝɔɐꞁԀ ʞɔoꞁᗺ ʇɹɐɯS", + "subtitles.anvilcraft.smart_block_placer_shulker_open": "sɹᴉɥʍ ɹǝɔɐꞁԀ ʞɔoꞁᗺ ʇɹɐɯS", + "subtitles.anvilcraft.tesla_tower_strike": "sǝʞᴉɹʇs ɹǝʍo⟘ ɐꞁsǝ⟘", "title.anvilcraft.patchouli.advanced.anvil_destroy": "ʎoɹʇsǝᗡ ꞁᴉʌuⱯ", "title.anvilcraft.patchouli.advanced.heated_block": "ʞɔoꞁᗺ pǝʇɐǝH", "title.anvilcraft.patchouli.advanced.special_heated_block": "ʞɔoꞁᗺ pǝʇɐǝH ꞁɐᴉɔǝdS", @@ -1172,6 +1500,30 @@ "title.anvilcraft.patchouli.struct.overseer": "ɹǝpɐoꞀ ʞunɥƆ :ɹǝǝsɹǝʌO", "title.anvilcraft.patchouli.structural_engineering": "ᵷuᴉɹǝǝuᴉᵷuƎ ꞁɐɹnʇɔnɹʇS", "title.anvilcraft.patchouli.technology_application": "uoᴉʇɐɔᴉꞁddɐ ʎᵷoꞁouɥɔǝ⟘", + "tooltip.anvilcraft.burning_heater.burn_time_label": ":ǝɯᴉ⟘ uɹnᗺ ᵷuᴉuᴉɐɯǝᴚ", + "tooltip.anvilcraft.burning_heater.can_smelt": ":ʇꞁǝɯS uɐƆ", + "tooltip.anvilcraft.burning_heater.can_smelt.no": "oN ", + "tooltip.anvilcraft.burning_heater.can_smelt.yes": "sǝ⅄ ", + "tooltip.anvilcraft.burning_heater.fuel": ":ꞁǝnℲ", + "tooltip.anvilcraft.burning_heater.fuel.none": "ǝuoN ", + "tooltip.anvilcraft.burning_heater.jade.burn_time": "%s :ǝɯᴉ⟘ uɹnᗺ", + "tooltip.anvilcraft.burning_heater.jade.can_smelt": "%s :ʇꞁǝɯS uɐƆ", + "tooltip.anvilcraft.burning_heater.jade.can_smelt.no": "oN", + "tooltip.anvilcraft.burning_heater.jade.can_smelt.yes": "sǝ⅄", + "tooltip.anvilcraft.burning_heater.jade.state": "%s :ǝʇɐʇS", + "tooltip.anvilcraft.burning_heater.jade.state.lit": "ʇᴉꞀ", + "tooltip.anvilcraft.burning_heater.jade.state.off": "ɟɟO", + "tooltip.anvilcraft.burning_heater.jade.state.smoldering": "ᵷuᴉɹǝpꞁoɯS", + "tooltip.anvilcraft.burning_heater.state_name": ":ǝʇɐʇS", + "tooltip.anvilcraft.burning_heater.state_name.lit": "ʇᴉꞀ ", + "tooltip.anvilcraft.burning_heater.state_name.off": "ɟɟO ", + "tooltip.anvilcraft.burning_heater.state_name.smoldering": "ᵷuᴉɹǝpꞁoɯS ", + "tooltip.anvilcraft.charger.jade.energy": "%2$s / %1$s", + "tooltip.anvilcraft.charger.jade.time": "%2$s / %1$s", + "tooltip.anvilcraft.charger.jade.working_progress": "%s :ssǝɹᵷoɹԀ ᵷuᴉʞɹoM", + "tooltip.anvilcraft.discharger.jade.energy": "%2$s / %1$s", + "tooltip.anvilcraft.discharger.jade.time": "%2$s / %1$s", + "tooltip.anvilcraft.discharger.jade.working_progress": "%s :ssǝɹᵷoɹԀ ᵷuᴉᵷɹɐɥɔsᴉᗡ", "tooltip.anvilcraft.grid_information.consumer_stats": ":sʇɐʇS ɹǝɯnsuoƆ ɹǝʍoԀ", "tooltip.anvilcraft.grid_information.input_power": "%d :uoᴉʇdɯnsuoƆ ɹǝʍoԀ ", "tooltip.anvilcraft.grid_information.output_power": "%d :uoᴉʇɐɹǝuǝ⅁ ɹǝʍoԀ ", @@ -1202,32 +1554,33 @@ "tooltip.anvilcraft.heliostats.unknown": "uosɐǝɹ uʍouʞu∩ ", "tooltip.anvilcraft.heliostats.unspecified_irradiation_block": "ʞɔoꞁq uoᴉʇɐᴉpɐɹɹᴉ pǝᴉɟᴉɔǝdsu∩ ", "tooltip.anvilcraft.item.abnormal_amulet": "sɯǝʇᴉ pꞁo⅁ pǝsɹnƆ 'ɹǝpʍoԀ ᵷuᴉʇɐoꞁℲ 'ɯnᴉuoʇnꞁԀ 'ɯnᴉuɐɹ∩ ᵷuᴉʎɹɹɐɔ ɯoɹɟ ǝᵷɐɯɐp sʇuǝʌǝɹԀ", - "tooltip.anvilcraft.item.acceleration_ring": "ɹǝɯɯɐH ꞁᴉʌuⱯ ɥʇᴉʍ sɹǝʎɐꞁd ɹo 'sǝꞁᴉʇɔǝɾoɹd 'sꞁᴉʌuɐ sǝʇɐɹǝꞁǝɔɔⱯ ˙pꞁǝᴉɟ uoᴉʇɐɹǝꞁǝɔɔɐ sǝʇɐǝɹƆ", + "tooltip.anvilcraft.item.acceleration_ring": "ɹǝɯɯɐH ꞁᴉʌuⱯ ɥʇᴉʍ sɹǝʎɐꞁd ɹo 'sǝꞁᴉʇɔǝɾoɹd 'sꞁᴉʌuɐ ɹoɟ pꞁǝᴉɟ uoᴉʇɐɹǝꞁǝɔɔɐ sǝʇɐǝɹƆ", "tooltip.anvilcraft.item.activator_sliding_rail": "ʇᴉ ɹǝʌo ᵷuᴉpᴉꞁs sʞɔoꞁq sǝʇɐʌᴉʇɔⱯ", "tooltip.anvilcraft.item.active_silencer": "spunos ʎqɹɐǝu pǝʇɔǝꞁǝs ǝʇɐuᴉɯᴉꞁƎ", "tooltip.anvilcraft.item.advanced_comparator": "sǝpoɯ uosᴉɹɐdɯoɔ ʍopuᴉM puɐ sᴉsǝɹǝʇsʎH sʇɹoddnS", - "tooltip.anvilcraft.item.amulet_box.desc": "sɯǝʇoʇ ɹo sʇǝꞁnɯɐ ǝʌᴉʇɔɐ ǝꞁdᴉʇꞁnɯ sǝɹoʇS", - "tooltip.anvilcraft.item.amulet_box.fullness": "%2$d / %1$d :ssǝuꞁꞁnℲ", - "tooltip.anvilcraft.item.amulet_box.line_1": "⸵sɯǝʇoʇ ǝɥʇ ǝʌǝᴉɹʇǝɹ oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉɹ-ʇɟᴉɥs puɐ 'ʎɹoʇuǝʌuᴉ ɹnoʎ uo ᵷuᴉʎpu∩ ɟo sɯǝʇo⟘ ǝɥʇ ǝɹoʇs oʇ ʞɔᴉꞁɔ ʇɥᵷᴉᴚ", - "tooltip.anvilcraft.item.amulet_box.line_2": "˙ʇɟᴉᵷ ʇǝɹɔǝs ɐ ǝʌᴉǝɔǝɹ ʎɐɯ noʎ 'ɯǝʇoʇ ǝɥʇ ᵷuᴉɯnsuoɔ ɹǝʇɟɐ puɐ 'pǝpǝǝu uǝɥʍ xoq ǝɥʇ uᴉ sɯǝʇoʇ ǝɥʇ ǝɯnsuoɔ 'ᵷuᴉpꞁoɥ uǝɥM", + "tooltip.anvilcraft.item.amulet_box": "sɯǝʇoʇ ɹo sʇǝꞁnɯɐ ǝʌᴉʇɔɐ ǝꞁdᴉʇꞁnɯ sǝɹoʇS", + "tooltip.anvilcraft.item.amulet_box.shift": "˙ʇɟᴉᵷ ʇǝɹɔǝs ɐ ǝʌᴉǝɔǝɹ ʎɐɯ noʎ 'ɯǝʇoʇ ǝɥʇ ᵷuᴉɯnsuoɔ ɹǝʇɟɐ puɐ 'pǝpǝǝu uǝɥʍ xoq ǝɥʇ uᴉ sɯǝʇoʇ ǝɥʇ ǝɯnsuoɔ 'ᵷuᴉpꞁoɥ uǝɥM\n⸵sɯǝʇoʇ ǝɥʇ ǝʌǝᴉɹʇǝɹ oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉɹ-ʇɟᴉɥs puɐ 'ʎɹoʇuǝʌuᴉ ɹnoʎ uo ᵷuᴉʎpu∩ ɟo sɯǝʇo⟘ ǝɥʇ ǝɹoʇs oʇ ʞɔᴉꞁɔ ʇɥᵷᴉᴚ\nsɯǝʇoʇ ɹo sʇǝꞁnɯɐ ǝʌᴉʇɔɐ ǝꞁdᴉʇꞁnɯ sǝɹoʇS", "tooltip.anvilcraft.item.anvil_amulet": "ǝᵷɐɯɐp ꞁᴉʌuɐ oʇ ʎʇᴉunɯɯᴉ sʇuɐɹ⅁", "tooltip.anvilcraft.item.anvil_hammer": "ǝɔɐɯ ɐ puɐ 'sǝꞁᵷᵷoᵷ 'ɥɔuǝɹʍ ɐ 'ꞁᴉʌuɐ uɐ 'ɹǝɯɯɐɥ ɐ s,ʇI", "tooltip.anvilcraft.item.batch_crafter": "Mʞ ߈ ɟo uoᴉʇdɯnsuoɔ ɹǝʍod ɐ ɥʇᴉʍ 'ǝɔuo ʇɐ sɯǝʇᴉ ꞁɐuɹǝʇuᴉ ꞁꞁɐ pǝʇɟɐɹɔ puɐ ꞁɐuᵷᴉs ǝuoʇspǝɹ ɐ pǝʌᴉǝɔǝᴚ", "tooltip.anvilcraft.item.batch_cutter": "Mʞ ߈ ɟo uoᴉʇdɯnsuoɔ ɹǝʍod ɐ ɥʇᴉʍ 'ǝɔuo ʇɐ sɯǝʇᴉ ꞁɐuɹǝʇuᴉ ꞁꞁɐ ʇnɔ puɐ ꞁɐuᵷᴉs ǝuoʇspǝɹ ɐ pǝʌᴉǝɔǝᴚ", "tooltip.anvilcraft.item.black_hole": "uoᴉʇɔɐɹʇʇɐ ꞁɐuoᴉʇɐʇᴉʌɐɹᵷ ǝsuǝʇuᴉ ɥʇᴉʍ ʞɔoꞁᗺ ʌǝᗡ", - "tooltip.anvilcraft.item.block_comparator": "ǝpoɯ uoᴉʇɔǝʇǝp ǝʇɐʇs ǝsᴉɔǝɹd oʇ ɥɔʇᴉʍs oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉᴚ ˙ǝɯɐs ǝɥʇ ǝɹɐ sʞɔoꞁq ǝpᴉs uǝɥʍ ꞁɐuᵷᴉs ʇndʇnO", - "tooltip.anvilcraft.item.block_devourer": "sʇunoɯɐ ꞁꞁɐɯs ʎꞁuo doɹp ǝʇɐꞁsdǝǝp puɐ 'ʇɹᴉp 'ǝuoʇs sɐ ɥɔns sʞɔoꞁq pꞁɹoʍ ǝsɐᗺ\n˙pǝʞɔoꞁq ɟᴉ uoᴉʇɐɔoꞁ ʞɐǝɹq ǝɥʇ ʇɐ ɹo 'sɯǝʇᴉ pǝddoɹp sɐ 'sɹǝuᴉɐʇuoɔ oʇuᴉ — ʇᴉ puᴉɥǝq sɯǝʇᴉ sʇndʇnO ˙ʎɹoʇuǝʌuᴉ ꞁɐuɹǝʇuᴉ oN\n˙sʎoɹʇsǝp ʇᴉ ɐǝɹɐ ǝɥʇ ɹǝᵷɹɐꞁ ǝɥʇ 'sꞁꞁɐɟ ꞁᴉʌuɐ ǝɥʇ ɹǝɥʇɹɐɟ ǝɥʇ — sǝsɐǝɹɔuᴉ ǝᵷuɐɹ ᵷuᴉʞɐǝɹq ǝɥʇ 'ꞁᴉʌuɐ ᵷuᴉꞁꞁɐɟ ɐ ʎq ʞɔnɹʇs ɟI\n˙ʇᴉ ɟo ʇuoɹɟ uᴉ sʞɔoꞁq ɟo ɐǝɹɐ Ɛ×Ɛ ɐ sʞɐǝɹq ʎꞁʇuɐʇsuᴉ ʞɔoꞁq sᴉɥʇ 'ǝuoʇspǝɹ ʎq pǝɹǝʍod uǝɥM", - "tooltip.anvilcraft.item.block_placer": "ʇᴉ puᴉɥǝq sǝᴉɹoʇuǝʌuᴉ ɹǝuᴉɐʇuoɔ ɹo sɯǝʇᴉ pǝddoɹp ɯoɹɟ sʞɔoꞁq uᴉɐʇqo ʇsnɯ puɐ ʎɹoʇuǝʌuᴉ ꞁɐuɹǝʇuᴉ oN\n˙pǝɔɐꞁd sᴉ ʞɔoꞁq ǝɥʇ ɹǝɥʇɹɐɟ ǝɥʇ 'sꞁꞁɐɟ ꞁᴉʌuɐ ǝɥʇ ɹǝɥʇɹɐɟ ǝɥʇ — sǝsɐǝɹɔuᴉ ǝɔuɐʇsᴉp ʇuǝɯǝɔɐꞁd ǝɥʇ 'ꞁᴉʌuɐ ᵷuᴉꞁꞁɐɟ ɐ ʎq ʞɔnɹʇs ɟI\n˙ʇᴉ ɟo ʇuoɹɟ uᴉ ʞɔoꞁq ɐ sǝɔɐꞁd ʞɔoꞁq sᴉɥʇ 'ǝuoʇspǝɹ ʎq pǝɹǝʍod uǝɥM", + "tooltip.anvilcraft.item.block_comparator": "ǝpoɯ uoᴉʇɔǝʇǝp ǝʇɐʇs ǝsᴉɔǝɹd oʇ ɥɔʇᴉʍs oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉɹ 'ǝɯɐs ǝɥʇ ǝɹɐ sʞɔoꞁq ǝpᴉs uǝɥʍ ꞁɐuᵷᴉs sʇndʇnO", + "tooltip.anvilcraft.item.block_devourer": "ǝuoʇspǝɹ ʎq pǝɹǝʍod uǝɥʍ ʇuoɹɟ uᴉ sʞɔoꞁq ɟo ɐǝɹɐ Ɛ×Ɛ sʞɐǝɹᗺ", + "tooltip.anvilcraft.item.block_devourer.shift": "sʇunoɯɐ ꞁꞁɐɯs ʎꞁuo doɹp ǝʇɐꞁsdǝǝp puɐ 'ʇɹᴉp 'ǝuoʇs sɐ ɥɔns sʞɔoꞁq pꞁɹoʍ ǝsɐᗺ\npǝʞɔoꞁq ɟᴉ uoᴉʇɐɔoꞁ ʞɐǝɹq ǝɥʇ ʇɐ ɹo 'sɯǝʇᴉ pǝddoɹp sɐ 'sɹǝuᴉɐʇuoɔ oʇuᴉ — ʇᴉ puᴉɥǝq sɯǝʇᴉ sʇndʇno 'ʎɹoʇuǝʌuᴉ ꞁɐuɹǝʇuᴉ oN\nsʎoɹʇsǝp ʇᴉ ɐǝɹɐ ǝɥʇ ɹǝᵷɹɐꞁ ǝɥʇ 'sꞁꞁɐɟ ꞁᴉʌuɐ ǝɥʇ ɹǝɥʇɹɐɟ ǝɥʇ — sǝsɐǝɹɔuᴉ ǝᵷuɐɹ ᵷuᴉʞɐǝɹq ǝɥʇ 'ꞁᴉʌuɐ ᵷuᴉꞁꞁɐɟ ɐ ʎq ʞɔnɹʇs ɟI\nʇᴉ ɟo ʇuoɹɟ uᴉ sʞɔoꞁq ɟo ɐǝɹɐ Ɛ×Ɛ ɐ sʞɐǝɹq ʎꞁʇuɐʇsuᴉ ʞɔoꞁq sᴉɥʇ 'ǝuoʇspǝɹ ʎq pǝɹǝʍod uǝɥM", + "tooltip.anvilcraft.item.block_placer": "ǝuoʇspǝɹ ʎq pǝɹǝʍod uǝɥʍ ʇuoɹɟ uᴉ sʞɔoꞁq sǝɔɐꞁԀ", + "tooltip.anvilcraft.item.block_placer.shift": "ʇᴉ puᴉɥǝq sǝᴉɹoʇuǝʌuᴉ ɹǝuᴉɐʇuoɔ ɹo sɯǝʇᴉ pǝddoɹp ɯoɹɟ sʞɔoꞁq uᴉɐʇqo ʇsnɯ puɐ ʎɹoʇuǝʌuᴉ ꞁɐuɹǝʇuᴉ oN\npǝɔɐꞁd sᴉ ʞɔoꞁq ǝɥʇ ɹǝɥʇɹɐɟ ǝɥʇ 'sꞁꞁɐɟ ꞁᴉʌuɐ ǝɥʇ ɹǝɥʇɹɐɟ ǝɥʇ — sǝsɐǝɹɔuᴉ ǝɔuɐʇsᴉp ʇuǝɯǝɔɐꞁd ǝɥʇ 'ꞁᴉʌuɐ ᵷuᴉꞁꞁɐɟ ɐ ʎq ʞɔnɹʇs ɟI\nʇᴉ ɟo ʇuoɹɟ uᴉ ʞɔoꞁq ɐ sǝɔɐꞁd ʞɔoꞁq sᴉɥʇ 'ǝuoʇspǝɹ ʎq pǝɹǝʍod uǝɥM", "tooltip.anvilcraft.item.brass_pressure_plate": "ǝʇɐꞁd ssɐɹq ɐ osꞁɐ 'ǝʌoqɐ ɹǝʎɐꞁd ɟo ǝǝɹᵷǝp ᵷuᴉꞁꞁᴉɟ s,ʎɹoʇuǝʌuᴉ ǝɥʇ uo pǝsɐq ꞁɐuᵷᴉs ǝuoʇspǝɹ ɐ ʇndʇnO", "tooltip.anvilcraft.item.bronze_pressure_plate": "ǝʇɐꞁd ǝzuoɹq ɐ osꞁɐ 'ǝʌoqɐ ʎʇǝᴉʇɐs ɹǝʎɐꞁd uo pǝsɐq ꞁɐuᵷᴉs ǝuoʇspǝɹ ɐ ʇndʇnO", + "tooltip.anvilcraft.item.burning_heater": "ǝɯᴉʇ uɹnq ɟo spuoɔǝs 0߈ᘔ sǝɯnsuoɔ ᵷuᴉʇɟɐɹɔ ɥɔɐƎ\nǝʌoqɐ ʞɔoꞁq ǝɥʇ ʇɐǝɥ oʇ ꞁǝnɟ ǝɯnsuoƆ", "tooltip.anvilcraft.item.canned_food": "pooɟ ʇuɐʇsuᴉ ǝꞁqɐʞɔɐʇS", - "tooltip.anvilcraft.item.capacitor": "pǝɹoʇs Րʞ000߈", - "tooltip.anvilcraft.item.capacitor_empty": "ʎʇᴉɔɐdɐɔ Րʞ000߈", + "tooltip.anvilcraft.item.capacitor": "pǝɹoʇs ƎℲW 8", + "tooltip.anvilcraft.item.capacitor_empty": "ʎʇᴉɔɐdɐɔ ƎℲW 8", "tooltip.anvilcraft.item.cat_amulet": "sɯoʇuɐɥԀ puɐ sɹǝdǝǝɹƆ ʎɐʍɐ sǝɹɐɔS", "tooltip.anvilcraft.item.charge_collector": "ɹǝʍod ǝʇɐɹǝuǝᵷ oʇ sǝᵷɹɐɥɔ ᵷuᴉʇɔǝꞁꞁoƆ", "tooltip.anvilcraft.item.charged_neutronium_ingot": "ʎᵷɹǝuǝ ꞁɐɔᴉɹʇɔǝꞁǝ ɟo ʇunoɯɐ ǝᵷɹɐꞁ ɐ ᵷuᴉɹoʇs 'sʞɔoꞁq ɥᵷnoɹɥʇ ᵷuᴉssɐd ɹǝᵷuoꞁ oN", - "tooltip.anvilcraft.item.charger": "ʇnduᴉ pǝʇɐɯoʇnɐ ɹo ꞁɐnuɐɯ sʇɹoddnS ˙sɯǝʇᴉ sǝᵷɹɐɥƆ", - "tooltip.anvilcraft.item.comrade_amulet": "sɹǝʎɐꞁd pǝuᵷᴉs ɯoɹɟ ǝᵷɐɯɐp sʇuǝʌǝɹԀ ˙ʞɔᴉꞁɔ-ʇɥᵷᴉɹ ɐᴉʌ sɹǝʎɐꞁd ʎq ǝꞁqɐuᵷᴉS", + "tooltip.anvilcraft.item.charger": "ʇnduᴉ pǝʇɐɯoʇnɐ ɹo ꞁɐnuɐɯ sʇɹoddns 'sɯǝʇᴉ sǝᵷɹɐɥƆ", + "tooltip.anvilcraft.item.comrade_amulet": "sɹǝʎɐꞁd pǝuᵷᴉs ɯoɹɟ ǝᵷɐɯɐp sʇuǝʌǝɹd 'ʞɔᴉꞁɔ-ʇɥᵷᴉɹ ɐᴉʌ sɹǝʎɐꞁd ʎq ǝꞁqɐuᵷᴉS", "tooltip.anvilcraft.item.copper_pressure_plate": "ǝʇɐꞁd ɹǝddoɔ ɐ osꞁɐ 'ǝɯᴉʇ ᵷuᴉssǝɹd ɥʇᴉʍ sǝsɐǝɹɔuᴉ ꞁɐuᵷᴉs ǝuoʇspǝᴚ", "tooltip.anvilcraft.item.crab_claw": "ᵷuᴉpꞁoɥ uǝɥʍ ɥʇᵷuǝꞁ ɥɔnoʇ ǝsɐǝɹɔuI", "tooltip.anvilcraft.item.crab_trap": "sʇɔnpoɹd ɔᴉʇɐnbɐ ɥɔʇɐɔ noʎ dꞁǝɥ oʇ ɹǝʇɐʍ ǝɥʇ uᴉ ʇᴉ ᵷuᴉɔɐꞁԀ", @@ -1238,10 +1591,10 @@ "tooltip.anvilcraft.item.cut_ember_metal_pillar": "ɟooɹd ɹǝɥʇᴉM", "tooltip.anvilcraft.item.cut_ember_metal_slab": "ɟooɹd ɹǝɥʇᴉM", "tooltip.anvilcraft.item.cut_ember_metal_stairs": "ɟooɹd ɹǝɥʇᴉM", - "tooltip.anvilcraft.item.cut_frost_metal_block": "ɟooɹd ɹǝɥʇᴉM", - "tooltip.anvilcraft.item.cut_frost_metal_pillar": "ɟooɹd ɹǝɥʇᴉM", - "tooltip.anvilcraft.item.cut_frost_metal_slab": "ɟooɹd ɹǝɥʇᴉM", - "tooltip.anvilcraft.item.cut_frost_metal_stairs": "ɟooɹd ɹǝɥʇᴉM", + "tooltip.anvilcraft.item.cut_frost_metal_block": "ɟooɹd uoᴉsoꞁdxƎ", + "tooltip.anvilcraft.item.cut_frost_metal_pillar": "ɟooɹd uoᴉsoꞁdxƎ", + "tooltip.anvilcraft.item.cut_frost_metal_slab": "ɟooɹd uoᴉsoꞁdxƎ", + "tooltip.anvilcraft.item.cut_frost_metal_stairs": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.cut_heavy_iron_block": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.cut_heavy_iron_slab": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.cut_heavy_iron_stairs": "ɟooɹd uoᴉsoꞁdxƎ", @@ -1249,13 +1602,14 @@ "tooltip.anvilcraft.item.cut_royal_steel_pillar": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.cut_royal_steel_slab": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.cut_royal_steel_stairs": "ɟooɹd uoᴉsoꞁdxƎ", - "tooltip.anvilcraft.item.deflection_ring": "ɹoʇɐɹɐdɯoƆ ɥʇᴉʍ pǝǝds ʇɔǝʇǝᗡ ˙°06 sʇɔǝɾqo ᵷuᴉssɐd sʇɔǝꞁɟǝᗡ", + "tooltip.anvilcraft.item.deflection_ring": "ɹoʇɐɹɐdɯoƆ ɥʇᴉʍ pǝǝds ʇɔǝʇǝp '°06 sʇɔǝɾqo ᵷuᴉssɐd sʇɔǝꞁɟǝᗡ", "tooltip.anvilcraft.item.detector_sliding_rail": "ɹǝʌo ǝpᴉꞁs sʞɔoꞁq ɹo sʇɔǝɾqo uǝɥʍ ꞁɐuᵷᴉs ʇndʇnO", - "tooltip.anvilcraft.item.discharger": "ʇnduᴉ pǝʇɐɯoʇnɐ ɹo ꞁɐnuɐɯ sʇɹoddnS ˙sɹoʇᴉɔɐdɐɔ sǝᵷɹɐɥɔsᴉᗡ", + "tooltip.anvilcraft.item.discharger": "ʇnduᴉ pǝʇɐɯoʇnɐ ɹo ꞁɐnuɐɯ sʇɹoddns 'sɹoʇᴉɔɐdɐɔ sǝᵷɹɐɥɔsᴉᗡ", "tooltip.anvilcraft.item.disk.clear": "pǝɹoʇs ɐʇɐp ɹɐǝꞁɔ oʇ ʞɔᴉꞁɔ ʇɥᵷᴉᴚ + ʇɟᴉɥS", "tooltip.anvilcraft.item.disk.store": "ᵷuᴉʇʇǝs sʇᴉ ʎdoɔ oʇ ʞɔoꞁq ʞɔᴉꞁɔ ʇɥᵷᴉᴚ", "tooltip.anvilcraft.item.dog_amulet": "suoʇǝꞁǝʞS ʎɐʍɐ sǝɹɐɔS", - "tooltip.anvilcraft.item.dragon_rod": "ʎʇᴉꞁᴉqɐɹnp ǝɹoɯ sʇsoɔ ǝᵷuɐɹ ɹǝᵷɹɐꞀ ˙ǝᵷuɐɹ ʇsnɾpɐ oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉɹ 'ǝuᴉɯ oʇ ʞɔᴉꞁɔ-ʇɟǝꞀ ˙ɹǝɹnoʌǝp ʞɔoꞁq ǝꞁqɐʇɹoԀ", + "tooltip.anvilcraft.item.dragon_rod": "ǝᵷuɐɹ ǝꞁqɐʇsnɾpɐ ɥʇᴉʍ ɹǝɹnoʌǝp ʞɔoꞁq ǝꞁqɐʇɹoԀ", + "tooltip.anvilcraft.item.dragon_rod.shift": "ʎʇᴉꞁᴉqɐɹnp ǝɹoɯ sʇsoɔ ǝᵷuɐɹ ɹǝᵷɹɐꞁ 'ǝᵷuɐɹ ʇsnɾpɐ oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉɹ 'ǝuᴉɯ oʇ ʞɔᴉꞁɔ-ʇɟǝꞁ 'ɹǝɹnoʌǝp ʞɔoꞁq ǝꞁqɐʇɹoԀ", "tooltip.anvilcraft.item.ember_anvil": "ɟooɹd ɹǝɥʇᴉM", "tooltip.anvilcraft.item.ember_anvil_hammer": "ǝɔɐɯ ɐ puɐ 'sǝꞁᵷᵷoᵷ 'ɥɔuǝɹʍ ɐ 'ꞁᴉʌuɐ uɐ 'ɹǝɯɯɐɥ ɐ s,ʇI", "tooltip.anvilcraft.item.ember_glass": "ʇɔǝꞁꞁoɔ uo pǝɹᴉnbǝɹ sꞁooʇ oN 'ɟooɹd ɹǝɥʇᴉM", @@ -1263,16 +1617,18 @@ "tooltip.anvilcraft.item.ember_metal_block": "ɟooɹd ɹǝɥʇᴉM", "tooltip.anvilcraft.item.ember_smithing_table": "ɟooɹd ɹǝɥʇᴉM", "tooltip.anvilcraft.item.emerald_amulet": "ǝᵷɐꞁꞁᴉɅ ǝɥʇ ɟo oɹǝH sʇuɐɹ⅁", - "tooltip.anvilcraft.item.energy_weapon_platform": "ᵷuᴉʞɐW uodɐǝM ʎᵷɹǝuƎ ɟo ʇꞁnsǝɹ ǝɥʇ ʇᴉɹǝɥuᴉ ʎꞁuo ꞁꞁᴉʍ ʇnq 'pǝɹoʇs ՐW0ᘔƐ", + "tooltip.anvilcraft.item.energy_weapon_platform": "ᵷuᴉʞɐW uodɐǝM ʎᵷɹǝuƎ ɟo ʇꞁnsǝɹ ǝɥʇ ʇᴉɹǝɥuᴉ ʎꞁuo ꞁꞁᴉʍ ʇnq 'pǝɹoʇs ƎℲW 0߈9", "tooltip.anvilcraft.item.exposed_copper_pressure_plate": "ǝʇɐꞁd ɹǝddoɔ ɐ osꞁɐ 'ǝɯᴉʇ ᵷuᴉssǝɹd ɥʇᴉʍ sǝsɐǝɹɔuᴉ ꞁɐuᵷᴉs ǝuoʇspǝᴚ", + "tooltip.anvilcraft.item.fe_collector": "ɹǝʍod ǝʇɐɹǝuǝᵷ oʇ ƎℲ ᵷuᴉʇɔǝꞁꞁoƆ", "tooltip.anvilcraft.item.feather_amulet": "ǝᵷɐɯɐp ꞁꞁɐɟ oʇ ʎʇᴉunɯɯᴉ sʇuɐɹ⅁", "tooltip.anvilcraft.item.ferrite_core_magnet_block": "sǝᵷɹɐɥɔ ǝʇɐɹǝuǝᵷ oʇ sʞɔoꞁq ɹǝddoɔ ʇuǝɔɐɾpɐ sǝsnɐɔ 'uoʇsᴉd ǝɥʇ ʎq pǝꞁꞁnd puɐ pǝɥsnd uǝɥʍ 'ʍoꞁǝq ꞁᴉʌuɐ ǝɥʇ ᵷuᴉʇɔɐɹʇʇⱯ", - "tooltip.anvilcraft.item.filter": "ʇoꞁs ɹǝʇꞁᴉɟ ʎuɐ uᴉ ǝꞁqɐs∩ ˙sɹǝʇꞁᴉɟ ɹo ᵷᴉɟuoɔ uo pǝsɐq sɯǝʇᴉ sǝɥɔʇɐW", - "tooltip.anvilcraft.item.fish_tank": "˙ɥsᴉɟ ꞁɐɔᴉdoɹʇ ǝɥʇ ǝsɐǝꞁǝɹ oʇ puɐɥ uᴉ ʇǝʞɔnq ɥsᴉɟ ꞁɐɔᴉdoɹʇ ɐ ɥʇᴉʍ ʞuɐʇ ɥsᴉɟ ǝɥʇ ɟo ʇɹɐd ɹǝʍoꞁ ǝɥʇ ʞɔᴉꞁɔ-ʇɥᵷᴉᴚ\n˙ǝpᴉsuᴉ ɯǝʇᴉ ǝɥʇ ǝɔɐꞁd oʇ puɐɥ uᴉ ɯǝʇᴉ uɐ ɥʇᴉʍ doʇ ǝɥʇ ʞɔᴉꞁɔ-ʇɥᵷᴉᴚ\n˙ʇɔǝɟɟǝ ᵷuᴉɥʇɐǝɹq ɹǝʇɐʍɹǝpun ʎɹɐɹodɯǝʇ ɐ sǝpᴉʌoɹd pɐǝɥ ɹnoʎ uo ʇᴉ ᵷuᴉɹɐǝM\n˙sᴉsǝɥʇuʎs ꞁᴉʌuɐ pǝʇɐꞁǝɹ ɯɹoɟɹǝd oʇ ʇod ʎɯǝɥɔꞁɐ ǝɥʇ ɹoɟ ǝʇnʇᴉʇsqns ɐ sɐ pǝsn ǝq uɐɔ puɐ sʞooꞁ ʇᴉ uɐɥʇ ɹǝᴉpɹnʇs sᴉ ʇI", - "tooltip.anvilcraft.item.frost_anvil": "ɟooɹd ɹǝɥʇᴉM", - "tooltip.anvilcraft.item.frost_grindstone": "ɟooɹd ɹǝɥʇᴉM", - "tooltip.anvilcraft.item.frost_metal_block": "ɟooɹd ɹǝɥʇᴉM", - "tooltip.anvilcraft.item.frost_smithing_table": "ɟooɹd ɹǝɥʇᴉM", + "tooltip.anvilcraft.item.filter": "ʇoꞁs ɹǝʇꞁᴉɟ ʎuɐ uᴉ ǝꞁqɐsn 'uoᴉʇɐɹnᵷᴉɟuoɔ uo pǝsɐq sɯǝʇᴉ sǝɥɔʇɐW", + "tooltip.anvilcraft.item.fish_tank": "uɹoʍ uǝɥʍ ᵷuᴉɥʇɐǝɹq ɹǝʇɐʍɹǝpun sǝpᴉʌoɹd puɐ sᴉsǝɥʇuʎs ꞁᴉʌuɐ ɹoɟ pǝs∩", + "tooltip.anvilcraft.item.fish_tank.shift": "ɥsᴉɟ ꞁɐɔᴉdoɹʇ ǝɥʇ ǝsɐǝꞁǝɹ oʇ puɐɥ uᴉ ʇǝʞɔnq ɥsᴉɟ ꞁɐɔᴉdoɹʇ ɐ ɥʇᴉʍ ʞuɐʇ ɥsᴉɟ ǝɥʇ ɟo ʇɹɐd ɹǝʍoꞁ ǝɥʇ ʞɔᴉꞁɔ-ʇɥᵷᴉᴚ\nǝpᴉsuᴉ ɯǝʇᴉ ǝɥʇ ǝɔɐꞁd oʇ puɐɥ uᴉ ɯǝʇᴉ uɐ ɥʇᴉʍ doʇ ǝɥʇ ʞɔᴉꞁɔ-ʇɥᵷᴉᴚ\nʇɔǝɟɟǝ ᵷuᴉɥʇɐǝɹq ɹǝʇɐʍɹǝpun ʎɹɐɹodɯǝʇ ɐ sǝpᴉʌoɹd pɐǝɥ ɹnoʎ uo ʇᴉ ᵷuᴉɹɐǝM\nsᴉsǝɥʇuʎs ꞁᴉʌuɐ pǝʇɐꞁǝɹ ɯɹoɟɹǝd oʇ ʇod ʎɯǝɥɔꞁɐ ǝɥʇ ɹoɟ ǝʇnʇᴉʇsqns ɐ sɐ pǝsn ǝq uɐɔ puɐ sʞooꞁ ʇᴉ uɐɥʇ ɹǝᴉpɹnʇs sᴉ ʇI", + "tooltip.anvilcraft.item.frost_anvil": "ɟooɹd uoᴉsoꞁdxƎ", + "tooltip.anvilcraft.item.frost_grindstone": "ɟooɹd uoᴉsoꞁdxƎ", + "tooltip.anvilcraft.item.frost_metal_block": "ɟooɹd uoᴉsoꞁdxƎ", + "tooltip.anvilcraft.item.frost_smithing_table": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.gem_amulet": "sʇǝꞁnɯⱯ ɯǝ⅁ ɹnoɟ ꞁꞁɐ ɟo sʇɔǝɟɟǝ sǝuᴉqɯoƆ", "tooltip.anvilcraft.item.geode": "ʇᴉ ᵷuᴉsn uǝɥʍ ǝpoǝ⅁ ʇsʎɥʇǝɯⱯ ᵷuᴉpunoɹɹns ǝɥʇ puᴉℲ", "tooltip.anvilcraft.item.heat_collector": "ʇɐǝɥ ɯoɹɟ ɹǝʍod sǝʇɐɹǝuǝ⅁", @@ -1284,16 +1640,18 @@ "tooltip.anvilcraft.item.heavy_iron_plate": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.heavy_iron_trapdoor": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.heavy_iron_wall": "ɟooɹd uoᴉsoꞁdxƎ", - "tooltip.anvilcraft.item.heliostats": "ʇᴉ ǝʌoqɐ sʞɔoꞁq ǝɥʇ sɐ ꞁꞁǝʍ sɐ 'ʎɐp ǝɥʇ ᵷuᴉɹnp ʞɔoꞁq pǝʇǝᵷɹɐʇ ǝɥʇ ʇɐǝɥ ꞁꞁᴉʍ ʇᴉ 'ʇɐʇsoᴉꞁǝɥ ǝɥʇ ᵷuᴉɔɐꞁd ɹǝʇɟⱯ\n˙ʞɔoꞁq ʇǝᵷɹɐʇ ʇǝs oʇ ʇɐʇsoᴉꞁǝɥ pꞁǝɥpuɐɥ ǝɥʇ ɥʇᴉʍ ʞɔoꞁᗺ uǝʇsᵷun⟘ ɹo ʞɔoꞁᗺ ǝʇᴉɹǝɥʇǝN ɐ ʞɔᴉꞁɔ‑ʇɥᵷᴉᴚ", + "tooltip.anvilcraft.item.heliostats": "ʎɐp ǝɥʇ ᵷuᴉɹnp sʞɔoꞁq pǝʇǝᵷɹɐʇ sʇɐǝH", + "tooltip.anvilcraft.item.heliostats.shift": "ʇᴉ ǝʌoqɐ sʞɔoꞁq ǝɥʇ sɐ ꞁꞁǝʍ sɐ 'ʎɐp ǝɥʇ ᵷuᴉɹnp ʞɔoꞁq pǝʇǝᵷɹɐʇ ǝɥʇ ʇɐǝɥ ꞁꞁᴉʍ ʇᴉ 'ʇɐʇsoᴉꞁǝɥ ǝɥʇ ᵷuᴉɔɐꞁd ɹǝʇɟⱯ\nʞɔoꞁq ʇǝᵷɹɐʇ ʇǝs oʇ ʇɐʇsoᴉꞁǝɥ pꞁǝɥpuɐɥ ǝɥʇ ɥʇᴉʍ ʞɔoꞁᗺ uǝʇsᵷun⟘ ɹo ʞɔoꞁᗺ ǝʇᴉɹǝɥʇǝN ɐ ʞɔᴉꞁɔ‑ʇɥᵷᴉᴚ", "tooltip.anvilcraft.item.hollow_magnet_block": "sǝᵷɹɐɥɔ ǝʇɐɹǝuǝᵷ oʇ sʞɔoꞁq ɹǝddoɔ ʇuǝɔɐɾpɐ sǝsnɐɔ 'uoʇsᴉd ǝɥʇ ʎq pǝꞁꞁnd puɐ pǝɥsnd uǝɥʍ 'ʍoꞁǝq ꞁᴉʌuɐ ǝɥʇ ᵷuᴉʇɔɐɹʇʇⱯ", - "tooltip.anvilcraft.item.impact_pile": "uᴉɐʇunoℲ ꞁɐɹǝuoW ɐ ǝʇɐǝɹɔ oʇ ꞁᴉʌuɐ ᵷuᴉꞁꞁɐɟ ɥʇᴉʍ ǝʞᴉɹʇS ˙ʞɔoɹpǝᗺ uo ǝɔɐꞁԀ", - "tooltip.anvilcraft.item.induction_light": "ɹǝʍod ɟo Mʞ 9⥝ ǝɯnsuoɔ sǝpoɯ ꞁɐᴉɔǝds ǝǝɹɥʇ ꞁꞁⱯ\nǝpoW ᵷuᴉuʍɐdS ꞁɐɯᴉuⱯ‑ᴉʇuⱯ oʇ ɥɔʇᴉʍs oʇ ɹǝʇʇɐW pᴉoɅ ɥʇᴉʍ ʞɔᴉꞁɔ‑ʇɥᵷᴉᴚ\nǝpoW ᵷuᴉuʍɐdS ɹǝʇsuoW‑ᴉʇuⱯ oʇ ɥɔʇᴉʍs oʇ ǝuoʇsʍoꞁ⅁ ɥʇᴉʍ ʞɔᴉꞁɔ‑ʇɥᵷᴉᴚ\nǝpoW uoᴉʇɐɹǝꞁǝɔɔⱯ ɥʇʍoɹ⅁ oʇ ɥɔʇᴉʍs oʇ ǝuoʇspǝᴚ ɥʇᴉʍ ʞɔᴉꞁɔ‑ʇɥᵷᴉᴚ\nMʞ ⥝ ɟo uoᴉʇdɯnsuoɔ ɹǝʍod ɐ ɥʇᴉʍ ᵷuᴉʇɥᵷᴉꞁ sǝpᴉʌoɹԀ", + "tooltip.anvilcraft.item.impact_pile": "uᴉɐʇunoℲ ꞁɐɹǝuoW ǝʇɐǝɹɔ oʇ ꞁᴉʌuɐ ᵷuᴉꞁꞁɐɟ ɥʇᴉʍ ǝʞᴉɹʇs puɐ ʞɔoɹpǝᗺ uo ǝɔɐꞁԀ", + "tooltip.anvilcraft.item.induction_light": "sǝpoɯ ꞁɐᴉɔǝds ǝꞁqɐɹnᵷᴉɟuoɔ puɐ ᵷuᴉʇɥᵷᴉꞁ sǝpᴉʌoɹԀ", + "tooltip.anvilcraft.item.induction_light.shift": "ɹǝʍod ɟo Mʞ 9⥝ ǝɯnsuoɔ sǝpoɯ ꞁɐᴉɔǝds ǝǝɹɥʇ ꞁꞁⱯ\nǝpoW ᵷuᴉuʍɐdS ꞁɐɯᴉuⱯ‑ᴉʇuⱯ oʇ ɥɔʇᴉʍs oʇ ɹǝʇʇɐW pᴉoɅ ɥʇᴉʍ ʞɔᴉꞁɔ‑ʇɥᵷᴉᴚ\nǝpoW ᵷuᴉuʍɐdS ɹǝʇsuoW‑ᴉʇuⱯ oʇ ɥɔʇᴉʍs oʇ ǝuoʇsʍoꞁ⅁ ɥʇᴉʍ ʞɔᴉꞁɔ‑ʇɥᵷᴉᴚ\nǝpoW uoᴉʇɐɹǝꞁǝɔɔⱯ ɥʇʍoɹ⅁ oʇ ɥɔʇᴉʍs oʇ ǝuoʇspǝᴚ ɥʇᴉʍ ʞɔᴉꞁɔ‑ʇɥᵷᴉᴚ\nMʞ ⥝ ɟo uoᴉʇdɯnsuoɔ ɹǝʍod ɐ ɥʇᴉʍ ᵷuᴉʇɥᵷᴉꞁ sǝpᴉʌoɹԀ", "tooltip.anvilcraft.item.ionocraft": "pᴉɹᵷ ɹǝʍod ǝɥʇ uᴉ pǝɔɐꞁd uǝɥʍ ʇɐoꞁɟ ꞁꞁᴉʍ ʇI", - "tooltip.anvilcraft.item.ionocraft_backpack": "ʎɹoʇuǝʌuᴉ ǝɥʇ uᴉ sɹoʇᴉɔɐdɐɔ ɯoɹɟ ɹo pᴉɹᵷ ʎᵷɹǝuǝ ǝɥʇ ɯoɹɟ pǝᴉꞁddns ɹǝʍod sǝɹᴉnbǝᴚ ˙pǝddᴉnbǝ ǝꞁᴉɥʍ ʇɥᵷᴉꞁɟ ǝʌᴉʇɐǝɹɔ sʍoꞁꞁⱯ", + "tooltip.anvilcraft.item.ionocraft_backpack": "sɹoʇᴉɔɐdɐɔ ɹo pᴉɹᵷ ʎᵷɹǝuǝ ǝɥʇ ɯoɹɟ ɹǝʍod sǝɹᴉnbǝɹ 'pǝddᴉnbǝ ǝꞁᴉɥʍ ʇɥᵷᴉꞁɟ ǝʌᴉʇɐǝɹɔ sʍoꞁꞁⱯ", "tooltip.anvilcraft.item.item_collector": "MʞᘔƐ oʇ Mʞᘔ ɯoɹɟ 'ᵷuᴉꞁooɔ puɐ ǝᵷuɐɹ uo pǝsɐq uoᴉʇdɯnsuoɔ ɹǝʍod ʇsnɾpⱯ", - "tooltip.anvilcraft.item.item_detector": "ꞁɐuᵷᴉs ʇndʇno oʇ (sɹǝuᴉɐʇuoɔ/sdoɹp) puᴉɥǝq sɯǝʇᴉ ɔᴉɟᴉɔǝds sʇɔǝʇǝᗡ", + "tooltip.anvilcraft.item.item_detector": "ꞁɐuᵷᴉs ǝuoʇspǝɹ ʇndʇno oʇ (sɹǝuᴉɐʇuoɔ/sdoɹp) puᴉɥǝq sɯǝʇᴉ ɔᴉɟᴉɔǝds sʇɔǝʇǝᗡ", "tooltip.anvilcraft.item.laser_receiver": "sɹǝsɐꞁ pǝʌᴉǝɔǝɹ ɯoɹɟ ꞁɐuᵷᴉs ʇndʇno puɐ ɹǝʍod sǝʇɐɹǝuǝ⅁", - "tooltip.anvilcraft.item.lead_pressure_plate": "ǝʇɐꞁd pɐǝꞁ ɐ osꞁɐ 'ǝʌoqɐ sǝᴉɔǝds qoɯ ɟo ɹǝqɯnu ǝɥʇ uo pǝsɐq ꞁɐuᵷᴉs ǝuoʇspǝɹ ʇndʇnOǝʇɐꞁd pɐǝꞁ ɐ osꞁɐ 'ǝʌoqɐ sǝᴉɔǝds ꞁɐɔᴉᵷoꞁoᴉq ɟo ɹǝqɯnu ǝɥʇ uo pǝsɐq ꞁɐuᵷᴉs ǝuoʇspǝɹ ʇndʇnO", + "tooltip.anvilcraft.item.lead_pressure_plate": "ǝʇɐꞁd pɐǝꞁ ɐ osꞁɐ 'ǝʌoqɐ sǝᴉɔǝds qoɯ ɟo ɹǝqɯnu ǝɥʇ uo pǝsɐq ꞁɐuᵷᴉs ǝuoʇspǝɹ ʇndʇnO", "tooltip.anvilcraft.item.levitation_powder": "ssǝussǝꞁʇɥᵷᴉǝʍ ʇɥᵷᴉꞁS", "tooltip.anvilcraft.item.magnet": "ǝsn uǝɥʍ sɯǝʇᴉ ᵷuᴉpunoɹɹns ʇɔɐɹʇʇⱯ", "tooltip.anvilcraft.item.magnet_block": "sǝᵷɹɐɥɔ ǝʇɐɹǝuǝᵷ oʇ sʞɔoꞁq ɹǝddoɔ ʇuǝɔɐɾpɐ sǝsnɐɔ 'uoʇsᴉd ǝɥʇ ʎq pǝꞁꞁnd puɐ pǝɥsnd uǝɥʍ 'ʍoꞁǝq ꞁᴉʌuɐ ǝɥʇ ᵷuᴉʇɔɐɹʇʇⱯ", @@ -1304,18 +1662,16 @@ "tooltip.anvilcraft.item.negative_matter_block": "ɹǝʇʇɐɯ ʎʇᴉʌɐɹᵷ ᴉʇuɐ sᴉ ʇᴉ 'ɹǝʇʇɐɯᴉʇuɐ ʇou sᴉ ɹǝʇʇɐɯ ǝʌᴉʇɐᵷǝN", "tooltip.anvilcraft.item.negative_matter_nugget": "ɹǝʇʇɐɯ ʎʇᴉʌɐɹᵷ ᴉʇuɐ sᴉ ʇᴉ 'ɹǝʇʇɐɯᴉʇuɐ ʇou sᴉ ɹǝʇʇɐɯ ǝʌᴉʇɐᵷǝN", "tooltip.anvilcraft.item.neutronium_ingot": "ʞɔoɹpǝq puɐ 'ʞɔoꞁq ɹǝʇʇɐɯ ǝʌᴉʇɐᵷǝu 'ʇsnp puǝ ʇdǝɔxǝ sʞɔoꞁq ʇsoɯ ɥᵷnoɹɥʇ ssɐԀ", - "tooltip.anvilcraft.item.overseer": "(ǝᵷuɐɹ ϛxϛ 'sɹǝʎɐꞁ Ɛ xɐɯ) ǝᵷuɐɹ pɐoꞁ ʞunɥɔ ǝsɐǝɹɔuᴉ sɹǝʎɐꞁ ǝsɐq ɹǝɥᵷᴉH ˙ǝsɐq ꞁǝǝʇS ꞁɐʎoᴚ ƐxƐ uo ɹǝpɐoꞁ ʞunɥƆ", "tooltip.anvilcraft.item.oxidized_copper_pressure_plate": "ǝʇɐꞁd ɹǝddoɔ ɐ osꞁɐ 'ǝɯᴉʇ ᵷuᴉssǝɹd ɥʇᴉʍ sǝsɐǝɹɔuᴉ ꞁɐuᵷᴉs ǝuoʇspǝᴚ", "tooltip.anvilcraft.item.piezoelectric_crystal": "ʇᴉ uo ꞁꞁɐɟ ꞁᴉʌuɐ uɐ ʎq pǝʇɐɹǝuǝᵷ ǝᵷɹɐɥƆ", + "tooltip.anvilcraft.item.pill_box": "ǝsn ʞɔᴉnb ɹoɟ sꞁꞁᴉd ǝɹoʇS", + "tooltip.anvilcraft.item.pill_box.shift": "ʎɹoʇuǝʌuᴉ ǝɥʇ uᴉ ɯǝɥʇ ǝsn oʇ [%s] ssǝɹd puɐ 'ɥɔɐǝ ꞁꞁᴉd ǝuo ǝʞɐʇ oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉɹ 'sꞁꞁᴉd ǝɹoʇS", "tooltip.anvilcraft.item.plutonium_pressure_plate": "ǝʇɐꞁd ɯnᴉuoʇnꞁd ɐ osꞁɐ 'ʎʇᴉꞁᴉqɐɹnp ɯǝʇᴉ puɐɥ uᴉ ɹǝʎɐꞁd ǝɥʇ uo pǝsɐq ꞁɐuᵷᴉs ǝuoʇspǝɹ ɐ ʇndʇnO", "tooltip.anvilcraft.item.polished_heavy_iron_block": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.polished_heavy_iron_slab": "ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.polished_heavy_iron_stairs": "ɟooɹd uoᴉsoꞁdxƎ", - "tooltip.anvilcraft.item.power_converter_big": "Mʞ 9Ɛ sǝɯnsuoɔ 'ƎℲ oʇuᴉ ɹǝʍod ʇɹǝʌuoƆ", - "tooltip.anvilcraft.item.power_converter_middle": "Mʞ 9 sǝɯnsuoɔ 'ƎℲ oʇuᴉ ɹǝʍod ʇɹǝʌuoƆ", - "tooltip.anvilcraft.item.power_converter_small": "Mʞ ⥝ sǝɯnsuoɔ 'ƎℲ oʇuᴉ ɹǝʍod ʇɹǝʌuoƆ", "tooltip.anvilcraft.item.powered_sliding_rail": "pǝɹǝʍod uǝɥʍ sʞɔoꞁq ɹo 'sǝᴉʇᴉʇuǝ 'sɯǝʇᴉ sǝʇɐɹǝꞁǝɔɔⱯ", - "tooltip.anvilcraft.item.propel_piston": "ɹǝʍod ɹǝsɐꞀ ɹo ɹoʇᴉɔɐdɐƆ sǝɹᴉnbǝᴚ ˙ɯɹoʍ uoʇsᴉd pǝʇɐɹᵷǝʇuI", + "tooltip.anvilcraft.item.propel_piston": "ɹǝʍod ɹǝsɐꞀ ɹo ɹoʇᴉɔɐdɐƆ sǝɹᴉnbǝɹ 'ɯɹoʍ uoʇsᴉd pǝʇɐɹᵷǝʇuI", "tooltip.anvilcraft.item.pulse_generator": "uoᴉʇɐɹnp puɐ ʎɐꞁǝp ǝsꞁnd sǝzᴉɯoʇsnƆ", "tooltip.anvilcraft.item.recipe.processing.chance": "ǝɔuɐɥƆ %%%1$s", "tooltip.anvilcraft.item.recovery_pearl": "ʇuᴉod ɥʇɐǝp ʇsɐꞁ oʇ ʇɹodǝꞁǝʇ oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉᴚ", @@ -1336,8 +1692,9 @@ "tooltip.anvilcraft.item.sliding_rail": "sʞɔoꞁq uǝʌǝ puɐ sǝᴉʇᴉʇuǝ ᵷuᴉpᴉꞁs ɹoɟ ǝɔɐɟɹns ssǝꞁuoᴉʇɔᴉɹℲ", "tooltip.anvilcraft.item.sliding_rail_stop": "sʞɔoꞁq ɹo 'sǝᴉʇᴉʇuǝ 'sɯǝʇᴉ ᵷuᴉpᴉꞁs sdoʇS", "tooltip.anvilcraft.item.smooth_royal_steel_block": "ɟooɹd uoᴉsoꞁdxƎ", - "tooltip.anvilcraft.item.space_overcompressor": "sdoɹp oʇuᴉ sʇndʇno ʞɔoꞁqᴉʇꞁnɯ sǝssǝɹdɯoƆ ˙sʇoᵷuI ɯnᴉuoɹʇnǝN oʇuᴉ sɯǝʇᴉ sǝssǝɹdɯoƆ", - "tooltip.anvilcraft.item.spectral_anvil": "ꞁꞁɐɟ ʞɔoꞁq‑ᘔ ɐ sɐ pǝʇɐǝɹʇ sʎɐʍꞁɐ sᴉ ʇɔɐdɯᴉ ǝɥʇ 'ʇɥᵷᴉǝɥ ꞁɐnʇɔɐ ǝɥʇ ɹǝʇʇɐɯ ou puɐ 'sʞɔoꞁq ʇuǝɹɐdsuɐɹʇ ɥᵷnoɹɥʇ ssɐd uɐɔ ʇI ˙pɹɐʍuʍop sꞁꞁɐɟ puɐ pǝʇɐǝɹɔ sᴉ ʍopɐɥs ɯoʇuɐɥd ɐ 'pǝzᴉʇǝuᵷɐɯǝp sᴉ ʇǝuᵷɐɯ ɹǝddn ǝɥʇ uǝɥM", + "tooltip.anvilcraft.item.space_overcompressor": "sdoɹp oʇuᴉ sʇndʇno ʞɔoꞁqᴉʇꞁnɯ sǝssǝɹdɯoɔ 'sʇoᵷuI ɯnᴉuoɹʇnǝN oʇuᴉ sɯǝʇᴉ sǝssǝɹdɯoƆ", + "tooltip.anvilcraft.item.spectral_anvil": "pǝzᴉʇǝuᵷɐɯǝp sᴉ ʇǝuᵷɐɯ ɹǝddn ǝɥʇ uǝɥʍ sʍopɐɥs ɯoʇuɐɥd sǝʇɐǝɹƆ", + "tooltip.anvilcraft.item.spectral_anvil.shift": "ꞁꞁɐɟ ʞɔoꞁq‑ᘔ ɐ sɐ pǝʇɐǝɹʇ sʎɐʍꞁɐ sᴉ ʇɔɐdɯᴉ ǝɥʇ 'ʇɥᵷᴉǝɥ ꞁɐnʇɔɐ ǝɥʇ ɹǝʇʇɐɯ ou puɐ 'sʞɔoꞁq ʇuǝɹɐdsuɐɹʇ ɥᵷnoɹɥʇ ssɐd uɐɔ ʇᴉ 'pɹɐʍuʍop sꞁꞁɐɟ puɐ pǝʇɐǝɹɔ sᴉ ʍopɐɥs ɯoʇuɐɥd ɐ 'pǝzᴉʇǝuᵷɐɯǝp sᴉ ʇǝuᵷɐɯ ɹǝddn ǝɥʇ uǝɥM", "tooltip.anvilcraft.item.spectral_slingshot": "ɯoʇuɐɥd sʇᴉ ǝɹᴉɟ oʇ uodɐǝʍ ɐ pɐoꞀ", "tooltip.anvilcraft.item.stable_neutronium_ingot": "sʞɔoꞁq ɥᵷnoɹɥʇ ᵷuᴉssɐd ǝɹoɯ oN", "tooltip.anvilcraft.item.structure_tool.click_to_copy": "ʎdoɔ oʇ ʞɔᴉꞁƆ", @@ -1352,8 +1709,8 @@ "tooltip.anvilcraft.item.structure_tool.must_odd": "ϛ⥝ pǝǝɔxǝ ʇouuɐɔ puɐ ppo ǝq ʇsnɯ ɐǝɹɐ pǝʇɔǝꞁǝs ǝɥʇ ɟo ɥʇᵷuǝꞁ ǝpᴉs ǝɥ⟘", "tooltip.anvilcraft.item.structure_tool.shift_to_clear": "ɐǝɹɐ pǝʇɔǝꞁǝs ɹɐǝꞁɔ oʇ ʞɔᴉꞁɔ ʇɥᵷᴉɹ + ʇɟᴉɥS", "tooltip.anvilcraft.item.structure_tool.size": "%3$d :z '%2$d :ʎ '%1$d :x :ǝzᴉS", - "tooltip.anvilcraft.item.supercapacitor": "pǝɹoʇs ՐW08", - "tooltip.anvilcraft.item.supercapacitor_empty": "ʎʇᴉɔɐdɐɔ ՐW08", + "tooltip.anvilcraft.item.supercapacitor": "pǝɹoʇs ƎℲW 09⥝", + "tooltip.anvilcraft.item.supercapacitor_empty": "ʎʇᴉɔɐdɐɔ ƎℲW 09⥝", "tooltip.anvilcraft.item.tempering_glass": "ʇɔǝꞁꞁoɔ uo pǝɹᴉnbǝɹ sꞁooʇ oN 'ɟooɹd uoᴉsoꞁdxƎ", "tooltip.anvilcraft.item.tesla_tower": "Mʞ 8ᘔ⥝ ɟo uoᴉʇdɯnsuoɔ ɹǝʍod ɐ ɥʇᴉʍ 'spᴉɹᵷ 8 ɟo ǝᵷuɐɹ ɐ uᴉɥʇᴉʍ spoɹ ᵷuᴉuʇɥᵷᴉꞁ ɹo sqoɯ oʇ ʞɔoɥs ɔᴉɹʇɔǝꞁƎ", "tooltip.anvilcraft.item.tin_can": "pooɟ pǝuuɐɔ uᴉɐʇqo oʇ pooɟ ʎuɐ ɥʇᴉʍ pǝuᴉqɯoɔ ǝq uɐɔ suɐɔ uᴉ⟘", @@ -1361,8 +1718,8 @@ "tooltip.anvilcraft.item.titanium_pressure_plate": "ǝʇɐꞁd ɯnᴉuɐʇᴉʇ ɐ osꞁɐ 'ǝʌoqɐ sɯǝʇᴉ ǝɥʇ ɟo ʎʇᴉꞁᴉqɐɹnp ʇsǝɥᵷᴉɥ ǝɥʇ uo pǝsɐq ꞁɐuᵷᴉs ǝuoʇspǝɹ ɐ ʇndʇnO", "tooltip.anvilcraft.item.topaz": "ᵷuᴉuʇɥᵷᴉꞁ ɟo ɹǝʍod ǝɥʇ ᵷuᴉuᴉɐʇuoƆ", "tooltip.anvilcraft.item.topaz_amulet": "ǝᵷɐɯɐp ᵷuᴉuʇɥᵷᴉꞁ oʇ ʎʇᴉunɯɯᴉ sʇuɐɹ⅁", - "tooltip.anvilcraft.item.totem_of_rage": "ǝʇnuᴉɯ ⥝ ɹǝʇɟɐ ǝꞁqɐʇᴉʌǝuᴉ sᴉ ɥʇɐǝᗡ ˙ǝᵷɐɯɐp ꞁɐʇɐɟ uo ʞɹǝsɹǝq puɐ ʎʇᴉꞁᴉqɐɹǝuꞁnʌuᴉ sʇuɐɹ⅁", - "tooltip.anvilcraft.item.totem_of_recovery": "ʇuᴉod ɥʇɐǝp oʇ uɹnʇǝɹ oʇ ꞁɹɐǝԀ ꞁꞁɐɔǝᴚ ɐ sʇuɐɹ⅁ ˙ɥʇɐǝp uo uʍɐds oʇ sʇɹodǝꞁǝ⟘", + "tooltip.anvilcraft.item.totem_of_rage": "ǝʇnuᴉɯ ⥝ ɹǝʇɟɐ ǝꞁqɐʇᴉʌǝuᴉ sᴉ ɥʇɐǝp 'ǝᵷɐɯɐp ꞁɐʇɐɟ uo ʞɹǝsɹǝq puɐ ʎʇᴉꞁᴉqɐɹǝuꞁnʌuᴉ sʇuɐɹ⅁", + "tooltip.anvilcraft.item.totem_of_recovery": "ʇuᴉod ɥʇɐǝp oʇ uɹnʇǝɹ oʇ ꞁɹɐǝԀ ꞁꞁɐɔǝᴚ ɐ sʇuɐɹᵷ 'ɥʇɐǝp uo uʍɐds oʇ sʇɹodǝꞁǝ⟘", "tooltip.anvilcraft.item.transcendence_anvil_hammer": "ǝɔɐɯ ɐ puɐ 'sǝꞁᵷᵷoᵷ 'ɥɔuǝɹʍ ɐ 'ꞁᴉʌuɐ uɐ 'ɹǝɯɯɐɥ ɐ s,ʇI", "tooltip.anvilcraft.item.transmission_pole": "8 ɟo ɥʇᵷuǝꞁ uoᴉssᴉɯsuɐɹʇ ɐ ɥʇᴉʍ pᴉɹᵷ ɹǝʍod ɐ pꞁᴉnᗺ", "tooltip.anvilcraft.item.transparent_crafting_table": "ǝꞁqɐ⟘ ᵷuᴉʇɟɐɹƆ ǝꞁqɐʇɔǝuuoɔ 'ɔᴉʇǝɥʇsǝⱯ", @@ -1376,10 +1733,16 @@ "tooltip.anvilcraft.jade.power_information": "%s :pᴉɹ⅁ ɹǝʍoԀ", "tooltip.anvilcraft.jade.ruby_prism.power": "%d :ꞁǝʌǝꞁ ɹǝsɐꞀ", "tooltip.anvilcraft.pill_box": "ʎɹoʇuǝʌuᴉ ǝɥʇ uᴉ ɯǝɥʇ ǝsn oʇ [%s] ssǝɹd puɐ 'ɥɔɐǝ ꞁꞁᴉd ǝuo ǝʞɐʇ oʇ ʞɔᴉꞁɔ-ʇɥᵷᴉɹ 'sꞁꞁᴉd ǝɹoʇS", - "tooltip.anvilcraft.press_key": "uoᴉʇɐɯɹoɟuᴉ ɹoɟ [%s] pꞁoH", + "tooltip.anvilcraft.press_key": "uoᴉʇɐɯɹoɟuᴉ ǝɹoɯ ɹoɟ [%s] pꞁoH", "tooltip.anvilcraft.propel_piston.remaining_energy": "%s :ʎᵷɹǝuƎ ᵷuᴉuᴉɐɯǝᴚ ", "tooltip.anvilcraft.propel_piston.remaining_push": "ǝɯᴉʇ-ʞɔoꞁq %s :ɥsnԀ ᵷuᴉuᴉɐɯǝᴚ ", "tooltip.anvilcraft.propel_piston.state": " :ǝʇɐʇS uoʇsᴉԀ ꞁǝdoɹԀ", + "tooltip.anvilcraft.property.box_contents": "%2$d / %1$d :ssǝuꞁꞁnℲ", + "tooltip.anvilcraft.property.devour_range": "%s :ǝᵷuɐᴚ ɹnoʌǝᗡ ʇuǝɹɹnƆ", + "tooltip.anvilcraft.property.devour_range.range_3": "ƐxƐ", + "tooltip.anvilcraft.property.devour_range.range_5": "ϛxϛ", + "tooltip.anvilcraft.property.devour_range.range_7": "ㄥxㄥ", + "tooltip.anvilcraft.property.devour_range.range_9": "6x6", "tooltip.anvilcraft.property.eternal": "pᴉoʌ ǝɥʇ puɐ ǝɯᴉʇ ǝɥʇ uǝʌǝ 'snʇɔɐɔ 'ǝpoꞁdxǝ 'ǝɹᴉɟ ǝunɯɯᴉ 'ǝꞁqɐʞɐǝɹqun :ꞁɐuɹǝʇƎ", "tooltip.anvilcraft.property.ferocious": "sʇuǝɯʇuɐɥɔuǝ ꞁꞁɐ ɟo ꞁǝʌǝꞁ ǝɥʇ uo pǝsɐq ʎɔuǝᴉɔᴉɟɟǝ ᵷuᴉuᴉɯ puɐ ǝᵷɐɯɐp ʞɔɐʇʇɐ ǝɔuɐɥuǝ :snoᴉɔoɹǝℲ", "tooltip.anvilcraft.property.fire_reforging": "ɐʌɐꞁ ɹo ǝɹᴉɟ uᴉ ᵷuᴉpuǝɯ :ᵷuᴉᵷɹoɟǝᴚ", @@ -1408,5 +1771,6 @@ "tooltip.anvilcraft.space_overcompressor.stored_mass": "%s :ssɐW pǝɹoʇS", "tooltip.anvilcraft.thought": "oɟuᴉ ǝɹoɯ ɹoɟ [%s] ssǝɹԀ", "tooltip.anvilcraft.working_progress.progress": "%%%2$s %1$s ", + "tooltip.anvilcraft.working_progress.time": "%2$s / %1$s ", "tooltip.anvilcraft.working_progress.title": ":ssǝɹᵷoɹd ᵷuᴉʞɹoM" } \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/lang/en_us.json b/src/generated/resources/assets/anvilcraft/lang/en_us.json index d2057cc62a..a17714bc53 100644 --- a/src/generated/resources/assets/anvilcraft/lang/en_us.json +++ b/src/generated/resources/assets/anvilcraft/lang/en_us.json @@ -143,6 +143,12 @@ "anvilcraft.configuration.giant_anvil_max_shock_radius.tooltip": "Maximum radius of giant anvil's shock behavior", "anvilcraft.configuration.goggle_mode": "Goggle Mode", "anvilcraft.configuration.goggle_mode.tooltip": "The mode of the anvil hammer goggle info", + "anvilcraft.configuration.ground_heave_particle_chance": "Ground Heave Particle Chance", + "anvilcraft.configuration.ground_heave_particle_chance.tooltip": "Probability (0.0-1.0) each block spawns ground heave particles", + "anvilcraft.configuration.ground_heave_particle_count": "Ground Heave Particle Count", + "anvilcraft.configuration.ground_heave_particle_count.tooltip": "Number of particles per block spawned by ground heave effect", + "anvilcraft.configuration.ground_heave_particles_enabled": "Ground Heave Particles Enabled", + "anvilcraft.configuration.ground_heave_particles_enabled.tooltip": "Enable ground heave shockwave particles and sound when giant anvil triggers shock mechanism", "anvilcraft.configuration.heliostats_detection_interval": "Heliostats detection interval", "anvilcraft.configuration.heliostats_detection_interval.tooltip": "The number of ticks between heliostat detections", "anvilcraft.configuration.heliostats_render_distance": "Heliostats Render Distance", @@ -153,6 +159,8 @@ "anvilcraft.configuration.induction_light_block_ripening_cooldown.tooltip": "Induction light block ripening cooldown", "anvilcraft.configuration.induction_light_block_ripening_range": "Induction Light Block Ripening Range", "anvilcraft.configuration.induction_light_block_ripening_range.tooltip": "Induction light block ripening range", + "anvilcraft.configuration.iono_craft_backpack_exhaust_particles_enabled": "Iono Craft Backpack Exhaust Particles Enabled", + "anvilcraft.configuration.iono_craft_backpack_exhaust_particles_enabled.tooltip": "Enable exhaust particles when flying with ionocraft backpack", "anvilcraft.configuration.iono_craft_backpack_hud": "Iono Craft Backpack Hud", "anvilcraft.configuration.iono_craft_backpack_hud.button": "Iono Craft Backpack Hud", "anvilcraft.configuration.iono_craft_backpack_hud.enabled": "Enabled", @@ -234,17 +242,30 @@ "block.anvilcraft.black_chocolate_slab": "Black Chocolate Slab", "block.anvilcraft.black_chocolate_stairs": "Black Chocolate Stairs", "block.anvilcraft.black_hole": "Black Hole", + "block.anvilcraft.black_reinforced_concrete": "Black Reinforced Concrete", + "block.anvilcraft.black_reinforced_concrete_slab": "Black Reinforced Concrete Slab", + "block.anvilcraft.black_reinforced_concrete_stair": "Black Reinforced Concrete Stair", + "block.anvilcraft.black_reinforced_concrete_wall": "Black Reinforced Concrete Wall", "block.anvilcraft.block_comparator": "Block Comparator", "block.anvilcraft.block_devourer": "Block Devourer", "block.anvilcraft.block_placer": "Block Placer", "block.anvilcraft.blue_cement": "Blue Cement", "block.anvilcraft.blue_cement_cauldron": "Blue Cement Cauldron", + "block.anvilcraft.blue_reinforced_concrete": "Blue Reinforced Concrete", + "block.anvilcraft.blue_reinforced_concrete_slab": "Blue Reinforced Concrete Slab", + "block.anvilcraft.blue_reinforced_concrete_stair": "Blue Reinforced Concrete Stair", + "block.anvilcraft.blue_reinforced_concrete_wall": "Blue Reinforced Concrete Wall", "block.anvilcraft.brass_block": "Block of Brass", "block.anvilcraft.brass_pressure_plate": "Brass Pressure Plate", "block.anvilcraft.bronze_block": "Block of Bronze", "block.anvilcraft.bronze_pressure_plate": "Bronze Pressure Plate", "block.anvilcraft.brown_cement": "Brown Cement", "block.anvilcraft.brown_cement_cauldron": "Brown Cement Cauldron", + "block.anvilcraft.brown_reinforced_concrete": "Brown Reinforced Concrete", + "block.anvilcraft.brown_reinforced_concrete_slab": "Brown Reinforced Concrete Slab", + "block.anvilcraft.brown_reinforced_concrete_stair": "Brown Reinforced Concrete Stair", + "block.anvilcraft.brown_reinforced_concrete_wall": "Brown Reinforced Concrete Wall", + "block.anvilcraft.burning_heater": "Burning Heater", "block.anvilcraft.cake_base_block": "Cake Base Block", "block.anvilcraft.cake_block": "Cake Block", "block.anvilcraft.celestial_forging_anvil": "Celestial Forging Anvil", @@ -252,6 +273,7 @@ "block.anvilcraft.celestial_forging_anvil_fluid_interface": "Celestial Forging Anvil Fluid Interface", "block.anvilcraft.celestial_forging_anvil_laser_interface": "Celestial Forging Anvil Laser Interface", "block.anvilcraft.celestial_forging_anvil_logistics_interface": "Celestial Forging Anvil Logistics Interface", + "block.anvilcraft.celestial_forging_anvil_portal": "Celestial Forging Anvil Portal", "block.anvilcraft.charge_collector": "Charge Collector", "block.anvilcraft.charger": "Charger", "block.anvilcraft.chocolate_block": "Block of Chocolate", @@ -272,6 +294,7 @@ "block.anvilcraft.copper_pressure_plate": "Copper Pressure Plate", "block.anvilcraft.corrupted_beacon": "Corrupted Beacon", "block.anvilcraft.crab_trap": "Crab Trap", + "block.anvilcraft.crate": "Crate", "block.anvilcraft.cream_block": "Cream Block", "block.anvilcraft.creative_generator": "Creative Generator", "block.anvilcraft.crushing_table": "Crushing Table", @@ -297,6 +320,10 @@ "block.anvilcraft.cut_royal_steel_stairs": "Cut Royal Steel Stairs", "block.anvilcraft.cyan_cement": "Cyan Cement", "block.anvilcraft.cyan_cement_cauldron": "Cyan Cement Cauldron", + "block.anvilcraft.cyan_reinforced_concrete": "Cyan Reinforced Concrete", + "block.anvilcraft.cyan_reinforced_concrete_slab": "Cyan Reinforced Concrete Slab", + "block.anvilcraft.cyan_reinforced_concrete_stair": "Cyan Reinforced Concrete Stair", + "block.anvilcraft.cyan_reinforced_concrete_wall": "Cyan Reinforced Concrete Wall", "block.anvilcraft.deepslate_lead_ore": "Deepslate Lead Ore", "block.anvilcraft.deepslate_silver_ore": "Deepslate Silver Ore", "block.anvilcraft.deepslate_tin_ore": "Deepslate Tin Ore", @@ -319,8 +346,8 @@ "block.anvilcraft.exp_fluid_cauldron": "Exp Fluid Cauldron", "block.anvilcraft.exp_gem_block": "Block of Experience Gem", "block.anvilcraft.exposed_copper_pressure_plate": "Exposed Copper Pressure Plate", + "block.anvilcraft.fe_collector": "FE Collector", "block.anvilcraft.ferrite_core_magnet_block": "Ferrite-Cored Block of Magnet", - "block.anvilcraft.fire_cauldron": "Fire Cauldron", "block.anvilcraft.fish_tank": "Fish Tank", "block.anvilcraft.flint_block": "Flint Block", "block.anvilcraft.fluid_tank": "Fluid Tank", @@ -334,8 +361,16 @@ "block.anvilcraft.glowing_tungsten_block": "Glowing Block of Tungsten", "block.anvilcraft.gray_cement": "Gray Cement", "block.anvilcraft.gray_cement_cauldron": "Gray Cement Cauldron", + "block.anvilcraft.gray_reinforced_concrete": "Gray Reinforced Concrete", + "block.anvilcraft.gray_reinforced_concrete_slab": "Gray Reinforced Concrete Slab", + "block.anvilcraft.gray_reinforced_concrete_stair": "Gray Reinforced Concrete Stair", + "block.anvilcraft.gray_reinforced_concrete_wall": "Gray Reinforced Concrete Wall", "block.anvilcraft.green_cement": "Green Cement", "block.anvilcraft.green_cement_cauldron": "Green Cement Cauldron", + "block.anvilcraft.green_reinforced_concrete": "Green Reinforced Concrete", + "block.anvilcraft.green_reinforced_concrete_slab": "Green Reinforced Concrete Slab", + "block.anvilcraft.green_reinforced_concrete_stair": "Green Reinforced Concrete Stair", + "block.anvilcraft.green_reinforced_concrete_wall": "Green Reinforced Concrete Wall", "block.anvilcraft.gunpowder_block": "Gunpowder Block", "block.anvilcraft.heat_collector": "Heat Collector", "block.anvilcraft.heat_collector.placement_too_close_to_another": "Too close to another heat collector", @@ -354,6 +389,7 @@ "block.anvilcraft.heliostats.placement_no_pos": "Irradiation position not set", "block.anvilcraft.hollow_magnet_block": "Hollowed Block of Magnet", "block.anvilcraft.honey_cauldron": "Honey Cauldron", + "block.anvilcraft.hyperdimension_storage_station": "Hyperdimension Storage Station", "block.anvilcraft.impact_pile": "Impact Pile", "block.anvilcraft.incandescent_netherite_block": "Incandescent Block of Netherite", "block.anvilcraft.incandescent_tungsten_block": "Incandescent Block of Tungsten", @@ -362,6 +398,7 @@ "block.anvilcraft.item_detector": "Item Detector", "block.anvilcraft.jewelcrafting_table": "Jewel Crafting Table", "block.anvilcraft.large_cake": "Large Cake", + "block.anvilcraft.large_crate": "Large Crate", "block.anvilcraft.large_fluid_tank": "Large Fluid Tank", "block.anvilcraft.laser_receiver": "Laser Receiver", "block.anvilcraft.lava_cauldron": "Lava Cauldron", @@ -370,13 +407,29 @@ "block.anvilcraft.levitation_powder_block": "Block of Levitation Powder", "block.anvilcraft.light_blue_cement": "Light Blue Cement", "block.anvilcraft.light_blue_cement_cauldron": "Light Blue Cement Cauldron", + "block.anvilcraft.light_blue_reinforced_concrete": "Light Blue Reinforced Concrete", + "block.anvilcraft.light_blue_reinforced_concrete_slab": "Light Blue Reinforced Concrete Slab", + "block.anvilcraft.light_blue_reinforced_concrete_stair": "Light Blue Reinforced Concrete Stair", + "block.anvilcraft.light_blue_reinforced_concrete_wall": "Light Blue Reinforced Concrete Wall", "block.anvilcraft.light_gray_cement": "Light Gray Cement", "block.anvilcraft.light_gray_cement_cauldron": "Light Gray Cement Cauldron", + "block.anvilcraft.light_gray_reinforced_concrete": "Light Gray Reinforced Concrete", + "block.anvilcraft.light_gray_reinforced_concrete_slab": "Light Gray Reinforced Concrete Slab", + "block.anvilcraft.light_gray_reinforced_concrete_stair": "Light Gray Reinforced Concrete Stair", + "block.anvilcraft.light_gray_reinforced_concrete_wall": "Light Gray Reinforced Concrete Wall", "block.anvilcraft.lime_cement": "Lime Cement", "block.anvilcraft.lime_cement_cauldron": "Lime Cement Cauldron", + "block.anvilcraft.lime_reinforced_concrete": "Lime Reinforced Concrete", + "block.anvilcraft.lime_reinforced_concrete_slab": "Lime Reinforced Concrete Slab", + "block.anvilcraft.lime_reinforced_concrete_stair": "Lime Reinforced Concrete Stair", + "block.anvilcraft.lime_reinforced_concrete_wall": "Lime Reinforced Concrete Wall", "block.anvilcraft.load_monitor": "Load Monitor", "block.anvilcraft.magenta_cement": "Magenta Cement", "block.anvilcraft.magenta_cement_cauldron": "Magenta Cement Cauldron", + "block.anvilcraft.magenta_reinforced_concrete": "Magenta Reinforced Concrete", + "block.anvilcraft.magenta_reinforced_concrete_slab": "Magenta Reinforced Concrete Slab", + "block.anvilcraft.magenta_reinforced_concrete_stair": "Magenta Reinforced Concrete Stair", + "block.anvilcraft.magenta_reinforced_concrete_wall": "Magenta Reinforced Concrete Wall", "block.anvilcraft.magnet_block": "Block of Magnet", "block.anvilcraft.magnetic_chute": "Magnetic Chute", "block.anvilcraft.magnetoelectric_core": "Magnetoelectric Core", @@ -396,6 +449,10 @@ "block.anvilcraft.oil_cauldron": "Oil Cauldron", "block.anvilcraft.orange_cement": "Orange Cement", "block.anvilcraft.orange_cement_cauldron": "Orange Cement Cauldron", + "block.anvilcraft.orange_reinforced_concrete": "Orange Reinforced Concrete", + "block.anvilcraft.orange_reinforced_concrete_slab": "Orange Reinforced Concrete Slab", + "block.anvilcraft.orange_reinforced_concrete_stair": "Orange Reinforced Concrete Stair", + "block.anvilcraft.orange_reinforced_concrete_wall": "Orange Reinforced Concrete Wall", "block.anvilcraft.over_nesting_shulker_box": "Over Nesting Shulker Box", "block.anvilcraft.overheated_ember_metal_block": "Overheated Block of Ember Metal", "block.anvilcraft.overseer": "Overseer", @@ -403,6 +460,10 @@ "block.anvilcraft.piezoelectric_crystal": "Piezoelectric Crystal", "block.anvilcraft.pink_cement": "Pink Cement", "block.anvilcraft.pink_cement_cauldron": "Pink Cement Cauldron", + "block.anvilcraft.pink_reinforced_concrete": "Pink Reinforced Concrete", + "block.anvilcraft.pink_reinforced_concrete_slab": "Pink Reinforced Concrete Slab", + "block.anvilcraft.pink_reinforced_concrete_stair": "Pink Reinforced Concrete Stair", + "block.anvilcraft.pink_reinforced_concrete_wall": "Pink Reinforced Concrete Wall", "block.anvilcraft.plasma_jets": "Plasma Jets", "block.anvilcraft.plutonium_block": "Block of Plutonium", "block.anvilcraft.plutonium_pressure_plate": "Plutonium Pressure Plate", @@ -418,6 +479,10 @@ "block.anvilcraft.pulse_generator": "Pulse Generator", "block.anvilcraft.purple_cement": "Purple Cement", "block.anvilcraft.purple_cement_cauldron": "Purple Cement Cauldron", + "block.anvilcraft.purple_reinforced_concrete": "Purple Reinforced Concrete", + "block.anvilcraft.purple_reinforced_concrete_slab": "Purple Reinforced Concrete Slab", + "block.anvilcraft.purple_reinforced_concrete_stair": "Purple Reinforced Concrete Stair", + "block.anvilcraft.purple_reinforced_concrete_wall": "Purple Reinforced Concrete Wall", "block.anvilcraft.quartz_sand": "Quartz Sand", "block.anvilcraft.raw_lead_block": "Block of Raw Lead", "block.anvilcraft.raw_silver_block": "Block of Raw Silver", @@ -428,72 +493,12 @@ "block.anvilcraft.raw_zinc_block": "Block of Raw Zinc", "block.anvilcraft.red_cement": "Red Cement", "block.anvilcraft.red_cement_cauldron": "Red Cement Cauldron", + "block.anvilcraft.red_reinforced_concrete": "Red Reinforced Concrete", + "block.anvilcraft.red_reinforced_concrete_slab": "Red Reinforced Concrete Slab", + "block.anvilcraft.red_reinforced_concrete_stair": "Red Reinforced Concrete Stair", + "block.anvilcraft.red_reinforced_concrete_wall": "Red Reinforced Concrete Wall", "block.anvilcraft.redhot_netherite_block": "Redhot Block of Netherite", "block.anvilcraft.redhot_tungsten_block": "Redhot Block of Tungsten", - "block.anvilcraft.reinforced_concrete_black": "Reinforced Concrete Black", - "block.anvilcraft.reinforced_concrete_black_slab": "Reinforced Concrete Black Slab", - "block.anvilcraft.reinforced_concrete_black_stair": "Reinforced Concrete Black Stair", - "block.anvilcraft.reinforced_concrete_black_wall": "Reinforced Concrete Black Wall", - "block.anvilcraft.reinforced_concrete_blue": "Reinforced Concrete Blue", - "block.anvilcraft.reinforced_concrete_blue_slab": "Reinforced Concrete Blue Slab", - "block.anvilcraft.reinforced_concrete_blue_stair": "Reinforced Concrete Blue Stair", - "block.anvilcraft.reinforced_concrete_blue_wall": "Reinforced Concrete Blue Wall", - "block.anvilcraft.reinforced_concrete_brown": "Reinforced Concrete Brown", - "block.anvilcraft.reinforced_concrete_brown_slab": "Reinforced Concrete Brown Slab", - "block.anvilcraft.reinforced_concrete_brown_stair": "Reinforced Concrete Brown Stair", - "block.anvilcraft.reinforced_concrete_brown_wall": "Reinforced Concrete Brown Wall", - "block.anvilcraft.reinforced_concrete_cyan": "Reinforced Concrete Cyan", - "block.anvilcraft.reinforced_concrete_cyan_slab": "Reinforced Concrete Cyan Slab", - "block.anvilcraft.reinforced_concrete_cyan_stair": "Reinforced Concrete Cyan Stair", - "block.anvilcraft.reinforced_concrete_cyan_wall": "Reinforced Concrete Cyan Wall", - "block.anvilcraft.reinforced_concrete_gray": "Reinforced Concrete Gray", - "block.anvilcraft.reinforced_concrete_gray_slab": "Reinforced Concrete Gray Slab", - "block.anvilcraft.reinforced_concrete_gray_stair": "Reinforced Concrete Gray Stair", - "block.anvilcraft.reinforced_concrete_gray_wall": "Reinforced Concrete Gray Wall", - "block.anvilcraft.reinforced_concrete_green": "Reinforced Concrete Green", - "block.anvilcraft.reinforced_concrete_green_slab": "Reinforced Concrete Green Slab", - "block.anvilcraft.reinforced_concrete_green_stair": "Reinforced Concrete Green Stair", - "block.anvilcraft.reinforced_concrete_green_wall": "Reinforced Concrete Green Wall", - "block.anvilcraft.reinforced_concrete_light_blue": "Reinforced Concrete Light Blue", - "block.anvilcraft.reinforced_concrete_light_blue_slab": "Reinforced Concrete Light Blue Slab", - "block.anvilcraft.reinforced_concrete_light_blue_stair": "Reinforced Concrete Light Blue Stair", - "block.anvilcraft.reinforced_concrete_light_blue_wall": "Reinforced Concrete Light Blue Wall", - "block.anvilcraft.reinforced_concrete_light_gray": "Reinforced Concrete Light Gray", - "block.anvilcraft.reinforced_concrete_light_gray_slab": "Reinforced Concrete Light Gray Slab", - "block.anvilcraft.reinforced_concrete_light_gray_stair": "Reinforced Concrete Light Gray Stair", - "block.anvilcraft.reinforced_concrete_light_gray_wall": "Reinforced Concrete Light Gray Wall", - "block.anvilcraft.reinforced_concrete_lime": "Reinforced Concrete Lime", - "block.anvilcraft.reinforced_concrete_lime_slab": "Reinforced Concrete Lime Slab", - "block.anvilcraft.reinforced_concrete_lime_stair": "Reinforced Concrete Lime Stair", - "block.anvilcraft.reinforced_concrete_lime_wall": "Reinforced Concrete Lime Wall", - "block.anvilcraft.reinforced_concrete_magenta": "Reinforced Concrete Magenta", - "block.anvilcraft.reinforced_concrete_magenta_slab": "Reinforced Concrete Magenta Slab", - "block.anvilcraft.reinforced_concrete_magenta_stair": "Reinforced Concrete Magenta Stair", - "block.anvilcraft.reinforced_concrete_magenta_wall": "Reinforced Concrete Magenta Wall", - "block.anvilcraft.reinforced_concrete_orange": "Reinforced Concrete Orange", - "block.anvilcraft.reinforced_concrete_orange_slab": "Reinforced Concrete Orange Slab", - "block.anvilcraft.reinforced_concrete_orange_stair": "Reinforced Concrete Orange Stair", - "block.anvilcraft.reinforced_concrete_orange_wall": "Reinforced Concrete Orange Wall", - "block.anvilcraft.reinforced_concrete_pink": "Reinforced Concrete Pink", - "block.anvilcraft.reinforced_concrete_pink_slab": "Reinforced Concrete Pink Slab", - "block.anvilcraft.reinforced_concrete_pink_stair": "Reinforced Concrete Pink Stair", - "block.anvilcraft.reinforced_concrete_pink_wall": "Reinforced Concrete Pink Wall", - "block.anvilcraft.reinforced_concrete_purple": "Reinforced Concrete Purple", - "block.anvilcraft.reinforced_concrete_purple_slab": "Reinforced Concrete Purple Slab", - "block.anvilcraft.reinforced_concrete_purple_stair": "Reinforced Concrete Purple Stair", - "block.anvilcraft.reinforced_concrete_purple_wall": "Reinforced Concrete Purple Wall", - "block.anvilcraft.reinforced_concrete_red": "Reinforced Concrete Red", - "block.anvilcraft.reinforced_concrete_red_slab": "Reinforced Concrete Red Slab", - "block.anvilcraft.reinforced_concrete_red_stair": "Reinforced Concrete Red Stair", - "block.anvilcraft.reinforced_concrete_red_wall": "Reinforced Concrete Red Wall", - "block.anvilcraft.reinforced_concrete_white": "Reinforced Concrete White", - "block.anvilcraft.reinforced_concrete_white_slab": "Reinforced Concrete White Slab", - "block.anvilcraft.reinforced_concrete_white_stair": "Reinforced Concrete White Stair", - "block.anvilcraft.reinforced_concrete_white_wall": "Reinforced Concrete White Wall", - "block.anvilcraft.reinforced_concrete_yellow": "Reinforced Concrete Yellow", - "block.anvilcraft.reinforced_concrete_yellow_slab": "Reinforced Concrete Yellow Slab", - "block.anvilcraft.reinforced_concrete_yellow_stair": "Reinforced Concrete Yellow Stair", - "block.anvilcraft.reinforced_concrete_yellow_wall": "Reinforced Concrete Yellow Wall", "block.anvilcraft.remote_transmission_pole": "Remote Transmission Pole", "block.anvilcraft.resentful_amber_block": "Resentful Block of Amber", "block.anvilcraft.resin_block": "Block of Resin", @@ -546,10 +551,24 @@ "block.anvilcraft.white_chocolate_slab": "White Chocolate Slab", "block.anvilcraft.white_chocolate_stairs": "White Chocolate Stairs", "block.anvilcraft.white_hole": "White Hole", + "block.anvilcraft.white_reinforced_concrete": "White Reinforced Concrete", + "block.anvilcraft.white_reinforced_concrete_slab": "White Reinforced Concrete Slab", + "block.anvilcraft.white_reinforced_concrete_stair": "White Reinforced Concrete Stair", + "block.anvilcraft.white_reinforced_concrete_wall": "White Reinforced Concrete Wall", "block.anvilcraft.yellow_cement": "Yellow Cement", "block.anvilcraft.yellow_cement_cauldron": "Yellow Cement Cauldron", + "block.anvilcraft.yellow_reinforced_concrete": "Yellow Reinforced Concrete", + "block.anvilcraft.yellow_reinforced_concrete_slab": "Yellow Reinforced Concrete Slab", + "block.anvilcraft.yellow_reinforced_concrete_stair": "Yellow Reinforced Concrete Stair", + "block.anvilcraft.yellow_reinforced_concrete_wall": "Yellow Reinforced Concrete Wall", "block.anvilcraft.zinc_block": "Block of Zinc", "block.anvilcraft.zinc_pressure_plate": "Zinc Pressure Plate", + "category.anvilcraft.enchanted": "Enchanted Items", + "category.anvilcraft.foods_and_drinks": "Foods and Drinks", + "category.anvilcraft.namespace": "%s Items", + "category.anvilcraft.namespace.anvilcraft": "AnvilCraft", + "category.anvilcraft.redstone": "Redstone Items", + "category.anvilcraft.unknown_namespace": "Unknown <%s>", "command.anvilcraft.multiBlock.multi_block_pos": "Main part pos is ", "command.anvilcraft.multiBlock.not_multi_block": "This block is not a multi-block", "command.anvilcraft.multiphase.apply.not_player": "Command runner is not player", @@ -575,6 +594,9 @@ "command.anvilcraft.powergrid.info.total_generate": "Total power generate: %s", "command.anvilcraft.powergrid.info.transmitter": "%1$s at %2$s, %3$s, %4$s (Range: %5$s)", "command.anvilcraft.universe.no_id": "No ID provided and cannot find ID in items on hand", + "config.jade.plugin_anvilcraft.burning_heater_provider": "Burning Heater", + "config.jade.plugin_anvilcraft.charger_provider": "Charger", + "config.jade.plugin_anvilcraft.discharger_provider": "Discharger", "config.jade.plugin_anvilcraft.heatable_block_provider": "Heatable Block", "config.jade.plugin_anvilcraft.item_detector": "Item Detector", "config.jade.plugin_anvilcraft.power_provider": "Anvil Craft Power", @@ -584,6 +606,8 @@ "config.waila.plugin_anvilcraft.power_provider": "Anvil Craft Power", "config.waila.plugin_anvilcraft.warning_percent": "Warning Threshold", "curios.identifier.ionocraft_backpack": "Ionocraft Backpack", + "death.attack.anvilcraft.falling_giant_anvil": "%1$s died due to systemic resonance caused by ground vibrations", + "death.attack.anvilcraft.heater_burn": "%1$s was well done by the heater", "death.attack.anvilcraft.laser": "%1$s was pierced by laser", "death.attack.anvilcraft.lost_in_time": "%1$s was lost in the river of time", "effect.anvilcraft.rage": "Rage", @@ -612,7 +636,7 @@ "entity.anvilcraft.thrown_ember_metal_heavy_halberd": "Thrown Ember Metal Heavy Halberd", "entity.anvilcraft.thrown_frost_metal_heavy_halberd": "Thrown Frost Metal Heavy Halberd", "entity.anvilcraft.thrown_transcendence_heavy_halberd": "Thrown Transcendence Heavy Halberd", - "entity.minecraft.villager.anvilcraft.jeweler": "Jeweler", + "entity.anvilcraft.villager.jeweler": "Jeweler", "fluid.anvilcraft.fire": "Burning Oil (The content of Fire Cauldron)", "gui.anvilcraft.category.anvil_collision": "Anvil Collision", "gui.anvilcraft.category.anvil_collision.consume": "Consume Anvil: %d", @@ -713,7 +737,12 @@ "intro.anvilcraft.patchouli.structural_engineering": "By building specific multi-block structures, we can create engineering machines with special functions. $(br2)$(#666666)Technology is not a rigid knowledge with only one solution, but a product that elevates us beyond the ordinary. Common people simply cannot understand our progress.$()", "intro.anvilcraft.patchouli.technology_application": "The production or transformation of new substances through the Anvilcraft technology.", "item.anvilcraft.abnormal_amulet": "Abnormal Amulet", + "item.anvilcraft.acceleration_ring": "Acceleration Ring", + "item.anvilcraft.activator_sliding_rail": "Activator Sliding Rail", + "item.anvilcraft.active_silencer": "Active Silencer", + "item.anvilcraft.advanced_comparator": "Advanced Comparator", "item.anvilcraft.amber": "Amber", + "item.anvilcraft.amber_block": "Amber Block", "item.anvilcraft.amethyst_axe": "Amethyst Axe", "item.anvilcraft.amethyst_hoe": "Amethyst Hoe", "item.anvilcraft.amethyst_pickaxe": "Amethyst Pickaxe", @@ -724,46 +753,148 @@ "item.anvilcraft.anvil_amulet": "Anvil Amulet", "item.anvilcraft.anvil_hammer": "Anvil Hammer", "item.anvilcraft.anvil_railgun": "Anvil Railgun", + "item.anvilcraft.arrow": "Arrow", + "item.anvilcraft.batch_crafter": "Batch Crafter", + "item.anvilcraft.batch_cutter": "Batch Cutter", "item.anvilcraft.beef_mushroom_stew": "Beef Mushroom Stew", + "item.anvilcraft.berry_cake_block": "Berry Cake Block", + "item.anvilcraft.berry_cream_block": "Berry Cream Block", "item.anvilcraft.black_cement_bucket": "Black Cement Bucket", + "item.anvilcraft.black_chocolate_block": "Black Chocolate Block", + "item.anvilcraft.black_chocolate_slab": "Black Chocolate Slab", + "item.anvilcraft.black_chocolate_stairs": "Black Chocolate Stairs", + "item.anvilcraft.black_hole": "Black Hole", + "item.anvilcraft.black_reinforced_concrete": "Black Reinforced Concrete", + "item.anvilcraft.black_reinforced_concrete_slab": "Black Reinforced Concrete Slab", + "item.anvilcraft.black_reinforced_concrete_stair": "Black Reinforced Concrete Stair", + "item.anvilcraft.black_reinforced_concrete_wall": "Black Reinforced Concrete Wall", + "item.anvilcraft.block_comparator": "Block Comparator", + "item.anvilcraft.block_devourer": "Block Devourer", + "item.anvilcraft.block_placer": "Block Placer", "item.anvilcraft.blue_cement_bucket": "Blue Cement Bucket", + "item.anvilcraft.blue_reinforced_concrete": "Blue Reinforced Concrete", + "item.anvilcraft.blue_reinforced_concrete_slab": "Blue Reinforced Concrete Slab", + "item.anvilcraft.blue_reinforced_concrete_stair": "Blue Reinforced Concrete Stair", + "item.anvilcraft.blue_reinforced_concrete_wall": "Blue Reinforced Concrete Wall", + "item.anvilcraft.brass_block": "Brass Block", "item.anvilcraft.brass_ingot": "Brass Ingot", "item.anvilcraft.brass_nugget": "Brass Nugget", + "item.anvilcraft.brass_pressure_plate": "Brass Pressure Plate", + "item.anvilcraft.bronze_block": "Bronze Block", "item.anvilcraft.bronze_ingot": "Bronze Ingot", "item.anvilcraft.bronze_nugget": "Bronze Nugget", + "item.anvilcraft.bronze_pressure_plate": "Bronze Pressure Plate", "item.anvilcraft.brown_cement_bucket": "Brown Cement Bucket", + "item.anvilcraft.brown_reinforced_concrete": "Brown Reinforced Concrete", + "item.anvilcraft.brown_reinforced_concrete_slab": "Brown Reinforced Concrete Slab", + "item.anvilcraft.brown_reinforced_concrete_stair": "Brown Reinforced Concrete Stair", + "item.anvilcraft.brown_reinforced_concrete_wall": "Brown Reinforced Concrete Wall", + "item.anvilcraft.burning_heater": "Burning Heater", + "item.anvilcraft.cake_base_block": "Cake Base Block", + "item.anvilcraft.cake_block": "Cake Block", "item.anvilcraft.canned_food": "Canned Food", "item.anvilcraft.capacitor": "Capacitor", "item.anvilcraft.capacitor_empty": "Empty Capacitor", "item.anvilcraft.cat_amulet": "Cat Amulet", + "item.anvilcraft.celestial_forging_anvil": "Celestial Forging Anvil", + "item.anvilcraft.celestial_forging_anvil_amplifier": "Celestial Forging Anvil Amplifier", + "item.anvilcraft.celestial_forging_anvil_fluid_interface": "Celestial Forging Anvil Fluid Interface", + "item.anvilcraft.celestial_forging_anvil_laser_interface": "Celestial Forging Anvil Laser Interface", + "item.anvilcraft.celestial_forging_anvil_logistics_interface": "Celestial Forging Anvil Logistics Interface", + "item.anvilcraft.celestial_forging_anvil_portal": "Celestial Forging Anvil Portal", + "item.anvilcraft.charge_collector": "Charge Collector", "item.anvilcraft.charged_neutronium_ingot": "Charged Neutronium Ingot", + "item.anvilcraft.charger": "Charger", "item.anvilcraft.chocolate": "Chocolate", "item.anvilcraft.chocolate_black": "Chocolate Black", + "item.anvilcraft.chocolate_block": "Chocolate Block", + "item.anvilcraft.chocolate_cake_block": "Chocolate Cake Block", + "item.anvilcraft.chocolate_cream_block": "Chocolate Cream Block", + "item.anvilcraft.chocolate_slab": "Chocolate Slab", + "item.anvilcraft.chocolate_stairs": "Chocolate Stairs", "item.anvilcraft.chocolate_white": "Chocolate White", + "item.anvilcraft.chromatic_stone": "Chromatic Stone", + "item.anvilcraft.chute": "Chute", + "item.anvilcraft.cinerite": "Cinerite", "item.anvilcraft.circuit_board": "Circuit Board", "item.anvilcraft.cocoa_butter": "Cocoa Butter", "item.anvilcraft.cocoa_liquor": "Cocoa Liquor", "item.anvilcraft.cocoa_powder": "Cocoa Powder", "item.anvilcraft.comrade_amulet": "Comrade Amulet", "item.anvilcraft.comrade_amulet.tooltip": "Signed players:", + "item.anvilcraft.confined_energy_anvilon": "Confined Energy Anvilon", + "item.anvilcraft.confined_mass_anvilon": "Confined Mass Anvilon", + "item.anvilcraft.confined_neutronium_ingot": "Confined Neutronium Ingot", + "item.anvilcraft.confined_space_anvilon": "Confined Space Anvilon", + "item.anvilcraft.confined_time_anvilon": "Confined Time Anvilon", + "item.anvilcraft.confinement_chamber": "Confinement Chamber", + "item.anvilcraft.controllable_sand": "Controllable Sand", "item.anvilcraft.copper_nugget": "Copper Nugget", + "item.anvilcraft.copper_pressure_plate": "Copper Pressure Plate", + "item.anvilcraft.corrupted_beacon": "Corrupted Beacon", "item.anvilcraft.crab_claw": "Crab Claw", + "item.anvilcraft.crab_trap": "Crab Trap", + "item.anvilcraft.crate": "Crate", "item.anvilcraft.cream": "Cream", + "item.anvilcraft.cream_block": "Cream Block", "item.anvilcraft.creamy_bread_roll": "Creamy Bread Roll", + "item.anvilcraft.creative_generator": "Creative Generator", + "item.anvilcraft.crushing_table": "Crushing Table", + "item.anvilcraft.cursed_gold_block": "Cursed Gold Block", "item.anvilcraft.cursed_gold_ingot": "Cursed Gold Ingot", "item.anvilcraft.cursed_gold_nugget": "Cursed Gold Nugget", + "item.anvilcraft.cut_ember_metal_block": "Cut Ember Metal Block", + "item.anvilcraft.cut_ember_metal_pillar": "Cut Ember Metal Pillar", + "item.anvilcraft.cut_ember_metal_slab": "Cut Ember Metal Slab", + "item.anvilcraft.cut_ember_metal_stairs": "Cut Ember Metal Stairs", + "item.anvilcraft.cut_flint_block": "Cut Flint Block", + "item.anvilcraft.cut_flint_pillar": "Cut Flint Pillar", + "item.anvilcraft.cut_flint_slab": "Cut Flint Slab", + "item.anvilcraft.cut_flint_stairs": "Cut Flint Stairs", + "item.anvilcraft.cut_frost_metal_block": "Cut Frost Metal Block", + "item.anvilcraft.cut_frost_metal_pillar": "Cut Frost Metal Pillar", + "item.anvilcraft.cut_frost_metal_slab": "Cut Frost Metal Slab", + "item.anvilcraft.cut_frost_metal_stairs": "Cut Frost Metal Stairs", + "item.anvilcraft.cut_heavy_iron_block": "Cut Heavy Iron Block", + "item.anvilcraft.cut_heavy_iron_slab": "Cut Heavy Iron Slab", + "item.anvilcraft.cut_heavy_iron_stairs": "Cut Heavy Iron Stairs", + "item.anvilcraft.cut_royal_steel_block": "Cut Royal Steel Block", + "item.anvilcraft.cut_royal_steel_pillar": "Cut Royal Steel Pillar", + "item.anvilcraft.cut_royal_steel_slab": "Cut Royal Steel Slab", + "item.anvilcraft.cut_royal_steel_stairs": "Cut Royal Steel Stairs", "item.anvilcraft.cyan_cement_bucket": "Cyan Cement Bucket", + "item.anvilcraft.cyan_reinforced_concrete": "Cyan Reinforced Concrete", + "item.anvilcraft.cyan_reinforced_concrete_slab": "Cyan Reinforced Concrete Slab", + "item.anvilcraft.cyan_reinforced_concrete_stair": "Cyan Reinforced Concrete Stair", + "item.anvilcraft.cyan_reinforced_concrete_wall": "Cyan Reinforced Concrete Wall", + "item.anvilcraft.deepslate_lead_ore": "Deepslate Lead Ore", + "item.anvilcraft.deepslate_silver_ore": "Deepslate Silver Ore", + "item.anvilcraft.deepslate_tin_ore": "Deepslate Tin Ore", + "item.anvilcraft.deepslate_titanium_ore": "Deepslate Titanium Ore", + "item.anvilcraft.deepslate_tungsten_ore": "Deepslate Tungsten Ore", + "item.anvilcraft.deepslate_uranium_ore": "Deepslate Uranium Ore", + "item.anvilcraft.deepslate_zinc_ore": "Deepslate Zinc Ore", + "item.anvilcraft.deflection_ring": "Deflection Ring", "item.anvilcraft.deformation_smithing_template": "Deformation Smithing Template", + "item.anvilcraft.detector_sliding_rail": "Detector Sliding Rail", + "item.anvilcraft.discharger": "Discharger", "item.anvilcraft.disk": "Disk", "item.anvilcraft.disk.stored_from": "Stored from: %s", "item.anvilcraft.dog_amulet": "Dog Amulet", "item.anvilcraft.dough": "Dough", "item.anvilcraft.dragon_rod": "Dragon Rod", + "item.anvilcraft.dyson_sphere_component": "Dyson Sphere Component", "item.anvilcraft.earth_core_shard": "Earth Core Shard", + "item.anvilcraft.earth_core_shard_block": "Earth Core Shard Block", + "item.anvilcraft.earth_core_shard_ore": "Earth Core Shard Ore", "item.anvilcraft.eight_to_one_smithing_template": "Eight to One Smithing Template", + "item.anvilcraft.ember_anvil": "Ember Anvil", "item.anvilcraft.ember_anvil_hammer": "Ember Anvil Hammer", "item.anvilcraft.ember_dragon_rod": "Ember Dragon Rod", + "item.anvilcraft.ember_glass": "Ember Glass", + "item.anvilcraft.ember_grindstone": "Ember Grindstone", "item.anvilcraft.ember_metal_axe": "Ember Metal Axe", + "item.anvilcraft.ember_metal_block": "Ember Metal Block", "item.anvilcraft.ember_metal_heavy_halberd": "Ember Metal Heavy Halberd", "item.anvilcraft.ember_metal_hoe": "Ember Metal Hoe", "item.anvilcraft.ember_metal_ingot": "Ember Metal Ingot", @@ -773,15 +904,28 @@ "item.anvilcraft.ember_metal_shovel": "Ember Metal Shovel", "item.anvilcraft.ember_metal_sword": "Ember Metal Sword", "item.anvilcraft.ember_metal_upgrade_smithing_template": "Smithing Template", + "item.anvilcraft.ember_smithing_table": "Ember Smithing Table", "item.anvilcraft.emerald_amulet": "Emerald Amulet", + "item.anvilcraft.end_dust": "End Dust", "item.anvilcraft.energy_weapon_platform": "Energy Weapon Platform", "item.anvilcraft.exp_bucket": "Exp Bucket", "item.anvilcraft.exp_gem": "Exp Gem", + "item.anvilcraft.exp_gem_block": "Exp Gem Block", + "item.anvilcraft.exposed_copper_pressure_plate": "Exposed Copper Pressure Plate", + "item.anvilcraft.fe_collector": "Fe Collector", "item.anvilcraft.feather_amulet": "Feather Amulet", + "item.anvilcraft.ferrite_core_magnet_block": "Ferrite Core Magnet Block", "item.anvilcraft.filter": "Filter", + "item.anvilcraft.fish_tank": "Fish Tank", + "item.anvilcraft.flint_block": "Flint Block", "item.anvilcraft.flour": "Flour", + "item.anvilcraft.fluid_tank": "Fluid Tank", "item.anvilcraft.four_to_one_smithing_template": "Four to One Smithing Template", + "item.anvilcraft.frost_anvil": "Frost Anvil", + "item.anvilcraft.frost_glass": "Frost Glass", + "item.anvilcraft.frost_grindstone": "Frost Grindstone", "item.anvilcraft.frost_metal_axe": "Frost Metal Axe", + "item.anvilcraft.frost_metal_block": "Frost Metal Block", "item.anvilcraft.frost_metal_heavy_halberd": "Frost Metal Heavy Halberd", "item.anvilcraft.frost_metal_hoe": "Frost Metal Hoe", "item.anvilcraft.frost_metal_ingot": "Frost Metal Ingot", @@ -791,66 +935,187 @@ "item.anvilcraft.frost_metal_shovel": "Frost Metal Shovel", "item.anvilcraft.frost_metal_sword": "Frost Metal Sword", "item.anvilcraft.frost_metal_upgrade_smithing_template": "Smithing Template", + "item.anvilcraft.frost_smithing_table": "Frost Smithing Table", "item.anvilcraft.gem_amulet": "Gem Amulet", "item.anvilcraft.geode": "Geode", "item.anvilcraft.geode.find": "Suspected amethyst geode, located %s", + "item.anvilcraft.giant_anvil": "Giant Anvil", + "item.anvilcraft.glowing_netherite_block": "Glowing Netherite Block", + "item.anvilcraft.glowing_tungsten_block": "Glowing Tungsten Block", "item.anvilcraft.gray_cement_bucket": "Gray Cement Bucket", + "item.anvilcraft.gray_reinforced_concrete": "Gray Reinforced Concrete", + "item.anvilcraft.gray_reinforced_concrete_slab": "Gray Reinforced Concrete Slab", + "item.anvilcraft.gray_reinforced_concrete_stair": "Gray Reinforced Concrete Stair", + "item.anvilcraft.gray_reinforced_concrete_wall": "Gray Reinforced Concrete Wall", "item.anvilcraft.green_cement_bucket": "Green Cement Bucket", + "item.anvilcraft.green_reinforced_concrete": "Green Reinforced Concrete", + "item.anvilcraft.green_reinforced_concrete_slab": "Green Reinforced Concrete Slab", + "item.anvilcraft.green_reinforced_concrete_stair": "Green Reinforced Concrete Stair", + "item.anvilcraft.green_reinforced_concrete_wall": "Green Reinforced Concrete Wall", "item.anvilcraft.guide_book": "AnvilCraft Guide Book", + "item.anvilcraft.gunpowder_block": "Gunpowder Block", "item.anvilcraft.hardend_resin": "Hardend Resin", + "item.anvilcraft.heat_collector": "Heat Collector", + "item.anvilcraft.heated_netherite_block": "Heated Netherite Block", + "item.anvilcraft.heated_tungsten_block": "Heated Tungsten Block", + "item.anvilcraft.heater": "Heater", "item.anvilcraft.heavy_halberd_core": "Heavy Halberd Core", + "item.anvilcraft.heavy_iron_beam": "Heavy Iron Beam", + "item.anvilcraft.heavy_iron_block": "Heavy Iron Block", + "item.anvilcraft.heavy_iron_column": "Heavy Iron Column", + "item.anvilcraft.heavy_iron_door": "Heavy Iron Door", + "item.anvilcraft.heavy_iron_plate": "Heavy Iron Plate", + "item.anvilcraft.heavy_iron_trapdoor": "Heavy Iron Trapdoor", + "item.anvilcraft.heavy_iron_wall": "Heavy Iron Wall", + "item.anvilcraft.heliostats": "Heliostats", "item.anvilcraft.heliostats.pos_set": "Will irradiate %s", + "item.anvilcraft.hollow_magnet_block": "Hollow Magnet Block", + "item.anvilcraft.hyperdimension_storage_station": "Hyperdimension Storage Station", + "item.anvilcraft.impact_pile": "Impact Pile", + "item.anvilcraft.incandescent_netherite_block": "Incandescent Netherite Block", + "item.anvilcraft.incandescent_tungsten_block": "Incandescent Tungsten Block", + "item.anvilcraft.induction_light": "Induction Light", "item.anvilcraft.inherent_enchantment.tooltip": "Inherent enchantments:", "item.anvilcraft.ionocraft": "Ionocraft", "item.anvilcraft.ionocraft_backpack": "Ionocraft Backpack", "item.anvilcraft.ionocraft_backpack.flight_time": "Flight Time: %ds", - "item.anvilcraft.ionocraft_backpack.flight_time_energy": "Remaining Energy: %sMJ, Flight Time: %ss", + "item.anvilcraft.item_collector": "Item Collector", + "item.anvilcraft.item_detector": "Item Detector", + "item.anvilcraft.jewelcrafting_table": "Jewelcrafting Table", + "item.anvilcraft.large_cake": "Large Cake", + "item.anvilcraft.large_crate": "Large Crate", + "item.anvilcraft.large_fluid_tank": "Large Fluid Tank", + "item.anvilcraft.laser_receiver": "Laser Receiver", + "item.anvilcraft.lead_block": "Lead Block", "item.anvilcraft.lead_ingot": "Lead Ingot", "item.anvilcraft.lead_nugget": "Lead Nugget", + "item.anvilcraft.lead_pressure_plate": "Lead Pressure Plate", "item.anvilcraft.levitation_powder": "Levitation Powder", + "item.anvilcraft.levitation_powder_block": "Levitation Powder Block", "item.anvilcraft.light_blue_cement_bucket": "Light Blue Cement Bucket", + "item.anvilcraft.light_blue_reinforced_concrete": "Light Blue Reinforced Concrete", + "item.anvilcraft.light_blue_reinforced_concrete_slab": "Light Blue Reinforced Concrete Slab", + "item.anvilcraft.light_blue_reinforced_concrete_stair": "Light Blue Reinforced Concrete Stair", + "item.anvilcraft.light_blue_reinforced_concrete_wall": "Light Blue Reinforced Concrete Wall", "item.anvilcraft.light_gray_cement_bucket": "Light Gray Cement Bucket", + "item.anvilcraft.light_gray_reinforced_concrete": "Light Gray Reinforced Concrete", + "item.anvilcraft.light_gray_reinforced_concrete_slab": "Light Gray Reinforced Concrete Slab", + "item.anvilcraft.light_gray_reinforced_concrete_stair": "Light Gray Reinforced Concrete Stair", + "item.anvilcraft.light_gray_reinforced_concrete_wall": "Light Gray Reinforced Concrete Wall", "item.anvilcraft.lime_cement_bucket": "Lime Cement Bucket", "item.anvilcraft.lime_powder": "Lime Powder", + "item.anvilcraft.lime_reinforced_concrete": "Lime Reinforced Concrete", + "item.anvilcraft.lime_reinforced_concrete_slab": "Lime Reinforced Concrete Slab", + "item.anvilcraft.lime_reinforced_concrete_stair": "Lime Reinforced Concrete Stair", + "item.anvilcraft.lime_reinforced_concrete_wall": "Lime Reinforced Concrete Wall", + "item.anvilcraft.load_monitor": "Load Monitor", "item.anvilcraft.magenta_cement_bucket": "Magenta Cement Bucket", + "item.anvilcraft.magenta_reinforced_concrete": "Magenta Reinforced Concrete", + "item.anvilcraft.magenta_reinforced_concrete_slab": "Magenta Reinforced Concrete Slab", + "item.anvilcraft.magenta_reinforced_concrete_stair": "Magenta Reinforced Concrete Stair", + "item.anvilcraft.magenta_reinforced_concrete_wall": "Magenta Reinforced Concrete Wall", "item.anvilcraft.magnet": "Magnet", + "item.anvilcraft.magnet_block": "Magnet Block", "item.anvilcraft.magnet_ingot": "Magnet Ingot", + "item.anvilcraft.magnetic_chute": "Magnetic Chute", + "item.anvilcraft.magnetoelectric_core": "Magnetoelectric Core", "item.anvilcraft.melt_gem_bucket": "Melt Gem Bucket", + "item.anvilcraft.menger_sponge": "Menger Sponge", + "item.anvilcraft.mineral_fountain": "Mineral Fountain", + "item.anvilcraft.mob_amber_block": "Mob Amber Block", "item.anvilcraft.multiphase_matter": "Multiphase Matter", + "item.anvilcraft.multiphase_matter_block": "Multiphase Matter Block", "item.anvilcraft.multiphase_transcendium": "Multiphase Transcendium", "item.anvilcraft.multitool": "Multitool", "item.anvilcraft.nature_amulet": "Nature Amulet", "item.anvilcraft.negative_matter": "Negative Matter", + "item.anvilcraft.negative_matter_block": "Negative Matter Block", "item.anvilcraft.negative_matter_nugget": "Negative Matter Nugget", + "item.anvilcraft.neoforge": "Neoforge", + "item.anvilcraft.nesting_shulker_box": "Nesting Shulker Box", + "item.anvilcraft.nether_dust": "Nether Dust", "item.anvilcraft.netherite_crystal_nucleus": "Netherite Crystal Nucleus", + "item.anvilcraft.neutron_irradiator": "Neutron Irradiator", "item.anvilcraft.neutronium_ingot": "Neutronium Ingot", "item.anvilcraft.oil_bucket": "Oil Bucket", "item.anvilcraft.orange_cement_bucket": "Orange Cement Bucket", + "item.anvilcraft.orange_reinforced_concrete": "Orange Reinforced Concrete", + "item.anvilcraft.orange_reinforced_concrete_slab": "Orange Reinforced Concrete Slab", + "item.anvilcraft.orange_reinforced_concrete_stair": "Orange Reinforced Concrete Stair", + "item.anvilcraft.orange_reinforced_concrete_wall": "Orange Reinforced Concrete Wall", + "item.anvilcraft.over_nesting_shulker_box": "Over Nesting Shulker Box", + "item.anvilcraft.overheated_ember_metal_block": "Overheated Ember Metal Block", + "item.anvilcraft.overseer": "Overseer", + "item.anvilcraft.oxidized_copper_pressure_plate": "Oxidized Copper Pressure Plate", + "item.anvilcraft.penrose_sphere_component": "Penrose Sphere Component", "item.anvilcraft.permutation_smithing_template": "Permutation Smithing Template", + "item.anvilcraft.piezoelectric_crystal": "Piezoelectric Crystal", "item.anvilcraft.pill": "Pill", "item.anvilcraft.pill.tooltip": "Pills made together with potion to achieve corresponding effects, can be taken quickly", "item.anvilcraft.pill_box": "Pill Box", "item.anvilcraft.pink_cement_bucket": "Pink Cement Bucket", + "item.anvilcraft.pink_reinforced_concrete": "Pink Reinforced Concrete", + "item.anvilcraft.pink_reinforced_concrete_slab": "Pink Reinforced Concrete Slab", + "item.anvilcraft.pink_reinforced_concrete_stair": "Pink Reinforced Concrete Stair", + "item.anvilcraft.pink_reinforced_concrete_wall": "Pink Reinforced Concrete Wall", + "item.anvilcraft.plutonium_block": "Plutonium Block", "item.anvilcraft.plutonium_ingot": "Plutonium Ingot", "item.anvilcraft.plutonium_nugget": "Plutonium Nugget", + "item.anvilcraft.plutonium_pressure_plate": "Plutonium Pressure Plate", + "item.anvilcraft.polished_flint_block": "Polished Flint Block", + "item.anvilcraft.polished_heavy_iron_block": "Polished Heavy Iron Block", + "item.anvilcraft.polished_heavy_iron_slab": "Polished Heavy Iron Slab", + "item.anvilcraft.polished_heavy_iron_stairs": "Polished Heavy Iron Stairs", + "item.anvilcraft.power_converter_big": "Power Converter Big", + "item.anvilcraft.power_converter_middle": "Power Converter Middle", + "item.anvilcraft.power_converter_small": "Power Converter Small", + "item.anvilcraft.powered_sliding_rail": "Powered Sliding Rail", "item.anvilcraft.prismarine_blade": "Prismarine Blade", "item.anvilcraft.prismarine_cluster": "Prismarine Cluster", "item.anvilcraft.processor": "Processor", + "item.anvilcraft.propel_piston": "Propel Piston", + "item.anvilcraft.pulse_generator": "Pulse Generator", "item.anvilcraft.purple_cement_bucket": "Purple Cement Bucket", + "item.anvilcraft.purple_reinforced_concrete": "Purple Reinforced Concrete", + "item.anvilcraft.purple_reinforced_concrete_slab": "Purple Reinforced Concrete Slab", + "item.anvilcraft.purple_reinforced_concrete_stair": "Purple Reinforced Concrete Stair", + "item.anvilcraft.purple_reinforced_concrete_wall": "Purple Reinforced Concrete Wall", + "item.anvilcraft.quartz_sand": "Quartz Sand", "item.anvilcraft.raw_lead": "Raw Lead", + "item.anvilcraft.raw_lead_block": "Raw Lead Block", "item.anvilcraft.raw_silver": "Raw Silver", + "item.anvilcraft.raw_silver_block": "Raw Silver Block", "item.anvilcraft.raw_tin": "Raw Tin", + "item.anvilcraft.raw_tin_block": "Raw Tin Block", "item.anvilcraft.raw_titanium": "Raw Titanium", + "item.anvilcraft.raw_titanium_block": "Raw Titanium Block", "item.anvilcraft.raw_tungsten": "Raw Tungsten", + "item.anvilcraft.raw_tungsten_block": "Raw Tungsten Block", "item.anvilcraft.raw_uranium": "Raw Uranium", + "item.anvilcraft.raw_uranium_block": "Raw Uranium Block", "item.anvilcraft.raw_zinc": "Raw Zinc", + "item.anvilcraft.raw_zinc_block": "Raw Zinc Block", "item.anvilcraft.recovery_pearl": "Recovery Pearl", "item.anvilcraft.red_cement_bucket": "Red Cement Bucket", + "item.anvilcraft.red_reinforced_concrete": "Red Reinforced Concrete", + "item.anvilcraft.red_reinforced_concrete_slab": "Red Reinforced Concrete Slab", + "item.anvilcraft.red_reinforced_concrete_stair": "Red Reinforced Concrete Stair", + "item.anvilcraft.red_reinforced_concrete_wall": "Red Reinforced Concrete Wall", + "item.anvilcraft.redhot_netherite_block": "Redhot Netherite Block", + "item.anvilcraft.redhot_tungsten_block": "Redhot Tungsten Block", + "item.anvilcraft.remote_transmission_pole": "Remote Transmission Pole", + "item.anvilcraft.resentful_amber_block": "Resentful Amber Block", "item.anvilcraft.resin": "Resin", + "item.anvilcraft.resin_block": "Resin Block", "item.anvilcraft.resonator_core": "Resonator Core", + "item.anvilcraft.rotten_flesh_block": "Rotten Flesh Block", + "item.anvilcraft.royal_anvil": "Royal Anvil", "item.anvilcraft.royal_anvil_hammer": "Royal Anvil Hammer", "item.anvilcraft.royal_dragon_rod": "Royal Dragon Rod", + "item.anvilcraft.royal_grindstone": "Royal Grindstone", + "item.anvilcraft.royal_smithing_table": "Royal Smithing Table", "item.anvilcraft.royal_steel_axe": "Royal Steel Axe", + "item.anvilcraft.royal_steel_block": "Royal Steel Block", "item.anvilcraft.royal_steel_hoe": "Royal Steel Hoe", "item.anvilcraft.royal_steel_ingot": "Royal Steel Ingot", "item.anvilcraft.royal_steel_nugget": "Royal Steel Nugget", @@ -860,51 +1125,101 @@ "item.anvilcraft.royal_steel_upgrade_smithing_template": "Smithing Template", "item.anvilcraft.ruby": "Ruby", "item.anvilcraft.ruby_amulet": "Ruby Amulet", + "item.anvilcraft.ruby_block": "Ruby Block", + "item.anvilcraft.ruby_laser": "Ruby Laser", + "item.anvilcraft.ruby_prism": "Ruby Prism", "item.anvilcraft.sapphire": "Sapphire", "item.anvilcraft.sapphire_amulet": "Sapphire Amulet", + "item.anvilcraft.sapphire_block": "Sapphire Block", "item.anvilcraft.sea_heart_shell": "Sea Heart Shell", "item.anvilcraft.sea_heart_shell_shard": "Sea Heart Shell Shard", "item.anvilcraft.seeds_pack": "Seeds Pack", + "item.anvilcraft.shulker_container": "Shulker Container", "item.anvilcraft.silence_amulet": "Silence Amulet", + "item.anvilcraft.silver_block": "Silver Block", "item.anvilcraft.silver_ingot": "Silver Ingot", "item.anvilcraft.silver_nugget": "Silver Nugget", + "item.anvilcraft.silver_pressure_plate": "Silver Pressure Plate", + "item.anvilcraft.singularity_crystal": "Singularity Crystal", + "item.anvilcraft.sliding_rail": "Sliding Rail", + "item.anvilcraft.sliding_rail_stop": "Sliding Rail Stop", + "item.anvilcraft.smooth_royal_steel_block": "Smooth Royal Steel Block", + "item.anvilcraft.space_overcompressor": "Space Overcompressor", + "item.anvilcraft.spectral_anvil": "Spectral Anvil", "item.anvilcraft.spectral_slingshot": "Spectral Slingshot", "item.anvilcraft.spectral_slingshot.unload_return": "Returned when Unloaded", "item.anvilcraft.spectral_slingshot.unload_vanish": "Vanishes when Unloaded", "item.anvilcraft.spectral_weapon_launcher": "Spectral Weapon Launcher", "item.anvilcraft.sponge_gemmule": "Sponge Gemmule", "item.anvilcraft.stable_neutronium_ingot": "Stable Neutronium Ingot", + "item.anvilcraft.stamping_platform": "Stamping Platform", "item.anvilcraft.structure_tool": "Structure Tool", + "item.anvilcraft.sturdy_deepslate": "Sturdy Deepslate", + "item.anvilcraft.sugar_block": "Sugar Block", "item.anvilcraft.supercapacitor": "Supercapacitor", "item.anvilcraft.supercapacitor_empty": "Empty Supercapacitor", + "item.anvilcraft.supercritical_nesting_shulker_box": "Supercritical Nesting Shulker Box", + "item.anvilcraft.tempering_glass": "Tempering Glass", + "item.anvilcraft.tesla_tower": "Tesla Tower", + "item.anvilcraft.tin_block": "Tin Block", "item.anvilcraft.tin_can": "Tin Can", "item.anvilcraft.tin_ingot": "Tin Ingot", "item.anvilcraft.tin_nugget": "Tin Nugget", + "item.anvilcraft.tin_pressure_plate": "Tin Pressure Plate", + "item.anvilcraft.titanium_block": "Titanium Block", "item.anvilcraft.titanium_ingot": "Titanium Ingot", "item.anvilcraft.titanium_nugget": "Titanium Nugget", + "item.anvilcraft.titanium_pressure_plate": "Titanium Pressure Plate", "item.anvilcraft.topaz": "Topaz", "item.anvilcraft.topaz_amulet": "Topaz Amulet", + "item.anvilcraft.topaz_block": "Topaz Block", "item.anvilcraft.totem_of_rage": "Totem of Rage", "item.anvilcraft.totem_of_recovery": "Totem of Recovery", + "item.anvilcraft.transcendence_anvil": "Transcendence Anvil", "item.anvilcraft.transcendence_anvil_hammer": "Transcendence Anvil Hammer", "item.anvilcraft.transcendence_dragon_rod": "Transcendence Dragon Rod", "item.anvilcraft.transcendence_heavy_halberd": "Transcendence Heavy Halberd", "item.anvilcraft.transcendence_resonator": "Transcendence Resonator", + "item.anvilcraft.transcendium_block": "Transcendium Block", "item.anvilcraft.transcendium_ingot": "Transcendium Ingot", "item.anvilcraft.transcendium_nugget": "Transcendium Nugget", "item.anvilcraft.transcendium_upgrade_smithing_template": "Smithing Template", + "item.anvilcraft.transmission_pole": "Transmission Pole", + "item.anvilcraft.transparent_crafting_table": "Transparent Crafting Table", + "item.anvilcraft.tungsten_block": "Tungsten Block", "item.anvilcraft.tungsten_ingot": "Tungsten Ingot", "item.anvilcraft.tungsten_nugget": "Tungsten Nugget", + "item.anvilcraft.tungsten_pressure_plate": "Tungsten Pressure Plate", "item.anvilcraft.two_to_one_smithing_template": "Two to One Smithing Template", + "item.anvilcraft.uranium_block": "Uranium Block", "item.anvilcraft.uranium_ingot": "Uranium Ingot", "item.anvilcraft.uranium_nugget": "Uranium Nugget", + "item.anvilcraft.uranium_pressure_plate": "Uranium Pressure Plate", "item.anvilcraft.utusan": "Utusan", + "item.anvilcraft.void_energy_collector": "Void Energy Collector", "item.anvilcraft.void_matter": "Void Matter", + "item.anvilcraft.void_matter_block": "Void Matter Block", + "item.anvilcraft.void_stone": "Void Stone", + "item.anvilcraft.weathered_copper_pressure_plate": "Weathered Copper Pressure Plate", "item.anvilcraft.white_cement_bucket": "White Cement Bucket", + "item.anvilcraft.white_chocolate_block": "White Chocolate Block", + "item.anvilcraft.white_chocolate_slab": "White Chocolate Slab", + "item.anvilcraft.white_chocolate_stairs": "White Chocolate Stairs", + "item.anvilcraft.white_hole": "White Hole", + "item.anvilcraft.white_reinforced_concrete": "White Reinforced Concrete", + "item.anvilcraft.white_reinforced_concrete_slab": "White Reinforced Concrete Slab", + "item.anvilcraft.white_reinforced_concrete_stair": "White Reinforced Concrete Stair", + "item.anvilcraft.white_reinforced_concrete_wall": "White Reinforced Concrete Wall", "item.anvilcraft.wood_fiber": "Wood Fiber", "item.anvilcraft.yellow_cement_bucket": "Yellow Cement Bucket", + "item.anvilcraft.yellow_reinforced_concrete": "Yellow Reinforced Concrete", + "item.anvilcraft.yellow_reinforced_concrete_slab": "Yellow Reinforced Concrete Slab", + "item.anvilcraft.yellow_reinforced_concrete_stair": "Yellow Reinforced Concrete Stair", + "item.anvilcraft.yellow_reinforced_concrete_wall": "Yellow Reinforced Concrete Wall", + "item.anvilcraft.zinc_block": "Zinc Block", "item.anvilcraft.zinc_ingot": "Zinc Ingot", "item.anvilcraft.zinc_nugget": "Zinc Nugget", + "item.anvilcraft.zinc_pressure_plate": "Zinc Pressure Plate", "itemGroup.anvilcraft.building_blocks": "AnvilCraft: Building Blocks", "itemGroup.anvilcraft.functional_blocks": "AnvilCraft: Functional Blocks", "itemGroup.anvilcraft.ingredients": "AnvilCraft: Ingredients", @@ -922,10 +1237,11 @@ "jei.anvilcraft.tooltip.not_consumed": "Not Consumed", "key.anvilcraft.switch_phase": "Switch Phase", "key.anvilcraft.switch_resonate_mode": "Switch Resonate Mode", + "key.anvilcraft.switch_tool_mode": "Switch Multitool Mode", "key.anvilcraft.thought": "Thought", "key.anvilcraft.toggle_goggle": "Toggle Goggle Mode", "key.anvilcraft.use_pill_box": "Use Pill Box", - "key.categories.anvilcraft": "AnvilCraft", + "key.category.anvilcraft.all": "AnvilCraft", "message.anvilcraft.chute.cannot_place": "Chute cannot face this direction", "message.anvilcraft.code_gen_check": "Please check if the selected area is a cube and if the output slot has items.", "message.anvilcraft.code_gen_filed": "Code generation failed", @@ -965,7 +1281,7 @@ "screen.anvilcraft.button.pulse_generator.start_mode.loop": "Mode: Loop Mode", "screen.anvilcraft.button.pulse_generator.start_mode.rising": "Mode: Rising Mode", "screen.anvilcraft.button.record": "Retention item filtering: %s", - "screen.anvilcraft.button.redstone_control": "Redstone control on\nUse alternate signal to determine thresholds", + "screen.anvilcraft.button.redstone_control": "Redstone control on", "screen.anvilcraft.button.redstone_control_off": "Redstone control off", "screen.anvilcraft.button.reverse": "Output reverse", "screen.anvilcraft.button.reverse_off": "Output normal", @@ -1066,18 +1382,30 @@ "screen.anvilcraft.structure_tool.to_data_gen": "To Data Gen", "screen.anvilcraft.structure_tool.to_json": "To JSON", "screen.anvilcraft.structure_tool.to_kubejs": "To KubeJS", - "screen.anvilcraft.tesla_tower.filter.has_custom_name": "Custom Named Entity Filter", - "screen.anvilcraft.tesla_tower.filter.is_baby_friendly": "Baby Friendly Entity Filter", - "screen.anvilcraft.tesla_tower.filter.is_entity_id": "Entity Filter", - "screen.anvilcraft.tesla_tower.filter.is_friendly": "Friendly Entity Filter", - "screen.anvilcraft.tesla_tower.filter.is_on_vehicle": "On Vehicle Filter", - "screen.anvilcraft.tesla_tower.filter.is_pet": "Pet Filter", - "screen.anvilcraft.tesla_tower.filter.is_player": "Player Filter", - "screen.anvilcraft.tesla_tower.filter.is_player_id": "Player Id Filter", - "screen.anvilcraft.tesla_tower.filter.unknown": "Unknown Filter", + "screen.anvilcraft.tesla_tower.filter.has_custom_name": "Custom Named Entity", + "screen.anvilcraft.tesla_tower.filter.is_baby_friendly": "Baby Friendly Entity", + "screen.anvilcraft.tesla_tower.filter.is_entity_id": "Entity", + "screen.anvilcraft.tesla_tower.filter.is_friendly": "Friendly Entity", + "screen.anvilcraft.tesla_tower.filter.is_hostile": "Hostile Entity", + "screen.anvilcraft.tesla_tower.filter.is_neutral": "Neutral Entity", + "screen.anvilcraft.tesla_tower.filter.is_on_vehicle": "On Vehicle", + "screen.anvilcraft.tesla_tower.filter.is_pet": "Pet", + "screen.anvilcraft.tesla_tower.filter.is_player": "Player", + "screen.anvilcraft.tesla_tower.filter.is_player_id": "Player Id", + "screen.anvilcraft.tesla_tower.filter.unknown": "Unknown", "screen.anvilcraft.tooltip.cfa_amplifier": "It must be placed diagonally on the Celestial Forging Anvil", "screen.anvilcraft.tooltip.cfa_interface": "It must be placed tightly against the side of the Celestial Forging Anvil bottom", "screen.anvilcraft.transcendium_upgrade_smithing_template": "Transcendium Upgrade", + "subtitles.anvilcraft.burning_heater": "Burning Heater crackled", + "subtitles.anvilcraft.giant_anvil_land": "Giant Anvil landed", + "subtitles.anvilcraft.giant_anvil_resin_shock": "Giant Anvil resin shock", + "subtitles.anvilcraft.giant_anvil_shock": "Giant Anvil shockwave", + "subtitles.anvilcraft.plasma_jet": "Plasma Jet roaring", + "subtitles.anvilcraft.plasma_jet_lava": "Plasma Jet burst", + "subtitles.anvilcraft.smart_block_placer_extend": "Smart Block Placer extended", + "subtitles.anvilcraft.smart_block_placer_retract": "Smart Block Placer retracted", + "subtitles.anvilcraft.smart_block_placer_shulker_open": "Smart Block Placer whirs", + "subtitles.anvilcraft.tesla_tower_strike": "Tesla Tower strikes", "title.anvilcraft.patchouli.advanced.anvil_destroy": "Anvil Destroy", "title.anvilcraft.patchouli.advanced.heated_block": "Heated Block", "title.anvilcraft.patchouli.advanced.special_heated_block": "Special Heated Block", @@ -1172,6 +1500,30 @@ "title.anvilcraft.patchouli.struct.overseer": "Overseer: Chunk Loader", "title.anvilcraft.patchouli.structural_engineering": "Structural Engineering", "title.anvilcraft.patchouli.technology_application": "Technology application", + "tooltip.anvilcraft.burning_heater.burn_time_label": "Remaining Burn Time:", + "tooltip.anvilcraft.burning_heater.can_smelt": "Can Smelt:", + "tooltip.anvilcraft.burning_heater.can_smelt.no": " No", + "tooltip.anvilcraft.burning_heater.can_smelt.yes": " Yes", + "tooltip.anvilcraft.burning_heater.fuel": "Fuel:", + "tooltip.anvilcraft.burning_heater.fuel.none": " None", + "tooltip.anvilcraft.burning_heater.jade.burn_time": "Burn Time: %s", + "tooltip.anvilcraft.burning_heater.jade.can_smelt": "Can Smelt: %s", + "tooltip.anvilcraft.burning_heater.jade.can_smelt.no": "No", + "tooltip.anvilcraft.burning_heater.jade.can_smelt.yes": "Yes", + "tooltip.anvilcraft.burning_heater.jade.state": "State: %s", + "tooltip.anvilcraft.burning_heater.jade.state.lit": "Lit", + "tooltip.anvilcraft.burning_heater.jade.state.off": "Off", + "tooltip.anvilcraft.burning_heater.jade.state.smoldering": "Smoldering", + "tooltip.anvilcraft.burning_heater.state_name": "State:", + "tooltip.anvilcraft.burning_heater.state_name.lit": " Lit", + "tooltip.anvilcraft.burning_heater.state_name.off": " Off", + "tooltip.anvilcraft.burning_heater.state_name.smoldering": " Smoldering", + "tooltip.anvilcraft.charger.jade.energy": "%1$s / %2$s", + "tooltip.anvilcraft.charger.jade.time": "%1$s / %2$s", + "tooltip.anvilcraft.charger.jade.working_progress": "Working Progress: %s", + "tooltip.anvilcraft.discharger.jade.energy": "%1$s / %2$s", + "tooltip.anvilcraft.discharger.jade.time": "%1$s / %2$s", + "tooltip.anvilcraft.discharger.jade.working_progress": "Discharging Progress: %s", "tooltip.anvilcraft.grid_information.consumer_stats": "Power Consumer Stats:", "tooltip.anvilcraft.grid_information.input_power": " Power Consumption: %d", "tooltip.anvilcraft.grid_information.output_power": " Power Generation: %d", @@ -1202,32 +1554,33 @@ "tooltip.anvilcraft.heliostats.unknown": " Unknown reason", "tooltip.anvilcraft.heliostats.unspecified_irradiation_block": " Unspecified irradiation block", "tooltip.anvilcraft.item.abnormal_amulet": "Prevents damage from carrying Uranium, Plutonium, Floating Powder, Cursed Gold items", - "tooltip.anvilcraft.item.acceleration_ring": "Creates acceleration field. Accelerates anvils, projectiles, or players with Anvil Hammer", + "tooltip.anvilcraft.item.acceleration_ring": "Creates acceleration field for anvils, projectiles, or players with Anvil Hammer", "tooltip.anvilcraft.item.activator_sliding_rail": "Activates blocks sliding over it", "tooltip.anvilcraft.item.active_silencer": "Eliminate selected nearby sounds", "tooltip.anvilcraft.item.advanced_comparator": "Supports Hysteresis and Window comparison modes", - "tooltip.anvilcraft.item.amulet_box.desc": "Stores multiple active amulets or totems", - "tooltip.anvilcraft.item.amulet_box.fullness": "Fullness: %1$d / %2$d", - "tooltip.anvilcraft.item.amulet_box.line_1": "Right click to store the Totems of Undying on your inventory, and shift-right-click to retrieve the totems;", - "tooltip.anvilcraft.item.amulet_box.line_2": "When holding, consume the totems in the box when needed, and after consuming the totem, you may receive a secret gift.", + "tooltip.anvilcraft.item.amulet_box": "Stores multiple active amulets or totems", + "tooltip.anvilcraft.item.amulet_box.shift": "Stores multiple active amulets or totems\nRight click to store the Totems of Undying on your inventory, and shift-right-click to retrieve the totems;\nWhen holding, consume the totems in the box when needed, and after consuming the totem, you may receive a secret gift.", "tooltip.anvilcraft.item.anvil_amulet": "Grants immunity to anvil damage", "tooltip.anvilcraft.item.anvil_hammer": "It's a hammer, an anvil, a wrench, goggles, and a mace", "tooltip.anvilcraft.item.batch_crafter": "Received a redstone signal and crafted all internal items at once, with a power consumption of 4 kW", "tooltip.anvilcraft.item.batch_cutter": "Received a redstone signal and cut all internal items at once, with a power consumption of 4 kW", "tooltip.anvilcraft.item.black_hole": "Dev Block with intense gravitational attraction", - "tooltip.anvilcraft.item.block_comparator": "Output signal when side blocks are the same. Right-click to switch to precise state detection mode", - "tooltip.anvilcraft.item.block_devourer": "When powered by redstone, this block instantly breaks a 3×3 area of blocks in front of it.\nIf struck by a falling anvil, the breaking range increases — the farther the anvil falls, the larger the area it destroys.\nNo internal inventory. Outputs items behind it — into containers, as dropped items, or at the break location if blocked.\nBase world blocks such as stone, dirt, and deepslate drop only small amounts", - "tooltip.anvilcraft.item.block_placer": "When powered by redstone, this block places a block in front of it.\nIf struck by a falling anvil, the placement distance increases — the farther the anvil falls, the farther the block is placed.\nNo internal inventory and must obtain blocks from dropped items or container inventories behind it", + "tooltip.anvilcraft.item.block_comparator": "Outputs signal when side blocks are the same, right-click to switch to precise state detection mode", + "tooltip.anvilcraft.item.block_devourer": "Breaks 3×3 area of blocks in front when powered by redstone", + "tooltip.anvilcraft.item.block_devourer.shift": "When powered by redstone, this block instantly breaks a 3×3 area of blocks in front of it\nIf struck by a falling anvil, the breaking range increases — the farther the anvil falls, the larger the area it destroys\nNo internal inventory, outputs items behind it — into containers, as dropped items, or at the break location if blocked\nBase world blocks such as stone, dirt, and deepslate drop only small amounts", + "tooltip.anvilcraft.item.block_placer": "Places blocks in front when powered by redstone", + "tooltip.anvilcraft.item.block_placer.shift": "When powered by redstone, this block places a block in front of it\nIf struck by a falling anvil, the placement distance increases — the farther the anvil falls, the farther the block is placed\nNo internal inventory and must obtain blocks from dropped items or container inventories behind it", "tooltip.anvilcraft.item.brass_pressure_plate": "Output a redstone signal based on the inventory's filling degree of player above, also a brass plate", "tooltip.anvilcraft.item.bronze_pressure_plate": "Output a redstone signal based on player satiety above, also a bronze plate", + "tooltip.anvilcraft.item.burning_heater": "Consume fuel to heat the block above\nEach crafting consumes 240 seconds of burn time", "tooltip.anvilcraft.item.canned_food": "Stackable instant food", - "tooltip.anvilcraft.item.capacitor": "4000kJ stored", - "tooltip.anvilcraft.item.capacitor_empty": "4000kJ capacity", + "tooltip.anvilcraft.item.capacitor": "8 MFE stored", + "tooltip.anvilcraft.item.capacitor_empty": "8 MFE capacity", "tooltip.anvilcraft.item.cat_amulet": "Scares away Creepers and Phantoms", "tooltip.anvilcraft.item.charge_collector": "Collecting charges to generate power", "tooltip.anvilcraft.item.charged_neutronium_ingot": "No longer passing through blocks, storing a large amount of electrical energy", - "tooltip.anvilcraft.item.charger": "Charges items. Supports manual or automated input", - "tooltip.anvilcraft.item.comrade_amulet": "Signable by players via right-click. Prevents damage from signed players", + "tooltip.anvilcraft.item.charger": "Charges items, supports manual or automated input", + "tooltip.anvilcraft.item.comrade_amulet": "Signable by players via right-click, prevents damage from signed players", "tooltip.anvilcraft.item.copper_pressure_plate": "Redstone signal increases with pressing time, also a copper plate", "tooltip.anvilcraft.item.crab_claw": "Increase touch length when holding", "tooltip.anvilcraft.item.crab_trap": "Placing it in the water to help you catch aquatic products", @@ -1238,10 +1591,10 @@ "tooltip.anvilcraft.item.cut_ember_metal_pillar": "Wither proof", "tooltip.anvilcraft.item.cut_ember_metal_slab": "Wither proof", "tooltip.anvilcraft.item.cut_ember_metal_stairs": "Wither proof", - "tooltip.anvilcraft.item.cut_frost_metal_block": "Wither proof", - "tooltip.anvilcraft.item.cut_frost_metal_pillar": "Wither proof", - "tooltip.anvilcraft.item.cut_frost_metal_slab": "Wither proof", - "tooltip.anvilcraft.item.cut_frost_metal_stairs": "Wither proof", + "tooltip.anvilcraft.item.cut_frost_metal_block": "Explosion proof", + "tooltip.anvilcraft.item.cut_frost_metal_pillar": "Explosion proof", + "tooltip.anvilcraft.item.cut_frost_metal_slab": "Explosion proof", + "tooltip.anvilcraft.item.cut_frost_metal_stairs": "Explosion proof", "tooltip.anvilcraft.item.cut_heavy_iron_block": "Explosion proof", "tooltip.anvilcraft.item.cut_heavy_iron_slab": "Explosion proof", "tooltip.anvilcraft.item.cut_heavy_iron_stairs": "Explosion proof", @@ -1249,13 +1602,14 @@ "tooltip.anvilcraft.item.cut_royal_steel_pillar": "Explosion proof", "tooltip.anvilcraft.item.cut_royal_steel_slab": "Explosion proof", "tooltip.anvilcraft.item.cut_royal_steel_stairs": "Explosion proof", - "tooltip.anvilcraft.item.deflection_ring": "Deflects passing objects 90°. Detect speed with Comparator", + "tooltip.anvilcraft.item.deflection_ring": "Deflects passing objects 90°, detect speed with Comparator", "tooltip.anvilcraft.item.detector_sliding_rail": "Output signal when objects or blocks slide over", - "tooltip.anvilcraft.item.discharger": "Discharges capacitors. Supports manual or automated input", + "tooltip.anvilcraft.item.discharger": "Discharges capacitors, supports manual or automated input", "tooltip.anvilcraft.item.disk.clear": "Shift + Right click to clear data stored", "tooltip.anvilcraft.item.disk.store": "Right click block to copy its setting", "tooltip.anvilcraft.item.dog_amulet": "Scares away Skeletons", - "tooltip.anvilcraft.item.dragon_rod": "Portable block devourer. Left-click to mine, right-click to adjust range. Larger range costs more durability", + "tooltip.anvilcraft.item.dragon_rod": "Portable block devourer with adjustable range", + "tooltip.anvilcraft.item.dragon_rod.shift": "Portable block devourer, left-click to mine, right-click to adjust range, larger range costs more durability", "tooltip.anvilcraft.item.ember_anvil": "Wither proof", "tooltip.anvilcraft.item.ember_anvil_hammer": "It's a hammer, an anvil, a wrench, goggles, and a mace", "tooltip.anvilcraft.item.ember_glass": "Wither proof, No tools required on collect", @@ -1263,16 +1617,18 @@ "tooltip.anvilcraft.item.ember_metal_block": "Wither proof", "tooltip.anvilcraft.item.ember_smithing_table": "Wither proof", "tooltip.anvilcraft.item.emerald_amulet": "Grants Hero of the Village", - "tooltip.anvilcraft.item.energy_weapon_platform": "320MJ stored, but will only inherit the result of Energy Weapon Making", + "tooltip.anvilcraft.item.energy_weapon_platform": "640 MFE stored, but will only inherit the result of Energy Weapon Making", "tooltip.anvilcraft.item.exposed_copper_pressure_plate": "Redstone signal increases with pressing time, also a copper plate", + "tooltip.anvilcraft.item.fe_collector": "Collecting FE to generate power", "tooltip.anvilcraft.item.feather_amulet": "Grants immunity to fall damage", "tooltip.anvilcraft.item.ferrite_core_magnet_block": "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges", - "tooltip.anvilcraft.item.filter": "Matches items based on config or filters. Usable in any filter slot", - "tooltip.anvilcraft.item.fish_tank": "It is sturdier than it looks and can be used as a substitute for the alchemy pot to perform related anvil synthesis.\nWearing it on your head provides a temporary underwater breathing effect.\nRight-click the top with an item in hand to place the item inside.\nRight-click the lower part of the fish tank with a tropical fish bucket in hand to release the tropical fish.", - "tooltip.anvilcraft.item.frost_anvil": "Wither proof", - "tooltip.anvilcraft.item.frost_grindstone": "Wither proof", - "tooltip.anvilcraft.item.frost_metal_block": "Wither proof", - "tooltip.anvilcraft.item.frost_smithing_table": "Wither proof", + "tooltip.anvilcraft.item.filter": "Matches items based on configuration, usable in any filter slot", + "tooltip.anvilcraft.item.fish_tank": "Used for anvil synthesis and provides underwater breathing when worn", + "tooltip.anvilcraft.item.fish_tank.shift": "It is sturdier than it looks and can be used as a substitute for the alchemy pot to perform related anvil synthesis\nWearing it on your head provides a temporary underwater breathing effect\nRight-click the top with an item in hand to place the item inside\nRight-click the lower part of the fish tank with a tropical fish bucket in hand to release the tropical fish", + "tooltip.anvilcraft.item.frost_anvil": "Explosion proof", + "tooltip.anvilcraft.item.frost_grindstone": "Explosion proof", + "tooltip.anvilcraft.item.frost_metal_block": "Explosion proof", + "tooltip.anvilcraft.item.frost_smithing_table": "Explosion proof", "tooltip.anvilcraft.item.gem_amulet": "Combines effects of all four Gem Amulets", "tooltip.anvilcraft.item.geode": "Find the surrounding Amethyst Geode when using it", "tooltip.anvilcraft.item.heat_collector": "Generates power from heat", @@ -1284,16 +1640,18 @@ "tooltip.anvilcraft.item.heavy_iron_plate": "Explosion proof", "tooltip.anvilcraft.item.heavy_iron_trapdoor": "Explosion proof", "tooltip.anvilcraft.item.heavy_iron_wall": "Explosion proof", - "tooltip.anvilcraft.item.heliostats": "Right‑click a Netherite Block or Tungsten Block with the handheld heliostat to set target block.\nAfter placing the heliostat, it will heat the targeted block during the day, as well as the blocks above it", + "tooltip.anvilcraft.item.heliostats": "Heats targeted blocks during the day", + "tooltip.anvilcraft.item.heliostats.shift": "Right‑click a Netherite Block or Tungsten Block with the handheld heliostat to set target block\nAfter placing the heliostat, it will heat the targeted block during the day, as well as the blocks above it", "tooltip.anvilcraft.item.hollow_magnet_block": "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges", - "tooltip.anvilcraft.item.impact_pile": "Place on Bedrock. Strike with falling anvil to create a Moneral Fountain", - "tooltip.anvilcraft.item.induction_light": "Provides lighting with a power consumption of 1 kW\nRight‑click with Redstone to switch to Growth Acceleration Mode\nRight‑click with Glowstone to switch to Anti‑Monster Spawning Mode\nRight‑click with Void Matter to switch to Anti‑Animal Spawning Mode\nAll three special modes consume 16 kW of power", + "tooltip.anvilcraft.item.impact_pile": "Place on Bedrock and strike with falling anvil to create Moneral Fountain", + "tooltip.anvilcraft.item.induction_light": "Provides lighting and configurable special modes", + "tooltip.anvilcraft.item.induction_light.shift": "Provides lighting with a power consumption of 1 kW\nRight‑click with Redstone to switch to Growth Acceleration Mode\nRight‑click with Glowstone to switch to Anti‑Monster Spawning Mode\nRight‑click with Void Matter to switch to Anti‑Animal Spawning Mode\nAll three special modes consume 16 kW of power", "tooltip.anvilcraft.item.ionocraft": "It will float when placed in the power grid", - "tooltip.anvilcraft.item.ionocraft_backpack": "Allows creative flight while equipped. Requires power supplied from the energy grid or from capacitors in the inventory", + "tooltip.anvilcraft.item.ionocraft_backpack": "Allows creative flight while equipped, requires power from the energy grid or capacitors", "tooltip.anvilcraft.item.item_collector": "Adjust power consumption based on range and cooling, from 2kW to 32kW", - "tooltip.anvilcraft.item.item_detector": "Detects specific items behind (drops/containers) to output signal", + "tooltip.anvilcraft.item.item_detector": "Detects specific items behind (drops/containers) to output redstone signal", "tooltip.anvilcraft.item.laser_receiver": "Generates power and output signal from received lasers", - "tooltip.anvilcraft.item.lead_pressure_plate": "Output redstone signal based on the number of biological species above, also a lead plateOutput redstone signal based on the number of mob species above, also a lead plate", + "tooltip.anvilcraft.item.lead_pressure_plate": "Output redstone signal based on the number of mob species above, also a lead plate", "tooltip.anvilcraft.item.levitation_powder": "Slight weightlessness", "tooltip.anvilcraft.item.magnet": "Attract surrounding items when use", "tooltip.anvilcraft.item.magnet_block": "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges", @@ -1304,18 +1662,16 @@ "tooltip.anvilcraft.item.negative_matter_block": "Negative matter is not antimatter, it is anti gravity matter", "tooltip.anvilcraft.item.negative_matter_nugget": "Negative matter is not antimatter, it is anti gravity matter", "tooltip.anvilcraft.item.neutronium_ingot": "Pass through most blocks except end dust, negative matter block, and bedrock", - "tooltip.anvilcraft.item.overseer": "Chunk loader on 3x3 Royal Steel base. Higher base layers increase chunk load range (max 3 layers, 5x5 range)", "tooltip.anvilcraft.item.oxidized_copper_pressure_plate": "Redstone signal increases with pressing time, also a copper plate", "tooltip.anvilcraft.item.piezoelectric_crystal": "Charge generated by an anvil fall on it", + "tooltip.anvilcraft.item.pill_box": "Store pills for quick use", + "tooltip.anvilcraft.item.pill_box.shift": "Store pills, right-click to take one pill each, and press [%s] to use them in the inventory", "tooltip.anvilcraft.item.plutonium_pressure_plate": "Output a redstone signal based on the player in hand item durability, also a plutonium plate", "tooltip.anvilcraft.item.polished_heavy_iron_block": "Explosion proof", "tooltip.anvilcraft.item.polished_heavy_iron_slab": "Explosion proof", "tooltip.anvilcraft.item.polished_heavy_iron_stairs": "Explosion proof", - "tooltip.anvilcraft.item.power_converter_big": "Convert power into FE, consumes 36 kW", - "tooltip.anvilcraft.item.power_converter_middle": "Convert power into FE, consumes 6 kW", - "tooltip.anvilcraft.item.power_converter_small": "Convert power into FE, consumes 1 kW", "tooltip.anvilcraft.item.powered_sliding_rail": "Accelerates items, entities, or blocks when powered", - "tooltip.anvilcraft.item.propel_piston": "Integrated piston worm. Requires Capacitor or Laser power", + "tooltip.anvilcraft.item.propel_piston": "Integrated piston worm, requires Capacitor or Laser power", "tooltip.anvilcraft.item.pulse_generator": "Customizes pulse delay and duration", "tooltip.anvilcraft.item.recipe.processing.chance": "%1$s%% Chance", "tooltip.anvilcraft.item.recovery_pearl": "Right-click to teleport to last death point", @@ -1336,8 +1692,9 @@ "tooltip.anvilcraft.item.sliding_rail": "Frictionless surface for sliding entities and even blocks", "tooltip.anvilcraft.item.sliding_rail_stop": "Stops sliding items, entities, or blocks", "tooltip.anvilcraft.item.smooth_royal_steel_block": "Explosion proof", - "tooltip.anvilcraft.item.space_overcompressor": "Compresses items into Neutronium Ingots. Compresses multiblock outputs into drops", - "tooltip.anvilcraft.item.spectral_anvil": "When the upper magnet is demagnetized, a phantom shadow is created and falls downward. It can pass through transparent blocks, and no matter the actual height, the impact is always treated as a 2‑block fall", + "tooltip.anvilcraft.item.space_overcompressor": "Compresses items into Neutronium Ingots, compresses multiblock outputs into drops", + "tooltip.anvilcraft.item.spectral_anvil": "Creates phantom shadows when the upper magnet is demagnetized", + "tooltip.anvilcraft.item.spectral_anvil.shift": "When the upper magnet is demagnetized, a phantom shadow is created and falls downward, it can pass through transparent blocks, and no matter the actual height, the impact is always treated as a 2‑block fall", "tooltip.anvilcraft.item.spectral_slingshot": "Load a weapon to fire its phantom", "tooltip.anvilcraft.item.stable_neutronium_ingot": "No more passing through blocks", "tooltip.anvilcraft.item.structure_tool.click_to_copy": "Click to copy", @@ -1352,8 +1709,8 @@ "tooltip.anvilcraft.item.structure_tool.must_odd": "The side length of the selected area must be odd and cannot exceed 15", "tooltip.anvilcraft.item.structure_tool.shift_to_clear": "Shift + right click to clear selected area", "tooltip.anvilcraft.item.structure_tool.size": "Size: x: %1$d, y: %2$d, z: %3$d", - "tooltip.anvilcraft.item.supercapacitor": "80MJ stored", - "tooltip.anvilcraft.item.supercapacitor_empty": "80MJ capacity", + "tooltip.anvilcraft.item.supercapacitor": "160 MFE stored", + "tooltip.anvilcraft.item.supercapacitor_empty": "160 MFE capacity", "tooltip.anvilcraft.item.tempering_glass": "Explosion proof, No tools required on collect", "tooltip.anvilcraft.item.tesla_tower": "Electric shock to mobs or lightning rods within a range of 8 grids, with a power consumption of 128 kW", "tooltip.anvilcraft.item.tin_can": "Tin cans can be combined with any food to obtain canned food", @@ -1361,8 +1718,8 @@ "tooltip.anvilcraft.item.titanium_pressure_plate": "Output a redstone signal based on the highest durability of the items above, also a titanium plate", "tooltip.anvilcraft.item.topaz": "Containing the power of lightning", "tooltip.anvilcraft.item.topaz_amulet": "Grants immunity to lightning damage", - "tooltip.anvilcraft.item.totem_of_rage": "Grants invulnerability and berserk on fatal damage. Death is inevitable after 1 minute", - "tooltip.anvilcraft.item.totem_of_recovery": "Teleports to spawn on death. Grants a Recall Pearl to return to death point", + "tooltip.anvilcraft.item.totem_of_rage": "Grants invulnerability and berserk on fatal damage, death is inevitable after 1 minute", + "tooltip.anvilcraft.item.totem_of_recovery": "Teleports to spawn on death, grants a Recall Pearl to return to death point", "tooltip.anvilcraft.item.transcendence_anvil_hammer": "It's a hammer, an anvil, a wrench, goggles, and a mace", "tooltip.anvilcraft.item.transmission_pole": "Build a power grid with a transmission length of 8", "tooltip.anvilcraft.item.transparent_crafting_table": "Aesthetic, connectable Crafting Table", @@ -1376,10 +1733,16 @@ "tooltip.anvilcraft.jade.power_information": "Power Grid: %s", "tooltip.anvilcraft.jade.ruby_prism.power": "Laser level: %d", "tooltip.anvilcraft.pill_box": "Store pills, right-click to take one pill each, and press [%s] to use them in the inventory", - "tooltip.anvilcraft.press_key": "Hold [%s] for information", + "tooltip.anvilcraft.press_key": "Hold [%s] for more information", "tooltip.anvilcraft.propel_piston.remaining_energy": " Remaining Energy: %s", "tooltip.anvilcraft.propel_piston.remaining_push": " Remaining Push: %s block-time", "tooltip.anvilcraft.propel_piston.state": "Propel Piston State: ", + "tooltip.anvilcraft.property.box_contents": "Fullness: %1$d / %2$d", + "tooltip.anvilcraft.property.devour_range": "Current Devour Range: %s", + "tooltip.anvilcraft.property.devour_range.range_3": "3x3", + "tooltip.anvilcraft.property.devour_range.range_5": "5x5", + "tooltip.anvilcraft.property.devour_range.range_7": "7x7", + "tooltip.anvilcraft.property.devour_range.range_9": "9x9", "tooltip.anvilcraft.property.eternal": "Eternal: unbreakable, immune fire, explode, cactus, even the time and the void", "tooltip.anvilcraft.property.ferocious": "Ferocious: enhance attack damage and mining efficiency based on the level of all enchantments", "tooltip.anvilcraft.property.fire_reforging": "Reforging: mending in fire or lava", @@ -1408,5 +1771,6 @@ "tooltip.anvilcraft.space_overcompressor.stored_mass": "Stored Mass: %s", "tooltip.anvilcraft.thought": "Press [%s] for more info", "tooltip.anvilcraft.working_progress.progress": " %1$s %2$s%%", + "tooltip.anvilcraft.working_progress.time": " %1$s / %2$s", "tooltip.anvilcraft.working_progress.title": "Working progress:" } \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete.json new file mode 100644 index 0000000000..124171d340 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/black_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..81d59a9ffe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/black_reinforced_concrete", + "side": "anvilcraft:block/black_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_slab.json new file mode 100644 index 0000000000..26d74ae348 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/black_reinforced_concrete", + "side": "anvilcraft:block/black_reinforced_concrete", + "top": "anvilcraft:block/black_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..d659a4e353 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/black_reinforced_concrete", + "side": "anvilcraft:block/black_reinforced_concrete", + "top": "anvilcraft:block/black_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair.json new file mode 100644 index 0000000000..62ee1b2b09 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/black_reinforced_concrete", + "side": "anvilcraft:block/black_reinforced_concrete", + "top": "anvilcraft:block/black_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..55892835cd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/black_reinforced_concrete", + "side": "anvilcraft:block/black_reinforced_concrete", + "top": "anvilcraft:block/black_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..d0f82f239f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/black_reinforced_concrete", + "side": "anvilcraft:block/black_reinforced_concrete", + "top": "anvilcraft:block/black_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_top.json new file mode 100644 index 0000000000..a9324b44b8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/black_reinforced_concrete", + "side": "anvilcraft:block/black_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..c76c4c1904 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/black_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..ab1e0ffbcf --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/black_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..9d7ad6df75 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/black_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..1d8c80e91a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/black_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/black_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete.json new file mode 100644 index 0000000000..2027062aea --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..e13c2798c5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/blue_reinforced_concrete", + "side": "anvilcraft:block/blue_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..eae95bc6d5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/blue_reinforced_concrete", + "side": "anvilcraft:block/blue_reinforced_concrete", + "top": "anvilcraft:block/blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..198451061d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/blue_reinforced_concrete", + "side": "anvilcraft:block/blue_reinforced_concrete", + "top": "anvilcraft:block/blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..655049918d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/blue_reinforced_concrete", + "side": "anvilcraft:block/blue_reinforced_concrete", + "top": "anvilcraft:block/blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..e9fc801bce --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/blue_reinforced_concrete", + "side": "anvilcraft:block/blue_reinforced_concrete", + "top": "anvilcraft:block/blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..7eb3234c4a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/blue_reinforced_concrete", + "side": "anvilcraft:block/blue_reinforced_concrete", + "top": "anvilcraft:block/blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_top.json new file mode 100644 index 0000000000..b2d89c6e38 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/blue_reinforced_concrete", + "side": "anvilcraft:block/blue_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..0c01eff876 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..f7b71094e0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..f9cbeeec32 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..6a21aa9838 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/blue_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete.json new file mode 100644 index 0000000000..b377d29222 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/brown_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..8ce2d596cf --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/brown_reinforced_concrete", + "side": "anvilcraft:block/brown_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_slab.json new file mode 100644 index 0000000000..c0a63fbb71 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/brown_reinforced_concrete", + "side": "anvilcraft:block/brown_reinforced_concrete", + "top": "anvilcraft:block/brown_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..d56b57476e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/brown_reinforced_concrete", + "side": "anvilcraft:block/brown_reinforced_concrete", + "top": "anvilcraft:block/brown_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair.json new file mode 100644 index 0000000000..c2bf62438a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/brown_reinforced_concrete", + "side": "anvilcraft:block/brown_reinforced_concrete", + "top": "anvilcraft:block/brown_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..1f22e095d1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/brown_reinforced_concrete", + "side": "anvilcraft:block/brown_reinforced_concrete", + "top": "anvilcraft:block/brown_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..d9142dae1d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/brown_reinforced_concrete", + "side": "anvilcraft:block/brown_reinforced_concrete", + "top": "anvilcraft:block/brown_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_top.json new file mode 100644 index 0000000000..1f6169c026 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/brown_reinforced_concrete", + "side": "anvilcraft:block/brown_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..b5b27bb0e7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/brown_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..4a77ef590d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/brown_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..a661a22033 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/brown_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..cd9973d656 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/brown_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/brown_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cut_flint_pillar_horizontal.json b/src/generated/resources/assets/anvilcraft/models/block/cut_flint_pillar_horizontal.json deleted file mode 100644 index 7d60ade61b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/cut_flint_pillar_horizontal.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column_horizontal", - "textures": { - "end": "anvilcraft:block/cut_flint_pillar_top", - "side": "anvilcraft:block/cut_flint_pillar" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete.json new file mode 100644 index 0000000000..76b9c5b44f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/cyan_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..b59b1fec29 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/cyan_reinforced_concrete", + "side": "anvilcraft:block/cyan_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_slab.json new file mode 100644 index 0000000000..dfaaa92274 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/cyan_reinforced_concrete", + "side": "anvilcraft:block/cyan_reinforced_concrete", + "top": "anvilcraft:block/cyan_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..d3251cb764 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/cyan_reinforced_concrete", + "side": "anvilcraft:block/cyan_reinforced_concrete", + "top": "anvilcraft:block/cyan_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair.json new file mode 100644 index 0000000000..ed386ab1b3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/cyan_reinforced_concrete", + "side": "anvilcraft:block/cyan_reinforced_concrete", + "top": "anvilcraft:block/cyan_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..7365039e84 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/cyan_reinforced_concrete", + "side": "anvilcraft:block/cyan_reinforced_concrete", + "top": "anvilcraft:block/cyan_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..d5647957f5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/cyan_reinforced_concrete", + "side": "anvilcraft:block/cyan_reinforced_concrete", + "top": "anvilcraft:block/cyan_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_top.json new file mode 100644 index 0000000000..222650ccf2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/cyan_reinforced_concrete", + "side": "anvilcraft:block/cyan_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..65aa628535 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/cyan_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..e904896968 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/cyan_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..0fb4c7ab7e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/cyan_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..f4a3ee506f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/cyan_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/cyan_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/ember_glass.json b/src/generated/resources/assets/anvilcraft/models/block/ember_glass.json index da261b62d0..edbecd46e9 100644 --- a/src/generated/resources/assets/anvilcraft/models/block/ember_glass.json +++ b/src/generated/resources/assets/anvilcraft/models/block/ember_glass.json @@ -1,7 +1,9 @@ { "parent": "minecraft:block/cube_all", - "render_type": "minecraft:translucent", "textures": { - "all": "anvilcraft:block/ember_glass" + "all": { + "force_translucent": true, + "sprite": "anvilcraft:block/ember_glass" + } } } \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/frost_glass.json b/src/generated/resources/assets/anvilcraft/models/block/frost_glass.json index b5d254276e..ba4844d265 100644 --- a/src/generated/resources/assets/anvilcraft/models/block/frost_glass.json +++ b/src/generated/resources/assets/anvilcraft/models/block/frost_glass.json @@ -1,7 +1,9 @@ { "parent": "minecraft:block/cube_all", - "render_type": "minecraft:translucent", "textures": { - "all": "anvilcraft:block/frost_glass" + "all": { + "force_translucent": true, + "sprite": "anvilcraft:block/frost_glass" + } } } \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete.json new file mode 100644 index 0000000000..b542fa2c55 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..ef1d0f2db4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/gray_reinforced_concrete", + "side": "anvilcraft:block/gray_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..0bcf58633b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/gray_reinforced_concrete", + "side": "anvilcraft:block/gray_reinforced_concrete", + "top": "anvilcraft:block/gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..52d864b723 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/gray_reinforced_concrete", + "side": "anvilcraft:block/gray_reinforced_concrete", + "top": "anvilcraft:block/gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..a8fc4d97ab --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/gray_reinforced_concrete", + "side": "anvilcraft:block/gray_reinforced_concrete", + "top": "anvilcraft:block/gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..7414c8932d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/gray_reinforced_concrete", + "side": "anvilcraft:block/gray_reinforced_concrete", + "top": "anvilcraft:block/gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..5e62d2ed6e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/gray_reinforced_concrete", + "side": "anvilcraft:block/gray_reinforced_concrete", + "top": "anvilcraft:block/gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_top.json new file mode 100644 index 0000000000..2d0fa4371a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/gray_reinforced_concrete", + "side": "anvilcraft:block/gray_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..e3d7e26050 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..114c853317 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..b7133ce852 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..fbaf2445b1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/gray_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete.json new file mode 100644 index 0000000000..6cc8ee7343 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/green_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..88ec8a2bc3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/green_reinforced_concrete", + "side": "anvilcraft:block/green_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_slab.json new file mode 100644 index 0000000000..315392b29b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/green_reinforced_concrete", + "side": "anvilcraft:block/green_reinforced_concrete", + "top": "anvilcraft:block/green_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..08723459a6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/green_reinforced_concrete", + "side": "anvilcraft:block/green_reinforced_concrete", + "top": "anvilcraft:block/green_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair.json new file mode 100644 index 0000000000..dc89374c2b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/green_reinforced_concrete", + "side": "anvilcraft:block/green_reinforced_concrete", + "top": "anvilcraft:block/green_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..9cd5487440 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/green_reinforced_concrete", + "side": "anvilcraft:block/green_reinforced_concrete", + "top": "anvilcraft:block/green_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..784f41d9a3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/green_reinforced_concrete", + "side": "anvilcraft:block/green_reinforced_concrete", + "top": "anvilcraft:block/green_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_top.json new file mode 100644 index 0000000000..3986338fc7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/green_reinforced_concrete", + "side": "anvilcraft:block/green_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..79e5ae7c4a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/green_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..f8122215c8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/green_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..893408074b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/green_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..a4709e0982 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/green_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/green_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete.json new file mode 100644 index 0000000000..f9c3def5e7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/light_blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..1e424015ac --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/light_blue_reinforced_concrete", + "side": "anvilcraft:block/light_blue_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..689651261f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/light_blue_reinforced_concrete", + "side": "anvilcraft:block/light_blue_reinforced_concrete", + "top": "anvilcraft:block/light_blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..fbfd4a6bfd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/light_blue_reinforced_concrete", + "side": "anvilcraft:block/light_blue_reinforced_concrete", + "top": "anvilcraft:block/light_blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..9f48d7ce2b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/light_blue_reinforced_concrete", + "side": "anvilcraft:block/light_blue_reinforced_concrete", + "top": "anvilcraft:block/light_blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..4022670661 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/light_blue_reinforced_concrete", + "side": "anvilcraft:block/light_blue_reinforced_concrete", + "top": "anvilcraft:block/light_blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..209127c99c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/light_blue_reinforced_concrete", + "side": "anvilcraft:block/light_blue_reinforced_concrete", + "top": "anvilcraft:block/light_blue_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_top.json new file mode 100644 index 0000000000..ccb8b45c10 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/light_blue_reinforced_concrete", + "side": "anvilcraft:block/light_blue_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..6c1ad36edd --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/light_blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..bc0dedde6d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/light_blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..d4f02846ce --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/light_blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..bcf6fd34b2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_blue_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/light_blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete.json new file mode 100644 index 0000000000..f11301f96e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/light_gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..2f3feff6b2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/light_gray_reinforced_concrete", + "side": "anvilcraft:block/light_gray_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..685a256ad5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/light_gray_reinforced_concrete", + "side": "anvilcraft:block/light_gray_reinforced_concrete", + "top": "anvilcraft:block/light_gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..3fcae1b778 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/light_gray_reinforced_concrete", + "side": "anvilcraft:block/light_gray_reinforced_concrete", + "top": "anvilcraft:block/light_gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..11470524fe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/light_gray_reinforced_concrete", + "side": "anvilcraft:block/light_gray_reinforced_concrete", + "top": "anvilcraft:block/light_gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..26911daf01 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/light_gray_reinforced_concrete", + "side": "anvilcraft:block/light_gray_reinforced_concrete", + "top": "anvilcraft:block/light_gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..e286c2e757 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/light_gray_reinforced_concrete", + "side": "anvilcraft:block/light_gray_reinforced_concrete", + "top": "anvilcraft:block/light_gray_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_top.json new file mode 100644 index 0000000000..eb548bc95d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/light_gray_reinforced_concrete", + "side": "anvilcraft:block/light_gray_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..9a84576cb3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/light_gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..a98cc6916c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/light_gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..485c46ed28 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/light_gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..cc26a8dc97 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/light_gray_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/light_gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete.json new file mode 100644 index 0000000000..280995908c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/lime_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..966e9e46c5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/lime_reinforced_concrete", + "side": "anvilcraft:block/lime_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_slab.json new file mode 100644 index 0000000000..2a79354f25 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/lime_reinforced_concrete", + "side": "anvilcraft:block/lime_reinforced_concrete", + "top": "anvilcraft:block/lime_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..7003545865 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/lime_reinforced_concrete", + "side": "anvilcraft:block/lime_reinforced_concrete", + "top": "anvilcraft:block/lime_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair.json new file mode 100644 index 0000000000..34b94575e3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/lime_reinforced_concrete", + "side": "anvilcraft:block/lime_reinforced_concrete", + "top": "anvilcraft:block/lime_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..b7a581550b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/lime_reinforced_concrete", + "side": "anvilcraft:block/lime_reinforced_concrete", + "top": "anvilcraft:block/lime_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..aebc629a57 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/lime_reinforced_concrete", + "side": "anvilcraft:block/lime_reinforced_concrete", + "top": "anvilcraft:block/lime_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_top.json new file mode 100644 index 0000000000..c88cf2af00 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/lime_reinforced_concrete", + "side": "anvilcraft:block/lime_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..82db3e8492 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/lime_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..98048fb4b0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/lime_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..f0d42e351d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/lime_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..8dca3f6925 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/lime_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/lime_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete.json new file mode 100644 index 0000000000..8c3a272b13 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/magenta_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..bf0ce38a0f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/magenta_reinforced_concrete", + "side": "anvilcraft:block/magenta_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_slab.json new file mode 100644 index 0000000000..27325294c7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/magenta_reinforced_concrete", + "side": "anvilcraft:block/magenta_reinforced_concrete", + "top": "anvilcraft:block/magenta_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..8506463333 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/magenta_reinforced_concrete", + "side": "anvilcraft:block/magenta_reinforced_concrete", + "top": "anvilcraft:block/magenta_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair.json new file mode 100644 index 0000000000..b082bd8131 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/magenta_reinforced_concrete", + "side": "anvilcraft:block/magenta_reinforced_concrete", + "top": "anvilcraft:block/magenta_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..af4fe06a46 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/magenta_reinforced_concrete", + "side": "anvilcraft:block/magenta_reinforced_concrete", + "top": "anvilcraft:block/magenta_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..80f205265a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/magenta_reinforced_concrete", + "side": "anvilcraft:block/magenta_reinforced_concrete", + "top": "anvilcraft:block/magenta_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_top.json new file mode 100644 index 0000000000..72daa25460 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/magenta_reinforced_concrete", + "side": "anvilcraft:block/magenta_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..111c496a3a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/magenta_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..f2a7392040 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/magenta_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..999379cbea --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/magenta_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..e9955c9bfe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/magenta_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/magenta_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete.json new file mode 100644 index 0000000000..c7c83364b5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/orange_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..b4e96a8797 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/orange_reinforced_concrete", + "side": "anvilcraft:block/orange_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_slab.json new file mode 100644 index 0000000000..d810c05f33 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/orange_reinforced_concrete", + "side": "anvilcraft:block/orange_reinforced_concrete", + "top": "anvilcraft:block/orange_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..00c9da59f0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/orange_reinforced_concrete", + "side": "anvilcraft:block/orange_reinforced_concrete", + "top": "anvilcraft:block/orange_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair.json new file mode 100644 index 0000000000..6508e50e1f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/orange_reinforced_concrete", + "side": "anvilcraft:block/orange_reinforced_concrete", + "top": "anvilcraft:block/orange_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..346f117854 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/orange_reinforced_concrete", + "side": "anvilcraft:block/orange_reinforced_concrete", + "top": "anvilcraft:block/orange_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..2631436a69 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/orange_reinforced_concrete", + "side": "anvilcraft:block/orange_reinforced_concrete", + "top": "anvilcraft:block/orange_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_top.json new file mode 100644 index 0000000000..d628199aaf --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/orange_reinforced_concrete", + "side": "anvilcraft:block/orange_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..b20a793935 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/orange_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..e1fac03065 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/orange_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..ccd309b2e2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/orange_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..977f71f72d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/orange_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/orange_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete.json new file mode 100644 index 0000000000..777f96cea1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/pink_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..cdc5ff63d3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/pink_reinforced_concrete", + "side": "anvilcraft:block/pink_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_slab.json new file mode 100644 index 0000000000..9a9da7492b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/pink_reinforced_concrete", + "side": "anvilcraft:block/pink_reinforced_concrete", + "top": "anvilcraft:block/pink_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..737ed09031 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/pink_reinforced_concrete", + "side": "anvilcraft:block/pink_reinforced_concrete", + "top": "anvilcraft:block/pink_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair.json new file mode 100644 index 0000000000..179ffe38c8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/pink_reinforced_concrete", + "side": "anvilcraft:block/pink_reinforced_concrete", + "top": "anvilcraft:block/pink_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..d47c638b53 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/pink_reinforced_concrete", + "side": "anvilcraft:block/pink_reinforced_concrete", + "top": "anvilcraft:block/pink_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..f5b1b51dad --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/pink_reinforced_concrete", + "side": "anvilcraft:block/pink_reinforced_concrete", + "top": "anvilcraft:block/pink_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_top.json new file mode 100644 index 0000000000..38f7278df0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/pink_reinforced_concrete", + "side": "anvilcraft:block/pink_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..e1bfc8eab2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/pink_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..ad4be0eb73 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/pink_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..016e712ca3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/pink_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..47e2c02855 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/pink_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/pink_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete.json new file mode 100644 index 0000000000..8669a0ab96 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/purple_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..72a683af17 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/purple_reinforced_concrete", + "side": "anvilcraft:block/purple_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_slab.json new file mode 100644 index 0000000000..d57762336a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/purple_reinforced_concrete", + "side": "anvilcraft:block/purple_reinforced_concrete", + "top": "anvilcraft:block/purple_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..f88f2fb020 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/purple_reinforced_concrete", + "side": "anvilcraft:block/purple_reinforced_concrete", + "top": "anvilcraft:block/purple_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair.json new file mode 100644 index 0000000000..f7c6cc2c20 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/purple_reinforced_concrete", + "side": "anvilcraft:block/purple_reinforced_concrete", + "top": "anvilcraft:block/purple_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..0b67197305 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/purple_reinforced_concrete", + "side": "anvilcraft:block/purple_reinforced_concrete", + "top": "anvilcraft:block/purple_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..263dcc85ca --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/purple_reinforced_concrete", + "side": "anvilcraft:block/purple_reinforced_concrete", + "top": "anvilcraft:block/purple_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_top.json new file mode 100644 index 0000000000..07d3077e64 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/purple_reinforced_concrete", + "side": "anvilcraft:block/purple_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..169b8fc7a6 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/purple_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..6eed8d140b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/purple_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..0b3f2f8a1f --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/purple_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..131ad4a336 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/purple_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/purple_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete.json new file mode 100644 index 0000000000..741ded09d3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/red_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..df2c4147b9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/red_reinforced_concrete", + "side": "anvilcraft:block/red_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_slab.json new file mode 100644 index 0000000000..2f8203fa8a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/red_reinforced_concrete", + "side": "anvilcraft:block/red_reinforced_concrete", + "top": "anvilcraft:block/red_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..6573cc4f61 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/red_reinforced_concrete", + "side": "anvilcraft:block/red_reinforced_concrete", + "top": "anvilcraft:block/red_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair.json new file mode 100644 index 0000000000..c5771ebda7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/red_reinforced_concrete", + "side": "anvilcraft:block/red_reinforced_concrete", + "top": "anvilcraft:block/red_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..3eed84255c --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/red_reinforced_concrete", + "side": "anvilcraft:block/red_reinforced_concrete", + "top": "anvilcraft:block/red_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..c683d5f786 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/red_reinforced_concrete", + "side": "anvilcraft:block/red_reinforced_concrete", + "top": "anvilcraft:block/red_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_top.json new file mode 100644 index 0000000000..e89fade0ae --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/red_reinforced_concrete", + "side": "anvilcraft:block/red_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..ff18d28a5a --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/red_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..cee8d7e8bb --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/red_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..f642ab75e1 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/red_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..3c0a958ebe --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/red_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/red_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black.json deleted file mode 100644 index b95c7e814b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_black" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_slab.json deleted file mode 100644 index c6b5ed7d80..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_black", - "side": "anvilcraft:block/reinforced_concrete_black", - "top": "anvilcraft:block/reinforced_concrete_black" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_slab_top.json deleted file mode 100644 index 4899434da1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_black", - "side": "anvilcraft:block/reinforced_concrete_black", - "top": "anvilcraft:block/reinforced_concrete_black" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair.json deleted file mode 100644 index 2408ec6241..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_black", - "side": "anvilcraft:block/reinforced_concrete_black", - "top": "anvilcraft:block/reinforced_concrete_black" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair_inner.json deleted file mode 100644 index 14dca48a8c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_black", - "side": "anvilcraft:block/reinforced_concrete_black", - "top": "anvilcraft:block/reinforced_concrete_black" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair_outer.json deleted file mode 100644 index ccce427811..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_black", - "side": "anvilcraft:block/reinforced_concrete_black", - "top": "anvilcraft:block/reinforced_concrete_black" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_post.json deleted file mode 100644 index 28d2619e90..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_black_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_side.json deleted file mode 100644 index 4a3703c3f8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_black_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_side_tall.json deleted file mode 100644 index 155f18b29c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_black_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_black_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue.json deleted file mode 100644 index 87d31051f4..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_slab.json deleted file mode 100644 index 032d07b760..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_blue", - "side": "anvilcraft:block/reinforced_concrete_blue", - "top": "anvilcraft:block/reinforced_concrete_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_slab_top.json deleted file mode 100644 index dd1dc57c7a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_blue", - "side": "anvilcraft:block/reinforced_concrete_blue", - "top": "anvilcraft:block/reinforced_concrete_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair.json deleted file mode 100644 index 9ec43018c7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_blue", - "side": "anvilcraft:block/reinforced_concrete_blue", - "top": "anvilcraft:block/reinforced_concrete_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair_inner.json deleted file mode 100644 index e34c5b75b2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_blue", - "side": "anvilcraft:block/reinforced_concrete_blue", - "top": "anvilcraft:block/reinforced_concrete_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair_outer.json deleted file mode 100644 index b099b260f8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_blue", - "side": "anvilcraft:block/reinforced_concrete_blue", - "top": "anvilcraft:block/reinforced_concrete_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_post.json deleted file mode 100644 index eec43e44ad..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_side.json deleted file mode 100644 index 454f6d2652..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_side_tall.json deleted file mode 100644 index 51d33d5d70..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_blue_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_black.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_black.json deleted file mode 100644 index 197d01aaf9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_black.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_black", - "side": "anvilcraft:block/reinforced_concrete_black_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_blue.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_blue.json deleted file mode 100644 index 5c3718435d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_blue.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_blue", - "side": "anvilcraft:block/reinforced_concrete_blue_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_brown.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_brown.json deleted file mode 100644 index dfdd171bc0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_brown.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_brown", - "side": "anvilcraft:block/reinforced_concrete_brown_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_cyan.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_cyan.json deleted file mode 100644 index ca1406ac7a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_cyan.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_cyan", - "side": "anvilcraft:block/reinforced_concrete_cyan_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_gray.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_gray.json deleted file mode 100644 index 3b1d29d8ec..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_gray.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_gray", - "side": "anvilcraft:block/reinforced_concrete_gray_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_green.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_green.json deleted file mode 100644 index 2d005ac0e8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_green.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_green", - "side": "anvilcraft:block/reinforced_concrete_green_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_light_blue.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_light_blue.json deleted file mode 100644 index ba3cb894de..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_light_blue.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_light_blue", - "side": "anvilcraft:block/reinforced_concrete_light_blue_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_light_gray.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_light_gray.json deleted file mode 100644 index 2a7249fc5b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_light_gray.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_light_gray", - "side": "anvilcraft:block/reinforced_concrete_light_gray_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_lime.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_lime.json deleted file mode 100644 index 5021b28c3d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_lime.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_lime", - "side": "anvilcraft:block/reinforced_concrete_lime_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_magenta.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_magenta.json deleted file mode 100644 index cfc8e5be93..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_magenta.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_magenta", - "side": "anvilcraft:block/reinforced_concrete_magenta_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_orange.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_orange.json deleted file mode 100644 index 3b72aab110..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_orange.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_orange", - "side": "anvilcraft:block/reinforced_concrete_orange_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_pink.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_pink.json deleted file mode 100644 index 34b1b384dd..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_pink.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_pink", - "side": "anvilcraft:block/reinforced_concrete_pink_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_purple.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_purple.json deleted file mode 100644 index 7e1f2afee2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_purple.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_purple", - "side": "anvilcraft:block/reinforced_concrete_purple_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_red.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_red.json deleted file mode 100644 index 9c7d25cebb..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_red.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_red", - "side": "anvilcraft:block/reinforced_concrete_red_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_white.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_white.json deleted file mode 100644 index bbed18c2b5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_white.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_white", - "side": "anvilcraft:block/reinforced_concrete_white_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_yellow.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_yellow.json deleted file mode 100644 index dbad29e934..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_bottom_yellow.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_yellow", - "side": "anvilcraft:block/reinforced_concrete_yellow_bottom" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown.json deleted file mode 100644 index 7c21f7b81e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_brown" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_slab.json deleted file mode 100644 index 4fcb37a833..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_brown", - "side": "anvilcraft:block/reinforced_concrete_brown", - "top": "anvilcraft:block/reinforced_concrete_brown" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_slab_top.json deleted file mode 100644 index e4bb378b81..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_brown", - "side": "anvilcraft:block/reinforced_concrete_brown", - "top": "anvilcraft:block/reinforced_concrete_brown" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair.json deleted file mode 100644 index 04673cdd5a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_brown", - "side": "anvilcraft:block/reinforced_concrete_brown", - "top": "anvilcraft:block/reinforced_concrete_brown" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair_inner.json deleted file mode 100644 index dd51a1ae9e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_brown", - "side": "anvilcraft:block/reinforced_concrete_brown", - "top": "anvilcraft:block/reinforced_concrete_brown" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair_outer.json deleted file mode 100644 index 0576baf817..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_brown", - "side": "anvilcraft:block/reinforced_concrete_brown", - "top": "anvilcraft:block/reinforced_concrete_brown" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_post.json deleted file mode 100644 index 9ed8ff02ff..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_brown_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_side.json deleted file mode 100644 index 6a1649ecb9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_brown_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_side_tall.json deleted file mode 100644 index fe833b142b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_brown_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_brown_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan.json deleted file mode 100644 index c85d0b5541..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_cyan" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_slab.json deleted file mode 100644 index 10b7b84bf9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_cyan", - "side": "anvilcraft:block/reinforced_concrete_cyan", - "top": "anvilcraft:block/reinforced_concrete_cyan" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_slab_top.json deleted file mode 100644 index 224c331e51..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_cyan", - "side": "anvilcraft:block/reinforced_concrete_cyan", - "top": "anvilcraft:block/reinforced_concrete_cyan" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair.json deleted file mode 100644 index ed53f719ff..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_cyan", - "side": "anvilcraft:block/reinforced_concrete_cyan", - "top": "anvilcraft:block/reinforced_concrete_cyan" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair_inner.json deleted file mode 100644 index 569e8ea2af..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_cyan", - "side": "anvilcraft:block/reinforced_concrete_cyan", - "top": "anvilcraft:block/reinforced_concrete_cyan" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair_outer.json deleted file mode 100644 index 230a5b2d40..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_cyan", - "side": "anvilcraft:block/reinforced_concrete_cyan", - "top": "anvilcraft:block/reinforced_concrete_cyan" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_post.json deleted file mode 100644 index 7351169ab7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_cyan_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_side.json deleted file mode 100644 index 6ab1c4cb84..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_cyan_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_side_tall.json deleted file mode 100644 index bd690a085b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_cyan_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_cyan_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray.json deleted file mode 100644 index 7f5c2050d8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_slab.json deleted file mode 100644 index e947e37818..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_gray", - "side": "anvilcraft:block/reinforced_concrete_gray", - "top": "anvilcraft:block/reinforced_concrete_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_slab_top.json deleted file mode 100644 index cd0cb05dd2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_gray", - "side": "anvilcraft:block/reinforced_concrete_gray", - "top": "anvilcraft:block/reinforced_concrete_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair.json deleted file mode 100644 index 3ae01f0bbc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_gray", - "side": "anvilcraft:block/reinforced_concrete_gray", - "top": "anvilcraft:block/reinforced_concrete_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair_inner.json deleted file mode 100644 index aaa49373f4..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_gray", - "side": "anvilcraft:block/reinforced_concrete_gray", - "top": "anvilcraft:block/reinforced_concrete_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair_outer.json deleted file mode 100644 index 336f2447fa..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_gray", - "side": "anvilcraft:block/reinforced_concrete_gray", - "top": "anvilcraft:block/reinforced_concrete_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_post.json deleted file mode 100644 index fe2ec50a38..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_side.json deleted file mode 100644 index 28d0a89f27..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_side_tall.json deleted file mode 100644 index f4b9b634d8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_gray_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green.json deleted file mode 100644 index fb6010143d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_green" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_slab.json deleted file mode 100644 index e778de04ea..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_green", - "side": "anvilcraft:block/reinforced_concrete_green", - "top": "anvilcraft:block/reinforced_concrete_green" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_slab_top.json deleted file mode 100644 index 6c28bb7a32..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_green", - "side": "anvilcraft:block/reinforced_concrete_green", - "top": "anvilcraft:block/reinforced_concrete_green" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair.json deleted file mode 100644 index c938821d9d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_green", - "side": "anvilcraft:block/reinforced_concrete_green", - "top": "anvilcraft:block/reinforced_concrete_green" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair_inner.json deleted file mode 100644 index 6ab54f69ae..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_green", - "side": "anvilcraft:block/reinforced_concrete_green", - "top": "anvilcraft:block/reinforced_concrete_green" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair_outer.json deleted file mode 100644 index 705a9ea783..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_green", - "side": "anvilcraft:block/reinforced_concrete_green", - "top": "anvilcraft:block/reinforced_concrete_green" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_post.json deleted file mode 100644 index 62ea6029a2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_green_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_side.json deleted file mode 100644 index f72f98e7bc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_green_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_side_tall.json deleted file mode 100644 index ab35a5e021..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_green_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_green_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue.json deleted file mode 100644 index 67ce99f8ba..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_light_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_slab.json deleted file mode 100644 index 19c81eb7cc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_blue", - "side": "anvilcraft:block/reinforced_concrete_light_blue", - "top": "anvilcraft:block/reinforced_concrete_light_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_slab_top.json deleted file mode 100644 index da14d62beb..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_blue", - "side": "anvilcraft:block/reinforced_concrete_light_blue", - "top": "anvilcraft:block/reinforced_concrete_light_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair.json deleted file mode 100644 index 4217d32b4a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_blue", - "side": "anvilcraft:block/reinforced_concrete_light_blue", - "top": "anvilcraft:block/reinforced_concrete_light_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair_inner.json deleted file mode 100644 index 0e0733fc51..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_blue", - "side": "anvilcraft:block/reinforced_concrete_light_blue", - "top": "anvilcraft:block/reinforced_concrete_light_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair_outer.json deleted file mode 100644 index 0c33d2afce..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_blue", - "side": "anvilcraft:block/reinforced_concrete_light_blue", - "top": "anvilcraft:block/reinforced_concrete_light_blue" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_post.json deleted file mode 100644 index a25168f792..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_light_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_side.json deleted file mode 100644 index b0dc0e12c1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_light_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_side_tall.json deleted file mode 100644 index ca67d6aadc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_blue_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_light_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray.json deleted file mode 100644 index cc75af7a44..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_light_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_slab.json deleted file mode 100644 index 2efc64c921..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_gray", - "side": "anvilcraft:block/reinforced_concrete_light_gray", - "top": "anvilcraft:block/reinforced_concrete_light_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_slab_top.json deleted file mode 100644 index d38057061d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_gray", - "side": "anvilcraft:block/reinforced_concrete_light_gray", - "top": "anvilcraft:block/reinforced_concrete_light_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair.json deleted file mode 100644 index 0ff127f4f4..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_gray", - "side": "anvilcraft:block/reinforced_concrete_light_gray", - "top": "anvilcraft:block/reinforced_concrete_light_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair_inner.json deleted file mode 100644 index cb5fbae250..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_gray", - "side": "anvilcraft:block/reinforced_concrete_light_gray", - "top": "anvilcraft:block/reinforced_concrete_light_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair_outer.json deleted file mode 100644 index 8b3481b568..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_light_gray", - "side": "anvilcraft:block/reinforced_concrete_light_gray", - "top": "anvilcraft:block/reinforced_concrete_light_gray" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_post.json deleted file mode 100644 index 8f1aade67c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_light_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_side.json deleted file mode 100644 index f901900af0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_light_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_side_tall.json deleted file mode 100644 index 3a7ceaacd7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_light_gray_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_light_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime.json deleted file mode 100644 index e6c70040a8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_lime" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_slab.json deleted file mode 100644 index d72e6d6145..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_lime", - "side": "anvilcraft:block/reinforced_concrete_lime", - "top": "anvilcraft:block/reinforced_concrete_lime" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_slab_top.json deleted file mode 100644 index a849bd0784..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_lime", - "side": "anvilcraft:block/reinforced_concrete_lime", - "top": "anvilcraft:block/reinforced_concrete_lime" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair.json deleted file mode 100644 index 321f68ddf3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_lime", - "side": "anvilcraft:block/reinforced_concrete_lime", - "top": "anvilcraft:block/reinforced_concrete_lime" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair_inner.json deleted file mode 100644 index d509c694fa..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_lime", - "side": "anvilcraft:block/reinforced_concrete_lime", - "top": "anvilcraft:block/reinforced_concrete_lime" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair_outer.json deleted file mode 100644 index cb6583cb73..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_lime", - "side": "anvilcraft:block/reinforced_concrete_lime", - "top": "anvilcraft:block/reinforced_concrete_lime" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_post.json deleted file mode 100644 index 3aa700ab0b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_lime_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_side.json deleted file mode 100644 index f47c73f9c0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_lime_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_side_tall.json deleted file mode 100644 index 9d50d91cb8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_lime_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_lime_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta.json deleted file mode 100644 index 6ea40d7f43..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_magenta" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_slab.json deleted file mode 100644 index 379e600839..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_magenta", - "side": "anvilcraft:block/reinforced_concrete_magenta", - "top": "anvilcraft:block/reinforced_concrete_magenta" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_slab_top.json deleted file mode 100644 index 7571e69d66..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_magenta", - "side": "anvilcraft:block/reinforced_concrete_magenta", - "top": "anvilcraft:block/reinforced_concrete_magenta" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair.json deleted file mode 100644 index 26707cbc54..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_magenta", - "side": "anvilcraft:block/reinforced_concrete_magenta", - "top": "anvilcraft:block/reinforced_concrete_magenta" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair_inner.json deleted file mode 100644 index db567c7424..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_magenta", - "side": "anvilcraft:block/reinforced_concrete_magenta", - "top": "anvilcraft:block/reinforced_concrete_magenta" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair_outer.json deleted file mode 100644 index 7b353f609d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_magenta", - "side": "anvilcraft:block/reinforced_concrete_magenta", - "top": "anvilcraft:block/reinforced_concrete_magenta" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_post.json deleted file mode 100644 index 82121c23bd..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_magenta_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_side.json deleted file mode 100644 index 7ab94f4e73..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_magenta_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_side_tall.json deleted file mode 100644 index 2eccd6f570..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_magenta_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_magenta_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange.json deleted file mode 100644 index aff36e4262..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_orange" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_slab.json deleted file mode 100644 index c4567d55d1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_orange", - "side": "anvilcraft:block/reinforced_concrete_orange", - "top": "anvilcraft:block/reinforced_concrete_orange" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_slab_top.json deleted file mode 100644 index f59cf95538..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_orange", - "side": "anvilcraft:block/reinforced_concrete_orange", - "top": "anvilcraft:block/reinforced_concrete_orange" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair.json deleted file mode 100644 index 02b2a63df8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_orange", - "side": "anvilcraft:block/reinforced_concrete_orange", - "top": "anvilcraft:block/reinforced_concrete_orange" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair_inner.json deleted file mode 100644 index 22692c4f02..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_orange", - "side": "anvilcraft:block/reinforced_concrete_orange", - "top": "anvilcraft:block/reinforced_concrete_orange" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair_outer.json deleted file mode 100644 index a05195fe7c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_orange", - "side": "anvilcraft:block/reinforced_concrete_orange", - "top": "anvilcraft:block/reinforced_concrete_orange" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_post.json deleted file mode 100644 index b6d66ce339..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_orange_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_side.json deleted file mode 100644 index 93836317d9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_orange_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_side_tall.json deleted file mode 100644 index 2067ff049b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_orange_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_orange_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink.json deleted file mode 100644 index 2a5dc43d46..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_pink" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_slab.json deleted file mode 100644 index 1943e20d6d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_pink", - "side": "anvilcraft:block/reinforced_concrete_pink", - "top": "anvilcraft:block/reinforced_concrete_pink" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_slab_top.json deleted file mode 100644 index 431304c3ca..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_pink", - "side": "anvilcraft:block/reinforced_concrete_pink", - "top": "anvilcraft:block/reinforced_concrete_pink" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair.json deleted file mode 100644 index 4036e7d453..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_pink", - "side": "anvilcraft:block/reinforced_concrete_pink", - "top": "anvilcraft:block/reinforced_concrete_pink" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair_inner.json deleted file mode 100644 index 495951f758..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_pink", - "side": "anvilcraft:block/reinforced_concrete_pink", - "top": "anvilcraft:block/reinforced_concrete_pink" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair_outer.json deleted file mode 100644 index 01ff491753..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_pink", - "side": "anvilcraft:block/reinforced_concrete_pink", - "top": "anvilcraft:block/reinforced_concrete_pink" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_post.json deleted file mode 100644 index 28d550e38b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_pink_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_side.json deleted file mode 100644 index 20bb47e528..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_pink_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_side_tall.json deleted file mode 100644 index 077d4375fb..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_pink_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_pink_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple.json deleted file mode 100644 index edaa072988..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_purple" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_slab.json deleted file mode 100644 index 0dbe528589..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_purple", - "side": "anvilcraft:block/reinforced_concrete_purple", - "top": "anvilcraft:block/reinforced_concrete_purple" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_slab_top.json deleted file mode 100644 index bade7a9c65..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_purple", - "side": "anvilcraft:block/reinforced_concrete_purple", - "top": "anvilcraft:block/reinforced_concrete_purple" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair.json deleted file mode 100644 index 70f9c91845..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_purple", - "side": "anvilcraft:block/reinforced_concrete_purple", - "top": "anvilcraft:block/reinforced_concrete_purple" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair_inner.json deleted file mode 100644 index 3aab1d3452..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_purple", - "side": "anvilcraft:block/reinforced_concrete_purple", - "top": "anvilcraft:block/reinforced_concrete_purple" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair_outer.json deleted file mode 100644 index 6843c064f6..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_purple", - "side": "anvilcraft:block/reinforced_concrete_purple", - "top": "anvilcraft:block/reinforced_concrete_purple" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_post.json deleted file mode 100644 index bc50d3d485..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_purple_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_side.json deleted file mode 100644 index 2eda8026c7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_purple_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_side_tall.json deleted file mode 100644 index a792ec4779..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_purple_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_purple_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red.json deleted file mode 100644 index 5147797d03..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_red" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_slab.json deleted file mode 100644 index 2024ef0c15..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_red", - "side": "anvilcraft:block/reinforced_concrete_red", - "top": "anvilcraft:block/reinforced_concrete_red" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_slab_top.json deleted file mode 100644 index fb8e1509bd..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_red", - "side": "anvilcraft:block/reinforced_concrete_red", - "top": "anvilcraft:block/reinforced_concrete_red" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair.json deleted file mode 100644 index 89e21775f8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_red", - "side": "anvilcraft:block/reinforced_concrete_red", - "top": "anvilcraft:block/reinforced_concrete_red" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair_inner.json deleted file mode 100644 index a580150922..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_red", - "side": "anvilcraft:block/reinforced_concrete_red", - "top": "anvilcraft:block/reinforced_concrete_red" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair_outer.json deleted file mode 100644 index 78ef8689e3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_red", - "side": "anvilcraft:block/reinforced_concrete_red", - "top": "anvilcraft:block/reinforced_concrete_red" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_post.json deleted file mode 100644 index e1cfb0b2e1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_red_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_side.json deleted file mode 100644 index 9f96dea1c0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_red_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_side_tall.json deleted file mode 100644 index f49bc74e0e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_red_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_red_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_black.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_black.json deleted file mode 100644 index b681f05afd..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_black.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_black", - "side": "anvilcraft:block/reinforced_concrete_black_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_blue.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_blue.json deleted file mode 100644 index e8b1c6986c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_blue.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_blue", - "side": "anvilcraft:block/reinforced_concrete_blue_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_brown.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_brown.json deleted file mode 100644 index a71753b9f7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_brown.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_brown", - "side": "anvilcraft:block/reinforced_concrete_brown_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_cyan.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_cyan.json deleted file mode 100644 index e1479beee0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_cyan.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_cyan", - "side": "anvilcraft:block/reinforced_concrete_cyan_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_gray.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_gray.json deleted file mode 100644 index 9e82ae2e1f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_gray.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_gray", - "side": "anvilcraft:block/reinforced_concrete_gray_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_green.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_green.json deleted file mode 100644 index 7dd7b5b6c3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_green.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_green", - "side": "anvilcraft:block/reinforced_concrete_green_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_light_blue.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_light_blue.json deleted file mode 100644 index 2de5c7deff..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_light_blue.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_light_blue", - "side": "anvilcraft:block/reinforced_concrete_light_blue_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_light_gray.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_light_gray.json deleted file mode 100644 index 72d32aa526..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_light_gray.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_light_gray", - "side": "anvilcraft:block/reinforced_concrete_light_gray_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_lime.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_lime.json deleted file mode 100644 index 89b81d8e3c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_lime.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_lime", - "side": "anvilcraft:block/reinforced_concrete_lime_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_magenta.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_magenta.json deleted file mode 100644 index 7388ccd8a1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_magenta.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_magenta", - "side": "anvilcraft:block/reinforced_concrete_magenta_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_orange.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_orange.json deleted file mode 100644 index 057636c798..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_orange.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_orange", - "side": "anvilcraft:block/reinforced_concrete_orange_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_pink.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_pink.json deleted file mode 100644 index e20a19297b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_pink.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_pink", - "side": "anvilcraft:block/reinforced_concrete_pink_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_purple.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_purple.json deleted file mode 100644 index 13b5f56c13..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_purple.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_purple", - "side": "anvilcraft:block/reinforced_concrete_purple_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_red.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_red.json deleted file mode 100644 index 96adb877b0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_red.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_red", - "side": "anvilcraft:block/reinforced_concrete_red_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_white.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_white.json deleted file mode 100644 index 6f93657b43..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_white.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_white", - "side": "anvilcraft:block/reinforced_concrete_white_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_yellow.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_yellow.json deleted file mode 100644 index 8911a1e585..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_top_yellow.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "anvilcraft:block/reinforced_concrete_yellow", - "side": "anvilcraft:block/reinforced_concrete_yellow_top" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white.json deleted file mode 100644 index e354b573b8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_white" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_slab.json deleted file mode 100644 index 22ed5947ca..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_white", - "side": "anvilcraft:block/reinforced_concrete_white", - "top": "anvilcraft:block/reinforced_concrete_white" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_slab_top.json deleted file mode 100644 index da7dfad420..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_white", - "side": "anvilcraft:block/reinforced_concrete_white", - "top": "anvilcraft:block/reinforced_concrete_white" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair.json deleted file mode 100644 index 06943598c3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_white", - "side": "anvilcraft:block/reinforced_concrete_white", - "top": "anvilcraft:block/reinforced_concrete_white" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair_inner.json deleted file mode 100644 index 4de340b18f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_white", - "side": "anvilcraft:block/reinforced_concrete_white", - "top": "anvilcraft:block/reinforced_concrete_white" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair_outer.json deleted file mode 100644 index 49802add99..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_white", - "side": "anvilcraft:block/reinforced_concrete_white", - "top": "anvilcraft:block/reinforced_concrete_white" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_post.json deleted file mode 100644 index 946cb9c71a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_white_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_side.json deleted file mode 100644 index 7b128884db..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_white_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_side_tall.json deleted file mode 100644 index ad2dd77c1b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_white_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_white_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow.json deleted file mode 100644 index 1925d941f1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "anvilcraft:block/reinforced_concrete_yellow" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_slab.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_slab.json deleted file mode 100644 index 50c958d9e0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_yellow", - "side": "anvilcraft:block/reinforced_concrete_yellow", - "top": "anvilcraft:block/reinforced_concrete_yellow" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_slab_top.json deleted file mode 100644 index 7087e3ef8b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_yellow", - "side": "anvilcraft:block/reinforced_concrete_yellow", - "top": "anvilcraft:block/reinforced_concrete_yellow" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair.json deleted file mode 100644 index 593552b238..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_yellow", - "side": "anvilcraft:block/reinforced_concrete_yellow", - "top": "anvilcraft:block/reinforced_concrete_yellow" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair_inner.json deleted file mode 100644 index 0f257df8a3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_yellow", - "side": "anvilcraft:block/reinforced_concrete_yellow", - "top": "anvilcraft:block/reinforced_concrete_yellow" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair_outer.json deleted file mode 100644 index 60c057bbe5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_stair_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "anvilcraft:block/reinforced_concrete_yellow", - "side": "anvilcraft:block/reinforced_concrete_yellow", - "top": "anvilcraft:block/reinforced_concrete_yellow" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_post.json deleted file mode 100644 index 50fbb602a8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_post", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_yellow_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_side.json deleted file mode 100644 index 876f1d1dd1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_yellow_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_side_tall.json deleted file mode 100644 index 99e8d8ce68..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/block/reinforced_concrete_yellow_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/template_wall_side_tall", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_yellow_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/sugar_block1.json b/src/generated/resources/assets/anvilcraft/models/block/sugar_block_1.json similarity index 100% rename from src/generated/resources/assets/anvilcraft/models/block/sugar_block1.json rename to src/generated/resources/assets/anvilcraft/models/block/sugar_block_1.json diff --git a/src/generated/resources/assets/anvilcraft/models/block/sugar_block2.json b/src/generated/resources/assets/anvilcraft/models/block/sugar_block_2.json similarity index 100% rename from src/generated/resources/assets/anvilcraft/models/block/sugar_block2.json rename to src/generated/resources/assets/anvilcraft/models/block/sugar_block_2.json diff --git a/src/generated/resources/assets/anvilcraft/models/block/sugar_block3.json b/src/generated/resources/assets/anvilcraft/models/block/sugar_block_3.json similarity index 100% rename from src/generated/resources/assets/anvilcraft/models/block/sugar_block3.json rename to src/generated/resources/assets/anvilcraft/models/block/sugar_block_3.json diff --git a/src/generated/resources/assets/anvilcraft/models/block/tempering_glass.json b/src/generated/resources/assets/anvilcraft/models/block/tempering_glass.json index d8fbba4702..2d5b23cc05 100644 --- a/src/generated/resources/assets/anvilcraft/models/block/tempering_glass.json +++ b/src/generated/resources/assets/anvilcraft/models/block/tempering_glass.json @@ -1,7 +1,9 @@ { "parent": "minecraft:block/cube_all", - "render_type": "minecraft:translucent", "textures": { - "all": "anvilcraft:block/tempering_glass" + "all": { + "force_translucent": true, + "sprite": "anvilcraft:block/tempering_glass" + } } } \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete.json new file mode 100644 index 0000000000..e1907bf4ca --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/white_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..13f3d2af35 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/white_reinforced_concrete", + "side": "anvilcraft:block/white_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_slab.json new file mode 100644 index 0000000000..feacaeccb0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/white_reinforced_concrete", + "side": "anvilcraft:block/white_reinforced_concrete", + "top": "anvilcraft:block/white_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..896381d700 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/white_reinforced_concrete", + "side": "anvilcraft:block/white_reinforced_concrete", + "top": "anvilcraft:block/white_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair.json new file mode 100644 index 0000000000..c7d2e1c6a9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/white_reinforced_concrete", + "side": "anvilcraft:block/white_reinforced_concrete", + "top": "anvilcraft:block/white_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..5c9b077a2d --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/white_reinforced_concrete", + "side": "anvilcraft:block/white_reinforced_concrete", + "top": "anvilcraft:block/white_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..ba4e907781 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/white_reinforced_concrete", + "side": "anvilcraft:block/white_reinforced_concrete", + "top": "anvilcraft:block/white_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_top.json new file mode 100644 index 0000000000..e19f969ec5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/white_reinforced_concrete", + "side": "anvilcraft:block/white_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..9748b26dc5 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/white_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..80ef80b561 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/white_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..f18a1196d8 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/white_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..ef03bcc82e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/white_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/white_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete.json new file mode 100644 index 0000000000..7f7417bc88 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "anvilcraft:block/yellow_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_bottom.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_bottom.json new file mode 100644 index 0000000000..9bf62090f3 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/yellow_reinforced_concrete", + "side": "anvilcraft:block/yellow_reinforced_concrete_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_slab.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_slab.json new file mode 100644 index 0000000000..2840bb1070 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "anvilcraft:block/yellow_reinforced_concrete", + "side": "anvilcraft:block/yellow_reinforced_concrete", + "top": "anvilcraft:block/yellow_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_slab_top.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_slab_top.json new file mode 100644 index 0000000000..19c95b19e7 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "anvilcraft:block/yellow_reinforced_concrete", + "side": "anvilcraft:block/yellow_reinforced_concrete", + "top": "anvilcraft:block/yellow_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair.json new file mode 100644 index 0000000000..b50742dd5e --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "anvilcraft:block/yellow_reinforced_concrete", + "side": "anvilcraft:block/yellow_reinforced_concrete", + "top": "anvilcraft:block/yellow_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair_inner.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair_inner.json new file mode 100644 index 0000000000..fee6faa968 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "anvilcraft:block/yellow_reinforced_concrete", + "side": "anvilcraft:block/yellow_reinforced_concrete", + "top": "anvilcraft:block/yellow_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair_outer.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair_outer.json new file mode 100644 index 0000000000..db50e66fe0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_stair_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "anvilcraft:block/yellow_reinforced_concrete", + "side": "anvilcraft:block/yellow_reinforced_concrete", + "top": "anvilcraft:block/yellow_reinforced_concrete" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_top.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_top.json new file mode 100644 index 0000000000..073135b541 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "anvilcraft:block/yellow_reinforced_concrete", + "side": "anvilcraft:block/yellow_reinforced_concrete_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_inventory.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_inventory.json new file mode 100644 index 0000000000..4f8d12ffa9 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "anvilcraft:block/yellow_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_post.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_post.json new file mode 100644 index 0000000000..c6895614e4 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "anvilcraft:block/yellow_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_side.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_side.json new file mode 100644 index 0000000000..26919813d2 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "anvilcraft:block/yellow_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_side_tall.json b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_side_tall.json new file mode 100644 index 0000000000..9ae3baa5e0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/block/yellow_reinforced_concrete_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "anvilcraft:block/yellow_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/acceleration_ring.json b/src/generated/resources/assets/anvilcraft/models/item/acceleration_ring.json deleted file mode 100644 index 5bf34d5ed5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/acceleration_ring.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/acceleration_ring" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/activator_sliding_rail.json b/src/generated/resources/assets/anvilcraft/models/item/activator_sliding_rail.json deleted file mode 100644 index 3470f8a5ea..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/activator_sliding_rail.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/activator_sliding_rail" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/active_silencer.json b/src/generated/resources/assets/anvilcraft/models/item/active_silencer.json deleted file mode 100644 index 61da72edc0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/active_silencer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/active_silencer" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/advanced_comparator.json b/src/generated/resources/assets/anvilcraft/models/item/advanced_comparator.json deleted file mode 100644 index 0dfc66d3bb..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/advanced_comparator.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/advanced_comparator" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/amber_block.json b/src/generated/resources/assets/anvilcraft/models/item/amber_block.json deleted file mode 100644 index 8fc4cc41b7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/amber_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/amber_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/arrow.json b/src/generated/resources/assets/anvilcraft/models/item/arrow.json deleted file mode 100644 index 0ae8ccf5bd..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/arrow.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/arrow" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/batch_crafter.json b/src/generated/resources/assets/anvilcraft/models/item/batch_crafter.json deleted file mode 100644 index 374a91d6b4..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/batch_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/batch_crafter" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/batch_cutter.json b/src/generated/resources/assets/anvilcraft/models/item/batch_cutter.json deleted file mode 100644 index 86e75f749d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/batch_cutter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/batch_cutter" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/berry_cake_block.json b/src/generated/resources/assets/anvilcraft/models/item/berry_cake_block.json deleted file mode 100644 index f175f4a7ab..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/berry_cake_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/berry_cake_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/berry_cream_block.json b/src/generated/resources/assets/anvilcraft/models/item/berry_cream_block.json deleted file mode 100644 index 286f6dcec5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/berry_cream_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/berry_cream_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/black_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/black_cement_bucket.json deleted file mode 100644 index 1188f16fd2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/black_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:black_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_block.json b/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_block.json deleted file mode 100644 index 836203e050..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/black_chocolate_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_slab.json b/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_slab.json deleted file mode 100644 index 718b49c05c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/black_chocolate_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_stairs.json deleted file mode 100644 index c8957a7d2d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/black_chocolate_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/black_chocolate_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/black_hole.json b/src/generated/resources/assets/anvilcraft/models/item/black_hole.json deleted file mode 100644 index 65ee11a494..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/black_hole.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/black_hole" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/block_comparator.json b/src/generated/resources/assets/anvilcraft/models/item/block_comparator.json deleted file mode 100644 index 72bd13f21b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/block_comparator.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/block_comparator" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/block_devourer.json b/src/generated/resources/assets/anvilcraft/models/item/block_devourer.json deleted file mode 100644 index e61678cf4c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/block_devourer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/block_devourer" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/block_placer.json b/src/generated/resources/assets/anvilcraft/models/item/block_placer.json deleted file mode 100644 index e56a151be2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/block_placer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/block_placer" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/blue_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/blue_cement_bucket.json deleted file mode 100644 index 42b72f9694..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/blue_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:blue_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/brass_block.json b/src/generated/resources/assets/anvilcraft/models/item/brass_block.json deleted file mode 100644 index eb0265933e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/brass_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/brass_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/brass_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/brass_pressure_plate.json deleted file mode 100644 index 2b9ac85baa..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/brass_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/brass_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/bronze_block.json b/src/generated/resources/assets/anvilcraft/models/item/bronze_block.json deleted file mode 100644 index bb350de3be..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/bronze_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/bronze_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/bronze_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/bronze_pressure_plate.json deleted file mode 100644 index b4a8037161..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/bronze_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/bronze_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/brown_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/brown_cement_bucket.json deleted file mode 100644 index b2327e4a6c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/brown_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:brown_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cake_base_block.json b/src/generated/resources/assets/anvilcraft/models/item/cake_base_block.json deleted file mode 100644 index c4f8ff5c31..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cake_base_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cake_base_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cake_block.json b/src/generated/resources/assets/anvilcraft/models/item/cake_block.json deleted file mode 100644 index 9a73912f14..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cake_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cake_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil.json b/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil.json deleted file mode 100644 index 76dd45d72e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/celestial_forging_anvil" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_amplifier.json b/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_amplifier.json deleted file mode 100644 index 361f089c3e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_amplifier.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/celestial_forging_anvil_amplifier" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_fluid_interface.json b/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_fluid_interface.json deleted file mode 100644 index 3bfc304fe9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_fluid_interface.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/celestial_forging_anvil_fluid_interface" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_laser_interface.json b/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_laser_interface.json deleted file mode 100644 index 2f84e1dadf..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_laser_interface.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/celestial_forging_anvil_laser_interface" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_logistics_interface.json b/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_logistics_interface.json deleted file mode 100644 index 76878d0f52..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/celestial_forging_anvil_logistics_interface.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/celestial_forging_anvil_logistics_interface" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/charge_collector.json b/src/generated/resources/assets/anvilcraft/models/item/charge_collector.json deleted file mode 100644 index 2cdb6b3e71..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/charge_collector.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/charge_collector" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/charger.json b/src/generated/resources/assets/anvilcraft/models/item/charger.json deleted file mode 100644 index dbae62170f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/charger.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/charger" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/chocolate_block.json b/src/generated/resources/assets/anvilcraft/models/item/chocolate_block.json deleted file mode 100644 index 77560eeca9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/chocolate_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/chocolate_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/chocolate_cake_block.json b/src/generated/resources/assets/anvilcraft/models/item/chocolate_cake_block.json deleted file mode 100644 index 0ece997227..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/chocolate_cake_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/chocolate_cake_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/chocolate_cream_block.json b/src/generated/resources/assets/anvilcraft/models/item/chocolate_cream_block.json deleted file mode 100644 index bd85aa3c7d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/chocolate_cream_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/chocolate_cream_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/chocolate_slab.json b/src/generated/resources/assets/anvilcraft/models/item/chocolate_slab.json deleted file mode 100644 index bd1a3764a9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/chocolate_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/chocolate_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/chocolate_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/chocolate_stairs.json deleted file mode 100644 index c63e8f8474..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/chocolate_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/chocolate_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/chromatic_stone.json b/src/generated/resources/assets/anvilcraft/models/item/chromatic_stone.json deleted file mode 100644 index 531b868b2e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/chromatic_stone.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/chromatic_stone" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/chute.json b/src/generated/resources/assets/anvilcraft/models/item/chute.json deleted file mode 100644 index 3f17c9550f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/chute.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/chute" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cinerite.json b/src/generated/resources/assets/anvilcraft/models/item/cinerite.json deleted file mode 100644 index 3df3e3f1c6..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cinerite.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cinerite" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/confined_energy_anvilon.json b/src/generated/resources/assets/anvilcraft/models/item/confined_energy_anvilon.json deleted file mode 100644 index fe3e6a525e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/confined_energy_anvilon.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/confined_energy_anvilon" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/confined_mass_anvilon.json b/src/generated/resources/assets/anvilcraft/models/item/confined_mass_anvilon.json deleted file mode 100644 index 9d4daa23ad..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/confined_mass_anvilon.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/confined_mass_anvilon" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/confined_neutronium_ingot.json b/src/generated/resources/assets/anvilcraft/models/item/confined_neutronium_ingot.json deleted file mode 100644 index e327c7594a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/confined_neutronium_ingot.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/confined_neutronium_ingot" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/confined_space_anvilon.json b/src/generated/resources/assets/anvilcraft/models/item/confined_space_anvilon.json deleted file mode 100644 index 4ce260d1db..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/confined_space_anvilon.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/confined_space_anvilon" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/confined_time_anvilon.json b/src/generated/resources/assets/anvilcraft/models/item/confined_time_anvilon.json deleted file mode 100644 index 1a5a8bf5e9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/confined_time_anvilon.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/confined_time_anvilon" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/confinement_chamber.json b/src/generated/resources/assets/anvilcraft/models/item/confinement_chamber.json deleted file mode 100644 index 4fb0a33aa3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/confinement_chamber.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/confinement_chamber" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/controllable_sand.json b/src/generated/resources/assets/anvilcraft/models/item/controllable_sand.json deleted file mode 100644 index d1f1c10f4e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/controllable_sand.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/controllable_sand" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/copper_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/copper_pressure_plate.json deleted file mode 100644 index a8352b7a65..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/copper_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/copper_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/corrupted_beacon.json b/src/generated/resources/assets/anvilcraft/models/item/corrupted_beacon.json deleted file mode 100644 index 401727fc8e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/corrupted_beacon.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/corrupted_beacon" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/crab_trap.json b/src/generated/resources/assets/anvilcraft/models/item/crab_trap.json deleted file mode 100644 index fff782761e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/crab_trap.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/crab_trap" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cream_block.json b/src/generated/resources/assets/anvilcraft/models/item/cream_block.json deleted file mode 100644 index 528ccce8b5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cream_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cream_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/crushing_table.json b/src/generated/resources/assets/anvilcraft/models/item/crushing_table.json deleted file mode 100644 index 539c372603..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/crushing_table.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/crushing_table" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cursed_gold_block.json b/src/generated/resources/assets/anvilcraft/models/item/cursed_gold_block.json deleted file mode 100644 index fc15489670..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cursed_gold_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cursed_gold_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_block.json b/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_block.json deleted file mode 100644 index d0b25b151d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_ember_metal_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_pillar.json b/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_pillar.json deleted file mode 100644 index daf9f9ea00..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_pillar.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_ember_metal_pillar" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_slab.json b/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_slab.json deleted file mode 100644 index ea1beac5be..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_ember_metal_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_stairs.json deleted file mode 100644 index a798dc439b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_ember_metal_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_ember_metal_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_flint_block.json b/src/generated/resources/assets/anvilcraft/models/item/cut_flint_block.json deleted file mode 100644 index 90c93708f3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_flint_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_flint_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_flint_pillar.json b/src/generated/resources/assets/anvilcraft/models/item/cut_flint_pillar.json deleted file mode 100644 index df14fbbbcc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_flint_pillar.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_flint_pillar" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_flint_slab.json b/src/generated/resources/assets/anvilcraft/models/item/cut_flint_slab.json deleted file mode 100644 index ca4c66f33b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_flint_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_flint_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_flint_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/cut_flint_stairs.json deleted file mode 100644 index dd84433d64..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_flint_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_flint_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_block.json b/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_block.json deleted file mode 100644 index 2f82054388..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_frost_metal_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_pillar.json b/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_pillar.json deleted file mode 100644 index 852945364a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_pillar.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_frost_metal_pillar" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_slab.json b/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_slab.json deleted file mode 100644 index 80241036b1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_frost_metal_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_stairs.json deleted file mode 100644 index 1f9eb373b3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_frost_metal_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_frost_metal_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_block.json b/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_block.json deleted file mode 100644 index 62102c02ed..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_heavy_iron_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_slab.json b/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_slab.json deleted file mode 100644 index 45e3667c4b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_heavy_iron_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_stairs.json deleted file mode 100644 index 71f6042f8d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_heavy_iron_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_heavy_iron_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_block.json b/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_block.json deleted file mode 100644 index 9ed54ea124..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_royal_steel_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_pillar.json b/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_pillar.json deleted file mode 100644 index 6f6186ec1e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_pillar.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_royal_steel_pillar" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_slab.json b/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_slab.json deleted file mode 100644 index b93d4b6ce3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_royal_steel_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_stairs.json deleted file mode 100644 index 73ee60d649..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cut_royal_steel_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/cut_royal_steel_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/cyan_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/cyan_cement_bucket.json deleted file mode 100644 index 27e1acb18a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/cyan_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:cyan_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/deepslate_lead_ore.json b/src/generated/resources/assets/anvilcraft/models/item/deepslate_lead_ore.json deleted file mode 100644 index 73baa68821..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/deepslate_lead_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/deepslate_lead_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/deepslate_silver_ore.json b/src/generated/resources/assets/anvilcraft/models/item/deepslate_silver_ore.json deleted file mode 100644 index 9db8ae946c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/deepslate_silver_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/deepslate_silver_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/deepslate_tin_ore.json b/src/generated/resources/assets/anvilcraft/models/item/deepslate_tin_ore.json deleted file mode 100644 index 633779d37b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/deepslate_tin_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/deepslate_tin_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/deepslate_titanium_ore.json b/src/generated/resources/assets/anvilcraft/models/item/deepslate_titanium_ore.json deleted file mode 100644 index be1c2f1636..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/deepslate_titanium_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/deepslate_titanium_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/deepslate_tungsten_ore.json b/src/generated/resources/assets/anvilcraft/models/item/deepslate_tungsten_ore.json deleted file mode 100644 index da4c5dfd6b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/deepslate_tungsten_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/deepslate_tungsten_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/deepslate_uranium_ore.json b/src/generated/resources/assets/anvilcraft/models/item/deepslate_uranium_ore.json deleted file mode 100644 index 8a2dbf84dc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/deepslate_uranium_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/deepslate_uranium_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/deepslate_zinc_ore.json b/src/generated/resources/assets/anvilcraft/models/item/deepslate_zinc_ore.json deleted file mode 100644 index 15e5c03ed9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/deepslate_zinc_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/deepslate_zinc_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/deflection_ring.json b/src/generated/resources/assets/anvilcraft/models/item/deflection_ring.json deleted file mode 100644 index c7645b2a6c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/deflection_ring.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/deflection_ring" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/detector_sliding_rail.json b/src/generated/resources/assets/anvilcraft/models/item/detector_sliding_rail.json deleted file mode 100644 index 9766200a81..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/detector_sliding_rail.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/detector_sliding_rail" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/discharger.json b/src/generated/resources/assets/anvilcraft/models/item/discharger.json deleted file mode 100644 index 97ed50132d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/discharger.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/discharger" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/dyson_sphere_component.json b/src/generated/resources/assets/anvilcraft/models/item/dyson_sphere_component.json new file mode 100644 index 0000000000..980532a938 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/item/dyson_sphere_component.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "anvilcraft:item/dyson_sphere_component" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/earth_core_shard_block.json b/src/generated/resources/assets/anvilcraft/models/item/earth_core_shard_block.json deleted file mode 100644 index 31bef7114e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/earth_core_shard_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/earth_core_shard_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/earth_core_shard_ore.json b/src/generated/resources/assets/anvilcraft/models/item/earth_core_shard_ore.json deleted file mode 100644 index 5aef5258d0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/earth_core_shard_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/earth_core_shard_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ember_anvil.json b/src/generated/resources/assets/anvilcraft/models/item/ember_anvil.json deleted file mode 100644 index 9215dccf21..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ember_anvil.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ember_anvil" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ember_glass.json b/src/generated/resources/assets/anvilcraft/models/item/ember_glass.json deleted file mode 100644 index befd553736..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ember_glass.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ember_glass" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ember_grindstone.json b/src/generated/resources/assets/anvilcraft/models/item/ember_grindstone.json deleted file mode 100644 index 846716c425..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ember_grindstone.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ember_grindstone" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ember_metal_block.json b/src/generated/resources/assets/anvilcraft/models/item/ember_metal_block.json deleted file mode 100644 index 559381ee78..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ember_metal_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ember_metal_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ember_smithing_table.json b/src/generated/resources/assets/anvilcraft/models/item/ember_smithing_table.json deleted file mode 100644 index a4b74365cb..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ember_smithing_table.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ember_smithing_table" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/end_dust.json b/src/generated/resources/assets/anvilcraft/models/item/end_dust.json deleted file mode 100644 index 2c7e4d476f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/end_dust.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/end_dust" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/exp_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/exp_bucket.json deleted file mode 100644 index a05a9b196d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/exp_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:exp_fluid", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/exp_gem_block.json b/src/generated/resources/assets/anvilcraft/models/item/exp_gem_block.json deleted file mode 100644 index 7669cba68b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/exp_gem_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/exp_gem_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/exposed_copper_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/exposed_copper_pressure_plate.json deleted file mode 100644 index 09a74e81f8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/exposed_copper_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/exposed_copper_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ferrite_core_magnet_block.json b/src/generated/resources/assets/anvilcraft/models/item/ferrite_core_magnet_block.json deleted file mode 100644 index 8c6a82741a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ferrite_core_magnet_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ferrite_core_magnet_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/fish_tank.json b/src/generated/resources/assets/anvilcraft/models/item/fish_tank.json deleted file mode 100644 index 6037e38296..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/fish_tank.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/fish_tank" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/flint_block.json b/src/generated/resources/assets/anvilcraft/models/item/flint_block.json deleted file mode 100644 index 27983e0038..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/flint_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/flint_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/fluid_tank.json b/src/generated/resources/assets/anvilcraft/models/item/fluid_tank.json deleted file mode 100644 index 0164d60411..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/fluid_tank.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/fluid_tank" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/frost_anvil.json b/src/generated/resources/assets/anvilcraft/models/item/frost_anvil.json deleted file mode 100644 index fcda6cbed9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/frost_anvil.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/frost_anvil" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/frost_glass.json b/src/generated/resources/assets/anvilcraft/models/item/frost_glass.json deleted file mode 100644 index 708f49acb7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/frost_glass.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/frost_glass" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/frost_grindstone.json b/src/generated/resources/assets/anvilcraft/models/item/frost_grindstone.json deleted file mode 100644 index 80ea63483d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/frost_grindstone.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/frost_grindstone" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/frost_metal_block.json b/src/generated/resources/assets/anvilcraft/models/item/frost_metal_block.json deleted file mode 100644 index ce18205243..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/frost_metal_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/frost_metal_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/frost_smithing_table.json b/src/generated/resources/assets/anvilcraft/models/item/frost_smithing_table.json deleted file mode 100644 index c1607b9d8c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/frost_smithing_table.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/frost_smithing_table" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/giant_anvil.json b/src/generated/resources/assets/anvilcraft/models/item/giant_anvil.json deleted file mode 100644 index 0b7d58af51..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/giant_anvil.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/giant_anvil" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/glowing_netherite_block.json b/src/generated/resources/assets/anvilcraft/models/item/glowing_netherite_block.json deleted file mode 100644 index c00ca12707..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/glowing_netherite_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/glowing_netherite_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/glowing_tungsten_block.json b/src/generated/resources/assets/anvilcraft/models/item/glowing_tungsten_block.json deleted file mode 100644 index de752b956e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/glowing_tungsten_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/glowing_tungsten_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/gray_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/gray_cement_bucket.json deleted file mode 100644 index 8a2fc6352b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/gray_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:gray_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/green_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/green_cement_bucket.json deleted file mode 100644 index 574fc49170..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/green_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:green_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/gunpowder_block.json b/src/generated/resources/assets/anvilcraft/models/item/gunpowder_block.json deleted file mode 100644 index 1170d71324..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/gunpowder_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/gunpowder_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heat_collector.json b/src/generated/resources/assets/anvilcraft/models/item/heat_collector.json deleted file mode 100644 index f0684b5c82..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heat_collector.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/heat_collector" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heated_netherite_block.json b/src/generated/resources/assets/anvilcraft/models/item/heated_netherite_block.json deleted file mode 100644 index c817b41e3d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heated_netherite_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/heated_netherite_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heated_tungsten_block.json b/src/generated/resources/assets/anvilcraft/models/item/heated_tungsten_block.json deleted file mode 100644 index 93ace82872..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heated_tungsten_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/heated_tungsten_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heater.json b/src/generated/resources/assets/anvilcraft/models/item/heater.json deleted file mode 100644 index cd6191eee7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heater.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/heater" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_block.json b/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_block.json deleted file mode 100644 index 88d8b8892e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/heavy_iron_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_column.json b/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_column.json deleted file mode 100644 index 5358ef640e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_column.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/heavy_iron_column" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_plate.json b/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_plate.json deleted file mode 100644 index 08ef1d196b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/heavy_iron_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_trapdoor.json b/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_trapdoor.json deleted file mode 100644 index cb74077023..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_trapdoor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/heavy_iron_trapdoor_bottom" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_wall.json b/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_wall.json deleted file mode 100644 index 1de7e6a0eb..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/heavy_iron_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/heavy_iron_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/hollow_magnet_block.json b/src/generated/resources/assets/anvilcraft/models/item/hollow_magnet_block.json deleted file mode 100644 index 5614fbbe3f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/hollow_magnet_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/hollow_magnet_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/impact_pile.json b/src/generated/resources/assets/anvilcraft/models/item/impact_pile.json deleted file mode 100644 index 5b2d4e2eef..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/impact_pile.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/impact_pile" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/incandescent_netherite_block.json b/src/generated/resources/assets/anvilcraft/models/item/incandescent_netherite_block.json deleted file mode 100644 index 8627a2cea9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/incandescent_netherite_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/incandescent_netherite_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/incandescent_tungsten_block.json b/src/generated/resources/assets/anvilcraft/models/item/incandescent_tungsten_block.json deleted file mode 100644 index 7716034b3d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/incandescent_tungsten_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/incandescent_tungsten_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/induction_light.json b/src/generated/resources/assets/anvilcraft/models/item/induction_light.json deleted file mode 100644 index d1a9e71c71..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/induction_light.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/induction_light" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ionocraft_backpack.json b/src/generated/resources/assets/anvilcraft/models/item/ionocraft_backpack.json deleted file mode 100644 index bbb03c78e9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ionocraft_backpack.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "overrides": [ - { - "model": "anvilcraft:item/ionocraft_backpack", - "predicate": { - "anvilcraft:flight_time": 0.0 - } - } - ], - "textures": { - "layer0": "anvilcraft:item/ionocraft_backpack" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/item_collector.json b/src/generated/resources/assets/anvilcraft/models/item/item_collector.json deleted file mode 100644 index 0f0301ebee..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/item_collector.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/item_collector" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/item_detector.json b/src/generated/resources/assets/anvilcraft/models/item/item_detector.json deleted file mode 100644 index f304b209f5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/item_detector.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/item_detector" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/jewelcrafting_table.json b/src/generated/resources/assets/anvilcraft/models/item/jewelcrafting_table.json deleted file mode 100644 index 62d11dacde..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/jewelcrafting_table.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/jewelcrafting_table" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/large_cake.json b/src/generated/resources/assets/anvilcraft/models/item/large_cake.json deleted file mode 100644 index 5fb6b28d15..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/large_cake.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/large_cake" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/large_fluid_tank.json b/src/generated/resources/assets/anvilcraft/models/item/large_fluid_tank.json deleted file mode 100644 index 8b327a33ab..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/large_fluid_tank.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/large_fluid_tank" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/laser_receiver.json b/src/generated/resources/assets/anvilcraft/models/item/laser_receiver.json deleted file mode 100644 index 16aa193d09..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/laser_receiver.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/laser_receiver" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/lead_block.json b/src/generated/resources/assets/anvilcraft/models/item/lead_block.json deleted file mode 100644 index f6a3b9a44e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/lead_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/lead_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/lead_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/lead_pressure_plate.json deleted file mode 100644 index c454ea0e0e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/lead_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/lead_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/levitation_powder_block.json b/src/generated/resources/assets/anvilcraft/models/item/levitation_powder_block.json deleted file mode 100644 index 1a0a2899dc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/levitation_powder_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/levitation_powder_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/light_blue_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/light_blue_cement_bucket.json deleted file mode 100644 index 23d86ac8b1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/light_blue_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:light_blue_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/light_gray_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/light_gray_cement_bucket.json deleted file mode 100644 index a38b2aebb4..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/light_gray_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:light_gray_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/lime_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/lime_cement_bucket.json deleted file mode 100644 index a2796572e7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/lime_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:lime_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/load_monitor.json b/src/generated/resources/assets/anvilcraft/models/item/load_monitor.json deleted file mode 100644 index 9bab8ea2c8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/load_monitor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/load_monitor_0" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/magenta_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/magenta_cement_bucket.json deleted file mode 100644 index ce3f931e6d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/magenta_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:magenta_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/magnet_block.json b/src/generated/resources/assets/anvilcraft/models/item/magnet_block.json deleted file mode 100644 index 38b6c856d3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/magnet_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/magnet_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/magnetic_chute.json b/src/generated/resources/assets/anvilcraft/models/item/magnetic_chute.json deleted file mode 100644 index d393e28885..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/magnetic_chute.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/magnetic_chute" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/magnetoelectric_core.json b/src/generated/resources/assets/anvilcraft/models/item/magnetoelectric_core.json deleted file mode 100644 index a898ea403c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/magnetoelectric_core.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/magnetoelectric_core" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/melt_gem_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/melt_gem_bucket.json deleted file mode 100644 index e3f5b71b01..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/melt_gem_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:melt_gem", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/menger_sponge.json b/src/generated/resources/assets/anvilcraft/models/item/menger_sponge.json deleted file mode 100644 index 52febdce81..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/menger_sponge.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/menger_sponge" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/mineral_fountain.json b/src/generated/resources/assets/anvilcraft/models/item/mineral_fountain.json deleted file mode 100644 index 2371cba5e5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/mineral_fountain.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/mineral_fountain" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/mob_amber_block.json b/src/generated/resources/assets/anvilcraft/models/item/mob_amber_block.json deleted file mode 100644 index 71a10ecf5f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/mob_amber_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/mob_amber_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/multiphase_matter_block.json b/src/generated/resources/assets/anvilcraft/models/item/multiphase_matter_block.json deleted file mode 100644 index b5db4d772b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/multiphase_matter_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/multiphase_matter_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/negative_matter_block.json b/src/generated/resources/assets/anvilcraft/models/item/negative_matter_block.json deleted file mode 100644 index c1ab2ff9a1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/negative_matter_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/negative_matter_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/neoforge.json b/src/generated/resources/assets/anvilcraft/models/item/neoforge.json deleted file mode 100644 index 9cfe1c512a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/neoforge.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/neoforge" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/nesting_shulker_box.json b/src/generated/resources/assets/anvilcraft/models/item/nesting_shulker_box.json deleted file mode 100644 index 3e1fdd4855..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/nesting_shulker_box.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/nesting_shulker_box" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/nether_dust.json b/src/generated/resources/assets/anvilcraft/models/item/nether_dust.json deleted file mode 100644 index c18cc2e2f1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/nether_dust.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/nether_dust" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/neutron_irradiator.json b/src/generated/resources/assets/anvilcraft/models/item/neutron_irradiator.json deleted file mode 100644 index 9d1190b44c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/neutron_irradiator.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/neutron_irradiator" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/oil_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/oil_bucket.json deleted file mode 100644 index 01c0026594..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/oil_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:oil", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/orange_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/orange_cement_bucket.json deleted file mode 100644 index 5fc3bd67a1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/orange_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:orange_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/over_nesting_shulker_box.json b/src/generated/resources/assets/anvilcraft/models/item/over_nesting_shulker_box.json deleted file mode 100644 index 3b6e219d00..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/over_nesting_shulker_box.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/over_nesting_shulker_box" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/overheated_ember_metal_block.json b/src/generated/resources/assets/anvilcraft/models/item/overheated_ember_metal_block.json deleted file mode 100644 index e272111cc2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/overheated_ember_metal_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/overheated_ember_metal_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/oxidized_copper_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/oxidized_copper_pressure_plate.json deleted file mode 100644 index d6767e15eb..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/oxidized_copper_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/oxidized_copper_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/penrose_sphere_component.json b/src/generated/resources/assets/anvilcraft/models/item/penrose_sphere_component.json new file mode 100644 index 0000000000..dd1ee4822b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/item/penrose_sphere_component.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "anvilcraft:item/penrose_sphere_component" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/piezoelectric_crystal.json b/src/generated/resources/assets/anvilcraft/models/item/piezoelectric_crystal.json deleted file mode 100644 index 6d93fee9d1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/piezoelectric_crystal.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/piezoelectric_crystal" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/pink_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/pink_cement_bucket.json deleted file mode 100644 index dae7edacba..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/pink_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:pink_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/plutonium_block.json b/src/generated/resources/assets/anvilcraft/models/item/plutonium_block.json deleted file mode 100644 index 4c8ee72e1c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/plutonium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/plutonium_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/plutonium_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/plutonium_pressure_plate.json deleted file mode 100644 index 3a825f34ba..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/plutonium_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/plutonium_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/polished_flint_block.json b/src/generated/resources/assets/anvilcraft/models/item/polished_flint_block.json deleted file mode 100644 index 02d7f64d8d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/polished_flint_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/polished_flint_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_block.json b/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_block.json deleted file mode 100644 index fd6a184ba0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/polished_heavy_iron_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_slab.json b/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_slab.json deleted file mode 100644 index 54ebc29cd5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/polished_heavy_iron_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_stairs.json deleted file mode 100644 index 2c25671bbe..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/polished_heavy_iron_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/polished_heavy_iron_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/power_converter_big.json b/src/generated/resources/assets/anvilcraft/models/item/power_converter_big.json deleted file mode 100644 index 44c5abf63e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/power_converter_big.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/power_converter_big" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/power_converter_middle.json b/src/generated/resources/assets/anvilcraft/models/item/power_converter_middle.json deleted file mode 100644 index b7860174a5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/power_converter_middle.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/power_converter_middle" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/power_converter_small.json b/src/generated/resources/assets/anvilcraft/models/item/power_converter_small.json deleted file mode 100644 index b67a16dc42..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/power_converter_small.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/power_converter_small" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/powered_sliding_rail.json b/src/generated/resources/assets/anvilcraft/models/item/powered_sliding_rail.json deleted file mode 100644 index 50bbf0c107..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/powered_sliding_rail.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/powered_sliding_rail" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/propel_piston.json b/src/generated/resources/assets/anvilcraft/models/item/propel_piston.json deleted file mode 100644 index 621d7ae844..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/propel_piston.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/propel_piston" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/pulse_generator.json b/src/generated/resources/assets/anvilcraft/models/item/pulse_generator.json deleted file mode 100644 index 7421cf2fdf..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/pulse_generator.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/pulse_generator" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/purple_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/purple_cement_bucket.json deleted file mode 100644 index 89cdd28ae5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/purple_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:purple_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/quartz_sand.json b/src/generated/resources/assets/anvilcraft/models/item/quartz_sand.json deleted file mode 100644 index d77bc598b5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/quartz_sand.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/quartz_sand" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/raw_lead_block.json b/src/generated/resources/assets/anvilcraft/models/item/raw_lead_block.json deleted file mode 100644 index 718a62a827..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/raw_lead_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/raw_lead_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/raw_silver_block.json b/src/generated/resources/assets/anvilcraft/models/item/raw_silver_block.json deleted file mode 100644 index d0347a19a5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/raw_silver_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/raw_silver_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/raw_tin_block.json b/src/generated/resources/assets/anvilcraft/models/item/raw_tin_block.json deleted file mode 100644 index 78368640a3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/raw_tin_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/raw_tin_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/raw_titanium_block.json b/src/generated/resources/assets/anvilcraft/models/item/raw_titanium_block.json deleted file mode 100644 index b64ca6c515..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/raw_titanium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/raw_titanium_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/raw_tungsten_block.json b/src/generated/resources/assets/anvilcraft/models/item/raw_tungsten_block.json deleted file mode 100644 index bd00562c26..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/raw_tungsten_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/raw_tungsten_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/raw_uranium_block.json b/src/generated/resources/assets/anvilcraft/models/item/raw_uranium_block.json deleted file mode 100644 index 3ee581f767..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/raw_uranium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/raw_uranium_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/raw_zinc_block.json b/src/generated/resources/assets/anvilcraft/models/item/raw_zinc_block.json deleted file mode 100644 index b2e7851251..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/raw_zinc_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/raw_zinc_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/red_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/red_cement_bucket.json deleted file mode 100644 index 61369e79f1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/red_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:red_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/redhot_netherite_block.json b/src/generated/resources/assets/anvilcraft/models/item/redhot_netherite_block.json deleted file mode 100644 index 1ff84e9765..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/redhot_netherite_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/redhot_netherite_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/redhot_tungsten_block.json b/src/generated/resources/assets/anvilcraft/models/item/redhot_tungsten_block.json deleted file mode 100644 index a48af8774f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/redhot_tungsten_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/redhot_tungsten_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black.json deleted file mode 100644 index 1b112f6bc0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_black" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_slab.json deleted file mode 100644 index ce17f742b9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_black_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_stair.json deleted file mode 100644 index 8d44a215b2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_black_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_wall.json deleted file mode 100644 index bfcef089d1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_black_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_black_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue.json deleted file mode 100644 index a1ec28618d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_blue" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_slab.json deleted file mode 100644 index 255486eae8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_blue_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_stair.json deleted file mode 100644 index be5667adb9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_blue_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_wall.json deleted file mode 100644 index 174ffe03e8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_blue_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown.json deleted file mode 100644 index df75382af7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_brown" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_slab.json deleted file mode 100644 index 33c5d1496d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_brown_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_stair.json deleted file mode 100644 index 74dba9dc2d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_brown_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_wall.json deleted file mode 100644 index 6185e341ee..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_brown_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_brown_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan.json deleted file mode 100644 index 6d2f156312..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_cyan" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_slab.json deleted file mode 100644 index 66f20c7ba7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_cyan_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_stair.json deleted file mode 100644 index 208742f6e9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_cyan_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_wall.json deleted file mode 100644 index 60b25181d7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_cyan_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_cyan_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray.json deleted file mode 100644 index e3a30b6f19..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_gray" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_slab.json deleted file mode 100644 index 5fed3390d7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_gray_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_stair.json deleted file mode 100644 index bb86fe6264..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_gray_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_wall.json deleted file mode 100644 index af08e5f2f7..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_gray_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green.json deleted file mode 100644 index e28747b929..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_green" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_slab.json deleted file mode 100644 index afc152c1f8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_green_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_stair.json deleted file mode 100644 index 80c6123ba2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_green_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_wall.json deleted file mode 100644 index 4da387dea5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_green_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_green_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue.json deleted file mode 100644 index dba684c5a6..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_light_blue" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_slab.json deleted file mode 100644 index 3033870d71..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_light_blue_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_stair.json deleted file mode 100644 index f1f7702f3a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_light_blue_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_wall.json deleted file mode 100644 index c1225756d9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_blue_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_light_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray.json deleted file mode 100644 index 1d312729ff..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_light_gray" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_slab.json deleted file mode 100644 index 29bcb17c8e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_light_gray_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_stair.json deleted file mode 100644 index 59f6a22299..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_light_gray_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_wall.json deleted file mode 100644 index 3116f6c0b6..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_light_gray_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_light_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime.json deleted file mode 100644 index 93e50b07ef..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_lime" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_slab.json deleted file mode 100644 index b87bd11061..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_lime_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_stair.json deleted file mode 100644 index f88e216c03..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_lime_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_wall.json deleted file mode 100644 index 66cff21346..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_lime_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_lime_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta.json deleted file mode 100644 index 61e491868f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_magenta" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_slab.json deleted file mode 100644 index 0d0d3e56f8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_magenta_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_stair.json deleted file mode 100644 index 67bced7aa1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_magenta_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_wall.json deleted file mode 100644 index 335cceb31f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_magenta_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_magenta_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange.json deleted file mode 100644 index 01aa9217f8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_orange" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_slab.json deleted file mode 100644 index a4f49d9222..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_orange_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_stair.json deleted file mode 100644 index 81a7c2c175..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_orange_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_wall.json deleted file mode 100644 index fd749bdd80..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_orange_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_orange_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink.json deleted file mode 100644 index beb4d5c77b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_pink" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_slab.json deleted file mode 100644 index 63b81528ab..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_pink_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_stair.json deleted file mode 100644 index 3e59f068d4..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_pink_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_wall.json deleted file mode 100644 index 7cf898beb9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_pink_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_pink_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple.json deleted file mode 100644 index 5fc18c527c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_purple" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_slab.json deleted file mode 100644 index 58a79823e0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_purple_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_stair.json deleted file mode 100644 index ab1c7241cf..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_purple_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_wall.json deleted file mode 100644 index af15186b77..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_purple_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_purple_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red.json deleted file mode 100644 index 34b5f80767..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_red" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_slab.json deleted file mode 100644 index 3ca62adc3d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_red_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_stair.json deleted file mode 100644 index a86b050950..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_red_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_wall.json deleted file mode 100644 index 171fced9b2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_red_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_red_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white.json deleted file mode 100644 index a45f9b0ceb..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_white" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_slab.json deleted file mode 100644 index cb90941130..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_white_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_stair.json deleted file mode 100644 index 50da49fc2a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_white_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_wall.json deleted file mode 100644 index d8f766a4d2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_white_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_white_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow.json deleted file mode 100644 index 82a36adb6e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_yellow" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_slab.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_slab.json deleted file mode 100644 index 1a3558862e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_yellow_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_stair.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_stair.json deleted file mode 100644 index 201fa17793..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_stair.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/reinforced_concrete_yellow_stair" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_wall.json b/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_wall.json deleted file mode 100644 index 496fc7ff3b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/reinforced_concrete_yellow_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "anvilcraft:block/reinforced_concrete_yellow_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/resentful_amber_block.json b/src/generated/resources/assets/anvilcraft/models/item/resentful_amber_block.json deleted file mode 100644 index bc7bb0a262..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/resentful_amber_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/resentful_amber_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/resin_block.json b/src/generated/resources/assets/anvilcraft/models/item/resin_block.json deleted file mode 100644 index 28045cf4b5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/resin_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/resin_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/rotten_flesh_block.json b/src/generated/resources/assets/anvilcraft/models/item/rotten_flesh_block.json deleted file mode 100644 index 8322d8eeea..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/rotten_flesh_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/rotten_flesh_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/royal_anvil.json b/src/generated/resources/assets/anvilcraft/models/item/royal_anvil.json deleted file mode 100644 index 8429b96a48..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/royal_anvil.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/royal_anvil" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/royal_grindstone.json b/src/generated/resources/assets/anvilcraft/models/item/royal_grindstone.json deleted file mode 100644 index e39282e7a2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/royal_grindstone.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/royal_grindstone" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/royal_smithing_table.json b/src/generated/resources/assets/anvilcraft/models/item/royal_smithing_table.json deleted file mode 100644 index 685a535887..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/royal_smithing_table.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/royal_smithing_table" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/royal_steel_block.json b/src/generated/resources/assets/anvilcraft/models/item/royal_steel_block.json deleted file mode 100644 index 24fe177d29..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/royal_steel_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/royal_steel_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ruby_block.json b/src/generated/resources/assets/anvilcraft/models/item/ruby_block.json deleted file mode 100644 index 2d75124d37..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ruby_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ruby_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ruby_laser.json b/src/generated/resources/assets/anvilcraft/models/item/ruby_laser.json deleted file mode 100644 index d7ef5ec13e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ruby_laser.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ruby_laser" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/ruby_prism.json b/src/generated/resources/assets/anvilcraft/models/item/ruby_prism.json deleted file mode 100644 index d42a71d184..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/ruby_prism.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/ruby_prism" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/sapphire_block.json b/src/generated/resources/assets/anvilcraft/models/item/sapphire_block.json deleted file mode 100644 index 5ba298861c..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/sapphire_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/sapphire_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/shulker_container.json b/src/generated/resources/assets/anvilcraft/models/item/shulker_container.json deleted file mode 100644 index b30c85c88b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/shulker_container.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/shulker_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/silver_block.json b/src/generated/resources/assets/anvilcraft/models/item/silver_block.json deleted file mode 100644 index 5911266435..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/silver_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/silver_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/silver_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/silver_pressure_plate.json deleted file mode 100644 index 1afe6ee40e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/silver_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/silver_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/singularity_crystal.json b/src/generated/resources/assets/anvilcraft/models/item/singularity_crystal.json deleted file mode 100644 index 47f737a51e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/singularity_crystal.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/singularity_crystal" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/sliding_rail.json b/src/generated/resources/assets/anvilcraft/models/item/sliding_rail.json deleted file mode 100644 index 13afb4fc30..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/sliding_rail.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/sliding_rail" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/sliding_rail_stop.json b/src/generated/resources/assets/anvilcraft/models/item/sliding_rail_stop.json deleted file mode 100644 index 09d9c20f89..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/sliding_rail_stop.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/sliding_rail_stop" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/smooth_royal_steel_block.json b/src/generated/resources/assets/anvilcraft/models/item/smooth_royal_steel_block.json deleted file mode 100644 index ef98409388..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/smooth_royal_steel_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/smooth_royal_steel_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/space_overcompressor.json b/src/generated/resources/assets/anvilcraft/models/item/space_overcompressor.json deleted file mode 100644 index fde2ce8e96..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/space_overcompressor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/space_overcompressor" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/spectral_anvil.json b/src/generated/resources/assets/anvilcraft/models/item/spectral_anvil.json deleted file mode 100644 index 00e3eba589..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/spectral_anvil.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/spectral_anvil" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/spectral_weapon_launcher_off.json b/src/generated/resources/assets/anvilcraft/models/item/spectral_weapon_launcher_off.json new file mode 100644 index 0000000000..b0cd1a7d90 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/item/spectral_weapon_launcher_off.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "anvilcraft:item/spectral_weapon_launcher_off" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/stamping_platform.json b/src/generated/resources/assets/anvilcraft/models/item/stamping_platform.json deleted file mode 100644 index 9bf2cc7495..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/stamping_platform.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/stamping_platform" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/structure_tool.json b/src/generated/resources/assets/anvilcraft/models/item/structure_tool.json deleted file mode 100644 index 5cfa9dd85f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/structure_tool.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "minecraft:item/paper" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/sturdy_deepslate.json b/src/generated/resources/assets/anvilcraft/models/item/sturdy_deepslate.json deleted file mode 100644 index cc47b19fcf..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/sturdy_deepslate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/sturdy_deepslate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/sugar_block.json b/src/generated/resources/assets/anvilcraft/models/item/sugar_block.json deleted file mode 100644 index 8c9d111785..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/sugar_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/sugar_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/supercritical_nesting_shulker_box.json b/src/generated/resources/assets/anvilcraft/models/item/supercritical_nesting_shulker_box.json deleted file mode 100644 index 258b2e526b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/supercritical_nesting_shulker_box.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/supercritical_nesting_shulker_box" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/tempering_glass.json b/src/generated/resources/assets/anvilcraft/models/item/tempering_glass.json deleted file mode 100644 index b5311be9dc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/tempering_glass.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/tempering_glass" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/tesla_tower.json b/src/generated/resources/assets/anvilcraft/models/item/tesla_tower.json deleted file mode 100644 index 70eb75ad80..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/tesla_tower.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/tesla_tower_overall" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/tin_block.json b/src/generated/resources/assets/anvilcraft/models/item/tin_block.json deleted file mode 100644 index 494eced225..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/tin_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/tin_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/tin_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/tin_pressure_plate.json deleted file mode 100644 index 98d57fc038..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/tin_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/tin_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/titanium_block.json b/src/generated/resources/assets/anvilcraft/models/item/titanium_block.json deleted file mode 100644 index 403f969352..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/titanium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/titanium_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/titanium_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/titanium_pressure_plate.json deleted file mode 100644 index 49515323f5..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/titanium_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/titanium_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/topaz_block.json b/src/generated/resources/assets/anvilcraft/models/item/topaz_block.json deleted file mode 100644 index 0104e7e8cc..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/topaz_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/topaz_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/transcendence_anvil.json b/src/generated/resources/assets/anvilcraft/models/item/transcendence_anvil.json deleted file mode 100644 index 164977e811..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/transcendence_anvil.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/transcendence_anvil" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/transcendium_block.json b/src/generated/resources/assets/anvilcraft/models/item/transcendium_block.json deleted file mode 100644 index 974f3a35c0..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/transcendium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/transcendium_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/transparent_crafting_table.json b/src/generated/resources/assets/anvilcraft/models/item/transparent_crafting_table.json deleted file mode 100644 index 5afa58eeee..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/transparent_crafting_table.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/transparent_crafting_table" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/tungsten_block.json b/src/generated/resources/assets/anvilcraft/models/item/tungsten_block.json deleted file mode 100644 index 8a58bac3d8..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/tungsten_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/tungsten_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/tungsten_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/tungsten_pressure_plate.json deleted file mode 100644 index 49ba89243e..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/tungsten_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/tungsten_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/uranium_block.json b/src/generated/resources/assets/anvilcraft/models/item/uranium_block.json deleted file mode 100644 index 1e2a18e95f..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/uranium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/uranium_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/uranium_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/uranium_pressure_plate.json deleted file mode 100644 index 77d1aed082..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/uranium_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/uranium_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/void_energy_collector.json b/src/generated/resources/assets/anvilcraft/models/item/void_energy_collector.json deleted file mode 100644 index d80434b0a4..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/void_energy_collector.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/void_energy_collector" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/void_matter_block.json b/src/generated/resources/assets/anvilcraft/models/item/void_matter_block.json deleted file mode 100644 index 2ceffc3bc9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/void_matter_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/void_matter_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/void_stone.json b/src/generated/resources/assets/anvilcraft/models/item/void_stone.json deleted file mode 100644 index a6028d4ce3..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/void_stone.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/void_stone" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/weathered_copper_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/weathered_copper_pressure_plate.json deleted file mode 100644 index e276f3960a..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/weathered_copper_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/weathered_copper_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/white_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/white_cement_bucket.json deleted file mode 100644 index b816e5534b..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/white_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:white_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_block.json b/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_block.json deleted file mode 100644 index 2f4d581e95..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/white_chocolate_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_slab.json b/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_slab.json deleted file mode 100644 index bc3b8cbaf2..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/white_chocolate_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_stairs.json b/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_stairs.json deleted file mode 100644 index e3231f1206..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/white_chocolate_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/white_chocolate_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/white_hole.json b/src/generated/resources/assets/anvilcraft/models/item/white_hole.json deleted file mode 100644 index ea8dbe166d..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/white_hole.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/white_hole" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/yellow_cement_bucket.json b/src/generated/resources/assets/anvilcraft/models/item/yellow_cement_bucket.json deleted file mode 100644 index b1b8e45bf9..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/yellow_cement_bucket.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket_drip", - "fluid": "anvilcraft:yellow_cement", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/zinc_block.json b/src/generated/resources/assets/anvilcraft/models/item/zinc_block.json deleted file mode 100644 index b709927fa1..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/zinc_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/zinc_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/models/item/zinc_pressure_plate.json b/src/generated/resources/assets/anvilcraft/models/item/zinc_pressure_plate.json deleted file mode 100644 index b41ba31d44..0000000000 --- a/src/generated/resources/assets/anvilcraft/models/item/zinc_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "anvilcraft:block/zinc_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft/particles/ionocraft_backpack_exhaust.json b/src/generated/resources/assets/anvilcraft/particles/ionocraft_backpack_exhaust.json new file mode 100644 index 0000000000..271261099b --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/particles/ionocraft_backpack_exhaust.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "minecraft:generic_7", + "minecraft:generic_6", + "minecraft:generic_5", + "minecraft:generic_4", + "minecraft:generic_3", + "minecraft:generic_2", + "minecraft:generic_1", + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/4281.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/4281.json index ba2ef22d64..79e2eaa646 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/4281.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/4281.json @@ -19,7 +19,6 @@ "translate": "advancements.anvilcraft.four281.description" }, "icon": { - "count": 1, "id": "minecraft:blue_ice" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/all_in_one.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/all_in_one.json index fc39b5cac4..9557fa7a11 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/all_in_one.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/all_in_one.json @@ -52,7 +52,6 @@ "translate": "advancements.anvilcraft.all_in_one.description" }, "icon": { - "count": 1, "id": "anvilcraft:anvil_hammer" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/amethyst_pickaxe.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/amethyst_pickaxe.json index f1852802fb..c2f0781a96 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/amethyst_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/amethyst_pickaxe.json @@ -13,7 +13,6 @@ "translate": "advancements.anvilcraft.amethyst_pickaxe.description" }, "icon": { - "count": 1, "id": "anvilcraft:amethyst_pickaxe" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/anvil_accelerator.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/anvil_accelerator.json index 14663ce1a7..ff02905eea 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/anvil_accelerator.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/anvil_accelerator.json @@ -27,7 +27,6 @@ "translate": "advancements.anvilcraft.anvil_accelerator.description" }, "icon": { - "count": 1, "id": "anvilcraft:acceleration_ring" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/anvilon.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/anvilon.json index 59ce1197c3..acd755e371 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/anvilon.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/anvilon.json @@ -44,7 +44,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "id": "anvilcraft:confined_space_anvilon" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/block_devourer.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/block_devourer.json index 99d5e1be9d..3fc45356a9 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/block_devourer.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/block_devourer.json @@ -16,7 +16,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "id": "anvilcraft:block_devourer" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/block_placer.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/block_placer.json index d66ec796c5..26d1fba52f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/block_placer.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/block_placer.json @@ -15,7 +15,6 @@ "translate": "advancements.anvilcraft.placer.description" }, "icon": { - "count": 1, "id": "anvilcraft:block_placer" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/crab_claw.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/crab_claw.json index 2c15c03475..fa89d9f040 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/crab_claw.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/crab_claw.json @@ -17,7 +17,6 @@ "translate": "advancements.anvilcraft.crab_claw.description" }, "icon": { - "count": 1, "id": "anvilcraft:crab_claw" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/dang.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/dang.json index 286ca590bb..16a815758a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/dang.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/dang.json @@ -11,7 +11,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "minecraft:anvil" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/durable_goods.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/durable_goods.json index 54b31412c1..01971828cf 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/durable_goods.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/durable_goods.json @@ -37,7 +37,6 @@ "translate": "advancements.anvilcraft.durable_goods.description" }, "icon": { - "count": 1, "id": "anvilcraft:royal_steel_pickaxe" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/electric_filed_rhythm.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/electric_filed_rhythm.json index 58929740fc..319b70dbe4 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/electric_filed_rhythm.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/electric_filed_rhythm.json @@ -10,7 +10,6 @@ "translate": "advancements.anvilcraft.electric_filed_rhythm.description" }, "icon": { - "count": 1, "id": "anvilcraft:anvil_hammer" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/for_aeons.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/for_aeons.json index e7b22cabc7..037dad395b 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/for_aeons.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/for_aeons.json @@ -67,7 +67,6 @@ "translate": "advancements.anvilcraft.for_aeons.description" }, "icon": { - "count": 1, "id": "anvilcraft:oil_bucket" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/forged_over_eons.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/forged_over_eons.json index 9c42eea6a8..c72724fdeb 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/forged_over_eons.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/forged_over_eons.json @@ -38,7 +38,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "anvilcraft:ember_metal_ingot" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/fossick.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/fossick.json index 6178ae66b2..e761420f45 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/fossick.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/fossick.json @@ -13,7 +13,6 @@ "translate": "advancements.anvilcraft.fossick.description" }, "icon": { - "count": 1, "id": "minecraft:gold_nugget" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/frost_metal.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/frost_metal.json index 86855718f6..83c8d65afa 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/frost_metal.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/frost_metal.json @@ -37,7 +37,6 @@ "translate": "advancements.anvilcraft.frost_metal.description" }, "icon": { - "count": 1, "id": "anvilcraft:frost_metal_ingot" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/gem_transform.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/gem_transform.json index e49130e61e..dc9e9ff14f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/gem_transform.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/gem_transform.json @@ -31,7 +31,6 @@ "translate": "advancements.anvilcraft.gem_transform.description" }, "icon": { - "count": 1, "id": "anvilcraft:ruby" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/geode.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/geode.json index c3a5102069..db44a1267c 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/geode.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/geode.json @@ -7,7 +7,7 @@ "items": "anvilcraft:geode" } }, - "trigger": "anvilcraft:use_item" + "trigger": "minecraft:consume_item" } }, "display": { @@ -15,7 +15,6 @@ "translate": "advancements.anvilcraft.geode.description" }, "icon": { - "count": 1, "id": "anvilcraft:geode" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/giant_age.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/giant_age.json index 88737607c1..f5aeb50c27 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/giant_age.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/giant_age.json @@ -17,7 +17,6 @@ "translate": "advancements.anvilcraft.giant_age.description" }, "icon": { - "count": 1, "id": "anvilcraft:giant_anvil" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/hammer.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/hammer.json index f7df45ee63..50ec3d209f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/hammer.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/hammer.json @@ -120,7 +120,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "id": "anvilcraft:anvil_hammer" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/hearts_of_iron.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/hearts_of_iron.json index 41992cd5d4..3a0af98ea1 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/hearts_of_iron.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/hearts_of_iron.json @@ -13,7 +13,6 @@ "translate": "advancements.anvilcraft.hearts_of_iron.description" }, "icon": { - "count": 1, "id": "anvilcraft:magnetoelectric_core" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/heat_utilizing.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/heat_utilizing.json index 6f8f67627a..e08d6dcb78 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/heat_utilizing.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/heat_utilizing.json @@ -17,7 +17,6 @@ "translate": "advancements.anvilcraft.heat_utilizing.description" }, "icon": { - "count": 1, "id": "anvilcraft:heat_collector" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/ice_maker.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/ice_maker.json index 5812a3999a..a0e9b9ff70 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/ice_maker.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/ice_maker.json @@ -13,7 +13,6 @@ "translate": "advancements.anvilcraft.ice_maker.description" }, "icon": { - "count": 1, "id": "minecraft:ice" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/industrial_grade_smelting.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/industrial_grade_smelting.json index 2ab20289a4..389c29500f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/industrial_grade_smelting.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/industrial_grade_smelting.json @@ -14,7 +14,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "anvilcraft:heater" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/iron_meter_reversal.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/iron_meter_reversal.json index c38ffbc725..2ad65910b3 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/iron_meter_reversal.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/iron_meter_reversal.json @@ -25,7 +25,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "minecraft:iron_block" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/isotope_decay_battery.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/isotope_decay_battery.json index 4ae6427e3a..4fb003c1e0 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/isotope_decay_battery.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/isotope_decay_battery.json @@ -19,7 +19,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "id": "anvilcraft:uranium_block" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/laser.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/laser.json index acfc66da21..e5ae037853 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/laser.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/laser.json @@ -17,7 +17,6 @@ "translate": "advancements.anvilcraft.laser.description" }, "icon": { - "count": 1, "id": "anvilcraft:ruby_laser" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/lifting_anvil.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/lifting_anvil.json index 56ba71b446..d2b5e6cd64 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/lifting_anvil.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/lifting_anvil.json @@ -13,7 +13,6 @@ "translate": "advancements.anvilcraft.lifting_anvil.description" }, "icon": { - "count": 1, "id": "anvilcraft:magnet_block" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/lighter.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/lighter.json index 42fcdd37d0..03e50157e5 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/lighter.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/lighter.json @@ -10,7 +10,6 @@ "translate": "advancements.anvilcraft.lighter.description" }, "icon": { - "count": 1, "id": "anvilcraft:piezoelectric_crystal" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/networking.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/networking.json index e0db5cad69..363f783b7d 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/networking.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/networking.json @@ -24,7 +24,6 @@ "translate": "advancements.anvilcraft.networking.description" }, "icon": { - "count": 1, "id": "anvilcraft:transmission_pole" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/new_matter.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/new_matter.json index ac72f45ee4..97ec817992 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/new_matter.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/new_matter.json @@ -26,7 +26,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "anvilcraft:multiphase_matter" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/noble_metal.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/noble_metal.json index 451290863d..9bd3204be4 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/noble_metal.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/noble_metal.json @@ -37,7 +37,6 @@ "translate": "advancements.anvilcraft.noble_metal.description" }, "icon": { - "count": 1, "id": "anvilcraft:royal_steel_ingot" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/not_beacon.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/not_beacon.json index a21254d674..0b401696eb 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/not_beacon.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/not_beacon.json @@ -24,7 +24,6 @@ "translate": "advancements.anvilcraft.not_beacon.description" }, "icon": { - "count": 1, "id": "anvilcraft:charge_collector" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/nuclear_power_10a.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/nuclear_power_10a.json index 70169a28bc..bb70c38470 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/nuclear_power_10a.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/nuclear_power_10a.json @@ -16,7 +16,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "id": "anvilcraft:heat_collector" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/ore_point.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/ore_point.json index 7138e2d2e1..44d89bde62 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/ore_point.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/ore_point.json @@ -10,7 +10,6 @@ "translate": "advancements.anvilcraft.ore_point.description" }, "icon": { - "count": 1, "id": "anvilcraft:mineral_fountain" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/overheated.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/overheated.json index 1249a34aea..57813f038e 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/overheated.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/overheated.json @@ -20,7 +20,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "anvilcraft:overheated_ember_metal_block" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/overseer.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/overseer.json index e32fcd58b6..a1b67e7c8c 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/overseer.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/overseer.json @@ -13,7 +13,6 @@ "translate": "advancements.anvilcraft.overseer.description" }, "icon": { - "count": 1, "id": "anvilcraft:overseer" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/real_looting.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/real_looting.json index ca37bdf39d..283b48d37c 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/real_looting.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/real_looting.json @@ -10,7 +10,6 @@ "translate": "advancements.anvilcraft.real_looting.description" }, "icon": { - "count": 1, "id": "minecraft:anvil" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/recycling_diamonds.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/recycling_diamonds.json index d556138406..54ce193c5d 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/recycling_diamonds.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/recycling_diamonds.json @@ -67,7 +67,6 @@ "translate": "advancements.anvilcraft.recycling_diamonds.description" }, "icon": { - "count": 1, "id": "minecraft:diamond" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/redstone_milker.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/redstone_milker.json index 70777d69b8..1cca1737a8 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/redstone_milker.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/redstone_milker.json @@ -10,7 +10,6 @@ "translate": "advancements.anvilcraft.redstone_milker.description" }, "icon": { - "count": 1, "id": "minecraft:dispenser" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/rip_van_winkle.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/rip_van_winkle.json index a002020397..660ee756b0 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/rip_van_winkle.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/rip_van_winkle.json @@ -14,7 +14,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "anvilcraft:corrupted_beacon" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/root.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/root.json index 7d924879e0..053ced1848 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/root.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/root.json @@ -5,12 +5,11 @@ } }, "display": { - "background": "anvilcraft:textures/gui/misc/background/advancement.png", + "background": "anvilcraft:gui/misc/background/advancement", "description": { "translate": "advancements.anvilcraft.root.description" }, "icon": { - "count": 1, "id": "anvilcraft:royal_anvil" }, "show_toast": false, diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/royal_blacksmith.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/royal_blacksmith.json index 68970976d3..ced85ffd7a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/royal_blacksmith.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/royal_blacksmith.json @@ -37,7 +37,6 @@ "translate": "advancements.anvilcraft.royal_blacksmith.description" }, "icon": { - "count": 1, "id": "anvilcraft:royal_anvil" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/self_in_flaming.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/self_in_flaming.json index d0ce46ef2a..fbb40b6b9e 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/self_in_flaming.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/self_in_flaming.json @@ -10,7 +10,6 @@ "translate": "advancements.anvilcraft.self_in_flaming.description" }, "icon": { - "count": 1, "id": "anvilcraft:ember_metal_pickaxe" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/smithing_table.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/smithing_table.json index a498faddb8..5f5b8872c0 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/smithing_table.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/smithing_table.json @@ -13,7 +13,6 @@ "translate": "advancements.anvilcraft.smithing_table.description" }, "icon": { - "count": 1, "id": "anvilcraft:royal_smithing_table" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/stone_crusher.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/stone_crusher.json index d3707c5003..6fdfdf8b8b 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/stone_crusher.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/stone_crusher.json @@ -19,7 +19,6 @@ "translate": "advancements.anvilcraft.stone_crusher.description" }, "icon": { - "count": 1, "id": "minecraft:sand" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/super_heat.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/super_heat.json index 9e3ca5267e..54c071ae82 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/super_heat.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/super_heat.json @@ -16,7 +16,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "anvilcraft:heat_collector" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/super_kill.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/super_kill.json index 7be0f40261..1bbd11275a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/super_kill.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/super_kill.json @@ -14,7 +14,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "id": "anvilcraft:royal_anvil_hammer" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/tai_shang_wang_qing.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/tai_shang_wang_qing.json index dc5881fb43..b960d98951 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/tai_shang_wang_qing.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/tai_shang_wang_qing.json @@ -34,7 +34,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "id": "anvilcraft:frost_metal_sword" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/topaz.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/topaz.json index 0596240f3e..7bb9785227 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/topaz.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/topaz.json @@ -7,7 +7,7 @@ "items": "anvilcraft:topaz" } }, - "trigger": "anvilcraft:use_item" + "trigger": "minecraft:consume_item" } }, "display": { @@ -16,7 +16,6 @@ }, "frame": "goal", "icon": { - "count": 1, "id": "anvilcraft:topaz" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/transcendence.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/transcendence.json index 9c641627e8..912ed254be 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/transcendence.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/transcendence.json @@ -38,7 +38,6 @@ }, "frame": "challenge", "icon": { - "count": 1, "id": "anvilcraft:transcendium_block" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/vanilla_iron_plate.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/vanilla_iron_plate.json index 808bcff3d5..b604dcb3ab 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/vanilla_iron_plate.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/vanilla_iron_plate.json @@ -13,7 +13,6 @@ "translate": "advancements.anvilcraft.vanilla_iron_plate.description" }, "icon": { - "count": 1, "id": "minecraft:heavy_weighted_pressure_plate" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/wither.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/wither.json index 5a0900eda9..f8554a12e4 100644 --- a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/wither.json +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/wither.json @@ -10,7 +10,6 @@ "translate": "advancements.anvilcraft.wither.description" }, "icon": { - "count": 1, "id": "anvilcraft:corrupted_beacon" }, "title": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_crush/burning_heater.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_crush/burning_heater.json new file mode 100644 index 0000000000..c6655e373b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_crush/burning_heater.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_crush/burning_heater" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_crush/burning_heater" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_bars.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_bars.json new file mode 100644 index 0000000000..ae030b26f7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_bars.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_copper_bars" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_copper_bars" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_chain.json new file mode 100644 index 0000000000..52203f1825 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_chain.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_copper_chain" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_copper_chain" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_chest.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_chest.json new file mode 100644 index 0000000000..eeedb5fb74 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_chest.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_copper_chest" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_copper_chest" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_golem_statue.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_golem_statue.json new file mode 100644 index 0000000000..aa0c372cae --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_golem_statue.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_copper_golem_statue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_copper_golem_statue" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_lantern.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_lantern.json new file mode 100644 index 0000000000..82f0a84755 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_copper_lantern.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_copper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_copper_lantern" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_bars.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_bars.json new file mode 100644 index 0000000000..1737a74c27 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_bars.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_exposed_copper_bars" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_exposed_copper_bars" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_chain.json new file mode 100644 index 0000000000..c28370a926 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_chain.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_exposed_copper_chain" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_exposed_copper_chain" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_chest.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_chest.json new file mode 100644 index 0000000000..e4539182a4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_chest.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_exposed_copper_chest" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_exposed_copper_chest" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_golem_statue.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_golem_statue.json new file mode 100644 index 0000000000..c1c188ad6d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_golem_statue.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_exposed_copper_golem_statue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_exposed_copper_golem_statue" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_lantern.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_lantern.json new file mode 100644 index 0000000000..4c02bef45b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_copper_lantern.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_exposed_copper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_exposed_copper_lantern" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_lightning_rod.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_lightning_rod.json new file mode 100644 index 0000000000..c7bf7be884 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_exposed_lightning_rod.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_exposed_lightning_rod" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_exposed_lightning_rod" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_lightning_rod.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_lightning_rod.json new file mode 100644 index 0000000000..a95a2aa9ad --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_lightning_rod.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_lightning_rod" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_lightning_rod" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_bars.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_bars.json new file mode 100644 index 0000000000..6d3420df54 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_bars.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_oxidized_copper_bars" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_oxidized_copper_bars" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_chain.json new file mode 100644 index 0000000000..f17e4bafc9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_chain.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_oxidized_copper_chain" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_oxidized_copper_chain" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_chest.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_chest.json new file mode 100644 index 0000000000..2c5a5e1197 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_chest.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_oxidized_copper_chest" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_oxidized_copper_chest" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_golem_statue.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_golem_statue.json new file mode 100644 index 0000000000..fed7136658 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_golem_statue.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_oxidized_copper_golem_statue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_oxidized_copper_golem_statue" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_lantern.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_lantern.json new file mode 100644 index 0000000000..a927ec9e06 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_copper_lantern.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_oxidized_copper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_oxidized_copper_lantern" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_lightning_rod.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_lightning_rod.json new file mode 100644 index 0000000000..74126dbbc4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_oxidized_lightning_rod.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_oxidized_lightning_rod" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_oxidized_lightning_rod" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_bars.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_bars.json new file mode 100644 index 0000000000..408920b3be --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_bars.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_weathered_copper_bars" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_weathered_copper_bars" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_chain.json new file mode 100644 index 0000000000..0828c76c6f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_chain.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_weathered_copper_chain" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_weathered_copper_chain" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_chest.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_chest.json new file mode 100644 index 0000000000..c08cf82fac --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_chest.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_weathered_copper_chest" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_weathered_copper_chest" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_golem_statue.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_golem_statue.json new file mode 100644 index 0000000000..70b51df86f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_golem_statue.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_weathered_copper_golem_statue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_weathered_copper_golem_statue" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_lantern.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_lantern.json new file mode 100644 index 0000000000..c41d8987f8 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_copper_lantern.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_weathered_copper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_weathered_copper_lantern" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_lightning_rod.json b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_lightning_rod.json new file mode 100644 index 0000000000..ed602f185e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/block_smear/waxed_weathered_lightning_rod.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:block_smear/waxed_weathered_lightning_rod" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:block_smear/waxed_weathered_lightning_rod" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_slab.json new file mode 100644 index 0000000000..8c8129013d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_black_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:black_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:black_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_black_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:black_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_stair.json new file mode 100644 index 0000000000..07a8d25dac --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_black_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:black_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:black_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_black_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:black_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_wall.json new file mode 100644 index 0000000000..d55158d908 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/black_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_black_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:black_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:black_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_black_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:black_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..1bb12f400f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:blue_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:blue_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..f70d18bebe --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:blue_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:blue_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..9da076fca3 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/blue_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:blue_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:blue_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_slab.json new file mode 100644 index 0000000000..c367402f3c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_brown_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:brown_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:brown_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_brown_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:brown_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_stair.json new file mode 100644 index 0000000000..8b41808613 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_brown_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:brown_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:brown_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_brown_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:brown_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_wall.json new file mode 100644 index 0000000000..32b3905f34 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/brown_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_brown_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:brown_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:brown_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_brown_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:brown_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/comparator.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/comparator.json index 75fc45aabc..3a09e097ad 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/comparator.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/comparator.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:comparator" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_hardend_resin": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:comparator" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_hardend_resin" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_slab.json new file mode 100644 index 0000000000..2f011e3b22 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_cyan_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:cyan_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:cyan_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_cyan_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:cyan_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_stair.json new file mode 100644 index 0000000000..48f1164ced --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_cyan_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:cyan_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:cyan_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_cyan_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:cyan_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_wall.json new file mode 100644 index 0000000000..1121c0a503 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/cyan_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_cyan_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:cyan_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:cyan_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_cyan_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:cyan_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/flint_block.json index 2fbf79f610..195c74f82d 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_flint": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_flint" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/flint_from_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/flint_from_flint_block.json index 70ea70e3fa..c42153cf31 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/flint_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/flint_from_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:flint_from_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:flint_from_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..97ea28043d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:gray_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:gray_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..81e06abbdf --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:gray_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:gray_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..790f90c811 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gray_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:gray_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:gray_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_slab.json new file mode 100644 index 0000000000..9211d0e339 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_green_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:green_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:green_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_green_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:green_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_stair.json new file mode 100644 index 0000000000..d7691e6d39 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_green_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:green_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:green_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_green_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:green_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_wall.json new file mode 100644 index 0000000000..03a7e12ab0 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/green_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_green_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:green_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:green_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_green_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:green_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gunpowder_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gunpowder_block.json index d1280b4b34..9a3d9e4eec 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gunpowder_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gunpowder_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:gunpowder_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_gunpowder": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:gunpowder_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_gunpowder" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gunpowder_from_gunpowder_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gunpowder_from_gunpowder_block.json index 0cde7a9236..5623f30032 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gunpowder_from_gunpowder_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/gunpowder_from_gunpowder_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:gunpowder_from_gunpowder_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_gunpowder_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:gunpowder_from_gunpowder_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_gunpowder_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/heavy_iron_block.json index 92976d4213..8880068487 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_storage_blocks/iron": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_storage_blocks/iron" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/iron_block_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/iron_block_from_heavy_iron_block.json index f6e1114a0a..0b7c3d5a89 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/iron_block_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/iron_block_from_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:iron_block_from_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:iron_block_from_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..33aefc75d3 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:light_blue_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:light_blue_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..ee228c14fc --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:light_blue_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:light_blue_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..f2876ceb24 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_blue_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:light_blue_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:light_blue_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..18111f83c1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:light_gray_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:light_gray_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..864adb8e1c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:light_gray_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:light_gray_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..6f0dc90f41 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/light_gray_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:light_gray_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:light_gray_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_slab.json new file mode 100644 index 0000000000..3fd745e5b5 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_lime_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:lime_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:lime_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_lime_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:lime_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_stair.json new file mode 100644 index 0000000000..64dc5806dc --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_lime_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:lime_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:lime_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_lime_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:lime_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_wall.json new file mode 100644 index 0000000000..84643f25ca --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/lime_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_lime_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:lime_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:lime_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_lime_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:lime_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_slab.json new file mode 100644 index 0000000000..601da80377 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_magenta_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:magenta_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magenta_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_magenta_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:magenta_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_stair.json new file mode 100644 index 0000000000..982343d646 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_magenta_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:magenta_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magenta_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_magenta_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:magenta_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_wall.json new file mode 100644 index 0000000000..bd8f9afff9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/magenta_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_magenta_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:magenta_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magenta_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_magenta_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:magenta_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_slab.json new file mode 100644 index 0000000000..4f6d705304 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_orange_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:orange_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:orange_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_orange_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:orange_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_stair.json new file mode 100644 index 0000000000..2f4f2900ec --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_orange_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:orange_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:orange_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_orange_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:orange_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_wall.json new file mode 100644 index 0000000000..10fb371a62 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/orange_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_orange_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:orange_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:orange_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_orange_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:orange_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_slab.json new file mode 100644 index 0000000000..64b1a84d4c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_pink_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:pink_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:pink_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_pink_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:pink_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_stair.json new file mode 100644 index 0000000000..e1f3ca02ab --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_pink_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:pink_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:pink_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_pink_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:pink_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_wall.json new file mode 100644 index 0000000000..1f50804436 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/pink_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_pink_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:pink_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:pink_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_pink_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:pink_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_slab.json new file mode 100644 index 0000000000..72647f5b3d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_purple_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:purple_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:purple_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_purple_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:purple_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_stair.json new file mode 100644 index 0000000000..cc0fd3dbc3 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_purple_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:purple_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:purple_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_purple_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:purple_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_wall.json new file mode 100644 index 0000000000..916c4a6d5d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/purple_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_purple_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:purple_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:purple_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_purple_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:purple_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_slab.json new file mode 100644 index 0000000000..0ef9ba543c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_red_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:red_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:red_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_red_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:red_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_stair.json new file mode 100644 index 0000000000..d26b679f7a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_red_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:red_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:red_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_red_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:red_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_wall.json new file mode 100644 index 0000000000..395ab1a0cc --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/red_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_red_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:red_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:red_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_red_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:red_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_slab.json deleted file mode 100644 index 6816ed75be..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_black": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_black" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_black_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_black" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_black_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_stair.json deleted file mode 100644 index ba87e93757..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_black": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_black" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_black_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_black" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_black_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_wall.json deleted file mode 100644 index d4b66aca02..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_black_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_black": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_black" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_black_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_black" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_black_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_slab.json deleted file mode 100644 index f040515677..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_blue": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_blue_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_blue" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_blue_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_stair.json deleted file mode 100644 index 208e429a9d..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_blue": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_blue_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_blue" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_blue_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_wall.json deleted file mode 100644 index 33c87e3215..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_blue_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_blue": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_blue_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_blue" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_blue_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_slab.json deleted file mode 100644 index e0a8d691bb..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_brown": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_brown" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_brown_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_brown" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_brown_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_stair.json deleted file mode 100644 index c1c181a278..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_brown": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_brown" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_brown_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_brown" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_brown_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_wall.json deleted file mode 100644 index 69e0a53a16..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_brown_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_brown": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_brown" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_brown_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_brown" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_brown_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_slab.json deleted file mode 100644 index 436c5fb6ae..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_cyan": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_cyan" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_cyan_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_cyan" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_cyan_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_stair.json deleted file mode 100644 index ce73e95bf5..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_cyan": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_cyan" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_cyan_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_cyan" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_cyan_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_wall.json deleted file mode 100644 index 0ab76e2a8b..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_cyan_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_cyan": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_cyan" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_cyan_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_cyan" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_cyan_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_slab.json deleted file mode 100644 index 17174080f4..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_gray": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_gray_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_gray" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_gray_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_stair.json deleted file mode 100644 index 432de4297c..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_gray": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_gray_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_gray" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_gray_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_wall.json deleted file mode 100644 index e1de1dfac1..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_gray_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_gray": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_gray_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_gray" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_gray_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_slab.json deleted file mode 100644 index 2b34ff6868..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_green": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_green" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_green_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_green" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_green_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_stair.json deleted file mode 100644 index cfe4488a7d..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_green": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_green" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_green_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_green" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_green_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_wall.json deleted file mode 100644 index 75ef3e8229..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_green_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_green": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_green" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_green_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_green" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_green_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_slab.json deleted file mode 100644 index b7c18de0fa..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_light_blue": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_light_blue_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_light_blue" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_light_blue_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_stair.json deleted file mode 100644 index 02c17b9c1c..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_light_blue": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_light_blue_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_light_blue" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_light_blue_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_wall.json deleted file mode 100644 index 82777892f4..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_blue_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_light_blue": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_light_blue_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_light_blue" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_light_blue_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_slab.json deleted file mode 100644 index 211baab8eb..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_light_gray": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_light_gray_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_light_gray" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_light_gray_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_stair.json deleted file mode 100644 index 4235374d83..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_light_gray": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_light_gray_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_light_gray" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_light_gray_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_wall.json deleted file mode 100644 index cdc22790ce..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_light_gray_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_light_gray": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_light_gray_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_light_gray" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_light_gray_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_slab.json deleted file mode 100644 index 6c3f76ed94..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_lime": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_lime" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_lime_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_lime" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_lime_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_stair.json deleted file mode 100644 index a625eb49ba..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_lime": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_lime" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_lime_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_lime" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_lime_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_wall.json deleted file mode 100644 index 25442584e4..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_lime_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_lime": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_lime" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_lime_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_lime" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_lime_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_slab.json deleted file mode 100644 index 29360d042e..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_magenta": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_magenta" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_magenta_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_magenta" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_magenta_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_stair.json deleted file mode 100644 index f189a1c54d..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_magenta": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_magenta" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_magenta_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_magenta" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_magenta_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_wall.json deleted file mode 100644 index e2d69a1f64..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_magenta_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_magenta": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_magenta" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_magenta_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_magenta" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_magenta_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_slab.json deleted file mode 100644 index 70482106d5..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_orange": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_orange" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_orange_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_orange" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_orange_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_stair.json deleted file mode 100644 index 0ad89db70e..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_orange": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_orange" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_orange_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_orange" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_orange_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_wall.json deleted file mode 100644 index 8cae966803..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_orange_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_orange": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_orange" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_orange_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_orange" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_orange_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_slab.json deleted file mode 100644 index 681059c85f..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_pink": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_pink" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_pink_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_pink" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_pink_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_stair.json deleted file mode 100644 index 1c32ba15ea..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_pink": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_pink" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_pink_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_pink" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_pink_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_wall.json deleted file mode 100644 index ce23926b40..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_pink_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_pink": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_pink" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_pink_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_pink" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_pink_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_slab.json deleted file mode 100644 index 9ac2286e39..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_purple": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_purple" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_purple_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_purple" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_purple_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_stair.json deleted file mode 100644 index 4e4ec16c23..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_purple": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_purple" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_purple_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_purple" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_purple_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_wall.json deleted file mode 100644 index 2436e7f529..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_purple_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_purple": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_purple" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_purple_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_purple" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_purple_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_slab.json deleted file mode 100644 index 02be919b32..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_red": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_red" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_red_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_red" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_red_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_stair.json deleted file mode 100644 index 922ac21f49..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_red": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_red" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_red_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_red" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_red_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_wall.json deleted file mode 100644 index 39f04f5a34..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_red_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_red": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_red" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_red_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_red" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_red_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_slab.json deleted file mode 100644 index 23ee968844..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_white": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_white" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_white_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_white" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_white_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_stair.json deleted file mode 100644 index 90d700d903..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_white": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_white" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_white_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_white" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_white_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_wall.json deleted file mode 100644 index 58e92cf463..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_white_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_white": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_white" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_white_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_white" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_white_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_slab.json deleted file mode 100644 index b15cd6369b..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_yellow": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_yellow" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_yellow_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_yellow" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_yellow_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_stair.json deleted file mode 100644 index 89bfb15a32..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_yellow": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_yellow" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_yellow_stair" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_yellow" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_yellow_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_wall.json deleted file mode 100644 index 1aa59ef7fd..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/reinforced_concrete_yellow_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_reinforced_concrete_yellow": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_yellow" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:reinforced_concrete_yellow_wall" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_reinforced_concrete_yellow" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:reinforced_concrete_yellow_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/repeater.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/repeater.json index cf0dab978d..d5fe34ad8a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/repeater.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/repeater.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:repeater" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_hardend_resin": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:repeater" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_hardend_resin" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/rotten_flesh_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/rotten_flesh_block.json index 89d1238c58..d83999dfc2 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/rotten_flesh_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/rotten_flesh_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:rotten_flesh_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_rotten_flesh": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:rotten_flesh_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_rotten_flesh" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/rotten_flesh_from_rotten_flesh_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/rotten_flesh_from_rotten_flesh_block.json index a5b378843f..72aa765e38 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/rotten_flesh_from_rotten_flesh_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/rotten_flesh_from_rotten_flesh_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:rotten_flesh_from_rotten_flesh_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_rotten_flesh_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:rotten_flesh_from_rotten_flesh_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_rotten_flesh_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/royal_steel_block.json index 0b2a4e6a0c..aa6d9d4adc 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_block.json index 0755987772..dc97348f13 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:shaped/cut_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:shaped/cut_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_pillar.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_pillar.json index cc09d166f7..8931464401 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_pillar.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_pillar.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:shaped/cut_flint_pillar" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:shaped/cut_flint_pillar" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_slab.json index 8333a8c29a..974fb75a3f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_slab.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_slab.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:shaped/cut_flint_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:shaped/cut_flint_slab" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_stairs.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_stairs.json index 43ad8ca85c..b7edbb7398 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_stairs.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/cut_flint_stairs.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:shaped/cut_flint_stairs" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:shaped/cut_flint_stairs" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/polished_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/polished_flint_block.json index dfa50c4b29..099fa39ccf 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/shaped/polished_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:shaped/polished_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:shaped/polished_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_slab.json new file mode 100644 index 0000000000..6b30e81ae4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_black_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:black_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/black_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_black_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/black_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_stair.json new file mode 100644 index 0000000000..915c5b032a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_black_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:black_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/black_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_black_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/black_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_wall.json new file mode 100644 index 0000000000..ceb6fb8191 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/black_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_black_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:black_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/black_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_black_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/black_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..7eff6f36fa --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/blue_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/blue_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..2c1944e3e9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/blue_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/blue_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..5a51f3a88e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/blue_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/blue_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/blue_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_slab.json new file mode 100644 index 0000000000..aeb4d39e73 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_brown_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:brown_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/brown_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_brown_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/brown_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_stair.json new file mode 100644 index 0000000000..edfa949989 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_brown_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:brown_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/brown_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_brown_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/brown_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_wall.json new file mode 100644 index 0000000000..90f36422b8 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/brown_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_brown_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:brown_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/brown_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_brown_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/brown_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_block.json index 2df0971e8e..ebe0789399 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_ember_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_ember_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block.json index 35832b4ca3..6ea07ec835 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_pillar_from_ember_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_pillar_from_ember_metal_block.json index c822b3083b..d5249af8a7 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_pillar_from_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_pillar_from_ember_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_ember_metal_pillar_from_ember_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_ember_metal_pillar_from_ember_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block.json index c7b181e1ed..6f1ed5c508 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_slab_from_ember_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_slab_from_ember_metal_block.json index cb763e0995..60778030e0 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_slab_from_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_slab_from_ember_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_ember_metal_slab_from_ember_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_ember_metal_slab_from_ember_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block.json index 084bfc1865..48e55569ab 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_stairs_from_ember_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_stairs_from_ember_metal_block.json index 737122336c..398e0443fd 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_stairs_from_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_ember_metal_stairs_from_ember_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_ember_metal_stairs_from_ember_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_ember_metal_stairs_from_ember_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_block_from_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_block_from_flint_block.json index d04043e248..0dce7b69ae 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_block_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_block_from_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_block_from_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_block_from_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_block_from_polished_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_block_from_polished_flint_block.json index 1ac7b8f993..a7653536ff 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_block_from_polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_block_from_polished_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_block_from_polished_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_block_from_polished_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_cut_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_cut_flint_block.json index 26dd73c3e7..a4473c82e4 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_cut_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_cut_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_pillar_from_cut_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_pillar_from_cut_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_flint_block.json index 6029ea1356..23259cb507 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_pillar_from_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_pillar_from_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_polished_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_polished_flint_block.json index ac7f6e6acf..f2e25ba117 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_pillar_from_polished_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_pillar_from_polished_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_pillar_from_polished_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_cut_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_cut_flint_block.json index 43b59fce72..d93f52b1bd 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_cut_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_cut_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_slab_from_cut_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_slab_from_cut_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_flint_block.json index df6d35758d..f55c7ce0c9 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_slab_from_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_slab_from_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_polished_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_polished_flint_block.json index 4bdcdeb94a..85dc483072 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_slab_from_polished_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_slab_from_polished_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_slab_from_polished_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_cut_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_cut_flint_block.json index 63260d8fb4..c903384c79 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_cut_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_cut_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_stairs_from_cut_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_stairs_from_cut_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_flint_block.json index c23d59c0d3..d0f6a1060d 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_stairs_from_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_stairs_from_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_polished_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_polished_flint_block.json index 862527cfed..f1ed7e9728 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_flint_stairs_from_polished_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_flint_stairs_from_polished_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_flint_stairs_from_polished_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_block.json index 5746a7cab9..31ef44f17c 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_frost_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_frost_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block.json index 8db0607c71..aac53cca8b 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_pillar_from_frost_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_pillar_from_frost_metal_block.json index 526f3b64bc..8acb5cc3f0 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_pillar_from_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_pillar_from_frost_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_frost_metal_pillar_from_frost_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_frost_metal_pillar_from_frost_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block.json index 6bf09ba5e2..62d29a9968 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_slab_from_frost_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_slab_from_frost_metal_block.json index cfbf8a343b..98b65643fb 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_slab_from_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_slab_from_frost_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_frost_metal_slab_from_frost_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_frost_metal_slab_from_frost_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block.json index 4c1073e40e..f5492cae6a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_stairs_from_frost_metal_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_stairs_from_frost_metal_block.json index cdb6cc0902..ef3afe27a7 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_stairs_from_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_frost_metal_stairs_from_frost_metal_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_frost_metal_stairs_from_frost_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_frost_metal_stairs_from_frost_metal_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_block.json index 11b8cd8115..6811da8258 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block.json index 76d98eb17f..584b277736 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block.json index 94704e394d..ca548be4e2 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_heavy_iron_block.json index 4f832d26bc..179c932830 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_heavy_iron_slab_from_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_heavy_iron_slab_from_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block.json index b10b8f231d..f10b9b0449 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block.json index b3679cbed4..5fed45f8fb 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block.json index 26202424fa..a756c24ee6 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block.json index 68891415ca..3355308ec4 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_block.json index eb2370faf7..bf3271cbca 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block.json index fdb7fc12ec..f65bcea775 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_pillar_from_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_pillar_from_royal_steel_block.json index 4f5420d77f..6301187834 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_pillar_from_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_pillar_from_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_royal_steel_pillar_from_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_royal_steel_pillar_from_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block.json index be4dafd22d..f47ae0fef9 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_slab_from_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_slab_from_royal_steel_block.json index 3793cd78de..02fa1f4938 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_slab_from_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_slab_from_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_royal_steel_slab_from_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_royal_steel_slab_from_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block.json index 2e1c06c602..2b17c417a9 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_stairs_from_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_stairs_from_royal_steel_block.json index 29283ed97b..cf992d2b97 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_stairs_from_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cut_royal_steel_stairs_from_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/cut_royal_steel_stairs_from_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cut_royal_steel_stairs_from_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_slab.json new file mode 100644 index 0000000000..07b301b578 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_cyan_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:cyan_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cyan_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_cyan_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/cyan_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_stair.json new file mode 100644 index 0000000000..94ba70b0ab --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_cyan_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:cyan_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cyan_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_cyan_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/cyan_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_wall.json new file mode 100644 index 0000000000..37bdc6692a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/cyan_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_cyan_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:cyan_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/cyan_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_cyan_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/cyan_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..e9defd5eb2 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/gray_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/gray_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..9da0610966 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/gray_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/gray_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..79cbbee075 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/gray_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/gray_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/gray_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_slab.json new file mode 100644 index 0000000000..dc9a398b34 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_green_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:green_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/green_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_green_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/green_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_stair.json new file mode 100644 index 0000000000..1f2cba3f3e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_green_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:green_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/green_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_green_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/green_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_wall.json new file mode 100644 index 0000000000..44db25055f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/green_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_green_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:green_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/green_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_green_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/green_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam.json index 01c679295e..57cf166869 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_beam" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_beam" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam_from_cut_heavy_iron_block.json index b2296ba4a1..795eaa0ecc 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam_from_cut_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_beam_from_cut_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_beam_from_cut_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam_from_polished_heavy_iron_block.json index 39af86103a..9930d64438 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_beam_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_beam_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_beam_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column.json index 707b684328..c6061a2658 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_column" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_column" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column_from_cut_heavy_iron_block.json index e85959a3a6..ac827c650d 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column_from_cut_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_column_from_cut_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_column_from_cut_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column_from_polished_heavy_iron_block.json index 1bde625679..242515fa36 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_column_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_column_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_column_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_door.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_door.json index b0c51dbb58..d321546450 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_door.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_door.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_door" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_door" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_door_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_door_from_polished_heavy_iron_block.json index bea0f77522..f5a00a3216 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_door_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_door_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_door_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_door_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate.json index 38bd4ca991..48f7ca5a15 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_plate" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_plate" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_cut_heavy_iron_block.json index 5627c29ed5..a52bf2cf09 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_cut_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_plate_from_cut_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_plate_from_cut_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab.json index 9aafa02bff..603cf44ceb 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_heavy_iron_slab": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_heavy_iron_slab" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_polished_heavy_iron_block.json index 3af337e9d4..3ceed7a102 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_plate_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_plate_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab.json index ccfd74251c..ce4fb77a85 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_slab": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_slab" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor.json index 94f99c0d52..67f36a60ef 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_trapdoor" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_trapdoor" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block.json index 2b52282c94..f3b0d4a3d6 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block.json index 82178b8123..b170e0228f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall.json index 4ec4215170..b5e946df75 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_wall" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall_from_cut_heavy_iron_block.json index a47eb5e626..1cabbf2d32 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall_from_cut_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_wall_from_cut_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cut_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_wall_from_cut_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cut_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall_from_polished_heavy_iron_block.json index 4c33c35bcc..1d11aa2a44 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/heavy_iron_wall_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/heavy_iron_wall_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/heavy_iron_wall_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..30dc11f3ef --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/light_blue_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/light_blue_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..2d9f127a6b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/light_blue_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/light_blue_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..00d82c9fdb --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_blue_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_blue_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_blue_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/light_blue_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_blue_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/light_blue_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..61fdc9729d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/light_gray_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/light_gray_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..8b22be26a9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/light_gray_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/light_gray_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..807b20155a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/light_gray_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_light_gray_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:light_gray_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/light_gray_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_light_gray_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/light_gray_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_slab.json new file mode 100644 index 0000000000..fb5cb3f020 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_lime_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:lime_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/lime_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_lime_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/lime_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_stair.json new file mode 100644 index 0000000000..153c2bc38e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_lime_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:lime_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/lime_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_lime_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/lime_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_wall.json new file mode 100644 index 0000000000..1946eac7b9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/lime_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_lime_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:lime_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/lime_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_lime_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/lime_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_slab.json new file mode 100644 index 0000000000..2e10a12a29 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_magenta_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:magenta_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/magenta_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_magenta_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/magenta_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_stair.json new file mode 100644 index 0000000000..dd652c91f9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_magenta_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:magenta_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/magenta_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_magenta_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/magenta_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_wall.json new file mode 100644 index 0000000000..9145181b81 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/magenta_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_magenta_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:magenta_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/magenta_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_magenta_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/magenta_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_slab.json new file mode 100644 index 0000000000..d31415ab6b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_orange_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:orange_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/orange_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_orange_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/orange_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_stair.json new file mode 100644 index 0000000000..658210ad13 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_orange_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:orange_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/orange_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_orange_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/orange_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_wall.json new file mode 100644 index 0000000000..9770ee3b0b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/orange_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_orange_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:orange_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/orange_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_orange_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/orange_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_slab.json new file mode 100644 index 0000000000..dc76afbc7a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_pink_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:pink_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/pink_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_pink_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/pink_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_stair.json new file mode 100644 index 0000000000..76dddfd356 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_pink_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:pink_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/pink_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_pink_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/pink_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_wall.json new file mode 100644 index 0000000000..df9f9aa9c7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/pink_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_pink_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:pink_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/pink_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_pink_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/pink_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_flint_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_flint_block.json index 1845b19f63..84f55e693c 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_flint_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/polished_flint_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_flint_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/polished_flint_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_flint_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_block.json index d3def44de5..8dfd9e347f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_slab_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_slab_from_heavy_iron_block.json index b6659cc63e..8f0e34e957 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_slab_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_slab_from_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/polished_heavy_iron_slab_from_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/polished_heavy_iron_slab_from_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block.json index 15ec042afc..e132e5e7bf 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block.json index e5270b7689..b080e5d470 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block.json index 93e49870d7..3ae820981a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_polished_heavy_iron_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_polished_heavy_iron_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_slab.json new file mode 100644 index 0000000000..640bfdcfe9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_purple_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:purple_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/purple_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_purple_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/purple_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_stair.json new file mode 100644 index 0000000000..fe265bbc7a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_purple_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:purple_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/purple_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_purple_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/purple_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_wall.json new file mode 100644 index 0000000000..7f6ac14c52 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/purple_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_purple_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:purple_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/purple_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_purple_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/purple_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_slab.json new file mode 100644 index 0000000000..fdddb76033 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_red_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:red_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/red_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_red_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/red_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_stair.json new file mode 100644 index 0000000000..4fec0c9d67 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_red_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:red_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/red_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_red_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/red_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_wall.json new file mode 100644 index 0000000000..410c3928e4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/red_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_red_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:red_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/red_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_red_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/red_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_slab.json deleted file mode 100644 index 8ef1a41b24..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_black_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_black" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_black_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_stair.json deleted file mode 100644 index 77285b2ff9..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_black_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_black" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_black_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_wall.json deleted file mode 100644 index 110f542ac4..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_black_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_black_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_black" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_black_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_slab.json deleted file mode 100644 index cf6a855b62..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_blue_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_blue_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_stair.json deleted file mode 100644 index 024b45fa61..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_blue_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_blue_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_wall.json deleted file mode 100644 index 3feac8e77d..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_blue_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_blue_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_blue_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_slab.json deleted file mode 100644 index 5037993433..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_brown_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_brown" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_brown_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_stair.json deleted file mode 100644 index 63eecb4ea9..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_brown_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_brown" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_brown_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_wall.json deleted file mode 100644 index 6de46cf5c4..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_brown_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_brown_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_brown" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_brown_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_slab.json deleted file mode 100644 index 83557fac24..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_cyan_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_cyan" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_cyan_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_stair.json deleted file mode 100644 index c175caa73d..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_cyan_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_cyan" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_cyan_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_wall.json deleted file mode 100644 index 0cf1f42ecd..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_cyan_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_cyan_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_cyan" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_cyan_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_slab.json deleted file mode 100644 index b75fc38a5d..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_gray_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_gray_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_stair.json deleted file mode 100644 index 86e31b5c2a..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_gray_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_gray_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_wall.json deleted file mode 100644 index bff50b1691..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_gray_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_gray_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_gray_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_slab.json deleted file mode 100644 index df9680827e..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_green_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_green" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_green_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_stair.json deleted file mode 100644 index eed371cfc5..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_green_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_green" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_green_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_wall.json deleted file mode 100644 index 431c9b372e..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_green_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_green_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_green" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_green_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_slab.json deleted file mode 100644 index 6379f29c4a..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_light_blue_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_light_blue_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_stair.json deleted file mode 100644 index 1da1dcf599..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_light_blue_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_light_blue_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_wall.json deleted file mode 100644 index 6b45da2f2a..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_blue_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_light_blue_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_light_blue_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_slab.json deleted file mode 100644 index a8a736231d..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_light_gray_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_light_gray_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_stair.json deleted file mode 100644 index f258f55dad..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_light_gray_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_light_gray_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_wall.json deleted file mode 100644 index 590f4e805a..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_light_gray_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_light_gray_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_light_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_light_gray_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_slab.json deleted file mode 100644 index 9fbfe11cfe..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_lime_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_lime" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_lime_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_stair.json deleted file mode 100644 index 4a0f419140..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_lime_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_lime" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_lime_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_wall.json deleted file mode 100644 index a5775d0586..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_lime_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_lime_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_lime" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_lime_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_slab.json deleted file mode 100644 index b2c293c62c..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_magenta_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_magenta" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_magenta_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_stair.json deleted file mode 100644 index a6bd979bf6..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_magenta_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_magenta" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_magenta_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_wall.json deleted file mode 100644 index bb20f37387..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_magenta_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_magenta_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_magenta" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_magenta_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_slab.json deleted file mode 100644 index 5de5198957..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_orange_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_orange" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_orange_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_stair.json deleted file mode 100644 index 1cebce5212..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_orange_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_orange" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_orange_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_wall.json deleted file mode 100644 index ca6ac567fa..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_orange_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_orange_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_orange" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_orange_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_slab.json deleted file mode 100644 index c650b8e11f..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_pink_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_pink" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_pink_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_stair.json deleted file mode 100644 index f2a5cd51c6..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_pink_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_pink" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_pink_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_wall.json deleted file mode 100644 index ba39162abe..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_pink_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_pink_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_pink" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_pink_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_slab.json deleted file mode 100644 index 17287b846d..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_purple_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_purple" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_purple_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_stair.json deleted file mode 100644 index 5176116183..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_purple_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_purple" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_purple_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_wall.json deleted file mode 100644 index 49718c5470..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_purple_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_purple_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_purple" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_purple_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_slab.json deleted file mode 100644 index 74219a1ac5..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_red_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_red" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_red_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_stair.json deleted file mode 100644 index 69aa10321a..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_red_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_red" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_red_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_wall.json deleted file mode 100644 index 9beda68b08..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_red_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_red_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_red" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_red_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_slab.json deleted file mode 100644 index 6b12d9e322..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_white_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_white" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_white_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_stair.json deleted file mode 100644 index 67bf63184b..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_white_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_white" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_white_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_wall.json deleted file mode 100644 index 1d715b3329..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_white_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_white_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_white" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_white_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_slab.json deleted file mode 100644 index 7ad346a4f6..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_slab.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_yellow_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_yellow" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_yellow_slab" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_stair.json deleted file mode 100644 index 7487c4a176..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_stair.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_yellow_stair" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_yellow" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_yellow_stair" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_wall.json deleted file mode 100644 index cdf1e8b6e6..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/reinforced_concrete_yellow_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/reinforced_concrete_yellow_wall" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:reinforced_concrete_yellow" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stonecutting/reinforced_concrete_yellow_wall" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/smooth_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/smooth_royal_steel_block.json index cc5c35124f..d81ab94fc6 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/smooth_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/smooth_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/smooth_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/smooth_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_slab.json new file mode 100644 index 0000000000..1f164eab40 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/white_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_white_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:white_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_white_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/white_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_stair.json new file mode 100644 index 0000000000..35dc08260e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/white_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_white_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:white_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_white_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/white_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_wall.json new file mode 100644 index 0000000000..753fbbeae4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/white_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/white_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_white_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:white_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_white_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/white_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_slab.json new file mode 100644 index 0000000000..6f933684c1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/yellow_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_yellow_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:yellow_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_yellow_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/yellow_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_stair.json new file mode 100644 index 0000000000..6c8015df7d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/yellow_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_yellow_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:yellow_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_yellow_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/yellow_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_wall.json new file mode 100644 index 0000000000..36cc08315d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/stonecutting/yellow_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/yellow_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_yellow_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:yellow_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_yellow_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stonecutting/yellow_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/sugar_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/sugar_block.json index 31dc1616c6..6b7981d121 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/sugar_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/sugar_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:sugar_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_sugar": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:sugar_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_sugar" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/sugar_from_sugar_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/sugar_from_sugar_block.json index 032c0692a7..feefcdff06 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/sugar_from_sugar_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/sugar_from_sugar_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:sugar_from_sugar_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_sugar_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:sugar_from_sugar_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_sugar_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/wet_sponge.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/wet_sponge.json index f8945fea53..38b6c7f71e 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/wet_sponge.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/wet_sponge.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:wet_sponge" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_sponge_gemmule": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:wet_sponge" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_sponge_gemmule" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_slab.json new file mode 100644 index 0000000000..0b822eb34f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:white_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_white_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:white_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_white_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:white_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_stair.json new file mode 100644 index 0000000000..e0f838471e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:white_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_white_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:white_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_white_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:white_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_wall.json new file mode 100644 index 0000000000..9fe6c98c20 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/white_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:white_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_white_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:white_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_white_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:white_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_slab.json new file mode 100644 index 0000000000..f4c400d0f5 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:yellow_reinforced_concrete_slab" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_yellow_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:yellow_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_yellow_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:yellow_reinforced_concrete_slab" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_stair.json new file mode 100644 index 0000000000..c9e12d143b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_stair.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:yellow_reinforced_concrete_stair" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_yellow_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:yellow_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_yellow_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:yellow_reinforced_concrete_stair" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_wall.json new file mode 100644 index 0000000000..761cdaf3bb --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/building_blocks/yellow_reinforced_concrete_wall.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:yellow_reinforced_concrete_wall" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_yellow_reinforced_concrete": { + "conditions": { + "items": [ + { + "items": "anvilcraft:yellow_reinforced_concrete" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_yellow_reinforced_concrete" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:yellow_reinforced_concrete_wall" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/bulging/netherite_upgrade_smithing_template.json b/src/generated/resources/data/anvilcraft/advancement/recipes/bulging/netherite_upgrade_smithing_template.json new file mode 100644 index 0000000000..95b722cb7e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/bulging/netherite_upgrade_smithing_template.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:bulging/netherite_upgrade_smithing_template" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:bulging/netherite_upgrade_smithing_template" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/combat/trident.json b/src/generated/resources/data/anvilcraft/advancement/recipes/combat/trident.json index 57a49089b7..533195ce7e 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/combat/trident.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/combat/trident.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:trident" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_prismarine_blade": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:trident" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_prismarine_blade" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/cooling/cooling_ember_metal_upgrade_smithing_template.json b/src/generated/resources/data/anvilcraft/advancement/recipes/cooling/cooling_ember_metal_upgrade_smithing_template.json deleted file mode 100644 index f3ec996679..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/cooling/cooling_ember_metal_upgrade_smithing_template.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ember_metal_upgrade_smithing_template": { - "conditions": { - "items": [ - { - "items": "anvilcraft:ember_metal_upgrade_smithing_template" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:cooling_ember_metal_upgrade_smithing_template" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ember_metal_upgrade_smithing_template" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:cooling_ember_metal_upgrade_smithing_template" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/food/chocolate_black.json b/src/generated/resources/data/anvilcraft/advancement/recipes/food/chocolate_black.json index 29663ea784..06d69b7839 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/food/chocolate_black.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/food/chocolate_black.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_cocoa_butter": { + "has_cocoa_liquor": { "conditions": { "items": [ { @@ -41,7 +41,7 @@ "requirements": [ [ "has_the_recipe", - "has_cocoa_butter", + "has_cocoa_liquor", "has_cream", "has_sugar" ] diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/food/chocolate_white.json b/src/generated/resources/data/anvilcraft/advancement/recipes/food/chocolate_white.json index 6c408f4d78..29ad352511 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/food/chocolate_white.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/food/chocolate_white.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_butter": { + "has_cocoa_butter": { "conditions": { "items": [ { @@ -41,7 +41,7 @@ "requirements": [ [ "has_the_recipe", - "has_butter", + "has_cocoa_butter", "has_cream", "has_sugar" ] diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/food/cocoa_liquor.json b/src/generated/resources/data/anvilcraft/advancement/recipes/food/cocoa_liquor.json index 4344d71524..69f00623ce 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/food/cocoa_liquor.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/food/cocoa_liquor.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_coco_butter": { + "has_cocoa_butter": { "conditions": { "items": [ { @@ -11,7 +11,7 @@ }, "trigger": "minecraft:inventory_changed" }, - "has_coco_powder": { + "has_cocoa_powder": { "conditions": { "items": [ { @@ -31,8 +31,8 @@ "requirements": [ [ "has_the_recipe", - "has_coco_powder", - "has_coco_butter" + "has_cocoa_powder", + "has_cocoa_butter" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/food/creamy_bread_roll.json b/src/generated/resources/data/anvilcraft/advancement/recipes/food/creamy_bread_roll.json index f6b0ca9ee8..bf43c0ece6 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/food/creamy_bread_roll.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/food/creamy_bread_roll.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:creamy_bread_roll" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_cream": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:creamy_bread_roll" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_cream" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_boots_2_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_boots_2_chain.json deleted file mode 100644 index 4710222dc6..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_boots_2_chain.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:item_crush/armor/chainmail_boots_2_chain" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:item_crush/armor/chainmail_boots_2_chain" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_boots_2_iron_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_boots_2_iron_chain.json new file mode 100644 index 0000000000..3d5d072c67 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_boots_2_iron_chain.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:item_crush/armor/chainmail_boots_2_iron_chain" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:item_crush/armor/chainmail_boots_2_iron_chain" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_chestplate_2_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_chestplate_2_chain.json deleted file mode 100644 index 03de231bb8..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_chestplate_2_chain.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:item_crush/armor/chainmail_chestplate_2_chain" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:item_crush/armor/chainmail_chestplate_2_chain" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_chestplate_2_iron_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_chestplate_2_iron_chain.json new file mode 100644 index 0000000000..6358390012 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_chestplate_2_iron_chain.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:item_crush/armor/chainmail_chestplate_2_iron_chain" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:item_crush/armor/chainmail_chestplate_2_iron_chain" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_helmet_2_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_helmet_2_chain.json deleted file mode 100644 index 50ac57da5c..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_helmet_2_chain.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:item_crush/armor/chainmail_helmet_2_chain" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:item_crush/armor/chainmail_helmet_2_chain" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_helmet_2_iron_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_helmet_2_iron_chain.json new file mode 100644 index 0000000000..1580abfce9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_helmet_2_iron_chain.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:item_crush/armor/chainmail_helmet_2_iron_chain" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:item_crush/armor/chainmail_helmet_2_iron_chain" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_leggings_2_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_leggings_2_chain.json deleted file mode 100644 index d5343811bc..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_leggings_2_chain.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:item_crush/armor/chainmail_leggings_2_chain" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:item_crush/armor/chainmail_leggings_2_chain" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_leggings_2_iron_chain.json b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_leggings_2_iron_chain.json new file mode 100644 index 0000000000..ba32d50c99 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/item_crush/armor/chainmail_leggings_2_iron_chain.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:item_crush/armor/chainmail_leggings_2_iron_chain" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:item_crush/armor/chainmail_leggings_2_iron_chain" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/banner_patterns.json b/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/banner_patterns.json new file mode 100644 index 0000000000..ece5d861db --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/banner_patterns.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:jewel_crafting/banner_patterns" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:jewel_crafting/banner_patterns" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/music_discs.json b/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/music_discs.json new file mode 100644 index 0000000000..294f56e61d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/music_discs.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:jewel_crafting/music_discs" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:jewel_crafting/music_discs" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/trim_templates.json b/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/trim_templates.json new file mode 100644 index 0000000000..781feceacc --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/jewel_crafting/trim_templates.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:jewel_crafting/trim_templates" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:jewel_crafting/trim_templates" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/amber.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/amber.json index e63cfa721b..20c218dc3f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/amber.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/amber.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:amber" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_amber_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:amber" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_amber_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/crab_trap.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/crab_trap.json index e1fa36dd7b..f5402d6df9 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/crab_trap.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/crab_trap.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:crab_trap" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_string": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:crab_trap" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_string" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/dyson_sphere_component.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/dyson_sphere_component.json new file mode 100644 index 0000000000..3c3dd6fc6f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/dyson_sphere_component.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ember_metal_ingot": { + "conditions": { + "items": [ + { + "items": "anvilcraft:ember_metal_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:dyson_sphere_component" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ember_metal_ingot" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:dyson_sphere_component" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/exp_gem.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/exp_gem.json index 9aa929cfaa..69560d1197 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/exp_gem.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/exp_gem.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:exp_gem" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_exp_gem_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:exp_gem" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_exp_gem_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/fe_collector.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/fe_collector.json new file mode 100644 index 0000000000..60eded92d8 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/fe_collector.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_charge_collector": { + "conditions": { + "items": [ + { + "items": "anvilcraft:charge_collector" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_copper_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:copper_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:fe_collector" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_charge_collector", + "has_copper_ingot" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:fe_collector" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/heart_of_the_sea.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/heart_of_the_sea.json index 47baa4bbe7..4c2212a1be 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/heart_of_the_sea.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/heart_of_the_sea.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:heart_of_the_sea" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_sea_heart_shell": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:heart_of_the_sea" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_sea_heart_shell" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnet_ingot_from_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnet_ingot_from_block.json index 72ed3bd6ea..0950ef212f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnet_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnet_ingot_from_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:magnet_ingot_from_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_magnet_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magnet_ingot_from_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_magnet_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnet_ingot_from_hollow_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnet_ingot_from_hollow_block.json index 0fcf309a9c..1ab6e626d5 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnet_ingot_from_hollow_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnet_ingot_from_hollow_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:magnet_ingot_from_hollow_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_hollow_magnet_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magnet_ingot_from_hollow_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_hollow_magnet_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnetoelectric_core.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnetoelectric_core.json index ae2108db51..8c223b0255 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnetoelectric_core.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/magnetoelectric_core.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:magnetoelectric_core" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_hollow_magnet_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magnetoelectric_core" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_hollow_magnet_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/multiphase_transcendium.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/multiphase_transcendium.json index dbac1344ae..8fcd562da4 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/multiphase_transcendium.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/multiphase_transcendium.json @@ -1,13 +1,23 @@ { "parent": "minecraft:recipes/root", "criteria": { + "has_multiphase_matter": { + "conditions": { + "items": [ + { + "items": "anvilcraft:multiphase_matter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:multiphase_transcendium" }, "trigger": "minecraft:recipe_unlocked" }, - "hasitem": { + "has_transcendium_ingot": { "conditions": { "items": [ { @@ -16,12 +26,24 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_transcendium_upgrade_smithing_template": { + "conditions": { + "items": [ + { + "items": "anvilcraft:transcendium_upgrade_smithing_template" + } + ] + }, + "trigger": "minecraft:inventory_changed" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_transcendium_upgrade_smithing_template", + "has_multiphase_matter", + "has_transcendium_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/netherrack.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/netherrack.json new file mode 100644 index 0000000000..191b669106 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/netherrack.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_rotten_flesh_block": { + "conditions": { + "items": [ + { + "items": "anvilcraft:rotten_flesh_block" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:netherrack" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_rotten_flesh_block" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:netherrack" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/penrose_sphere_component.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/penrose_sphere_component.json new file mode 100644 index 0000000000..b88e527892 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/penrose_sphere_component.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:penrose_sphere_component" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_transcendium_ingot": { + "conditions": { + "items": [ + { + "items": "anvilcraft:transcendium_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_transcendium_ingot" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:penrose_sphere_component" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_big_from_small.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_big_from_small.json deleted file mode 100644 index 9777bcf4fa..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_big_from_small.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_power_converter_middle": { - "conditions": { - "items": [ - { - "items": "anvilcraft:power_converter_middle" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:power_converter_big_from_small" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_power_converter_middle" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:power_converter_big_from_small" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_middle_from_big.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_middle_from_big.json new file mode 100644 index 0000000000..5587d6cc68 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_middle_from_big.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_power_converter_big": { + "conditions": { + "items": [ + { + "items": "anvilcraft:power_converter_big" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:power_converter_middle_from_big" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_power_converter_big" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:power_converter_middle_from_big" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_small_from_big.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_small_from_big.json new file mode 100644 index 0000000000..2c45017059 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_small_from_big.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_power_converter_big": { + "conditions": { + "items": [ + { + "items": "anvilcraft:power_converter_big" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:power_converter_small_from_big" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_power_converter_big" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:power_converter_small_from_big" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_small_from_middle.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_small_from_middle.json new file mode 100644 index 0000000000..d1e86baa34 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/power_converter_small_from_middle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_power_converter_middle": { + "conditions": { + "items": [ + { + "items": "anvilcraft:power_converter_middle" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:power_converter_small_from_middle" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_power_converter_middle" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:power_converter_small_from_middle" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/resin.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/resin.json index 23fcf97908..865cd59164 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/resin.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/resin.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:resin" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_resin_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:resin" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_resin_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/royal_steel_ingot_from_royal_steel_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/royal_steel_ingot_from_royal_steel_block.json index 6486ce3235..af319c2174 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/royal_steel_ingot_from_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/royal_steel_ingot_from_royal_steel_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:royal_steel_ingot_from_royal_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:royal_steel_ingot_from_royal_steel_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/ruby.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/ruby.json index 51a9b80cd7..392e7e2a78 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/ruby.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/ruby.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:ruby" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ruby_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:ruby" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ruby_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/sapphire.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/sapphire.json index f75dd3a527..bb84b1bf2a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/sapphire.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/sapphire.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:sapphire" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_sapphire_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:sapphire" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_sapphire_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_anvil.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_anvil.json index 7e02d989bd..b35ace15c9 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_anvil.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_anvil.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_anvil" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_anvil" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_grindstone.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_grindstone.json index 8d5ff300a5..4643e5c72f 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_grindstone.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_grindstone.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_grindstone" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_grindstone" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_smithing_table.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_smithing_table.json index b4d21bfd33..20c6ebc02e 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_smithing_table.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/ember_smithing_table.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_smithing_table" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_smithing_table" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_anvil.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_anvil.json index c344b82c77..941d898ecb 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_anvil.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_anvil.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/frost_anvil" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/frost_anvil" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_grindstone.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_grindstone.json index 972a382ca0..8059bd5fc3 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_grindstone.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_grindstone.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/frost_grindstone" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/frost_grindstone" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_smithing_table.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_smithing_table.json index f56ffb59db..4559aa3c46 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_smithing_table.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/frost_smithing_table.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/frost_smithing_table" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/frost_smithing_table" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_anvil.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_anvil.json index 089e66f31d..0e8df4ee79 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_anvil.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_anvil.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_anvil" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_anvil" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_grindstone.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_grindstone.json index 57ed02de9f..525f128fbe 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_grindstone.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_grindstone.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_grindstone" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_grindstone" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_smithing_table.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_smithing_table.json index 55032eb46e..b0c7fefa1b 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_smithing_table.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/royal_smithing_table.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_smithing_table" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_smithing_table" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/transcendence_anvil.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/transcendence_anvil.json index d51022b638..32d9977e7a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/transcendence_anvil.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/smithing/transcendence_anvil.json @@ -7,7 +7,7 @@ }, "trigger": "minecraft:recipe_unlocked" }, - "hasitem": { + "has_transcendium_block": { "conditions": { "items": [ { @@ -21,7 +21,7 @@ "requirements": [ [ "has_the_recipe", - "hasitem" + "has_transcendium_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_middle.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_middle.json index a0b5dfec88..304e57ed43 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_middle.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_middle.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/power_converter_middle" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_power_converter_big": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/power_converter_middle" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_power_converter_big" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_small_from_big.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_small_from_big.json index 92820f4fd7..97d2cc221e 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_small_from_big.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_small_from_big.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/power_converter_small_from_big" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_power_converter_big": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/power_converter_small_from_big" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_power_converter_big" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_small_from_middle.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_small_from_middle.json index a80e13af8c..02a0500199 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_small_from_middle.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/stonecutting/power_converter_small_from_middle.json @@ -1,27 +1,27 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stonecutting/power_converter_small_from_middle" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_power_converter_middle": { "conditions": { "items": [ { - "items": "anvilcraft:power_converter_big" + "items": "anvilcraft:power_converter_middle" } ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stonecutting/power_converter_small_from_middle" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_power_converter_middle" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/topaz.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/topaz.json index 073f43362a..5a4047f35b 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/topaz.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/topaz.json @@ -7,7 +7,7 @@ }, "trigger": "minecraft:recipe_unlocked" }, - "hasitem": { + "has_topaz_block": { "conditions": { "items": [ { @@ -21,7 +21,7 @@ "requirements": [ [ "has_the_recipe", - "hasitem" + "has_topaz_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/totem_of_rage.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/totem_of_rage.json index 849ea7b2ab..50bb3c4b10 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/totem_of_rage.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/totem_of_rage.json @@ -1,17 +1,37 @@ { "parent": "minecraft:recipes/root", "criteria": { + "has_cursed_gold_block": { + "conditions": { + "items": [ + { + "items": "anvilcraft:cursed_gold_block" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_ember_metal_nugget": { + "conditions": { + "items": [ + { + "items": "anvilcraft:ember_metal_nugget" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:totem_of_rage" }, "trigger": "minecraft:recipe_unlocked" }, - "hasitem": { + "has_totem_of_undying": { "conditions": { "items": [ { - "items": "anvilcraft:ember_metal_nugget" + "items": "minecraft:totem_of_undying" } ] }, @@ -21,7 +41,9 @@ "requirements": [ [ "has_the_recipe", - "hasitem" + "has_totem_of_undying", + "has_cursed_gold_block", + "has_ember_metal_nugget" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/totem_of_recovery.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/totem_of_recovery.json index 0bb18f8556..ceb8f3c318 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/totem_of_recovery.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/totem_of_recovery.json @@ -1,17 +1,37 @@ { "parent": "minecraft:recipes/root", "criteria": { + "has_echo_shard": { + "conditions": { + "items": [ + { + "items": "minecraft:echo_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_recovery_pearl": { + "conditions": { + "items": [ + { + "items": "anvilcraft:recovery_pearl" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:totem_of_recovery" }, "trigger": "minecraft:recipe_unlocked" }, - "hasitem": { + "has_totem_of_undying": { "conditions": { "items": [ { - "items": "minecraft:echo_shard" + "items": "minecraft:totem_of_undying" } ] }, @@ -21,7 +41,9 @@ "requirements": [ [ "has_the_recipe", - "hasitem" + "has_totem_of_undying", + "has_recovery_pearl", + "has_echo_shard" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/transparent_crafting_table.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/transparent_crafting_table.json index 3abbd3423f..13f09a791a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/transparent_crafting_table.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/transparent_crafting_table.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:transparent_crafting_table" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_amethyst_shard": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:transparent_crafting_table" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_amethyst_shard" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/allay.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/allay.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/allay.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/allay.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/bat.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/bat.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/bat.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/bat.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/cow.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/cow.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/cow.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/cow.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/guardian.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/guardian.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/guardian.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/guardian.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/horse.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/horse.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/horse.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/horse.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/iron_golem.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/iron_golem.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/iron_golem.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/iron_golem.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/pig.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/pig.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/pig.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/pig.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/piglin.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/piglin.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/piglin.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/piglin.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/skeleton.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/skeleton.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/skeleton.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/skeleton.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/villager.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/villager.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/villager.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/villager.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/zombie.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/zombie.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform/zombie.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform/zombie.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform_with_item/zombie_to_giant_anvil.json b/src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform_with_item/zombie_to_giant_anvil.json similarity index 100% rename from src/generated/resources/data/anvilcraft/advancement/recipe/mob_transform_with_item/zombie_to_giant_anvil.json rename to src/generated/resources/data/anvilcraft/advancement/recipes/mob_transform_with_item/zombie_to_giant_anvil.json diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/multiblock/large_crate.json b/src/generated/resources/data/anvilcraft/advancement/recipes/multiblock/large_crate.json new file mode 100644 index 0000000000..d71edd896c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/multiblock/large_crate.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:multiblock/large_crate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:multiblock/large_crate" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/multiblock_conversion/large_crate.json b/src/generated/resources/data/anvilcraft/advancement/recipes/multiblock_conversion/large_crate.json new file mode 100644 index 0000000000..9d4f2564ec --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/multiblock_conversion/large_crate.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:multiblock_conversion/large_crate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:multiblock_conversion/large_crate" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/null/neutron_irradation/uranium_block_explosion.json b/src/generated/resources/data/anvilcraft/advancement/recipes/null/neutron_irradation/uranium_block_explosion.json new file mode 100644 index 0000000000..c119e49ff6 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/null/neutron_irradation/uranium_block_explosion.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:neutron_irradation/uranium_block_explosion" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:neutron_irradation/uranium_block_explosion" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/empty_propel_piston.json b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/empty_propel_piston.json new file mode 100644 index 0000000000..ca9d438f95 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/empty_propel_piston.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "anvilcraft:ruby" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:empty_propel_piston" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:empty_propel_piston" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/hollow_magnet_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/hollow_magnet_block.json index d071eb94c4..adedb0af0c 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/hollow_magnet_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/hollow_magnet_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:hollow_magnet_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_magnet_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:hollow_magnet_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_magnet_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/magnet_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/magnet_block.json index f36f010f0e..eaa90909f6 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/magnet_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/magnet_block.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:magnet_block" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_magnet_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magnet_block" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_magnet_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/eight_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/eight_to_one_smithing_template.json new file mode 100644 index 0000000000..772d08185e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/eight_to_one_smithing_template.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stamping_diff/eight_to_one_smithing_template" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stamping_diff/eight_to_one_smithing_template" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/four_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/four_to_one_smithing_template.json new file mode 100644 index 0000000000..488fd2468a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/four_to_one_smithing_template.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stamping_diff/four_to_one_smithing_template" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stamping_diff/four_to_one_smithing_template" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/two_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/two_to_one_smithing_template.json new file mode 100644 index 0000000000..b885650862 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_diff/two_to_one_smithing_template.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:stamping_diff/two_to_one_smithing_template" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:stamping_diff/two_to_one_smithing_template" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/eight_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/eight_to_one_smithing_template.json deleted file mode 100644 index f45c80ed33..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/eight_to_one_smithing_template.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stamping_unique_items/eight_to_one_smithing_template" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stamping_unique_items/eight_to_one_smithing_template" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/four_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/four_to_one_smithing_template.json deleted file mode 100644 index 07e2ca69da..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/four_to_one_smithing_template.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stamping_unique_items/four_to_one_smithing_template" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stamping_unique_items/four_to_one_smithing_template" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/two_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/two_to_one_smithing_template.json deleted file mode 100644 index f93c3d2319..0000000000 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/stamping_unique_items/two_to_one_smithing_template.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:stamping_unique_items/two_to_one_smithing_template" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "anvilcraft:stamping_unique_items/two_to_one_smithing_template" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/amber_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/amber_block.json index 9a4c478936..04a1dbbb9c 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/amber_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/amber_block.json @@ -1,16 +1,6 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_resin_block": { - "conditions": { - "items": [ - { - "items": "anvilcraft:resin_block" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:time_warp/amber_block" @@ -20,8 +10,7 @@ }, "requirements": [ [ - "has_the_recipe", - "has_resin_block" + "has_the_recipe" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_0.json b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_0.json index 63f454bf34..0c321a7f5e 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_0.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_0.json @@ -1,16 +1,6 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_royal_steel_ingot": { - "conditions": { - "items": [ - { - "items": "anvilcraft:royal_steel_ingot" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:time_warp/frost_metal_ingot_0" @@ -20,8 +10,7 @@ }, "requirements": [ [ - "has_the_recipe", - "has_royal_steel_ingot" + "has_the_recipe" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_1.json b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_1.json index 0fec7f40c3..5ecca78ed6 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_1.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_1.json @@ -1,26 +1,6 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_iron_ingot": { - "conditions": { - "items": [ - { - "items": "minecraft:iron_ingot" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_royal_steel_ingot": { - "conditions": { - "items": [ - { - "items": "anvilcraft:royal_steel_ingot" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:time_warp/frost_metal_ingot_1" @@ -30,9 +10,7 @@ }, "requirements": [ [ - "has_the_recipe", - "has_royal_steel_ingot", - "has_iron_ingot" + "has_the_recipe" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_2.json b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_2.json index b6878b759c..0f8e2f6982 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_2.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_2.json @@ -1,26 +1,6 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_royal_steel_ingot": { - "conditions": { - "items": [ - { - "items": "anvilcraft:royal_steel_ingot" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_silver_ingot": { - "conditions": { - "items": [ - { - "items": "anvilcraft:silver_ingot" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:time_warp/frost_metal_ingot_2" @@ -30,9 +10,7 @@ }, "requirements": [ [ - "has_the_recipe", - "has_royal_steel_ingot", - "has_silver_ingot" + "has_the_recipe" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_3.json b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_3.json index 306406ab4b..8748cfc0c1 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_3.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/frost_metal_ingot_3.json @@ -1,38 +1,16 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_royal_steel_ingot": { - "conditions": { - "items": [ - { - "items": "anvilcraft:royal_steel_ingot" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:time_warp/frost_metal_ingot_3" }, "trigger": "minecraft:recipe_unlocked" - }, - "has_titanium_ingot": { - "conditions": { - "items": [ - { - "items": "anvilcraft:titanium_ingot" - } - ] - }, - "trigger": "minecraft:inventory_changed" } }, "requirements": [ [ - "has_the_recipe", - "has_royal_steel_ingot", - "has_titanium_ingot" + "has_the_recipe" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/mob_amber_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/mob_amber_block.json index e705acc0df..50c6902224 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/mob_amber_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/mob_amber_block.json @@ -1,16 +1,6 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_resin_block": { - "conditions": { - "items": [ - { - "items": "anvilcraft:resin_block" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:mob_amber_block" @@ -20,8 +10,7 @@ }, "requirements": [ [ - "has_the_recipe", - "has_resin_block" + "has_the_recipe" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/resentful_amber_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/resentful_amber_block.json index b57f451b28..ab4c4fda59 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/resentful_amber_block.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/time_warp/resentful_amber_block.json @@ -1,16 +1,6 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_resin_block": { - "conditions": { - "items": [ - { - "items": "anvilcraft:resin_block" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, "has_the_recipe": { "conditions": { "recipe": "anvilcraft:resentful_amber_block" @@ -20,8 +10,7 @@ }, "requirements": [ [ - "has_the_recipe", - "has_resin_block" + "has_the_recipe" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_axe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_axe.json index ad16a1e4db..73345417a2 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_axe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_axe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:amethyst_axe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_amethyst_shard": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:amethyst_axe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_amethyst_shard" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_hoe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_hoe.json index c67edfc9cd..55938f35f1 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_hoe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_hoe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:amethyst_hoe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_amethyst_shard": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:amethyst_hoe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_amethyst_shard" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_pickaxe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_pickaxe.json index 8dc7108bab..238c8f0e73 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_pickaxe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:amethyst_pickaxe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_amethyst_shard": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:amethyst_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_amethyst_shard" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_shovel.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_shovel.json index 0371cb262f..80813310c0 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_shovel.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_shovel.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:amethyst_shovel" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_amethyst_shard": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:amethyst_shovel" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_amethyst_shard" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_sword.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_sword.json index 12141c014b..5e039f4fb0 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_sword.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/amethyst_sword.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:amethyst_sword" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_amethyst_shard": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:amethyst_sword" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_amethyst_shard" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/guide_book.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/guide_book.json index fd5f882513..4fb7ea2e05 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/guide_book.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/guide_book.json @@ -1,13 +1,17 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { + "has_anvil": { "conditions": { - "recipe": "anvilcraft:guide_book" + "items": [ + { + "items": "minecraft:anvil" + } + ] }, - "trigger": "minecraft:recipe_unlocked" + "trigger": "minecraft:inventory_changed" }, - "hasitem": { + "has_book": { "conditions": { "items": [ { @@ -16,12 +20,41 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_chipped_anvil": { + "conditions": { + "items": [ + { + "items": "minecraft:chipped_anvil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_damaged_anvil": { + "conditions": { + "items": [ + { + "items": "minecraft:damaged_anvil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:guide_book" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_anvil", + "has_chipped_anvil", + "has_damaged_anvil", + "has_book" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/magnet.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/magnet.json index d07e7b8481..047c0866ef 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/magnet.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/magnet.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:magnet" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_magnet_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magnet" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_magnet_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/recovery_pearl.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/recovery_pearl.json index 431ec49897..d33eb0e200 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/recovery_pearl.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/recovery_pearl.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:recovery_pearl" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ender_pearl": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:recovery_pearl" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ender_pearl" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_anvil_hammer.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_anvil_hammer.json index 55251c469c..34d6d2a4b9 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_anvil_hammer.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_anvil_hammer.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_anvil_hammer" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_anvil_hammer" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_dragon_rod.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_dragon_rod.json index 219f6a0108..b4ef9db639 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_dragon_rod.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_dragon_rod" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_dragon_rod" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_axe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_axe.json index 994f2a84ff..60c13b4bae 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_axe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_axe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_metal_axe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_metal_axe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_hoe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_hoe.json index 92e624640f..4fe36c0893 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_hoe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_hoe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_metal_hoe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_metal_hoe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_pickaxe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_pickaxe.json index cdb805b6cc..95cfdc4447 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_pickaxe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_metal_pickaxe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_metal_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_shovel.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_shovel.json index fc665a69a5..b3cfadc246 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_shovel.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_shovel.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_metal_shovel" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_metal_shovel" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_sword.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_sword.json index dd00373cc7..b267783771 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_sword.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/ember_metal_sword.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/ember_metal_sword" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_ember_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/ember_metal_sword" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_ember_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_axe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_axe.json index 9355eb59d6..f5506deb10 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_axe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_axe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/frost_metal_axe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/frost_metal_axe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_hoe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_hoe.json index 3c3cbd9c33..8d68c6ed1b 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_hoe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_hoe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/frost_metal_hoe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/frost_metal_hoe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_pickaxe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_pickaxe.json index 1b3946caae..a70c68f924 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_pickaxe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/frost_metal_pickaxe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/frost_metal_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_shovel.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_shovel.json index f1fce129df..283456989e 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_shovel.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_shovel.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/frost_metal_shovel" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/frost_metal_shovel" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_sword.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_sword.json index 90be6376a1..e58e9fc5c1 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_sword.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/frost_metal_sword.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/frost_metal_sword" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_frost_metal_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/frost_metal_sword" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_frost_metal_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_anvil_hammer.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_anvil_hammer.json index f5690cd711..ddda98f12a 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_anvil_hammer.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_anvil_hammer.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_anvil_hammer" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_block": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_anvil_hammer" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_axe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_axe.json index 8ec0e328a6..652a1314a6 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_axe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_axe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_steel_axe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_steel_axe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_hoe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_hoe.json index 0565fdffb6..fc175240d5 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_hoe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_hoe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_steel_hoe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_steel_hoe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_pickaxe.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_pickaxe.json index 396b29fa9b..b05691a1b7 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_pickaxe.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_steel_pickaxe" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_steel_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_shovel.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_shovel.json index ae59e3094e..f0d8b59e82 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_shovel.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_shovel.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_steel_shovel" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_steel_shovel" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_sword.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_sword.json index 2d90116f99..288c958ef9 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_sword.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/royal_steel_sword.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "anvilcraft:smithing/royal_steel_sword" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { + "has_royal_steel_ingot": { "conditions": { "items": [ { @@ -16,12 +10,18 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:smithing/royal_steel_sword" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ "has_the_recipe", - "hasitem" + "has_royal_steel_ingot" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/transcendence_anvil_hammer.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/transcendence_anvil_hammer.json index b258edc6de..16ca7e84d0 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/transcendence_anvil_hammer.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/transcendence_anvil_hammer.json @@ -7,7 +7,7 @@ }, "trigger": "minecraft:recipe_unlocked" }, - "hasitem": { + "has_transcendium_block": { "conditions": { "items": [ { @@ -21,7 +21,7 @@ "requirements": [ [ "has_the_recipe", - "hasitem" + "has_transcendium_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/transcendence_dragon_rod.json b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/transcendence_dragon_rod.json index e65af614c3..9437c6770c 100644 --- a/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/transcendence_dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/tools/smithing/transcendence_dragon_rod.json @@ -7,7 +7,7 @@ }, "trigger": "minecraft:recipe_unlocked" }, - "hasitem": { + "has_transcendium_block": { "conditions": { "items": [ { @@ -21,7 +21,7 @@ "requirements": [ [ "has_the_recipe", - "hasitem" + "has_transcendium_block" ] ], "rewards": { diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/transportation/crate.json b/src/generated/resources/data/anvilcraft/advancement/recipes/transportation/crate.json new file mode 100644 index 0000000000..7181cc2f2d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/transportation/crate.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_planks": { + "conditions": { + "items": [ + { + "items": "#minecraft:planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_resin": { + "conditions": { + "items": [ + { + "items": "anvilcraft:resin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:crate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_planks", + "has_resin" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:crate" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/abnormal.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/abnormal.json new file mode 100644 index 0000000000..cb947529df --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/abnormal.json @@ -0,0 +1,6 @@ +{ + "type": "anvilcraft:abnormal", + "item": { + "id": "anvilcraft:abnormal_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/anvil.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/anvil.json new file mode 100644 index 0000000000..bfadb11f66 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/anvil.json @@ -0,0 +1,29 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:anvil_amulet" + }, + "obtain": { + "direct_entity": { + "slots": { + "weapon": { + "items": "#anvilcraft:tools/anvil_hammer" + } + } + }, + "source_entity": { + "type_specific": { + "type": "anvilcraft:falling_block", + "block": { + "blocks": "#minecraft:anvil" + } + } + }, + "tags": [ + { + "expected": true, + "id": "anvilcraft:amulet_valid/anvil" + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/cat.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/cat.json new file mode 100644 index 0000000000..4636de162c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/cat.json @@ -0,0 +1,11 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:cat_amulet" + }, + "obtain": { + "source_entity": { + "type": "#anvilcraft:amulet_valid/cat" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/comrade.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/comrade.json new file mode 100644 index 0000000000..1f3f2b2232 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/comrade.json @@ -0,0 +1,6 @@ +{ + "type": "anvilcraft:comrade", + "item": { + "id": "anvilcraft:comrade_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/dog.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/dog.json new file mode 100644 index 0000000000..c458d2f8c2 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/dog.json @@ -0,0 +1,11 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:dog_amulet" + }, + "obtain": { + "source_entity": { + "type": "#anvilcraft:amulet_valid/dog" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/emerald.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/emerald.json new file mode 100644 index 0000000000..d8aa57d705 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/emerald.json @@ -0,0 +1,11 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:emerald_amulet" + }, + "obtain": { + "source_entity": { + "type": "#anvilcraft:amulet_valid/emerald" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/feather.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/feather.json new file mode 100644 index 0000000000..be0e1772c4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/feather.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:feather_amulet" + }, + "obtain": { + "tags": [ + { + "expected": true, + "id": "anvilcraft:amulet_valid/feather" + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/gem.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/gem.json new file mode 100644 index 0000000000..e436f9fb0a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/gem.json @@ -0,0 +1,6 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:gem_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/nature.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/nature.json new file mode 100644 index 0000000000..33a5cfb089 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/nature.json @@ -0,0 +1,6 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:nature_amulet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/ruby.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/ruby.json new file mode 100644 index 0000000000..13ea234cc2 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/ruby.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:ruby_amulet" + }, + "obtain": { + "tags": [ + { + "expected": true, + "id": "anvilcraft:amulet_valid/ruby" + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/sapphire.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/sapphire.json new file mode 100644 index 0000000000..7501e7922a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/sapphire.json @@ -0,0 +1,17 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:ruby_amulet" + }, + "obtain": { + "source_entity": { + "type": "#anvilcraft:amulet_valid/sapphire" + }, + "tags": [ + { + "expected": true, + "id": "anvilcraft:amulet_valid/sapphire" + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/silence.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/silence.json new file mode 100644 index 0000000000..2c305ef871 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/silence.json @@ -0,0 +1,11 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:silence_amulet" + }, + "obtain": { + "source_entity": { + "type": "#anvilcraft:amulet_valid/silence" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/topaz.json b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/topaz.json new file mode 100644 index 0000000000..c6ddfba825 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/amulet_definition/topaz.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:normal", + "amulet": { + "id": "anvilcraft:topaz_amulet" + }, + "obtain": { + "tags": [ + { + "expected": true, + "id": "anvilcraft:amulet_valid/topaz" + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/category/anvilcraft.json b/src/generated/resources/data/anvilcraft/anvilcraft/category/anvilcraft.json new file mode 100644 index 0000000000..48cbb324fe --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/category/anvilcraft.json @@ -0,0 +1,15 @@ +{ + "type": "anvilcraft:namespace", + "icon": { + "id": "anvilcraft:royal_anvil" + }, + "name": { + "translate": "category.anvilcraft.namespace", + "with": [ + { + "mod_id": "anvilcraft" + } + ] + }, + "namespace": "anvilcraft" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/category/enchanted.json b/src/generated/resources/data/anvilcraft/anvilcraft/category/enchanted.json new file mode 100644 index 0000000000..a4da14b7d1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/category/enchanted.json @@ -0,0 +1,15 @@ +{ + "type": "anvilcraft:has_component", + "icon": { + "id": "minecraft:enchanted_book" + }, + "name": { + "translate": "category.anvilcraft.enchanted" + }, + "predicates": { + "anvilcraft:disabled_enchantments": {}, + "anvilcraft:merciless_enchantments": {}, + "minecraft:enchantments": [], + "minecraft:stored_enchantments": [] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/category/foods_and_drinks.json b/src/generated/resources/data/anvilcraft/anvilcraft/category/foods_and_drinks.json new file mode 100644 index 0000000000..b95864ec8d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/category/foods_and_drinks.json @@ -0,0 +1,15 @@ +{ + "type": "anvilcraft:has_component", + "icon": { + "id": "minecraft:apple" + }, + "name": { + "translate": "category.anvilcraft.foods_and_drinks" + }, + "predicates": { + "minecraft:food": {}, + "minecraft:potion_contents": { + "type": "neoforge:any" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/anvilcraft/category/redstone.json b/src/generated/resources/data/anvilcraft/anvilcraft/category/redstone.json new file mode 100644 index 0000000000..136cdd7bf1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/anvilcraft/category/redstone.json @@ -0,0 +1,31 @@ +{ + "type": "anvilcraft:or", + "categories": [ + { + "type": "anvilcraft:creative_mode_tab", + "icon": { + "id": "minecraft:redstone" + }, + "key": "minecraft:redstone_blocks", + "name": { + "translate": "category.anvilcraft.redstone_tab" + } + }, + { + "type": "anvilcraft:recipe_book_category", + "icon": { + "id": "minecraft:redstone" + }, + "key": "minecraft:crafting_redstone", + "name": { + "translate": "category.anvilcraft.redstone_recipe_book" + } + } + ], + "icon": { + "id": "minecraft:redstone" + }, + "name": { + "translate": "category.anvilcraft.redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/damage_type/falling_giant_anvil.json b/src/generated/resources/data/anvilcraft/damage_type/falling_giant_anvil.json new file mode 100644 index 0000000000..187eabe480 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/damage_type/falling_giant_anvil.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0.1, + "message_id": "anvilcraft.falling_giant_anvil", + "scaling": "when_caused_by_living_non_player" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/damage_type/gamma_laser.json b/src/generated/resources/data/anvilcraft/damage_type/gamma_laser.json new file mode 100644 index 0000000000..5604ba3d0e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/damage_type/gamma_laser.json @@ -0,0 +1,6 @@ +{ + "effects": "burning", + "exhaustion": 0.1, + "message_id": "anvilcraft.gamma_laser", + "scaling": "when_caused_by_living_non_player" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/damage_type/heater_burn.json b/src/generated/resources/data/anvilcraft/damage_type/heater_burn.json new file mode 100644 index 0000000000..3d9d944ee3 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/damage_type/heater_burn.json @@ -0,0 +1,6 @@ +{ + "effects": "burning", + "exhaustion": 0.1, + "message_id": "anvilcraft.heater_burn", + "scaling": "when_caused_by_living_non_player" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/damage_type/plasma_jet.json b/src/generated/resources/data/anvilcraft/damage_type/plasma_jet.json new file mode 100644 index 0000000000..811dcb224a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/damage_type/plasma_jet.json @@ -0,0 +1,6 @@ +{ + "effects": "burning", + "exhaustion": 0.1, + "message_id": "anvilcraft.plasma_jet", + "scaling": "when_caused_by_living_non_player" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_modifiers/disintegration_loot_modifier.json b/src/generated/resources/data/anvilcraft/loot_modifiers/disintegration_loot_modifier.json deleted file mode 100644 index fe09dd8f87..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_modifiers/disintegration_loot_modifier.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "anvilcraft:disintegration_loot_modifier", - "conditions": [] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_modifiers/smelting_loot_modifier.json b/src/generated/resources/data/anvilcraft/loot_modifiers/smelting_loot_modifier.json deleted file mode 100644 index 435c7961eb..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_modifiers/smelting_loot_modifier.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "anvilcraft:smelting_loot_modifier", - "conditions": [] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/advancement/root.json b/src/generated/resources/data/anvilcraft/loot_table/advancement/root.json deleted file mode 100644 index 95c8d646f0..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/advancement/root.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:guide_book" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:advancement/root" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete.json new file mode 100644 index 0000000000..2e446a4f91 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:black_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/black_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_slab.json new file mode 100644 index 0000000000..42cf940857 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:black_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:black_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/black_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_stair.json new file mode 100644 index 0000000000..a329ab76eb --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:black_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/black_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_wall.json new file mode 100644 index 0000000000..ae928caca2 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/black_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:black_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/black_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete.json new file mode 100644 index 0000000000..c64701080e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:blue_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/blue_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..80340271a1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:blue_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:blue_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/blue_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..0183d06015 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:blue_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/blue_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..fca0093e7a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/blue_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:blue_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/blue_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete.json new file mode 100644 index 0000000000..1b9e38831e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:brown_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/brown_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_slab.json new file mode 100644 index 0000000000..e96785dcf4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:brown_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:brown_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/brown_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_stair.json new file mode 100644 index 0000000000..8eded07891 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:brown_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/brown_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_wall.json new file mode 100644 index 0000000000..446e9950c1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/brown_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:brown_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/brown_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/burning_heater.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/burning_heater.json new file mode 100644 index 0000000000..eb9c2fe23f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/burning_heater.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:burning_heater" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/burning_heater" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/celestial_forging_anvil_portal.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/celestial_forging_anvil_portal.json new file mode 100644 index 0000000000..5b0a983cda --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/celestial_forging_anvil_portal.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:celestial_forging_anvil_portal" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/celestial_forging_anvil_portal" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/crate.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/crate.json new file mode 100644 index 0000000000..d24edd37d2 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/crate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:crate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/crate" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete.json new file mode 100644 index 0000000000..ee79806db6 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:cyan_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/cyan_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_slab.json new file mode 100644 index 0000000000..49e3c5bcab --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:cyan_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:cyan_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/cyan_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_stair.json new file mode 100644 index 0000000000..9c1cafa223 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:cyan_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/cyan_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_wall.json new file mode 100644 index 0000000000..e060b8490e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/cyan_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:cyan_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/cyan_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/fe_collector.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/fe_collector.json new file mode 100644 index 0000000000..363a43b844 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/fe_collector.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:fe_collector" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/fe_collector" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/fire_cauldron.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/fire_cauldron.json deleted file mode 100644 index 569553da03..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/fire_cauldron.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:cauldron" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/fire_cauldron" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete.json new file mode 100644 index 0000000000..62a6f8ad44 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:gray_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/gray_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..4530aa643f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:gray_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:gray_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/gray_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..0787ed37d4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:gray_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/gray_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..478086f08e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/gray_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:gray_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/gray_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete.json new file mode 100644 index 0000000000..d73fe4de1f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:green_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/green_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_slab.json new file mode 100644 index 0000000000..90f86fcc37 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:green_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:green_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/green_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_stair.json new file mode 100644 index 0000000000..35dc2a06e9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:green_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/green_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_wall.json new file mode 100644 index 0000000000..3a3a168ca1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/green_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:green_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/green_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/hyperdimension_storage_station.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/hyperdimension_storage_station.json new file mode 100644 index 0000000000..c6fdb92825 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/hyperdimension_storage_station.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "anvilcraft:hyperdimension_storage_station", + "condition": "minecraft:block_state_property", + "properties": { + "half": "bottom_center" + } + } + ], + "name": "anvilcraft:hyperdimension_storage_station" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/hyperdimension_storage_station" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/large_crate.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/large_crate.json new file mode 100644 index 0000000000..290e2c7c06 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/large_crate.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "anvilcraft:large_crate", + "condition": "minecraft:block_state_property", + "properties": { + "half": "bottom_center" + } + } + ], + "name": "anvilcraft:large_crate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/large_crate" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete.json new file mode 100644 index 0000000000..b22e87f52c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:light_blue_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/light_blue_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..95dfef6466 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:light_blue_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:light_blue_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/light_blue_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..eed457d198 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:light_blue_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/light_blue_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..e9b699d637 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_blue_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:light_blue_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/light_blue_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete.json new file mode 100644 index 0000000000..33b3e97ce3 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:light_gray_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/light_gray_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..5a4db754b9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:light_gray_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:light_gray_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/light_gray_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..e3d778754b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:light_gray_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/light_gray_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..3b778fb99a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/light_gray_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:light_gray_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/light_gray_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete.json new file mode 100644 index 0000000000..e02969c0b9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:lime_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/lime_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_slab.json new file mode 100644 index 0000000000..314aed3b69 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:lime_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:lime_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/lime_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_stair.json new file mode 100644 index 0000000000..df9c97b85d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:lime_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/lime_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_wall.json new file mode 100644 index 0000000000..2462326c98 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/lime_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:lime_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/lime_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete.json new file mode 100644 index 0000000000..f312b76026 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:magenta_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/magenta_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_slab.json new file mode 100644 index 0000000000..208ad398c7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:magenta_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:magenta_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/magenta_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_stair.json new file mode 100644 index 0000000000..d068165f1e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:magenta_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/magenta_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_wall.json new file mode 100644 index 0000000000..a5bb8fe62f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/magenta_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:magenta_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/magenta_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete.json new file mode 100644 index 0000000000..380307c0b7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:orange_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/orange_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_slab.json new file mode 100644 index 0000000000..b13c347046 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:orange_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:orange_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/orange_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_stair.json new file mode 100644 index 0000000000..8f03ea852a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:orange_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/orange_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_wall.json new file mode 100644 index 0000000000..ff87d42b93 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/orange_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:orange_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/orange_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete.json new file mode 100644 index 0000000000..c25a52ddb8 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:pink_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/pink_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_slab.json new file mode 100644 index 0000000000..2797cd28c3 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:pink_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:pink_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/pink_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_stair.json new file mode 100644 index 0000000000..a2ae6b1efa --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:pink_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/pink_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_wall.json new file mode 100644 index 0000000000..31dc63d0f9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/pink_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:pink_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/pink_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete.json new file mode 100644 index 0000000000..26d7307e49 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:purple_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/purple_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_slab.json new file mode 100644 index 0000000000..4697014d6b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:purple_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:purple_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/purple_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_stair.json new file mode 100644 index 0000000000..934136cf3c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:purple_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/purple_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_wall.json new file mode 100644 index 0000000000..0ebb403a66 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/purple_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:purple_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/purple_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete.json new file mode 100644 index 0000000000..56a2f2d3d7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:red_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/red_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_slab.json new file mode 100644 index 0000000000..001a764bcd --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:red_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:red_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/red_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_stair.json new file mode 100644 index 0000000000..97cb81b3b8 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:red_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/red_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_wall.json new file mode 100644 index 0000000000..1ee859f358 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/red_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:red_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/red_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black.json deleted file mode 100644 index 2b5c26df4e..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_black" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_black" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_slab.json deleted file mode 100644 index 42d46dda4d..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_black_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_black_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_black_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_stair.json deleted file mode 100644 index b0b20984cb..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_black_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_black_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_wall.json deleted file mode 100644 index 5be052d5af..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_black_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_black_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_black_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue.json deleted file mode 100644 index 06d04797bf..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_blue" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_blue" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_slab.json deleted file mode 100644 index e185cec8db..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_blue_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_blue_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_blue_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_stair.json deleted file mode 100644 index ff1860127f..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_blue_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_blue_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_wall.json deleted file mode 100644 index e4725cdb94..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_blue_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_blue_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_blue_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown.json deleted file mode 100644 index 34ae1ef769..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_brown" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_brown" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_slab.json deleted file mode 100644 index 0ea8ea5499..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_brown_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_brown_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_brown_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_stair.json deleted file mode 100644 index fb9389be2c..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_brown_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_brown_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_wall.json deleted file mode 100644 index bad6c72849..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_brown_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_brown_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_brown_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan.json deleted file mode 100644 index 9ca70bc5f9..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_cyan" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_cyan" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_slab.json deleted file mode 100644 index 6944322b39..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_cyan_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_cyan_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_cyan_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_stair.json deleted file mode 100644 index cafe97fe20..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_cyan_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_cyan_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_wall.json deleted file mode 100644 index 78bdf5ad64..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_cyan_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_cyan_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_cyan_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray.json deleted file mode 100644 index e0d25feeb5..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_gray" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_gray" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_slab.json deleted file mode 100644 index b66fab3790..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_gray_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_gray_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_gray_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_stair.json deleted file mode 100644 index 5a8318756c..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_gray_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_gray_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_wall.json deleted file mode 100644 index e807fa1f4f..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_gray_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_gray_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_gray_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green.json deleted file mode 100644 index 6208050cea..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_green" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_green" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_slab.json deleted file mode 100644 index 76498e5dd5..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_green_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_green_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_green_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_stair.json deleted file mode 100644 index 286cb444be..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_green_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_green_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_wall.json deleted file mode 100644 index e64817df7c..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_green_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_green_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_green_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue.json deleted file mode 100644 index 870066df23..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_light_blue" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_light_blue" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_slab.json deleted file mode 100644 index 10fd55c74f..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_light_blue_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_light_blue_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_light_blue_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_stair.json deleted file mode 100644 index 5a2a3d55e6..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_light_blue_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_light_blue_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_wall.json deleted file mode 100644 index 9c768aca05..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_blue_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_light_blue_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_light_blue_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray.json deleted file mode 100644 index 4ae5e1fae7..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_light_gray" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_light_gray" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_slab.json deleted file mode 100644 index 3a5f4f7741..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_light_gray_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_light_gray_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_light_gray_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_stair.json deleted file mode 100644 index 8d999e1b84..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_light_gray_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_light_gray_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_wall.json deleted file mode 100644 index a73c5c7f8c..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_light_gray_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_light_gray_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_light_gray_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime.json deleted file mode 100644 index 46052df260..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_lime" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_lime" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_slab.json deleted file mode 100644 index d7929bce86..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_lime_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_lime_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_lime_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_stair.json deleted file mode 100644 index a01b473344..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_lime_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_lime_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_wall.json deleted file mode 100644 index a65c0f738b..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_lime_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_lime_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_lime_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta.json deleted file mode 100644 index 3f1ae55110..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_magenta" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_magenta" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_slab.json deleted file mode 100644 index b01c9cc8c3..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_magenta_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_magenta_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_magenta_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_stair.json deleted file mode 100644 index bd6d549b6c..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_magenta_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_magenta_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_wall.json deleted file mode 100644 index 73915637bf..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_magenta_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_magenta_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_magenta_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange.json deleted file mode 100644 index f263042d9d..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_orange" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_orange" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_slab.json deleted file mode 100644 index 228becae91..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_orange_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_orange_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_orange_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_stair.json deleted file mode 100644 index 1ac1501197..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_orange_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_orange_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_wall.json deleted file mode 100644 index 156d67814a..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_orange_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_orange_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_orange_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink.json deleted file mode 100644 index f07cc41d7f..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_pink" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_pink" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_slab.json deleted file mode 100644 index 19da0b3dd6..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_pink_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_pink_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_pink_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_stair.json deleted file mode 100644 index 06a6f9844a..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_pink_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_pink_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_wall.json deleted file mode 100644 index 2078d0b2a3..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_pink_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_pink_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_pink_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple.json deleted file mode 100644 index 1b628a7c5b..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_purple" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_purple" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_slab.json deleted file mode 100644 index 2db65ae07a..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_purple_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_purple_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_purple_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_stair.json deleted file mode 100644 index 67aacdf429..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_purple_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_purple_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_wall.json deleted file mode 100644 index 35ea7fc6ab..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_purple_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_purple_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_purple_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red.json deleted file mode 100644 index a223674803..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_red" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_red" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_slab.json deleted file mode 100644 index eed48e7ae3..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_red_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_red_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_red_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_stair.json deleted file mode 100644 index 74a2d53837..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_red_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_red_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_wall.json deleted file mode 100644 index 8b380e2ddf..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_red_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_red_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_red_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white.json deleted file mode 100644 index bac794a125..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_white" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_white" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_slab.json deleted file mode 100644 index d3d85c75c6..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_white_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_white_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_white_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_stair.json deleted file mode 100644 index f4f3993b09..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_white_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_white_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_wall.json deleted file mode 100644 index fec20bba77..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_white_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_white_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_white_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow.json deleted file mode 100644 index 33940370d5..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_yellow" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_yellow" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_slab.json deleted file mode 100644 index d42d711107..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "anvilcraft:reinforced_concrete_yellow_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "anvilcraft:reinforced_concrete_yellow_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_yellow_slab" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_stair.json deleted file mode 100644 index e1e3cd68d1..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_stair.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_yellow_stair" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_yellow_stair" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_wall.json deleted file mode 100644 index 1f521e69dd..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/blocks/reinforced_concrete_yellow_wall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:reinforced_concrete_yellow_wall" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:blocks/reinforced_concrete_yellow_wall" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete.json new file mode 100644 index 0000000000..8d1ecd222d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:white_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/white_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_slab.json new file mode 100644 index 0000000000..d52ddfc427 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:white_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:white_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/white_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_stair.json new file mode 100644 index 0000000000..bff4ae5d11 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:white_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/white_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_wall.json new file mode 100644 index 0000000000..e59b1d97bd --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/white_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:white_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/white_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete.json new file mode 100644 index 0000000000..86e43f156a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:yellow_reinforced_concrete" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/yellow_reinforced_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_slab.json new file mode 100644 index 0000000000..5dd5a8758d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "anvilcraft:yellow_reinforced_concrete_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "anvilcraft:yellow_reinforced_concrete_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/yellow_reinforced_concrete_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_stair.json new file mode 100644 index 0000000000..ece880604d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_stair.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:yellow_reinforced_concrete_stair" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/yellow_reinforced_concrete_stair" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_wall.json new file mode 100644 index 0000000000..ad3df10f8e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/loot_table/blocks/yellow_reinforced_concrete_wall.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft:yellow_reinforced_concrete_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft:blocks/yellow_reinforced_concrete_wall" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/creeper.json b/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/creeper.json deleted file mode 100644 index 8e74bf5af6..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/creeper.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:creeper_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.25, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:creeper_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.05, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:creeper_head" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:entities/beheading/minecraft/creeper" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/ender_dragon.json b/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/ender_dragon.json deleted file mode 100644 index 4811cd6d40..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/ender_dragon.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 1.0, - "per_level_above_first": 0.0 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:dragon_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 1.0, - "per_level_above_first": 0.0 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.25, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:dragon_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 1.0, - "per_level_above_first": 0.0 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.05, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:dragon_head" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:entities/beheading/minecraft/ender_dragon" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/piglin.json b/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/piglin.json deleted file mode 100644 index d13e414ce1..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/piglin.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:piglin_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.25, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:piglin_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.05, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:piglin_head" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:entities/beheading/minecraft/piglin" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/player.json b/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/player.json deleted file mode 100644 index 6688c6a42b..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/player.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 1.0, - "per_level_above_first": 0.0 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "entity": "this", - "function": "minecraft:fill_player_head" - } - ], - "name": "minecraft:player_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 1.0, - "per_level_above_first": 0.0 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.25, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "entity": "this", - "function": "minecraft:fill_player_head" - } - ], - "name": "minecraft:player_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 1.0, - "per_level_above_first": 0.0 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.05, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "entity": "this", - "function": "minecraft:fill_player_head" - } - ], - "name": "minecraft:player_head" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:entities/beheading/minecraft/player" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/skeleton.json b/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/skeleton.json deleted file mode 100644 index ecfa80c436..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/skeleton.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:skeleton_skull" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.25, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:skeleton_skull" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.05, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:skeleton_skull" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:entities/beheading/minecraft/skeleton" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/wither_skeleton.json b/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/wither_skeleton.json deleted file mode 100644 index eaa14a8de9..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/wither_skeleton.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.07, - "per_level_above_first": 0.02 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:wither_skeleton_skull" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.07, - "per_level_above_first": 0.02 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.25, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:wither_skeleton_skull" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.07, - "per_level_above_first": 0.02 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.05, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:wither_skeleton_skull" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:entities/beheading/minecraft/wither_skeleton" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/zombie.json b/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/zombie.json deleted file mode 100644 index d96f627bee..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/entities/beheading/minecraft/zombie.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:zombie_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.25, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:zombie_head" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:random_chance_with_enchanted_bonus", - "enchanted_chance": { - "type": "minecraft:linear", - "base": 0.01, - "per_level_above_first": 0.01 - }, - "enchantment": "anvilcraft:beheading", - "unenchanted_chance": 0.0 - }, - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "anvilcraft:match_data_component", - "predicate": { - "anvilcraft:merciless": {} - } - } - }, - { - "chance": 0.05, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:zombie_head" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:entities/beheading/minecraft/zombie" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/common.json b/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/common.json deleted file mode 100644 index 2b5e7b20da..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/common.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "chance": 0.1, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "anvilcraft:crab_claw" - }, - { - "type": "minecraft:item", - "name": "minecraft:seagrass", - "weight": 15 - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:gameplay/crab_trap/common" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/jungle.json b/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/jungle.json deleted file mode 100644 index f7e52c3081..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/jungle.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:location_check", - "predicate": { - "biomes": [ - "minecraft:jungle", - "minecraft:bamboo_jungle", - "minecraft:sparse_jungle" - ] - } - }, - { - "chance": 0.1, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:bamboo" - }, - { - "type": "minecraft:item", - "name": "minecraft:cocoa_beans" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:gameplay/crab_trap/jungle" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/ocean.json b/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/ocean.json deleted file mode 100644 index 39ef2181f0..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/ocean.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:location_check", - "predicate": { - "biomes": [ - "minecraft:ocean", - "minecraft:cold_ocean", - "minecraft:deep_ocean", - "minecraft:deep_cold_ocean", - "minecraft:frozen_ocean", - "minecraft:deep_frozen_ocean" - ] - } - }, - { - "chance": 0.1, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:cod" - }, - { - "type": "minecraft:item", - "name": "minecraft:kelp" - }, - { - "type": "minecraft:item", - "name": "minecraft:nautilus_shell" - }, - { - "type": "minecraft:item", - "name": "minecraft:ink_sac" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:gameplay/crab_trap/ocean" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/river.json b/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/river.json deleted file mode 100644 index aaed1a24cd..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/river.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:location_check", - "predicate": { - "biomes": [ - "minecraft:river", - "minecraft:frozen_river" - ] - } - }, - { - "chance": 0.1, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:salmon" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:gameplay/crab_trap/river" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/swamp.json b/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/swamp.json deleted file mode 100644 index 63afc1f6a5..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/swamp.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:location_check", - "predicate": { - "biomes": [ - "minecraft:swamp", - "minecraft:mangrove_swamp" - ] - } - }, - { - "chance": 0.1, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:lily_pad" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:gameplay/crab_trap/swamp" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/warm_ocean.json b/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/warm_ocean.json deleted file mode 100644 index cbfc18b0fe..0000000000 --- a/src/generated/resources/data/anvilcraft/loot_table/gameplay/crab_trap/warm_ocean.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:location_check", - "predicate": { - "biomes": [ - "minecraft:warm_ocean", - "minecraft:lukewarm_ocean", - "minecraft:deep_lukewarm_ocean" - ] - } - }, - { - "chance": 0.1, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:tropical_fish" - }, - { - "type": "minecraft:item", - "name": "minecraft:pufferfish" - }, - { - "type": "minecraft:item", - "name": "minecraft:ink_sac" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "anvilcraft:gameplay/crab_trap/warm_ocean" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/activator_sliding_rail.json b/src/generated/resources/data/anvilcraft/recipe/activator_sliding_rail.json index ef3b1a26be..a039be742b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/activator_sliding_rail.json +++ b/src/generated/resources/data/anvilcraft/recipe/activator_sliding_rail.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "R": { - "item": "minecraft:redstone_block" - }, - "S": { - "item": "anvilcraft:sliding_rail" - } + "R": "minecraft:redstone_block", + "S": "anvilcraft:sliding_rail" }, "pattern": [ "SSS", diff --git a/src/generated/resources/data/anvilcraft/recipe/active_silencer.json b/src/generated/resources/data/anvilcraft/recipe/active_silencer.json index fa4639c534..d4689466ec 100644 --- a/src/generated/resources/data/anvilcraft/recipe/active_silencer.json +++ b/src/generated/resources/data/anvilcraft/recipe/active_silencer.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:amethyst_block" - }, - "B": { - "item": "minecraft:note_block" - }, - "C": { - "item": "anvilcraft:processor" - }, - "D": { - "item": "anvilcraft:piezoelectric_crystal" - } + "A": "minecraft:amethyst_block", + "B": "minecraft:note_block", + "C": "anvilcraft:processor", + "D": "anvilcraft:piezoelectric_crystal" }, "pattern": [ "ABA", @@ -21,7 +13,6 @@ "BDB" ], "result": { - "count": 1, "id": "anvilcraft:active_silencer" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/active_silencer_old.json b/src/generated/resources/data/anvilcraft/recipe/active_silencer_old.json index 65250c88de..c2090bd35f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/active_silencer_old.json +++ b/src/generated/resources/data/anvilcraft/recipe/active_silencer_old.json @@ -2,22 +2,15 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:amethyst_block" - }, - "B": { - "item": "minecraft:note_block" - }, - "C": { - "item": "minecraft:sculk_sensor" - } + "A": "minecraft:amethyst_block", + "B": "minecraft:note_block", + "C": "minecraft:sculk_sensor" }, "pattern": [ "ABA", "ACA" ], "result": { - "count": 1, "id": "anvilcraft:active_silencer" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/advanced_comparator.json b/src/generated/resources/data/anvilcraft/recipe/advanced_comparator.json index 6b89500500..86d5f75266 100644 --- a/src/generated/resources/data/anvilcraft/recipe/advanced_comparator.json +++ b/src/generated/resources/data/anvilcraft/recipe/advanced_comparator.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "B": { - "item": "anvilcraft:circuit_board" - }, - "C": { - "item": "minecraft:comparator" - }, - "I": { - "item": "minecraft:iron_ingot" - }, - "R": { - "item": "minecraft:redstone_torch" - } + "B": "anvilcraft:circuit_board", + "C": "minecraft:comparator", + "I": "minecraft:iron_ingot", + "R": "minecraft:redstone_torch" }, "pattern": [ " R ", @@ -21,7 +13,6 @@ "III" ], "result": { - "count": 1, "id": "anvilcraft:advanced_comparator" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/amber.json b/src/generated/resources/data/anvilcraft/recipe/amber.json index 07be9ca6e4..e41065104b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/amber.json +++ b/src/generated/resources/data/anvilcraft/recipe/amber.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:amber_block" - } + "anvilcraft:amber_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/amber_block.json b/src/generated/resources/data/anvilcraft/recipe/amber_block.json index 17cc37a40f..3eb22bbd9d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/amber_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/amber_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:amber" - } + "A": "anvilcraft:amber" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:amber_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/amethyst_axe.json b/src/generated/resources/data/anvilcraft/recipe/amethyst_axe.json index ab5714b4ee..bf0278bc8e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/amethyst_axe.json +++ b/src/generated/resources/data/anvilcraft/recipe/amethyst_axe.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "B": { - "item": "minecraft:stick" - } + "A": "minecraft:amethyst_shard", + "B": "minecraft:stick" }, "pattern": [ "AA", @@ -17,12 +13,9 @@ "result": { "components": { "minecraft:enchantments": { - "levels": { - "anvilcraft:felling": 1 - } + "anvilcraft:felling": 1 } }, - "count": 1, "id": "anvilcraft:amethyst_axe" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/amethyst_hoe.json b/src/generated/resources/data/anvilcraft/recipe/amethyst_hoe.json index b0bd8d77b3..8911ca5981 100644 --- a/src/generated/resources/data/anvilcraft/recipe/amethyst_hoe.json +++ b/src/generated/resources/data/anvilcraft/recipe/amethyst_hoe.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "B": { - "item": "minecraft:stick" - } + "A": "minecraft:amethyst_shard", + "B": "minecraft:stick" }, "pattern": [ "AA", @@ -17,12 +13,9 @@ "result": { "components": { "minecraft:enchantments": { - "levels": { - "anvilcraft:harvest": 1 - } + "anvilcraft:harvest": 1 } }, - "count": 1, "id": "anvilcraft:amethyst_hoe" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/amethyst_pickaxe.json b/src/generated/resources/data/anvilcraft/recipe/amethyst_pickaxe.json index a2e57a0075..7466341c3d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/amethyst_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/recipe/amethyst_pickaxe.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "B": { - "item": "minecraft:stick" - } + "A": "minecraft:amethyst_shard", + "B": "minecraft:stick" }, "pattern": [ "AAA", @@ -17,12 +13,9 @@ "result": { "components": { "minecraft:enchantments": { - "levels": { - "minecraft:fortune": 3 - } + "minecraft:fortune": 3 } }, - "count": 1, "id": "anvilcraft:amethyst_pickaxe" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/amethyst_shovel.json b/src/generated/resources/data/anvilcraft/recipe/amethyst_shovel.json index 15b1cb9d6b..4405e3ffcd 100644 --- a/src/generated/resources/data/anvilcraft/recipe/amethyst_shovel.json +++ b/src/generated/resources/data/anvilcraft/recipe/amethyst_shovel.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "B": { - "item": "minecraft:stick" - } + "A": "minecraft:amethyst_shard", + "B": "minecraft:stick" }, "pattern": [ "A", @@ -17,12 +13,9 @@ "result": { "components": { "minecraft:enchantments": { - "levels": { - "minecraft:efficiency": 3 - } + "minecraft:efficiency": 3 } }, - "count": 1, "id": "anvilcraft:amethyst_shovel" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/amethyst_sword.json b/src/generated/resources/data/anvilcraft/recipe/amethyst_sword.json index 78896d9445..997d0d33ce 100644 --- a/src/generated/resources/data/anvilcraft/recipe/amethyst_sword.json +++ b/src/generated/resources/data/anvilcraft/recipe/amethyst_sword.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "B": { - "item": "minecraft:stick" - } + "A": "minecraft:amethyst_shard", + "B": "minecraft:stick" }, "pattern": [ "A", @@ -17,12 +13,9 @@ "result": { "components": { "minecraft:enchantments": { - "levels": { - "anvilcraft:beheading": 1 - } + "anvilcraft:beheading": 1 } }, - "count": 1, "id": "anvilcraft:amethyst_sword" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/anvil_9.json b/src/generated/resources/data/anvilcraft/recipe/anvil_9.json index 3a504f732d..e8aa1e679b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/anvil_9.json +++ b/src/generated/resources/data/anvilcraft/recipe/anvil_9.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:heavy_iron_block" - }, - "B": { - "item": "minecraft:iron_block" - } + "A": "anvilcraft:heavy_iron_block", + "B": "minecraft:iron_block" }, "pattern": [ "AAA", diff --git a/src/generated/resources/data/anvilcraft/recipe/anvil_hammer.json b/src/generated/resources/data/anvilcraft/recipe/anvil_hammer.json index 821f56a9f2..2a1f40938a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/anvil_hammer.json +++ b/src/generated/resources/data/anvilcraft/recipe/anvil_hammer.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "minecraft:anvil" - }, - "B": { - "item": "minecraft:lightning_rod" - }, - "C": { - "item": "minecraft:iron_ingot" - } + "A": "minecraft:anvil", + "B": "minecraft:lightning_rod", + "C": "minecraft:iron_ingot" }, "pattern": [ "A", @@ -18,7 +12,6 @@ "C" ], "result": { - "count": 1, "id": "anvilcraft:anvil_hammer" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/batch_crafter.json b/src/generated/resources/data/anvilcraft/recipe/batch_crafter.json index 45905778e0..acdf0a8125 100644 --- a/src/generated/resources/data/anvilcraft/recipe/batch_crafter.json +++ b/src/generated/resources/data/anvilcraft/recipe/batch_crafter.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "minecraft:glass" - }, - "B": { - "item": "minecraft:crafter" - }, - "D": { - "item": "anvilcraft:magnetoelectric_core" - }, - "E": { - "item": "anvilcraft:circuit_board" - } + "A": "minecraft:glass", + "B": "minecraft:crafter", + "D": "anvilcraft:magnetoelectric_core", + "E": "anvilcraft:circuit_board" }, "pattern": [ "ABA", @@ -21,7 +13,6 @@ "AEA" ], "result": { - "count": 1, "id": "anvilcraft:batch_crafter" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/batch_cutter.json b/src/generated/resources/data/anvilcraft/recipe/batch_cutter.json index 101a606dac..4007d442b8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/batch_cutter.json +++ b/src/generated/resources/data/anvilcraft/recipe/batch_cutter.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "minecraft:glass" - }, - "B": { - "item": "minecraft:stonecutter" - }, - "D": { - "item": "anvilcraft:magnetoelectric_core" - }, - "E": { - "item": "anvilcraft:circuit_board" - } + "A": "minecraft:glass", + "B": "minecraft:stonecutter", + "D": "anvilcraft:magnetoelectric_core", + "E": "anvilcraft:circuit_board" }, "pattern": [ "ABA", @@ -21,7 +13,6 @@ "AEA" ], "result": { - "count": 1, "id": "anvilcraft:batch_cutter" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/black_chocolate_block.json b/src/generated/resources/data/anvilcraft/recipe/black_chocolate_block.json index 860ae56414..fcd0749a50 100644 --- a/src/generated/resources/data/anvilcraft/recipe/black_chocolate_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/black_chocolate_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:chocolate_black" - } + "A": "anvilcraft:chocolate_black" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:black_chocolate_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/black_chocolate_from_block.json b/src/generated/resources/data/anvilcraft/recipe/black_chocolate_from_block.json index 0f53c467d7..025202209b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/black_chocolate_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/black_chocolate_from_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:black_chocolate_block" - } + "anvilcraft:black_chocolate_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/black_chocolate_slab.json b/src/generated/resources/data/anvilcraft/recipe/black_chocolate_slab.json index 4e24145d3c..7f04364b83 100644 --- a/src/generated/resources/data/anvilcraft/recipe/black_chocolate_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/black_chocolate_slab.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:black_chocolate_block" - } + "A": "anvilcraft:black_chocolate_block" }, "pattern": [ "AAA" diff --git a/src/generated/resources/data/anvilcraft/recipe/black_chocolate_stairs.json b/src/generated/resources/data/anvilcraft/recipe/black_chocolate_stairs.json index d7d367b2ec..ef38570d5e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/black_chocolate_stairs.json +++ b/src/generated/resources/data/anvilcraft/recipe/black_chocolate_stairs.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:black_chocolate_block" - } + "A": "anvilcraft:black_chocolate_block" }, "pattern": [ "A ", diff --git a/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_slab.json new file mode 100644 index 0000000000..5856bb3fc5 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:black_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:black_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_stair.json new file mode 100644 index 0000000000..bd248f9ad9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:black_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:black_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_wall.json new file mode 100644 index 0000000000..96029fbdaa --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/black_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:black_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:black_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/lead_ingot.json b/src/generated/resources/data/anvilcraft/recipe/blasting/lead_ingot.json index bb79daf5e3..e61d8e8940 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/lead_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/lead_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:lead_ingot", - "ingredient": { - "item": "anvilcraft:raw_lead" - }, + "ingredient": "anvilcraft:raw_lead", "result": { - "count": 1, "id": "anvilcraft:lead_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/lead_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/blasting/lead_ingot_from_ore.json index aae6f2e017..bb8cef0631 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/lead_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/lead_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:lead_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_lead_ore" - }, + "ingredient": "anvilcraft:deepslate_lead_ore", "result": { - "count": 1, "id": "anvilcraft:lead_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/silver_ingot.json b/src/generated/resources/data/anvilcraft/recipe/blasting/silver_ingot.json index dabdb0ed0b..ccfffe3fd8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/silver_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/silver_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:silver_ingot", - "ingredient": { - "item": "anvilcraft:raw_silver" - }, + "ingredient": "anvilcraft:raw_silver", "result": { - "count": 1, "id": "anvilcraft:silver_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/silver_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/blasting/silver_ingot_from_ore.json index b07a044b8d..db994fc4b2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/silver_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/silver_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:silver_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_silver_ore" - }, + "ingredient": "anvilcraft:deepslate_silver_ore", "result": { - "count": 1, "id": "anvilcraft:silver_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/tin_ingot.json b/src/generated/resources/data/anvilcraft/recipe/blasting/tin_ingot.json index 4f62e88cb3..5a20235d7c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/tin_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/tin_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:tin_ingot", - "ingredient": { - "item": "anvilcraft:raw_tin" - }, + "ingredient": "anvilcraft:raw_tin", "result": { - "count": 1, "id": "anvilcraft:tin_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/tin_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/blasting/tin_ingot_from_ore.json index e40f836cde..255f8b024a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/tin_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/tin_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:tin_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_tin_ore" - }, + "ingredient": "anvilcraft:deepslate_tin_ore", "result": { - "count": 1, "id": "anvilcraft:tin_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/titanium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/blasting/titanium_ingot.json index 8aeca5dfda..d4976e6acf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/titanium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/titanium_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:titanium_ingot", - "ingredient": { - "item": "anvilcraft:raw_titanium" - }, + "ingredient": "anvilcraft:raw_titanium", "result": { - "count": 1, "id": "anvilcraft:titanium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/titanium_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/blasting/titanium_ingot_from_ore.json index fc45e5acd2..884e0d72a7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/titanium_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/titanium_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:titanium_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_titanium_ore" - }, + "ingredient": "anvilcraft:deepslate_titanium_ore", "result": { - "count": 1, "id": "anvilcraft:titanium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/tungsten_ingot.json b/src/generated/resources/data/anvilcraft/recipe/blasting/tungsten_ingot.json index 8cb5bcad25..8232cd0ae0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/tungsten_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/tungsten_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:tungsten_ingot", - "ingredient": { - "item": "anvilcraft:raw_tungsten" - }, + "ingredient": "anvilcraft:raw_tungsten", "result": { - "count": 1, "id": "anvilcraft:tungsten_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/tungsten_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/blasting/tungsten_ingot_from_ore.json index ffc6d31f0a..56a1ef0bcf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/tungsten_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/tungsten_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:tungsten_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_tungsten_ore" - }, + "ingredient": "anvilcraft:deepslate_tungsten_ore", "result": { - "count": 1, "id": "anvilcraft:tungsten_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/uranium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/blasting/uranium_ingot.json index 080495319f..7d5df15f9b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/uranium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/uranium_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:uranium_ingot", - "ingredient": { - "item": "anvilcraft:raw_uranium" - }, + "ingredient": "anvilcraft:raw_uranium", "result": { - "count": 1, "id": "anvilcraft:uranium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/uranium_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/blasting/uranium_ingot_from_ore.json index 664c483124..d0bff081b7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/uranium_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/uranium_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:uranium_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_uranium_ore" - }, + "ingredient": "anvilcraft:deepslate_uranium_ore", "result": { - "count": 1, "id": "anvilcraft:uranium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/zinc_ingot.json b/src/generated/resources/data/anvilcraft/recipe/blasting/zinc_ingot.json index eec9f13801..1f43219c10 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/zinc_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/zinc_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:zinc_ingot", - "ingredient": { - "item": "anvilcraft:raw_zinc" - }, + "ingredient": "anvilcraft:raw_zinc", "result": { - "count": 1, "id": "anvilcraft:zinc_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blasting/zinc_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/blasting/zinc_ingot_from_ore.json index 64aace512f..68759bc0cc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/blasting/zinc_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/blasting/zinc_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 100, "experience": 1.0, "group": "anvilcraft:zinc_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_zinc_ore" - }, + "ingredient": "anvilcraft:deepslate_zinc_ore", "result": { - "count": 1, "id": "anvilcraft:zinc_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_comparator.json b/src/generated/resources/data/anvilcraft/recipe/block_comparator.json index 696c29c635..5817be0da2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/block_comparator.json +++ b/src/generated/resources/data/anvilcraft/recipe/block_comparator.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "minecraft:observer" - }, - "B": { - "item": "minecraft:comparator" - }, - "C": { - "item": "anvilcraft:circuit_board" - }, - "D": { - "tag": "c:dusts/redstone" - } + "A": "minecraft:observer", + "B": "minecraft:comparator", + "C": "anvilcraft:circuit_board", + "D": "#c:dusts/redstone" }, "pattern": [ "ABA", @@ -21,7 +13,6 @@ " D " ], "result": { - "count": 1, "id": "anvilcraft:block_comparator" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_crush/burning_heater.json b/src/generated/resources/data/anvilcraft/recipe/block_crush/burning_heater.json new file mode 100644 index 0000000000..62f8311761 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_crush/burning_heater.json @@ -0,0 +1,9 @@ +{ + "type": "anvilcraft:block_crush", + "input": { + "blocks": "minecraft:furnace" + }, + "result": { + "block": "anvilcraft:burning_heater" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_devourer.json b/src/generated/resources/data/anvilcraft/recipe/block_devourer.json index 8477ca1ea3..2d4a0754e0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/block_devourer.json +++ b/src/generated/resources/data/anvilcraft/recipe/block_devourer.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "minecraft:netherite_ingot" - }, - "B": { - "item": "minecraft:dragon_head" - }, - "C": { - "item": "minecraft:redstone" - }, - "D": { - "item": "minecraft:cobblestone" - } + "A": "minecraft:netherite_ingot", + "B": "minecraft:dragon_head", + "C": "minecraft:redstone", + "D": "minecraft:cobblestone" }, "pattern": [ "DA ", @@ -21,7 +13,6 @@ "DA " ], "result": { - "count": 1, "id": "anvilcraft:block_devourer" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_placer.json b/src/generated/resources/data/anvilcraft/recipe/block_placer.json index c67e9a4426..8b1e09a6d6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/block_placer.json +++ b/src/generated/resources/data/anvilcraft/recipe/block_placer.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "minecraft:cobblestone" - }, - "B": { - "item": "anvilcraft:crab_claw" - }, - "C": { - "item": "minecraft:redstone" - }, - "D": { - "item": "minecraft:hopper" - } + "A": "minecraft:cobblestone", + "B": "anvilcraft:crab_claw", + "C": "minecraft:redstone", + "D": "minecraft:hopper" }, "pattern": [ "AAA", @@ -21,7 +13,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:block_placer" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_bars.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_bars.json new file mode 100644 index 0000000000..572549bc4f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_bars.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:copper_bars" + } + ], + "result": { + "block": "minecraft:waxed_copper_bars" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_chain.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_chain.json new file mode 100644 index 0000000000..39bd03abb6 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_chain.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:copper_chain" + } + ], + "result": { + "block": "minecraft:waxed_copper_chain" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_chest.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_chest.json new file mode 100644 index 0000000000..755971831a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_chest.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:copper_chest" + } + ], + "result": { + "block": "minecraft:waxed_copper_chest" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_golem_statue.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_golem_statue.json new file mode 100644 index 0000000000..d6a07f4153 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_golem_statue.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:copper_golem_statue" + } + ], + "result": { + "block": "minecraft:waxed_copper_golem_statue" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_lantern.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_lantern.json new file mode 100644 index 0000000000..ca55a66795 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_copper_lantern.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:copper_lantern" + } + ], + "result": { + "block": "minecraft:waxed_copper_lantern" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_bars.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_bars.json new file mode 100644 index 0000000000..21e0e42b79 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_bars.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:exposed_copper_bars" + } + ], + "result": { + "block": "minecraft:waxed_exposed_copper_bars" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_chain.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_chain.json new file mode 100644 index 0000000000..88afb49f62 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_chain.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:exposed_copper_chain" + } + ], + "result": { + "block": "minecraft:waxed_exposed_copper_chain" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_chest.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_chest.json new file mode 100644 index 0000000000..3455b8a83b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_chest.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:exposed_copper_chest" + } + ], + "result": { + "block": "minecraft:waxed_exposed_copper_chest" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_golem_statue.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_golem_statue.json new file mode 100644 index 0000000000..3237454fc2 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_golem_statue.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:exposed_copper_golem_statue" + } + ], + "result": { + "block": "minecraft:waxed_exposed_copper_golem_statue" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_lantern.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_lantern.json new file mode 100644 index 0000000000..b0b22291af --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_copper_lantern.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:exposed_copper_lantern" + } + ], + "result": { + "block": "minecraft:waxed_exposed_copper_lantern" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_lightning_rod.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_lightning_rod.json new file mode 100644 index 0000000000..c7300382ff --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_exposed_lightning_rod.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:exposed_lightning_rod" + } + ], + "result": { + "block": "minecraft:waxed_exposed_lightning_rod" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_lightning_rod.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_lightning_rod.json new file mode 100644 index 0000000000..fa1a048479 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_lightning_rod.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:lightning_rod" + } + ], + "result": { + "block": "minecraft:waxed_lightning_rod" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_bars.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_bars.json new file mode 100644 index 0000000000..cb73b8823b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_bars.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:oxidized_copper_bars" + } + ], + "result": { + "block": "minecraft:waxed_oxidized_copper_bars" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_chain.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_chain.json new file mode 100644 index 0000000000..242346d7ae --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_chain.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:oxidized_copper_chain" + } + ], + "result": { + "block": "minecraft:waxed_oxidized_copper_chain" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_chest.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_chest.json new file mode 100644 index 0000000000..4c49167310 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_chest.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:oxidized_copper_chest" + } + ], + "result": { + "block": "minecraft:waxed_oxidized_copper_chest" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_golem_statue.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_golem_statue.json new file mode 100644 index 0000000000..82277504b0 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_golem_statue.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:oxidized_copper_golem_statue" + } + ], + "result": { + "block": "minecraft:waxed_oxidized_copper_golem_statue" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_lantern.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_lantern.json new file mode 100644 index 0000000000..a61cc3bf7d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_copper_lantern.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:oxidized_copper_lantern" + } + ], + "result": { + "block": "minecraft:waxed_oxidized_copper_lantern" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_lightning_rod.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_lightning_rod.json new file mode 100644 index 0000000000..7bdcd75a04 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_oxidized_lightning_rod.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:oxidized_lightning_rod" + } + ], + "result": { + "block": "minecraft:waxed_oxidized_lightning_rod" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_bars.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_bars.json new file mode 100644 index 0000000000..de17917437 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_bars.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:weathered_copper_bars" + } + ], + "result": { + "block": "minecraft:waxed_weathered_copper_bars" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_chain.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_chain.json new file mode 100644 index 0000000000..f464d078a4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_chain.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:weathered_copper_chain" + } + ], + "result": { + "block": "minecraft:waxed_weathered_copper_chain" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_chest.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_chest.json new file mode 100644 index 0000000000..f8b9cbc7fb --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_chest.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:weathered_copper_chest" + } + ], + "result": { + "block": "minecraft:waxed_weathered_copper_chest" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_golem_statue.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_golem_statue.json new file mode 100644 index 0000000000..3b3c06ef41 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_golem_statue.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:weathered_copper_golem_statue" + } + ], + "result": { + "block": "minecraft:waxed_weathered_copper_golem_statue" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_lantern.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_lantern.json new file mode 100644 index 0000000000..f982a06fbd --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_copper_lantern.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:weathered_copper_lantern" + } + ], + "result": { + "block": "minecraft:waxed_weathered_copper_lantern" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_lightning_rod.json b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_lightning_rod.json new file mode 100644 index 0000000000..e5bd649263 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/block_smear/waxed_weathered_lightning_rod.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:block_smear", + "inputs": [ + { + "blocks": "minecraft:honeycomb_block" + }, + { + "blocks": "minecraft:weathered_lightning_rod" + } + ], + "result": { + "block": "minecraft:waxed_weathered_lightning_rod" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..1131b8dbc9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:blue_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:blue_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..bb2f58490a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:blue_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:blue_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..1e0926c377 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/blue_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:blue_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/brass_block.json b/src/generated/resources/data/anvilcraft/recipe/brass_block.json index 82ccc17e67..18c2f2c83e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/brass_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/brass_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/brass" - } + "A": "#c:ingots/brass" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:brass_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/brass_ingot.json b/src/generated/resources/data/anvilcraft/recipe/brass_ingot.json index e578f45bc0..fad4efa2cf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/brass_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/brass_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:brass_ingot", "key": { - "A": { - "tag": "c:nuggets/brass" - } + "A": "#c:nuggets/brass" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:brass_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/brass_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/brass_ingot_from_block.json index 7bbc5d51f6..fa9dddf1fa 100644 --- a/src/generated/resources/data/anvilcraft/recipe/brass_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/brass_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:brass_ingot", "ingredients": [ - { - "item": "anvilcraft:brass_block" - } + "anvilcraft:brass_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/brass_nugget.json b/src/generated/resources/data/anvilcraft/recipe/brass_nugget.json index 59a9d491fb..05a9bc2077 100644 --- a/src/generated/resources/data/anvilcraft/recipe/brass_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/brass_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/brass" - } + "#c:ingots/brass" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/brass_pressure_plate_from_ingots_brass.json b/src/generated/resources/data/anvilcraft/recipe/brass_pressure_plate_from_ingots_brass.json index 08e6d07df2..d8bb6ee334 100644 --- a/src/generated/resources/data/anvilcraft/recipe/brass_pressure_plate_from_ingots_brass.json +++ b/src/generated/resources/data/anvilcraft/recipe/brass_pressure_plate_from_ingots_brass.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/brass" - } + "A": "#c:ingots/brass" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:brass_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/bronze_block.json b/src/generated/resources/data/anvilcraft/recipe/bronze_block.json index 22d3cb2a23..1e4e0136be 100644 --- a/src/generated/resources/data/anvilcraft/recipe/bronze_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/bronze_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/bronze" - } + "A": "#c:ingots/bronze" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:bronze_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/bronze_ingot.json b/src/generated/resources/data/anvilcraft/recipe/bronze_ingot.json index 23ad533b0f..2ed03aae60 100644 --- a/src/generated/resources/data/anvilcraft/recipe/bronze_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/bronze_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:bronze_ingot", "key": { - "A": { - "tag": "c:nuggets/bronze" - } + "A": "#c:nuggets/bronze" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:bronze_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/bronze_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/bronze_ingot_from_block.json index 2ab0e1adaa..60ae61ae04 100644 --- a/src/generated/resources/data/anvilcraft/recipe/bronze_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/bronze_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:bronze_ingot", "ingredients": [ - { - "item": "anvilcraft:bronze_block" - } + "anvilcraft:bronze_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/bronze_nugget.json b/src/generated/resources/data/anvilcraft/recipe/bronze_nugget.json index 70c31de597..a0d80fee06 100644 --- a/src/generated/resources/data/anvilcraft/recipe/bronze_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/bronze_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/bronze" - } + "#c:ingots/bronze" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/bronze_pressure_plate_from_ingots_bronze.json b/src/generated/resources/data/anvilcraft/recipe/bronze_pressure_plate_from_ingots_bronze.json index 3af1756749..f08d2ba2dd 100644 --- a/src/generated/resources/data/anvilcraft/recipe/bronze_pressure_plate_from_ingots_bronze.json +++ b/src/generated/resources/data/anvilcraft/recipe/bronze_pressure_plate_from_ingots_bronze.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/bronze" - } + "A": "#c:ingots/bronze" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:bronze_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_slab.json new file mode 100644 index 0000000000..e186845e06 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:brown_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:brown_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_stair.json new file mode 100644 index 0000000000..843c4fc35e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:brown_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:brown_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_wall.json new file mode 100644 index 0000000000..606a6ab4c5 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/brown_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:brown_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:brown_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/bulging/cement_cauldron.json b/src/generated/resources/data/anvilcraft/recipe/bulging/cement_cauldron.json index a43fcc3540..e9171217c7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/bulging/cement_cauldron.json +++ b/src/generated/resources/data/anvilcraft/recipe/bulging/cement_cauldron.json @@ -1,5 +1,6 @@ { "type": "anvilcraft:bulging", + "consume": 1000, "fluid": "minecraft:water", "ingredients": [ { @@ -10,6 +11,7 @@ "items": "anvilcraft:cinerite" } ], + "produce": 1000, "results": [], "transform": "anvilcraft:gray_cement" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/bulging/netherite_upgrade_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/bulging/netherite_upgrade_smithing_template.json new file mode 100644 index 0000000000..7c75749c3b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/bulging/netherite_upgrade_smithing_template.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:bulging", + "fluid": "minecraft:water", + "ingredients": [ + { + "items": "anvilcraft:ember_metal_upgrade_smithing_template" + } + ], + "results": [ + { + "id": "minecraft:netherite_upgrade_smithing_template" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/bulging/prismarine_cluster.json b/src/generated/resources/data/anvilcraft/recipe/bulging/prismarine_cluster.json index af12d2bda8..d68455bf8b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/bulging/prismarine_cluster.json +++ b/src/generated/resources/data/anvilcraft/recipe/bulging/prismarine_cluster.json @@ -1,6 +1,6 @@ { "type": "anvilcraft:bulging", - "consume": 333, + "consume": 250, "fluid": "minecraft:powder_snow", "ingredients": [ { diff --git a/src/generated/resources/data/anvilcraft/recipe/bulging/wet_sponge.json b/src/generated/resources/data/anvilcraft/recipe/bulging/wet_sponge.json index 89576b77ad..060f2ae264 100644 --- a/src/generated/resources/data/anvilcraft/recipe/bulging/wet_sponge.json +++ b/src/generated/resources/data/anvilcraft/recipe/bulging/wet_sponge.json @@ -1,6 +1,6 @@ { "type": "anvilcraft:bulging", - "consume": 333, + "consume": 250, "fluid": "minecraft:water", "ingredients": [ { diff --git a/src/generated/resources/data/anvilcraft/recipe/campfire_cooking_bread.json b/src/generated/resources/data/anvilcraft/recipe/campfire_cooking_bread.json index dbd17d32fc..8c9a709c56 100644 --- a/src/generated/resources/data/anvilcraft/recipe/campfire_cooking_bread.json +++ b/src/generated/resources/data/anvilcraft/recipe/campfire_cooking_bread.json @@ -3,11 +3,8 @@ "category": "food", "cookingtime": 600, "experience": 0.35, - "ingredient": { - "tag": "c:foods/dough" - }, + "ingredient": "#c:foods/dough", "result": { - "count": 1, "id": "minecraft:bread" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/canned_food.json b/src/generated/resources/data/anvilcraft/recipe/canned_food.json index 8974e51ad4..d66d6d54c0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/canned_food.json +++ b/src/generated/resources/data/anvilcraft/recipe/canned_food.json @@ -1,4 +1,3 @@ { - "type": "anvilcraft:canning_food", - "category": "misc" + "type": "anvilcraft:canning_food" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/capacitor_empty.json b/src/generated/resources/data/anvilcraft/recipe/capacitor_empty.json index 8d0f224d77..352ebb8e54 100644 --- a/src/generated/resources/data/anvilcraft/recipe/capacitor_empty.json +++ b/src/generated/resources/data/anvilcraft/recipe/capacitor_empty.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "tag": "c:plates/copper" - }, - "B": { - "item": "anvilcraft:resin" - } + "A": "#c:plates/copper", + "B": "anvilcraft:resin" }, "pattern": [ "A", @@ -15,7 +11,6 @@ "A" ], "result": { - "count": 1, "id": "anvilcraft:capacitor_empty" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/charge_collector.json b/src/generated/resources/data/anvilcraft/recipe/charge_collector.json index ff56af7002..dd0ad7f151 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charge_collector.json +++ b/src/generated/resources/data/anvilcraft/recipe/charge_collector.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:magnetoelectric_core" - }, - "B": { - "item": "minecraft:copper_ingot" - }, - "C": { - "item": "minecraft:iron_ingot" - } + "A": "anvilcraft:magnetoelectric_core", + "B": "minecraft:copper_ingot", + "C": "minecraft:iron_ingot" }, "pattern": [ " A ", @@ -18,7 +12,6 @@ "CCC" ], "result": { - "count": 1, "id": "anvilcraft:charge_collector" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/charger.json b/src/generated/resources/data/anvilcraft/recipe/charger.json index 446b1f9391..0b2efcad2f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:copper_ingot" - }, - "B": { - "item": "anvilcraft:magnetoelectric_core" - }, - "C": { - "item": "minecraft:iron_ingot" - }, - "D": { - "tag": "c:glass_panes" - } + "A": "minecraft:copper_ingot", + "B": "anvilcraft:magnetoelectric_core", + "C": "minecraft:iron_ingot", + "D": "#c:glass_panes" }, "pattern": [ "ADA", @@ -21,7 +13,6 @@ "CCC" ], "result": { - "count": 1, "id": "anvilcraft:charger" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_charging/capacitor.json b/src/generated/resources/data/anvilcraft/recipe/charger_charging/capacitor.json index 3707c1d7fc..2e5c1b1ac8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger_charging/capacitor.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger_charging/capacitor.json @@ -1,11 +1,8 @@ { "type": "anvilcraft:charger_charging", - "ingredient": { - "item": "anvilcraft:capacitor_empty" - }, + "ingredient": "anvilcraft:capacitor_empty", "power": -70, "result": { - "count": 1, "id": "anvilcraft:capacitor" }, "time": 1200 diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_charging/capacitor_empty.json b/src/generated/resources/data/anvilcraft/recipe/charger_charging/capacitor_empty.json index 771de0d066..afbf4f5264 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger_charging/capacitor_empty.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger_charging/capacitor_empty.json @@ -1,11 +1,8 @@ { "type": "anvilcraft:charger_charging", - "ingredient": { - "item": "anvilcraft:capacitor" - }, + "ingredient": "anvilcraft:capacitor", "power": 64, "result": { - "count": 1, "id": "anvilcraft:capacitor_empty" }, "time": 1200 diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_charging/charged_neutronium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/charger_charging/charged_neutronium_ingot.json index 0e5aee0e94..931ead0fce 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger_charging/charged_neutronium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger_charging/charged_neutronium_ingot.json @@ -1,11 +1,8 @@ { "type": "anvilcraft:charger_charging", - "ingredient": { - "tag": "anvilcraft:uncharged_neutronium_ingots" - }, + "ingredient": "#anvilcraft:uncharged_neutronium_ingots", "power": -4000, "result": { - "count": 1, "id": "anvilcraft:charged_neutronium_ingot" }, "time": 6000 diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_charging/magnet_ingot.json b/src/generated/resources/data/anvilcraft/recipe/charger_charging/magnet_ingot.json index 59f5df37a1..a2a185bf9f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger_charging/magnet_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger_charging/magnet_ingot.json @@ -1,11 +1,8 @@ { "type": "anvilcraft:charger_charging", - "ingredient": { - "item": "minecraft:iron_ingot" - }, + "ingredient": "minecraft:iron_ingot", "power": -4, "result": { - "count": 1, "id": "anvilcraft:magnet_ingot" }, "time": 40 diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_charging/neutronium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/charger_charging/neutronium_ingot.json index 1a00e1a35c..329d567edb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger_charging/neutronium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger_charging/neutronium_ingot.json @@ -1,11 +1,8 @@ { "type": "anvilcraft:charger_charging", - "ingredient": { - "item": "anvilcraft:charged_neutronium_ingot" - }, + "ingredient": "anvilcraft:charged_neutronium_ingot", "power": 3200, "result": { - "count": 1, "id": "anvilcraft:neutronium_ingot" }, "time": 6000 diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_charging/supercapacitor.json b/src/generated/resources/data/anvilcraft/recipe/charger_charging/supercapacitor.json index de40489879..3b4d6472ad 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger_charging/supercapacitor.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger_charging/supercapacitor.json @@ -1,11 +1,8 @@ { "type": "anvilcraft:charger_charging", - "ingredient": { - "item": "anvilcraft:supercapacitor_empty" - }, + "ingredient": "anvilcraft:supercapacitor_empty", "power": -700, "result": { - "count": 1, "id": "anvilcraft:supercapacitor" }, "time": 2400 diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_charging/supercapacitor_empty.json b/src/generated/resources/data/anvilcraft/recipe/charger_charging/supercapacitor_empty.json index 64d0f90c4d..0da7cad491 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger_charging/supercapacitor_empty.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger_charging/supercapacitor_empty.json @@ -1,11 +1,8 @@ { "type": "anvilcraft:charger_charging", - "ingredient": { - "item": "anvilcraft:supercapacitor" - }, + "ingredient": "anvilcraft:supercapacitor", "power": 640, "result": { - "count": 1, "id": "anvilcraft:supercapacitor_empty" }, "time": 2400 diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_from_discharger.json b/src/generated/resources/data/anvilcraft/recipe/charger_from_discharger.json index e351023a37..ff4f7aa56e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/charger_from_discharger.json +++ b/src/generated/resources/data/anvilcraft/recipe/charger_from_discharger.json @@ -2,12 +2,9 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:discharger" - } + "anvilcraft:discharger" ], "result": { - "count": 1, "id": "anvilcraft:charger" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/chipped_anvil.json b/src/generated/resources/data/anvilcraft/recipe/chipped_anvil.json index b76348b1cd..779f23b82a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chipped_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/chipped_anvil.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:iron_block" - }, - "B": { - "item": "minecraft:iron_ingot" - } + "A": "minecraft:iron_block", + "B": "minecraft:iron_ingot" }, "pattern": [ "AAB", @@ -15,7 +11,6 @@ "BBB" ], "result": { - "count": 1, "id": "minecraft:chipped_anvil" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/chipped_anvil_9.json b/src/generated/resources/data/anvilcraft/recipe/chipped_anvil_9.json index ac405edd5d..776dae06c2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chipped_anvil_9.json +++ b/src/generated/resources/data/anvilcraft/recipe/chipped_anvil_9.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:heavy_iron_block" - }, - "B": { - "item": "minecraft:iron_block" - } + "A": "anvilcraft:heavy_iron_block", + "B": "minecraft:iron_block" }, "pattern": [ "AAB", diff --git a/src/generated/resources/data/anvilcraft/recipe/chocolate.json b/src/generated/resources/data/anvilcraft/recipe/chocolate.json index 477ef93776..3f9e0c4dbb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chocolate.json +++ b/src/generated/resources/data/anvilcraft/recipe/chocolate.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:cocoa_liquor" - }, - "B": { - "item": "anvilcraft:cocoa_butter" - }, - "C": { - "item": "anvilcraft:cream" - }, - "D": { - "item": "minecraft:sugar" - } + "A": "anvilcraft:cocoa_liquor", + "B": "anvilcraft:cocoa_butter", + "C": "anvilcraft:cream", + "D": "minecraft:sugar" }, "pattern": [ "ABA", diff --git a/src/generated/resources/data/anvilcraft/recipe/chocolate_black.json b/src/generated/resources/data/anvilcraft/recipe/chocolate_black.json index ec50281ee0..1c88fa69b6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chocolate_black.json +++ b/src/generated/resources/data/anvilcraft/recipe/chocolate_black.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:cocoa_liquor" - }, - "B": { - "item": "anvilcraft:cocoa_butter" - }, - "C": { - "item": "minecraft:sugar" - } + "A": "anvilcraft:cocoa_liquor", + "B": "anvilcraft:cocoa_butter", + "C": "minecraft:sugar" }, "pattern": [ "AAA", diff --git a/src/generated/resources/data/anvilcraft/recipe/chocolate_block.json b/src/generated/resources/data/anvilcraft/recipe/chocolate_block.json index 95c0115f54..40f065a149 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chocolate_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/chocolate_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:chocolate" - } + "A": "anvilcraft:chocolate" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:chocolate_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/chocolate_from_block.json b/src/generated/resources/data/anvilcraft/recipe/chocolate_from_block.json index 2d2bb94102..09cd6767c6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chocolate_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/chocolate_from_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:chocolate_block" - } + "anvilcraft:chocolate_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/chocolate_slab.json b/src/generated/resources/data/anvilcraft/recipe/chocolate_slab.json index 2895588230..babbd82b9b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chocolate_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/chocolate_slab.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:chocolate_block" - } + "A": "anvilcraft:chocolate_block" }, "pattern": [ "AAA" diff --git a/src/generated/resources/data/anvilcraft/recipe/chocolate_stairs.json b/src/generated/resources/data/anvilcraft/recipe/chocolate_stairs.json index 67424fa6d9..17ca9676eb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chocolate_stairs.json +++ b/src/generated/resources/data/anvilcraft/recipe/chocolate_stairs.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:chocolate_block" - } + "A": "anvilcraft:chocolate_block" }, "pattern": [ "A ", diff --git a/src/generated/resources/data/anvilcraft/recipe/chocolate_white.json b/src/generated/resources/data/anvilcraft/recipe/chocolate_white.json index ff5dd4f567..b6b7953704 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chocolate_white.json +++ b/src/generated/resources/data/anvilcraft/recipe/chocolate_white.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:cocoa_butter" - }, - "B": { - "item": "anvilcraft:cream" - }, - "C": { - "item": "minecraft:sugar" - } + "A": "anvilcraft:cocoa_butter", + "B": "anvilcraft:cream", + "C": "minecraft:sugar" }, "pattern": [ "AAA", diff --git a/src/generated/resources/data/anvilcraft/recipe/chute.json b/src/generated/resources/data/anvilcraft/recipe/chute.json index 8c514d4cf6..733e86e1f8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/chute.json +++ b/src/generated/resources/data/anvilcraft/recipe/chute.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:iron_ingot" - }, - "B": { - "item": "minecraft:dropper" - } + "A": "minecraft:iron_ingot", + "B": "minecraft:dropper" }, "pattern": [ "A A", diff --git a/src/generated/resources/data/anvilcraft/recipe/circuit_board.json b/src/generated/resources/data/anvilcraft/recipe/circuit_board.json index f31774c80a..a16b381fe6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/circuit_board.json +++ b/src/generated/resources/data/anvilcraft/recipe/circuit_board.json @@ -2,21 +2,12 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:plates/copper" - }, - { - "item": "anvilcraft:hardend_resin" - }, - { - "item": "anvilcraft:hardend_resin" - }, - { - "item": "anvilcraft:hardend_resin" - } + "#c:plates/copper", + "anvilcraft:hardend_resin", + "anvilcraft:hardend_resin", + "anvilcraft:hardend_resin" ], "result": { - "count": 1, "id": "anvilcraft:circuit_board" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/cocoa_liquor.json b/src/generated/resources/data/anvilcraft/recipe/cocoa_liquor.json index 0b1e132eff..bc3fff332a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/cocoa_liquor.json +++ b/src/generated/resources/data/anvilcraft/recipe/cocoa_liquor.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:cocoa_powder" - }, - { - "item": "anvilcraft:cocoa_powder" - }, - { - "item": "anvilcraft:cocoa_butter" - } + "anvilcraft:cocoa_powder", + "anvilcraft:cocoa_powder", + "anvilcraft:cocoa_butter" ], "result": { "count": 2, diff --git a/src/generated/resources/data/anvilcraft/recipe/comparator.json b/src/generated/resources/data/anvilcraft/recipe/comparator.json index 0d6ab31d4a..a0780a23dd 100644 --- a/src/generated/resources/data/anvilcraft/recipe/comparator.json +++ b/src/generated/resources/data/anvilcraft/recipe/comparator.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "B": { - "item": "anvilcraft:hardend_resin" - }, - "Q": { - "item": "minecraft:quartz" - }, - "T": { - "item": "minecraft:redstone_torch" - } + "B": "anvilcraft:hardend_resin", + "Q": "minecraft:quartz", + "T": "minecraft:redstone_torch" }, "pattern": [ " T ", @@ -18,7 +12,6 @@ "BBB" ], "result": { - "count": 1, "id": "minecraft:comparator" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_black.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_black.json index 0a158d0afe..4a32fb36fe 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_black.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_black.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_black" + "id": "anvilcraft:black_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_blue.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_blue.json index bdefe656d1..8937747430 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_blue.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_blue.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_blue" + "id": "anvilcraft:blue_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_brown.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_brown.json index 1cb3fb6e46..a2af309756 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_brown.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_brown.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_brown" + "id": "anvilcraft:brown_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_cyan.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_cyan.json index a97995e442..fe9d99a05b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_cyan.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_cyan.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_cyan" + "id": "anvilcraft:cyan_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_gray.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_gray.json index ff648f8400..32b584ad56 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_gray.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_gray.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_gray" + "id": "anvilcraft:gray_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_green.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_green.json index e8a4513afa..7537173245 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_green.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_green.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_green" + "id": "anvilcraft:green_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_light_blue.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_light_blue.json index faaee8432d..f480b2aadb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_light_blue.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_light_blue.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_light_blue" + "id": "anvilcraft:light_blue_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_light_gray.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_light_gray.json index d65157d21c..4780f2cc88 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_light_gray.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_light_gray.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_light_gray" + "id": "anvilcraft:light_gray_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_lime.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_lime.json index 14662afddd..764ad26474 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_lime.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_lime.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_lime" + "id": "anvilcraft:lime_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_magenta.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_magenta.json index d4919d5b23..e370e21805 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_magenta.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_magenta.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_magenta" + "id": "anvilcraft:magenta_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_orange.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_orange.json index 39edff0455..e0f1e0f29b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_orange.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_orange.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_orange" + "id": "anvilcraft:orange_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_pink.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_pink.json index 8477a5f55c..7a14ef5301 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_pink.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_pink.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_pink" + "id": "anvilcraft:pink_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_purple.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_purple.json index 0380b9784b..29e0df43c9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_purple.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_purple.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_purple" + "id": "anvilcraft:purple_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_red.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_red.json index 127cb50185..7fc5c73353 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_red.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_red.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_red" + "id": "anvilcraft:red_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_white.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_white.json index 6d71993fa9..1d29ea46fc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_white.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_white.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_white" + "id": "anvilcraft:white_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_yellow.json b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_yellow.json index 60dbbeb826..83358ee1e0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_yellow.json +++ b/src/generated/resources/data/anvilcraft/recipe/concrete/anvilcraft_reinforced_concrete_yellow.json @@ -18,7 +18,7 @@ "results": [ { "count": 16, - "id": "anvilcraft:reinforced_concrete_yellow" + "id": "anvilcraft:yellow_reinforced_concrete" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/confinement_chamber.json b/src/generated/resources/data/anvilcraft/recipe/confinement_chamber.json index eb09d93678..e03c7bd754 100644 --- a/src/generated/resources/data/anvilcraft/recipe/confinement_chamber.json +++ b/src/generated/resources/data/anvilcraft/recipe/confinement_chamber.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:transcendium_nugget" - }, - "B": { - "item": "anvilcraft:magnet_ingot" - } + "A": "anvilcraft:transcendium_nugget", + "B": "anvilcraft:magnet_ingot" }, "pattern": [ "ABA", @@ -15,7 +11,6 @@ "ABA" ], "result": { - "count": 1, "id": "anvilcraft:confinement_chamber" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/controllable_sand.json b/src/generated/resources/data/anvilcraft/recipe/controllable_sand.json index 5f37da6011..6a1674e4d9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/controllable_sand.json +++ b/src/generated/resources/data/anvilcraft/recipe/controllable_sand.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "L": { - "item": "anvilcraft:levitation_powder" - }, - "R": { - "item": "minecraft:redstone" - }, - "S": { - "tag": "minecraft:sand" - } + "L": "anvilcraft:levitation_powder", + "R": "minecraft:redstone", + "S": "#minecraft:sand" }, "pattern": [ "LRL", @@ -18,7 +12,6 @@ "LRL" ], "result": { - "count": 1, "id": "anvilcraft:controllable_sand" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/cooling/cooling_ember_metal_upgrade_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/cooling/cooling_ember_metal_upgrade_smithing_template.json deleted file mode 100644 index 9410b03f82..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/cooling/cooling_ember_metal_upgrade_smithing_template.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "anvillib_recipe:in_world_recipe", - "compatible": true, - "conflicting": [ - { - "type": "anvillib_recipe:has_item_ingredient", - "item": { - "items": "anvilcraft:ember_metal_upgrade_smithing_template" - }, - "offset": [ - 0.0, - 0.0, - 0.0 - ], - "range": [ - 1.0, - 1.0, - 1.0 - ] - } - ], - "icon": { - "count": 1, - "id": "minecraft:anvil" - }, - "non_conflicting": [ - { - "type": "anvillib_recipe:has_block", - "offset": [ - 0.0, - 0.0, - 0.0 - ], - "predicate": { - "blocks": [ - "minecraft:water", - "minecraft:water_cauldron" - ] - } - } - ], - "outcomes": [ - { - "type": "anvillib_recipe:spawn_item", - "item": "minecraft:netherite_upgrade_smithing_template", - "offset": [ - 0.0, - 0.0, - 0.0 - ] - } - ], - "priority": 4, - "trigger": "anvillib_recipe:item_into_block" -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/copper_ingot_from_nugget.json b/src/generated/resources/data/anvilcraft/recipe/copper_ingot_from_nugget.json index 4d14395f14..1ca6c72361 100644 --- a/src/generated/resources/data/anvilcraft/recipe/copper_ingot_from_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/copper_ingot_from_nugget.json @@ -2,36 +2,17 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:copper_nugget" - }, - { - "item": "anvilcraft:copper_nugget" - }, - { - "item": "anvilcraft:copper_nugget" - }, - { - "item": "anvilcraft:copper_nugget" - }, - { - "item": "anvilcraft:copper_nugget" - }, - { - "item": "anvilcraft:copper_nugget" - }, - { - "item": "anvilcraft:copper_nugget" - }, - { - "item": "anvilcraft:copper_nugget" - }, - { - "item": "anvilcraft:copper_nugget" - } + "anvilcraft:copper_nugget", + "anvilcraft:copper_nugget", + "anvilcraft:copper_nugget", + "anvilcraft:copper_nugget", + "anvilcraft:copper_nugget", + "anvilcraft:copper_nugget", + "anvilcraft:copper_nugget", + "anvilcraft:copper_nugget", + "anvilcraft:copper_nugget" ], "result": { - "count": 1, "id": "minecraft:copper_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/copper_nugget.json b/src/generated/resources/data/anvilcraft/recipe/copper_nugget.json index f44a0cce42..143d2e271b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/copper_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/copper_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "minecraft:copper_ingot" - } + "minecraft:copper_ingot" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/copper_pressure_plate_from_copper_ingot.json b/src/generated/resources/data/anvilcraft/recipe/copper_pressure_plate_from_copper_ingot.json index c9add08acf..e331c1b7c7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/copper_pressure_plate_from_copper_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/copper_pressure_plate_from_copper_ingot.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "minecraft:copper_ingot" - } + "A": "minecraft:copper_ingot" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:copper_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/crab_trap.json b/src/generated/resources/data/anvilcraft/recipe/crab_trap.json index 73c193b5ba..bdb2920a41 100644 --- a/src/generated/resources/data/anvilcraft/recipe/crab_trap.json +++ b/src/generated/resources/data/anvilcraft/recipe/crab_trap.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:stick" - }, - "B": { - "item": "minecraft:string" - } + "A": "minecraft:stick", + "B": "minecraft:string" }, "pattern": [ "ABA", @@ -15,7 +11,6 @@ "ABA" ], "result": { - "count": 1, "id": "anvilcraft:crab_trap" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/crate.json b/src/generated/resources/data/anvilcraft/recipe/crate.json new file mode 100644 index 0000000000..af819b2f4f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/crate.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#minecraft:planks", + "B": "anvilcraft:resin" + }, + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "result": { + "id": "anvilcraft:crate" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/creamy_bread_roll.json b/src/generated/resources/data/anvilcraft/recipe/creamy_bread_roll.json index 398e40bb3f..ffa6483fa1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/creamy_bread_roll.json +++ b/src/generated/resources/data/anvilcraft/recipe/creamy_bread_roll.json @@ -2,18 +2,11 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "minecraft:bread" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "anvilcraft:cream" - } + "minecraft:bread", + "minecraft:sugar", + "anvilcraft:cream" ], "result": { - "count": 1, "id": "anvilcraft:creamy_bread_roll" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/cursed_gold_block.json b/src/generated/resources/data/anvilcraft/recipe/cursed_gold_block.json index 130b169dcd..1cb9bddd1b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/cursed_gold_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/cursed_gold_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:cursed_gold_ingot" - } + "A": "anvilcraft:cursed_gold_ingot" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:cursed_gold_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/cursed_gold_ingot_from_cursed_gold_block.json b/src/generated/resources/data/anvilcraft/recipe/cursed_gold_ingot_from_cursed_gold_block.json index c13bb83fa8..01ebcc9a90 100644 --- a/src/generated/resources/data/anvilcraft/recipe/cursed_gold_ingot_from_cursed_gold_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/cursed_gold_ingot_from_cursed_gold_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:cursed_gold_ingot", "ingredients": [ - { - "item": "anvilcraft:cursed_gold_block" - } + "anvilcraft:cursed_gold_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/cursed_gold_ingot_from_cursed_gold_nugget.json b/src/generated/resources/data/anvilcraft/recipe/cursed_gold_ingot_from_cursed_gold_nugget.json index 90adeced8c..f164878e27 100644 --- a/src/generated/resources/data/anvilcraft/recipe/cursed_gold_ingot_from_cursed_gold_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/cursed_gold_ingot_from_cursed_gold_nugget.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:cursed_gold_ingot", "key": { - "A": { - "item": "anvilcraft:cursed_gold_nugget" - } + "A": "anvilcraft:cursed_gold_nugget" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:cursed_gold_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/cursed_gold_nugget.json b/src/generated/resources/data/anvilcraft/recipe/cursed_gold_nugget.json index ae61178b3a..82141de970 100644 --- a/src/generated/resources/data/anvilcraft/recipe/cursed_gold_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/cursed_gold_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:cursed_gold_ingot" - } + "anvilcraft:cursed_gold_ingot" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_slab.json new file mode 100644 index 0000000000..93728336e7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:cyan_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:cyan_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_stair.json new file mode 100644 index 0000000000..a0534a0a5a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:cyan_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:cyan_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_wall.json new file mode 100644 index 0000000000..c6c4032ad0 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/cyan_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:cyan_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:cyan_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/damaged_anvil.json b/src/generated/resources/data/anvilcraft/recipe/damaged_anvil.json index 1eaadb8620..8026f1147c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/damaged_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/damaged_anvil.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:iron_block" - }, - "B": { - "item": "minecraft:iron_ingot" - } + "A": "minecraft:iron_block", + "B": "minecraft:iron_ingot" }, "pattern": [ "BAB", @@ -15,7 +11,6 @@ "BBB" ], "result": { - "count": 1, "id": "minecraft:damaged_anvil" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/damaged_anvil_9.json b/src/generated/resources/data/anvilcraft/recipe/damaged_anvil_9.json index fcaddfb166..9cc3134cf7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/damaged_anvil_9.json +++ b/src/generated/resources/data/anvilcraft/recipe/damaged_anvil_9.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:heavy_iron_block" - }, - "B": { - "item": "minecraft:iron_block" - } + "A": "anvilcraft:heavy_iron_block", + "B": "minecraft:iron_block" }, "pattern": [ "BAB", diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/amethyst_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/amethyst_weapons_and_tools.json index c36e246675..8845f1a533 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/amethyst_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/amethyst_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "anvilcraft:amethyst_sword", - "anvilcraft:amethyst_axe", - "anvilcraft:amethyst_pickaxe", - "anvilcraft:amethyst_shovel", - "anvilcraft:amethyst_hoe" + { + "id": "anvilcraft:amethyst_sword" + }, + { + "id": "anvilcraft:amethyst_axe" + }, + { + "id": "anvilcraft:amethyst_pickaxe" + }, + { + "id": "anvilcraft:amethyst_shovel" + }, + { + "id": "anvilcraft:amethyst_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/bowlikes.json b/src/generated/resources/data/anvilcraft/recipe/deformation/bowlikes.json index 383cbc99b7..9fc7c08ee8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/bowlikes.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/bowlikes.json @@ -1,7 +1,11 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:bow", - "minecraft:crossbow" + { + "id": "minecraft:bow" + }, + { + "id": "minecraft:crossbow" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/chainmail_armors.json b/src/generated/resources/data/anvilcraft/recipe/deformation/chainmail_armors.json index f55fc89186..1ec043564d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/chainmail_armors.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/chainmail_armors.json @@ -1,9 +1,17 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:chainmail_helmet", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_leggings", - "minecraft:chainmail_boots" + { + "id": "minecraft:chainmail_helmet" + }, + { + "id": "minecraft:chainmail_chestplate" + }, + { + "id": "minecraft:chainmail_leggings" + }, + { + "id": "minecraft:chainmail_boots" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/diamond_armors.json b/src/generated/resources/data/anvilcraft/recipe/deformation/diamond_armors.json index d6c0a01331..89e22d4ba0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/diamond_armors.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/diamond_armors.json @@ -1,9 +1,17 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots" + { + "id": "minecraft:diamond_helmet" + }, + { + "id": "minecraft:diamond_chestplate" + }, + { + "id": "minecraft:diamond_leggings" + }, + { + "id": "minecraft:diamond_boots" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/diamond_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/diamond_weapons_and_tools.json index f0ac6efd6d..b66606423a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/diamond_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/diamond_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:diamond_sword", - "minecraft:diamond_axe", - "minecraft:diamond_pickaxe", - "minecraft:diamond_shovel", - "minecraft:diamond_hoe" + { + "id": "minecraft:diamond_sword" + }, + { + "id": "minecraft:diamond_axe" + }, + { + "id": "minecraft:diamond_pickaxe" + }, + { + "id": "minecraft:diamond_shovel" + }, + { + "id": "minecraft:diamond_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/ember_metal_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/ember_metal_weapons_and_tools.json index 0ce881d27e..e571ec3aaf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/ember_metal_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/ember_metal_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "anvilcraft:ember_metal_sword", - "anvilcraft:ember_metal_axe", - "anvilcraft:ember_metal_pickaxe", - "anvilcraft:ember_metal_shovel", - "anvilcraft:ember_metal_hoe" + { + "id": "anvilcraft:ember_metal_sword" + }, + { + "id": "anvilcraft:ember_metal_axe" + }, + { + "id": "anvilcraft:ember_metal_pickaxe" + }, + { + "id": "anvilcraft:ember_metal_shovel" + }, + { + "id": "anvilcraft:ember_metal_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/frost_metal_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/frost_metal_weapons_and_tools.json index 56830d8256..3933b2967f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/frost_metal_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/frost_metal_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "anvilcraft:frost_metal_sword", - "anvilcraft:frost_metal_axe", - "anvilcraft:frost_metal_pickaxe", - "anvilcraft:frost_metal_shovel", - "anvilcraft:frost_metal_hoe" + { + "id": "anvilcraft:frost_metal_sword" + }, + { + "id": "anvilcraft:frost_metal_axe" + }, + { + "id": "anvilcraft:frost_metal_pickaxe" + }, + { + "id": "anvilcraft:frost_metal_shovel" + }, + { + "id": "anvilcraft:frost_metal_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/golden_armors.json b/src/generated/resources/data/anvilcraft/recipe/deformation/golden_armors.json index 904f7f6f45..4ec10949bc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/golden_armors.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/golden_armors.json @@ -1,9 +1,17 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots" + { + "id": "minecraft:golden_helmet" + }, + { + "id": "minecraft:golden_chestplate" + }, + { + "id": "minecraft:golden_leggings" + }, + { + "id": "minecraft:golden_boots" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/golden_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/golden_weapons_and_tools.json index a55d692e02..71f42c5879 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/golden_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/golden_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:golden_sword", - "minecraft:golden_axe", - "minecraft:golden_pickaxe", - "minecraft:golden_shovel", - "minecraft:golden_hoe" + { + "id": "minecraft:golden_sword" + }, + { + "id": "minecraft:golden_axe" + }, + { + "id": "minecraft:golden_pickaxe" + }, + { + "id": "minecraft:golden_shovel" + }, + { + "id": "minecraft:golden_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/iron_armors.json b/src/generated/resources/data/anvilcraft/recipe/deformation/iron_armors.json index 3261b8c0ab..6251536f49 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/iron_armors.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/iron_armors.json @@ -1,9 +1,17 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots" + { + "id": "minecraft:iron_helmet" + }, + { + "id": "minecraft:iron_chestplate" + }, + { + "id": "minecraft:iron_leggings" + }, + { + "id": "minecraft:iron_boots" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/iron_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/iron_weapons_and_tools.json index a2ca27a2fe..42d0a427c9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/iron_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/iron_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:iron_sword", - "minecraft:iron_axe", - "minecraft:iron_pickaxe", - "minecraft:iron_shovel", - "minecraft:iron_hoe" + { + "id": "minecraft:iron_sword" + }, + { + "id": "minecraft:iron_axe" + }, + { + "id": "minecraft:iron_pickaxe" + }, + { + "id": "minecraft:iron_shovel" + }, + { + "id": "minecraft:iron_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/netherite_armors.json b/src/generated/resources/data/anvilcraft/recipe/deformation/netherite_armors.json index a46b877163..361710a25f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/netherite_armors.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/netherite_armors.json @@ -1,9 +1,17 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:netherite_helmet", - "minecraft:netherite_chestplate", - "minecraft:netherite_leggings", - "minecraft:netherite_boots" + { + "id": "minecraft:netherite_helmet" + }, + { + "id": "minecraft:netherite_chestplate" + }, + { + "id": "minecraft:netherite_leggings" + }, + { + "id": "minecraft:netherite_boots" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/netherite_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/netherite_weapons_and_tools.json index 22a2f7adcd..9346029770 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/netherite_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/netherite_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:netherite_sword", - "minecraft:netherite_axe", - "minecraft:netherite_pickaxe", - "minecraft:netherite_shovel", - "minecraft:netherite_hoe" + { + "id": "minecraft:netherite_sword" + }, + { + "id": "minecraft:netherite_axe" + }, + { + "id": "minecraft:netherite_pickaxe" + }, + { + "id": "minecraft:netherite_shovel" + }, + { + "id": "minecraft:netherite_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/royal_steel_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/royal_steel_weapons_and_tools.json index ad30a85ecc..83d645e4e5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/royal_steel_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/royal_steel_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "anvilcraft:royal_steel_sword", - "anvilcraft:royal_steel_axe", - "anvilcraft:royal_steel_pickaxe", - "anvilcraft:royal_steel_shovel", - "anvilcraft:royal_steel_hoe" + { + "id": "anvilcraft:royal_steel_sword" + }, + { + "id": "anvilcraft:royal_steel_axe" + }, + { + "id": "anvilcraft:royal_steel_pickaxe" + }, + { + "id": "anvilcraft:royal_steel_shovel" + }, + { + "id": "anvilcraft:royal_steel_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/stone_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/stone_weapons_and_tools.json index 91edf01e52..df080df40e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/stone_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/stone_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:stone_sword", - "minecraft:stone_axe", - "minecraft:stone_pickaxe", - "minecraft:stone_shovel", - "minecraft:stone_hoe" + { + "id": "minecraft:stone_sword" + }, + { + "id": "minecraft:stone_axe" + }, + { + "id": "minecraft:stone_pickaxe" + }, + { + "id": "minecraft:stone_shovel" + }, + { + "id": "minecraft:stone_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation/wooden_weapons_and_tools.json b/src/generated/resources/data/anvilcraft/recipe/deformation/wooden_weapons_and_tools.json index ffe34d633d..68afc01fde 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation/wooden_weapons_and_tools.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation/wooden_weapons_and_tools.json @@ -1,10 +1,20 @@ { "type": "anvilcraft:deformation", "inputs": [ - "minecraft:wooden_sword", - "minecraft:wooden_axe", - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:wooden_hoe" + { + "id": "minecraft:wooden_sword" + }, + { + "id": "minecraft:wooden_axe" + }, + { + "id": "minecraft:wooden_pickaxe" + }, + { + "id": "minecraft:wooden_shovel" + }, + { + "id": "minecraft:wooden_hoe" + } ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/deformation_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/deformation_smithing_template.json index b71cfd87b6..5594592dca 100644 --- a/src/generated/resources/data/anvilcraft/recipe/deformation_smithing_template.json +++ b/src/generated/resources/data/anvilcraft/recipe/deformation_smithing_template.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "E": { - "item": "anvilcraft:earth_core_shard" - }, - "T": { - "tag": "anvilcraft:templates" - }, - "V": { - "item": "anvilcraft:void_matter" - } + "E": "anvilcraft:earth_core_shard", + "T": "#anvilcraft:templates", + "V": "anvilcraft:void_matter" }, "pattern": [ "VVV", @@ -18,7 +12,6 @@ "EEE" ], "result": { - "count": 1, "id": "anvilcraft:deformation_smithing_template" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/detector_sliding_rail.json b/src/generated/resources/data/anvilcraft/recipe/detector_sliding_rail.json index 4e7bed01ff..a773bc82d2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/detector_sliding_rail.json +++ b/src/generated/resources/data/anvilcraft/recipe/detector_sliding_rail.json @@ -3,16 +3,10 @@ "category": "redstone", "key": { "P": [ - { - "item": "minecraft:stone_pressure_plate" - }, - { - "item": "minecraft:polished_blackstone_pressure_plate" - } + "minecraft:stone_pressure_plate", + "minecraft:polished_blackstone_pressure_plate" ], - "S": { - "item": "anvilcraft:sliding_rail" - } + "S": "anvilcraft:sliding_rail" }, "pattern": [ "SSS", diff --git a/src/generated/resources/data/anvilcraft/recipe/discharger_from_charger.json b/src/generated/resources/data/anvilcraft/recipe/discharger_from_charger.json index 275600b3b3..3b18ada7d4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/discharger_from_charger.json +++ b/src/generated/resources/data/anvilcraft/recipe/discharger_from_charger.json @@ -2,12 +2,9 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:charger" - } + "anvilcraft:charger" ], "result": { - "count": 1, "id": "anvilcraft:discharger" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/disk.json b/src/generated/resources/data/anvilcraft/recipe/disk.json index 4ce23123db..45a9c52483 100644 --- a/src/generated/resources/data/anvilcraft/recipe/disk.json +++ b/src/generated/resources/data/anvilcraft/recipe/disk.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "anvilcraft:hardend_resin" - }, - "B": { - "item": "minecraft:iron_ingot" - }, - "C": { - "item": "anvilcraft:magnet_ingot" - } + "A": "anvilcraft:hardend_resin", + "B": "minecraft:iron_ingot", + "C": "anvilcraft:magnet_ingot" }, "pattern": [ "ABA", @@ -18,7 +12,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:disk" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/dragon_rod.json b/src/generated/resources/data/anvilcraft/recipe/dragon_rod.json index 66f0621605..b0c0b7013f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/recipe/dragon_rod.json @@ -2,15 +2,10 @@ "type": "minecraft:crafting_shapeless", "category": "equipment", "ingredients": [ - { - "item": "anvilcraft:block_devourer" - }, - { - "item": "anvilcraft:anvil_hammer" - } + "anvilcraft:block_devourer", + "anvilcraft:anvil_hammer" ], "result": { - "count": 1, "id": "anvilcraft:dragon_rod" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/dyson_sphere_component.json b/src/generated/resources/data/anvilcraft/recipe/dyson_sphere_component.json new file mode 100644 index 0000000000..67c7c1a3f9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/dyson_sphere_component.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "anvilcraft:ember_metal_ingot", + "B": "anvilcraft:transcendium_ingot", + "C": "anvilcraft:heat_collector" + }, + "pattern": [ + "ABA", + "CCC", + "BAB" + ], + "result": { + "count": 4, + "id": "anvilcraft:dyson_sphere_component" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/earth_core_shard.json b/src/generated/resources/data/anvilcraft/recipe/earth_core_shard.json index d5745b3044..7a645a4e14 100644 --- a/src/generated/resources/data/anvilcraft/recipe/earth_core_shard.json +++ b/src/generated/resources/data/anvilcraft/recipe/earth_core_shard.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:earth_core_shard_block" - } + "anvilcraft:earth_core_shard_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/earth_core_shard_block.json b/src/generated/resources/data/anvilcraft/recipe/earth_core_shard_block.json index 78caf5ecb2..ad6859a771 100644 --- a/src/generated/resources/data/anvilcraft/recipe/earth_core_shard_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/earth_core_shard_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:earth_core_shard" - } + "A": "anvilcraft:earth_core_shard" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:earth_core_shard_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/eight_to_one_smithing/multitool.json b/src/generated/resources/data/anvilcraft/recipe/eight_to_one_smithing/multitool.json index 37a89cb5b2..62e7c60687 100644 --- a/src/generated/resources/data/anvilcraft/recipe/eight_to_one_smithing/multitool.json +++ b/src/generated/resources/data/anvilcraft/recipe/eight_to_one_smithing/multitool.json @@ -36,47 +36,49 @@ { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 1 + "input": "input.1" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 2 + "input": "input.2" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 3 + "input": "input.3" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 4 + "input": "input.4" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 5 + "input": "input.5" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 6 + "input": "input.6" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 7 + "input": "input.7" } ] } ], - "result": "anvilcraft:multitool", + "result": { + "id": "anvilcraft:multitool" + }, "template": { "items": "anvilcraft:eight_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/ember_dragon_rod.json b/src/generated/resources/data/anvilcraft/recipe/ember_dragon_rod.json index b348c7e1f9..bc95572750 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ember_dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/recipe/ember_dragon_rod.json @@ -2,15 +2,10 @@ "type": "minecraft:crafting_shapeless", "category": "equipment", "ingredients": [ - { - "item": "anvilcraft:block_devourer" - }, - { - "item": "anvilcraft:ember_anvil_hammer" - } + "anvilcraft:block_devourer", + "anvilcraft:ember_anvil_hammer" ], "result": { - "count": 1, "id": "anvilcraft:ember_dragon_rod" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/ember_metal_block.json index 44bdf5cda7..ebbacfe211 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/ember_metal_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:ember_metal_ingot" - } + "A": "anvilcraft:ember_metal_ingot" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:ember_metal_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/ember_metal_ingot.json b/src/generated/resources/data/anvilcraft/recipe/ember_metal_ingot.json index be873eec23..563e27633b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ember_metal_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/ember_metal_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:ember_metal_ingot", "key": { - "A": { - "item": "anvilcraft:ember_metal_nugget" - } + "A": "anvilcraft:ember_metal_nugget" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:ember_metal_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/ember_metal_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/ember_metal_ingot_from_block.json index d1c4617f75..03dbc51ea6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ember_metal_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/ember_metal_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:ember_metal_ingot", "ingredients": [ - { - "item": "anvilcraft:ember_metal_block" - } + "anvilcraft:ember_metal_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/ember_metal_nugget_from_ingot.json b/src/generated/resources/data/anvilcraft/recipe/ember_metal_nugget_from_ingot.json index f49cf7a649..ccd9f444d0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ember_metal_nugget_from_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/ember_metal_nugget_from_ingot.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:ember_metal_ingot" - } + "anvilcraft:ember_metal_ingot" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/empty_propel_piston.json b/src/generated/resources/data/anvilcraft/recipe/empty_propel_piston.json new file mode 100644 index 0000000000..9d023e1890 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/empty_propel_piston.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "A": "anvilcraft:ionocraft", + "B": "anvilcraft:capacitor_empty", + "C": "minecraft:iron_ingot", + "D": "minecraft:piston", + "E": "anvilcraft:ruby" + }, + "pattern": [ + "CDC", + "ABA", + "AEA" + ], + "result": { + "id": "anvilcraft:propel_piston" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/energy_weapon_make/anvil_railgun.json b/src/generated/resources/data/anvilcraft/recipe/energy_weapon_make/anvil_railgun.json index 755ce47951..cfd44c2691 100644 --- a/src/generated/resources/data/anvilcraft/recipe/energy_weapon_make/anvil_railgun.json +++ b/src/generated/resources/data/anvilcraft/recipe/energy_weapon_make/anvil_railgun.json @@ -11,7 +11,6 @@ } ], "result": { - "count": 1, "id": "anvilcraft:anvil_railgun" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/energy_weapon_make/spectral_weapon_launcher.json b/src/generated/resources/data/anvilcraft/recipe/energy_weapon_make/spectral_weapon_launcher.json index 47769439d8..1ffb50986d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/energy_weapon_make/spectral_weapon_launcher.json +++ b/src/generated/resources/data/anvilcraft/recipe/energy_weapon_make/spectral_weapon_launcher.json @@ -10,7 +10,6 @@ } ], "result": { - "count": 1, "id": "anvilcraft:spectral_weapon_launcher" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/energy_weapon_platform.json b/src/generated/resources/data/anvilcraft/recipe/energy_weapon_platform.json index c7944e6b66..6d85207097 100644 --- a/src/generated/resources/data/anvilcraft/recipe/energy_weapon_platform.json +++ b/src/generated/resources/data/anvilcraft/recipe/energy_weapon_platform.json @@ -3,21 +3,11 @@ "category": "misc", "group": "anvilcraft:energy_weapon_platform", "key": { - "A": { - "item": "minecraft:anvil" - }, - "C": { - "item": "anvilcraft:space_overcompressor" - }, - "F": { - "item": "minecraft:smithing_table" - }, - "P": { - "item": "anvilcraft:processor" - }, - "S": { - "item": "anvilcraft:supercapacitor" - } + "A": "minecraft:anvil", + "C": "anvilcraft:space_overcompressor", + "F": "minecraft:smithing_table", + "P": "anvilcraft:processor", + "S": "anvilcraft:supercapacitor" }, "pattern": [ "ASS", @@ -25,7 +15,6 @@ "FPC" ], "result": { - "count": 1, "id": "anvilcraft:energy_weapon_platform" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/exp_gem.json b/src/generated/resources/data/anvilcraft/recipe/exp_gem.json index 8f11c8cc13..6e006e006c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/exp_gem.json +++ b/src/generated/resources/data/anvilcraft/recipe/exp_gem.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:exp_gem_block" - } + "anvilcraft:exp_gem_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/exp_gem_block.json b/src/generated/resources/data/anvilcraft/recipe/exp_gem_block.json index 332a172bfb..bb39adda4b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/exp_gem_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/exp_gem_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:exp_gem" - } + "A": "anvilcraft:exp_gem" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:exp_gem_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/fe_collector.json b/src/generated/resources/data/anvilcraft/recipe/fe_collector.json new file mode 100644 index 0000000000..37c43e7752 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/fe_collector.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "minecraft:copper_ingot", + "B": "anvilcraft:charge_collector" + }, + "pattern": [ + "ABA", + "AAA" + ], + "result": { + "count": 2, + "id": "anvilcraft:fe_collector" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/ferrite_core_magnet_block.json b/src/generated/resources/data/anvilcraft/recipe/ferrite_core_magnet_block.json index 6ce266ccd3..04bfd99875 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ferrite_core_magnet_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/ferrite_core_magnet_block.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "anvilcraft:magnet_ingot" - }, - "B": { - "tag": "c:ingots/iron" - } + "A": "anvilcraft:magnet_ingot", + "B": "#c:ingots/iron" }, "pattern": [ "AAA", @@ -15,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:ferrite_core_magnet_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/filter.json b/src/generated/resources/data/anvilcraft/recipe/filter.json index d9204b1619..2e09dec43b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/filter.json +++ b/src/generated/resources/data/anvilcraft/recipe/filter.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "anvilcraft:hardend_resin" - }, - "B": { - "item": "minecraft:hopper" - }, - "C": { - "item": "anvilcraft:circuit_board" - } + "A": "anvilcraft:hardend_resin", + "B": "minecraft:hopper", + "C": "anvilcraft:circuit_board" }, "pattern": [ "ACA", @@ -18,33 +12,6 @@ "AAA" ], "result": { - "components": { - "anvilcraft:filter_contents": { - "black_list": false, - "include_components": false, - "list": [ - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {} - ] - } - }, - "count": 1, "id": "anvilcraft:filter" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/fish_tank.json b/src/generated/resources/data/anvilcraft/recipe/fish_tank.json index b34385b016..1877125d68 100644 --- a/src/generated/resources/data/anvilcraft/recipe/fish_tank.json +++ b/src/generated/resources/data/anvilcraft/recipe/fish_tank.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:iron_ingot" - }, - "B": { - "tag": "c:glass_panes" - } + "A": "minecraft:iron_ingot", + "B": "#c:glass_panes" }, "pattern": [ "A A", @@ -15,7 +11,6 @@ "BBB" ], "result": { - "count": 1, "id": "anvilcraft:fish_tank" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/flint_block.json b/src/generated/resources/data/anvilcraft/recipe/flint_block.json index 4cc1deeea0..8a1ab98a40 100644 --- a/src/generated/resources/data/anvilcraft/recipe/flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/flint_block.json @@ -2,36 +2,17 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "minecraft:flint" - }, - { - "item": "minecraft:flint" - }, - { - "item": "minecraft:flint" - }, - { - "item": "minecraft:flint" - }, - { - "item": "minecraft:flint" - }, - { - "item": "minecraft:flint" - }, - { - "item": "minecraft:flint" - }, - { - "item": "minecraft:flint" - }, - { - "item": "minecraft:flint" - } + "minecraft:flint", + "minecraft:flint", + "minecraft:flint", + "minecraft:flint", + "minecraft:flint", + "minecraft:flint", + "minecraft:flint", + "minecraft:flint", + "minecraft:flint" ], "result": { - "count": 1, "id": "anvilcraft:flint_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/flint_from_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/flint_from_flint_block.json index 26bd19e3d8..6cf0c33ee5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/flint_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/flint_from_flint_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "anvilcraft:flint_block" - } + "anvilcraft:flint_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/fluid_tank.json b/src/generated/resources/data/anvilcraft/recipe/fluid_tank.json index 90e2110400..f04334c58f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/fluid_tank.json +++ b/src/generated/resources/data/anvilcraft/recipe/fluid_tank.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:plates/brass" - }, - { - "item": "anvilcraft:fish_tank" - } + "#c:plates/brass", + "anvilcraft:fish_tank" ], "result": { "count": 2, diff --git a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/ember_metal_heavy_halberd.json b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/ember_metal_heavy_halberd.json index d50293c821..456a58e61c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/ember_metal_heavy_halberd.json +++ b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/ember_metal_heavy_halberd.json @@ -24,32 +24,34 @@ { "type": "anvilcraft:normal_data_component", "component": "minecraft:custom_name", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 1 + "input": "input.1" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 2 + "input": "input.2" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 3 + "input": "input.3" } ] } ], - "result": "anvilcraft:ember_metal_heavy_halberd", + "result": { + "id": "anvilcraft:ember_metal_heavy_halberd" + }, "template": { "items": "anvilcraft:four_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/ember_metal_resonator.json b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/ember_metal_resonator.json index 7ae59c9c5f..719fbb7bdb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/ember_metal_resonator.json +++ b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/ember_metal_resonator.json @@ -24,32 +24,34 @@ { "type": "anvilcraft:normal_data_component", "component": "minecraft:custom_name", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 1 + "input": "input.1" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 2 + "input": "input.2" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 3 + "input": "input.3" } ] } ], - "result": "anvilcraft:ember_metal_resonator", + "result": { + "id": "anvilcraft:ember_metal_resonator" + }, "template": { "items": "anvilcraft:four_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/frost_metal_heavy_halberd.json b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/frost_metal_heavy_halberd.json index 98cd8d77f7..289ed394c2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/frost_metal_heavy_halberd.json +++ b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/frost_metal_heavy_halberd.json @@ -24,52 +24,54 @@ { "type": "anvilcraft:normal_data_component", "component": "minecraft:custom_name", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "anvilcraft:merciless_enchantments", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 1 + "input": "input.1" }, { "type": "anvilcraft:item_enchantments", "component": "anvilcraft:merciless_enchantments", - "input": 1 + "input": "input.1" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 2 + "input": "input.2" }, { "type": "anvilcraft:item_enchantments", "component": "anvilcraft:merciless_enchantments", - "input": 2 + "input": "input.2" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 3 + "input": "input.3" }, { "type": "anvilcraft:item_enchantments", "component": "anvilcraft:merciless_enchantments", - "input": 3 + "input": "input.3" } ] } ], - "result": "anvilcraft:frost_metal_heavy_halberd", + "result": { + "id": "anvilcraft:frost_metal_heavy_halberd" + }, "template": { "items": "anvilcraft:four_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/frost_metal_resonator.json b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/frost_metal_resonator.json index 13bf456cd6..0e728bedd2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/frost_metal_resonator.json +++ b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/frost_metal_resonator.json @@ -24,52 +24,54 @@ { "type": "anvilcraft:normal_data_component", "component": "minecraft:custom_name", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "anvilcraft:merciless_enchantments", - "input": 0 + "input": "input.0" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 1 + "input": "input.1" }, { "type": "anvilcraft:item_enchantments", "component": "anvilcraft:merciless_enchantments", - "input": 1 + "input": "input.1" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 2 + "input": "input.2" }, { "type": "anvilcraft:item_enchantments", "component": "anvilcraft:merciless_enchantments", - "input": 2 + "input": "input.2" }, { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 3 + "input": "input.3" }, { "type": "anvilcraft:item_enchantments", "component": "anvilcraft:merciless_enchantments", - "input": 3 + "input": "input.3" } ] } ], - "result": "anvilcraft:frost_metal_resonator", + "result": { + "id": "anvilcraft:frost_metal_resonator" + }, "template": { "items": "anvilcraft:four_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/gem_amulet.json b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/gem_amulet.json index a6e5368764..5e3a654f63 100644 --- a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/gem_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/gem_amulet.json @@ -17,7 +17,9 @@ "material": { "items": "anvilcraft:frost_metal_block" }, - "result": "anvilcraft:gem_amulet", + "result": { + "id": "anvilcraft:gem_amulet" + }, "template": { "items": "anvilcraft:four_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/nature_amulet.json b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/nature_amulet.json index 15fab4d9da..f9ddc2d11b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/nature_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/four_to_one_smithing/nature_amulet.json @@ -17,7 +17,9 @@ "material": { "items": "anvilcraft:frost_metal_block" }, - "result": "anvilcraft:nature_amulet", + "result": { + "id": "anvilcraft:nature_amulet" + }, "template": { "items": "anvilcraft:four_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/frost_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/frost_metal_block.json index eb196945b1..31684e3764 100644 --- a/src/generated/resources/data/anvilcraft/recipe/frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/frost_metal_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:frost_metal_ingot" - } + "A": "anvilcraft:frost_metal_ingot" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:frost_metal_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/frost_metal_ingot.json b/src/generated/resources/data/anvilcraft/recipe/frost_metal_ingot.json index b202ef7992..ba1ee006f9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/frost_metal_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/frost_metal_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:frost_metal_ingot", "key": { - "A": { - "item": "anvilcraft:frost_metal_nugget" - } + "A": "anvilcraft:frost_metal_nugget" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:frost_metal_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/frost_metal_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/frost_metal_ingot_from_block.json index d01e9e1be4..cb07f7b3ab 100644 --- a/src/generated/resources/data/anvilcraft/recipe/frost_metal_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/frost_metal_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:frost_metal_ingot", "ingredients": [ - { - "item": "anvilcraft:frost_metal_block" - } + "anvilcraft:frost_metal_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/frost_metal_nugget.json b/src/generated/resources/data/anvilcraft/recipe/frost_metal_nugget.json index ab07961589..4220fab069 100644 --- a/src/generated/resources/data/anvilcraft/recipe/frost_metal_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/frost_metal_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:frost_metal_ingot" - } + "anvilcraft:frost_metal_ingot" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..531ec35e43 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:gray_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:gray_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..eb500f4384 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:gray_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:gray_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..d076e8c718 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/gray_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:gray_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_slab.json new file mode 100644 index 0000000000..0343d794e1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:green_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:green_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_stair.json new file mode 100644 index 0000000000..52e06915a0 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:green_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:green_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_wall.json new file mode 100644 index 0000000000..24db15651c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/green_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:green_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:green_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/guide_book.json b/src/generated/resources/data/anvilcraft/recipe/guide_book.json index 15585c87c2..6b39ac4480 100644 --- a/src/generated/resources/data/anvilcraft/recipe/guide_book.json +++ b/src/generated/resources/data/anvilcraft/recipe/guide_book.json @@ -3,22 +3,13 @@ "category": "equipment", "ingredients": [ [ - { - "item": "minecraft:anvil" - }, - { - "item": "minecraft:chipped_anvil" - }, - { - "item": "minecraft:damaged_anvil" - } + "minecraft:anvil", + "minecraft:chipped_anvil", + "minecraft:damaged_anvil" ], - { - "item": "minecraft:book" - } + "minecraft:book" ], "result": { - "count": 1, "id": "anvilcraft:guide_book" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/gunpowder_block.json b/src/generated/resources/data/anvilcraft/recipe/gunpowder_block.json index 410ca446de..7faf731b10 100644 --- a/src/generated/resources/data/anvilcraft/recipe/gunpowder_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/gunpowder_block.json @@ -2,36 +2,17 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:gunpowder" - } + "minecraft:gunpowder", + "minecraft:gunpowder", + "minecraft:gunpowder", + "minecraft:gunpowder", + "minecraft:gunpowder", + "minecraft:gunpowder", + "minecraft:gunpowder", + "minecraft:gunpowder", + "minecraft:gunpowder" ], "result": { - "count": 1, "id": "anvilcraft:gunpowder_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/gunpowder_from_gunpowder_block.json b/src/generated/resources/data/anvilcraft/recipe/gunpowder_from_gunpowder_block.json index 784ad41c5b..b5a1ef5cde 100644 --- a/src/generated/resources/data/anvilcraft/recipe/gunpowder_from_gunpowder_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/gunpowder_from_gunpowder_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "anvilcraft:gunpowder_block" - } + "anvilcraft:gunpowder_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/heart_of_the_sea.json b/src/generated/resources/data/anvilcraft/recipe/heart_of_the_sea.json index 951cce8a7c..369140483f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/heart_of_the_sea.json +++ b/src/generated/resources/data/anvilcraft/recipe/heart_of_the_sea.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:sea_heart_shell" - }, - "B": { - "item": "anvilcraft:sapphire" - } + "A": "anvilcraft:sea_heart_shell", + "B": "anvilcraft:sapphire" }, "pattern": [ "A", @@ -15,7 +11,6 @@ "A" ], "result": { - "count": 1, "id": "minecraft:heart_of_the_sea" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/heat_collector.json b/src/generated/resources/data/anvilcraft/recipe/heat_collector.json index d6169cdc49..fecc86007a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/heat_collector.json +++ b/src/generated/resources/data/anvilcraft/recipe/heat_collector.json @@ -2,21 +2,11 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "B": { - "item": "anvilcraft:sapphire" - }, - "C": { - "tag": "c:plates/copper" - }, - "H": { - "item": "anvilcraft:charge_collector" - }, - "I": { - "item": "minecraft:blue_ice" - }, - "R": { - "item": "anvilcraft:royal_steel_ingot" - } + "B": "anvilcraft:sapphire", + "C": "#c:plates/copper", + "H": "anvilcraft:charge_collector", + "I": "minecraft:blue_ice", + "R": "anvilcraft:royal_steel_ingot" }, "pattern": [ "CBC", @@ -24,7 +14,6 @@ "RHR" ], "result": { - "count": 1, "id": "anvilcraft:heat_collector" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/heater.json b/src/generated/resources/data/anvilcraft/recipe/heater.json index befb58016f..2996d70442 100644 --- a/src/generated/resources/data/anvilcraft/recipe/heater.json +++ b/src/generated/resources/data/anvilcraft/recipe/heater.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:terracotta" - }, - "B": { - "item": "minecraft:iron_ingot" - }, - "C": { - "item": "anvilcraft:magnetoelectric_core" - } + "A": "minecraft:terracotta", + "B": "minecraft:iron_ingot", + "C": "anvilcraft:magnetoelectric_core" }, "pattern": [ "ABA", @@ -18,7 +12,6 @@ "BBB" ], "result": { - "count": 1, "id": "anvilcraft:heater" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/heavy_halberd_core.json b/src/generated/resources/data/anvilcraft/recipe/heavy_halberd_core.json index 3aca2d6963..84167c1694 100644 --- a/src/generated/resources/data/anvilcraft/recipe/heavy_halberd_core.json +++ b/src/generated/resources/data/anvilcraft/recipe/heavy_halberd_core.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "H": { - "item": "anvilcraft:heavy_iron_block" - }, - "M": { - "item": "anvilcraft:multiphase_matter" - } + "H": "anvilcraft:heavy_iron_block", + "M": "anvilcraft:multiphase_matter" }, "pattern": [ "HHH", @@ -15,7 +11,6 @@ "HHH" ], "result": { - "count": 1, "id": "anvilcraft:heavy_halberd_core" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/heavy_iron_block.json index bdc9b311e9..332634fef3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/heavy_iron_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:storage_blocks/iron" - } + "A": "#c:storage_blocks/iron" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:heavy_iron_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/heliostats_biological.json b/src/generated/resources/data/anvilcraft/recipe/heliostats_biological.json index 5c7103bc4a..1be2eda410 100644 --- a/src/generated/resources/data/anvilcraft/recipe/heliostats_biological.json +++ b/src/generated/resources/data/anvilcraft/recipe/heliostats_biological.json @@ -3,15 +3,9 @@ "category": "misc", "group": "anvilcraft:heliostats", "key": { - "F": { - "item": "minecraft:sunflower" - }, - "I": { - "item": "minecraft:iron_block" - }, - "S": { - "tag": "c:plates/silver" - } + "F": "minecraft:sunflower", + "I": "minecraft:iron_block", + "S": "#c:plates/silver" }, "pattern": [ "S S", diff --git a/src/generated/resources/data/anvilcraft/recipe/heliostats_electrical.json b/src/generated/resources/data/anvilcraft/recipe/heliostats_electrical.json index 40ee95dc0a..fc9056184c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/heliostats_electrical.json +++ b/src/generated/resources/data/anvilcraft/recipe/heliostats_electrical.json @@ -3,18 +3,10 @@ "category": "misc", "group": "anvilcraft:heliostats", "key": { - "C": { - "item": "anvilcraft:processor" - }, - "D": { - "item": "minecraft:daylight_detector" - }, - "I": { - "item": "minecraft:iron_block" - }, - "S": { - "tag": "c:plates/silver" - } + "C": "anvilcraft:processor", + "D": "minecraft:daylight_detector", + "I": "minecraft:iron_block", + "S": "#c:plates/silver" }, "pattern": [ "SDS", diff --git a/src/generated/resources/data/anvilcraft/recipe/hollow_magnet_block.json b/src/generated/resources/data/anvilcraft/recipe/hollow_magnet_block.json index 3fd4cfd8ff..c7f7e9a629 100644 --- a/src/generated/resources/data/anvilcraft/recipe/hollow_magnet_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/hollow_magnet_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "anvilcraft:magnet_ingot" - } + "A": "anvilcraft:magnet_ingot" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:hollow_magnet_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/impact_pile.json b/src/generated/resources/data/anvilcraft/recipe/impact_pile.json index 75d7968980..f9a30e84c5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/impact_pile.json +++ b/src/generated/resources/data/anvilcraft/recipe/impact_pile.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:obsidian" - }, - "B": { - "item": "minecraft:netherite_ingot" - } + "A": "minecraft:obsidian", + "B": "minecraft:netherite_ingot" }, "pattern": [ " A ", @@ -15,7 +11,6 @@ " B " ], "result": { - "count": 1, "id": "anvilcraft:impact_pile" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/induction_light.json b/src/generated/resources/data/anvilcraft/recipe/induction_light.json index c2508a04f1..6bb0d20c19 100644 --- a/src/generated/resources/data/anvilcraft/recipe/induction_light.json +++ b/src/generated/resources/data/anvilcraft/recipe/induction_light.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:iron_ingot" - }, - "B": { - "item": "anvilcraft:magnetoelectric_core" - } + "A": "minecraft:iron_ingot", + "B": "anvilcraft:magnetoelectric_core" }, "pattern": [ "A", diff --git a/src/generated/resources/data/anvilcraft/recipe/ionocraft.json b/src/generated/resources/data/anvilcraft/recipe/ionocraft.json index 912005f82a..c138d50329 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ionocraft.json +++ b/src/generated/resources/data/anvilcraft/recipe/ionocraft.json @@ -3,15 +3,9 @@ "category": "misc", "group": "anvilcraft:ionocraft", "key": { - "A": { - "tag": "c:nuggets/copper" - }, - "B": { - "tag": "c:rods/wooden" - }, - "C": { - "tag": "c:plates/tin" - } + "A": "#c:nuggets/copper", + "B": "#c:rods/wooden", + "C": "#c:plates/tin" }, "pattern": [ "AAA", @@ -19,7 +13,6 @@ " C " ], "result": { - "count": 1, "id": "anvilcraft:ionocraft" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/ionocraft_backpack.json b/src/generated/resources/data/anvilcraft/recipe/ionocraft_backpack.json index 045f4cafe6..7426be39a2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ionocraft_backpack.json +++ b/src/generated/resources/data/anvilcraft/recipe/ionocraft_backpack.json @@ -3,18 +3,10 @@ "category": "misc", "group": "anvilcraft:ionocraft_backpack", "key": { - "A": { - "item": "anvilcraft:ionocraft" - }, - "B": { - "tag": "anvilcraft:capacitor" - }, - "C": { - "tag": "c:plates/tin" - }, - "D": { - "item": "minecraft:leather_chestplate" - } + "A": "anvilcraft:ionocraft", + "B": "#anvilcraft:capacitor", + "C": "#c:plates/tin", + "D": "minecraft:leather_chestplate" }, "pattern": [ "ABA", @@ -22,7 +14,9 @@ "CDC" ], "result": { - "count": 1, + "components": { + "anvilcraft:stored_energy": {} + }, "id": "anvilcraft:ionocraft_backpack" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/iron_block_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/iron_block_from_heavy_iron_block.json index c646d1bfdd..7b1a8cf314 100644 --- a/src/generated/resources/data/anvilcraft/recipe/iron_block_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/iron_block_from_heavy_iron_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "anvilcraft:heavy_iron_block" - } + "anvilcraft:heavy_iron_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/item_collector.json b/src/generated/resources/data/anvilcraft/recipe/item_collector.json index 947bc88ea2..17105a4bcf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/item_collector.json +++ b/src/generated/resources/data/anvilcraft/recipe/item_collector.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:iron_ingot" - }, - "B": { - "item": "anvilcraft:magnet" - }, - "C": { - "item": "minecraft:hopper" - }, - "D": { - "item": "anvilcraft:magnetoelectric_core" - } + "A": "minecraft:iron_ingot", + "B": "anvilcraft:magnet", + "C": "minecraft:hopper", + "D": "anvilcraft:magnetoelectric_core" }, "pattern": [ "ABA", @@ -21,7 +13,6 @@ "ACA" ], "result": { - "count": 1, "id": "anvilcraft:item_collector" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_compress/supercapacitor.json b/src/generated/resources/data/anvilcraft/recipe/item_compress/supercapacitor.json index 25e357782b..e9f8934308 100644 --- a/src/generated/resources/data/anvilcraft/recipe/item_compress/supercapacitor.json +++ b/src/generated/resources/data/anvilcraft/recipe/item_compress/supercapacitor.json @@ -5,19 +5,23 @@ { "type": "anvillib_recipe:has_item_ingredient", "item": { - "items": "anvilcraft:resin_block", - "predicates": { - "anvilcraft:saved_entity": { - "entitys": "minecraft:creeper", - "predicates": [ - { - "expected": 1, - "requirement": "GREATER_OR_EQUAL", - "tagKeyPath": "powered" - } - ] + "components": { + "predicates": { + "anvilcraft:saved_entity": { + "entities": [ + "minecraft:creeper" + ], + "predicates": [ + { + "expected": 1, + "requirement": "GREATER_OR_EQUAL", + "tagKeyPath": "powered" + } + ] + } } - } + }, + "items": "anvilcraft:resin_block" }, "offset": [ 0.0, @@ -49,7 +53,6 @@ } ], "icon": { - "count": 1, "id": "anvilcraft:supercapacitor" }, "non_conflicting": [ diff --git a/src/generated/resources/data/anvilcraft/recipe/item_compress/supercapacitor_empty.json b/src/generated/resources/data/anvilcraft/recipe/item_compress/supercapacitor_empty.json index cfb4a2508f..cf34237e8b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/item_compress/supercapacitor_empty.json +++ b/src/generated/resources/data/anvilcraft/recipe/item_compress/supercapacitor_empty.json @@ -6,24 +6,25 @@ "items": "#c:plates/iron" }, { - "items": "anvilcraft:resin_block", - "predicates": { - "anvilcraft:saved_entity": { - "entitys": "minecraft:creeper" - }, - "anvillib:not": { - "anvilcraft:saved_entity": { - "entitys": "minecraft:creeper", - "predicates": [ - { - "expected": 1, - "requirement": "GREATER_OR_EQUAL", - "tagKeyPath": "powered" - } - ] + "components": { + "predicates": { + "anvillib:not": { + "anvilcraft:saved_entity": { + "entities": [ + "minecraft:creeper" + ], + "predicates": [ + { + "expected": 1, + "requirement": "GREATER_OR_EQUAL", + "tagKeyPath": "powered" + } + ] + } } } - } + }, + "items": "anvilcraft:resin_block" } ], "results": [ diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_boots_2_chain.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_boots_2_chain.json deleted file mode 100644 index 7250148407..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_boots_2_chain.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "anvilcraft:item_crush", - "ingredients": [ - { - "items": "minecraft:chainmail_boots" - } - ], - "results": [ - { - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 0.0 - }, - "id": "minecraft:chain" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_boots_2_iron_chain.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_boots_2_iron_chain.json new file mode 100644 index 0000000000..9f349723f4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_boots_2_iron_chain.json @@ -0,0 +1,18 @@ +{ + "type": "anvilcraft:item_crush", + "ingredients": [ + { + "items": "minecraft:chainmail_boots" + } + ], + "results": [ + { + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 0.0 + }, + "id": "minecraft:iron_chain" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_chestplate_2_chain.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_chestplate_2_chain.json deleted file mode 100644 index 52a5d737cf..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_chestplate_2_chain.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "anvilcraft:item_crush", - "ingredients": [ - { - "items": "minecraft:chainmail_chestplate" - } - ], - "results": [ - { - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 0.0 - }, - "id": "minecraft:chain" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_chestplate_2_iron_chain.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_chestplate_2_iron_chain.json new file mode 100644 index 0000000000..ba7bf6875d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_chestplate_2_iron_chain.json @@ -0,0 +1,18 @@ +{ + "type": "anvilcraft:item_crush", + "ingredients": [ + { + "items": "minecraft:chainmail_chestplate" + } + ], + "results": [ + { + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 0.0 + }, + "id": "minecraft:iron_chain" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_helmet_2_chain.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_helmet_2_chain.json deleted file mode 100644 index bf226f2ad2..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_helmet_2_chain.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "anvilcraft:item_crush", - "ingredients": [ - { - "items": "minecraft:chainmail_helmet" - } - ], - "results": [ - { - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 0.0 - }, - "id": "minecraft:chain" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_helmet_2_iron_chain.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_helmet_2_iron_chain.json new file mode 100644 index 0000000000..9029114e03 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_helmet_2_iron_chain.json @@ -0,0 +1,18 @@ +{ + "type": "anvilcraft:item_crush", + "ingredients": [ + { + "items": "minecraft:chainmail_helmet" + } + ], + "results": [ + { + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 0.0 + }, + "id": "minecraft:iron_chain" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_leggings_2_chain.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_leggings_2_chain.json deleted file mode 100644 index 7436e23ee0..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_leggings_2_chain.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "anvilcraft:item_crush", - "ingredients": [ - { - "items": "minecraft:chainmail_leggings" - } - ], - "results": [ - { - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 0.0 - }, - "id": "minecraft:chain" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_leggings_2_iron_chain.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_leggings_2_iron_chain.json new file mode 100644 index 0000000000..a1db35f67a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/item_crush/armor/chainmail_leggings_2_iron_chain.json @@ -0,0 +1,18 @@ +{ + "type": "anvilcraft:item_crush", + "ingredients": [ + { + "items": "minecraft:chainmail_leggings" + } + ], + "results": [ + { + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 0.0 + }, + "id": "minecraft:iron_chain" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/item_crush/item_crush/gem_from_chromatic_stone.json b/src/generated/resources/data/anvilcraft/recipe/item_crush/item_crush/gem_from_chromatic_stone.json index 4f31a9b215..67238e785f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/item_crush/item_crush/gem_from_chromatic_stone.json +++ b/src/generated/resources/data/anvilcraft/recipe/item_crush/item_crush/gem_from_chromatic_stone.json @@ -20,7 +20,6 @@ } ], "icon": { - "count": 1, "id": "anvilcraft:crushing_table" }, "non_conflicting": [ diff --git a/src/generated/resources/data/anvilcraft/recipe/item_detector.json b/src/generated/resources/data/anvilcraft/recipe/item_detector.json index 701067d9cb..84371fe81b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/item_detector.json +++ b/src/generated/resources/data/anvilcraft/recipe/item_detector.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "B": { - "item": "anvilcraft:circuit_board" - }, - "C": { - "tag": "c:ingots/copper" - }, - "I": { - "tag": "c:ingots/iron" - }, - "R": { - "item": "minecraft:comparator" - } + "B": "anvilcraft:circuit_board", + "C": "#c:ingots/copper", + "I": "#c:ingots/iron", + "R": "minecraft:comparator" }, "pattern": [ "CC ", @@ -21,7 +13,6 @@ "III" ], "result": { - "count": 1, "id": "anvilcraft:item_detector" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/abnormal_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/abnormal_amulet.json index 7e69686b70..ccc02e8789 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/abnormal_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/abnormal_amulet.json @@ -2,62 +2,17 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "anvilcraft:cursed_gold_ingot" + "items": "anvilcraft:cursed_gold_ingot" }, { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" + "count": 16, + "items": "anvilcraft:levitation_powder" } ], - "result": { - "count": 1, - "id": "anvilcraft:abnormal_amulet" + "source": { + "items": "anvilcraft:abnormal_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/anvil_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/anvil_amulet.json index 066f24fe14..7b972e2d81 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/anvil_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/anvil_amulet.json @@ -2,14 +2,13 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "minecraft:anvil" + "items": "minecraft:anvil" } ], - "result": { - "count": 1, - "id": "anvilcraft:anvil_amulet" + "source": { + "items": "anvilcraft:anvil_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/banner_patterns.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/banner_patterns.json new file mode 100644 index 0000000000..7a269bde6a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/banner_patterns.json @@ -0,0 +1,18 @@ +{ + "type": "anvilcraft:jewel_crafting", + "ingredients": [ + { + "items": "minecraft:paper" + }, + { + "items": "minecraft:ink_sac" + } + ], + "source": { + "components": { + "predicates": { + "minecraft:provides_banner_patterns": {} + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/cat_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/cat_amulet.json index b78b19ce36..b7369085a1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/cat_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/cat_amulet.json @@ -2,107 +2,18 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "minecraft:salmon" + "count": 16, + "items": "minecraft:salmon" }, { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:salmon" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" - }, - { - "item": "minecraft:cod" + "count": 16, + "items": "minecraft:cod" } ], - "result": { - "count": 1, - "id": "anvilcraft:cat_amulet" + "source": { + "items": "anvilcraft:cat_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/comrade_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/comrade_amulet.json index c194d0c1c5..4e83aafe6e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/comrade_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/comrade_amulet.json @@ -2,23 +2,14 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "minecraft:name_tag" - }, - { - "item": "minecraft:name_tag" - }, - { - "item": "minecraft:name_tag" - }, - { - "item": "minecraft:name_tag" + "count": 4, + "items": "minecraft:name_tag" } ], - "result": { - "count": 1, - "id": "anvilcraft:comrade_amulet" + "source": { + "items": "anvilcraft:comrade_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/dog_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/dog_amulet.json index 4cb35cd66b..8229aedd98 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/dog_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/dog_amulet.json @@ -2,107 +2,18 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "minecraft:bone" + "count": 16, + "items": "minecraft:bone" }, { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "item": "minecraft:bone" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" - }, - { - "tag": "minecraft:meat" + "count": 16, + "items": "#minecraft:meat" } ], - "result": { - "count": 1, - "id": "anvilcraft:dog_amulet" + "source": { + "items": "anvilcraft:dog_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/elytra.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/elytra.json index 8b019c39f7..faea108431 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/elytra.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/elytra.json @@ -2,110 +2,23 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "minecraft:phantom_membrane" + "count": 8, + "items": "minecraft:phantom_membrane" }, { - "item": "minecraft:phantom_membrane" + "count": 8, + "items": "#c:feathers" }, { - "item": "minecraft:phantom_membrane" + "count": 2, + "items": "#c:leathers" }, { - "item": "minecraft:phantom_membrane" - }, - { - "item": "minecraft:phantom_membrane" - }, - { - "item": "minecraft:phantom_membrane" - }, - { - "item": "minecraft:phantom_membrane" - }, - { - "item": "minecraft:phantom_membrane" - }, - { - "tag": "c:feathers" - }, - { - "tag": "c:feathers" - }, - { - "tag": "c:feathers" - }, - { - "tag": "c:feathers" - }, - { - "tag": "c:feathers" - }, - { - "tag": "c:feathers" - }, - { - "tag": "c:feathers" - }, - { - "tag": "c:feathers" - }, - { - "tag": "c:leathers" - }, - { - "tag": "c:leathers" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" - }, - { - "item": "minecraft:bamboo" + "count": 16, + "items": "minecraft:bamboo" } ], - "result": { - "count": 1, - "id": "minecraft:elytra" + "source": { + "items": "minecraft:elytra" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/emerald_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/emerald_amulet.json index 52bdc1bd09..db7e72f033 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/emerald_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/emerald_amulet.json @@ -2,14 +2,13 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "minecraft:emerald_block" + "items": "minecraft:emerald_block" } ], - "result": { - "count": 1, - "id": "anvilcraft:emerald_amulet" + "source": { + "items": "anvilcraft:emerald_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/enchanted_golden_apple.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/enchanted_golden_apple.json index 7a38edd41d..2c3c823c9a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/enchanted_golden_apple.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/enchanted_golden_apple.json @@ -2,83 +2,18 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "minecraft:experience_bottle" + "count": 16, + "items": "minecraft:experience_bottle" }, { - "item": "minecraft:experience_bottle" + "count": 8, + "items": "minecraft:gold_block" }, { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:gold_block" - }, - { - "item": "minecraft:gold_block" - }, - { - "item": "minecraft:gold_block" - }, - { - "item": "minecraft:gold_block" - }, - { - "item": "minecraft:gold_block" - }, - { - "item": "minecraft:gold_block" - }, - { - "item": "minecraft:gold_block" - }, - { - "item": "minecraft:gold_block" - }, - { - "item": "minecraft:golden_apple" + "items": "minecraft:golden_apple" } ], - "result": { - "count": 1, - "id": "minecraft:enchanted_golden_apple" + "source": { + "items": "minecraft:enchanted_golden_apple" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/feather_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/feather_amulet.json index 44cc064caa..6a3d32ccf4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/feather_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/feather_amulet.json @@ -2,71 +2,18 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "minecraft:feather" + "count": 16, + "items": "minecraft:feather" }, { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:feather" - }, - { - "item": "minecraft:phantom_membrane" - }, - { - "item": "minecraft:phantom_membrane" - }, - { - "item": "minecraft:phantom_membrane" - }, - { - "item": "minecraft:phantom_membrane" + "count": 4, + "items": "minecraft:phantom_membrane" } ], - "result": { - "count": 1, - "id": "anvilcraft:feather_amulet" + "source": { + "items": "anvilcraft:feather_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/heavy_core.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/heavy_core.json index 34f745157b..133f2ad2c8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/heavy_core.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/heavy_core.json @@ -2,395 +2,18 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:heavy_iron_block" + "count": 64, + "items": "anvilcraft:heavy_iron_block" }, { - "item": "anvilcraft:heavy_iron_block" + "count": 64, + "items": "#c:storage_blocks/lead" }, { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "item": "anvilcraft:heavy_iron_block" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "tag": "c:storage_blocks/lead" - }, - { - "item": "anvilcraft:space_overcompressor" + "items": "anvilcraft:space_overcompressor" } ], - "result": { - "count": 1, - "id": "minecraft:heavy_core" + "source": { + "items": "minecraft:heavy_core" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/music_discs.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/music_discs.json new file mode 100644 index 0000000000..9f5430ac5b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/music_discs.json @@ -0,0 +1,19 @@ +{ + "type": "anvilcraft:jewel_crafting", + "ingredients": [ + { + "count": 4, + "items": "anvilcraft:hardend_resin" + }, + { + "items": "minecraft:paper" + } + ], + "source": { + "components": { + "predicates": { + "minecraft:jukebox_playable": {} + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ominous_bottle.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ominous_bottle.json index 9a4bfc6f18..461c06b92f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ominous_bottle.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ominous_bottle.json @@ -2,65 +2,18 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "minecraft:experience_bottle" + "count": 16, + "items": "minecraft:experience_bottle" }, { - "item": "minecraft:experience_bottle" + "count": 2, + "items": "anvilcraft:cursed_gold_ingot" }, { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "minecraft:experience_bottle" - }, - { - "item": "anvilcraft:cursed_gold_ingot" - }, - { - "item": "anvilcraft:cursed_gold_ingot" - }, - { - "item": "minecraft:glass_bottle" + "items": "minecraft:glass_bottle" } ], - "result": { - "count": 1, - "id": "minecraft:ominous_bottle" + "source": { + "items": "minecraft:ominous_bottle" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ominous_trial_key.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ominous_trial_key.json index f2aa913416..e6c0b82028 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ominous_trial_key.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ominous_trial_key.json @@ -2,23 +2,17 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "minecraft:polished_tuff" + "count": 3, + "items": "minecraft:polished_tuff" }, { - "item": "minecraft:polished_tuff" + "items": "minecraft:oxidized_copper" }, { - "item": "minecraft:polished_tuff" - }, - { - "item": "minecraft:oxidized_copper" - }, - { - "item": "minecraft:ominous_bottle" + "items": "minecraft:ominous_bottle" } ], - "result": { - "count": 1, - "id": "minecraft:ominous_trial_key" + "source": { + "items": "minecraft:ominous_trial_key" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ruby_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ruby_amulet.json index a5e5a5244b..8d22d8f69c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ruby_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/ruby_amulet.json @@ -2,14 +2,13 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "anvilcraft:ruby_block" + "items": "anvilcraft:ruby_block" } ], - "result": { - "count": 1, - "id": "anvilcraft:ruby_amulet" + "source": { + "items": "anvilcraft:ruby_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/sapphire_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/sapphire_amulet.json index b3447d090e..b64e05a8e9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/sapphire_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/sapphire_amulet.json @@ -2,14 +2,13 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "anvilcraft:sapphire_block" + "items": "anvilcraft:sapphire_block" } ], - "result": { - "count": 1, - "id": "anvilcraft:sapphire_amulet" + "source": { + "items": "anvilcraft:sapphire_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/silence_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/silence_amulet.json index de42ca9f1f..65f3245418 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/silence_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/silence_amulet.json @@ -2,59 +2,14 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" - }, - { - "item": "minecraft:echo_shard" + "count": 16, + "items": "minecraft:echo_shard" } ], - "result": { - "count": 1, - "id": "anvilcraft:silence_amulet" + "source": { + "items": "anvilcraft:silence_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/topaz_amulet.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/topaz_amulet.json index 2579494061..ffae65dc63 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/topaz_amulet.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/topaz_amulet.json @@ -2,14 +2,13 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "anvilcraft:silver_ingot" + "items": "anvilcraft:silver_ingot" }, { - "item": "anvilcraft:topaz_block" + "items": "anvilcraft:topaz_block" } ], - "result": { - "count": 1, - "id": "anvilcraft:topaz_amulet" + "source": { + "items": "anvilcraft:topaz_amulet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/totem_of_undying.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/totem_of_undying.json index f0f65b8f86..f91df9e67f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/totem_of_undying.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/totem_of_undying.json @@ -2,20 +2,17 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "tag": "c:storage_blocks/gold" + "items": "#c:storage_blocks/gold" }, { - "item": "minecraft:emerald" + "count": 2, + "items": "minecraft:emerald" }, { - "item": "minecraft:emerald" - }, - { - "item": "anvilcraft:royal_steel_ingot" + "items": "anvilcraft:royal_steel_ingot" } ], - "result": { - "count": 1, - "id": "minecraft:totem_of_undying" + "source": { + "items": "minecraft:totem_of_undying" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/trial_key.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/trial_key.json index 7848864a34..bf2c3c0778 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/trial_key.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/trial_key.json @@ -2,14 +2,13 @@ "type": "anvilcraft:jewel_crafting", "ingredients": [ { - "item": "minecraft:polished_tuff" + "items": "minecraft:polished_tuff" }, { - "item": "minecraft:copper_ingot" + "items": "minecraft:copper_ingot" } ], - "result": { - "count": 1, - "id": "minecraft:trial_key" + "source": { + "items": "minecraft:trial_key" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/trim_templates.json b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/trim_templates.json new file mode 100644 index 0000000000..474a27c661 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/jewel_crafting/trim_templates.json @@ -0,0 +1,18 @@ +{ + "type": "anvilcraft:jewel_crafting", + "ingredients": [ + { + "items": "anvilcraft:earth_core_shard" + }, + { + "items": "minecraft:diamond" + } + ], + "source": { + "components": { + "predicates": { + "minecraft:provides_trim_material": {} + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/jewelcrafting_table.json b/src/generated/resources/data/anvilcraft/recipe/jewelcrafting_table.json index b0c830fdcf..afec380055 100644 --- a/src/generated/resources/data/anvilcraft/recipe/jewelcrafting_table.json +++ b/src/generated/resources/data/anvilcraft/recipe/jewelcrafting_table.json @@ -2,21 +2,11 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:grindstone" - }, - "B": { - "item": "minecraft:glass" - }, - "C": { - "item": "minecraft:grindstone" - }, - "D": { - "item": "minecraft:smooth_stone" - }, - "F": { - "tag": "minecraft:planks" - } + "A": "minecraft:grindstone", + "B": "minecraft:glass", + "C": "minecraft:grindstone", + "D": "minecraft:smooth_stone", + "F": "#minecraft:planks" }, "pattern": [ "ABC", @@ -24,7 +14,6 @@ "F F" ], "result": { - "count": 1, "id": "anvilcraft:jewelcrafting_table" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/laser_receiver.json b/src/generated/resources/data/anvilcraft/recipe/laser_receiver.json index c7072906cf..80d5cc1672 100644 --- a/src/generated/resources/data/anvilcraft/recipe/laser_receiver.json +++ b/src/generated/resources/data/anvilcraft/recipe/laser_receiver.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "anvilcraft:ruby" - }, - "B": { - "item": "anvilcraft:magnetoelectric_core" - }, - "C": { - "item": "minecraft:redstone" - }, - "D": { - "item": "anvilcraft:royal_steel_ingot" - } + "A": "anvilcraft:ruby", + "B": "anvilcraft:magnetoelectric_core", + "C": "minecraft:redstone", + "D": "anvilcraft:royal_steel_ingot" }, "pattern": [ "AAA", @@ -21,7 +13,6 @@ "DCD" ], "result": { - "count": 1, "id": "anvilcraft:laser_receiver" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/lead_block.json b/src/generated/resources/data/anvilcraft/recipe/lead_block.json index e92003dc4d..257fe9a447 100644 --- a/src/generated/resources/data/anvilcraft/recipe/lead_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/lead_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/lead" - } + "A": "#c:ingots/lead" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:lead_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/lead_ingot.json b/src/generated/resources/data/anvilcraft/recipe/lead_ingot.json index 0833eb6e34..454f02e8ed 100644 --- a/src/generated/resources/data/anvilcraft/recipe/lead_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/lead_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:lead_ingot", "key": { - "A": { - "tag": "c:nuggets/lead" - } + "A": "#c:nuggets/lead" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:lead_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/lead_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/lead_ingot_from_block.json index 3f5919b198..412a5c80d8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/lead_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/lead_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:lead_ingot", "ingredients": [ - { - "item": "anvilcraft:lead_block" - } + "anvilcraft:lead_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/lead_nugget.json b/src/generated/resources/data/anvilcraft/recipe/lead_nugget.json index 5028c46ed7..e96af802af 100644 --- a/src/generated/resources/data/anvilcraft/recipe/lead_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/lead_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/lead" - } + "#c:ingots/lead" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/lead_pressure_plate_from_ingots_lead.json b/src/generated/resources/data/anvilcraft/recipe/lead_pressure_plate_from_ingots_lead.json index 74fa72a090..8d2d62ea25 100644 --- a/src/generated/resources/data/anvilcraft/recipe/lead_pressure_plate_from_ingots_lead.json +++ b/src/generated/resources/data/anvilcraft/recipe/lead_pressure_plate_from_ingots_lead.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/lead" - } + "A": "#c:ingots/lead" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:lead_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/levitation_powder_block_from_powders.json b/src/generated/resources/data/anvilcraft/recipe/levitation_powder_block_from_powders.json index c732e2a449..bab93e9586 100644 --- a/src/generated/resources/data/anvilcraft/recipe/levitation_powder_block_from_powders.json +++ b/src/generated/resources/data/anvilcraft/recipe/levitation_powder_block_from_powders.json @@ -2,36 +2,17 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - }, - { - "item": "anvilcraft:levitation_powder" - } + "anvilcraft:levitation_powder", + "anvilcraft:levitation_powder", + "anvilcraft:levitation_powder", + "anvilcraft:levitation_powder", + "anvilcraft:levitation_powder", + "anvilcraft:levitation_powder", + "anvilcraft:levitation_powder", + "anvilcraft:levitation_powder", + "anvilcraft:levitation_powder" ], "result": { - "count": 1, "id": "anvilcraft:levitation_powder_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/levitation_powder_from_block.json b/src/generated/resources/data/anvilcraft/recipe/levitation_powder_from_block.json index 563d247751..894485062f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/levitation_powder_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/levitation_powder_from_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:levitation_powder_block" - } + "anvilcraft:levitation_powder_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..291c683325 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:light_blue_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:light_blue_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..8fc8d492c7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:light_blue_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:light_blue_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..7367b693b7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/light_blue_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:light_blue_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:light_blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..a9fcd8ed6d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:light_gray_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:light_gray_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..dc8e49fe3b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:light_gray_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:light_gray_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..70232247d8 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/light_gray_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:light_gray_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:light_gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_slab.json new file mode 100644 index 0000000000..6f15dffc19 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:lime_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:lime_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_stair.json new file mode 100644 index 0000000000..1fde61bdaf --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:lime_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:lime_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_wall.json new file mode 100644 index 0000000000..105e21b609 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/lime_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:lime_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:lime_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/load_monitor.json b/src/generated/resources/data/anvilcraft/recipe/load_monitor.json index 7eb0c37341..7ecf3d3f8a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/load_monitor.json +++ b/src/generated/resources/data/anvilcraft/recipe/load_monitor.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:compass" - }, - "B": { - "item": "anvilcraft:magnetoelectric_core" - } + "A": "minecraft:compass", + "B": "anvilcraft:magnetoelectric_core" }, "pattern": [ "A", diff --git a/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_slab.json new file mode 100644 index 0000000000..808b4af9ca --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:magenta_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:magenta_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_stair.json new file mode 100644 index 0000000000..160f452d8c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:magenta_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:magenta_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_wall.json new file mode 100644 index 0000000000..074497b2c4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/magenta_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:magenta_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:magenta_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/magnet.json b/src/generated/resources/data/anvilcraft/recipe/magnet.json index 81950696ad..8198015f28 100644 --- a/src/generated/resources/data/anvilcraft/recipe/magnet.json +++ b/src/generated/resources/data/anvilcraft/recipe/magnet.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "minecraft:ender_pearl" - }, - "B": { - "item": "anvilcraft:magnet_ingot" - }, - "C": { - "item": "minecraft:redstone" - } + "A": "minecraft:ender_pearl", + "B": "anvilcraft:magnet_ingot", + "C": "minecraft:redstone" }, "pattern": [ " A ", @@ -18,7 +12,6 @@ " A " ], "result": { - "count": 1, "id": "anvilcraft:magnet" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/magnet_block.json b/src/generated/resources/data/anvilcraft/recipe/magnet_block.json index d63a6758dc..9bfdefa0c5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/magnet_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/magnet_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "anvilcraft:magnet_ingot" - } + "A": "anvilcraft:magnet_ingot" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:magnet_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/magnet_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/magnet_ingot_from_block.json index d033dd072b..4063f7388d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/magnet_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/magnet_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:magnet_ingot", "ingredients": [ - { - "item": "anvilcraft:magnet_block" - } + "anvilcraft:magnet_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/magnet_ingot_from_hollow_block.json b/src/generated/resources/data/anvilcraft/recipe/magnet_ingot_from_hollow_block.json index 5668d01f58..68e6a3dff2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/magnet_ingot_from_hollow_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/magnet_ingot_from_hollow_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:magnet_ingot", "ingredients": [ - { - "item": "anvilcraft:hollow_magnet_block" - } + "anvilcraft:hollow_magnet_block" ], "result": { "count": 8, diff --git a/src/generated/resources/data/anvilcraft/recipe/magnetic_chute.json b/src/generated/resources/data/anvilcraft/recipe/magnetic_chute.json index a420bc4633..0436be2779 100644 --- a/src/generated/resources/data/anvilcraft/recipe/magnetic_chute.json +++ b/src/generated/resources/data/anvilcraft/recipe/magnetic_chute.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:magnet_ingot" - }, - "B": { - "item": "minecraft:dropper" - } + "A": "anvilcraft:magnet_ingot", + "B": "minecraft:dropper" }, "pattern": [ " A ", diff --git a/src/generated/resources/data/anvilcraft/recipe/magnetoelectric_core.json b/src/generated/resources/data/anvilcraft/recipe/magnetoelectric_core.json index 8a7a2f4849..75d3030e69 100644 --- a/src/generated/resources/data/anvilcraft/recipe/magnetoelectric_core.json +++ b/src/generated/resources/data/anvilcraft/recipe/magnetoelectric_core.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "tag": "c:ingots/copper" - }, - "B": { - "tag": "c:glass_blocks" - }, - "C": { - "item": "anvilcraft:hollow_magnet_block" - } + "A": "#c:ingots/copper", + "B": "#c:glass_blocks", + "C": "anvilcraft:hollow_magnet_block" }, "pattern": [ "ABA", @@ -18,7 +12,6 @@ "ABA" ], "result": { - "count": 1, "id": "anvilcraft:magnetoelectric_core" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_block.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_block.json index 1dd30f96f6..edae3797e0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_block.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:cursed_gold_block" - }, + "ingredient": "anvilcraft:cursed_gold_block", "mass": 2500 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_ingot.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_ingot.json index fddf34f53c..099efa09a6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_ingot.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:cursed_gold_ingot" - }, + "ingredient": "anvilcraft:cursed_gold_ingot", "mass": 250 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_nugget.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_nugget.json index d624a108e3..da20ea992d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_cursed_gold_nugget.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:cursed_gold_nugget" - }, + "ingredient": "anvilcraft:cursed_gold_nugget", "mass": 25 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_block.json index 45a39247be..5d268d0c45 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_block.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:ember_metal_block" - }, + "ingredient": "anvilcraft:ember_metal_block", "mass": 20000 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_ingot.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_ingot.json index 9e495351dc..105e9e5034 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_ingot.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:ember_metal_ingot" - }, + "ingredient": "anvilcraft:ember_metal_ingot", "mass": 2000 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_nugget.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_nugget.json index bb1df29d85..9cce6a4d0f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_ember_metal_nugget.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:ember_metal_nugget" - }, + "ingredient": "anvilcraft:ember_metal_nugget", "mass": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_heavy_iron_block.json index f2063ea3ea..af48d0a023 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_heavy_iron_block.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "mass": 8000 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_block.json index 9f2d4ebe99..5ffd62df6c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_block.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:royal_steel_block" - }, + "ingredient": "anvilcraft:royal_steel_block", "mass": 4000 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_ingot.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_ingot.json index 1fa25eac1c..396d2ce912 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_ingot.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:royal_steel_ingot" - }, + "ingredient": "anvilcraft:royal_steel_ingot", "mass": 400 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_nugget.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_nugget.json index e6e8983e73..b94f63162f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/anvilcraft_royal_steel_nugget.json @@ -1,7 +1,5 @@ { "type": "anvilcraft:mass_inject", - "ingredient": { - "item": "anvilcraft:royal_steel_nugget" - }, + "ingredient": "anvilcraft:royal_steel_nugget", "mass": 40 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/brass.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/brass.json index 8b7ccba59e..509ba5bfdf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/brass.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/brass.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/brass" - }, + "ingredient": "#c:ingots/brass", "mass": 80 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/bronze.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/bronze.json index 1b639d70ef..0c9f547977 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/bronze.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/bronze.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/bronze" - }, + "ingredient": "#c:ingots/bronze", "mass": 80 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/copper.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/copper.json index fc0acd2e2e..3669b63f9f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/copper.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/copper.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/copper" - }, + "ingredient": "#c:ingots/copper", "mass": 90 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/frost_metal.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/frost_metal.json index 84e10a0725..b19889b454 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/frost_metal.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/frost_metal.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/frost_metal" - }, + "ingredient": "#c:ingots/frost_metal", "mass": 300 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/gold.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/gold.json index 26c95900ae..3901da01d0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/gold.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/gold.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/gold" - }, + "ingredient": "#c:ingots/gold", "mass": 190 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/iron.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/iron.json index 9a492b7ffb..0cd60b59a0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/iron.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/iron.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/iron" - }, + "ingredient": "#c:ingots/iron", "mass": 80 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/lead.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/lead.json index 6e9d5e293d..41f7be374c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/lead.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/lead.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/lead" - }, + "ingredient": "#c:ingots/lead", "mass": 110 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/netherite.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/netherite.json index 417a5146d9..8d52c003ee 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/netherite.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/netherite.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/netherite" - }, + "ingredient": "#c:ingots/netherite", "mass": 1500 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/plutonium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/plutonium.json index 4ce1ce060d..e8a67f535b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/plutonium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/plutonium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/plutonium" - }, + "ingredient": "#c:ingots/plutonium", "mass": 190 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/silver.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/silver.json index 1ae46d9807..39da6ac9ed 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/silver.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/silver.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/silver" - }, + "ingredient": "#c:ingots/silver", "mass": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/tin.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/tin.json index 1dcdc32fbb..df2baea007 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/tin.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/tin.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/tin" - }, + "ingredient": "#c:ingots/tin", "mass": 70 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/titanium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/titanium.json index 4ce2703af2..6423ff893d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/titanium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/titanium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/titanium" - }, + "ingredient": "#c:ingots/titanium", "mass": 50 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/transcendium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/transcendium.json index 28d018a77b..70f786e1fb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/transcendium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/transcendium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/transcendium" - }, + "ingredient": "#c:ingots/transcendium", "mass": 2500 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/tungsten.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/tungsten.json index 265476da68..3f04ab18bd 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/tungsten.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/tungsten.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/tungsten" - }, + "ingredient": "#c:ingots/tungsten", "mass": 190 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/uranium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/uranium.json index ed51e3e80a..2df8488f68 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/uranium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/uranium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/uranium" - }, + "ingredient": "#c:ingots/uranium", "mass": 180 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/zinc.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/zinc.json index ad74784e63..29e5987f4d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/zinc.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_ingots/zinc.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:ingots/zinc" - }, + "ingredient": "#c:ingots/zinc", "mass": 70 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/brass.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/brass.json index a6782458a2..1dcf583706 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/brass.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/brass.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/brass" - }, + "ingredient": "#c:nuggets/brass", "mass": 8 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/bronze.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/bronze.json index 01238179c1..e62f52cec5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/bronze.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/bronze.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/bronze" - }, + "ingredient": "#c:nuggets/bronze", "mass": 8 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/copper.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/copper.json index 9204579c36..0ec07ffbbb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/copper.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/copper.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/copper" - }, + "ingredient": "#c:nuggets/copper", "mass": 9 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/frost_metal.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/frost_metal.json index 27ce8fcf32..090f26cee2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/frost_metal.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/frost_metal.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/frost_metal" - }, + "ingredient": "#c:nuggets/frost_metal", "mass": 30 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/gold.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/gold.json index 31b6cb9e52..dac6cc6d65 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/gold.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/gold.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/gold" - }, + "ingredient": "#c:nuggets/gold", "mass": 19 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/iron.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/iron.json index a21b610e1a..5f3ae21449 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/iron.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/iron.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/iron" - }, + "ingredient": "#c:nuggets/iron", "mass": 8 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/lead.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/lead.json index 7d8e13e55c..f530dc1337 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/lead.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/lead.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/lead" - }, + "ingredient": "#c:nuggets/lead", "mass": 11 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/netherite.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/netherite.json index 7c6b8629db..86cce524ca 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/netherite.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/netherite.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/netherite" - }, + "ingredient": "#c:nuggets/netherite", "mass": 150 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/plutonium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/plutonium.json index 971bf2b221..74e5ab4783 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/plutonium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/plutonium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/plutonium" - }, + "ingredient": "#c:nuggets/plutonium", "mass": 19 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/silver.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/silver.json index c68f03942c..6f1246d6ae 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/silver.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/silver.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/silver" - }, + "ingredient": "#c:nuggets/silver", "mass": 10 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/tin.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/tin.json index 6ba5ff5922..d70a18719a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/tin.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/tin.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/tin" - }, + "ingredient": "#c:nuggets/tin", "mass": 7 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/titanium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/titanium.json index 7694076ec8..a92d84d760 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/titanium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/titanium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/titanium" - }, + "ingredient": "#c:nuggets/titanium", "mass": 5 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/transcendium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/transcendium.json index ce883a3d99..ffde50e8bb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/transcendium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/transcendium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/transcendium" - }, + "ingredient": "#c:nuggets/transcendium", "mass": 250 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/tungsten.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/tungsten.json index 4b26613099..aabed001da 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/tungsten.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/tungsten.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/tungsten" - }, + "ingredient": "#c:nuggets/tungsten", "mass": 19 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/uranium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/uranium.json index bb91c279a5..bf5fdf2210 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/uranium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/uranium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/uranium" - }, + "ingredient": "#c:nuggets/uranium", "mass": 18 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/zinc.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/zinc.json index 3d9ebe4ee2..d590df54e7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/zinc.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_nuggets/zinc.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:nuggets/zinc" - }, + "ingredient": "#c:nuggets/zinc", "mass": 7 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/brass.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/brass.json index 7468f67ded..6ba11be067 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/brass.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/brass.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/brass" - }, + "ingredient": "#c:storage_blocks/brass", "mass": 800 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/bronze.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/bronze.json index 57dcb82a36..f81b4ec5f9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/bronze.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/bronze.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/bronze" - }, + "ingredient": "#c:storage_blocks/bronze", "mass": 800 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/copper.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/copper.json index eb62798067..df13909e87 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/copper.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/copper.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/copper" - }, + "ingredient": "#c:storage_blocks/copper", "mass": 900 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/frost_metal.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/frost_metal.json index 852c2a4090..d8fc5bbc12 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/frost_metal.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/frost_metal.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/frost_metal" - }, + "ingredient": "#c:storage_blocks/frost_metal", "mass": 3000 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/gold.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/gold.json index 5d6867f260..e3e4109207 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/gold.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/gold.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/gold" - }, + "ingredient": "#c:storage_blocks/gold", "mass": 1900 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/iron.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/iron.json index 453f3ef9ec..e42a2faf52 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/iron.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/iron.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/iron" - }, + "ingredient": "#c:storage_blocks/iron", "mass": 800 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/lead.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/lead.json index 8325305a48..40027dcb2d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/lead.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/lead.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/lead" - }, + "ingredient": "#c:storage_blocks/lead", "mass": 1100 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/netherite.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/netherite.json index 87506f4d7a..6d24173e6d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/netherite.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/netherite.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/netherite" - }, + "ingredient": "#c:storage_blocks/netherite", "mass": 15000 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/plutonium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/plutonium.json index 0a3dda3c1b..f0107bae0b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/plutonium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/plutonium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/plutonium" - }, + "ingredient": "#c:storage_blocks/plutonium", "mass": 1900 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/silver.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/silver.json index 0e9d75c350..97f07ac9fc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/silver.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/silver.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/silver" - }, + "ingredient": "#c:storage_blocks/silver", "mass": 1000 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/tin.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/tin.json index 6889b88435..e4e12faf05 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/tin.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/tin.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/tin" - }, + "ingredient": "#c:storage_blocks/tin", "mass": 700 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/titanium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/titanium.json index b52faf7ca1..efaa7690f8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/titanium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/titanium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/titanium" - }, + "ingredient": "#c:storage_blocks/titanium", "mass": 500 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/transcendium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/transcendium.json index c096fcabca..ec02d61a6b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/transcendium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/transcendium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/transcendium" - }, + "ingredient": "#c:storage_blocks/transcendium", "mass": 25000 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/tungsten.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/tungsten.json index 2be18d8b6d..e37fe1834c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/tungsten.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/tungsten.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/tungsten" - }, + "ingredient": "#c:storage_blocks/tungsten", "mass": 1900 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/uranium.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/uranium.json index 858076a07a..7189cc2ddc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/uranium.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/uranium.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/uranium" - }, + "ingredient": "#c:storage_blocks/uranium", "mass": 1800 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/zinc.json b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/zinc.json index dfb8712224..61ff85a52e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/zinc.json +++ b/src/generated/resources/data/anvilcraft/recipe/mass_inject/c_storage_blocks/zinc.json @@ -9,8 +9,6 @@ } ], "type": "anvilcraft:mass_inject", - "ingredient": { - "tag": "c:storage_blocks/zinc" - }, + "ingredient": "#c:storage_blocks/zinc", "mass": 700 } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/mob_transform_with_item/zombie_to_giant_anvil.json b/src/generated/resources/data/anvilcraft/recipe/mob_transform_with_item/zombie_to_giant_anvil.json index c0f3a468cb..2088298be0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/mob_transform_with_item/zombie_to_giant_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/mob_transform_with_item/zombie_to_giant_anvil.json @@ -8,7 +8,6 @@ ], "input": "minecraft:zombie", "item_result": { - "count": 1, "id": "anvilcraft:giant_anvil" }, "special_result": { diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/acceleration_ring.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/acceleration_ring.json index 52c4e23900..fab81d80d5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/acceleration_ring.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/acceleration_ring.json @@ -34,7 +34,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:acceleration_ring" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/deflection_ring.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/deflection_ring.json index 9088409e62..05e37f3e10 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/deflection_ring.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/deflection_ring.json @@ -28,7 +28,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:deflection_ring" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/diamond_block.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/diamond_block.json index f393c9de22..7c1493e8dc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/diamond_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/diamond_block.json @@ -25,7 +25,6 @@ } }, "result": { - "count": 1, "id": "minecraft:diamond_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/giant_anvil_1.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/giant_anvil_1.json index 26c7d552e8..6245ff53c2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/giant_anvil_1.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/giant_anvil_1.json @@ -79,7 +79,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:giant_anvil" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/giant_anvil_2.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/giant_anvil_2.json index c983f4d6e6..4729ae18c3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/giant_anvil_2.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/giant_anvil_2.json @@ -31,7 +31,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:giant_anvil" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/large_cake.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/large_cake.json index 3c38ae426a..b5ea121378 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/large_cake.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/large_cake.json @@ -31,7 +31,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:large_cake" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/large_crate.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/large_crate.json new file mode 100644 index 0000000000..0ac5df1ab9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/large_crate.json @@ -0,0 +1,33 @@ +{ + "type": "anvilcraft:multiblock", + "pattern": { + "layers": [ + [ + "AAA", + "AAA", + "AAA" + ], + [ + "AAA", + "ABA", + "AAA" + ], + [ + "AAA", + "AAA", + "AAA" + ] + ], + "symbols": { + "A": { + "block": "#c:stripped_logs" + }, + "B": { + "block": "anvilcraft:resin_block" + } + } + }, + "result": { + "id": "anvilcraft:large_crate" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/large_fluid_tank_1.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/large_fluid_tank_1.json index 4671e049e3..f89840b841 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/large_fluid_tank_1.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/large_fluid_tank_1.json @@ -25,7 +25,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:large_fluid_tank" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/large_fluid_tank_2.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/large_fluid_tank_2.json index 0895607fb7..25f02dba21 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/large_fluid_tank_2.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/large_fluid_tank_2.json @@ -25,7 +25,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:large_fluid_tank" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/menger_sponge.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/menger_sponge.json index ba1b48d074..2c4c2bf9c0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/menger_sponge.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/menger_sponge.json @@ -28,7 +28,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:menger_sponge" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/menger_sponge_2.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/menger_sponge_2.json index 359a68b955..e9c423e8a4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/menger_sponge_2.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/menger_sponge_2.json @@ -109,7 +109,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:menger_sponge" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/shulker_container.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/shulker_container.json index 6887313088..0e26eb0dad 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/shulker_container.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/shulker_container.json @@ -28,7 +28,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:shulker_container" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock/singularity_crystal.json b/src/generated/resources/data/anvilcraft/recipe/multiblock/singularity_crystal.json index 586948bc1d..127e625929 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock/singularity_crystal.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock/singularity_crystal.json @@ -28,7 +28,6 @@ } }, "result": { - "count": 1, "id": "anvilcraft:singularity_crystal" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock_conversion/large_crate.json b/src/generated/resources/data/anvilcraft/recipe/multiblock_conversion/large_crate.json new file mode 100644 index 0000000000..856ba655e3 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock_conversion/large_crate.json @@ -0,0 +1,213 @@ +{ + "type": "anvilcraft:multiblock_conversion", + "inputPattern": { + "layers": [ + [ + "AAA", + "AAA", + "AAA" + ], + [ + "AAA", + "ABA", + "AAA" + ], + [ + "AAA", + "AAA", + "AAA" + ] + ], + "symbols": { + "A": { + "block": "#c:stripped_logs" + }, + "B": { + "block": "anvilcraft:resin_block" + } + } + }, + "outputPattern": { + "layers": [ + [ + "ABC", + "DEF", + "GHI" + ], + [ + "JKL", + "MNO", + "PQR" + ], + [ + "STU", + "VWX", + "YZ[" + ] + ], + "symbols": { + "A": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_wn" + } + }, + "B": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_n" + } + }, + "C": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_en" + } + }, + "D": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_w" + } + }, + "E": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_center" + } + }, + "F": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_e" + } + }, + "G": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_ws" + } + }, + "H": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_s" + } + }, + "I": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "bottom_es" + } + }, + "J": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_wn" + } + }, + "K": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_n" + } + }, + "L": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_en" + } + }, + "M": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_w" + } + }, + "N": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_center" + } + }, + "O": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_e" + } + }, + "P": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_ws" + } + }, + "Q": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_s" + } + }, + "R": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "mid_es" + } + }, + "S": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_wn" + } + }, + "T": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_n" + } + }, + "U": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_en" + } + }, + "V": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_w" + } + }, + "W": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_center" + } + }, + "X": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_e" + } + }, + "Y": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_ws" + } + }, + "Z": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_s" + } + }, + "[": { + "block": "anvilcraft:large_crate", + "properties": { + "half": "top_es" + } + } + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiblock_conversion/spawner.json b/src/generated/resources/data/anvilcraft/recipe/multiblock_conversion/spawner.json index 6bc403f690..89371dddf1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiblock_conversion/spawner.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiblock_conversion/spawner.json @@ -23,13 +23,13 @@ "block": "anvilcraft:cursed_gold_block" }, "B": { - "block": "minecraft:chain", + "block": "minecraft:iron_chain", "properties": { "axis": "x" } }, "C": { - "block": "minecraft:chain", + "block": "minecraft:iron_chain", "properties": { "axis": "z" } @@ -38,7 +38,7 @@ "block": "minecraft:soul_fire" }, "E": { - "block": "minecraft:chain", + "block": "minecraft:iron_chain", "properties": { "axis": "y" } diff --git a/src/generated/resources/data/anvilcraft/recipe/multiphase_matter_block.json b/src/generated/resources/data/anvilcraft/recipe/multiphase_matter_block.json index 79898ae249..40c3d3bf0d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiphase_matter_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiphase_matter_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:multiphase_matter" - } + "A": "anvilcraft:multiphase_matter" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:multiphase_matter_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/multiphase_matter_from_block.json b/src/generated/resources/data/anvilcraft/recipe/multiphase_matter_from_block.json index ec60d873dd..33d6a280f5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiphase_matter_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiphase_matter_from_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:multiphase_matter_block" - } + "anvilcraft:multiphase_matter_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/multiphase_transcendium.json b/src/generated/resources/data/anvilcraft/recipe/multiphase_transcendium.json index ef6b71c1ae..983cf3718e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/multiphase_transcendium.json +++ b/src/generated/resources/data/anvilcraft/recipe/multiphase_transcendium.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:transcendium_ingot" - }, - "base": { - "item": "anvilcraft:multiphase_matter" - }, + "addition": "anvilcraft:transcendium_ingot", + "base": "anvilcraft:multiphase_matter", "result": { - "count": 1, "id": "anvilcraft:multiphase_transcendium" }, - "template": { - "item": "anvilcraft:transcendium_upgrade_smithing_template" - } + "template": "anvilcraft:transcendium_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/negative_matter.json b/src/generated/resources/data/anvilcraft/recipe/negative_matter.json index e77ef02a07..eb0d66128e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/negative_matter.json +++ b/src/generated/resources/data/anvilcraft/recipe/negative_matter.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:negative_matter_nugget" - } + "A": "anvilcraft:negative_matter_nugget" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:negative_matter" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/negative_matter_block.json b/src/generated/resources/data/anvilcraft/recipe/negative_matter_block.json index 6c0aae38e1..e9b2aaf8b5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/negative_matter_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/negative_matter_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:negative_matter" - } + "A": "anvilcraft:negative_matter" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:negative_matter_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/negative_matter_from_block.json b/src/generated/resources/data/anvilcraft/recipe/negative_matter_from_block.json index 13ea1b4075..91a43367ba 100644 --- a/src/generated/resources/data/anvilcraft/recipe/negative_matter_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/negative_matter_from_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:negative_matter_block" - } + "anvilcraft:negative_matter_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/negative_matter_nugget_from_ingot.json b/src/generated/resources/data/anvilcraft/recipe/negative_matter_nugget_from_ingot.json index 265e4ef033..e55f971fd1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/negative_matter_nugget_from_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/negative_matter_nugget_from_ingot.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:negative_matter" - } + "anvilcraft:negative_matter" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/neoforge.json b/src/generated/resources/data/anvilcraft/recipe/neoforge.json index 598cbd5603..bb6104d013 100644 --- a/src/generated/resources/data/anvilcraft/recipe/neoforge.json +++ b/src/generated/resources/data/anvilcraft/recipe/neoforge.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:cake_block" - }, - "B": { - "item": "anvilcraft:creamy_bread_roll" - } + "A": "anvilcraft:cake_block", + "B": "anvilcraft:creamy_bread_roll" }, "pattern": [ "AAA", @@ -15,7 +11,6 @@ "BBB" ], "result": { - "count": 1, "id": "anvilcraft:neoforge" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/netherite_crystal_nucleus.json b/src/generated/resources/data/anvilcraft/recipe/netherite_crystal_nucleus.json index a3a398897d..276a9a63e8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/netherite_crystal_nucleus.json +++ b/src/generated/resources/data/anvilcraft/recipe/netherite_crystal_nucleus.json @@ -2,18 +2,13 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "tag": "c:plates/tungsten" - }, - "B": { - "item": "minecraft:netherite_scrap" - } + "A": "#c:plates/tungsten", + "B": "minecraft:netherite_scrap" }, "pattern": [ "ABA" ], "result": { - "count": 1, "id": "anvilcraft:netherite_crystal_nucleus" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/netherrack.json b/src/generated/resources/data/anvilcraft/recipe/netherrack.json new file mode 100644 index 0000000000..83adfa9040 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/netherrack.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "blocks", + "cookingtime": 200, + "experience": 0.0, + "ingredient": "anvilcraft:rotten_flesh_block", + "result": { + "id": "minecraft:netherrack" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/neutron_irradiator.json b/src/generated/resources/data/anvilcraft/recipe/neutron_irradiator.json index c59076d2ec..69acfc76c4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/neutron_irradiator.json +++ b/src/generated/resources/data/anvilcraft/recipe/neutron_irradiator.json @@ -3,22 +3,12 @@ "category": "misc", "key": { "A": [ - { - "item": "anvilcraft:neutronium_ingot" - }, - { - "item": "anvilcraft:charged_neutronium_ingot" - }, - { - "item": "anvilcraft:stable_neutronium_ingot" - } + "anvilcraft:neutronium_ingot", + "anvilcraft:charged_neutronium_ingot", + "anvilcraft:stable_neutronium_ingot" ], - "B": { - "item": "anvilcraft:ember_metal_ingot" - }, - "C": { - "item": "anvilcraft:negative_matter_block" - } + "B": "anvilcraft:ember_metal_ingot", + "C": "anvilcraft:negative_matter_block" }, "pattern": [ " A ", @@ -26,7 +16,6 @@ "BBB" ], "result": { - "count": 1, "id": "anvilcraft:neutron_irradiator" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/null/neutron_irradation/uranium_block_explosion.json b/src/generated/resources/data/anvilcraft/recipe/null/neutron_irradation/uranium_block_explosion.json new file mode 100644 index 0000000000..0b2e2cc166 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/null/neutron_irradation/uranium_block_explosion.json @@ -0,0 +1,69 @@ +{ + "type": "anvillib_recipe:in_world_recipe", + "compatible": true, + "conflicting": [ + { + "type": "anvillib_recipe:has_item_ingredient", + "item": { + "items": "anvilcraft:uranium_block" + }, + "offset": [ + 0.0, + -0.375, + 0.0 + ], + "range": [ + 0.75, + 0.75, + 0.75 + ] + } + ], + "icon": { + "id": "minecraft:anvil" + }, + "non_conflicting": [ + { + "type": "anvilcraft:has_cauldron", + "offset": [ + 0.0, + -1.0, + 0.0 + ] + }, + { + "type": "anvillib_recipe:has_block", + "offset": [ + 0.0, + -2.0, + 0.0 + ], + "predicate": { + "blocks": "anvilcraft:neutron_irradiator" + } + } + ], + "outcomes": [ + { + "type": "anvillib_recipe:choose_one", + "choices": [ + { + "outcome": { + "type": "anvillib_recipe:produce_explosion", + "fire": false, + "interact": "block", + "offset": [ + 0.0, + -0.75, + 0.0 + ], + "power": 3.0 + }, + "weight": 1.0 + } + ] + } + ], + "priority": 5, + "trigger": "anvilcraft:on_anvil_fall_on" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_slab.json new file mode 100644 index 0000000000..b8fd928435 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:orange_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:orange_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_stair.json new file mode 100644 index 0000000000..db053fbb95 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:orange_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:orange_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_wall.json new file mode 100644 index 0000000000..ba7708fb91 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/orange_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:orange_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:orange_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/overseer.json b/src/generated/resources/data/anvilcraft/recipe/overseer.json index bd5d1bf4fe..74dad1e8da 100644 --- a/src/generated/resources/data/anvilcraft/recipe/overseer.json +++ b/src/generated/resources/data/anvilcraft/recipe/overseer.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:obsidian" - }, - "B": { - "item": "minecraft:ender_eye" - }, - "C": { - "item": "anvilcraft:royal_steel_block" - } + "A": "minecraft:obsidian", + "B": "minecraft:ender_eye", + "C": "anvilcraft:royal_steel_block" }, "pattern": [ "ABA", @@ -18,7 +12,6 @@ "CBC" ], "result": { - "count": 1, "id": "anvilcraft:overseer" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/penrose_sphere_component.json b/src/generated/resources/data/anvilcraft/recipe/penrose_sphere_component.json new file mode 100644 index 0000000000..cb864e6b82 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/penrose_sphere_component.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "anvilcraft:transcendium_ingot", + "B": "anvilcraft:heliostats", + "C": "anvilcraft:ruby_prism" + }, + "pattern": [ + "ABA", + "BCB", + "ABA" + ], + "result": { + "count": 4, + "id": "anvilcraft:penrose_sphere_component" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_axe_and_royal_steel_axe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_axe_and_royal_steel_axe.json index 050241fd2c..3cfc6b0c9b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_axe_and_royal_steel_axe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_axe_and_royal_steel_axe.json @@ -1,8 +1,12 @@ { "type": "anvilcraft:permutation", "inputs": [ - "minecraft:diamond_axe", - "anvilcraft:royal_steel_axe" + { + "id": "minecraft:diamond_axe" + }, + { + "id": "anvilcraft:royal_steel_axe" + } ], "material": { "items": "anvilcraft:royal_steel_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_hoe_and_royal_steel_hoe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_hoe_and_royal_steel_hoe.json index 9f11b17394..9b0fbc7ec4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_hoe_and_royal_steel_hoe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_hoe_and_royal_steel_hoe.json @@ -1,8 +1,12 @@ { "type": "anvilcraft:permutation", "inputs": [ - "minecraft:diamond_hoe", - "anvilcraft:royal_steel_hoe" + { + "id": "minecraft:diamond_hoe" + }, + { + "id": "anvilcraft:royal_steel_hoe" + } ], "material": { "items": "anvilcraft:royal_steel_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_pickaxe_and_royal_steel_pickaxe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_pickaxe_and_royal_steel_pickaxe.json index a01098141e..6e83f0a4a8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_pickaxe_and_royal_steel_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_pickaxe_and_royal_steel_pickaxe.json @@ -1,8 +1,12 @@ { "type": "anvilcraft:permutation", "inputs": [ - "minecraft:diamond_pickaxe", - "anvilcraft:royal_steel_pickaxe" + { + "id": "minecraft:diamond_pickaxe" + }, + { + "id": "anvilcraft:royal_steel_pickaxe" + } ], "material": { "items": "anvilcraft:royal_steel_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_shovel_and_royal_steel_shovel.json b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_shovel_and_royal_steel_shovel.json index 5529a37732..4378509a03 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_shovel_and_royal_steel_shovel.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_shovel_and_royal_steel_shovel.json @@ -1,8 +1,12 @@ { "type": "anvilcraft:permutation", "inputs": [ - "minecraft:diamond_shovel", - "anvilcraft:royal_steel_shovel" + { + "id": "minecraft:diamond_shovel" + }, + { + "id": "anvilcraft:royal_steel_shovel" + } ], "material": { "items": "anvilcraft:royal_steel_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_sword_and_royal_steel_sword.json b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_sword_and_royal_steel_sword.json index 558dd81ddc..c157bc4155 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_sword_and_royal_steel_sword.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/diamond_sword_and_royal_steel_sword.json @@ -1,8 +1,12 @@ { "type": "anvilcraft:permutation", "inputs": [ - "minecraft:diamond_sword", - "anvilcraft:royal_steel_sword" + { + "id": "minecraft:diamond_sword" + }, + { + "id": "anvilcraft:royal_steel_sword" + } ], "material": { "items": "anvilcraft:royal_steel_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_anvil_and_ember_anvil.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_anvil_and_ember_anvil.json index 6237c81252..6b15fa406d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_anvil_and_ember_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_anvil_and_ember_anvil.json @@ -1,8 +1,12 @@ { "type": "anvilcraft:permutation", "inputs": [ - "anvilcraft:frost_anvil", - "anvilcraft:ember_anvil" + { + "id": "anvilcraft:frost_anvil" + }, + { + "id": "anvilcraft:ember_anvil" + } ], "material": { "items": "anvilcraft:multiphase_matter_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_grindstone_and_ember_grindstone.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_grindstone_and_ember_grindstone.json index e5fd5177aa..75ffd06c2c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_grindstone_and_ember_grindstone.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_grindstone_and_ember_grindstone.json @@ -1,8 +1,12 @@ { "type": "anvilcraft:permutation", "inputs": [ - "anvilcraft:frost_grindstone", - "anvilcraft:ember_grindstone" + { + "id": "anvilcraft:frost_grindstone" + }, + { + "id": "anvilcraft:ember_grindstone" + } ], "material": { "items": "anvilcraft:multiphase_matter_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_axe_and_ember_metal_axe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_axe_and_ember_metal_axe.json index dd25d555f3..3baf370f71 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_axe_and_ember_metal_axe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_axe_and_ember_metal_axe.json @@ -10,7 +10,9 @@ ] } ], - "result": "anvilcraft:frost_metal_axe" + "result": { + "id": "anvilcraft:frost_metal_axe" + } }, { "modifiers": [ @@ -25,7 +27,7 @@ "dest": { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, "input": "input.0", "orig": "anvilcraft:merciless_enchantments" @@ -37,7 +39,9 @@ ] } ], - "result": "anvilcraft:ember_metal_axe" + "result": { + "id": "anvilcraft:ember_metal_axe" + } } ], "material": { diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_heavy_halberd_and_ember_metal_heavy_halberd.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_heavy_halberd_and_ember_metal_heavy_halberd.json index 57e4aecc9a..a12087dc32 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_heavy_halberd_and_ember_metal_heavy_halberd.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_heavy_halberd_and_ember_metal_heavy_halberd.json @@ -10,7 +10,9 @@ ] } ], - "result": "anvilcraft:frost_metal_heavy_halberd" + "result": { + "id": "anvilcraft:frost_metal_heavy_halberd" + } }, { "modifiers": [ @@ -25,7 +27,7 @@ "dest": { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, "input": "input.0", "orig": "anvilcraft:merciless_enchantments" @@ -37,7 +39,9 @@ ] } ], - "result": "anvilcraft:ember_metal_heavy_halberd" + "result": { + "id": "anvilcraft:ember_metal_heavy_halberd" + } } ], "material": { diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_hoe_and_ember_metal_hoe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_hoe_and_ember_metal_hoe.json index 3b5736ce47..048fc89017 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_hoe_and_ember_metal_hoe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_hoe_and_ember_metal_hoe.json @@ -10,7 +10,9 @@ ] } ], - "result": "anvilcraft:frost_metal_hoe" + "result": { + "id": "anvilcraft:frost_metal_hoe" + } }, { "modifiers": [ @@ -25,7 +27,7 @@ "dest": { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, "input": "input.0", "orig": "anvilcraft:merciless_enchantments" @@ -37,7 +39,9 @@ ] } ], - "result": "anvilcraft:ember_metal_hoe" + "result": { + "id": "anvilcraft:ember_metal_hoe" + } } ], "material": { diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_pickaxe_and_ember_metal_pickaxe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_pickaxe_and_ember_metal_pickaxe.json index 44af659c43..06dd3d9f78 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_pickaxe_and_ember_metal_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_pickaxe_and_ember_metal_pickaxe.json @@ -10,7 +10,9 @@ ] } ], - "result": "anvilcraft:frost_metal_pickaxe" + "result": { + "id": "anvilcraft:frost_metal_pickaxe" + } }, { "modifiers": [ @@ -25,7 +27,7 @@ "dest": { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, "input": "input.0", "orig": "anvilcraft:merciless_enchantments" @@ -37,7 +39,9 @@ ] } ], - "result": "anvilcraft:ember_metal_pickaxe" + "result": { + "id": "anvilcraft:ember_metal_pickaxe" + } } ], "material": { diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_resonator_and_ember_metal_resonator.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_resonator_and_ember_metal_resonator.json index b1f40480ac..7bbac28e7d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_resonator_and_ember_metal_resonator.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_resonator_and_ember_metal_resonator.json @@ -10,7 +10,9 @@ ] } ], - "result": "anvilcraft:frost_metal_resonator" + "result": { + "id": "anvilcraft:frost_metal_resonator" + } }, { "modifiers": [ @@ -25,7 +27,7 @@ "dest": { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, "input": "input.0", "orig": "anvilcraft:merciless_enchantments" @@ -37,7 +39,9 @@ ] } ], - "result": "anvilcraft:ember_metal_resonator" + "result": { + "id": "anvilcraft:ember_metal_resonator" + } } ], "material": { diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_shovel_and_ember_metal_shovel.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_shovel_and_ember_metal_shovel.json index e76e9b6b13..994379f525 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_shovel_and_ember_metal_shovel.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_shovel_and_ember_metal_shovel.json @@ -10,7 +10,9 @@ ] } ], - "result": "anvilcraft:frost_metal_shovel" + "result": { + "id": "anvilcraft:frost_metal_shovel" + } }, { "modifiers": [ @@ -25,7 +27,7 @@ "dest": { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, "input": "input.0", "orig": "anvilcraft:merciless_enchantments" @@ -37,7 +39,9 @@ ] } ], - "result": "anvilcraft:ember_metal_shovel" + "result": { + "id": "anvilcraft:ember_metal_shovel" + } } ], "material": { diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_sword_and_ember_metal_sword.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_sword_and_ember_metal_sword.json index 0b22d5b3ab..3f9f70beaf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_sword_and_ember_metal_sword.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_metal_sword_and_ember_metal_sword.json @@ -10,7 +10,9 @@ ] } ], - "result": "anvilcraft:frost_metal_sword" + "result": { + "id": "anvilcraft:frost_metal_sword" + } }, { "modifiers": [ @@ -25,7 +27,7 @@ "dest": { "type": "anvilcraft:item_enchantments", "component": "minecraft:enchantments", - "input": 0 + "input": "input.0" }, "input": "input.0", "orig": "anvilcraft:merciless_enchantments" @@ -37,7 +39,9 @@ ] } ], - "result": "anvilcraft:ember_metal_sword" + "result": { + "id": "anvilcraft:ember_metal_sword" + } } ], "material": { diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_smithing_table_and_ember_smithing_table.json b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_smithing_table_and_ember_smithing_table.json index 26fa5efc2a..2a9f4169fd 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/frost_smithing_table_and_ember_smithing_table.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/frost_smithing_table_and_ember_smithing_table.json @@ -1,8 +1,12 @@ { "type": "anvilcraft:permutation", "inputs": [ - "anvilcraft:frost_smithing_table", - "anvilcraft:ember_smithing_table" + { + "id": "anvilcraft:frost_smithing_table" + }, + { + "id": "anvilcraft:ember_smithing_table" + } ], "material": { "items": "anvilcraft:multiphase_matter_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/gem_amulets.json b/src/generated/resources/data/anvilcraft/recipe/permutation/gem_amulets.json index 60939d7576..897a851403 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/gem_amulets.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/gem_amulets.json @@ -1,10 +1,18 @@ { "type": "anvilcraft:permutation", "inputs": [ - "anvilcraft:emerald_amulet", - "anvilcraft:topaz_amulet", - "anvilcraft:ruby_amulet", - "anvilcraft:sapphire_amulet" + { + "id": "anvilcraft:emerald_amulet" + }, + { + "id": "anvilcraft:topaz_amulet" + }, + { + "id": "anvilcraft:ruby_amulet" + }, + { + "id": "anvilcraft:sapphire_amulet" + } ], "material": { "items": "anvilcraft:chromatic_stone" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_axe_and_ember_metal_axe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_axe_and_ember_metal_axe.json index e65de9345c..ee05aa6e84 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_axe_and_ember_metal_axe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_axe_and_ember_metal_axe.json @@ -10,9 +10,13 @@ ] } ], - "result": "minecraft:netherite_axe" + "result": { + "id": "minecraft:netherite_axe" + } }, - "anvilcraft:ember_metal_axe" + { + "id": "anvilcraft:ember_metal_axe" + } ], "material": { "items": "anvilcraft:ember_metal_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_hoe_and_ember_metal_hoe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_hoe_and_ember_metal_hoe.json index e3627bb105..5e667a6236 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_hoe_and_ember_metal_hoe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_hoe_and_ember_metal_hoe.json @@ -10,9 +10,13 @@ ] } ], - "result": "minecraft:netherite_hoe" + "result": { + "id": "minecraft:netherite_hoe" + } }, - "anvilcraft:ember_metal_hoe" + { + "id": "anvilcraft:ember_metal_hoe" + } ], "material": { "items": "anvilcraft:ember_metal_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_pickaxe_and_ember_metal_pickaxe.json b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_pickaxe_and_ember_metal_pickaxe.json index eee62d861d..0f8149db13 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_pickaxe_and_ember_metal_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_pickaxe_and_ember_metal_pickaxe.json @@ -10,9 +10,13 @@ ] } ], - "result": "minecraft:netherite_pickaxe" + "result": { + "id": "minecraft:netherite_pickaxe" + } }, - "anvilcraft:ember_metal_pickaxe" + { + "id": "anvilcraft:ember_metal_pickaxe" + } ], "material": { "items": "anvilcraft:ember_metal_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_shovel_and_ember_metal_shovel.json b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_shovel_and_ember_metal_shovel.json index 869a5fe7f1..56fe4b5ccc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_shovel_and_ember_metal_shovel.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_shovel_and_ember_metal_shovel.json @@ -10,9 +10,13 @@ ] } ], - "result": "minecraft:netherite_shovel" + "result": { + "id": "minecraft:netherite_shovel" + } }, - "anvilcraft:ember_metal_shovel" + { + "id": "anvilcraft:ember_metal_shovel" + } ], "material": { "items": "anvilcraft:ember_metal_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_sword_and_ember_metal_sword.json b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_sword_and_ember_metal_sword.json index f6379e2b40..b6e220df8f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_sword_and_ember_metal_sword.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation/netherite_sword_and_ember_metal_sword.json @@ -10,9 +10,13 @@ ] } ], - "result": "minecraft:netherite_sword" + "result": { + "id": "minecraft:netherite_sword" + } }, - "anvilcraft:ember_metal_sword" + { + "id": "anvilcraft:ember_metal_sword" + } ], "material": { "items": "anvilcraft:ember_metal_ingot" diff --git a/src/generated/resources/data/anvilcraft/recipe/permutation_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/permutation_smithing_template.json index 0e280036ce..2ec02df2e9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/permutation_smithing_template.json +++ b/src/generated/resources/data/anvilcraft/recipe/permutation_smithing_template.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "E": { - "item": "anvilcraft:earth_core_shard" - }, - "T": { - "tag": "anvilcraft:templates" - }, - "V": { - "item": "anvilcraft:void_matter" - } + "E": "anvilcraft:earth_core_shard", + "T": "#anvilcraft:templates", + "V": "anvilcraft:void_matter" }, "pattern": [ "EEE", @@ -18,7 +12,6 @@ "VVV" ], "result": { - "count": 1, "id": "anvilcraft:permutation_smithing_template" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/piezoelectric_crystal.json b/src/generated/resources/data/anvilcraft/recipe/piezoelectric_crystal.json index c42f627e8c..9aaa140b88 100644 --- a/src/generated/resources/data/anvilcraft/recipe/piezoelectric_crystal.json +++ b/src/generated/resources/data/anvilcraft/recipe/piezoelectric_crystal.json @@ -3,12 +3,8 @@ "category": "misc", "group": "anvilcraft:piezoelectric_crystal", "key": { - "A": { - "item": "minecraft:copper_ingot" - }, - "B": { - "item": "minecraft:quartz_block" - } + "A": "minecraft:copper_ingot", + "B": "minecraft:quartz_block" }, "pattern": [ "ABA", diff --git a/src/generated/resources/data/anvilcraft/recipe/piezoelectric_crystal_amethyst.json b/src/generated/resources/data/anvilcraft/recipe/piezoelectric_crystal_amethyst.json index eb1e28a4a7..c9f5173b6c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/piezoelectric_crystal_amethyst.json +++ b/src/generated/resources/data/anvilcraft/recipe/piezoelectric_crystal_amethyst.json @@ -3,12 +3,8 @@ "category": "misc", "group": "anvilcraft:piezoelectric_crystal", "key": { - "A": { - "item": "minecraft:copper_ingot" - }, - "B": { - "item": "minecraft:amethyst_block" - } + "A": "minecraft:copper_ingot", + "B": "minecraft:amethyst_block" }, "pattern": [ "ABA", diff --git a/src/generated/resources/data/anvilcraft/recipe/pill.json b/src/generated/resources/data/anvilcraft/recipe/pill.json index 301b93c9d6..f954c25fcb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/pill.json +++ b/src/generated/resources/data/anvilcraft/recipe/pill.json @@ -1,4 +1,3 @@ { - "type": "anvilcraft:pill_recipe", - "category": "misc" + "type": "anvilcraft:pill_recipe" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/pill_box.json b/src/generated/resources/data/anvilcraft/recipe/pill_box.json index 50207b816b..14d7413d4d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/pill_box.json +++ b/src/generated/resources/data/anvilcraft/recipe/pill_box.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:hardend_resin" - }, - "B": { - "item": "anvilcraft:pill" - } + "A": "anvilcraft:hardend_resin", + "B": "anvilcraft:pill" }, "pattern": [ "AAA", @@ -15,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:pill_box" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_slab.json new file mode 100644 index 0000000000..e8a081ab50 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:pink_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:pink_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_stair.json new file mode 100644 index 0000000000..556ef50996 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:pink_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:pink_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_wall.json new file mode 100644 index 0000000000..1531dd23ea --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/pink_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:pink_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:pink_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/plutonium_block.json b/src/generated/resources/data/anvilcraft/recipe/plutonium_block.json index cba54346ea..779ee45c9f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/plutonium_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/plutonium_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/plutonium" - } + "A": "#c:ingots/plutonium" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:plutonium_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/plutonium_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/plutonium_ingot_from_block.json index 82a4c5ad67..1507c04b87 100644 --- a/src/generated/resources/data/anvilcraft/recipe/plutonium_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/plutonium_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:plutonium_ingot", "ingredients": [ - { - "item": "anvilcraft:plutonium_block" - } + "anvilcraft:plutonium_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/plutonium_ingot_from_nuggets.json b/src/generated/resources/data/anvilcraft/recipe/plutonium_ingot_from_nuggets.json index 02718289cf..de52537980 100644 --- a/src/generated/resources/data/anvilcraft/recipe/plutonium_ingot_from_nuggets.json +++ b/src/generated/resources/data/anvilcraft/recipe/plutonium_ingot_from_nuggets.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:plutonium_ingot", "key": { - "A": { - "tag": "c:nuggets/plutonium" - } + "A": "#c:nuggets/plutonium" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:plutonium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/plutonium_nugget_from_ingot.json b/src/generated/resources/data/anvilcraft/recipe/plutonium_nugget_from_ingot.json index a1adf372f0..8f33a753c8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/plutonium_nugget_from_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/plutonium_nugget_from_ingot.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/plutonium" - } + "#c:ingots/plutonium" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/plutonium_pressure_plate_from_ingots_plutonium.json b/src/generated/resources/data/anvilcraft/recipe/plutonium_pressure_plate_from_ingots_plutonium.json index 76175a8532..9c0bb5c965 100644 --- a/src/generated/resources/data/anvilcraft/recipe/plutonium_pressure_plate_from_ingots_plutonium.json +++ b/src/generated/resources/data/anvilcraft/recipe/plutonium_pressure_plate_from_ingots_plutonium.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/plutonium" - } + "A": "#c:ingots/plutonium" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:plutonium_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/power_converter_big.json b/src/generated/resources/data/anvilcraft/recipe/power_converter_big.json index fed7d4eaff..f2d1aed958 100644 --- a/src/generated/resources/data/anvilcraft/recipe/power_converter_big.json +++ b/src/generated/resources/data/anvilcraft/recipe/power_converter_big.json @@ -2,19 +2,14 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:magnetoelectric_core" - }, - "B": { - "item": "minecraft:copper_block" - } + "A": "anvilcraft:magnetoelectric_core", + "B": "minecraft:copper_block" }, "pattern": [ "A", "B" ], "result": { - "count": 1, "id": "anvilcraft:power_converter_big" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/power_converter_big_from_middle.json b/src/generated/resources/data/anvilcraft/recipe/power_converter_big_from_middle.json index daf7f2e9b9..d8699854c9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/power_converter_big_from_middle.json +++ b/src/generated/resources/data/anvilcraft/recipe/power_converter_big_from_middle.json @@ -1,18 +1,17 @@ { - "type": "minecraft:crafting_shaped", + "type": "minecraft:crafting_shapeless", "category": "misc", - "key": { - "A": { - "item": "anvilcraft:power_converter_middle" - } - }, - "pattern": [ - "A", - "A", - "A" + "ingredients": [ + "anvilcraft:power_converter_middle", + "anvilcraft:power_converter_middle", + "anvilcraft:power_converter_middle", + "anvilcraft:power_converter_middle", + "anvilcraft:power_converter_middle", + "anvilcraft:power_converter_middle", + "anvilcraft:power_converter_middle", + "anvilcraft:power_converter_middle" ], "result": { - "count": 1, "id": "anvilcraft:power_converter_big" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/power_converter_big_from_small.json b/src/generated/resources/data/anvilcraft/recipe/power_converter_big_from_small.json deleted file mode 100644 index f4a34de3f8..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/power_converter_big_from_small.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "A": { - "item": "anvilcraft:power_converter_small" - } - }, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "result": { - "count": 1, - "id": "anvilcraft:power_converter_big" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/power_converter_middle_from_big.json b/src/generated/resources/data/anvilcraft/recipe/power_converter_middle_from_big.json new file mode 100644 index 0000000000..1bf3edea8a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/power_converter_middle_from_big.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "anvilcraft:power_converter_big" + ], + "result": { + "count": 8, + "id": "anvilcraft:power_converter_middle" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/power_converter_middle_from_small.json b/src/generated/resources/data/anvilcraft/recipe/power_converter_middle_from_small.json index 608ac9c507..d744595a6d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/power_converter_middle_from_small.json +++ b/src/generated/resources/data/anvilcraft/recipe/power_converter_middle_from_small.json @@ -1,18 +1,17 @@ { - "type": "minecraft:crafting_shaped", + "type": "minecraft:crafting_shapeless", "category": "misc", - "key": { - "A": { - "item": "anvilcraft:power_converter_small" - } - }, - "pattern": [ - "A", - "A", - "A" + "ingredients": [ + "anvilcraft:power_converter_small", + "anvilcraft:power_converter_small", + "anvilcraft:power_converter_small", + "anvilcraft:power_converter_small", + "anvilcraft:power_converter_small", + "anvilcraft:power_converter_small", + "anvilcraft:power_converter_small", + "anvilcraft:power_converter_small" ], "result": { - "count": 1, "id": "anvilcraft:power_converter_middle" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/power_converter_small_from_big.json b/src/generated/resources/data/anvilcraft/recipe/power_converter_small_from_big.json new file mode 100644 index 0000000000..063c3a96a5 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/power_converter_small_from_big.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "anvilcraft:power_converter_big" + ], + "result": { + "count": 64, + "id": "anvilcraft:power_converter_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/power_converter_small_from_middle.json b/src/generated/resources/data/anvilcraft/recipe/power_converter_small_from_middle.json new file mode 100644 index 0000000000..5c76f13ef7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/power_converter_small_from_middle.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "anvilcraft:power_converter_middle" + ], + "result": { + "count": 8, + "id": "anvilcraft:power_converter_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/powered_sliding_rail.json b/src/generated/resources/data/anvilcraft/recipe/powered_sliding_rail.json index 3deee96796..c425695c29 100644 --- a/src/generated/resources/data/anvilcraft/recipe/powered_sliding_rail.json +++ b/src/generated/resources/data/anvilcraft/recipe/powered_sliding_rail.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "P": { - "item": "minecraft:piston" - }, - "S": { - "item": "anvilcraft:sliding_rail" - } + "P": "minecraft:piston", + "S": "anvilcraft:sliding_rail" }, "pattern": [ "SSS", diff --git a/src/generated/resources/data/anvilcraft/recipe/processor.json b/src/generated/resources/data/anvilcraft/recipe/processor.json index c513674a31..3d2f6efbd5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/processor.json +++ b/src/generated/resources/data/anvilcraft/recipe/processor.json @@ -3,15 +3,9 @@ "category": "misc", "group": "anvilcraft:processor", "key": { - "A": { - "item": "minecraft:comparator" - }, - "B": { - "item": "anvilcraft:hardend_resin" - }, - "C": { - "tag": "c:nuggets/copper" - } + "A": "minecraft:comparator", + "B": "anvilcraft:hardend_resin", + "C": "#c:nuggets/copper" }, "pattern": [ " ", @@ -19,7 +13,6 @@ "BBB" ], "result": { - "count": 1, "id": "anvilcraft:processor" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/propel_piston.json b/src/generated/resources/data/anvilcraft/recipe/propel_piston.json index a6d1a05368..4502c614d2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/propel_piston.json +++ b/src/generated/resources/data/anvilcraft/recipe/propel_piston.json @@ -2,21 +2,11 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "anvilcraft:ionocraft" - }, - "B": { - "item": "anvilcraft:capacitor" - }, - "C": { - "item": "minecraft:iron_ingot" - }, - "D": { - "item": "minecraft:piston" - }, - "E": { - "item": "anvilcraft:ruby" - } + "A": "anvilcraft:ionocraft", + "B": "anvilcraft:capacitor", + "C": "minecraft:iron_ingot", + "D": "minecraft:piston", + "E": "anvilcraft:ruby" }, "pattern": [ "CDC", @@ -25,9 +15,10 @@ ], "result": { "components": { - "anvilcraft:stored_energy": 4000 + "anvilcraft:stored_energy": { + "energy": 8000000 + } }, - "count": 1, "id": "anvilcraft:propel_piston" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/pulse_generator.json b/src/generated/resources/data/anvilcraft/recipe/pulse_generator.json index d178edf572..935610f386 100644 --- a/src/generated/resources/data/anvilcraft/recipe/pulse_generator.json +++ b/src/generated/resources/data/anvilcraft/recipe/pulse_generator.json @@ -2,25 +2,16 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "B": { - "item": "anvilcraft:circuit_board" - }, - "C": { - "item": "minecraft:clock" - }, - "I": { - "item": "minecraft:iron_ingot" - }, - "R": { - "item": "minecraft:redstone_torch" - } + "B": "anvilcraft:circuit_board", + "C": "minecraft:clock", + "I": "minecraft:iron_ingot", + "R": "minecraft:redstone_torch" }, "pattern": [ "BCR", "III" ], "result": { - "count": 1, "id": "anvilcraft:pulse_generator" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_slab.json new file mode 100644 index 0000000000..db2151cc3f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:purple_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:purple_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_stair.json new file mode 100644 index 0000000000..7945ca4827 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:purple_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:purple_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_wall.json new file mode 100644 index 0000000000..77b73560fa --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/purple_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:purple_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:purple_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_lead.json b/src/generated/resources/data/anvilcraft/recipe/raw_lead.json index eb3b9943fc..b7c4e0a931 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_lead.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_lead.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:raw_lead_block" - } + "anvilcraft:raw_lead_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_lead_block.json b/src/generated/resources/data/anvilcraft/recipe/raw_lead_block.json index f9e4486767..e89f631479 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_lead_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_lead_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:raw_lead" - } + "A": "anvilcraft:raw_lead" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:raw_lead_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_silver.json b/src/generated/resources/data/anvilcraft/recipe/raw_silver.json index e44a064599..4fd2226ea7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_silver.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_silver.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:raw_silver_block" - } + "anvilcraft:raw_silver_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_silver_block.json b/src/generated/resources/data/anvilcraft/recipe/raw_silver_block.json index cce7dacdd7..1f8627074b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_silver_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_silver_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:raw_silver" - } + "A": "anvilcraft:raw_silver" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:raw_silver_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_tin.json b/src/generated/resources/data/anvilcraft/recipe/raw_tin.json index dfeabb9b3f..31cae6be28 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_tin.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_tin.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:raw_tin_block" - } + "anvilcraft:raw_tin_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_tin_block.json b/src/generated/resources/data/anvilcraft/recipe/raw_tin_block.json index 8e3822fe55..50b2f5dfab 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_tin_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_tin_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:raw_tin" - } + "A": "anvilcraft:raw_tin" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:raw_tin_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_titanium.json b/src/generated/resources/data/anvilcraft/recipe/raw_titanium.json index 534bda2203..cd0cb2ed43 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_titanium.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_titanium.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:raw_titanium_block" - } + "anvilcraft:raw_titanium_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_titanium_block.json b/src/generated/resources/data/anvilcraft/recipe/raw_titanium_block.json index 6f8b838518..7b811751fe 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_titanium_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_titanium_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:raw_titanium" - } + "A": "anvilcraft:raw_titanium" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:raw_titanium_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_tungsten.json b/src/generated/resources/data/anvilcraft/recipe/raw_tungsten.json index f77f9538e4..7589e9da6b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_tungsten.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_tungsten.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:raw_tungsten_block" - } + "anvilcraft:raw_tungsten_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_tungsten_block.json b/src/generated/resources/data/anvilcraft/recipe/raw_tungsten_block.json index af50f51c6b..5ae28b62be 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_tungsten_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_tungsten_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:raw_tungsten" - } + "A": "anvilcraft:raw_tungsten" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:raw_tungsten_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_uranium.json b/src/generated/resources/data/anvilcraft/recipe/raw_uranium.json index 2b041141b6..b53710451e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_uranium.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_uranium.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:raw_uranium_block" - } + "anvilcraft:raw_uranium_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_uranium_block.json b/src/generated/resources/data/anvilcraft/recipe/raw_uranium_block.json index 42585cd514..c03f58606e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_uranium_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_uranium_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:raw_uranium" - } + "A": "anvilcraft:raw_uranium" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:raw_uranium_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_zinc.json b/src/generated/resources/data/anvilcraft/recipe/raw_zinc.json index 9b7b51e90b..d8c94d39ba 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_zinc.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_zinc.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:raw_zinc_block" - } + "anvilcraft:raw_zinc_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/raw_zinc_block.json b/src/generated/resources/data/anvilcraft/recipe/raw_zinc_block.json index 0b983d0699..347e5f14ab 100644 --- a/src/generated/resources/data/anvilcraft/recipe/raw_zinc_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/raw_zinc_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:raw_zinc" - } + "A": "anvilcraft:raw_zinc" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:raw_zinc_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/recovery_pearl.json b/src/generated/resources/data/anvilcraft/recipe/recovery_pearl.json index 31153ef526..2395d17f04 100644 --- a/src/generated/resources/data/anvilcraft/recipe/recovery_pearl.json +++ b/src/generated/resources/data/anvilcraft/recipe/recovery_pearl.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "minecraft:ender_pearl" - }, - "B": { - "item": "minecraft:echo_shard" - } + "A": "minecraft:ender_pearl", + "B": "minecraft:echo_shard" }, "pattern": [ " B ", @@ -15,7 +11,6 @@ " B " ], "result": { - "count": 1, "id": "anvilcraft:recovery_pearl" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_slab.json new file mode 100644 index 0000000000..9daf0c8c76 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:red_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:red_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_stair.json new file mode 100644 index 0000000000..84487b6f35 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:red_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:red_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_wall.json new file mode 100644 index 0000000000..bd38e2b03a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/red_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:red_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:red_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_slab.json deleted file mode 100644 index f5dc394c4e..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_black" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_black_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_stair.json deleted file mode 100644 index a9c99b5897..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_black" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_black_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_wall.json deleted file mode 100644 index 06fba55c62..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_black_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_black" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_black_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_slab.json deleted file mode 100644 index 5c60b30568..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_blue" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_blue_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_stair.json deleted file mode 100644 index cfbf94da11..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_blue" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_blue_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_wall.json deleted file mode 100644 index cb9496e38b..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_blue_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_blue" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_slab.json deleted file mode 100644 index 6188bf71c4..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_brown" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_brown_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_stair.json deleted file mode 100644 index 97e0116955..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_brown" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_brown_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_wall.json deleted file mode 100644 index 92febed9c9..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_brown_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_brown" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_brown_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_slab.json deleted file mode 100644 index a02e13d515..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_cyan" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_cyan_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_stair.json deleted file mode 100644 index ef8a04b8df..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_cyan" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_cyan_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_wall.json deleted file mode 100644 index 416c96221d..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_cyan_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_cyan" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_cyan_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_slab.json deleted file mode 100644 index 314623d6c3..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_gray" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_gray_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_stair.json deleted file mode 100644 index ac1a915cb8..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_gray" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_gray_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_wall.json deleted file mode 100644 index 10da736dc1..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_gray_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_gray" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_slab.json deleted file mode 100644 index 3b997c3598..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_green" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_green_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_stair.json deleted file mode 100644 index 13c8cc0596..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_green" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_green_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_wall.json deleted file mode 100644 index 7158b16bb1..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_green_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_green" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_green_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_slab.json deleted file mode 100644 index 08dbe204a3..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_light_blue" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_light_blue_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_stair.json deleted file mode 100644 index e34d907d67..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_light_blue" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_light_blue_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_wall.json deleted file mode 100644 index d4de542f46..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_blue_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_light_blue" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_light_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_slab.json deleted file mode 100644 index 3c13030adc..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_light_gray" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_light_gray_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_stair.json deleted file mode 100644 index b7906b2e44..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_light_gray" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_light_gray_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_wall.json deleted file mode 100644 index 5227572912..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_light_gray_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_light_gray" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_light_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_slab.json deleted file mode 100644 index 89ad843f55..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_lime" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_lime_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_stair.json deleted file mode 100644 index 700b11cbd2..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_lime" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_lime_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_wall.json deleted file mode 100644 index e2051b0929..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_lime_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_lime" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_lime_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_slab.json deleted file mode 100644 index 756a6042fb..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_magenta" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_magenta_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_stair.json deleted file mode 100644 index 64c083df9c..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_magenta" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_magenta_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_wall.json deleted file mode 100644 index 6ff86d3b7b..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_magenta_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_magenta" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_magenta_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_slab.json deleted file mode 100644 index 8c8c7ed3f7..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_orange" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_orange_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_stair.json deleted file mode 100644 index 27ea8d8357..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_orange" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_orange_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_wall.json deleted file mode 100644 index 847f4e46b8..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_orange_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_orange" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_orange_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_slab.json deleted file mode 100644 index 586c61d562..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_pink" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_pink_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_stair.json deleted file mode 100644 index 096d4d66f8..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_pink" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_pink_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_wall.json deleted file mode 100644 index 95e75a23c2..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_pink_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_pink" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_pink_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_slab.json deleted file mode 100644 index fc9c86a253..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_purple" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_purple_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_stair.json deleted file mode 100644 index 78329fc0db..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_purple" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_purple_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_wall.json deleted file mode 100644 index fae9ce97a9..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_purple_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_purple" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_purple_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_slab.json deleted file mode 100644 index 4e52f12154..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_red" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_red_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_stair.json deleted file mode 100644 index 0ceb6eaff0..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_red" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_red_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_wall.json deleted file mode 100644 index 35e9a3fee6..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_red_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_red" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_red_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_slab.json deleted file mode 100644 index 4fe20df48b..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_white" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_white_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_stair.json deleted file mode 100644 index 146d4d2ca1..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_white" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_white_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_wall.json deleted file mode 100644 index 577fd4e699..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_white_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_white" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_white_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_slab.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_slab.json deleted file mode 100644 index 8656ff7cc9..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_slab.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_yellow" - } - }, - "pattern": [ - "AAA" - ], - "result": { - "count": 6, - "id": "anvilcraft:reinforced_concrete_yellow_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_stair.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_stair.json deleted file mode 100644 index 16866694ea..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_stair.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_yellow" - } - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_yellow_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_wall.json b/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_wall.json deleted file mode 100644 index 61cd5d8b6b..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/reinforced_concrete_yellow_wall.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "A": { - "item": "anvilcraft:reinforced_concrete_yellow" - } - }, - "pattern": [ - "AAA", - "AAA" - ], - "result": { - "count": 4, - "id": "anvilcraft:reinforced_concrete_yellow_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/remote_transmission_pole.json b/src/generated/resources/data/anvilcraft/recipe/remote_transmission_pole.json index d60e4b63a7..5fdf6a3813 100644 --- a/src/generated/resources/data/anvilcraft/recipe/remote_transmission_pole.json +++ b/src/generated/resources/data/anvilcraft/recipe/remote_transmission_pole.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:magnetoelectric_core" - }, - "B": { - "item": "anvilcraft:transmission_pole" - }, - "C": { - "item": "minecraft:anvil" - } + "A": "anvilcraft:magnetoelectric_core", + "B": "anvilcraft:transmission_pole", + "C": "minecraft:anvil" }, "pattern": [ "A", @@ -18,7 +12,6 @@ "C" ], "result": { - "count": 1, "id": "anvilcraft:remote_transmission_pole" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/repeater.json b/src/generated/resources/data/anvilcraft/recipe/repeater.json index d57698fbf3..93899e9c4d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/repeater.json +++ b/src/generated/resources/data/anvilcraft/recipe/repeater.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "B": { - "item": "anvilcraft:hardend_resin" - }, - "R": { - "item": "minecraft:redstone" - }, - "T": { - "item": "minecraft:redstone_torch" - } + "B": "anvilcraft:hardend_resin", + "R": "minecraft:redstone", + "T": "minecraft:redstone_torch" }, "pattern": [ " ", @@ -18,7 +12,6 @@ "BBB" ], "result": { - "count": 1, "id": "minecraft:repeater" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/resin.json b/src/generated/resources/data/anvilcraft/recipe/resin.json index 0051890645..ec75b6b443 100644 --- a/src/generated/resources/data/anvilcraft/recipe/resin.json +++ b/src/generated/resources/data/anvilcraft/recipe/resin.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:resin_block" - } + "anvilcraft:resin_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/resin_block.json b/src/generated/resources/data/anvilcraft/recipe/resin_block.json index ff6577055b..2ed51ab60a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/resin_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/resin_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:resin" - } + "A": "anvilcraft:resin" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:resin_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/resonator_core.json b/src/generated/resources/data/anvilcraft/recipe/resonator_core.json index 6dba31d521..dca2d14d04 100644 --- a/src/generated/resources/data/anvilcraft/recipe/resonator_core.json +++ b/src/generated/resources/data/anvilcraft/recipe/resonator_core.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "E": { - "item": "minecraft:echo_shard" - }, - "M": { - "item": "anvilcraft:multiphase_matter" - } + "A": "minecraft:amethyst_shard", + "E": "minecraft:echo_shard", + "M": "anvilcraft:multiphase_matter" }, "pattern": [ "AEA", @@ -18,7 +12,6 @@ "AEA" ], "result": { - "count": 1, "id": "anvilcraft:resonator_core" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/rotten_flesh_block.json b/src/generated/resources/data/anvilcraft/recipe/rotten_flesh_block.json index 417dbd63fd..8d4a81fe3b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/rotten_flesh_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/rotten_flesh_block.json @@ -2,36 +2,17 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "minecraft:rotten_flesh" - }, - { - "item": "minecraft:rotten_flesh" - }, - { - "item": "minecraft:rotten_flesh" - }, - { - "item": "minecraft:rotten_flesh" - }, - { - "item": "minecraft:rotten_flesh" - }, - { - "item": "minecraft:rotten_flesh" - }, - { - "item": "minecraft:rotten_flesh" - }, - { - "item": "minecraft:rotten_flesh" - }, - { - "item": "minecraft:rotten_flesh" - } + "minecraft:rotten_flesh", + "minecraft:rotten_flesh", + "minecraft:rotten_flesh", + "minecraft:rotten_flesh", + "minecraft:rotten_flesh", + "minecraft:rotten_flesh", + "minecraft:rotten_flesh", + "minecraft:rotten_flesh", + "minecraft:rotten_flesh" ], "result": { - "count": 1, "id": "anvilcraft:rotten_flesh_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/rotten_flesh_from_rotten_flesh_block.json b/src/generated/resources/data/anvilcraft/recipe/rotten_flesh_from_rotten_flesh_block.json index 8cf83cd95e..5c5b18291f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/rotten_flesh_from_rotten_flesh_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/rotten_flesh_from_rotten_flesh_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "anvilcraft:rotten_flesh_block" - } + "anvilcraft:rotten_flesh_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/royal_dragon_rod.json b/src/generated/resources/data/anvilcraft/recipe/royal_dragon_rod.json index d32703e079..e9583d3a12 100644 --- a/src/generated/resources/data/anvilcraft/recipe/royal_dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/recipe/royal_dragon_rod.json @@ -2,15 +2,10 @@ "type": "minecraft:crafting_shapeless", "category": "equipment", "ingredients": [ - { - "item": "anvilcraft:block_devourer" - }, - { - "item": "anvilcraft:royal_anvil_hammer" - } + "anvilcraft:block_devourer", + "anvilcraft:royal_anvil_hammer" ], "result": { - "count": 1, "id": "anvilcraft:royal_dragon_rod" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/royal_steel_block.json index 33a144fa9f..63154d7e0c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/royal_steel_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:royal_steel_ingot" - } + "A": "anvilcraft:royal_steel_ingot" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:royal_steel_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/royal_steel_ingot_from_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/royal_steel_ingot_from_royal_steel_block.json index d4a0ac5658..857150ac28 100644 --- a/src/generated/resources/data/anvilcraft/recipe/royal_steel_ingot_from_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/royal_steel_ingot_from_royal_steel_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:royal_steel_ingot", "ingredients": [ - { - "item": "anvilcraft:royal_steel_block" - } + "anvilcraft:royal_steel_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/royal_steel_ingot_from_royal_steel_nugget.json b/src/generated/resources/data/anvilcraft/recipe/royal_steel_ingot_from_royal_steel_nugget.json index 77a71a2cb6..60e46afb2b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/royal_steel_ingot_from_royal_steel_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/royal_steel_ingot_from_royal_steel_nugget.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:royal_steel_ingot", "key": { - "A": { - "item": "anvilcraft:royal_steel_nugget" - } + "A": "anvilcraft:royal_steel_nugget" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:royal_steel_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/royal_steel_nugget.json b/src/generated/resources/data/anvilcraft/recipe/royal_steel_nugget.json index 93157ae1b1..aa779b9062 100644 --- a/src/generated/resources/data/anvilcraft/recipe/royal_steel_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/royal_steel_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:royal_steel_ingot" - } + "anvilcraft:royal_steel_ingot" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/ruby.json b/src/generated/resources/data/anvilcraft/recipe/ruby.json index 08082cc70c..9bdb9dab62 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ruby.json +++ b/src/generated/resources/data/anvilcraft/recipe/ruby.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:ruby_block" - } + "anvilcraft:ruby_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/ruby_block.json b/src/generated/resources/data/anvilcraft/recipe/ruby_block.json index 973eb15c9e..91728064a3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ruby_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/ruby_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:ruby" - } + "A": "anvilcraft:ruby" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:ruby_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/ruby_laser.json b/src/generated/resources/data/anvilcraft/recipe/ruby_laser.json index 3f466ca6d9..caa7367bc8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ruby_laser.json +++ b/src/generated/resources/data/anvilcraft/recipe/ruby_laser.json @@ -2,21 +2,11 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:royal_steel_ingot" - }, - "B": { - "item": "anvilcraft:induction_light" - }, - "C": { - "tag": "c:plates/silver" - }, - "D": { - "item": "anvilcraft:ruby_block" - }, - "E": { - "item": "minecraft:tinted_glass" - } + "A": "anvilcraft:royal_steel_ingot", + "B": "anvilcraft:induction_light", + "C": "#c:plates/silver", + "D": "anvilcraft:ruby_block", + "E": "minecraft:tinted_glass" }, "pattern": [ "AEA", diff --git a/src/generated/resources/data/anvilcraft/recipe/ruby_prism.json b/src/generated/resources/data/anvilcraft/recipe/ruby_prism.json index fda98544a5..a52b748667 100644 --- a/src/generated/resources/data/anvilcraft/recipe/ruby_prism.json +++ b/src/generated/resources/data/anvilcraft/recipe/ruby_prism.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:royal_steel_ingot" - }, - "B": { - "item": "anvilcraft:ruby_block" - }, - "C": { - "item": "anvilcraft:ruby" - } + "A": "anvilcraft:royal_steel_ingot", + "B": "anvilcraft:ruby_block", + "C": "anvilcraft:ruby" }, "pattern": [ "ACA", @@ -18,7 +12,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:ruby_prism" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/sapphire.json b/src/generated/resources/data/anvilcraft/recipe/sapphire.json index 4be7bdbc04..b2cae7a18e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/sapphire.json +++ b/src/generated/resources/data/anvilcraft/recipe/sapphire.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:sapphire_block" - } + "anvilcraft:sapphire_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/sapphire_block.json b/src/generated/resources/data/anvilcraft/recipe/sapphire_block.json index 2cf6616204..bfdaba296e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/sapphire_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/sapphire_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:sapphire" - } + "A": "anvilcraft:sapphire" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:sapphire_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_block.json index 467a201e4f..815db7bad6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:polished_flint_block" - } + "A": "anvilcraft:polished_flint_block" }, "pattern": [ "AA", diff --git a/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_pillar.json b/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_pillar.json index 63fd7b0c5d..6a468185cc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_pillar.json +++ b/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_pillar.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:cut_flint_block" - } + "A": "anvilcraft:cut_flint_block" }, "pattern": [ "A", diff --git a/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_slab.json b/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_slab.json index 81129d9db7..0e7b60001d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_slab.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:cut_flint_block" - } + "A": "anvilcraft:cut_flint_block" }, "pattern": [ "AAA" diff --git a/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_stairs.json b/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_stairs.json index 1d29190391..4ebc52e995 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_stairs.json +++ b/src/generated/resources/data/anvilcraft/recipe/shaped/cut_flint_stairs.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:cut_flint_block" - } + "A": "anvilcraft:cut_flint_block" }, "pattern": [ "A ", diff --git a/src/generated/resources/data/anvilcraft/recipe/shaped/polished_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/shaped/polished_flint_block.json index 852ddd36ac..d46f2eaa1a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shaped/polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/shaped/polished_flint_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:flint_block" - } + "A": "anvilcraft:flint_block" }, "pattern": [ "AA", diff --git a/src/generated/resources/data/anvilcraft/recipe/shaped_crushing_table_recipe.json b/src/generated/resources/data/anvilcraft/recipe/shaped_crushing_table_recipe.json index c32c900f06..fa9b255ad3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shaped_crushing_table_recipe.json +++ b/src/generated/resources/data/anvilcraft/recipe/shaped_crushing_table_recipe.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:grindstone" - }, - "B": { - "tag": "c:ingots/iron" - } + "A": "minecraft:grindstone", + "B": "#c:ingots/iron" }, "pattern": [ "BAB", @@ -15,7 +11,6 @@ "B B" ], "result": { - "count": 1, "id": "anvilcraft:crushing_table" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/shapeless/deform_to_permut.json b/src/generated/resources/data/anvilcraft/recipe/shapeless/deform_to_permut.json index 846dd00482..58ad009cb2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shapeless/deform_to_permut.json +++ b/src/generated/resources/data/anvilcraft/recipe/shapeless/deform_to_permut.json @@ -2,12 +2,9 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:deformation_smithing_template" - } + "anvilcraft:deformation_smithing_template" ], "result": { - "count": 1, "id": "anvilcraft:permutation_smithing_template" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/shapeless/permut_to_deform.json b/src/generated/resources/data/anvilcraft/recipe/shapeless/permut_to_deform.json index c186d28bf8..573f4f6f45 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shapeless/permut_to_deform.json +++ b/src/generated/resources/data/anvilcraft/recipe/shapeless/permut_to_deform.json @@ -2,12 +2,9 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:permutation_smithing_template" - } + "anvilcraft:permutation_smithing_template" ], "result": { - "count": 1, "id": "anvilcraft:deformation_smithing_template" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/shapeless_crushing_table_recipe.json b/src/generated/resources/data/anvilcraft/recipe/shapeless_crushing_table_recipe.json index 61071fdf50..33e39df23e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/shapeless_crushing_table_recipe.json +++ b/src/generated/resources/data/anvilcraft/recipe/shapeless_crushing_table_recipe.json @@ -2,15 +2,10 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:stamping_platform" - }, - { - "item": "minecraft:grindstone" - } + "anvilcraft:stamping_platform", + "minecraft:grindstone" ], "result": { - "count": 1, "id": "anvilcraft:crushing_table" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/silver_block.json b/src/generated/resources/data/anvilcraft/recipe/silver_block.json index e78cafe75f..c0b049ea14 100644 --- a/src/generated/resources/data/anvilcraft/recipe/silver_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/silver_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/silver" - } + "A": "#c:ingots/silver" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:silver_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/silver_ingot.json b/src/generated/resources/data/anvilcraft/recipe/silver_ingot.json index cd9cd5b728..d1fe50e459 100644 --- a/src/generated/resources/data/anvilcraft/recipe/silver_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/silver_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:silver_ingot", "key": { - "A": { - "tag": "c:nuggets/silver" - } + "A": "#c:nuggets/silver" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:silver_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/silver_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/silver_ingot_from_block.json index c37dbf20e0..030e6c8124 100644 --- a/src/generated/resources/data/anvilcraft/recipe/silver_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/silver_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:silver_ingot", "ingredients": [ - { - "item": "anvilcraft:silver_block" - } + "anvilcraft:silver_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/silver_nugget.json b/src/generated/resources/data/anvilcraft/recipe/silver_nugget.json index 52ec09233e..3b965e5e82 100644 --- a/src/generated/resources/data/anvilcraft/recipe/silver_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/silver_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/silver" - } + "#c:ingots/silver" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/silver_pressure_plate_from_ingots_silver.json b/src/generated/resources/data/anvilcraft/recipe/silver_pressure_plate_from_ingots_silver.json index 9720a57fc4..481740d938 100644 --- a/src/generated/resources/data/anvilcraft/recipe/silver_pressure_plate_from_ingots_silver.json +++ b/src/generated/resources/data/anvilcraft/recipe/silver_pressure_plate_from_ingots_silver.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/silver" - } + "A": "#c:ingots/silver" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:silver_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/sliding_rail.json b/src/generated/resources/data/anvilcraft/recipe/sliding_rail.json index 7218f198ba..2ef83b2240 100644 --- a/src/generated/resources/data/anvilcraft/recipe/sliding_rail.json +++ b/src/generated/resources/data/anvilcraft/recipe/sliding_rail.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "item": "minecraft:blue_ice" - }, - "B": { - "item": "minecraft:iron_ingot" - } + "A": "minecraft:blue_ice", + "B": "minecraft:iron_ingot" }, "pattern": [ "A A", diff --git a/src/generated/resources/data/anvilcraft/recipe/sliding_rail_stop.json b/src/generated/resources/data/anvilcraft/recipe/sliding_rail_stop.json index 86f4d78006..c7b40f7aae 100644 --- a/src/generated/resources/data/anvilcraft/recipe/sliding_rail_stop.json +++ b/src/generated/resources/data/anvilcraft/recipe/sliding_rail_stop.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:soul_sand" - }, - "B": { - "item": "minecraft:iron_ingot" - } + "A": "minecraft:soul_sand", + "B": "minecraft:iron_ingot" }, "pattern": [ "A A", diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/lead_ingot.json b/src/generated/resources/data/anvilcraft/recipe/smelting/lead_ingot.json index ef2eeffb4a..b83da66f8e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/lead_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/lead_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:lead_ingot", - "ingredient": { - "item": "anvilcraft:raw_lead" - }, + "ingredient": "anvilcraft:raw_lead", "result": { - "count": 1, "id": "anvilcraft:lead_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/lead_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/smelting/lead_ingot_from_ore.json index 1852fa6642..c9b49a9514 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/lead_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/lead_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:lead_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_lead_ore" - }, + "ingredient": "anvilcraft:deepslate_lead_ore", "result": { - "count": 1, "id": "anvilcraft:lead_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/silver_ingot.json b/src/generated/resources/data/anvilcraft/recipe/smelting/silver_ingot.json index 91b36d9243..2151a400d9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/silver_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/silver_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:silver_ingot", - "ingredient": { - "item": "anvilcraft:raw_silver" - }, + "ingredient": "anvilcraft:raw_silver", "result": { - "count": 1, "id": "anvilcraft:silver_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/silver_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/smelting/silver_ingot_from_ore.json index 8d6667c742..5e149f1caf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/silver_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/silver_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:silver_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_silver_ore" - }, + "ingredient": "anvilcraft:deepslate_silver_ore", "result": { - "count": 1, "id": "anvilcraft:silver_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/tin_ingot.json b/src/generated/resources/data/anvilcraft/recipe/smelting/tin_ingot.json index 58cac6337a..361df35198 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/tin_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/tin_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:tin_ingot", - "ingredient": { - "item": "anvilcraft:raw_tin" - }, + "ingredient": "anvilcraft:raw_tin", "result": { - "count": 1, "id": "anvilcraft:tin_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/tin_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/smelting/tin_ingot_from_ore.json index 74f711bfbb..38b0bbb520 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/tin_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/tin_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:tin_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_tin_ore" - }, + "ingredient": "anvilcraft:deepslate_tin_ore", "result": { - "count": 1, "id": "anvilcraft:tin_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/titanium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/smelting/titanium_ingot.json index a0d1678eab..8102b6d658 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/titanium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/titanium_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:titanium_ingot", - "ingredient": { - "item": "anvilcraft:raw_titanium" - }, + "ingredient": "anvilcraft:raw_titanium", "result": { - "count": 1, "id": "anvilcraft:titanium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/titanium_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/smelting/titanium_ingot_from_ore.json index 55d1875001..64764022d2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/titanium_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/titanium_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:titanium_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_titanium_ore" - }, + "ingredient": "anvilcraft:deepslate_titanium_ore", "result": { - "count": 1, "id": "anvilcraft:titanium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/tungsten_ingot.json b/src/generated/resources/data/anvilcraft/recipe/smelting/tungsten_ingot.json index 9f00766fac..d6722a5237 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/tungsten_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/tungsten_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:tungsten_ingot", - "ingredient": { - "item": "anvilcraft:raw_tungsten" - }, + "ingredient": "anvilcraft:raw_tungsten", "result": { - "count": 1, "id": "anvilcraft:tungsten_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/tungsten_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/smelting/tungsten_ingot_from_ore.json index 2e43a572ea..b1108f0f63 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/tungsten_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/tungsten_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:tungsten_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_tungsten_ore" - }, + "ingredient": "anvilcraft:deepslate_tungsten_ore", "result": { - "count": 1, "id": "anvilcraft:tungsten_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/uranium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/smelting/uranium_ingot.json index 172b48ceaf..27f79cde16 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/uranium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/uranium_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:uranium_ingot", - "ingredient": { - "item": "anvilcraft:raw_uranium" - }, + "ingredient": "anvilcraft:raw_uranium", "result": { - "count": 1, "id": "anvilcraft:uranium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/uranium_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/smelting/uranium_ingot_from_ore.json index b474d1ce9c..33431c372f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/uranium_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/uranium_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:uranium_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_uranium_ore" - }, + "ingredient": "anvilcraft:deepslate_uranium_ore", "result": { - "count": 1, "id": "anvilcraft:uranium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/zinc_ingot.json b/src/generated/resources/data/anvilcraft/recipe/smelting/zinc_ingot.json index 520eb87cdd..421e700df5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/zinc_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/zinc_ingot.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:zinc_ingot", - "ingredient": { - "item": "anvilcraft:raw_zinc" - }, + "ingredient": "anvilcraft:raw_zinc", "result": { - "count": 1, "id": "anvilcraft:zinc_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting/zinc_ingot_from_ore.json b/src/generated/resources/data/anvilcraft/recipe/smelting/zinc_ingot_from_ore.json index fc11cad1f1..70623734d3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting/zinc_ingot_from_ore.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting/zinc_ingot_from_ore.json @@ -4,11 +4,8 @@ "cookingtime": 200, "experience": 1.0, "group": "anvilcraft:zinc_ingot", - "ingredient": { - "item": "anvilcraft:deepslate_zinc_ore" - }, + "ingredient": "anvilcraft:deepslate_zinc_ore", "result": { - "count": 1, "id": "anvilcraft:zinc_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smelting_cooking_bread.json b/src/generated/resources/data/anvilcraft/recipe/smelting_cooking_bread.json index d7127e70c6..2624f36e8a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smelting_cooking_bread.json +++ b/src/generated/resources/data/anvilcraft/recipe/smelting_cooking_bread.json @@ -3,11 +3,8 @@ "category": "food", "cookingtime": 200, "experience": 0.35, - "ingredient": { - "tag": "c:foods/dough" - }, + "ingredient": "#c:foods/dough", "result": { - "count": 1, "id": "minecraft:bread" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_anvil.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_anvil.json index 00264e362a..ce17fd5abc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_anvil.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_block" - }, - "base": { - "item": "anvilcraft:royal_anvil" - }, + "addition": "anvilcraft:ember_metal_block", + "base": "anvilcraft:royal_anvil", "result": { - "count": 1, "id": "anvilcraft:ember_anvil" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_anvil_hammer.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_anvil_hammer.json index 345178e2d1..4a2ea67bcf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_anvil_hammer.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_anvil_hammer.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_block" - }, - "base": { - "item": "anvilcraft:royal_anvil_hammer" - }, + "addition": "anvilcraft:ember_metal_block", + "base": "anvilcraft:royal_anvil_hammer", "result": { - "count": 1, "id": "anvilcraft:ember_anvil_hammer" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_dragon_rod.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_dragon_rod.json index c082a744a4..e1f89453b9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_dragon_rod.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_block" - }, - "base": { - "item": "anvilcraft:royal_dragon_rod" - }, + "addition": "anvilcraft:ember_metal_block", + "base": "anvilcraft:royal_dragon_rod", "result": { - "count": 1, "id": "anvilcraft:ember_dragon_rod" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_grindstone.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_grindstone.json index 4db968aacb..86635d30c9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_grindstone.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_grindstone.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_block" - }, - "base": { - "item": "anvilcraft:royal_grindstone" - }, + "addition": "anvilcraft:ember_metal_block", + "base": "anvilcraft:royal_grindstone", "result": { - "count": 1, "id": "anvilcraft:ember_grindstone" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_axe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_axe.json index edc0defeb9..0aff6f0e95 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_axe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_axe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_ingot" - }, - "base": { - "tag": "anvilcraft:ember_metal_axe_base" - }, + "addition": "anvilcraft:ember_metal_ingot", + "base": "#anvilcraft:ember_metal_axe_base", "result": { - "count": 1, "id": "anvilcraft:ember_metal_axe" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_hoe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_hoe.json index 682fbc00cb..32ab7ceb82 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_hoe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_hoe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_ingot" - }, - "base": { - "tag": "anvilcraft:ember_metal_hoe_base" - }, + "addition": "anvilcraft:ember_metal_ingot", + "base": "#anvilcraft:ember_metal_hoe_base", "result": { - "count": 1, "id": "anvilcraft:ember_metal_hoe" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_pickaxe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_pickaxe.json index 24350cfbad..4cbd31121b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_pickaxe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_ingot" - }, - "base": { - "tag": "anvilcraft:ember_metal_pickaxe_base" - }, + "addition": "anvilcraft:ember_metal_ingot", + "base": "#anvilcraft:ember_metal_pickaxe_base", "result": { - "count": 1, "id": "anvilcraft:ember_metal_pickaxe" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_shovel.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_shovel.json index 1e1944360b..e5db5ad7a3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_shovel.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_shovel.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_ingot" - }, - "base": { - "tag": "anvilcraft:ember_metal_shovel_base" - }, + "addition": "anvilcraft:ember_metal_ingot", + "base": "#anvilcraft:ember_metal_shovel_base", "result": { - "count": 1, "id": "anvilcraft:ember_metal_shovel" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_sword.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_sword.json index a581f8aa38..a37677ab54 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_sword.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_metal_sword.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_ingot" - }, - "base": { - "tag": "anvilcraft:ember_metal_sword_base" - }, + "addition": "anvilcraft:ember_metal_ingot", + "base": "#anvilcraft:ember_metal_sword_base", "result": { - "count": 1, "id": "anvilcraft:ember_metal_sword" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_smithing_table.json b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_smithing_table.json index 45b9e6fa6d..6b0fc3e719 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/ember_smithing_table.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/ember_smithing_table.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:ember_metal_block" - }, - "base": { - "item": "anvilcraft:royal_smithing_table" - }, + "addition": "anvilcraft:ember_metal_block", + "base": "anvilcraft:royal_smithing_table", "result": { - "count": 1, "id": "anvilcraft:ember_smithing_table" }, - "template": { - "item": "anvilcraft:ember_metal_upgrade_smithing_template" - } + "template": "anvilcraft:ember_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_anvil.json b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_anvil.json index f1fda7c4d0..f786a9452e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_anvil.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:frost_metal_block" - }, - "base": { - "item": "anvilcraft:royal_anvil" - }, + "addition": "anvilcraft:frost_metal_block", + "base": "anvilcraft:royal_anvil", "result": { - "count": 1, "id": "anvilcraft:frost_anvil" }, - "template": { - "item": "anvilcraft:frost_metal_upgrade_smithing_template" - } + "template": "anvilcraft:frost_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_grindstone.json b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_grindstone.json index ff235480cf..20d345a145 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_grindstone.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_grindstone.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:frost_metal_block" - }, - "base": { - "item": "anvilcraft:royal_grindstone" - }, + "addition": "anvilcraft:frost_metal_block", + "base": "anvilcraft:royal_grindstone", "result": { - "count": 1, "id": "anvilcraft:frost_grindstone" }, - "template": { - "item": "anvilcraft:frost_metal_upgrade_smithing_template" - } + "template": "anvilcraft:frost_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_axe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_axe.json index 23d833bcde..9f09f0d3ba 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_axe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_axe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:frost_metal_ingot" - }, - "base": { - "tag": "anvilcraft:frost_metal_axe_base" - }, + "addition": "anvilcraft:frost_metal_ingot", + "base": "#anvilcraft:frost_metal_axe_base", "result": { - "count": 1, "id": "anvilcraft:frost_metal_axe" }, - "template": { - "item": "anvilcraft:frost_metal_upgrade_smithing_template" - } + "template": "anvilcraft:frost_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_hoe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_hoe.json index 90941330d3..95bbf1e00f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_hoe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_hoe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:frost_metal_ingot" - }, - "base": { - "tag": "anvilcraft:frost_metal_hoe_base" - }, + "addition": "anvilcraft:frost_metal_ingot", + "base": "#anvilcraft:frost_metal_hoe_base", "result": { - "count": 1, "id": "anvilcraft:frost_metal_hoe" }, - "template": { - "item": "anvilcraft:frost_metal_upgrade_smithing_template" - } + "template": "anvilcraft:frost_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_pickaxe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_pickaxe.json index fe4df4b41d..5f6883685d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_pickaxe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:frost_metal_ingot" - }, - "base": { - "tag": "anvilcraft:frost_metal_pickaxe_base" - }, + "addition": "anvilcraft:frost_metal_ingot", + "base": "#anvilcraft:frost_metal_pickaxe_base", "result": { - "count": 1, "id": "anvilcraft:frost_metal_pickaxe" }, - "template": { - "item": "anvilcraft:frost_metal_upgrade_smithing_template" - } + "template": "anvilcraft:frost_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_shovel.json b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_shovel.json index dbfa1cc5fe..038bb644a9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_shovel.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_shovel.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:frost_metal_ingot" - }, - "base": { - "tag": "anvilcraft:frost_metal_shovel_base" - }, + "addition": "anvilcraft:frost_metal_ingot", + "base": "#anvilcraft:frost_metal_shovel_base", "result": { - "count": 1, "id": "anvilcraft:frost_metal_shovel" }, - "template": { - "item": "anvilcraft:frost_metal_upgrade_smithing_template" - } + "template": "anvilcraft:frost_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_sword.json b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_sword.json index 1d22a8477e..64d7cb6e7b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_sword.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_metal_sword.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:frost_metal_ingot" - }, - "base": { - "tag": "anvilcraft:frost_metal_sword_base" - }, + "addition": "anvilcraft:frost_metal_ingot", + "base": "#anvilcraft:frost_metal_sword_base", "result": { - "count": 1, "id": "anvilcraft:frost_metal_sword" }, - "template": { - "item": "anvilcraft:frost_metal_upgrade_smithing_template" - } + "template": "anvilcraft:frost_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_smithing_table.json b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_smithing_table.json index d60cef5f57..f77bc5ef8f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/frost_smithing_table.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/frost_smithing_table.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:frost_metal_block" - }, - "base": { - "item": "anvilcraft:royal_smithing_table" - }, + "addition": "anvilcraft:frost_metal_block", + "base": "anvilcraft:royal_smithing_table", "result": { - "count": 1, "id": "anvilcraft:frost_smithing_table" }, - "template": { - "item": "anvilcraft:frost_metal_upgrade_smithing_template" - } + "template": "anvilcraft:frost_metal_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_anvil.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_anvil.json index beee5a842b..b93662b33f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_anvil.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_block" - }, - "base": { - "item": "minecraft:anvil" - }, + "addition": "anvilcraft:royal_steel_block", + "base": "minecraft:anvil", "result": { - "count": 1, "id": "anvilcraft:royal_anvil" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_anvil_hammer.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_anvil_hammer.json index a459170e9a..85e0ccf12f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_anvil_hammer.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_anvil_hammer.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_block" - }, - "base": { - "item": "anvilcraft:anvil_hammer" - }, + "addition": "anvilcraft:royal_steel_block", + "base": "anvilcraft:anvil_hammer", "result": { - "count": 1, "id": "anvilcraft:royal_anvil_hammer" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_dragon_rod.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_dragon_rod.json index 6d9a684b25..0871ac213b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_dragon_rod.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_block" - }, - "base": { - "item": "anvilcraft:dragon_rod" - }, + "addition": "anvilcraft:royal_steel_block", + "base": "anvilcraft:dragon_rod", "result": { - "count": 1, "id": "anvilcraft:royal_dragon_rod" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_grindstone.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_grindstone.json index c205c6c506..f11fc26348 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_grindstone.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_grindstone.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_block" - }, - "base": { - "item": "minecraft:grindstone" - }, + "addition": "anvilcraft:royal_steel_block", + "base": "minecraft:grindstone", "result": { - "count": 1, "id": "anvilcraft:royal_grindstone" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_smithing_table.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_smithing_table.json index c23b75baba..6ea1b5d4fe 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_smithing_table.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_smithing_table.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_block" - }, - "base": { - "item": "minecraft:smithing_table" - }, + "addition": "anvilcraft:royal_steel_block", + "base": "minecraft:smithing_table", "result": { - "count": 1, "id": "anvilcraft:royal_smithing_table" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_axe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_axe.json index d6437f060c..13f17f009a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_axe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_axe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_ingot" - }, - "base": { - "tag": "anvilcraft:royal_steel_axe_base" - }, + "addition": "anvilcraft:royal_steel_ingot", + "base": "#anvilcraft:royal_steel_axe_base", "result": { - "count": 1, "id": "anvilcraft:royal_steel_axe" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_hoe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_hoe.json index d97e40028a..dfe03c3b74 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_hoe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_hoe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_ingot" - }, - "base": { - "tag": "anvilcraft:royal_steel_hoe_base" - }, + "addition": "anvilcraft:royal_steel_ingot", + "base": "#anvilcraft:royal_steel_hoe_base", "result": { - "count": 1, "id": "anvilcraft:royal_steel_hoe" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_pickaxe.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_pickaxe.json index ad8a8797a4..8ed3d49589 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_pickaxe.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_pickaxe.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_ingot" - }, - "base": { - "tag": "anvilcraft:royal_steel_pickaxe_base" - }, + "addition": "anvilcraft:royal_steel_ingot", + "base": "#anvilcraft:royal_steel_pickaxe_base", "result": { - "count": 1, "id": "anvilcraft:royal_steel_pickaxe" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_shovel.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_shovel.json index 26da9b5653..06a84a2788 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_shovel.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_shovel.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_ingot" - }, - "base": { - "tag": "anvilcraft:royal_steel_shovel_base" - }, + "addition": "anvilcraft:royal_steel_ingot", + "base": "#anvilcraft:royal_steel_shovel_base", "result": { - "count": 1, "id": "anvilcraft:royal_steel_shovel" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_sword.json b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_sword.json index 924a1d08ea..3b89ad2d89 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_sword.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/royal_steel_sword.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:royal_steel_ingot" - }, - "base": { - "tag": "anvilcraft:royal_steel_sword_base" - }, + "addition": "anvilcraft:royal_steel_ingot", + "base": "#anvilcraft:royal_steel_sword_base", "result": { - "count": 1, "id": "anvilcraft:royal_steel_sword" }, - "template": { - "item": "anvilcraft:royal_steel_upgrade_smithing_template" - } + "template": "anvilcraft:royal_steel_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_anvil.json b/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_anvil.json index 2a6942c33a..3bc3fe1eb4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_anvil.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:transcendium_block" - }, - "base": { - "item": "anvilcraft:ember_anvil" - }, + "addition": "anvilcraft:transcendium_block", + "base": "anvilcraft:ember_anvil", "result": { - "count": 1, "id": "anvilcraft:transcendence_anvil" }, - "template": { - "item": "anvilcraft:transcendium_upgrade_smithing_template" - } + "template": "anvilcraft:transcendium_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_anvil_hammer.json b/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_anvil_hammer.json index 5dfaa37d54..de9340363c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_anvil_hammer.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_anvil_hammer.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:transcendium_block" - }, - "base": { - "item": "anvilcraft:ember_anvil_hammer" - }, + "addition": "anvilcraft:transcendium_block", + "base": "anvilcraft:ember_anvil_hammer", "result": { - "count": 1, "id": "anvilcraft:transcendence_anvil_hammer" }, - "template": { - "item": "anvilcraft:transcendium_upgrade_smithing_template" - } + "template": "anvilcraft:transcendium_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_dragon_rod.json b/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_dragon_rod.json index 00b96431e0..d65455c7e0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/recipe/smithing/transcendence_dragon_rod.json @@ -1,16 +1,9 @@ { "type": "minecraft:smithing_transform", - "addition": { - "item": "anvilcraft:transcendium_block" - }, - "base": { - "item": "anvilcraft:ember_dragon_rod" - }, + "addition": "anvilcraft:transcendium_block", + "base": "anvilcraft:ember_dragon_rod", "result": { - "count": 1, "id": "anvilcraft:transcendence_dragon_rod" }, - "template": { - "item": "anvilcraft:transcendium_upgrade_smithing_template" - } + "template": "anvilcraft:transcendium_upgrade_smithing_template" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/smoking_bread.json b/src/generated/resources/data/anvilcraft/recipe/smoking_bread.json index 6e2f226ca3..b1958efc80 100644 --- a/src/generated/resources/data/anvilcraft/recipe/smoking_bread.json +++ b/src/generated/resources/data/anvilcraft/recipe/smoking_bread.json @@ -3,11 +3,8 @@ "category": "food", "cookingtime": 100, "experience": 0.35, - "ingredient": { - "tag": "c:foods/dough" - }, + "ingredient": "#c:foods/dough", "result": { - "count": 1, "id": "minecraft:bread" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/spectral_slingshot.json b/src/generated/resources/data/anvilcraft/recipe/spectral_slingshot.json index 0912a6e51c..00e75b4438 100644 --- a/src/generated/resources/data/anvilcraft/recipe/spectral_slingshot.json +++ b/src/generated/resources/data/anvilcraft/recipe/spectral_slingshot.json @@ -3,15 +3,9 @@ "category": "misc", "group": "anvilcraft:spectral_slingshot", "key": { - "A": { - "item": "minecraft:phantom_membrane" - }, - "B": { - "item": "anvilcraft:spectral_anvil" - }, - "C": { - "item": "minecraft:crossbow" - } + "A": "minecraft:phantom_membrane", + "B": "anvilcraft:spectral_anvil", + "C": "minecraft:crossbow" }, "pattern": [ "AAA", @@ -19,7 +13,6 @@ " C " ], "result": { - "count": 1, "id": "anvilcraft:spectral_slingshot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/squeezing/exp_fluid_from_sculk.json b/src/generated/resources/data/anvilcraft/recipe/squeezing/exp_fluid_from_sculk.json index b5820437c2..307769b5f8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/squeezing/exp_fluid_from_sculk.json +++ b/src/generated/resources/data/anvilcraft/recipe/squeezing/exp_fluid_from_sculk.json @@ -7,10 +7,11 @@ "inverted": true }, "chance": 0.1, - "consume": -250, + "fluid": "minecraft:null", "ingredient": { "blocks": "minecraft:sculk" }, + "produce": 250, "result": { "block": "minecraft:air" }, diff --git a/src/generated/resources/data/anvilcraft/recipe/squeezing/exp_fluid_from_sculk_use_frost_anvil.json b/src/generated/resources/data/anvilcraft/recipe/squeezing/exp_fluid_from_sculk_use_frost_anvil.json index 282a28713e..2b4a68f662 100644 --- a/src/generated/resources/data/anvilcraft/recipe/squeezing/exp_fluid_from_sculk_use_frost_anvil.json +++ b/src/generated/resources/data/anvilcraft/recipe/squeezing/exp_fluid_from_sculk_use_frost_anvil.json @@ -6,10 +6,11 @@ } }, "chance": 0.4, - "consume": -250, + "fluid": "minecraft:null", "ingredient": { "blocks": "minecraft:sculk" }, + "produce": 250, "result": { "block": "minecraft:air" }, diff --git a/src/generated/resources/data/anvilcraft/recipe/squeezing/lava_cauldron_from_magma_block.json b/src/generated/resources/data/anvilcraft/recipe/squeezing/lava_cauldron_from_magma_block.json index f44733a1cd..990ca641cf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/squeezing/lava_cauldron_from_magma_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/squeezing/lava_cauldron_from_magma_block.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:squeezing", - "consume": -250, + "fluid": "minecraft:null", "ingredient": { "blocks": "minecraft:magma_block" }, + "produce": 250, "result": { "block": "minecraft:netherrack" }, - "transform": "anvilcraft:lava" + "transform": "minecraft:lava" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/squeezing/powder_snow_cauldron_from_snow_block.json b/src/generated/resources/data/anvilcraft/recipe/squeezing/powder_snow_cauldron_from_snow_block.json index 3edc0c7cf0..a3bb183e28 100644 --- a/src/generated/resources/data/anvilcraft/recipe/squeezing/powder_snow_cauldron_from_snow_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/squeezing/powder_snow_cauldron_from_snow_block.json @@ -1,9 +1,10 @@ { "type": "anvilcraft:squeezing", - "consume": -333, + "fluid": "minecraft:null", "ingredient": { "blocks": "minecraft:snow_block" }, + "produce": 250, "result": { "block": "minecraft:ice" }, diff --git a/src/generated/resources/data/anvilcraft/recipe/squeezing/water_cauldron_from_moss_block.json b/src/generated/resources/data/anvilcraft/recipe/squeezing/water_cauldron_from_moss_block.json index 65b2939952..f647b0b770 100644 --- a/src/generated/resources/data/anvilcraft/recipe/squeezing/water_cauldron_from_moss_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/squeezing/water_cauldron_from_moss_block.json @@ -1,9 +1,10 @@ { "type": "anvilcraft:squeezing", - "consume": -333, + "fluid": "minecraft:null", "ingredient": { "blocks": "minecraft:moss_block" }, + "produce": 250, "result": { "block": "minecraft:moss_carpet" }, diff --git a/src/generated/resources/data/anvilcraft/recipe/squeezing/water_cauldron_from_wet_sponge.json b/src/generated/resources/data/anvilcraft/recipe/squeezing/water_cauldron_from_wet_sponge.json index f8c5e92e26..d040923c63 100644 --- a/src/generated/resources/data/anvilcraft/recipe/squeezing/water_cauldron_from_wet_sponge.json +++ b/src/generated/resources/data/anvilcraft/recipe/squeezing/water_cauldron_from_wet_sponge.json @@ -1,9 +1,10 @@ { "type": "anvilcraft:squeezing", - "consume": -333, + "fluid": "minecraft:null", "ingredient": { "blocks": "minecraft:wet_sponge" }, + "produce": 250, "result": { "block": "minecraft:sponge" }, diff --git a/src/generated/resources/data/anvilcraft/recipe/stable_neutronium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/stable_neutronium_ingot.json index 8a0f8f14f7..127332ca84 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stable_neutronium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/stable_neutronium_ingot.json @@ -2,15 +2,10 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:neutronium_ingot" - }, - { - "item": "anvilcraft:levitation_powder" - } + "anvilcraft:neutronium_ingot", + "anvilcraft:levitation_powder" ], "result": { - "count": 1, "id": "anvilcraft:stable_neutronium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stamping_diff/eight_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/stamping_diff/eight_to_one_smithing_template.json new file mode 100644 index 0000000000..4f1dc04a87 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stamping_diff/eight_to_one_smithing_template.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:stamping_diff", + "ingredients": [ + { + "count": 8, + "items": "#anvilcraft:templates" + } + ], + "results": [ + { + "id": "anvilcraft:eight_to_one_smithing_template" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stamping_diff/four_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/stamping_diff/four_to_one_smithing_template.json new file mode 100644 index 0000000000..22cebe43f7 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stamping_diff/four_to_one_smithing_template.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:stamping_diff", + "ingredients": [ + { + "count": 4, + "items": "#anvilcraft:templates" + } + ], + "results": [ + { + "id": "anvilcraft:four_to_one_smithing_template" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stamping_diff/two_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/stamping_diff/two_to_one_smithing_template.json new file mode 100644 index 0000000000..7bec94dd88 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stamping_diff/two_to_one_smithing_template.json @@ -0,0 +1,14 @@ +{ + "type": "anvilcraft:stamping_diff", + "ingredients": [ + { + "count": 2, + "items": "#anvilcraft:templates" + } + ], + "results": [ + { + "id": "anvilcraft:two_to_one_smithing_template" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stamping_platform.json b/src/generated/resources/data/anvilcraft/recipe/stamping_platform.json index 73357a489f..ea78de9adf 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stamping_platform.json +++ b/src/generated/resources/data/anvilcraft/recipe/stamping_platform.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "tag": "c:plates/iron" - }, - "B": { - "tag": "c:ingots/iron" - } + "A": "#c:plates/iron", + "B": "#c:ingots/iron" }, "pattern": [ "BAB", @@ -15,7 +11,6 @@ "B B" ], "result": { - "count": 1, "id": "anvilcraft:stamping_platform" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/eight_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/eight_to_one_smithing_template.json deleted file mode 100644 index e6966060e8..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/eight_to_one_smithing_template.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "anvilcraft:stamping_unique_items", - "ingredients": [ - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - } - ], - "results": [ - { - "id": "anvilcraft:eight_to_one_smithing_template" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/four_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/four_to_one_smithing_template.json deleted file mode 100644 index 9184107e20..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/four_to_one_smithing_template.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "anvilcraft:stamping_unique_items", - "ingredients": [ - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - } - ], - "results": [ - { - "id": "anvilcraft:four_to_one_smithing_template" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/two_to_one_smithing_template.json b/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/two_to_one_smithing_template.json deleted file mode 100644 index aa4a980121..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stamping_unique_items/two_to_one_smithing_template.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "anvilcraft:stamping_unique_items", - "ingredients": [ - { - "tag": "anvilcraft:templates" - }, - { - "tag": "anvilcraft:templates" - } - ], - "results": [ - { - "id": "anvilcraft:two_to_one_smithing_template" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_chocolate_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_chocolate_slab.json index a7bf695ed6..af9f0411d6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_chocolate_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_chocolate_slab.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:black_chocolate_block" - }, + "ingredient": "anvilcraft:black_chocolate_block", "result": { "count": 2, "id": "anvilcraft:black_chocolate_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_chocolate_stairs.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_chocolate_stairs.json index b7ab949013..1a5c369b48 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_chocolate_stairs.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_chocolate_stairs.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:black_chocolate_block" - }, + "ingredient": "anvilcraft:black_chocolate_block", "result": { - "count": 1, "id": "anvilcraft:black_chocolate_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_slab.json new file mode 100644 index 0000000000..a335e9c385 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:black_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:black_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_stair.json new file mode 100644 index 0000000000..a21c0fac4c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:black_reinforced_concrete", + "result": { + "id": "anvilcraft:black_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_wall.json new file mode 100644 index 0000000000..99570b424b --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/black_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:black_reinforced_concrete", + "result": { + "id": "anvilcraft:black_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..d0fc64190d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:blue_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:blue_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..862a85ea86 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:blue_reinforced_concrete", + "result": { + "id": "anvilcraft:blue_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..1dd34671ca --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/blue_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:blue_reinforced_concrete", + "result": { + "id": "anvilcraft:blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_slab.json new file mode 100644 index 0000000000..d269c28314 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:brown_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:brown_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_stair.json new file mode 100644 index 0000000000..38a0f6c69e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:brown_reinforced_concrete", + "result": { + "id": "anvilcraft:brown_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_wall.json new file mode 100644 index 0000000000..d84e25ac9e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/brown_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:brown_reinforced_concrete", + "result": { + "id": "anvilcraft:brown_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/chocolate_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/chocolate_slab.json index 8a6148a465..9c91da39ed 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/chocolate_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/chocolate_slab.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:chocolate_block" - }, + "ingredient": "anvilcraft:chocolate_block", "result": { "count": 2, "id": "anvilcraft:chocolate_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/chocolate_stairs.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/chocolate_stairs.json index 45583b585f..5fae11df7e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/chocolate_stairs.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/chocolate_stairs.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:chocolate_block" - }, + "ingredient": "anvilcraft:chocolate_block", "result": { - "count": 1, "id": "anvilcraft:chocolate_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_block.json index 1f3851ebc8..f697d0ad3a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:ember_metal_block" - }, + "ingredient": "anvilcraft:ember_metal_block", "result": { "count": 4, "id": "anvilcraft:cut_ember_metal_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block.json index 4dd367d3dd..7f495177de 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_pillar_from_cut_ember_metal_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_ember_metal_block" - }, + "ingredient": "anvilcraft:cut_ember_metal_block", "result": { - "count": 1, "id": "anvilcraft:cut_ember_metal_pillar" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_pillar_from_ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_pillar_from_ember_metal_block.json index e1f5312508..a97217b169 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_pillar_from_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_pillar_from_ember_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:ember_metal_block" - }, + "ingredient": "anvilcraft:ember_metal_block", "result": { "count": 4, "id": "anvilcraft:cut_ember_metal_pillar" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block.json index 2c92c42529..f97b4a0093 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_slab_from_cut_ember_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_ember_metal_block" - }, + "ingredient": "anvilcraft:cut_ember_metal_block", "result": { "count": 2, "id": "anvilcraft:cut_ember_metal_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_slab_from_ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_slab_from_ember_metal_block.json index 6ead6b344e..0342799d90 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_slab_from_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_slab_from_ember_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:ember_metal_block" - }, + "ingredient": "anvilcraft:ember_metal_block", "result": { "count": 8, "id": "anvilcraft:cut_ember_metal_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block.json index d77ad50c1e..bb0485000c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_stairs_from_cut_ember_metal_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_ember_metal_block" - }, + "ingredient": "anvilcraft:cut_ember_metal_block", "result": { - "count": 1, "id": "anvilcraft:cut_ember_metal_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_stairs_from_ember_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_stairs_from_ember_metal_block.json index d8973d660d..aee5f70c4f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_stairs_from_ember_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_ember_metal_stairs_from_ember_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:ember_metal_block" - }, + "ingredient": "anvilcraft:ember_metal_block", "result": { "count": 4, "id": "anvilcraft:cut_ember_metal_stairs" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_block_from_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_block_from_flint_block.json index f5fc24d9b6..082b1905c6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_block_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_block_from_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:flint_block" - }, + "ingredient": "anvilcraft:flint_block", "result": { - "count": 1, "id": "anvilcraft:cut_flint_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_block_from_polished_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_block_from_polished_flint_block.json index b6cffd5538..3a73626018 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_block_from_polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_block_from_polished_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_flint_block" - }, + "ingredient": "anvilcraft:polished_flint_block", "result": { - "count": 1, "id": "anvilcraft:cut_flint_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_cut_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_cut_flint_block.json index a6a86cd584..747510fef0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_cut_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_cut_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_flint_block" - }, + "ingredient": "anvilcraft:cut_flint_block", "result": { - "count": 1, "id": "anvilcraft:cut_flint_pillar" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_flint_block.json index 4432e501e4..e60d578118 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:flint_block" - }, + "ingredient": "anvilcraft:flint_block", "result": { - "count": 1, "id": "anvilcraft:cut_flint_pillar" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_polished_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_polished_flint_block.json index 697f5ec757..f68e65a459 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_pillar_from_polished_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_flint_block" - }, + "ingredient": "anvilcraft:polished_flint_block", "result": { - "count": 1, "id": "anvilcraft:cut_flint_pillar" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_cut_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_cut_flint_block.json index 70073855a8..2835b2c41f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_cut_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_cut_flint_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_flint_block" - }, + "ingredient": "anvilcraft:cut_flint_block", "result": { "count": 2, "id": "anvilcraft:cut_flint_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_flint_block.json index 48dfbbcce5..458e65c5b3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_flint_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:flint_block" - }, + "ingredient": "anvilcraft:flint_block", "result": { "count": 2, "id": "anvilcraft:cut_flint_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_polished_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_polished_flint_block.json index a448766f27..fedcc6390a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_slab_from_polished_flint_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_flint_block" - }, + "ingredient": "anvilcraft:polished_flint_block", "result": { "count": 2, "id": "anvilcraft:cut_flint_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_cut_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_cut_flint_block.json index d3bfd980ba..b1d06eca25 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_cut_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_cut_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_flint_block" - }, + "ingredient": "anvilcraft:cut_flint_block", "result": { - "count": 1, "id": "anvilcraft:cut_flint_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_flint_block.json index cda45d7137..093eab20d5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:flint_block" - }, + "ingredient": "anvilcraft:flint_block", "result": { - "count": 1, "id": "anvilcraft:cut_flint_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_polished_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_polished_flint_block.json index e33984fb94..d396d0eaf2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_flint_stairs_from_polished_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_flint_block" - }, + "ingredient": "anvilcraft:polished_flint_block", "result": { - "count": 1, "id": "anvilcraft:cut_flint_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_block.json index fec9e376bb..8beb94536a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:frost_metal_block" - }, + "ingredient": "anvilcraft:frost_metal_block", "result": { "count": 4, "id": "anvilcraft:cut_frost_metal_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block.json index eb6476d175..0c9b2d2f12 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_pillar_from_cut_frost_metal_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_frost_metal_block" - }, + "ingredient": "anvilcraft:cut_frost_metal_block", "result": { - "count": 1, "id": "anvilcraft:cut_frost_metal_pillar" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_pillar_from_frost_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_pillar_from_frost_metal_block.json index ad48f23b5e..2c99b598bb 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_pillar_from_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_pillar_from_frost_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:frost_metal_block" - }, + "ingredient": "anvilcraft:frost_metal_block", "result": { "count": 4, "id": "anvilcraft:cut_frost_metal_pillar" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block.json index 3a84ab4a8d..607aad2294 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_slab_from_cut_frost_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_frost_metal_block" - }, + "ingredient": "anvilcraft:cut_frost_metal_block", "result": { "count": 2, "id": "anvilcraft:cut_frost_metal_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_slab_from_frost_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_slab_from_frost_metal_block.json index 4560d23329..8c87a6d728 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_slab_from_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_slab_from_frost_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:frost_metal_block" - }, + "ingredient": "anvilcraft:frost_metal_block", "result": { "count": 8, "id": "anvilcraft:cut_frost_metal_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block.json index 685d8e858d..6debf6b7b3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_stairs_from_cut_frost_metal_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_frost_metal_block" - }, + "ingredient": "anvilcraft:cut_frost_metal_block", "result": { - "count": 1, "id": "anvilcraft:cut_frost_metal_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_stairs_from_frost_metal_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_stairs_from_frost_metal_block.json index f7df5866b1..5eb1a56617 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_stairs_from_frost_metal_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_frost_metal_stairs_from_frost_metal_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:frost_metal_block" - }, + "ingredient": "anvilcraft:frost_metal_block", "result": { "count": 4, "id": "anvilcraft:cut_frost_metal_stairs" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_block.json index 78b77acce3..34d2c035e2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 8, "id": "anvilcraft:cut_heavy_iron_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block.json index 948a231dc9..ea554d2069 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_block_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 4, "id": "anvilcraft:cut_heavy_iron_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block.json index a950962fe2..2f861caba4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_cut_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_heavy_iron_block" - }, + "ingredient": "anvilcraft:cut_heavy_iron_block", "result": { "count": 2, "id": "anvilcraft:cut_heavy_iron_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_heavy_iron_block.json index 13bdd21187..496069327e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 16, "id": "anvilcraft:cut_heavy_iron_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block.json index 12511fc124..78c6ddabcd 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_slab_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 8, "id": "anvilcraft:cut_heavy_iron_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block.json index 8d8e14701f..9108437d16 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_cut_heavy_iron_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_heavy_iron_block" - }, + "ingredient": "anvilcraft:cut_heavy_iron_block", "result": { - "count": 1, "id": "anvilcraft:cut_heavy_iron_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block.json index 3e90f6f98d..27d3afd7a0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 8, "id": "anvilcraft:cut_heavy_iron_stairs" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block.json index 56f71c49a2..b03f9dcb9a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_heavy_iron_stairs_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 4, "id": "anvilcraft:cut_heavy_iron_stairs" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_block.json index b2a3aec4d2..b1f397e5a8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:royal_steel_block" - }, + "ingredient": "anvilcraft:royal_steel_block", "result": { "count": 4, "id": "anvilcraft:cut_royal_steel_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block.json index d7ba252bb5..0ece7a57e5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_pillar_from_cut_royal_steel_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_royal_steel_block" - }, + "ingredient": "anvilcraft:cut_royal_steel_block", "result": { - "count": 1, "id": "anvilcraft:cut_royal_steel_pillar" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_pillar_from_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_pillar_from_royal_steel_block.json index b61b735a8b..8f8cf86408 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_pillar_from_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_pillar_from_royal_steel_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:royal_steel_block" - }, + "ingredient": "anvilcraft:royal_steel_block", "result": { "count": 4, "id": "anvilcraft:cut_royal_steel_pillar" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block.json index b7f5874241..61220f99ed 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_slab_from_cut_royal_steel_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_royal_steel_block" - }, + "ingredient": "anvilcraft:cut_royal_steel_block", "result": { "count": 2, "id": "anvilcraft:cut_royal_steel_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_slab_from_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_slab_from_royal_steel_block.json index 1e585bd042..a87cc6dd75 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_slab_from_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_slab_from_royal_steel_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:royal_steel_block" - }, + "ingredient": "anvilcraft:royal_steel_block", "result": { "count": 8, "id": "anvilcraft:cut_royal_steel_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block.json index 7a5621b73a..e269a142dc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_stairs_from_cut_royal_steel_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_royal_steel_block" - }, + "ingredient": "anvilcraft:cut_royal_steel_block", "result": { - "count": 1, "id": "anvilcraft:cut_royal_steel_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_stairs_from_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_stairs_from_royal_steel_block.json index 5b128069d5..48993e70ce 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_stairs_from_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cut_royal_steel_stairs_from_royal_steel_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:royal_steel_block" - }, + "ingredient": "anvilcraft:royal_steel_block", "result": { "count": 4, "id": "anvilcraft:cut_royal_steel_stairs" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_slab.json new file mode 100644 index 0000000000..748a714304 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:cyan_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:cyan_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_stair.json new file mode 100644 index 0000000000..6e072a8f29 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:cyan_reinforced_concrete", + "result": { + "id": "anvilcraft:cyan_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_wall.json new file mode 100644 index 0000000000..c899d34ddd --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/cyan_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:cyan_reinforced_concrete", + "result": { + "id": "anvilcraft:cyan_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..3eaff51c66 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:gray_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:gray_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..50b39cc0bf --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:gray_reinforced_concrete", + "result": { + "id": "anvilcraft:gray_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..0cbf3b68aa --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/gray_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:gray_reinforced_concrete", + "result": { + "id": "anvilcraft:gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_slab.json new file mode 100644 index 0000000000..6a41ff87b2 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:green_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:green_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_stair.json new file mode 100644 index 0000000000..16d535186e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:green_reinforced_concrete", + "result": { + "id": "anvilcraft:green_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_wall.json new file mode 100644 index 0000000000..80a1db27b6 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/green_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:green_reinforced_concrete", + "result": { + "id": "anvilcraft:green_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam.json index 2ce65034ad..27bc86dd49 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 8, "id": "anvilcraft:heavy_iron_beam" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam_from_cut_heavy_iron_block.json index aabb7cdd47..b4007d453d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam_from_cut_heavy_iron_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_heavy_iron_block" - }, + "ingredient": "anvilcraft:cut_heavy_iron_block", "result": { - "count": 1, "id": "anvilcraft:heavy_iron_beam" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam_from_polished_heavy_iron_block.json index 163a470cf6..f07b8905d6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_beam_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 4, "id": "anvilcraft:heavy_iron_beam" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column.json index 40efca7fee..ee93e275e7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 8, "id": "anvilcraft:heavy_iron_column" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column_from_cut_heavy_iron_block.json index 89a2754844..85bc4118b8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column_from_cut_heavy_iron_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_heavy_iron_block" - }, + "ingredient": "anvilcraft:cut_heavy_iron_block", "result": { - "count": 1, "id": "anvilcraft:heavy_iron_column" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column_from_polished_heavy_iron_block.json index c6509b07a8..87bcd4aae5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_column_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 4, "id": "anvilcraft:heavy_iron_column" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_door.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_door.json index ad831c9721..62c0ebe2f9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_door.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_door.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 4, "id": "anvilcraft:heavy_iron_door" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_door_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_door_from_polished_heavy_iron_block.json index 3b4abdd77a..a993bb36fa 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_door_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_door_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 2, "id": "anvilcraft:heavy_iron_door" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate.json index cb86fdbcbd..c455299daa 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 16, "id": "anvilcraft:heavy_iron_plate" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_cut_heavy_iron_block.json index 72efa827e9..40c1d09349 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_cut_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_heavy_iron_block" - }, + "ingredient": "anvilcraft:cut_heavy_iron_block", "result": { "count": 2, "id": "anvilcraft:heavy_iron_plate" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab.json index fb3ea58a7e..8c61c10e73 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_cut_heavy_iron_slab.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_heavy_iron_slab" - }, + "ingredient": "anvilcraft:cut_heavy_iron_slab", "result": { - "count": 1, "id": "anvilcraft:heavy_iron_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_polished_heavy_iron_block.json index fb6fc6963a..3106d0f87c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 8, "id": "anvilcraft:heavy_iron_plate" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab.json index 518b9d4ce5..b2c961e0c1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_plate_from_polished_heavy_iron_slab.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_slab" - }, + "ingredient": "anvilcraft:polished_heavy_iron_slab", "result": { "count": 4, "id": "anvilcraft:heavy_iron_plate" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor.json index 6591ac27b2..56ac13c7e8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 8, "id": "anvilcraft:heavy_iron_trapdoor" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block.json index 07156d518d..5850404551 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor_from_cut_heavy_iron_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_heavy_iron_block" - }, + "ingredient": "anvilcraft:cut_heavy_iron_block", "result": { - "count": 1, "id": "anvilcraft:heavy_iron_trapdoor" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block.json index 368a94f5b4..c672db34d2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_trapdoor_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 4, "id": "anvilcraft:heavy_iron_trapdoor" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall.json index b2e589f8b8..5864e43e94 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 8, "id": "anvilcraft:heavy_iron_wall" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall_from_cut_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall_from_cut_heavy_iron_block.json index 8f84a08928..0798876c26 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall_from_cut_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall_from_cut_heavy_iron_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:cut_heavy_iron_block" - }, + "ingredient": "anvilcraft:cut_heavy_iron_block", "result": { - "count": 1, "id": "anvilcraft:heavy_iron_wall" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall_from_polished_heavy_iron_block.json index 092734c1df..5f71d9043b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/heavy_iron_wall_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 4, "id": "anvilcraft:heavy_iron_wall" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_slab.json new file mode 100644 index 0000000000..2aad54cb35 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:light_blue_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:light_blue_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_stair.json new file mode 100644 index 0000000000..ee86022b53 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:light_blue_reinforced_concrete", + "result": { + "id": "anvilcraft:light_blue_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_wall.json new file mode 100644 index 0000000000..977ec32e8d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_blue_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:light_blue_reinforced_concrete", + "result": { + "id": "anvilcraft:light_blue_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_slab.json new file mode 100644 index 0000000000..96ad0bcd6f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:light_gray_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:light_gray_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_stair.json new file mode 100644 index 0000000000..32f5c70bfc --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:light_gray_reinforced_concrete", + "result": { + "id": "anvilcraft:light_gray_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_wall.json new file mode 100644 index 0000000000..48ad49df23 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/light_gray_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:light_gray_reinforced_concrete", + "result": { + "id": "anvilcraft:light_gray_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_slab.json new file mode 100644 index 0000000000..795bdf2f55 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:lime_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:lime_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_stair.json new file mode 100644 index 0000000000..a90523beb9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:lime_reinforced_concrete", + "result": { + "id": "anvilcraft:lime_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_wall.json new file mode 100644 index 0000000000..2be02382bd --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/lime_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:lime_reinforced_concrete", + "result": { + "id": "anvilcraft:lime_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_slab.json new file mode 100644 index 0000000000..633bd39693 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:magenta_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:magenta_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_stair.json new file mode 100644 index 0000000000..41d58ec026 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:magenta_reinforced_concrete", + "result": { + "id": "anvilcraft:magenta_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_wall.json new file mode 100644 index 0000000000..51b8baab64 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/magenta_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:magenta_reinforced_concrete", + "result": { + "id": "anvilcraft:magenta_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_slab.json new file mode 100644 index 0000000000..9632df0902 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:orange_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:orange_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_stair.json new file mode 100644 index 0000000000..0625727569 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:orange_reinforced_concrete", + "result": { + "id": "anvilcraft:orange_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_wall.json new file mode 100644 index 0000000000..bc0148b3de --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/orange_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:orange_reinforced_concrete", + "result": { + "id": "anvilcraft:orange_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_slab.json new file mode 100644 index 0000000000..4bee2ca9f9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:pink_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:pink_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_stair.json new file mode 100644 index 0000000000..4df88ee132 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:pink_reinforced_concrete", + "result": { + "id": "anvilcraft:pink_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_wall.json new file mode 100644 index 0000000000..be73acf3aa --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/pink_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:pink_reinforced_concrete", + "result": { + "id": "anvilcraft:pink_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_flint_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_flint_block.json index b3a96e7b05..e4fe36b858 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_flint_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_flint_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:flint_block" - }, + "ingredient": "anvilcraft:flint_block", "result": { - "count": 1, "id": "anvilcraft:polished_flint_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_block.json index 6c6e916dd1..e224288b84 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 2, "id": "anvilcraft:polished_heavy_iron_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_slab_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_slab_from_heavy_iron_block.json index 5febfbd1e8..7cfcce6b8b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_slab_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_slab_from_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 4, "id": "anvilcraft:polished_heavy_iron_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block.json index 2472aafa40..59f814c095 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_slab_from_polished_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { "count": 2, "id": "anvilcraft:polished_heavy_iron_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block.json index 28c2a6ffdb..f79aac16af 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_stairs_from_heavy_iron_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:heavy_iron_block" - }, + "ingredient": "anvilcraft:heavy_iron_block", "result": { "count": 2, "id": "anvilcraft:polished_heavy_iron_stairs" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block.json index 1fd9a9b173..5b1d3253b8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/polished_heavy_iron_stairs_from_polished_heavy_iron_block.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:polished_heavy_iron_block" - }, + "ingredient": "anvilcraft:polished_heavy_iron_block", "result": { - "count": 1, "id": "anvilcraft:polished_heavy_iron_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_middle.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_middle.json index 91d2c86bb5..3cd1e2c781 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_middle.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_middle.json @@ -1,10 +1,8 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:power_converter_big" - }, + "ingredient": "anvilcraft:power_converter_big", "result": { - "count": 3, + "count": 8, "id": "anvilcraft:power_converter_middle" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_small_from_big.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_small_from_big.json index a0bca37fbe..f2cff11f72 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_small_from_big.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_small_from_big.json @@ -1,10 +1,8 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:power_converter_big" - }, + "ingredient": "anvilcraft:power_converter_big", "result": { - "count": 9, + "count": 64, "id": "anvilcraft:power_converter_small" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_small_from_middle.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_small_from_middle.json index cdd034c41c..62331c6fa1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_small_from_middle.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/power_converter_small_from_middle.json @@ -1,10 +1,8 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:power_converter_middle" - }, + "ingredient": "anvilcraft:power_converter_middle", "result": { - "count": 3, + "count": 8, "id": "anvilcraft:power_converter_small" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_slab.json new file mode 100644 index 0000000000..5abe5978f3 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:purple_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:purple_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_stair.json new file mode 100644 index 0000000000..94eb242935 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:purple_reinforced_concrete", + "result": { + "id": "anvilcraft:purple_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_wall.json new file mode 100644 index 0000000000..3fd5df0f52 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/purple_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:purple_reinforced_concrete", + "result": { + "id": "anvilcraft:purple_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_slab.json new file mode 100644 index 0000000000..02f6cead27 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:red_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:red_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_stair.json new file mode 100644 index 0000000000..8290e4f88c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:red_reinforced_concrete", + "result": { + "id": "anvilcraft:red_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_wall.json new file mode 100644 index 0000000000..fa170a87e9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/red_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:red_reinforced_concrete", + "result": { + "id": "anvilcraft:red_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_slab.json deleted file mode 100644 index d690a27cec..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_black" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_black_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_stair.json deleted file mode 100644 index 53beed6668..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_black" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_black_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_wall.json deleted file mode 100644 index 747059c8df..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_black_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_black" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_black_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_slab.json deleted file mode 100644 index ca629567aa..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_blue" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_blue_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_stair.json deleted file mode 100644 index 07e25528df..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_blue" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_blue_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_wall.json deleted file mode 100644 index 88998ff94d..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_blue_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_blue" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_slab.json deleted file mode 100644 index d8aca1f14c..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_brown" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_brown_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_stair.json deleted file mode 100644 index 91e3f3e93a..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_brown" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_brown_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_wall.json deleted file mode 100644 index 552522038e..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_brown_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_brown" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_brown_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_slab.json deleted file mode 100644 index c508e69fa9..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_cyan" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_cyan_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_stair.json deleted file mode 100644 index 558b528201..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_cyan" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_cyan_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_wall.json deleted file mode 100644 index d9786acc01..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_cyan_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_cyan" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_cyan_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_slab.json deleted file mode 100644 index d079f80ac5..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_gray" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_gray_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_stair.json deleted file mode 100644 index b4a30dbae8..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_gray" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_gray_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_wall.json deleted file mode 100644 index 131c30aeab..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_gray_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_gray" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_slab.json deleted file mode 100644 index 6818489e52..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_green" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_green_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_stair.json deleted file mode 100644 index 5a44a3b576..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_green" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_green_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_wall.json deleted file mode 100644 index 31765b4a93..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_green_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_green" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_green_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_slab.json deleted file mode 100644 index 8379a9af61..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_light_blue" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_light_blue_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_stair.json deleted file mode 100644 index 9ac54f6ad9..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_light_blue" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_light_blue_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_wall.json deleted file mode 100644 index ebfe12c3b4..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_blue_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_light_blue" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_light_blue_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_slab.json deleted file mode 100644 index 1d2a2df8da..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_light_gray" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_light_gray_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_stair.json deleted file mode 100644 index 6aa655b008..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_light_gray" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_light_gray_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_wall.json deleted file mode 100644 index 7425f20468..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_light_gray_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_light_gray" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_light_gray_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_slab.json deleted file mode 100644 index fe418d5a90..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_lime" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_lime_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_stair.json deleted file mode 100644 index df5009d5fa..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_lime" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_lime_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_wall.json deleted file mode 100644 index e6fcd4ebad..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_lime_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_lime" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_lime_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_slab.json deleted file mode 100644 index 367b7ef40b..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_magenta" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_magenta_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_stair.json deleted file mode 100644 index 13bec2f994..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_magenta" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_magenta_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_wall.json deleted file mode 100644 index dd29190037..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_magenta_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_magenta" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_magenta_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_slab.json deleted file mode 100644 index 38f17897c5..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_orange" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_orange_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_stair.json deleted file mode 100644 index 2d2f3b5665..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_orange" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_orange_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_wall.json deleted file mode 100644 index d9575e7eac..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_orange_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_orange" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_orange_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_slab.json deleted file mode 100644 index 131c1a8515..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_pink" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_pink_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_stair.json deleted file mode 100644 index 7e41088490..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_pink" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_pink_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_wall.json deleted file mode 100644 index e7e1144ed5..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_pink_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_pink" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_pink_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_slab.json deleted file mode 100644 index 1c185988ac..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_purple" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_purple_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_stair.json deleted file mode 100644 index 3379658f49..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_purple" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_purple_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_wall.json deleted file mode 100644 index 1f84b514c5..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_purple_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_purple" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_purple_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_slab.json deleted file mode 100644 index ea4783792e..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_red" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_red_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_stair.json deleted file mode 100644 index fc9571c637..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_red" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_red_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_wall.json deleted file mode 100644 index 6ddbab62c0..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_red_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_red" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_red_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_slab.json deleted file mode 100644 index c2d379aba6..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_white" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_white_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_stair.json deleted file mode 100644 index 4cc524849e..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_white" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_white_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_wall.json deleted file mode 100644 index 389d1eb5d2..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_white_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_white" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_white_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_slab.json deleted file mode 100644 index c87230dc70..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_yellow" - }, - "result": { - "count": 2, - "id": "anvilcraft:reinforced_concrete_yellow_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_stair.json deleted file mode 100644 index 03927ae13a..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_stair.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_yellow" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_yellow_stair" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_wall.json deleted file mode 100644 index 1bb0566bd0..0000000000 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/reinforced_concrete_yellow_wall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:reinforced_concrete_yellow" - }, - "result": { - "count": 1, - "id": "anvilcraft:reinforced_concrete_yellow_wall" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/smooth_royal_steel_block.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/smooth_royal_steel_block.json index dfe3980ffe..a6b639c6d7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/smooth_royal_steel_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/smooth_royal_steel_block.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:royal_steel_block" - }, + "ingredient": "anvilcraft:royal_steel_block", "result": { "count": 4, "id": "anvilcraft:smooth_royal_steel_block" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_chocolate_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_chocolate_slab.json index 9ebc2ac564..ae140ed1c0 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_chocolate_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_chocolate_slab.json @@ -1,8 +1,6 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:white_chocolate_block" - }, + "ingredient": "anvilcraft:white_chocolate_block", "result": { "count": 2, "id": "anvilcraft:white_chocolate_slab" diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_chocolate_stairs.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_chocolate_stairs.json index 15efad7006..72c3324fa3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_chocolate_stairs.json +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_chocolate_stairs.json @@ -1,10 +1,7 @@ { "type": "minecraft:stonecutting", - "ingredient": { - "item": "anvilcraft:white_chocolate_block" - }, + "ingredient": "anvilcraft:white_chocolate_block", "result": { - "count": 1, "id": "anvilcraft:white_chocolate_stairs" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_slab.json new file mode 100644 index 0000000000..176a67a25a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:white_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:white_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_stair.json new file mode 100644 index 0000000000..5f394d22ec --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:white_reinforced_concrete", + "result": { + "id": "anvilcraft:white_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_wall.json new file mode 100644 index 0000000000..8e9c7d0afb --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/white_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:white_reinforced_concrete", + "result": { + "id": "anvilcraft:white_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_slab.json new file mode 100644 index 0000000000..71c1410572 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:yellow_reinforced_concrete", + "result": { + "count": 2, + "id": "anvilcraft:yellow_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_stair.json new file mode 100644 index 0000000000..af0b6afcec --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_stair.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:yellow_reinforced_concrete", + "result": { + "id": "anvilcraft:yellow_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_wall.json new file mode 100644 index 0000000000..a9ae5d5182 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/stonecutting/yellow_reinforced_concrete_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "anvilcraft:yellow_reinforced_concrete", + "result": { + "id": "anvilcraft:yellow_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/sugar_block.json b/src/generated/resources/data/anvilcraft/recipe/sugar_block.json index 0f2dbebc5f..16e35b57d4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/sugar_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/sugar_block.json @@ -2,36 +2,17 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:sugar" - }, - { - "item": "minecraft:sugar" - } + "minecraft:sugar", + "minecraft:sugar", + "minecraft:sugar", + "minecraft:sugar", + "minecraft:sugar", + "minecraft:sugar", + "minecraft:sugar", + "minecraft:sugar", + "minecraft:sugar" ], "result": { - "count": 1, "id": "anvilcraft:sugar_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/sugar_from_sugar_block.json b/src/generated/resources/data/anvilcraft/recipe/sugar_from_sugar_block.json index cfb13cdd98..25b4b74509 100644 --- a/src/generated/resources/data/anvilcraft/recipe/sugar_from_sugar_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/sugar_from_sugar_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "building", "ingredients": [ - { - "item": "anvilcraft:sugar_block" - } + "anvilcraft:sugar_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/super_heating/lava_from_cobblestone.json b/src/generated/resources/data/anvilcraft/recipe/super_heating/lava_from_cobblestone.json index 8b51ee2ea8..e8bc6e8b83 100644 --- a/src/generated/resources/data/anvilcraft/recipe/super_heating/lava_from_cobblestone.json +++ b/src/generated/resources/data/anvilcraft/recipe/super_heating/lava_from_cobblestone.json @@ -1,6 +1,6 @@ { "type": "anvilcraft:super_heating", - "consume": -1000, + "fluid": "minecraft:null", "ingredients": [ { "count": 4, @@ -10,5 +10,6 @@ "items": "anvilcraft:lime_powder" } ], + "produce": 1000, "transform": "minecraft:lava" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/super_heating/lava_from_stone.json b/src/generated/resources/data/anvilcraft/recipe/super_heating/lava_from_stone.json index 7c4339b05b..b3ed6ab9c5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/super_heating/lava_from_stone.json +++ b/src/generated/resources/data/anvilcraft/recipe/super_heating/lava_from_stone.json @@ -1,6 +1,6 @@ { "type": "anvilcraft:super_heating", - "consume": -1000, + "fluid": "minecraft:null", "ingredients": [ { "count": 4, @@ -10,5 +10,6 @@ "items": "anvilcraft:lime_powder" } ], + "produce": 1000, "transform": "minecraft:lava" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/super_heating/melt_gem_cauldron_from_chromatic_stone.json b/src/generated/resources/data/anvilcraft/recipe/super_heating/melt_gem_cauldron_from_chromatic_stone.json index 4526678aa8..6b317f50d7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/super_heating/melt_gem_cauldron_from_chromatic_stone.json +++ b/src/generated/resources/data/anvilcraft/recipe/super_heating/melt_gem_cauldron_from_chromatic_stone.json @@ -1,10 +1,11 @@ { "type": "anvilcraft:super_heating", - "consume": -1000, + "fluid": "minecraft:null", "ingredients": [ { "items": "anvilcraft:chromatic_stone" } ], + "produce": 1000, "transform": "anvilcraft:melt_gem" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/super_heating/melt_gem_cauldron_from_gem_block.json b/src/generated/resources/data/anvilcraft/recipe/super_heating/melt_gem_cauldron_from_gem_block.json index 3532a21c59..16e9c439a6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/super_heating/melt_gem_cauldron_from_gem_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/super_heating/melt_gem_cauldron_from_gem_block.json @@ -1,10 +1,11 @@ { "type": "anvilcraft:super_heating", - "consume": -1000, + "fluid": "minecraft:null", "ingredients": [ { "items": "#anvilcraft:gem_blocks" } ], + "produce": 1000, "transform": "anvilcraft:melt_gem" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/tesla_tower.json b/src/generated/resources/data/anvilcraft/recipe/tesla_tower.json index f1164a4789..4647475c46 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tesla_tower.json +++ b/src/generated/resources/data/anvilcraft/recipe/tesla_tower.json @@ -2,18 +2,10 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:royal_steel_ingot" - }, - "B": { - "item": "anvilcraft:topaz_block" - }, - "C": { - "item": "anvilcraft:transmission_pole" - }, - "D": { - "item": "anvilcraft:circuit_board" - } + "A": "anvilcraft:royal_steel_ingot", + "B": "anvilcraft:topaz_block", + "C": "anvilcraft:transmission_pole", + "D": "anvilcraft:circuit_board" }, "pattern": [ "ABA", @@ -21,7 +13,6 @@ "ADA" ], "result": { - "count": 1, "id": "anvilcraft:tesla_tower" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/amber_block.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/amber_block.json index 8dab76f2a6..b8058b85e3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/amber_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/amber_block.json @@ -2,12 +2,14 @@ "type": "anvilcraft:time_warp", "ingredients": [ { - "items": "anvilcraft:resin_block", - "predicates": { - "anvillib:not": { - "anvilcraft:saved_entity": {} + "components": { + "predicates": { + "anvillib:not": { + "anvilcraft:saved_entity": {} + } } - } + }, + "items": "anvilcraft:resin_block" } ], "results": [ diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_0.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_0.json index 382431d903..f06c1d4b92 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_0.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_0.json @@ -1,7 +1,8 @@ { "type": "anvilcraft:time_warp", "consume": 1000, - "fluid": "anvilcraft:fire", + "fluid": "anvilcraft:oil", + "ignited": true, "ingredients": [ { "items": "#anvilcraft:netherite_block" @@ -12,6 +13,5 @@ "count": 3, "id": "anvilcraft:ember_metal_ingot" } - ], - "transform": "anvilcraft:fire" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_1.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_1.json index b3173217e5..c60bd5782e 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_1.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_1.json @@ -1,7 +1,8 @@ { "type": "anvilcraft:time_warp", "consume": 1000, - "fluid": "anvilcraft:fire", + "fluid": "anvilcraft:oil", + "ignited": true, "ingredients": [ { "items": "#anvilcraft:netherite_block" @@ -15,6 +16,5 @@ "count": 4, "id": "anvilcraft:ember_metal_ingot" } - ], - "transform": "anvilcraft:fire" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_2.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_2.json index 807ca794bf..5c6ef519b1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_2.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_2.json @@ -1,7 +1,8 @@ { "type": "anvilcraft:time_warp", "consume": 1000, - "fluid": "anvilcraft:fire", + "fluid": "anvilcraft:oil", + "ignited": true, "ingredients": [ { "items": "#anvilcraft:netherite_block" @@ -16,6 +17,5 @@ "count": 5, "id": "anvilcraft:ember_metal_ingot" } - ], - "transform": "anvilcraft:fire" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_3.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_3.json index fd549df996..447e4dbbe1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_3.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/ember_metal_ingot_3.json @@ -1,7 +1,8 @@ { "type": "anvilcraft:time_warp", "consume": 1000, - "fluid": "anvilcraft:fire", + "fluid": "anvilcraft:oil", + "ignited": true, "ingredients": [ { "items": "#anvilcraft:netherite_block" @@ -16,6 +17,5 @@ "count": 6, "id": "anvilcraft:ember_metal_ingot" } - ], - "transform": "anvilcraft:fire" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/mob_amber_block.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/mob_amber_block.json index 1043d60658..04f2da1035 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/mob_amber_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/mob_amber_block.json @@ -12,14 +12,16 @@ } ], "item": { - "items": "anvilcraft:resin_block", - "predicates": { - "anvillib:not": { - "anvilcraft:saved_entity": { - "is_monster": true + "components": { + "predicates": { + "anvillib:not": { + "anvilcraft:saved_entity": { + "is_monster": true + } } } - } + }, + "items": "anvilcraft:resin_block" }, "offset": [ 0.0, @@ -34,15 +36,6 @@ } ], "icon": { - "components": { - "anvilcraft:saved_entity": { - "isMonster": false, - "tag": { - "id": "minecraft:mooshroom" - } - } - }, - "count": 1, "id": "anvilcraft:mob_amber_block" }, "max_efficiency": 1, @@ -75,14 +68,6 @@ "outcomes": [ { "type": "anvillib_recipe:spawn_item", - "components": { - "anvilcraft:saved_entity": { - "isMonster": false, - "tag": { - "id": "minecraft:mooshroom" - } - } - }, "functions": [ { "type": "anvillib_recipe:apply_tag_2_component", diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_beef.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_beef.json index eb042bce63..4da63635e7 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_beef.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_beef.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "count": 16, "items": "#c:foods/raw_beef" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_chicken.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_chicken.json index 90dc062b0b..bf82ed41a6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_chicken.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_chicken.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "count": 64, "items": "#c:foods/raw_chicken" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_fish.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_fish.json index ca81031163..2e8ccce4e1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_fish.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_fish.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "count": 64, "items": "#c:foods/raw_fish" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_mutton.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_mutton.json index 7e09fb6121..44a237c2db 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_mutton.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_mutton.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "count": 16, "items": "#c:foods/raw_mutton" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_porkchop.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_porkchop.json index 1fa1f4d9d0..1996703658 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_porkchop.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_porkchop.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "count": 16, "items": "#c:foods/raw_porkchop" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_rabbit.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_rabbit.json index 06f3baeb14..2e4ce17b35 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_rabbit.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_foods/raw_rabbit.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "count": 16, "items": "#c:foods/raw_rabbit" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_piglin_head.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_piglin_head.json index 5ea8eaf515..4974d3427b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_piglin_head.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_piglin_head.json @@ -1,10 +1,11 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "items": "minecraft:piglin_head" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_rotten_flesh.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_rotten_flesh.json index 583ecdfe61..c18a56ac20 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_rotten_flesh.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_rotten_flesh.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "count": 64, "items": "minecraft:rotten_flesh" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_spider_eye.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_spider_eye.json index aca1911a8c..f2d4c6a3a6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_spider_eye.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_spider_eye.json @@ -1,11 +1,12 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "count": 64, "items": "minecraft:spider_eye" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_zombie_head.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_zombie_head.json index 6e45ea0189..99c4b93681 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_zombie_head.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/oil_from_zombie_head.json @@ -1,10 +1,11 @@ { "type": "anvilcraft:time_warp", - "consume": -250, + "fluid": "minecraft:null", "ingredients": [ { "items": "minecraft:zombie_head" } ], + "produce": 250, "transform": "anvilcraft:oil" } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/time_warp/resentful_amber_block.json b/src/generated/resources/data/anvilcraft/recipe/time_warp/resentful_amber_block.json index a91dd1f252..10034d9fc2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/time_warp/resentful_amber_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/time_warp/resentful_amber_block.json @@ -12,12 +12,14 @@ } ], "item": { - "items": "anvilcraft:resin_block", - "predicates": { - "anvilcraft:saved_entity": { - "is_monster": true + "components": { + "predicates": { + "anvilcraft:saved_entity": { + "is_monster": true + } } - } + }, + "items": "anvilcraft:resin_block" }, "offset": [ 0.0, @@ -32,15 +34,6 @@ } ], "icon": { - "components": { - "anvilcraft:saved_entity": { - "isMonster": true, - "tag": { - "id": "minecraft:zombie" - } - } - }, - "count": 1, "id": "anvilcraft:resentful_amber_block" }, "max_efficiency": 1, @@ -77,14 +70,6 @@ { "outcome": { "type": "anvillib_recipe:spawn_item", - "components": { - "anvilcraft:saved_entity": { - "isMonster": false, - "tag": { - "id": "minecraft:mooshroom" - } - } - }, "functions": [ { "type": "anvillib_recipe:apply_tag_2_component", @@ -104,14 +89,6 @@ { "outcome": { "type": "anvillib_recipe:spawn_item", - "components": { - "anvilcraft:saved_entity": { - "isMonster": true, - "tag": { - "id": "minecraft:zombie" - } - } - }, "functions": [ { "type": "anvillib_recipe:apply_tag_2_component", diff --git a/src/generated/resources/data/anvilcraft/recipe/tin_block.json b/src/generated/resources/data/anvilcraft/recipe/tin_block.json index 796b449153..518f11aec8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tin_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/tin_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/tin" - } + "A": "#c:ingots/tin" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:tin_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/tin_ingot.json b/src/generated/resources/data/anvilcraft/recipe/tin_ingot.json index 949e158b98..1fa7c5b205 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tin_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/tin_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:tin_ingot", "key": { - "A": { - "tag": "c:nuggets/tin" - } + "A": "#c:nuggets/tin" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:tin_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/tin_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/tin_ingot_from_block.json index 834abe4e27..669c80950b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tin_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/tin_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:tin_ingot", "ingredients": [ - { - "item": "anvilcraft:tin_block" - } + "anvilcraft:tin_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/tin_nugget.json b/src/generated/resources/data/anvilcraft/recipe/tin_nugget.json index 020258f871..1348826f52 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tin_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/tin_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/tin" - } + "#c:ingots/tin" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/tin_pressure_plate_from_ingots_tin.json b/src/generated/resources/data/anvilcraft/recipe/tin_pressure_plate_from_ingots_tin.json index 817fc70be1..55674b631a 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tin_pressure_plate_from_ingots_tin.json +++ b/src/generated/resources/data/anvilcraft/recipe/tin_pressure_plate_from_ingots_tin.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/tin" - } + "A": "#c:ingots/tin" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:tin_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/titanium_block.json b/src/generated/resources/data/anvilcraft/recipe/titanium_block.json index e8bd099f9f..e52cadf5e2 100644 --- a/src/generated/resources/data/anvilcraft/recipe/titanium_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/titanium_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/titanium" - } + "A": "#c:ingots/titanium" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:titanium_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/titanium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/titanium_ingot.json index 5abec70947..f90da64a26 100644 --- a/src/generated/resources/data/anvilcraft/recipe/titanium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/titanium_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:titanium_ingot", "key": { - "A": { - "tag": "c:nuggets/titanium" - } + "A": "#c:nuggets/titanium" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:titanium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/titanium_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/titanium_ingot_from_block.json index 0ec94325fd..3499eb6fa9 100644 --- a/src/generated/resources/data/anvilcraft/recipe/titanium_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/titanium_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:titanium_ingot", "ingredients": [ - { - "item": "anvilcraft:titanium_block" - } + "anvilcraft:titanium_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/titanium_nugget.json b/src/generated/resources/data/anvilcraft/recipe/titanium_nugget.json index fc6139fd99..bc924ccf4f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/titanium_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/titanium_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/titanium" - } + "#c:ingots/titanium" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/titanium_pressure_plate_from_ingots_titanium.json b/src/generated/resources/data/anvilcraft/recipe/titanium_pressure_plate_from_ingots_titanium.json index befa1ec7a9..76367d2d6d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/titanium_pressure_plate_from_ingots_titanium.json +++ b/src/generated/resources/data/anvilcraft/recipe/titanium_pressure_plate_from_ingots_titanium.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/titanium" - } + "A": "#c:ingots/titanium" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:titanium_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/topaz.json b/src/generated/resources/data/anvilcraft/recipe/topaz.json index 40f8ceabd4..20210da448 100644 --- a/src/generated/resources/data/anvilcraft/recipe/topaz.json +++ b/src/generated/resources/data/anvilcraft/recipe/topaz.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:topaz_block" - } + "anvilcraft:topaz_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/topaz_block.json b/src/generated/resources/data/anvilcraft/recipe/topaz_block.json index 56b01c9a50..1c1a133517 100644 --- a/src/generated/resources/data/anvilcraft/recipe/topaz_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/topaz_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:topaz" - } + "A": "anvilcraft:topaz" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:topaz_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/totem_of_rage.json b/src/generated/resources/data/anvilcraft/recipe/totem_of_rage.json index 28bf012696..d64d18c584 100644 --- a/src/generated/resources/data/anvilcraft/recipe/totem_of_rage.json +++ b/src/generated/resources/data/anvilcraft/recipe/totem_of_rage.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:totem_of_undying" - }, - "B": { - "item": "anvilcraft:cursed_gold_block" - }, - "C": { - "item": "anvilcraft:ember_metal_nugget" - } + "A": "minecraft:totem_of_undying", + "B": "anvilcraft:cursed_gold_block", + "C": "anvilcraft:ember_metal_nugget" }, "pattern": [ "BBB", @@ -18,7 +12,6 @@ "BBB" ], "result": { - "count": 1, "id": "anvilcraft:totem_of_rage" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/totem_of_recovery.json b/src/generated/resources/data/anvilcraft/recipe/totem_of_recovery.json index fa537dbfe4..5058569e79 100644 --- a/src/generated/resources/data/anvilcraft/recipe/totem_of_recovery.json +++ b/src/generated/resources/data/anvilcraft/recipe/totem_of_recovery.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:totem_of_undying" - }, - "B": { - "item": "anvilcraft:recovery_pearl" - }, - "C": { - "item": "minecraft:echo_shard" - } + "A": "minecraft:totem_of_undying", + "B": "anvilcraft:recovery_pearl", + "C": "minecraft:echo_shard" }, "pattern": [ "CCC", @@ -18,7 +12,6 @@ "CCC" ], "result": { - "count": 1, "id": "anvilcraft:totem_of_recovery" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/transcendence_dragon_rod.json b/src/generated/resources/data/anvilcraft/recipe/transcendence_dragon_rod.json index 9e9ea0aea3..e6361c9440 100644 --- a/src/generated/resources/data/anvilcraft/recipe/transcendence_dragon_rod.json +++ b/src/generated/resources/data/anvilcraft/recipe/transcendence_dragon_rod.json @@ -2,15 +2,10 @@ "type": "minecraft:crafting_shapeless", "category": "equipment", "ingredients": [ - { - "item": "anvilcraft:block_devourer" - }, - { - "item": "anvilcraft:transcendence_anvil_hammer" - } + "anvilcraft:block_devourer", + "anvilcraft:transcendence_anvil_hammer" ], "result": { - "count": 1, "id": "anvilcraft:transcendence_dragon_rod" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/transcendium_block.json b/src/generated/resources/data/anvilcraft/recipe/transcendium_block.json index d9f1762680..82db11d489 100644 --- a/src/generated/resources/data/anvilcraft/recipe/transcendium_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/transcendium_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:transcendium_ingot" - } + "A": "anvilcraft:transcendium_ingot" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:transcendium_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/transcendium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/transcendium_ingot.json index 640f4fbe05..a215734ed4 100644 --- a/src/generated/resources/data/anvilcraft/recipe/transcendium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/transcendium_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:transcendium_ingot", "key": { - "A": { - "item": "anvilcraft:transcendium_nugget" - } + "A": "anvilcraft:transcendium_nugget" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:transcendium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/transcendium_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/transcendium_ingot_from_block.json index 40d02dba31..b3db64ece5 100644 --- a/src/generated/resources/data/anvilcraft/recipe/transcendium_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/transcendium_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:transcendium_ingot", "ingredients": [ - { - "item": "anvilcraft:transcendium_block" - } + "anvilcraft:transcendium_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/transcendium_nugget_from_ingot.json b/src/generated/resources/data/anvilcraft/recipe/transcendium_nugget_from_ingot.json index c3ef7dbe35..cbcd16ae28 100644 --- a/src/generated/resources/data/anvilcraft/recipe/transcendium_nugget_from_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/transcendium_nugget_from_ingot.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:transcendium_ingot" - } + "anvilcraft:transcendium_ingot" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/transmission_pole.json b/src/generated/resources/data/anvilcraft/recipe/transmission_pole.json index 3b002e0a78..ba0520401c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/transmission_pole.json +++ b/src/generated/resources/data/anvilcraft/recipe/transmission_pole.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:magnetoelectric_core" - }, - "B": { - "item": "minecraft:lightning_rod" - }, - "C": { - "item": "minecraft:iron_block" - } + "A": "anvilcraft:magnetoelectric_core", + "B": "minecraft:lightning_rod", + "C": "minecraft:iron_block" }, "pattern": [ "A", @@ -18,7 +12,6 @@ "C" ], "result": { - "count": 1, "id": "anvilcraft:transmission_pole" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/transparent_crafting_table.json b/src/generated/resources/data/anvilcraft/recipe/transparent_crafting_table.json index 5adce39707..68c0791362 100644 --- a/src/generated/resources/data/anvilcraft/recipe/transparent_crafting_table.json +++ b/src/generated/resources/data/anvilcraft/recipe/transparent_crafting_table.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "B": { - "item": "minecraft:crafting_table" - } + "A": "minecraft:amethyst_shard", + "B": "minecraft:crafting_table" }, "pattern": [ " A ", @@ -15,7 +11,6 @@ " A " ], "result": { - "count": 1, "id": "anvilcraft:transparent_crafting_table" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/trident.json b/src/generated/resources/data/anvilcraft/recipe/trident.json index e62c4ab2c3..dbf20b7540 100644 --- a/src/generated/resources/data/anvilcraft/recipe/trident.json +++ b/src/generated/resources/data/anvilcraft/recipe/trident.json @@ -2,12 +2,8 @@ "type": "minecraft:crafting_shaped", "category": "equipment", "key": { - "A": { - "item": "anvilcraft:prismarine_blade" - }, - "B": { - "item": "minecraft:prismarine_bricks" - } + "A": "anvilcraft:prismarine_blade", + "B": "minecraft:prismarine_bricks" }, "pattern": [ " AA", @@ -15,7 +11,6 @@ "B " ], "result": { - "count": 1, "id": "minecraft:trident" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/tungsten_block.json b/src/generated/resources/data/anvilcraft/recipe/tungsten_block.json index 3a7baebbdf..70082ea0e8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tungsten_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/tungsten_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/tungsten" - } + "A": "#c:ingots/tungsten" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:tungsten_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/tungsten_ingot.json b/src/generated/resources/data/anvilcraft/recipe/tungsten_ingot.json index 8bcf9eb9d1..f0fb8ff318 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tungsten_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/tungsten_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:tungsten_ingot", "key": { - "A": { - "tag": "c:nuggets/tungsten" - } + "A": "#c:nuggets/tungsten" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:tungsten_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/tungsten_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/tungsten_ingot_from_block.json index 2c57e6aa5a..2bfec2a8be 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tungsten_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/tungsten_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:tungsten_ingot", "ingredients": [ - { - "item": "anvilcraft:tungsten_block" - } + "anvilcraft:tungsten_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/tungsten_nugget.json b/src/generated/resources/data/anvilcraft/recipe/tungsten_nugget.json index 378f5f10c6..44d626a599 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tungsten_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/tungsten_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/tungsten" - } + "#c:ingots/tungsten" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/tungsten_pressure_plate_from_ingots_tungsten.json b/src/generated/resources/data/anvilcraft/recipe/tungsten_pressure_plate_from_ingots_tungsten.json index 05d8756f63..b758b1595c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/tungsten_pressure_plate_from_ingots_tungsten.json +++ b/src/generated/resources/data/anvilcraft/recipe/tungsten_pressure_plate_from_ingots_tungsten.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/tungsten" - } + "A": "#c:ingots/tungsten" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:tungsten_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/two_to_one_smithing/transcendence_heavy_halberd.json b/src/generated/resources/data/anvilcraft/recipe/two_to_one_smithing/transcendence_heavy_halberd.json index c6d3cdb7b8..9fcb7ccfe8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/two_to_one_smithing/transcendence_heavy_halberd.json +++ b/src/generated/resources/data/anvilcraft/recipe/two_to_one_smithing/transcendence_heavy_halberd.json @@ -22,7 +22,9 @@ ] } ], - "result": "anvilcraft:transcendence_heavy_halberd", + "result": { + "id": "anvilcraft:transcendence_heavy_halberd" + }, "template": { "items": "anvilcraft:two_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/two_to_one_smithing/transcendence_resonator.json b/src/generated/resources/data/anvilcraft/recipe/two_to_one_smithing/transcendence_resonator.json index 26ba0e1264..1da52b7b7c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/two_to_one_smithing/transcendence_resonator.json +++ b/src/generated/resources/data/anvilcraft/recipe/two_to_one_smithing/transcendence_resonator.json @@ -22,7 +22,9 @@ ] } ], - "result": "anvilcraft:transcendence_resonator", + "result": { + "id": "anvilcraft:transcendence_resonator" + }, "template": { "items": "anvilcraft:two_to_one_smithing_template" } diff --git a/src/generated/resources/data/anvilcraft/recipe/uranium_block.json b/src/generated/resources/data/anvilcraft/recipe/uranium_block.json index cf8631f15e..189bbd602c 100644 --- a/src/generated/resources/data/anvilcraft/recipe/uranium_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/uranium_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/uranium" - } + "A": "#c:ingots/uranium" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:uranium_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/uranium_ingot.json b/src/generated/resources/data/anvilcraft/recipe/uranium_ingot.json index 287b343fd5..083c7bfce8 100644 --- a/src/generated/resources/data/anvilcraft/recipe/uranium_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/uranium_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:uranium_ingot", "key": { - "A": { - "tag": "c:nuggets/uranium" - } + "A": "#c:nuggets/uranium" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:uranium_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/uranium_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/uranium_ingot_from_block.json index 39b66108be..0602bf3bee 100644 --- a/src/generated/resources/data/anvilcraft/recipe/uranium_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/uranium_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:uranium_ingot", "ingredients": [ - { - "item": "anvilcraft:uranium_block" - } + "anvilcraft:uranium_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/uranium_nugget.json b/src/generated/resources/data/anvilcraft/recipe/uranium_nugget.json index 0846850c48..0252a0cc1f 100644 --- a/src/generated/resources/data/anvilcraft/recipe/uranium_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/uranium_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/uranium" - } + "#c:ingots/uranium" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/uranium_pressure_plate_from_ingots_uranium.json b/src/generated/resources/data/anvilcraft/recipe/uranium_pressure_plate_from_ingots_uranium.json index 10746535b1..8a4cb24fd1 100644 --- a/src/generated/resources/data/anvilcraft/recipe/uranium_pressure_plate_from_ingots_uranium.json +++ b/src/generated/resources/data/anvilcraft/recipe/uranium_pressure_plate_from_ingots_uranium.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/uranium" - } + "A": "#c:ingots/uranium" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:uranium_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/void_energy_collector.json b/src/generated/resources/data/anvilcraft/recipe/void_energy_collector.json index e7df8357f9..41cd295d1d 100644 --- a/src/generated/resources/data/anvilcraft/recipe/void_energy_collector.json +++ b/src/generated/resources/data/anvilcraft/recipe/void_energy_collector.json @@ -2,15 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": { - "item": "anvilcraft:void_matter_block" - }, - "B": { - "item": "anvilcraft:charge_collector" - }, - "C": { - "item": "anvilcraft:heavy_iron_block" - } + "A": "anvilcraft:void_matter_block", + "B": "anvilcraft:charge_collector", + "C": "anvilcraft:heavy_iron_block" }, "pattern": [ "AAA", @@ -18,7 +12,6 @@ "CCC" ], "result": { - "count": 1, "id": "anvilcraft:void_energy_collector" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/void_matter.json b/src/generated/resources/data/anvilcraft/recipe/void_matter.json index 284c3d4a90..fd4cd500bc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/void_matter.json +++ b/src/generated/resources/data/anvilcraft/recipe/void_matter.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:void_matter_block" - } + "anvilcraft:void_matter_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/void_matter_block.json b/src/generated/resources/data/anvilcraft/recipe/void_matter_block.json index 7e0aa05a78..9a3ef1f907 100644 --- a/src/generated/resources/data/anvilcraft/recipe/void_matter_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/void_matter_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:void_matter" - } + "A": "anvilcraft:void_matter" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:void_matter_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/wet_sponge.json b/src/generated/resources/data/anvilcraft/recipe/wet_sponge.json index 7f01eecda5..dc1d518975 100644 --- a/src/generated/resources/data/anvilcraft/recipe/wet_sponge.json +++ b/src/generated/resources/data/anvilcraft/recipe/wet_sponge.json @@ -2,16 +2,13 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:sponge_gemmule" - } + "A": "anvilcraft:sponge_gemmule" }, "pattern": [ "AA", "AA" ], "result": { - "count": 1, "id": "minecraft:wet_sponge" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/white_chocolate_block.json b/src/generated/resources/data/anvilcraft/recipe/white_chocolate_block.json index bbfc91dae3..f733d75dfc 100644 --- a/src/generated/resources/data/anvilcraft/recipe/white_chocolate_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/white_chocolate_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:chocolate_white" - } + "A": "anvilcraft:chocolate_white" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:white_chocolate_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/white_chocolate_from_block.json b/src/generated/resources/data/anvilcraft/recipe/white_chocolate_from_block.json index 3fda92f365..588c08d2ec 100644 --- a/src/generated/resources/data/anvilcraft/recipe/white_chocolate_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/white_chocolate_from_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "item": "anvilcraft:white_chocolate_block" - } + "anvilcraft:white_chocolate_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/white_chocolate_slab.json b/src/generated/resources/data/anvilcraft/recipe/white_chocolate_slab.json index fd63f936d7..377a55b169 100644 --- a/src/generated/resources/data/anvilcraft/recipe/white_chocolate_slab.json +++ b/src/generated/resources/data/anvilcraft/recipe/white_chocolate_slab.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:white_chocolate_block" - } + "A": "anvilcraft:white_chocolate_block" }, "pattern": [ "AAA" diff --git a/src/generated/resources/data/anvilcraft/recipe/white_chocolate_stairs.json b/src/generated/resources/data/anvilcraft/recipe/white_chocolate_stairs.json index 80b0036b30..472049cec6 100644 --- a/src/generated/resources/data/anvilcraft/recipe/white_chocolate_stairs.json +++ b/src/generated/resources/data/anvilcraft/recipe/white_chocolate_stairs.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "item": "anvilcraft:white_chocolate_block" - } + "A": "anvilcraft:white_chocolate_block" }, "pattern": [ "A ", diff --git a/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_slab.json new file mode 100644 index 0000000000..8f6b2b3d67 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:white_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:white_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_stair.json new file mode 100644 index 0000000000..8e6db22636 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:white_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:white_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_wall.json new file mode 100644 index 0000000000..bb68a84070 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/white_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:white_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:white_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_slab.json b/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_slab.json new file mode 100644 index 0000000000..8e9997b7a8 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_slab.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:yellow_reinforced_concrete" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "anvilcraft:yellow_reinforced_concrete_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_stair.json b/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_stair.json new file mode 100644 index 0000000000..58aebe9443 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_stair.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:yellow_reinforced_concrete" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:yellow_reinforced_concrete_stair" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_wall.json b/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_wall.json new file mode 100644 index 0000000000..9b71a67106 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/yellow_reinforced_concrete_wall.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": "anvilcraft:yellow_reinforced_concrete" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 4, + "id": "anvilcraft:yellow_reinforced_concrete_wall" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/zinc_block.json b/src/generated/resources/data/anvilcraft/recipe/zinc_block.json index 379455d83c..b7a753816b 100644 --- a/src/generated/resources/data/anvilcraft/recipe/zinc_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/zinc_block.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "A": { - "tag": "c:ingots/zinc" - } + "A": "#c:ingots/zinc" }, "pattern": [ "AAA", @@ -12,7 +10,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:zinc_block" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/zinc_ingot.json b/src/generated/resources/data/anvilcraft/recipe/zinc_ingot.json index ba94611895..aa2cd04df3 100644 --- a/src/generated/resources/data/anvilcraft/recipe/zinc_ingot.json +++ b/src/generated/resources/data/anvilcraft/recipe/zinc_ingot.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:zinc_ingot", "key": { - "A": { - "tag": "c:nuggets/zinc" - } + "A": "#c:nuggets/zinc" }, "pattern": [ "AAA", @@ -13,7 +11,6 @@ "AAA" ], "result": { - "count": 1, "id": "anvilcraft:zinc_ingot" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/zinc_ingot_from_block.json b/src/generated/resources/data/anvilcraft/recipe/zinc_ingot_from_block.json index 91f32bd38c..45324bdcec 100644 --- a/src/generated/resources/data/anvilcraft/recipe/zinc_ingot_from_block.json +++ b/src/generated/resources/data/anvilcraft/recipe/zinc_ingot_from_block.json @@ -3,9 +3,7 @@ "category": "misc", "group": "anvilcraft:zinc_ingot", "ingredients": [ - { - "item": "anvilcraft:zinc_block" - } + "anvilcraft:zinc_block" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/zinc_nugget.json b/src/generated/resources/data/anvilcraft/recipe/zinc_nugget.json index a05222d60b..312664aada 100644 --- a/src/generated/resources/data/anvilcraft/recipe/zinc_nugget.json +++ b/src/generated/resources/data/anvilcraft/recipe/zinc_nugget.json @@ -2,9 +2,7 @@ "type": "minecraft:crafting_shapeless", "category": "misc", "ingredients": [ - { - "tag": "c:ingots/zinc" - } + "#c:ingots/zinc" ], "result": { "count": 9, diff --git a/src/generated/resources/data/anvilcraft/recipe/zinc_pressure_plate_from_ingots_zinc.json b/src/generated/resources/data/anvilcraft/recipe/zinc_pressure_plate_from_ingots_zinc.json index d8014a37ab..021467f279 100644 --- a/src/generated/resources/data/anvilcraft/recipe/zinc_pressure_plate_from_ingots_zinc.json +++ b/src/generated/resources/data/anvilcraft/recipe/zinc_pressure_plate_from_ingots_zinc.json @@ -2,15 +2,12 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "A": { - "tag": "c:ingots/zinc" - } + "A": "#c:ingots/zinc" }, "pattern": [ "AA" ], "result": { - "count": 1, "id": "anvilcraft:zinc_pressure_plate" } } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_0.json b/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_0.json index 56b12a25b8..f2c7745b27 100644 --- a/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_0.json +++ b/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_0.json @@ -1,10 +1,6 @@ { "values": [ - "minecraft:anvil", - "minecraft:chipped_anvil", - "minecraft:damaged_anvil", - "anvilcraft:royal_anvil", - "anvilcraft:ember_anvil", - "anvilcraft:transcendence_anvil" + "#minecraft:anvil", + "#anvilcraft:anvil_tier_1" ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_1.json b/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_1.json index b95ab75957..0d942fd9e3 100644 --- a/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_1.json +++ b/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_1.json @@ -1,7 +1,6 @@ { "values": [ "anvilcraft:royal_anvil", - "anvilcraft:ember_anvil", - "anvilcraft:transcendence_anvil" + "#anvilcraft:anvil_tier_2" ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_2.json b/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_2.json index 4a606fc968..feedced767 100644 --- a/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_2.json +++ b/src/generated/resources/data/anvilcraft/tags/block/anvil_tier_2.json @@ -1,6 +1,7 @@ { "values": [ + "anvilcraft:frost_anvil", "anvilcraft:ember_anvil", - "anvilcraft:transcendence_anvil" + "#anvilcraft:anvil_tier_3" ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/block/hammer_removable.json b/src/generated/resources/data/anvilcraft/tags/block/hammer_removable.json index 89be31bbdd..a49f916476 100644 --- a/src/generated/resources/data/anvilcraft/tags/block/hammer_removable.json +++ b/src/generated/resources/data/anvilcraft/tags/block/hammer_removable.json @@ -10,6 +10,7 @@ "#minecraft:doors", "#minecraft:buttons", "#minecraft:pressure_plates", + "#minecraft:fence_gates", "minecraft:bell", "minecraft:redstone_lamp", "minecraft:rail", @@ -60,6 +61,16 @@ "minecraft:anvil", "minecraft:chipped_anvil", "minecraft:damaged_anvil", + "minecraft:furnace", + "minecraft:blast_furnace", + "minecraft:smoker", + "minecraft:chest", + "minecraft:trapped_chest", + "minecraft:ender_chest", + "minecraft:barrel", + "minecraft:composter", + "minecraft:tnt", + "minecraft:beacon", "anvilcraft:heavy_iron_block", "anvilcraft:heavy_iron_beam", "anvilcraft:heavy_iron_column", diff --git a/src/generated/resources/data/anvilcraft/tags/block/needs_ember_tool.json b/src/generated/resources/data/anvilcraft/tags/block/needs_ember_tool.json index f72d209df7..417548830d 100644 --- a/src/generated/resources/data/anvilcraft/tags/block/needs_ember_tool.json +++ b/src/generated/resources/data/anvilcraft/tags/block/needs_ember_tool.json @@ -1,3 +1,5 @@ { - "values": [] + "values": [ + "anvilcraft:hyperdimension_storage_station" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/block/void_decay_products.json b/src/generated/resources/data/anvilcraft/tags/block/void_decay_products.json index 976c2d0696..9a9ea95b8a 100644 --- a/src/generated/resources/data/anvilcraft/tags/block/void_decay_products.json +++ b/src/generated/resources/data/anvilcraft/tags/block/void_decay_products.json @@ -1,5 +1,10 @@ { "values": [ + "anvilcraft:end_dust", + "anvilcraft:deepslate_zinc_ore", + "anvilcraft:deepslate_tin_ore", + "anvilcraft:deepslate_lead_ore", + "anvilcraft:void_stone", "anvilcraft:flint_block", "minecraft:stone", "minecraft:deepslate", @@ -39,11 +44,6 @@ "minecraft:infested_deepslate", "minecraft:nether_gold_ore", "minecraft:gilded_blackstone", - "minecraft:nether_quartz_ore", - "anvilcraft:void_stone", - "anvilcraft:end_dust", - "anvilcraft:deepslate_tin_ore", - "anvilcraft:deepslate_zinc_ore", - "anvilcraft:deepslate_lead_ore" + "minecraft:nether_quartz_ore" ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/damage_type/is_falling_giant_anvil.json b/src/generated/resources/data/anvilcraft/tags/damage_type/is_falling_giant_anvil.json new file mode 100644 index 0000000000..96f42f1d6e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/tags/damage_type/is_falling_giant_anvil.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "anvilcraft:falling_giant_anvil", + "required": false + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/entity_type/amulet_valid.json b/src/generated/resources/data/anvilcraft/tags/entity_type/amulet_valid.json index 197a938bcd..0131169bef 100644 --- a/src/generated/resources/data/anvilcraft/tags/entity_type/amulet_valid.json +++ b/src/generated/resources/data/anvilcraft/tags/entity_type/amulet_valid.json @@ -8,6 +8,10 @@ "id": "#anvilcraft:amulet_valid/sapphire", "required": false }, + { + "id": "#anvilcraft:amulet_valid/anvil", + "required": false + }, { "id": "#anvilcraft:amulet_valid/cat", "required": false diff --git a/src/generated/resources/data/anvilcraft/tags/entity_type/amulet_valid/anvil.json b/src/generated/resources/data/anvilcraft/tags/entity_type/amulet_valid/anvil.json new file mode 100644 index 0000000000..859c79c6ee --- /dev/null +++ b/src/generated/resources/data/anvilcraft/tags/entity_type/amulet_valid/anvil.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:falling_block", + "anvilcraft:falling_giant_anvil" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/entity_type/falling_giant_anvil_damage_immune.json b/src/generated/resources/data/anvilcraft/tags/entity_type/falling_giant_anvil_damage_immune.json new file mode 100644 index 0000000000..6790b73495 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/tags/entity_type/falling_giant_anvil_damage_immune.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#minecraft:fall_damage_immune" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/fluid/ignitable.json b/src/generated/resources/data/anvilcraft/tags/fluid/ignitable.json new file mode 100644 index 0000000000..15388b222f --- /dev/null +++ b/src/generated/resources/data/anvilcraft/tags/fluid/ignitable.json @@ -0,0 +1,5 @@ +{ + "values": [ + "anvilcraft:oil" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/item/amulet.json b/src/generated/resources/data/anvilcraft/tags/item/amulet.json index 606eb6630d..a72c65bd22 100644 --- a/src/generated/resources/data/anvilcraft/tags/item/amulet.json +++ b/src/generated/resources/data/anvilcraft/tags/item/amulet.json @@ -12,10 +12,6 @@ "anvilcraft:silence_amulet", "anvilcraft:abnormal_amulet", "anvilcraft:gem_amulet", - "anvilcraft:nature_amulet", - { - "id": "anvilcraft:cogwheel_amulet", - "required": false - } + "anvilcraft:nature_amulet" ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/item/disallow_hand_insert_into_tank.json b/src/generated/resources/data/anvilcraft/tags/item/disallow_hand_insert_into_tank.json new file mode 100644 index 0000000000..460afe4fe4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/tags/item/disallow_hand_insert_into_tank.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#anvilcraft:tools/anvil_hammer" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/item/explosion_proof.json b/src/generated/resources/data/anvilcraft/tags/item/explosion_proof.json index 0653d8dfdd..2e5965e9b9 100644 --- a/src/generated/resources/data/anvilcraft/tags/item/explosion_proof.json +++ b/src/generated/resources/data/anvilcraft/tags/item/explosion_proof.json @@ -2,6 +2,7 @@ "values": [ "anvilcraft:transcendence_anvil", "anvilcraft:shulker_container", + "anvilcraft:hyperdimension_storage_station", "anvilcraft:frost_metal_block", "anvilcraft:cut_frost_metal_block", "anvilcraft:cut_frost_metal_pillar", diff --git a/src/generated/resources/data/anvilcraft/tags/item/reinforced_concrete.json b/src/generated/resources/data/anvilcraft/tags/item/reinforced_concrete.json index 58eb16642e..d26a673ac7 100644 --- a/src/generated/resources/data/anvilcraft/tags/item/reinforced_concrete.json +++ b/src/generated/resources/data/anvilcraft/tags/item/reinforced_concrete.json @@ -1,68 +1,68 @@ { "values": [ - "anvilcraft:reinforced_concrete_white", - "anvilcraft:reinforced_concrete_light_gray", - "anvilcraft:reinforced_concrete_gray", - "anvilcraft:reinforced_concrete_black", - "anvilcraft:reinforced_concrete_brown", - "anvilcraft:reinforced_concrete_red", - "anvilcraft:reinforced_concrete_orange", - "anvilcraft:reinforced_concrete_yellow", - "anvilcraft:reinforced_concrete_lime", - "anvilcraft:reinforced_concrete_green", - "anvilcraft:reinforced_concrete_cyan", - "anvilcraft:reinforced_concrete_light_blue", - "anvilcraft:reinforced_concrete_blue", - "anvilcraft:reinforced_concrete_purple", - "anvilcraft:reinforced_concrete_magenta", - "anvilcraft:reinforced_concrete_pink", - "anvilcraft:reinforced_concrete_white_slab", - "anvilcraft:reinforced_concrete_light_gray_slab", - "anvilcraft:reinforced_concrete_gray_slab", - "anvilcraft:reinforced_concrete_black_slab", - "anvilcraft:reinforced_concrete_brown_slab", - "anvilcraft:reinforced_concrete_red_slab", - "anvilcraft:reinforced_concrete_orange_slab", - "anvilcraft:reinforced_concrete_yellow_slab", - "anvilcraft:reinforced_concrete_lime_slab", - "anvilcraft:reinforced_concrete_green_slab", - "anvilcraft:reinforced_concrete_cyan_slab", - "anvilcraft:reinforced_concrete_light_blue_slab", - "anvilcraft:reinforced_concrete_blue_slab", - "anvilcraft:reinforced_concrete_purple_slab", - "anvilcraft:reinforced_concrete_magenta_slab", - "anvilcraft:reinforced_concrete_pink_slab", - "anvilcraft:reinforced_concrete_white_stair", - "anvilcraft:reinforced_concrete_light_gray_stair", - "anvilcraft:reinforced_concrete_gray_stair", - "anvilcraft:reinforced_concrete_black_stair", - "anvilcraft:reinforced_concrete_brown_stair", - "anvilcraft:reinforced_concrete_red_stair", - "anvilcraft:reinforced_concrete_orange_stair", - "anvilcraft:reinforced_concrete_yellow_stair", - "anvilcraft:reinforced_concrete_lime_stair", - "anvilcraft:reinforced_concrete_green_stair", - "anvilcraft:reinforced_concrete_cyan_stair", - "anvilcraft:reinforced_concrete_light_blue_stair", - "anvilcraft:reinforced_concrete_blue_stair", - "anvilcraft:reinforced_concrete_purple_stair", - "anvilcraft:reinforced_concrete_magenta_stair", - "anvilcraft:reinforced_concrete_pink_stair", - "anvilcraft:reinforced_concrete_white_wall", - "anvilcraft:reinforced_concrete_light_gray_wall", - "anvilcraft:reinforced_concrete_gray_wall", - "anvilcraft:reinforced_concrete_black_wall", - "anvilcraft:reinforced_concrete_brown_wall", - "anvilcraft:reinforced_concrete_red_wall", - "anvilcraft:reinforced_concrete_orange_wall", - "anvilcraft:reinforced_concrete_yellow_wall", - "anvilcraft:reinforced_concrete_lime_wall", - "anvilcraft:reinforced_concrete_green_wall", - "anvilcraft:reinforced_concrete_cyan_wall", - "anvilcraft:reinforced_concrete_light_blue_wall", - "anvilcraft:reinforced_concrete_blue_wall", - "anvilcraft:reinforced_concrete_purple_wall", - "anvilcraft:reinforced_concrete_magenta_wall", - "anvilcraft:reinforced_concrete_pink_wall" + "anvilcraft:white_reinforced_concrete", + "anvilcraft:light_gray_reinforced_concrete", + "anvilcraft:gray_reinforced_concrete", + "anvilcraft:black_reinforced_concrete", + "anvilcraft:brown_reinforced_concrete", + "anvilcraft:red_reinforced_concrete", + "anvilcraft:orange_reinforced_concrete", + "anvilcraft:yellow_reinforced_concrete", + "anvilcraft:lime_reinforced_concrete", + "anvilcraft:green_reinforced_concrete", + "anvilcraft:cyan_reinforced_concrete", + "anvilcraft:light_blue_reinforced_concrete", + "anvilcraft:blue_reinforced_concrete", + "anvilcraft:purple_reinforced_concrete", + "anvilcraft:magenta_reinforced_concrete", + "anvilcraft:pink_reinforced_concrete", + "anvilcraft:white_reinforced_concrete_slab", + "anvilcraft:light_gray_reinforced_concrete_slab", + "anvilcraft:gray_reinforced_concrete_slab", + "anvilcraft:black_reinforced_concrete_slab", + "anvilcraft:brown_reinforced_concrete_slab", + "anvilcraft:red_reinforced_concrete_slab", + "anvilcraft:orange_reinforced_concrete_slab", + "anvilcraft:yellow_reinforced_concrete_slab", + "anvilcraft:lime_reinforced_concrete_slab", + "anvilcraft:green_reinforced_concrete_slab", + "anvilcraft:cyan_reinforced_concrete_slab", + "anvilcraft:light_blue_reinforced_concrete_slab", + "anvilcraft:blue_reinforced_concrete_slab", + "anvilcraft:purple_reinforced_concrete_slab", + "anvilcraft:magenta_reinforced_concrete_slab", + "anvilcraft:pink_reinforced_concrete_slab", + "anvilcraft:white_reinforced_concrete_stair", + "anvilcraft:light_gray_reinforced_concrete_stair", + "anvilcraft:gray_reinforced_concrete_stair", + "anvilcraft:black_reinforced_concrete_stair", + "anvilcraft:brown_reinforced_concrete_stair", + "anvilcraft:red_reinforced_concrete_stair", + "anvilcraft:orange_reinforced_concrete_stair", + "anvilcraft:yellow_reinforced_concrete_stair", + "anvilcraft:lime_reinforced_concrete_stair", + "anvilcraft:green_reinforced_concrete_stair", + "anvilcraft:cyan_reinforced_concrete_stair", + "anvilcraft:light_blue_reinforced_concrete_stair", + "anvilcraft:blue_reinforced_concrete_stair", + "anvilcraft:purple_reinforced_concrete_stair", + "anvilcraft:magenta_reinforced_concrete_stair", + "anvilcraft:pink_reinforced_concrete_stair", + "anvilcraft:white_reinforced_concrete_wall", + "anvilcraft:light_gray_reinforced_concrete_wall", + "anvilcraft:gray_reinforced_concrete_wall", + "anvilcraft:black_reinforced_concrete_wall", + "anvilcraft:brown_reinforced_concrete_wall", + "anvilcraft:red_reinforced_concrete_wall", + "anvilcraft:orange_reinforced_concrete_wall", + "anvilcraft:yellow_reinforced_concrete_wall", + "anvilcraft:lime_reinforced_concrete_wall", + "anvilcraft:green_reinforced_concrete_wall", + "anvilcraft:cyan_reinforced_concrete_wall", + "anvilcraft:light_blue_reinforced_concrete_wall", + "anvilcraft:blue_reinforced_concrete_wall", + "anvilcraft:purple_reinforced_concrete_wall", + "anvilcraft:magenta_reinforced_concrete_wall", + "anvilcraft:pink_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/tags/item/templates.json b/src/generated/resources/data/anvilcraft/tags/item/templates.json index 8a5d0c7d4b..e9dc541d94 100644 --- a/src/generated/resources/data/anvilcraft/tags/item/templates.json +++ b/src/generated/resources/data/anvilcraft/tags/item/templates.json @@ -6,8 +6,25 @@ "anvilcraft:transcendium_upgrade_smithing_template", "anvilcraft:permutation_smithing_template", "anvilcraft:deformation_smithing_template", - "#minecraft:trim_templates", "#anvilcraft:multiple_to_one_smithing_templates", - "minecraft:netherite_upgrade_smithing_template" + "minecraft:netherite_upgrade_smithing_template", + "minecraft:bolt_armor_trim_smithing_template", + "minecraft:coast_armor_trim_smithing_template", + "minecraft:dune_armor_trim_smithing_template", + "minecraft:eye_armor_trim_smithing_template", + "minecraft:flow_armor_trim_smithing_template", + "minecraft:host_armor_trim_smithing_template", + "minecraft:raiser_armor_trim_smithing_template", + "minecraft:rib_armor_trim_smithing_template", + "minecraft:sentry_armor_trim_smithing_template", + "minecraft:shaper_armor_trim_smithing_template", + "minecraft:silence_armor_trim_smithing_template", + "minecraft:snout_armor_trim_smithing_template", + "minecraft:spire_armor_trim_smithing_template", + "minecraft:tide_armor_trim_smithing_template", + "minecraft:vex_armor_trim_smithing_template", + "minecraft:ward_armor_trim_smithing_template", + "minecraft:wayfinder_armor_trim_smithing_template", + "minecraft:wild_armor_trim_smithing_template" ] } \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_1.json b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_1.json new file mode 100644 index 0000000000..1df84e406e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_1.json @@ -0,0 +1,8 @@ +{ + "amount": 2.0, + "random_sequence": "anvilcraft:trade_set/jeweler/level_1", + "trades": [ + "anvilcraft:jeweler/amethyst_shard_for_emerald", + "anvilcraft:jeweler/emerald_for_tinted_glass" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_2.json b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_2.json new file mode 100644 index 0000000000..f96cf34a63 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_2.json @@ -0,0 +1,8 @@ +{ + "amount": 2.0, + "random_sequence": "anvilcraft:trade_set/jeweler/level_2", + "trades": [ + "anvilcraft:jeweler/sea_lantern_for_emerald", + "anvilcraft:jeweler/amber_for_emerald" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_3.json b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_3.json new file mode 100644 index 0000000000..447fa556c0 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_3.json @@ -0,0 +1,10 @@ +{ + "amount": 2.0, + "random_sequence": "anvilcraft:trade_set/jeweler/level_3", + "trades": [ + "anvilcraft:jeweler/topaz_block_for_emerald", + "anvilcraft:jeweler/sapphire_block_for_emerald", + "anvilcraft:jeweler/ruby_block_for_emerald", + "anvilcraft:jeweler/emerald_for_royal_steel_template" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_4.json b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_4.json new file mode 100644 index 0000000000..b8a9e9aa97 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_4.json @@ -0,0 +1,9 @@ +{ + "amount": 2.0, + "random_sequence": "anvilcraft:trade_set/jeweler/level_4", + "trades": [ + "anvilcraft:jeweler/nautilus_shell_for_emerald", + "anvilcraft:jeweler/mob_amber_for_emerald", + "anvilcraft:jeweler/resentful_amber_for_emerald" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_5.json b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_5.json new file mode 100644 index 0000000000..2a9d05806d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/trade_set/jeweler/level_5.json @@ -0,0 +1,8 @@ +{ + "amount": 2.0, + "random_sequence": "anvilcraft:trade_set/jeweler/level_5", + "trades": [ + "anvilcraft:jeweler/emerald_for_geode", + "anvilcraft:jeweler/emerald_for_amulet_box" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/amber_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/amber_for_emerald.json new file mode 100644 index 0000000000..11d28714c9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/amber_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "id": "minecraft:emerald" + }, + "max_uses": 16.0, + "reputation_discount": 0.05, + "wants": { + "count": 4.0, + "id": "anvilcraft:amber" + }, + "xp": 5.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/amethyst_shard_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/amethyst_shard_for_emerald.json new file mode 100644 index 0000000000..9567b79717 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/amethyst_shard_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "id": "minecraft:emerald" + }, + "max_uses": 16.0, + "reputation_discount": 0.05, + "wants": { + "count": 4.0, + "id": "minecraft:amethyst_shard" + }, + "xp": 2.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_amulet_box.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_amulet_box.json new file mode 100644 index 0000000000..046364c3f4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_amulet_box.json @@ -0,0 +1,15 @@ +{ + "additional_wants": { + "id": "minecraft:totem_of_undying" + }, + "gives": { + "id": "anvilcraft:amulet_box" + }, + "max_uses": 1.0, + "reputation_discount": 0.05, + "wants": { + "count": 64.0, + "id": "minecraft:emerald" + }, + "xp": 30.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_geode.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_geode.json new file mode 100644 index 0000000000..dc26339c8e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_geode.json @@ -0,0 +1,15 @@ +{ + "additional_wants": { + "count": 32.0, + "id": "minecraft:smooth_basalt" + }, + "gives": { + "id": "anvilcraft:geode" + }, + "reputation_discount": 0.05, + "wants": { + "count": 64.0, + "id": "minecraft:emerald" + }, + "xp": 30.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_royal_steel_template.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_royal_steel_template.json new file mode 100644 index 0000000000..4e91101b9c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_royal_steel_template.json @@ -0,0 +1,16 @@ +{ + "additional_wants": { + "count": 4.0, + "id": "anvilcraft:royal_steel_ingot" + }, + "gives": { + "id": "anvilcraft:royal_steel_upgrade_smithing_template" + }, + "max_uses": 2.0, + "reputation_discount": 0.05, + "wants": { + "count": 40.0, + "id": "minecraft:emerald" + }, + "xp": 10.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_tinted_glass.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_tinted_glass.json new file mode 100644 index 0000000000..8a6910976c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/emerald_for_tinted_glass.json @@ -0,0 +1,11 @@ +{ + "gives": { + "id": "minecraft:tinted_glass" + }, + "max_uses": 12.0, + "reputation_discount": 0.05, + "wants": { + "id": "minecraft:emerald" + }, + "xp": 4.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/mob_amber_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/mob_amber_for_emerald.json new file mode 100644 index 0000000000..78cc2feca1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/mob_amber_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "count": 8, + "id": "minecraft:emerald" + }, + "max_uses": 2.0, + "reputation_discount": 0.05, + "wants": { + "id": "anvilcraft:mob_amber_block" + }, + "xp": 10.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/nautilus_shell_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/nautilus_shell_for_emerald.json new file mode 100644 index 0000000000..a95fac0b14 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/nautilus_shell_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "count": 2, + "id": "minecraft:emerald" + }, + "max_uses": 12.0, + "reputation_discount": 0.05, + "wants": { + "id": "minecraft:nautilus_shell" + }, + "xp": 10.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/resentful_amber_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/resentful_amber_for_emerald.json new file mode 100644 index 0000000000..9da36e5b2c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/resentful_amber_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "count": 24, + "id": "minecraft:emerald" + }, + "max_uses": 2.0, + "reputation_discount": 0.05, + "wants": { + "id": "anvilcraft:resentful_amber_block" + }, + "xp": 30.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/ruby_block_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/ruby_block_for_emerald.json new file mode 100644 index 0000000000..6b8e4a9d68 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/ruby_block_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "count": 8, + "id": "minecraft:emerald" + }, + "max_uses": 8.0, + "reputation_discount": 0.05, + "wants": { + "id": "anvilcraft:ruby_block" + }, + "xp": 10.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/sapphire_block_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/sapphire_block_for_emerald.json new file mode 100644 index 0000000000..3e31a9b2ca --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/sapphire_block_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "count": 8, + "id": "minecraft:emerald" + }, + "max_uses": 8.0, + "reputation_discount": 0.05, + "wants": { + "id": "anvilcraft:sapphire_block" + }, + "xp": 10.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/sea_lantern_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/sea_lantern_for_emerald.json new file mode 100644 index 0000000000..97ea56b099 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/sea_lantern_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "id": "minecraft:emerald" + }, + "max_uses": 12.0, + "reputation_discount": 0.05, + "wants": { + "count": 8.0, + "id": "minecraft:sea_lantern" + }, + "xp": 10.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/villager_trade/jeweler/topaz_block_for_emerald.json b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/topaz_block_for_emerald.json new file mode 100644 index 0000000000..75869be959 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/villager_trade/jeweler/topaz_block_for_emerald.json @@ -0,0 +1,12 @@ +{ + "gives": { + "count": 8, + "id": "minecraft:emerald" + }, + "max_uses": 8.0, + "reputation_discount": 0.05, + "wants": { + "id": "anvilcraft:topaz_block" + }, + "xp": 10.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed.json b/src/generated/resources/data/c/tags/block/dyed.json index 58eb16642e..d26a673ac7 100644 --- a/src/generated/resources/data/c/tags/block/dyed.json +++ b/src/generated/resources/data/c/tags/block/dyed.json @@ -1,68 +1,68 @@ { "values": [ - "anvilcraft:reinforced_concrete_white", - "anvilcraft:reinforced_concrete_light_gray", - "anvilcraft:reinforced_concrete_gray", - "anvilcraft:reinforced_concrete_black", - "anvilcraft:reinforced_concrete_brown", - "anvilcraft:reinforced_concrete_red", - "anvilcraft:reinforced_concrete_orange", - "anvilcraft:reinforced_concrete_yellow", - "anvilcraft:reinforced_concrete_lime", - "anvilcraft:reinforced_concrete_green", - "anvilcraft:reinforced_concrete_cyan", - "anvilcraft:reinforced_concrete_light_blue", - "anvilcraft:reinforced_concrete_blue", - "anvilcraft:reinforced_concrete_purple", - "anvilcraft:reinforced_concrete_magenta", - "anvilcraft:reinforced_concrete_pink", - "anvilcraft:reinforced_concrete_white_slab", - "anvilcraft:reinforced_concrete_light_gray_slab", - "anvilcraft:reinforced_concrete_gray_slab", - "anvilcraft:reinforced_concrete_black_slab", - "anvilcraft:reinforced_concrete_brown_slab", - "anvilcraft:reinforced_concrete_red_slab", - "anvilcraft:reinforced_concrete_orange_slab", - "anvilcraft:reinforced_concrete_yellow_slab", - "anvilcraft:reinforced_concrete_lime_slab", - "anvilcraft:reinforced_concrete_green_slab", - "anvilcraft:reinforced_concrete_cyan_slab", - "anvilcraft:reinforced_concrete_light_blue_slab", - "anvilcraft:reinforced_concrete_blue_slab", - "anvilcraft:reinforced_concrete_purple_slab", - "anvilcraft:reinforced_concrete_magenta_slab", - "anvilcraft:reinforced_concrete_pink_slab", - "anvilcraft:reinforced_concrete_white_stair", - "anvilcraft:reinforced_concrete_light_gray_stair", - "anvilcraft:reinforced_concrete_gray_stair", - "anvilcraft:reinforced_concrete_black_stair", - "anvilcraft:reinforced_concrete_brown_stair", - "anvilcraft:reinforced_concrete_red_stair", - "anvilcraft:reinforced_concrete_orange_stair", - "anvilcraft:reinforced_concrete_yellow_stair", - "anvilcraft:reinforced_concrete_lime_stair", - "anvilcraft:reinforced_concrete_green_stair", - "anvilcraft:reinforced_concrete_cyan_stair", - "anvilcraft:reinforced_concrete_light_blue_stair", - "anvilcraft:reinforced_concrete_blue_stair", - "anvilcraft:reinforced_concrete_purple_stair", - "anvilcraft:reinforced_concrete_magenta_stair", - "anvilcraft:reinforced_concrete_pink_stair", - "anvilcraft:reinforced_concrete_white_wall", - "anvilcraft:reinforced_concrete_light_gray_wall", - "anvilcraft:reinforced_concrete_gray_wall", - "anvilcraft:reinforced_concrete_black_wall", - "anvilcraft:reinforced_concrete_brown_wall", - "anvilcraft:reinforced_concrete_red_wall", - "anvilcraft:reinforced_concrete_orange_wall", - "anvilcraft:reinforced_concrete_yellow_wall", - "anvilcraft:reinforced_concrete_lime_wall", - "anvilcraft:reinforced_concrete_green_wall", - "anvilcraft:reinforced_concrete_cyan_wall", - "anvilcraft:reinforced_concrete_light_blue_wall", - "anvilcraft:reinforced_concrete_blue_wall", - "anvilcraft:reinforced_concrete_purple_wall", - "anvilcraft:reinforced_concrete_magenta_wall", - "anvilcraft:reinforced_concrete_pink_wall" + "anvilcraft:white_reinforced_concrete", + "anvilcraft:light_gray_reinforced_concrete", + "anvilcraft:gray_reinforced_concrete", + "anvilcraft:black_reinforced_concrete", + "anvilcraft:brown_reinforced_concrete", + "anvilcraft:red_reinforced_concrete", + "anvilcraft:orange_reinforced_concrete", + "anvilcraft:yellow_reinforced_concrete", + "anvilcraft:lime_reinforced_concrete", + "anvilcraft:green_reinforced_concrete", + "anvilcraft:cyan_reinforced_concrete", + "anvilcraft:light_blue_reinforced_concrete", + "anvilcraft:blue_reinforced_concrete", + "anvilcraft:purple_reinforced_concrete", + "anvilcraft:magenta_reinforced_concrete", + "anvilcraft:pink_reinforced_concrete", + "anvilcraft:white_reinforced_concrete_slab", + "anvilcraft:light_gray_reinforced_concrete_slab", + "anvilcraft:gray_reinforced_concrete_slab", + "anvilcraft:black_reinforced_concrete_slab", + "anvilcraft:brown_reinforced_concrete_slab", + "anvilcraft:red_reinforced_concrete_slab", + "anvilcraft:orange_reinforced_concrete_slab", + "anvilcraft:yellow_reinforced_concrete_slab", + "anvilcraft:lime_reinforced_concrete_slab", + "anvilcraft:green_reinforced_concrete_slab", + "anvilcraft:cyan_reinforced_concrete_slab", + "anvilcraft:light_blue_reinforced_concrete_slab", + "anvilcraft:blue_reinforced_concrete_slab", + "anvilcraft:purple_reinforced_concrete_slab", + "anvilcraft:magenta_reinforced_concrete_slab", + "anvilcraft:pink_reinforced_concrete_slab", + "anvilcraft:white_reinforced_concrete_stair", + "anvilcraft:light_gray_reinforced_concrete_stair", + "anvilcraft:gray_reinforced_concrete_stair", + "anvilcraft:black_reinforced_concrete_stair", + "anvilcraft:brown_reinforced_concrete_stair", + "anvilcraft:red_reinforced_concrete_stair", + "anvilcraft:orange_reinforced_concrete_stair", + "anvilcraft:yellow_reinforced_concrete_stair", + "anvilcraft:lime_reinforced_concrete_stair", + "anvilcraft:green_reinforced_concrete_stair", + "anvilcraft:cyan_reinforced_concrete_stair", + "anvilcraft:light_blue_reinforced_concrete_stair", + "anvilcraft:blue_reinforced_concrete_stair", + "anvilcraft:purple_reinforced_concrete_stair", + "anvilcraft:magenta_reinforced_concrete_stair", + "anvilcraft:pink_reinforced_concrete_stair", + "anvilcraft:white_reinforced_concrete_wall", + "anvilcraft:light_gray_reinforced_concrete_wall", + "anvilcraft:gray_reinforced_concrete_wall", + "anvilcraft:black_reinforced_concrete_wall", + "anvilcraft:brown_reinforced_concrete_wall", + "anvilcraft:red_reinforced_concrete_wall", + "anvilcraft:orange_reinforced_concrete_wall", + "anvilcraft:yellow_reinforced_concrete_wall", + "anvilcraft:lime_reinforced_concrete_wall", + "anvilcraft:green_reinforced_concrete_wall", + "anvilcraft:cyan_reinforced_concrete_wall", + "anvilcraft:light_blue_reinforced_concrete_wall", + "anvilcraft:blue_reinforced_concrete_wall", + "anvilcraft:purple_reinforced_concrete_wall", + "anvilcraft:magenta_reinforced_concrete_wall", + "anvilcraft:pink_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/black.json b/src/generated/resources/data/c/tags/block/dyed/black.json index 0e9ea39a5a..1c27d38387 100644 --- a/src/generated/resources/data/c/tags/block/dyed/black.json +++ b/src/generated/resources/data/c/tags/block/dyed/black.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_black", - "anvilcraft:reinforced_concrete_black_slab", - "anvilcraft:reinforced_concrete_black_stair", - "anvilcraft:reinforced_concrete_black_wall" + "anvilcraft:black_reinforced_concrete", + "anvilcraft:black_reinforced_concrete_slab", + "anvilcraft:black_reinforced_concrete_stair", + "anvilcraft:black_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/blue.json b/src/generated/resources/data/c/tags/block/dyed/blue.json index 562460452a..2f7243434d 100644 --- a/src/generated/resources/data/c/tags/block/dyed/blue.json +++ b/src/generated/resources/data/c/tags/block/dyed/blue.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_blue", - "anvilcraft:reinforced_concrete_blue_slab", - "anvilcraft:reinforced_concrete_blue_stair", - "anvilcraft:reinforced_concrete_blue_wall" + "anvilcraft:blue_reinforced_concrete", + "anvilcraft:blue_reinforced_concrete_slab", + "anvilcraft:blue_reinforced_concrete_stair", + "anvilcraft:blue_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/brown.json b/src/generated/resources/data/c/tags/block/dyed/brown.json index cbddcd5cd2..39557991fd 100644 --- a/src/generated/resources/data/c/tags/block/dyed/brown.json +++ b/src/generated/resources/data/c/tags/block/dyed/brown.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_brown", - "anvilcraft:reinforced_concrete_brown_slab", - "anvilcraft:reinforced_concrete_brown_stair", - "anvilcraft:reinforced_concrete_brown_wall" + "anvilcraft:brown_reinforced_concrete", + "anvilcraft:brown_reinforced_concrete_slab", + "anvilcraft:brown_reinforced_concrete_stair", + "anvilcraft:brown_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/cyan.json b/src/generated/resources/data/c/tags/block/dyed/cyan.json index 17db2370cd..f5416aef64 100644 --- a/src/generated/resources/data/c/tags/block/dyed/cyan.json +++ b/src/generated/resources/data/c/tags/block/dyed/cyan.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_cyan", - "anvilcraft:reinforced_concrete_cyan_slab", - "anvilcraft:reinforced_concrete_cyan_stair", - "anvilcraft:reinforced_concrete_cyan_wall" + "anvilcraft:cyan_reinforced_concrete", + "anvilcraft:cyan_reinforced_concrete_slab", + "anvilcraft:cyan_reinforced_concrete_stair", + "anvilcraft:cyan_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/gray.json b/src/generated/resources/data/c/tags/block/dyed/gray.json index 0e34f21d36..97636feb3c 100644 --- a/src/generated/resources/data/c/tags/block/dyed/gray.json +++ b/src/generated/resources/data/c/tags/block/dyed/gray.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_gray", - "anvilcraft:reinforced_concrete_gray_slab", - "anvilcraft:reinforced_concrete_gray_stair", - "anvilcraft:reinforced_concrete_gray_wall" + "anvilcraft:gray_reinforced_concrete", + "anvilcraft:gray_reinforced_concrete_slab", + "anvilcraft:gray_reinforced_concrete_stair", + "anvilcraft:gray_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/green.json b/src/generated/resources/data/c/tags/block/dyed/green.json index 47ab958d5a..1c1995d55f 100644 --- a/src/generated/resources/data/c/tags/block/dyed/green.json +++ b/src/generated/resources/data/c/tags/block/dyed/green.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_green", - "anvilcraft:reinforced_concrete_green_slab", - "anvilcraft:reinforced_concrete_green_stair", - "anvilcraft:reinforced_concrete_green_wall" + "anvilcraft:green_reinforced_concrete", + "anvilcraft:green_reinforced_concrete_slab", + "anvilcraft:green_reinforced_concrete_stair", + "anvilcraft:green_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/light_blue.json b/src/generated/resources/data/c/tags/block/dyed/light_blue.json index bb74a46a97..dd3439dbda 100644 --- a/src/generated/resources/data/c/tags/block/dyed/light_blue.json +++ b/src/generated/resources/data/c/tags/block/dyed/light_blue.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_light_blue", - "anvilcraft:reinforced_concrete_light_blue_slab", - "anvilcraft:reinforced_concrete_light_blue_stair", - "anvilcraft:reinforced_concrete_light_blue_wall" + "anvilcraft:light_blue_reinforced_concrete", + "anvilcraft:light_blue_reinforced_concrete_slab", + "anvilcraft:light_blue_reinforced_concrete_stair", + "anvilcraft:light_blue_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/light_gray.json b/src/generated/resources/data/c/tags/block/dyed/light_gray.json index bee8f52f2e..45c0bc2b41 100644 --- a/src/generated/resources/data/c/tags/block/dyed/light_gray.json +++ b/src/generated/resources/data/c/tags/block/dyed/light_gray.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_light_gray", - "anvilcraft:reinforced_concrete_light_gray_slab", - "anvilcraft:reinforced_concrete_light_gray_stair", - "anvilcraft:reinforced_concrete_light_gray_wall" + "anvilcraft:light_gray_reinforced_concrete", + "anvilcraft:light_gray_reinforced_concrete_slab", + "anvilcraft:light_gray_reinforced_concrete_stair", + "anvilcraft:light_gray_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/lime.json b/src/generated/resources/data/c/tags/block/dyed/lime.json index abd9d0463e..9839d3aedf 100644 --- a/src/generated/resources/data/c/tags/block/dyed/lime.json +++ b/src/generated/resources/data/c/tags/block/dyed/lime.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_lime", - "anvilcraft:reinforced_concrete_lime_slab", - "anvilcraft:reinforced_concrete_lime_stair", - "anvilcraft:reinforced_concrete_lime_wall" + "anvilcraft:lime_reinforced_concrete", + "anvilcraft:lime_reinforced_concrete_slab", + "anvilcraft:lime_reinforced_concrete_stair", + "anvilcraft:lime_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/magenta.json b/src/generated/resources/data/c/tags/block/dyed/magenta.json index 4d97d34087..b8940867d6 100644 --- a/src/generated/resources/data/c/tags/block/dyed/magenta.json +++ b/src/generated/resources/data/c/tags/block/dyed/magenta.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_magenta", - "anvilcraft:reinforced_concrete_magenta_slab", - "anvilcraft:reinforced_concrete_magenta_stair", - "anvilcraft:reinforced_concrete_magenta_wall" + "anvilcraft:magenta_reinforced_concrete", + "anvilcraft:magenta_reinforced_concrete_slab", + "anvilcraft:magenta_reinforced_concrete_stair", + "anvilcraft:magenta_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/orange.json b/src/generated/resources/data/c/tags/block/dyed/orange.json index b96757edb6..4044155138 100644 --- a/src/generated/resources/data/c/tags/block/dyed/orange.json +++ b/src/generated/resources/data/c/tags/block/dyed/orange.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_orange", - "anvilcraft:reinforced_concrete_orange_slab", - "anvilcraft:reinforced_concrete_orange_stair", - "anvilcraft:reinforced_concrete_orange_wall" + "anvilcraft:orange_reinforced_concrete", + "anvilcraft:orange_reinforced_concrete_slab", + "anvilcraft:orange_reinforced_concrete_stair", + "anvilcraft:orange_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/pink.json b/src/generated/resources/data/c/tags/block/dyed/pink.json index e76f3b1b70..34bd3ccb18 100644 --- a/src/generated/resources/data/c/tags/block/dyed/pink.json +++ b/src/generated/resources/data/c/tags/block/dyed/pink.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_pink", - "anvilcraft:reinforced_concrete_pink_slab", - "anvilcraft:reinforced_concrete_pink_stair", - "anvilcraft:reinforced_concrete_pink_wall" + "anvilcraft:pink_reinforced_concrete", + "anvilcraft:pink_reinforced_concrete_slab", + "anvilcraft:pink_reinforced_concrete_stair", + "anvilcraft:pink_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/purple.json b/src/generated/resources/data/c/tags/block/dyed/purple.json index e388476471..7e071322a3 100644 --- a/src/generated/resources/data/c/tags/block/dyed/purple.json +++ b/src/generated/resources/data/c/tags/block/dyed/purple.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_purple", - "anvilcraft:reinforced_concrete_purple_slab", - "anvilcraft:reinforced_concrete_purple_stair", - "anvilcraft:reinforced_concrete_purple_wall" + "anvilcraft:purple_reinforced_concrete", + "anvilcraft:purple_reinforced_concrete_slab", + "anvilcraft:purple_reinforced_concrete_stair", + "anvilcraft:purple_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/red.json b/src/generated/resources/data/c/tags/block/dyed/red.json index 11ee713aff..60de5d45f5 100644 --- a/src/generated/resources/data/c/tags/block/dyed/red.json +++ b/src/generated/resources/data/c/tags/block/dyed/red.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_red", - "anvilcraft:reinforced_concrete_red_slab", - "anvilcraft:reinforced_concrete_red_stair", - "anvilcraft:reinforced_concrete_red_wall" + "anvilcraft:red_reinforced_concrete", + "anvilcraft:red_reinforced_concrete_slab", + "anvilcraft:red_reinforced_concrete_stair", + "anvilcraft:red_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/white.json b/src/generated/resources/data/c/tags/block/dyed/white.json index e57607762e..f7c6ed3c63 100644 --- a/src/generated/resources/data/c/tags/block/dyed/white.json +++ b/src/generated/resources/data/c/tags/block/dyed/white.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_white", - "anvilcraft:reinforced_concrete_white_slab", - "anvilcraft:reinforced_concrete_white_stair", - "anvilcraft:reinforced_concrete_white_wall" + "anvilcraft:white_reinforced_concrete", + "anvilcraft:white_reinforced_concrete_slab", + "anvilcraft:white_reinforced_concrete_stair", + "anvilcraft:white_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/dyed/yellow.json b/src/generated/resources/data/c/tags/block/dyed/yellow.json index 28d0d7be0f..42bd10eeaa 100644 --- a/src/generated/resources/data/c/tags/block/dyed/yellow.json +++ b/src/generated/resources/data/c/tags/block/dyed/yellow.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_yellow", - "anvilcraft:reinforced_concrete_yellow_slab", - "anvilcraft:reinforced_concrete_yellow_stair", - "anvilcraft:reinforced_concrete_yellow_wall" + "anvilcraft:yellow_reinforced_concrete", + "anvilcraft:yellow_reinforced_concrete_slab", + "anvilcraft:yellow_reinforced_concrete_stair", + "anvilcraft:yellow_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/amethyst_tool_materials.json b/src/generated/resources/data/c/tags/item/amethyst_tool_materials.json new file mode 100644 index 0000000000..742ef896d5 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/amethyst_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:amethyst_shard" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed.json b/src/generated/resources/data/c/tags/item/dyed.json index 58eb16642e..d26a673ac7 100644 --- a/src/generated/resources/data/c/tags/item/dyed.json +++ b/src/generated/resources/data/c/tags/item/dyed.json @@ -1,68 +1,68 @@ { "values": [ - "anvilcraft:reinforced_concrete_white", - "anvilcraft:reinforced_concrete_light_gray", - "anvilcraft:reinforced_concrete_gray", - "anvilcraft:reinforced_concrete_black", - "anvilcraft:reinforced_concrete_brown", - "anvilcraft:reinforced_concrete_red", - "anvilcraft:reinforced_concrete_orange", - "anvilcraft:reinforced_concrete_yellow", - "anvilcraft:reinforced_concrete_lime", - "anvilcraft:reinforced_concrete_green", - "anvilcraft:reinforced_concrete_cyan", - "anvilcraft:reinforced_concrete_light_blue", - "anvilcraft:reinforced_concrete_blue", - "anvilcraft:reinforced_concrete_purple", - "anvilcraft:reinforced_concrete_magenta", - "anvilcraft:reinforced_concrete_pink", - "anvilcraft:reinforced_concrete_white_slab", - "anvilcraft:reinforced_concrete_light_gray_slab", - "anvilcraft:reinforced_concrete_gray_slab", - "anvilcraft:reinforced_concrete_black_slab", - "anvilcraft:reinforced_concrete_brown_slab", - "anvilcraft:reinforced_concrete_red_slab", - "anvilcraft:reinforced_concrete_orange_slab", - "anvilcraft:reinforced_concrete_yellow_slab", - "anvilcraft:reinforced_concrete_lime_slab", - "anvilcraft:reinforced_concrete_green_slab", - "anvilcraft:reinforced_concrete_cyan_slab", - "anvilcraft:reinforced_concrete_light_blue_slab", - "anvilcraft:reinforced_concrete_blue_slab", - "anvilcraft:reinforced_concrete_purple_slab", - "anvilcraft:reinforced_concrete_magenta_slab", - "anvilcraft:reinforced_concrete_pink_slab", - "anvilcraft:reinforced_concrete_white_stair", - "anvilcraft:reinforced_concrete_light_gray_stair", - "anvilcraft:reinforced_concrete_gray_stair", - "anvilcraft:reinforced_concrete_black_stair", - "anvilcraft:reinforced_concrete_brown_stair", - "anvilcraft:reinforced_concrete_red_stair", - "anvilcraft:reinforced_concrete_orange_stair", - "anvilcraft:reinforced_concrete_yellow_stair", - "anvilcraft:reinforced_concrete_lime_stair", - "anvilcraft:reinforced_concrete_green_stair", - "anvilcraft:reinforced_concrete_cyan_stair", - "anvilcraft:reinforced_concrete_light_blue_stair", - "anvilcraft:reinforced_concrete_blue_stair", - "anvilcraft:reinforced_concrete_purple_stair", - "anvilcraft:reinforced_concrete_magenta_stair", - "anvilcraft:reinforced_concrete_pink_stair", - "anvilcraft:reinforced_concrete_white_wall", - "anvilcraft:reinforced_concrete_light_gray_wall", - "anvilcraft:reinforced_concrete_gray_wall", - "anvilcraft:reinforced_concrete_black_wall", - "anvilcraft:reinforced_concrete_brown_wall", - "anvilcraft:reinforced_concrete_red_wall", - "anvilcraft:reinforced_concrete_orange_wall", - "anvilcraft:reinforced_concrete_yellow_wall", - "anvilcraft:reinforced_concrete_lime_wall", - "anvilcraft:reinforced_concrete_green_wall", - "anvilcraft:reinforced_concrete_cyan_wall", - "anvilcraft:reinforced_concrete_light_blue_wall", - "anvilcraft:reinforced_concrete_blue_wall", - "anvilcraft:reinforced_concrete_purple_wall", - "anvilcraft:reinforced_concrete_magenta_wall", - "anvilcraft:reinforced_concrete_pink_wall" + "anvilcraft:white_reinforced_concrete", + "anvilcraft:light_gray_reinforced_concrete", + "anvilcraft:gray_reinforced_concrete", + "anvilcraft:black_reinforced_concrete", + "anvilcraft:brown_reinforced_concrete", + "anvilcraft:red_reinforced_concrete", + "anvilcraft:orange_reinforced_concrete", + "anvilcraft:yellow_reinforced_concrete", + "anvilcraft:lime_reinforced_concrete", + "anvilcraft:green_reinforced_concrete", + "anvilcraft:cyan_reinforced_concrete", + "anvilcraft:light_blue_reinforced_concrete", + "anvilcraft:blue_reinforced_concrete", + "anvilcraft:purple_reinforced_concrete", + "anvilcraft:magenta_reinforced_concrete", + "anvilcraft:pink_reinforced_concrete", + "anvilcraft:white_reinforced_concrete_slab", + "anvilcraft:light_gray_reinforced_concrete_slab", + "anvilcraft:gray_reinforced_concrete_slab", + "anvilcraft:black_reinforced_concrete_slab", + "anvilcraft:brown_reinforced_concrete_slab", + "anvilcraft:red_reinforced_concrete_slab", + "anvilcraft:orange_reinforced_concrete_slab", + "anvilcraft:yellow_reinforced_concrete_slab", + "anvilcraft:lime_reinforced_concrete_slab", + "anvilcraft:green_reinforced_concrete_slab", + "anvilcraft:cyan_reinforced_concrete_slab", + "anvilcraft:light_blue_reinforced_concrete_slab", + "anvilcraft:blue_reinforced_concrete_slab", + "anvilcraft:purple_reinforced_concrete_slab", + "anvilcraft:magenta_reinforced_concrete_slab", + "anvilcraft:pink_reinforced_concrete_slab", + "anvilcraft:white_reinforced_concrete_stair", + "anvilcraft:light_gray_reinforced_concrete_stair", + "anvilcraft:gray_reinforced_concrete_stair", + "anvilcraft:black_reinforced_concrete_stair", + "anvilcraft:brown_reinforced_concrete_stair", + "anvilcraft:red_reinforced_concrete_stair", + "anvilcraft:orange_reinforced_concrete_stair", + "anvilcraft:yellow_reinforced_concrete_stair", + "anvilcraft:lime_reinforced_concrete_stair", + "anvilcraft:green_reinforced_concrete_stair", + "anvilcraft:cyan_reinforced_concrete_stair", + "anvilcraft:light_blue_reinforced_concrete_stair", + "anvilcraft:blue_reinforced_concrete_stair", + "anvilcraft:purple_reinforced_concrete_stair", + "anvilcraft:magenta_reinforced_concrete_stair", + "anvilcraft:pink_reinforced_concrete_stair", + "anvilcraft:white_reinforced_concrete_wall", + "anvilcraft:light_gray_reinforced_concrete_wall", + "anvilcraft:gray_reinforced_concrete_wall", + "anvilcraft:black_reinforced_concrete_wall", + "anvilcraft:brown_reinforced_concrete_wall", + "anvilcraft:red_reinforced_concrete_wall", + "anvilcraft:orange_reinforced_concrete_wall", + "anvilcraft:yellow_reinforced_concrete_wall", + "anvilcraft:lime_reinforced_concrete_wall", + "anvilcraft:green_reinforced_concrete_wall", + "anvilcraft:cyan_reinforced_concrete_wall", + "anvilcraft:light_blue_reinforced_concrete_wall", + "anvilcraft:blue_reinforced_concrete_wall", + "anvilcraft:purple_reinforced_concrete_wall", + "anvilcraft:magenta_reinforced_concrete_wall", + "anvilcraft:pink_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/black.json b/src/generated/resources/data/c/tags/item/dyed/black.json index 0e9ea39a5a..1c27d38387 100644 --- a/src/generated/resources/data/c/tags/item/dyed/black.json +++ b/src/generated/resources/data/c/tags/item/dyed/black.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_black", - "anvilcraft:reinforced_concrete_black_slab", - "anvilcraft:reinforced_concrete_black_stair", - "anvilcraft:reinforced_concrete_black_wall" + "anvilcraft:black_reinforced_concrete", + "anvilcraft:black_reinforced_concrete_slab", + "anvilcraft:black_reinforced_concrete_stair", + "anvilcraft:black_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/blue.json b/src/generated/resources/data/c/tags/item/dyed/blue.json index 562460452a..2f7243434d 100644 --- a/src/generated/resources/data/c/tags/item/dyed/blue.json +++ b/src/generated/resources/data/c/tags/item/dyed/blue.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_blue", - "anvilcraft:reinforced_concrete_blue_slab", - "anvilcraft:reinforced_concrete_blue_stair", - "anvilcraft:reinforced_concrete_blue_wall" + "anvilcraft:blue_reinforced_concrete", + "anvilcraft:blue_reinforced_concrete_slab", + "anvilcraft:blue_reinforced_concrete_stair", + "anvilcraft:blue_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/brown.json b/src/generated/resources/data/c/tags/item/dyed/brown.json index cbddcd5cd2..39557991fd 100644 --- a/src/generated/resources/data/c/tags/item/dyed/brown.json +++ b/src/generated/resources/data/c/tags/item/dyed/brown.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_brown", - "anvilcraft:reinforced_concrete_brown_slab", - "anvilcraft:reinforced_concrete_brown_stair", - "anvilcraft:reinforced_concrete_brown_wall" + "anvilcraft:brown_reinforced_concrete", + "anvilcraft:brown_reinforced_concrete_slab", + "anvilcraft:brown_reinforced_concrete_stair", + "anvilcraft:brown_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/cyan.json b/src/generated/resources/data/c/tags/item/dyed/cyan.json index 17db2370cd..f5416aef64 100644 --- a/src/generated/resources/data/c/tags/item/dyed/cyan.json +++ b/src/generated/resources/data/c/tags/item/dyed/cyan.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_cyan", - "anvilcraft:reinforced_concrete_cyan_slab", - "anvilcraft:reinforced_concrete_cyan_stair", - "anvilcraft:reinforced_concrete_cyan_wall" + "anvilcraft:cyan_reinforced_concrete", + "anvilcraft:cyan_reinforced_concrete_slab", + "anvilcraft:cyan_reinforced_concrete_stair", + "anvilcraft:cyan_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/gray.json b/src/generated/resources/data/c/tags/item/dyed/gray.json index 0e34f21d36..97636feb3c 100644 --- a/src/generated/resources/data/c/tags/item/dyed/gray.json +++ b/src/generated/resources/data/c/tags/item/dyed/gray.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_gray", - "anvilcraft:reinforced_concrete_gray_slab", - "anvilcraft:reinforced_concrete_gray_stair", - "anvilcraft:reinforced_concrete_gray_wall" + "anvilcraft:gray_reinforced_concrete", + "anvilcraft:gray_reinforced_concrete_slab", + "anvilcraft:gray_reinforced_concrete_stair", + "anvilcraft:gray_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/green.json b/src/generated/resources/data/c/tags/item/dyed/green.json index 47ab958d5a..1c1995d55f 100644 --- a/src/generated/resources/data/c/tags/item/dyed/green.json +++ b/src/generated/resources/data/c/tags/item/dyed/green.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_green", - "anvilcraft:reinforced_concrete_green_slab", - "anvilcraft:reinforced_concrete_green_stair", - "anvilcraft:reinforced_concrete_green_wall" + "anvilcraft:green_reinforced_concrete", + "anvilcraft:green_reinforced_concrete_slab", + "anvilcraft:green_reinforced_concrete_stair", + "anvilcraft:green_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/light_blue.json b/src/generated/resources/data/c/tags/item/dyed/light_blue.json index bb74a46a97..dd3439dbda 100644 --- a/src/generated/resources/data/c/tags/item/dyed/light_blue.json +++ b/src/generated/resources/data/c/tags/item/dyed/light_blue.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_light_blue", - "anvilcraft:reinforced_concrete_light_blue_slab", - "anvilcraft:reinforced_concrete_light_blue_stair", - "anvilcraft:reinforced_concrete_light_blue_wall" + "anvilcraft:light_blue_reinforced_concrete", + "anvilcraft:light_blue_reinforced_concrete_slab", + "anvilcraft:light_blue_reinforced_concrete_stair", + "anvilcraft:light_blue_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/light_gray.json b/src/generated/resources/data/c/tags/item/dyed/light_gray.json index bee8f52f2e..45c0bc2b41 100644 --- a/src/generated/resources/data/c/tags/item/dyed/light_gray.json +++ b/src/generated/resources/data/c/tags/item/dyed/light_gray.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_light_gray", - "anvilcraft:reinforced_concrete_light_gray_slab", - "anvilcraft:reinforced_concrete_light_gray_stair", - "anvilcraft:reinforced_concrete_light_gray_wall" + "anvilcraft:light_gray_reinforced_concrete", + "anvilcraft:light_gray_reinforced_concrete_slab", + "anvilcraft:light_gray_reinforced_concrete_stair", + "anvilcraft:light_gray_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/lime.json b/src/generated/resources/data/c/tags/item/dyed/lime.json index abd9d0463e..9839d3aedf 100644 --- a/src/generated/resources/data/c/tags/item/dyed/lime.json +++ b/src/generated/resources/data/c/tags/item/dyed/lime.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_lime", - "anvilcraft:reinforced_concrete_lime_slab", - "anvilcraft:reinforced_concrete_lime_stair", - "anvilcraft:reinforced_concrete_lime_wall" + "anvilcraft:lime_reinforced_concrete", + "anvilcraft:lime_reinforced_concrete_slab", + "anvilcraft:lime_reinforced_concrete_stair", + "anvilcraft:lime_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/magenta.json b/src/generated/resources/data/c/tags/item/dyed/magenta.json index 4d97d34087..b8940867d6 100644 --- a/src/generated/resources/data/c/tags/item/dyed/magenta.json +++ b/src/generated/resources/data/c/tags/item/dyed/magenta.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_magenta", - "anvilcraft:reinforced_concrete_magenta_slab", - "anvilcraft:reinforced_concrete_magenta_stair", - "anvilcraft:reinforced_concrete_magenta_wall" + "anvilcraft:magenta_reinforced_concrete", + "anvilcraft:magenta_reinforced_concrete_slab", + "anvilcraft:magenta_reinforced_concrete_stair", + "anvilcraft:magenta_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/orange.json b/src/generated/resources/data/c/tags/item/dyed/orange.json index b96757edb6..4044155138 100644 --- a/src/generated/resources/data/c/tags/item/dyed/orange.json +++ b/src/generated/resources/data/c/tags/item/dyed/orange.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_orange", - "anvilcraft:reinforced_concrete_orange_slab", - "anvilcraft:reinforced_concrete_orange_stair", - "anvilcraft:reinforced_concrete_orange_wall" + "anvilcraft:orange_reinforced_concrete", + "anvilcraft:orange_reinforced_concrete_slab", + "anvilcraft:orange_reinforced_concrete_stair", + "anvilcraft:orange_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/pink.json b/src/generated/resources/data/c/tags/item/dyed/pink.json index e76f3b1b70..34bd3ccb18 100644 --- a/src/generated/resources/data/c/tags/item/dyed/pink.json +++ b/src/generated/resources/data/c/tags/item/dyed/pink.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_pink", - "anvilcraft:reinforced_concrete_pink_slab", - "anvilcraft:reinforced_concrete_pink_stair", - "anvilcraft:reinforced_concrete_pink_wall" + "anvilcraft:pink_reinforced_concrete", + "anvilcraft:pink_reinforced_concrete_slab", + "anvilcraft:pink_reinforced_concrete_stair", + "anvilcraft:pink_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/purple.json b/src/generated/resources/data/c/tags/item/dyed/purple.json index e388476471..7e071322a3 100644 --- a/src/generated/resources/data/c/tags/item/dyed/purple.json +++ b/src/generated/resources/data/c/tags/item/dyed/purple.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_purple", - "anvilcraft:reinforced_concrete_purple_slab", - "anvilcraft:reinforced_concrete_purple_stair", - "anvilcraft:reinforced_concrete_purple_wall" + "anvilcraft:purple_reinforced_concrete", + "anvilcraft:purple_reinforced_concrete_slab", + "anvilcraft:purple_reinforced_concrete_stair", + "anvilcraft:purple_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/red.json b/src/generated/resources/data/c/tags/item/dyed/red.json index 11ee713aff..60de5d45f5 100644 --- a/src/generated/resources/data/c/tags/item/dyed/red.json +++ b/src/generated/resources/data/c/tags/item/dyed/red.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_red", - "anvilcraft:reinforced_concrete_red_slab", - "anvilcraft:reinforced_concrete_red_stair", - "anvilcraft:reinforced_concrete_red_wall" + "anvilcraft:red_reinforced_concrete", + "anvilcraft:red_reinforced_concrete_slab", + "anvilcraft:red_reinforced_concrete_stair", + "anvilcraft:red_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/white.json b/src/generated/resources/data/c/tags/item/dyed/white.json index e57607762e..f7c6ed3c63 100644 --- a/src/generated/resources/data/c/tags/item/dyed/white.json +++ b/src/generated/resources/data/c/tags/item/dyed/white.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_white", - "anvilcraft:reinforced_concrete_white_slab", - "anvilcraft:reinforced_concrete_white_stair", - "anvilcraft:reinforced_concrete_white_wall" + "anvilcraft:white_reinforced_concrete", + "anvilcraft:white_reinforced_concrete_slab", + "anvilcraft:white_reinforced_concrete_stair", + "anvilcraft:white_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/yellow.json b/src/generated/resources/data/c/tags/item/dyed/yellow.json index 28d0d7be0f..42bd10eeaa 100644 --- a/src/generated/resources/data/c/tags/item/dyed/yellow.json +++ b/src/generated/resources/data/c/tags/item/dyed/yellow.json @@ -1,8 +1,8 @@ { "values": [ - "anvilcraft:reinforced_concrete_yellow", - "anvilcraft:reinforced_concrete_yellow_slab", - "anvilcraft:reinforced_concrete_yellow_stair", - "anvilcraft:reinforced_concrete_yellow_wall" + "anvilcraft:yellow_reinforced_concrete", + "anvilcraft:yellow_reinforced_concrete_slab", + "anvilcraft:yellow_reinforced_concrete_stair", + "anvilcraft:yellow_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/ember_metal_tool_materials.json b/src/generated/resources/data/c/tags/item/ember_metal_tool_materials.json new file mode 100644 index 0000000000..fe33d3fb90 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/ember_metal_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "anvilcraft:ember_metal_ingot" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/foods.json b/src/generated/resources/data/c/tags/item/foods.json index 6a3faecfd7..8b831f72ac 100644 --- a/src/generated/resources/data/c/tags/item/foods.json +++ b/src/generated/resources/data/c/tags/item/foods.json @@ -8,9 +8,6 @@ "anvilcraft:berry_cake_block", "anvilcraft:chocolate_cake_block", "anvilcraft:large_cake", - "anvilcraft:cream", - "anvilcraft:flour", - "anvilcraft:dough", "anvilcraft:chocolate", "anvilcraft:chocolate_black", "anvilcraft:chocolate_white", diff --git a/src/generated/resources/data/c/tags/item/frost_metal_tool_materials.json b/src/generated/resources/data/c/tags/item/frost_metal_tool_materials.json new file mode 100644 index 0000000000..f07c8b1905 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/frost_metal_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "anvilcraft:frost_metal_ingot" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/ingots/magnet.json b/src/generated/resources/data/c/tags/item/ingots/magnet.json index 01ab546a5a..dfbe531401 100644 --- a/src/generated/resources/data/c/tags/item/ingots/magnet.json +++ b/src/generated/resources/data/c/tags/item/ingots/magnet.json @@ -1,5 +1,6 @@ { "values": [ + "anvilcraft:magnet", "anvilcraft:magnet_ingot" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/royal_steel_tool_materials.json b/src/generated/resources/data/c/tags/item/royal_steel_tool_materials.json new file mode 100644 index 0000000000..7aa2846ad0 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/royal_steel_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "anvilcraft:royal_steel_ingot" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/transcendium_tool_materials.json b/src/generated/resources/data/c/tags/item/transcendium_tool_materials.json new file mode 100644 index 0000000000..2f64f27ebd --- /dev/null +++ b/src/generated/resources/data/c/tags/item/transcendium_tool_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "anvilcraft:transcendium_ingot" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/advancement/recipes/misc/netherrack.json b/src/generated/resources/data/minecraft/advancement/recipes/misc/netherrack.json deleted file mode 100644 index a7c8997670..0000000000 --- a/src/generated/resources/data/minecraft/advancement/recipes/misc/netherrack.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:netherrack" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "hasitem": { - "conditions": { - "items": [ - { - "items": "anvilcraft:rotten_flesh_block" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "hasitem" - ] - ], - "rewards": { - "recipes": [ - "minecraft:netherrack" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/advancement/recipes/null/uranium_block_explosion.json b/src/generated/resources/data/minecraft/advancement/recipes/null/uranium_block_explosion.json deleted file mode 100644 index b060c3c4c0..0000000000 --- a/src/generated/resources/data/minecraft/advancement/recipes/null/uranium_block_explosion.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:uranium_block_explosion" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "minecraft:uranium_block_explosion" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/advancement/recipes/redstone/empty_propel_piston.json b/src/generated/resources/data/minecraft/advancement/recipes/redstone/empty_propel_piston.json deleted file mode 100644 index a06d8a07f4..0000000000 --- a/src/generated/resources/data/minecraft/advancement/recipes/redstone/empty_propel_piston.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": "anvilcraft:ruby" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:empty_propel_piston" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_item" - ] - ], - "rewards": { - "recipes": [ - "minecraft:empty_propel_piston" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/recipe/empty_propel_piston.json b/src/generated/resources/data/minecraft/recipe/empty_propel_piston.json deleted file mode 100644 index 5830c299ec..0000000000 --- a/src/generated/resources/data/minecraft/recipe/empty_propel_piston.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "A": { - "item": "anvilcraft:ionocraft" - }, - "B": { - "item": "anvilcraft:capacitor_empty" - }, - "C": { - "item": "minecraft:iron_ingot" - }, - "D": { - "item": "minecraft:piston" - }, - "E": { - "item": "anvilcraft:ruby" - } - }, - "pattern": [ - "CDC", - "ABA", - "AEA" - ], - "result": { - "count": 1, - "id": "anvilcraft:propel_piston" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/recipe/netherrack.json b/src/generated/resources/data/minecraft/recipe/netherrack.json deleted file mode 100644 index c4efa18a93..0000000000 --- a/src/generated/resources/data/minecraft/recipe/netherrack.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "blocks", - "cookingtime": 200, - "experience": 0.0, - "ingredient": { - "item": "anvilcraft:rotten_flesh_block" - }, - "result": { - "count": 1, - "id": "minecraft:netherrack" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/recipe/null/uranium_block_explosion.json b/src/generated/resources/data/minecraft/recipe/null/uranium_block_explosion.json deleted file mode 100644 index 2b0ca294d4..0000000000 --- a/src/generated/resources/data/minecraft/recipe/null/uranium_block_explosion.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "anvillib_recipe:in_world_recipe", - "compatible": true, - "conflicting": [ - { - "type": "anvillib_recipe:has_item_ingredient", - "item": { - "items": "anvilcraft:uranium_block" - }, - "offset": [ - 0.0, - -0.375, - 0.0 - ], - "range": [ - 0.75, - 0.75, - 0.75 - ] - } - ], - "icon": { - "count": 1, - "id": "minecraft:anvil" - }, - "non_conflicting": [ - { - "type": "anvilcraft:has_cauldron", - "offset": [ - 0.0, - -1.0, - 0.0 - ] - }, - { - "type": "anvillib_recipe:has_block", - "offset": [ - 0.0, - -2.0, - 0.0 - ], - "predicate": { - "blocks": "anvilcraft:neutron_irradiator" - } - } - ], - "outcomes": [ - { - "type": "anvillib_recipe:choose_one", - "choices": [ - { - "outcome": { - "type": "anvillib_recipe:produce_explosion", - "fire": false, - "interact": "block", - "offset": [ - 0.0, - -0.75, - 0.0 - ], - "power": 3.0 - }, - "weight": 1.0 - } - ] - } - ], - "priority": 5, - "trigger": "anvilcraft:on_anvil_fall_on" -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/cauldrons.json b/src/generated/resources/data/minecraft/tags/block/cauldrons.json index a0cdf67658..b6dab80660 100644 --- a/src/generated/resources/data/minecraft/tags/block/cauldrons.json +++ b/src/generated/resources/data/minecraft/tags/block/cauldrons.json @@ -7,7 +7,6 @@ "anvilcraft:obsidian_cauldron", "anvilcraft:exp_fluid_cauldron", "anvilcraft:oil_cauldron", - "anvilcraft:fire_cauldron", "anvilcraft:white_cement_cauldron", "anvilcraft:light_gray_cement_cauldron", "anvilcraft:gray_cement_cauldron", diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/axe.json b/src/generated/resources/data/minecraft/tags/block/mineable/axe.json index 3f86d233cc..0a44f20f61 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/axe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/axe.json @@ -1,5 +1,7 @@ { "values": [ + "anvilcraft:crate", + "anvilcraft:large_crate", "anvilcraft:crab_trap" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 0a2552c115..42f4fcec4d 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -22,11 +22,13 @@ "anvilcraft:transcendence_anvil", "anvilcraft:creative_generator", "anvilcraft:heater", + "anvilcraft:burning_heater", "anvilcraft:transmission_pole", "anvilcraft:remote_transmission_pole", "anvilcraft:tesla_tower", "anvilcraft:induction_light", "anvilcraft:charge_collector", + "anvilcraft:fe_collector", "anvilcraft:load_monitor", "anvilcraft:power_converter_small", "anvilcraft:power_converter_middle", @@ -48,6 +50,8 @@ "anvilcraft:item_detector", "anvilcraft:impact_pile", "anvilcraft:overseer", + "anvilcraft:shulker_container", + "anvilcraft:hyperdimension_storage_station", "anvilcraft:jewelcrafting_table", "anvilcraft:transparent_crafting_table", "anvilcraft:chute", @@ -67,6 +71,7 @@ "anvilcraft:celestial_forging_anvil_logistics_interface", "anvilcraft:celestial_forging_anvil_fluid_interface", "anvilcraft:celestial_forging_anvil_laser_interface", + "anvilcraft:celestial_forging_anvil_portal", "anvilcraft:void_energy_collector", "anvilcraft:magnetoelectric_core", "anvilcraft:propel_piston", @@ -128,70 +133,70 @@ "anvilcraft:chocolate_stairs", "anvilcraft:black_chocolate_stairs", "anvilcraft:white_chocolate_stairs", - "anvilcraft:reinforced_concrete_white", - "anvilcraft:reinforced_concrete_light_gray", - "anvilcraft:reinforced_concrete_gray", - "anvilcraft:reinforced_concrete_black", - "anvilcraft:reinforced_concrete_brown", - "anvilcraft:reinforced_concrete_red", - "anvilcraft:reinforced_concrete_orange", - "anvilcraft:reinforced_concrete_yellow", - "anvilcraft:reinforced_concrete_lime", - "anvilcraft:reinforced_concrete_green", - "anvilcraft:reinforced_concrete_cyan", - "anvilcraft:reinforced_concrete_light_blue", - "anvilcraft:reinforced_concrete_blue", - "anvilcraft:reinforced_concrete_purple", - "anvilcraft:reinforced_concrete_magenta", - "anvilcraft:reinforced_concrete_pink", - "anvilcraft:reinforced_concrete_white_slab", - "anvilcraft:reinforced_concrete_light_gray_slab", - "anvilcraft:reinforced_concrete_gray_slab", - "anvilcraft:reinforced_concrete_black_slab", - "anvilcraft:reinforced_concrete_brown_slab", - "anvilcraft:reinforced_concrete_red_slab", - "anvilcraft:reinforced_concrete_orange_slab", - "anvilcraft:reinforced_concrete_yellow_slab", - "anvilcraft:reinforced_concrete_lime_slab", - "anvilcraft:reinforced_concrete_green_slab", - "anvilcraft:reinforced_concrete_cyan_slab", - "anvilcraft:reinforced_concrete_light_blue_slab", - "anvilcraft:reinforced_concrete_blue_slab", - "anvilcraft:reinforced_concrete_purple_slab", - "anvilcraft:reinforced_concrete_magenta_slab", - "anvilcraft:reinforced_concrete_pink_slab", - "anvilcraft:reinforced_concrete_white_stair", - "anvilcraft:reinforced_concrete_light_gray_stair", - "anvilcraft:reinforced_concrete_gray_stair", - "anvilcraft:reinforced_concrete_black_stair", - "anvilcraft:reinforced_concrete_brown_stair", - "anvilcraft:reinforced_concrete_red_stair", - "anvilcraft:reinforced_concrete_orange_stair", - "anvilcraft:reinforced_concrete_yellow_stair", - "anvilcraft:reinforced_concrete_lime_stair", - "anvilcraft:reinforced_concrete_green_stair", - "anvilcraft:reinforced_concrete_cyan_stair", - "anvilcraft:reinforced_concrete_light_blue_stair", - "anvilcraft:reinforced_concrete_blue_stair", - "anvilcraft:reinforced_concrete_purple_stair", - "anvilcraft:reinforced_concrete_magenta_stair", - "anvilcraft:reinforced_concrete_pink_stair", - "anvilcraft:reinforced_concrete_white_wall", - "anvilcraft:reinforced_concrete_light_gray_wall", - "anvilcraft:reinforced_concrete_gray_wall", - "anvilcraft:reinforced_concrete_black_wall", - "anvilcraft:reinforced_concrete_brown_wall", - "anvilcraft:reinforced_concrete_red_wall", - "anvilcraft:reinforced_concrete_orange_wall", - "anvilcraft:reinforced_concrete_yellow_wall", - "anvilcraft:reinforced_concrete_lime_wall", - "anvilcraft:reinforced_concrete_green_wall", - "anvilcraft:reinforced_concrete_cyan_wall", - "anvilcraft:reinforced_concrete_light_blue_wall", - "anvilcraft:reinforced_concrete_blue_wall", - "anvilcraft:reinforced_concrete_purple_wall", - "anvilcraft:reinforced_concrete_magenta_wall", - "anvilcraft:reinforced_concrete_pink_wall", + "anvilcraft:white_reinforced_concrete", + "anvilcraft:light_gray_reinforced_concrete", + "anvilcraft:gray_reinforced_concrete", + "anvilcraft:black_reinforced_concrete", + "anvilcraft:brown_reinforced_concrete", + "anvilcraft:red_reinforced_concrete", + "anvilcraft:orange_reinforced_concrete", + "anvilcraft:yellow_reinforced_concrete", + "anvilcraft:lime_reinforced_concrete", + "anvilcraft:green_reinforced_concrete", + "anvilcraft:cyan_reinforced_concrete", + "anvilcraft:light_blue_reinforced_concrete", + "anvilcraft:blue_reinforced_concrete", + "anvilcraft:purple_reinforced_concrete", + "anvilcraft:magenta_reinforced_concrete", + "anvilcraft:pink_reinforced_concrete", + "anvilcraft:white_reinforced_concrete_slab", + "anvilcraft:light_gray_reinforced_concrete_slab", + "anvilcraft:gray_reinforced_concrete_slab", + "anvilcraft:black_reinforced_concrete_slab", + "anvilcraft:brown_reinforced_concrete_slab", + "anvilcraft:red_reinforced_concrete_slab", + "anvilcraft:orange_reinforced_concrete_slab", + "anvilcraft:yellow_reinforced_concrete_slab", + "anvilcraft:lime_reinforced_concrete_slab", + "anvilcraft:green_reinforced_concrete_slab", + "anvilcraft:cyan_reinforced_concrete_slab", + "anvilcraft:light_blue_reinforced_concrete_slab", + "anvilcraft:blue_reinforced_concrete_slab", + "anvilcraft:purple_reinforced_concrete_slab", + "anvilcraft:magenta_reinforced_concrete_slab", + "anvilcraft:pink_reinforced_concrete_slab", + "anvilcraft:white_reinforced_concrete_stair", + "anvilcraft:light_gray_reinforced_concrete_stair", + "anvilcraft:gray_reinforced_concrete_stair", + "anvilcraft:black_reinforced_concrete_stair", + "anvilcraft:brown_reinforced_concrete_stair", + "anvilcraft:red_reinforced_concrete_stair", + "anvilcraft:orange_reinforced_concrete_stair", + "anvilcraft:yellow_reinforced_concrete_stair", + "anvilcraft:lime_reinforced_concrete_stair", + "anvilcraft:green_reinforced_concrete_stair", + "anvilcraft:cyan_reinforced_concrete_stair", + "anvilcraft:light_blue_reinforced_concrete_stair", + "anvilcraft:blue_reinforced_concrete_stair", + "anvilcraft:purple_reinforced_concrete_stair", + "anvilcraft:magenta_reinforced_concrete_stair", + "anvilcraft:pink_reinforced_concrete_stair", + "anvilcraft:white_reinforced_concrete_wall", + "anvilcraft:light_gray_reinforced_concrete_wall", + "anvilcraft:gray_reinforced_concrete_wall", + "anvilcraft:black_reinforced_concrete_wall", + "anvilcraft:brown_reinforced_concrete_wall", + "anvilcraft:red_reinforced_concrete_wall", + "anvilcraft:orange_reinforced_concrete_wall", + "anvilcraft:yellow_reinforced_concrete_wall", + "anvilcraft:lime_reinforced_concrete_wall", + "anvilcraft:green_reinforced_concrete_wall", + "anvilcraft:cyan_reinforced_concrete_wall", + "anvilcraft:light_blue_reinforced_concrete_wall", + "anvilcraft:blue_reinforced_concrete_wall", + "anvilcraft:purple_reinforced_concrete_wall", + "anvilcraft:magenta_reinforced_concrete_wall", + "anvilcraft:pink_reinforced_concrete_wall", "anvilcraft:heated_netherite_block", "anvilcraft:heated_tungsten_block", "anvilcraft:redhot_netherite_block", @@ -227,7 +232,6 @@ "anvilcraft:obsidian_cauldron", "anvilcraft:exp_fluid_cauldron", "anvilcraft:oil_cauldron", - "anvilcraft:fire_cauldron", "anvilcraft:white_cement_cauldron", "anvilcraft:light_gray_cement_cauldron", "anvilcraft:gray_cement_cauldron", diff --git a/src/generated/resources/data/minecraft/tags/block/slabs.json b/src/generated/resources/data/minecraft/tags/block/slabs.json index e9afb8befb..f2cd0aa189 100644 --- a/src/generated/resources/data/minecraft/tags/block/slabs.json +++ b/src/generated/resources/data/minecraft/tags/block/slabs.json @@ -8,22 +8,22 @@ "anvilcraft:chocolate_slab", "anvilcraft:black_chocolate_slab", "anvilcraft:white_chocolate_slab", - "anvilcraft:reinforced_concrete_white_slab", - "anvilcraft:reinforced_concrete_light_gray_slab", - "anvilcraft:reinforced_concrete_gray_slab", - "anvilcraft:reinforced_concrete_black_slab", - "anvilcraft:reinforced_concrete_brown_slab", - "anvilcraft:reinforced_concrete_red_slab", - "anvilcraft:reinforced_concrete_orange_slab", - "anvilcraft:reinforced_concrete_yellow_slab", - "anvilcraft:reinforced_concrete_lime_slab", - "anvilcraft:reinforced_concrete_green_slab", - "anvilcraft:reinforced_concrete_cyan_slab", - "anvilcraft:reinforced_concrete_light_blue_slab", - "anvilcraft:reinforced_concrete_blue_slab", - "anvilcraft:reinforced_concrete_purple_slab", - "anvilcraft:reinforced_concrete_magenta_slab", - "anvilcraft:reinforced_concrete_pink_slab", + "anvilcraft:white_reinforced_concrete_slab", + "anvilcraft:light_gray_reinforced_concrete_slab", + "anvilcraft:gray_reinforced_concrete_slab", + "anvilcraft:black_reinforced_concrete_slab", + "anvilcraft:brown_reinforced_concrete_slab", + "anvilcraft:red_reinforced_concrete_slab", + "anvilcraft:orange_reinforced_concrete_slab", + "anvilcraft:yellow_reinforced_concrete_slab", + "anvilcraft:lime_reinforced_concrete_slab", + "anvilcraft:green_reinforced_concrete_slab", + "anvilcraft:cyan_reinforced_concrete_slab", + "anvilcraft:light_blue_reinforced_concrete_slab", + "anvilcraft:blue_reinforced_concrete_slab", + "anvilcraft:purple_reinforced_concrete_slab", + "anvilcraft:magenta_reinforced_concrete_slab", + "anvilcraft:pink_reinforced_concrete_slab", "anvilcraft:cut_flint_slab" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/stairs.json b/src/generated/resources/data/minecraft/tags/block/stairs.json index 4f1135ef96..8035856ddb 100644 --- a/src/generated/resources/data/minecraft/tags/block/stairs.json +++ b/src/generated/resources/data/minecraft/tags/block/stairs.json @@ -8,22 +8,22 @@ "anvilcraft:chocolate_stairs", "anvilcraft:black_chocolate_stairs", "anvilcraft:white_chocolate_stairs", - "anvilcraft:reinforced_concrete_white_stair", - "anvilcraft:reinforced_concrete_light_gray_stair", - "anvilcraft:reinforced_concrete_gray_stair", - "anvilcraft:reinforced_concrete_black_stair", - "anvilcraft:reinforced_concrete_brown_stair", - "anvilcraft:reinforced_concrete_red_stair", - "anvilcraft:reinforced_concrete_orange_stair", - "anvilcraft:reinforced_concrete_yellow_stair", - "anvilcraft:reinforced_concrete_lime_stair", - "anvilcraft:reinforced_concrete_green_stair", - "anvilcraft:reinforced_concrete_cyan_stair", - "anvilcraft:reinforced_concrete_light_blue_stair", - "anvilcraft:reinforced_concrete_blue_stair", - "anvilcraft:reinforced_concrete_purple_stair", - "anvilcraft:reinforced_concrete_magenta_stair", - "anvilcraft:reinforced_concrete_pink_stair", + "anvilcraft:white_reinforced_concrete_stair", + "anvilcraft:light_gray_reinforced_concrete_stair", + "anvilcraft:gray_reinforced_concrete_stair", + "anvilcraft:black_reinforced_concrete_stair", + "anvilcraft:brown_reinforced_concrete_stair", + "anvilcraft:red_reinforced_concrete_stair", + "anvilcraft:orange_reinforced_concrete_stair", + "anvilcraft:yellow_reinforced_concrete_stair", + "anvilcraft:lime_reinforced_concrete_stair", + "anvilcraft:green_reinforced_concrete_stair", + "anvilcraft:cyan_reinforced_concrete_stair", + "anvilcraft:light_blue_reinforced_concrete_stair", + "anvilcraft:blue_reinforced_concrete_stair", + "anvilcraft:purple_reinforced_concrete_stair", + "anvilcraft:magenta_reinforced_concrete_stair", + "anvilcraft:pink_reinforced_concrete_stair", "anvilcraft:cut_flint_stairs" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/walls.json b/src/generated/resources/data/minecraft/tags/block/walls.json index 40bce11ce7..acb5eb2ee8 100644 --- a/src/generated/resources/data/minecraft/tags/block/walls.json +++ b/src/generated/resources/data/minecraft/tags/block/walls.json @@ -1,21 +1,21 @@ { "values": [ "anvilcraft:heavy_iron_wall", - "anvilcraft:reinforced_concrete_white_wall", - "anvilcraft:reinforced_concrete_light_gray_wall", - "anvilcraft:reinforced_concrete_gray_wall", - "anvilcraft:reinforced_concrete_black_wall", - "anvilcraft:reinforced_concrete_brown_wall", - "anvilcraft:reinforced_concrete_red_wall", - "anvilcraft:reinforced_concrete_orange_wall", - "anvilcraft:reinforced_concrete_yellow_wall", - "anvilcraft:reinforced_concrete_lime_wall", - "anvilcraft:reinforced_concrete_green_wall", - "anvilcraft:reinforced_concrete_cyan_wall", - "anvilcraft:reinforced_concrete_light_blue_wall", - "anvilcraft:reinforced_concrete_blue_wall", - "anvilcraft:reinforced_concrete_purple_wall", - "anvilcraft:reinforced_concrete_magenta_wall", - "anvilcraft:reinforced_concrete_pink_wall" + "anvilcraft:white_reinforced_concrete_wall", + "anvilcraft:light_gray_reinforced_concrete_wall", + "anvilcraft:gray_reinforced_concrete_wall", + "anvilcraft:black_reinforced_concrete_wall", + "anvilcraft:brown_reinforced_concrete_wall", + "anvilcraft:red_reinforced_concrete_wall", + "anvilcraft:orange_reinforced_concrete_wall", + "anvilcraft:yellow_reinforced_concrete_wall", + "anvilcraft:lime_reinforced_concrete_wall", + "anvilcraft:green_reinforced_concrete_wall", + "anvilcraft:cyan_reinforced_concrete_wall", + "anvilcraft:light_blue_reinforced_concrete_wall", + "anvilcraft:blue_reinforced_concrete_wall", + "anvilcraft:purple_reinforced_concrete_wall", + "anvilcraft:magenta_reinforced_concrete_wall", + "anvilcraft:pink_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/damage_type/no_knockback.json b/src/generated/resources/data/minecraft/tags/damage_type/no_knockback.json index 0ccc6bb9cb..77f01ff873 100644 --- a/src/generated/resources/data/minecraft/tags/damage_type/no_knockback.json +++ b/src/generated/resources/data/minecraft/tags/damage_type/no_knockback.json @@ -3,6 +3,10 @@ { "id": "anvilcraft:lost_in_time", "required": false + }, + { + "id": "anvilcraft:heater_burn", + "required": false } ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/enchantable/sword.json b/src/generated/resources/data/minecraft/tags/item/enchantable/sweeping.json similarity index 100% rename from src/generated/resources/data/minecraft/tags/item/enchantable/sword.json rename to src/generated/resources/data/minecraft/tags/item/enchantable/sweeping.json diff --git a/src/generated/resources/data/minecraft/tags/item/slabs.json b/src/generated/resources/data/minecraft/tags/item/slabs.json index e9afb8befb..f2cd0aa189 100644 --- a/src/generated/resources/data/minecraft/tags/item/slabs.json +++ b/src/generated/resources/data/minecraft/tags/item/slabs.json @@ -8,22 +8,22 @@ "anvilcraft:chocolate_slab", "anvilcraft:black_chocolate_slab", "anvilcraft:white_chocolate_slab", - "anvilcraft:reinforced_concrete_white_slab", - "anvilcraft:reinforced_concrete_light_gray_slab", - "anvilcraft:reinforced_concrete_gray_slab", - "anvilcraft:reinforced_concrete_black_slab", - "anvilcraft:reinforced_concrete_brown_slab", - "anvilcraft:reinforced_concrete_red_slab", - "anvilcraft:reinforced_concrete_orange_slab", - "anvilcraft:reinforced_concrete_yellow_slab", - "anvilcraft:reinforced_concrete_lime_slab", - "anvilcraft:reinforced_concrete_green_slab", - "anvilcraft:reinforced_concrete_cyan_slab", - "anvilcraft:reinforced_concrete_light_blue_slab", - "anvilcraft:reinforced_concrete_blue_slab", - "anvilcraft:reinforced_concrete_purple_slab", - "anvilcraft:reinforced_concrete_magenta_slab", - "anvilcraft:reinforced_concrete_pink_slab", + "anvilcraft:white_reinforced_concrete_slab", + "anvilcraft:light_gray_reinforced_concrete_slab", + "anvilcraft:gray_reinforced_concrete_slab", + "anvilcraft:black_reinforced_concrete_slab", + "anvilcraft:brown_reinforced_concrete_slab", + "anvilcraft:red_reinforced_concrete_slab", + "anvilcraft:orange_reinforced_concrete_slab", + "anvilcraft:yellow_reinforced_concrete_slab", + "anvilcraft:lime_reinforced_concrete_slab", + "anvilcraft:green_reinforced_concrete_slab", + "anvilcraft:cyan_reinforced_concrete_slab", + "anvilcraft:light_blue_reinforced_concrete_slab", + "anvilcraft:blue_reinforced_concrete_slab", + "anvilcraft:purple_reinforced_concrete_slab", + "anvilcraft:magenta_reinforced_concrete_slab", + "anvilcraft:pink_reinforced_concrete_slab", "anvilcraft:cut_flint_slab" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/stairs.json b/src/generated/resources/data/minecraft/tags/item/stairs.json index 4f1135ef96..8035856ddb 100644 --- a/src/generated/resources/data/minecraft/tags/item/stairs.json +++ b/src/generated/resources/data/minecraft/tags/item/stairs.json @@ -8,22 +8,22 @@ "anvilcraft:chocolate_stairs", "anvilcraft:black_chocolate_stairs", "anvilcraft:white_chocolate_stairs", - "anvilcraft:reinforced_concrete_white_stair", - "anvilcraft:reinforced_concrete_light_gray_stair", - "anvilcraft:reinforced_concrete_gray_stair", - "anvilcraft:reinforced_concrete_black_stair", - "anvilcraft:reinforced_concrete_brown_stair", - "anvilcraft:reinforced_concrete_red_stair", - "anvilcraft:reinforced_concrete_orange_stair", - "anvilcraft:reinforced_concrete_yellow_stair", - "anvilcraft:reinforced_concrete_lime_stair", - "anvilcraft:reinforced_concrete_green_stair", - "anvilcraft:reinforced_concrete_cyan_stair", - "anvilcraft:reinforced_concrete_light_blue_stair", - "anvilcraft:reinforced_concrete_blue_stair", - "anvilcraft:reinforced_concrete_purple_stair", - "anvilcraft:reinforced_concrete_magenta_stair", - "anvilcraft:reinforced_concrete_pink_stair", + "anvilcraft:white_reinforced_concrete_stair", + "anvilcraft:light_gray_reinforced_concrete_stair", + "anvilcraft:gray_reinforced_concrete_stair", + "anvilcraft:black_reinforced_concrete_stair", + "anvilcraft:brown_reinforced_concrete_stair", + "anvilcraft:red_reinforced_concrete_stair", + "anvilcraft:orange_reinforced_concrete_stair", + "anvilcraft:yellow_reinforced_concrete_stair", + "anvilcraft:lime_reinforced_concrete_stair", + "anvilcraft:green_reinforced_concrete_stair", + "anvilcraft:cyan_reinforced_concrete_stair", + "anvilcraft:light_blue_reinforced_concrete_stair", + "anvilcraft:blue_reinforced_concrete_stair", + "anvilcraft:purple_reinforced_concrete_stair", + "anvilcraft:magenta_reinforced_concrete_stair", + "anvilcraft:pink_reinforced_concrete_stair", "anvilcraft:cut_flint_stairs" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/walls.json b/src/generated/resources/data/minecraft/tags/item/walls.json index 40bce11ce7..acb5eb2ee8 100644 --- a/src/generated/resources/data/minecraft/tags/item/walls.json +++ b/src/generated/resources/data/minecraft/tags/item/walls.json @@ -1,21 +1,21 @@ { "values": [ "anvilcraft:heavy_iron_wall", - "anvilcraft:reinforced_concrete_white_wall", - "anvilcraft:reinforced_concrete_light_gray_wall", - "anvilcraft:reinforced_concrete_gray_wall", - "anvilcraft:reinforced_concrete_black_wall", - "anvilcraft:reinforced_concrete_brown_wall", - "anvilcraft:reinforced_concrete_red_wall", - "anvilcraft:reinforced_concrete_orange_wall", - "anvilcraft:reinforced_concrete_yellow_wall", - "anvilcraft:reinforced_concrete_lime_wall", - "anvilcraft:reinforced_concrete_green_wall", - "anvilcraft:reinforced_concrete_cyan_wall", - "anvilcraft:reinforced_concrete_light_blue_wall", - "anvilcraft:reinforced_concrete_blue_wall", - "anvilcraft:reinforced_concrete_purple_wall", - "anvilcraft:reinforced_concrete_magenta_wall", - "anvilcraft:reinforced_concrete_pink_wall" + "anvilcraft:white_reinforced_concrete_wall", + "anvilcraft:light_gray_reinforced_concrete_wall", + "anvilcraft:gray_reinforced_concrete_wall", + "anvilcraft:black_reinforced_concrete_wall", + "anvilcraft:brown_reinforced_concrete_wall", + "anvilcraft:red_reinforced_concrete_wall", + "anvilcraft:orange_reinforced_concrete_wall", + "anvilcraft:yellow_reinforced_concrete_wall", + "anvilcraft:lime_reinforced_concrete_wall", + "anvilcraft:green_reinforced_concrete_wall", + "anvilcraft:cyan_reinforced_concrete_wall", + "anvilcraft:light_blue_reinforced_concrete_wall", + "anvilcraft:blue_reinforced_concrete_wall", + "anvilcraft:purple_reinforced_concrete_wall", + "anvilcraft:magenta_reinforced_concrete_wall", + "anvilcraft:pink_reinforced_concrete_wall" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json b/src/generated/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json index 76ce7d44c1..911b90ccc4 100644 --- a/src/generated/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json +++ b/src/generated/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json @@ -1,8 +1,5 @@ { "values": [ - { - "id": "anvilcraft:jeweler_poi", - "required": false - } + "anvilcraft:jeweler_poi" ] } \ No newline at end of file diff --git a/src/generated/resources/data/neoforge/data_maps/item/furnace_fuels.json b/src/generated/resources/data/neoforge/data_maps/item/furnace_fuels.json deleted file mode 100644 index 047028a784..0000000000 --- a/src/generated/resources/data/neoforge/data_maps/item/furnace_fuels.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": { - "anvilcraft:wood_fiber": { - "burn_time": 300 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json b/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json deleted file mode 100644 index ad13f2e2b2..0000000000 --- a/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "entries": [ - "anvilcraft:smelting_loot_modifier", - "anvilcraft:disintegration_loot_modifier" - ], - "replace": false -} \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/lib/v2/util1/stack/UnlimitedItemStack.java b/src/main/java/dev/anvilcraft/lib/v2/util1/stack/UnlimitedItemStack.java new file mode 100644 index 0000000000..9e45ea7c59 --- /dev/null +++ b/src/main/java/dev/anvilcraft/lib/v2/util1/stack/UnlimitedItemStack.java @@ -0,0 +1,430 @@ +package dev.anvilcraft.lib.v2.util1.stack; + +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import io.netty.handler.codec.DecoderException; +import io.netty.handler.codec.EncoderException; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.Holder; +import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponentGetter; +import net.minecraft.core.component.DataComponentMap; +import net.minecraft.core.component.DataComponentPatch; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.TypedDataComponent; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.util.ExtraCodecs; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemInstance; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; +import net.minecraft.world.item.component.TooltipProvider; +import net.minecraft.world.item.enchantment.ItemEnchantments; +import net.minecraft.world.level.ItemLike; +import net.neoforged.neoforge.common.MutableDataComponentHolder; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jspecify.annotations.Nullable; + +import java.util.List; +import java.util.Optional; +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Predicate; +import java.util.function.UnaryOperator; + +@Getter +@Setter +public class UnlimitedItemStack implements ItemInstance, MutableDataComponentHolder { + public static final UnlimitedItemStack EMPTY = new UnlimitedItemStack(ItemStack.EMPTY, 0); + public static final MapCodec MAP_CODEC = MapCodec.recursive( + "UnlimitedItemStack", + _ -> RecordCodecBuilder.mapCodec(inst -> inst.group( + Item.CODEC_WITH_BOUND_COMPONENTS + .fieldOf("id") + .forGetter(UnlimitedItemStack::typeHolder), + ExtraCodecs.intRange(1, Integer.MAX_VALUE) + .fieldOf("count") + .orElse(1) + .forGetter(UnlimitedItemStack::getCount), + DataComponentPatch.CODEC + .optionalFieldOf("components", DataComponentPatch.EMPTY) + .forGetter(UnlimitedItemStack::getComponentsPatch) + ).apply(inst, UnlimitedItemStack::new)) + ); + public static final Codec CODEC = Codec.lazyInitialized(MAP_CODEC::codec); + public static final Codec OPTIONAL_CODEC = ExtraCodecs.optionalEmptyMap(CODEC) + .xmap(stack -> stack.orElse(UnlimitedItemStack.EMPTY), stack -> stack.isEmpty() ? Optional.empty() : Optional.of(stack)); + public static final StreamCodec OPTIONAL_STREAM_CODEC = new StreamCodec<>() { + public UnlimitedItemStack decode(RegistryFriendlyByteBuf input) { + int count = input.readVarInt(); + if (count <= 0) { + return UnlimitedItemStack.EMPTY; + } + Holder item = Item.STREAM_CODEC.decode(input); + DataComponentPatch patch = DataComponentPatch.STREAM_CODEC.decode(input); + return new UnlimitedItemStack(item, count, patch); + } + + public void encode(RegistryFriendlyByteBuf output, UnlimitedItemStack stack) { + if (stack.isEmpty()) { + output.writeVarInt(0); + return; + } + output.writeVarInt(stack.getCount()); + Item.STREAM_CODEC.encode(output, stack.typeHolder()); + DataComponentPatch.STREAM_CODEC.encode(output, stack.getComponentsPatch()); + } + }; + public static final StreamCodec STREAM_CODEC = new StreamCodec<>() { + public UnlimitedItemStack decode(RegistryFriendlyByteBuf buf) { + UnlimitedItemStack stack = UnlimitedItemStack.OPTIONAL_STREAM_CODEC.decode(buf); + if (stack.isEmpty()) throw new DecoderException("Empty ItemStack not allowed"); + return stack; + } + + public void encode(RegistryFriendlyByteBuf buf, UnlimitedItemStack stack) { + if (stack.isEmpty()) throw new EncoderException("Empty ItemStack not allowed"); + UnlimitedItemStack.OPTIONAL_STREAM_CODEC.encode(buf, stack); + } + }; + public static final StreamCodec> OPTIONAL_LIST_STREAM_CODEC = OPTIONAL_STREAM_CODEC + .apply(ByteBufCodecs.collection(NonNullList::createWithCapacity)); + private ItemStack stack; + private int count; + + public UnlimitedItemStack(ItemResource resource, int count) { + this(resource.typeHolder(), count, resource.getComponentsPatch()); + } + + public UnlimitedItemStack(ItemStack stack, int count) { + this.count = Math.max(count, 0); + if (this.count == 0) { + this.stack = ItemStack.EMPTY; + } else { + this.stack = stack.copyWithCount(1); + } + } + + public UnlimitedItemStack(Holder itemHolder, int count, DataComponentPatch components) { + this(new ItemStack(itemHolder, 1, components), count); + } + + public UnlimitedItemStack(ItemStack stack) { + this(stack, stack.getCount()); + } + + public boolean isEmpty() { + return this.stack.isEmpty() || this.count <= 0; + } + + public UnlimitedItemStack split(int amount) { + int realAmount = Math.min(amount, this.getCount()); + UnlimitedItemStack result = this.copyWithCount(realAmount); + this.shrink(realAmount); + return result; + } + + public UnlimitedItemStack copyAndClear() { + if (this.isEmpty()) { + return UnlimitedItemStack.EMPTY; + } else { + UnlimitedItemStack result = this.copy(); + this.setCount(0); + return result; + } + } + + public Item getItem() { + return this.typeHolder().value(); + } + + @Override + @SuppressWarnings("deprecation") + public Holder typeHolder() { + return this.isEmpty() ? Items.AIR.builtInRegistryHolder() : this.stack.typeHolder(); + } + + public boolean is(ItemLike item) { + return this.is(item.asItem()); + } + + public boolean is(Predicate> item) { + return item.test(this.typeHolder()); + } + + public boolean isAny(ItemLike... items) { + for (ItemLike item : items) { + if (this.is(item)) return true; + } + return false; + } + + @Override + public int getMaxStackSize() { + return this.getItem().getMaxStackSize(this.toStack()); + } + + public UnlimitedItemStack copy() { + return new UnlimitedItemStack(this.stack, this.count); + } + + public UnlimitedItemStack copyWithCount(int count) { + return new UnlimitedItemStack(this.stack, count); + } + + public UnlimitedItemStack transmuteCopy(ItemLike newItem) { + return this.transmuteCopy(newItem, this.getCount()); + } + + public UnlimitedItemStack transmuteCopy(ItemLike newItem, int newCount) { + return this.isEmpty() ? UnlimitedItemStack.EMPTY : this.transmuteCopyIgnoreEmpty(newItem, newCount); + } + + @SuppressWarnings("deprecation") + private UnlimitedItemStack transmuteCopyIgnoreEmpty(ItemLike newItem, int newCount) { + return new UnlimitedItemStack(newItem.asItem().builtInRegistryHolder(), newCount, this.getComponentsPatch()); + } + + public boolean matches(ItemStack stack) { + return ItemStack.matches(this.toStack(), stack); + } + + public boolean matches(ItemStackTemplate stack) { + return ItemStack.matches(this.toStack(), stack); + } + + public boolean matches(UnlimitedItemStack stack) { + if (this == stack) { + return true; + } + return this.count == stack.count && this.isSameItemSameComponents(stack); + } + + public boolean isSameItem(ItemResource resource) { + return resource.is(this.getItem()); + } + + public boolean isSameItem(ItemStack stack) { + return ItemStack.isSameItem(this.toStack(), stack); + } + + public boolean isSameItem(ItemStackTemplate stack) { + return ItemStack.isSameItem(this.toStack(), stack); + } + + public boolean isSameItem(UnlimitedItemStack stack) { + return this.is(stack.getItem()); + } + + public boolean isSameItemSameComponents(@Nullable ItemResource resource) { + if (this.isEmpty() || resource == null) { + return this.isEmpty() == (resource == null); + } + return resource.matches(this.stack); + } + + public boolean isSameItemSameComponents(@Nullable ItemStack stack) { + return ItemStack.isSameItemSameComponents(this.stack, stack); + } + + public boolean isSameItemSameComponents(@Nullable ItemStackTemplate stack) { + return ItemStack.isSameItemSameComponents(this.stack, stack); + } + + public boolean isSameItemSameComponents(@Nullable UnlimitedItemStack stack) { + return this.isSameItemSameComponents(stack.stack); + } + + public boolean matchesIgnoringComponents(ItemStack stack, Predicate> ignoredPredicate) { + return ItemStack.matchesIgnoringComponents(this.toStack(), stack, ignoredPredicate); + } + + public boolean matchesIgnoringComponents(UnlimitedItemStack stack, Predicate> ignoredPredicate) { + return this.matchesIgnoringComponents(stack.toStack(), ignoredPredicate); + } + + public int hashItemAndComponents() { + return ItemStack.hashItemAndComponents(this.getStack()); + } + + public static int hashStackList(List list) { + int i = 0; + for (UnlimitedItemStack stack : list) { + i = i * 31 + stack.hashItemAndComponents(); + } + return i; + } + + @Override + public @Nullable T set(DataComponentType type, @Nullable T value) { + return this.stack.set(type, value); + } + + public @Nullable T set(TypedDataComponent value) { + return this.stack.set(value); + } + + @Override + public void copyFrom(DataComponentType type, DataComponentGetter source) { + this.stack.copyFrom(type, source); + } + + public void copyFrom(UnlimitedItemStack stack) { + this.setStack(stack.getStack()); + this.setCount(stack.getCount()); + } + + @Override + public @Nullable T update(DataComponentType type, T defaultValue, U value, BiFunction combiner) { + return this.stack.update(type, defaultValue, value, combiner); + } + + @Override + public @Nullable T update(DataComponentType type, T defaultValue, UnaryOperator function) { + return this.stack.update(type, defaultValue, function); + } + + @Override + public @Nullable T remove(DataComponentType type) { + return this.stack.remove(type); + } + + @Override + public void applyComponents(DataComponentPatch patch) { + this.stack.applyComponents(patch); + } + + @Override + public void applyComponents(DataComponentMap components) { + this.stack.applyComponents(components); + } + + @Override + public void addToTooltip( + DataComponentType type, + Item.TooltipContext context, + TooltipDisplay display, + Consumer consumer, + TooltipFlag flag + ) { + this.toStack().addToTooltip(type, context, display, consumer, flag); + } + + @Override + public ItemEnchantments getTagEnchantments() { + return this.stack.getTagEnchantments(); + } + + public int getCount() { + return this.isEmpty() ? 0 : this.count; + } + + @Override + public int count() { + return this.getCount(); + } + + public void grow(int amount) { + this.setCount(this.getCount() + amount); + } + + public void shrink(int amount) { + this.grow(-amount); + } + + /// 将内部存储的物品栈替换为指定物品栈 + /// + ///

注意:该方法不会设置数量。请使用 {@link UnlimitedItemStack#setCount(int)} 设置数量

+ /// + /// @param stack 提供物品和数据组件的 {@link ItemStack} + /// + /// @see UnlimitedItemStack#setCount(int) + public void setStack(ItemStack stack) { + this.stack = stack.copyWithCount(1); + } + + @Override + public DataComponentMap getComponents() { + return this.stack.getComponents(); + } + + public DataComponentPatch getComponentsPatch() { + return this.stack.getComponentsPatch(); + } + + @Override + public @Nullable ItemStackTemplate getCraftingRemainder() { + return this.stack.getCraftingRemainder(); + } + + public static boolean listMatches(List list, List other) { + if (list.size() != other.size()) return false; + for (int i = 0; i < list.size(); i++) { + if (!list.get(i).isSameItemSameComponents(other.get(i))) return false; + } + return true; + } + + /// 将本物品栈转为一个 {@link ItemStack}。
+ /// 数量可能大于 {@link ItemStack} 允许的最大数量。
+ /// 若需要数量安全的 {@link ItemStack},请查看{@link UnlimitedItemStack#toStacks()} + /// + /// @return 一个与本物品栈数据完全相同的 {@link ItemStack} + /// @see UnlimitedItemStack#toStacks() + public ItemStack toStack() { + return this.stack.copyWithCount(this.count); + } + + /// 将本物品栈按存储的 {@link ItemStack} 允许的最大数量转为一个物品栈列表。 + /// + /// @return 一个物品栈列表。
+ /// 每个物品栈都有相同的物品和数据组件。
+ /// 将本物品栈的数量 {@code count} 按存储的物品栈允许的最大数量 {@code max} 分割为 {@code n} 份,
+ /// 前 {@code n - 1} 份物品栈的数量都为 {@code max},
+ /// 最后一份物品栈的数量为 {@code count - [(n - 1) * max]} + /// @see UnlimitedItemStack#toStack() + public List toStacks() { + int maxCount = this.stack.getMaxStackSize(); + if (this.count <= maxCount) { + return List.of(this.stack.copyWithCount(this.count)); + } + + int fullStacks = this.count / maxCount; + ImmutableList.Builder stacksBuilder = ImmutableList.builder(); + for (int i = 0; i < fullStacks; i++) { + stacksBuilder.add(this.stack.copyWithCount(maxCount)); + } + + int remain = this.count % maxCount; + if (remain != 0) { + stacksBuilder.add(this.stack.copyWithCount(remain)); + } + + return stacksBuilder.build(); + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof UnlimitedItemStack stack1)) return false; + return this.matches(stack1); + } + + @Override + public int hashCode() { + return ((this.stack.getItem().hashCode() + 31) * 31 + Integer.hashCode(this.count)) * 31 + this.stack.getComponents().hashCode(); + } + + @Override + public String toString() { + return this.getCount() + " " + this.getItem(); + } +} diff --git a/src/main/java/dev/anvilcraft/lib/v2/util1/stack/package-info.java b/src/main/java/dev/anvilcraft/lib/v2/util1/stack/package-info.java new file mode 100644 index 0000000000..7223261b51 --- /dev/null +++ b/src/main/java/dev/anvilcraft/lib/v2/util1/stack/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.anvilcraft.lib.v2.util1.stack; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/AnvilCraft.java b/src/main/java/dev/dubhe/anvilcraft/AnvilCraft.java index 520c740ad6..f2af5319a0 100644 --- a/src/main/java/dev/dubhe/anvilcraft/AnvilCraft.java +++ b/src/main/java/dev/dubhe/anvilcraft/AnvilCraft.java @@ -8,8 +8,7 @@ import dev.anvilcraft.lib.v2.network.register.NetworkRegistrar; import dev.anvilcraft.lib.v2.registrum.Registrum; import dev.anvilcraft.lib.v2.util.Util; -import dev.dubhe.anvilcraft.api.taslatower.TeslaFilter; -import dev.dubhe.anvilcraft.api.tooltip.ItemTooltipManager; +import dev.dubhe.anvilcraft.api.teslatower.TeslaFilter; import dev.dubhe.anvilcraft.config.AnvilCraftClientConfig; import dev.dubhe.anvilcraft.config.AnvilCraftServerConfig; import dev.dubhe.anvilcraft.data.AnvilCraftDatagen; @@ -22,6 +21,7 @@ import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.init.ModMobEffects; import dev.dubhe.anvilcraft.init.ModParticles; +import dev.dubhe.anvilcraft.init.ModSoundEvents; import dev.dubhe.anvilcraft.init.ModUuidProviders; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -30,35 +30,33 @@ import dev.dubhe.anvilcraft.init.enchantment.ModEnchantmentEffectComponents; import dev.dubhe.anvilcraft.init.enchantment.ModEnchantmentEffects; import dev.dubhe.anvilcraft.init.entity.ModEntities; +import dev.dubhe.anvilcraft.init.entity.ModEntitySubPredicates; import dev.dubhe.anvilcraft.init.entity.ModVillagers; +import dev.dubhe.anvilcraft.init.item.ModAmuletDefinitionTypes; import dev.dubhe.anvilcraft.init.item.ModAmuletTypes; import dev.dubhe.anvilcraft.init.item.ModComponents; +import dev.dubhe.anvilcraft.init.item.ModConsumeEffects; import dev.dubhe.anvilcraft.init.item.ModCustomDataComponents; +import dev.dubhe.anvilcraft.init.item.ModDataComponentPredicates; import dev.dubhe.anvilcraft.init.item.ModItemGroups; -import dev.dubhe.anvilcraft.init.item.ModItemSubPredicates; import dev.dubhe.anvilcraft.init.item.ModItems; import dev.dubhe.anvilcraft.init.loot.ModLootContextParamSets; -import dev.dubhe.anvilcraft.init.loot.ModLootItemConditions; import dev.dubhe.anvilcraft.init.loot.ModLootItemFunctions; import dev.dubhe.anvilcraft.init.loot.ModLootModifiers; import dev.dubhe.anvilcraft.init.recipe.ModRecipeInits; +import dev.dubhe.anvilcraft.init.recipe.ModRecipeSerializers; import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; import dev.dubhe.anvilcraft.init.recipe.ModResultModifierTypes; -import dev.dubhe.anvilcraft.recipe.anvil.cache.RecipeCaches; -import dev.dubhe.anvilcraft.util.ModInteractionMap; +import dev.dubhe.anvilcraft.init.storage.ModCategoryTypes; import lombok.Getter; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Unit; -import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.resources.Identifier; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent; import net.neoforged.fml.loading.progress.StartupNotificationManager; import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.event.AddReloadListenerEvent; import net.neoforged.neoforge.event.RegisterCommandsEvent; -import net.neoforged.neoforge.event.entity.player.ItemTooltipEvent; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; import net.neoforged.neoforge.network.registration.PayloadRegistrar; import org.slf4j.Logger; @@ -91,23 +89,29 @@ public AnvilCraft(IEventBus modEventBus, ModContainer modContainer) { ModMenuTypes.register(); ModComponents.register(modEventBus); ModVillagers.register(modEventBus); + ModRecipeSerializers.register(modEventBus); ModRecipeTypes.register(modEventBus); ModDataAttachments.register(modEventBus); ModParticles.register(modEventBus); + ModSoundEvents.register(modEventBus); ModMobEffects.register(modEventBus); ModInspections.initialize(); - ModItemSubPredicates.initialize(modEventBus); + ModDataComponentPredicates.initialize(modEventBus); ModUuidProviders.register(modEventBus); ModCriterionTriggers.register(modEventBus); ModLootContextParamSets.registerAll(); ModEnchantmentEffectComponents.register(modEventBus); ModEnchantmentEffects.register(modEventBus); - ModLootItemFunctions.LOOT_FUNCTION_TYPES.register(modEventBus); - ModLootItemConditions.LOOT_CONDITION_TYPES.register(modEventBus); + ModLootItemFunctions.register(modEventBus); ModLootModifiers.register(modEventBus); TeslaFilter.init(); ModAmuletTypes.register(modEventBus); + ModAmuletDefinitionTypes.register(modEventBus); + ModCategoryTypes.register(modEventBus); + ModConsumeEffects.register(modEventBus); + ModEntitySubPredicates.register(modEventBus); + // datagen AnvilCraftDatagen.init(); @@ -130,22 +134,25 @@ public AnvilCraft(IEventBus modEventBus, ModContainer modContainer) { private static void registerEvents(IEventBus eventBus) { NeoForge.EVENT_BUS.addListener(AnvilCraft::registerCommand); - NeoForge.EVENT_BUS.addListener(AnvilCraft::addReloadListeners); - NeoForge.EVENT_BUS.addListener(AnvilCraft::addItemTooltips); eventBus.addListener(AnvilCraft::registerPayload); eventBus.addListener(AnvilCraft::loadComplete); eventBus.addListener(ModFluids::registerFluidInteractions); + eventBus.addListener(ModFluids::registerVanilla); } - public static ResourceLocation of(String path) { - return ResourceLocation.fromNamespaceAndPath(MOD_ID, path); + public static Identifier of(String path) { + return Identifier.fromNamespaceAndPath(MOD_ID, path); } - public static ResourceLocation advancementOf(String path) { + public static Identifier advancement(String path) { return of("anvilcraft/" + path); } + public static String recipe(String path) { + return MOD_ID + ':' + path; + } + public static void registerCommand(RegisterCommandsEvent event) { ModCommands.register(event.getDispatcher()); } @@ -155,27 +162,9 @@ public static void registerPayload(RegisterPayloadHandlersEvent event) { NetworkRegistrar.register(registrar, AnvilCraft.MOD_ID); } - public static void addItemTooltips(ItemTooltipEvent event) { - ItemTooltipManager.addTooltip(event.getItemStack(), event.getToolTip()); - } - - public static void addReloadListeners(AddReloadListenerEvent event) { - RecipeManager recipeManager = event.getServerResources().getRecipeManager(); - event.addListener(( - prepBarrier, - resourceManager, - prepProfiler, - reloadProfiler, - backgroundExecutor, - gameExecutor - ) -> prepBarrier.wait(Unit.INSTANCE) - .thenRunAsync(() -> RecipeCaches.reload(recipeManager), gameExecutor)); - } - public static void loadComplete(FMLLoadCompleteEvent event) { event.enqueueWork(() -> { ModDispenserBehavior.register(); - ModInteractionMap.initInteractionMap(); if (Util.isLoaded("apothic_enchanting")) { LOGGER.info( "Apothic Enchanting found. Set royalAnvilBeyondMaxLevel, " diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHammerClickBlockTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHammerClickBlockTrigger.java index 4332679a1c..fd93ede6ce 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHammerClickBlockTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHammerClickBlockTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -18,14 +18,14 @@ public Codec codec() { } public void trigger(ServerPlayer player, String type) { - this.trigger(player, (instance) -> instance.matches(type)); + this.trigger(player, instance -> instance.matches(type)); } public record TriggerInstance( Optional player, Optional type ) implements SimpleCriterionTrigger.SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), Codec.STRING.optionalFieldOf("type").forGetter(TriggerInstance::type) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHammerHurtEntityTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHammerHurtEntityTrigger.java index be57801c0e..fc71190493 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHammerHurtEntityTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHammerHurtEntityTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -18,11 +18,11 @@ public Codec codec() { } public void trigger(ServerPlayer player, Float damage) { - this.trigger(player, (instance) -> instance.matches(damage)); + this.trigger(player, instance -> instance.matches(damage)); } public record TriggerInstance(Optional player, Optional damage) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), Codec.FLOAT.optionalFieldOf("damage").forGetter(TriggerInstance::damage) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHitPiezoelectricCrystalTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHitPiezoelectricCrystalTrigger.java index fee8765f37..22a26fdf4f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHitPiezoelectricCrystalTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilHitPiezoelectricCrystalTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -22,7 +22,7 @@ public void trigger(ServerPlayer player) { } public record TriggerInstance(Optional player) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilLootingTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilLootingTrigger.java index 804b25eb2f..02b646307e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilLootingTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilLootingTrigger.java @@ -4,9 +4,10 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; +import net.minecraft.core.HolderGetter; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -22,13 +23,13 @@ public Codec codec() { public void trigger(ServerPlayer player, Entity entity) { LootContext context = EntityPredicate.createContext(player, entity); - this.trigger(player, (instance) -> instance.matches(context)); + this.trigger(player, instance -> instance.matches(context)); } public record TriggerInstance( Optional player, Optional entity ) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("entity").forGetter(TriggerInstance::entity) ).apply(instance, TriggerInstance::new)); @@ -39,11 +40,11 @@ public static Criterion looting() { ); } - public static Criterion looting(EntityType entityType) { + public static Criterion looting(HolderGetter> lookup, EntityType entityType) { return ModCriterionTriggers.ANVIL_LOOTING.get().createCriterion( new TriggerInstance( Optional.empty(), - Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().of(entityType).build()))) + Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().of(lookup, entityType).build()))) ); } diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilOnGroundTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilOnGroundTrigger.java index 915e126052..fe2ca18910 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilOnGroundTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/AnvilOnGroundTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -22,7 +22,7 @@ public void trigger(ServerPlayer player) { } public record TriggerInstance(Optional player) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/BlockPredicate.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/BlockPredicate.java index 879886c8d9..6a5dd74073 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/BlockPredicate.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/BlockPredicate.java @@ -13,7 +13,7 @@ import java.util.function.Predicate; public record BlockPredicate(Optional> block) implements Predicate { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( RegistryCodecs.homogeneousList(Registries.BLOCK).optionalFieldOf("block").forGetter(BlockPredicate::block) ).apply(instance, BlockPredicate::new)); @@ -32,13 +32,14 @@ public static Builder block() { return new Builder(); } + @SuppressWarnings("deprecation") public Builder of(Block block) { - this.blocks = HolderSet.direct((b) -> b.defaultBlockState().getBlockHolder(), block); + this.blocks = HolderSet.direct(b -> b.defaultBlockState().getBlock().builtInRegistryHolder(), block); return this; } public Builder of(TagKey tag) { - this.blocks = BuiltInRegistries.BLOCK.getOrCreateTag(tag); + this.blocks = BuiltInRegistries.BLOCK.getOrThrow(tag); return this; } diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/ConvertBeaconTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/ConvertBeaconTrigger.java index 7c3baa9b1d..51d6554bdb 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/ConvertBeaconTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/ConvertBeaconTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -22,7 +22,7 @@ public void trigger(ServerPlayer player) { } public record TriggerInstance(Optional player) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/DevourerDevourTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/DevourerDevourTrigger.java index 74f0d9838c..6a71d68738 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/DevourerDevourTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/DevourerDevourTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.block.Block; @@ -19,11 +19,11 @@ public Codec codec() { } public void trigger(ServerPlayer player, Block block) { - this.trigger(player, (instance) -> instance.matches(block)); + this.trigger(player, instance -> instance.matches(block)); } public record TriggerInstance(Optional player, Optional block) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), BlockPredicate.CODEC.optionalFieldOf("block").forGetter(TriggerInstance::block) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/DispenserRepairIronGolem.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/DispenserRepairIronGolem.java index 8ee035a034..afb27b1818 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/DispenserRepairIronGolem.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/DispenserRepairIronGolem.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -22,7 +22,7 @@ public void trigger(ServerPlayer player) { } public record TriggerInstance(Optional player) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/FireReforgeTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/FireReforgeTrigger.java index 1421c8ebf3..241acd19d8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/FireReforgeTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/FireReforgeTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -22,7 +22,7 @@ public void trigger(ServerPlayer player) { } public record TriggerInstance(Optional player) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/HeatCollectorTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/HeatCollectorTrigger.java index b8e40ae4dc..33e8a00a02 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/HeatCollectorTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/HeatCollectorTrigger.java @@ -5,15 +5,15 @@ import dev.anvilcraft.lib.v2.util.predicate.BlockStatePredicate; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.MinMaxBounds; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.MinMaxBounds; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Optional; @@ -32,7 +32,7 @@ public record TriggerInstance( Optional collecting, Optional output ) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), BlockStatePredicate.CODEC.optionalFieldOf("collecting").forGetter(TriggerInstance::collecting), MinMaxBounds.Ints.CODEC.optionalFieldOf("output").forGetter(TriggerInstance::output) diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/InWorldRecipeTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/InWorldRecipeTrigger.java index 8da29a615f..2ed87c1487 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/InWorldRecipeTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/InWorldRecipeTrigger.java @@ -4,10 +4,10 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -18,17 +18,17 @@ public Codec codec() { return TriggerInstance.CODEC; } - public void trigger(ServerPlayer player, ResourceLocation recipeType, ResourceLocation id) { - this.trigger(player, (instance) -> instance.matches(recipeType, id)); + public void trigger(ServerPlayer player, Identifier recipeType, Identifier id) { + this.trigger(player, instance -> instance.matches(recipeType, id)); } public record TriggerInstance( - Optional player, Optional recipeType, Optional id + Optional player, Optional recipeType, Optional id ) implements SimpleCriterionTrigger.SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), - ResourceLocation.CODEC.optionalFieldOf("recipeType").forGetter(TriggerInstance::recipeType), - ResourceLocation.CODEC.optionalFieldOf("id").forGetter(TriggerInstance::id) + Identifier.CODEC.optionalFieldOf("recipeType").forGetter(TriggerInstance::recipeType), + Identifier.CODEC.optionalFieldOf("id").forGetter(TriggerInstance::id) ).apply(instance, TriggerInstance::new)); public static Criterion inWorldRecipe() { @@ -37,19 +37,19 @@ public static Criterion inWorldRecipe() { ); } - public static Criterion inWorldRecipe(ResourceLocation id) { + public static Criterion inWorldRecipe(Identifier id) { return ModCriterionTriggers.IN_WORLD_RECIPE.get().createCriterion( new TriggerInstance(Optional.empty(), Optional.empty(), Optional.of(id)) ); } - public static Criterion inWorldRecipeType(ResourceLocation recipeType) { + public static Criterion inWorldRecipeType(Identifier recipeType) { return ModCriterionTriggers.IN_WORLD_RECIPE.get().createCriterion( new TriggerInstance(Optional.empty(), Optional.of(recipeType), Optional.empty()) ); } - public boolean matches(ResourceLocation recipeType, ResourceLocation id) { + public boolean matches(Identifier recipeType, Identifier id) { if (this.recipeType.isEmpty() && this.id.isEmpty()) { return true; } diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MagnetLiftingAnvilTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MagnetLiftingAnvilTrigger.java index 69b6589075..42131e23d1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MagnetLiftingAnvilTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MagnetLiftingAnvilTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -22,7 +22,7 @@ public void trigger(ServerPlayer player) { } public record TriggerInstance(Optional player) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MilkTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MilkTrigger.java index a7a84e4db9..3a44e16d28 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MilkTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MilkTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -22,7 +22,7 @@ public void trigger(ServerPlayer player) { } public record TriggerInstance(Optional player) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MineralFountainCreateTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MineralFountainCreateTrigger.java index 71bd273468..9e41fe9c51 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MineralFountainCreateTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/MineralFountainCreateTrigger.java @@ -4,8 +4,8 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlacerPlaceTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlacerPlaceTrigger.java index 8c4a1330f8..7a166f249c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlacerPlaceTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlacerPlaceTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.block.Block; @@ -19,13 +19,13 @@ public Codec codec() { } public void trigger(ServerPlayer player, Block block) { - this.trigger(player, (instance) -> instance.matches(block)); + this.trigger(player, instance -> instance.matches(block)); } public record TriggerInstance( Optional player, Optional block ) implements SimpleCriterionTrigger.SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), BlockPredicate.CODEC.optionalFieldOf("block").forGetter(TriggerInstance::block) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlayerKilledEntityByAnvilHammerTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlayerKilledEntityByAnvilHammerTrigger.java index 35ee04a1f6..cf6c310bd3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlayerKilledEntityByAnvilHammerTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlayerKilledEntityByAnvilHammerTrigger.java @@ -4,9 +4,10 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; +import net.minecraft.core.HolderGetter; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -22,20 +23,22 @@ public Codec codec() { public void trigger(ServerPlayer player, Entity entity) { LootContext context = EntityPredicate.createContext(player, entity); - this.trigger(player, (instance) -> instance.matches(context)); + this.trigger(player, instance -> instance.matches(context)); } public record TriggerInstance( Optional player, Optional entity ) implements SimpleCriterionTrigger.SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("entity").forGetter(TriggerInstance::entity) ).apply(instance, TriggerInstance::new)); - public static Criterion killedEntity(EntityType type) { + public static Criterion killedEntity(HolderGetter> lookup, EntityType type) { return ModCriterionTriggers.PLAYER_KILLED_ENTITY_BY_ANVIL_HAMMER.get().createCriterion( - new TriggerInstance(Optional.empty(), Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().of(type)))) + new TriggerInstance(Optional.empty(), Optional.of(EntityPredicate.wrap( + EntityPredicate.Builder.entity().of(lookup, type) + ))) ); } diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlayerWearAnvilHammerTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlayerWearAnvilHammerTrigger.java index e12df020aa..2ccdcdca02 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlayerWearAnvilHammerTrigger.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/PlayerWearAnvilHammerTrigger.java @@ -4,9 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.dubhe.anvilcraft.init.ModCriterionTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.advancements.criterion.ContextAwarePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.SimpleCriterionTrigger; import net.minecraft.server.level.ServerPlayer; import java.util.Optional; @@ -22,7 +22,7 @@ public void trigger(ServerPlayer player) { } public record TriggerInstance(Optional player) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player) ).apply(instance, TriggerInstance::new)); diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/UseItemTrigger.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/UseItemTrigger.java deleted file mode 100644 index 44f98ea9d5..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/UseItemTrigger.java +++ /dev/null @@ -1,44 +0,0 @@ -package dev.dubhe.anvilcraft.advancements.criterion; - -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.dubhe.anvilcraft.init.ModCriterionTriggers; -import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.ContextAwarePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.advancements.critereon.SimpleCriterionTrigger; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.Item; - -import java.util.Optional; - -public class UseItemTrigger extends SimpleCriterionTrigger { - @Override - public Codec codec() { - return TriggerInstance.CODEC; - } - - public void trigger(ServerPlayer player, Item item) { - this.trigger(player, (instance) -> instance.matches(item)); - } - - public record TriggerInstance(Optional player, Optional item) implements SimpleInstance { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( - EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), - ItemPredicate.CODEC.optionalFieldOf("item").forGetter(TriggerInstance::item) - ).apply(instance, TriggerInstance::new)); - - public static Criterion useItem(Item item) { - return useItem(ItemPredicate.Builder.item().of(item)); - } - - public static Criterion useItem(ItemPredicate.Builder item) { - return ModCriterionTriggers.USE_ITEM.get().createCriterion(new TriggerInstance(Optional.empty(), Optional.of(item.build()))); - } - - public boolean matches(Item item) { - return this.item.isEmpty() || this.item.get().test(item.getDefaultInstance()); - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/package-info.java b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/package-info.java index 4480ca9a40..bbea8a9d2a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/advancements/criterion/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.advancements.criterion; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/BeaconConversionBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/BeaconConversionBehavior.java index 1bf7a97680..b26166bb61 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/BeaconConversionBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/BeaconConversionBehavior.java @@ -6,6 +6,7 @@ import dev.dubhe.anvilcraft.init.item.ModItems; import it.unimi.dsi.fastutil.ints.Int2DoubleOpenHashMap; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -19,17 +20,17 @@ public class BeaconConversionBehavior implements IAnvilBehavior { private static final Int2DoubleOpenHashMap map = new Int2DoubleOpenHashMap() { { - put(1, 0.02f); - put(2, 0.05f); - put(3, 0.2f); - put(4, 1f); + put(1, 0.02F); + put(2, 0.05F); + put(3, 0.2F); + put(4, 1F); } }; @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { BlockPos above = hitBlockPos.above(); - int beaconLevel = getBeaconLevel(level, hitBlockPos); + int beaconLevel = this.getBeaconLevel(level, hitBlockPos); final List itemEntities = level.getEntitiesOfClass(ItemEntity.class, new AABB(above)); BlockEntity blockEntity = level.getBlockEntity(hitBlockPos); if (!(blockEntity instanceof BeaconBlockEntity beaconBlockEntity)) { @@ -49,7 +50,7 @@ public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockStat itemEntity.setItem(stack); for (int i = 1; i <= 4; i++) { if (beaconLevel == i) { - if (level.random.nextDouble() < map.get(i)) { + if (level.getRandom().nextDouble() < map.get(i)) { level.setBlockAndUpdate(hitBlockPos, ModBlocks.CORRUPTED_BEACON.getDefaultState()); return true; } diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/BlockDevourerBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/BlockDevourerBehavior.java index 7e280262fb..78c57609d9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/BlockDevourerBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/BlockDevourerBehavior.java @@ -2,18 +2,16 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.block.BlockDevourerBlock; +import dev.dubhe.anvilcraft.block.utility.BlockDevourerBlock; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; public class BlockDevourerBehavior implements IAnvilBehavior { @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { - if (!(level instanceof ServerLevel serverLevel)) return false; + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { BlockDevourerBlock block = (BlockDevourerBlock) hitBlockState.getBlock(); int range = Math.min((int) fallDistance + 2, 4); level.setBlock(hitBlockPos, hitBlockState.setValue(BlockDevourerBlock.TRIGGERED, true), 2); @@ -25,7 +23,7 @@ public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockStat return true; } block.devourBlock( - serverLevel, + level, hitBlockPos, hitBlockState.getValue(BlockDevourerBlock.FACING), range, diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/BlockPlacerBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/BlockPlacerBehavior.java index 8990b97151..3541cacb36 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/BlockPlacerBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/BlockPlacerBehavior.java @@ -2,14 +2,14 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.block.BlockPlacerBlock; +import dev.dubhe.anvilcraft.block.utility.BlockPlacerBlock; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.state.BlockState; public class BlockPlacerBehavior implements IAnvilBehavior { @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { BlockPlacerBlock block = (BlockPlacerBlock) hitBlockState.getBlock(); int distance = Math.min((int) event.getFallDistance() + 2, 5); level.setBlock(hitBlockPos, hitBlockState.setValue(BlockPlacerBlock.TRIGGERED, true), 2); diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/CementStainingBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/CementStainingBehavior.java index 3e69492250..14b4b08ae5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/CementStainingBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/CementStainingBehavior.java @@ -5,10 +5,10 @@ import dev.dubhe.anvilcraft.block.state.Color; import dev.dubhe.anvilcraft.init.block.ModBlocks; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; @@ -18,10 +18,10 @@ public class CementStainingBehavior implements IAnvilBehavior { @Override public boolean handle( - Level level, + ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, - float fallDistance, + double fallDistance, AnvilEvent.OnLand event ) { Map items = level.getEntitiesOfClass(ItemEntity.class, new AABB(hitBlockPos)).stream() diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/GunpowderBlockBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/GunpowderBlockBehavior.java index 314556351d..dc3fdddf5e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/GunpowderBlockBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/GunpowderBlockBehavior.java @@ -2,19 +2,19 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.block.GunpowderBlock; import dev.dubhe.anvilcraft.block.multipart.AbstractMultiPartBlock; +import dev.dubhe.anvilcraft.block.storage.GunpowderBlock; import dev.dubhe.anvilcraft.entity.AnimateAscendingBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlocks; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.BlockTags; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; public class GunpowderBlockBehavior implements IAnvilBehavior { @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { final BlockPos pos = event.getPos(); final BlockState blockState = level.getBlockState(pos); GunpowderBlock block = (GunpowderBlock) hitBlockState.getBlock(); diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/HitBeeNestBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/HitBeeNestBehavior.java index 1b195c5c6a..624a9d365e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/HitBeeNestBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/HitBeeNestBehavior.java @@ -5,17 +5,17 @@ import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.util.CauldronUtil; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.BeehiveBlock; import net.minecraft.world.level.block.state.BlockState; public class HitBeeNestBehavior implements IAnvilBehavior { @Override public boolean handle( - Level level, + ServerLevel level, BlockPos pos, BlockState state, - float fallDistance, + double fallDistance, AnvilEvent.OnLand event ) { if (!state.hasBlockEntity()) return false; diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/HitCrabTrapBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/HitCrabTrapBehavior.java index a31263feaa..b5c17922e3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/HitCrabTrapBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/HitCrabTrapBehavior.java @@ -2,24 +2,25 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.block.CrabTrapBlock; import dev.dubhe.anvilcraft.block.entity.CrabTrapBlockEntity; +import dev.dubhe.anvilcraft.block.production.CrabTrapBlock; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; public class HitCrabTrapBehavior implements IAnvilBehavior { @Override public boolean handle( - Level level, + ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, - float fallDistance, + double fallDistance, AnvilEvent.OnLand event ) { if (!hitBlockState.hasBlockEntity()) return false; @@ -27,13 +28,17 @@ public boolean handle( Direction face = hitBlockState.getValue(CrabTrapBlock.FACING); Vec3 dropPos = hitBlockPos.above().relative(face).getCenter().relative(face.getOpposite(), 0.5); if (blockEntity == null) return false; - IItemHandler depository = blockEntity.getItemHandler(); - for (int i = 0; i < depository.getSlots(); i++) { - ItemStack stack = depository.getStackInSlot(i); - ItemEntity itemEntity = new ItemEntity(level, dropPos.x, dropPos.y - 0.4, dropPos.z, stack, 0, 0, 0); - itemEntity.setDefaultPickUpDelay(); - level.addFreshEntity(itemEntity); - depository.extractItem(i, stack.getCount(), false); + ResourceHandler depository = blockEntity.getItemHandler(); + for (int i = 0; i < depository.size(); i++) { + ItemResource resource = depository.getResource(i); + try (Transaction transaction = Transaction.openRoot()) { + int extracted = depository.extract(i, resource, Integer.MAX_VALUE, transaction); + if (extracted == 0) continue; + ItemEntity itemEntity = new ItemEntity(level, dropPos.x, dropPos.y - 0.4, dropPos.z, resource.toStack(extracted), 0, 0, 0); + itemEntity.setDefaultPickUpDelay(); + level.addFreshEntity(itemEntity); + transaction.commit(); + } } return false; } diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/HitSpawnerBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/HitSpawnerBehavior.java index 69eb72cd07..4f889426b1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/HitSpawnerBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/HitSpawnerBehavior.java @@ -3,43 +3,47 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; import dev.dubhe.anvilcraft.mixin.accessor.BaseSpawnerAccessor; +import lombok.extern.slf4j.Slf4j; import net.minecraft.core.BlockPos; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.ProblemReporter; import net.minecraft.util.RandomSource; import net.minecraft.world.Difficulty; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.SpawnPlacements; import net.minecraft.world.level.BaseSpawner; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.SpawnData; import net.minecraft.world.level.block.entity.SpawnerBlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.entity.EntityTypeTest; import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.storage.TagValueInput; +import net.minecraft.world.level.storage.ValueInput; import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.event.EventHooks; import java.util.Optional; +@Slf4j public class HitSpawnerBehavior implements IAnvilBehavior { @Override public boolean handle( - Level level, + ServerLevel level, BlockPos pos, BlockState hitBlockState, - float fallDistance, + double fallDistance, AnvilEvent.OnLand event ) { if (level instanceof ServerLevel serverLevel) { RandomSource randomSource = serverLevel.getRandom(); float f = randomSource.nextFloat(); if (fallDistance <= 1) { - fallDistance = 1.1f; + fallDistance = 1.1F; } if (f <= (1 / fallDistance)) { return false; @@ -48,7 +52,7 @@ public boolean handle( BaseSpawner spawner = blockEntity.getSpawner(); BaseSpawnerAccessor accessor = (BaseSpawnerAccessor) spawner; SpawnData spawnData = accessor.invokeGetOrCreateNextSpawnData(level, randomSource, pos); - spawnEntities(spawnData, serverLevel, pos, randomSource, accessor); + this.spawnEntities(spawnData, serverLevel, pos, randomSource, spawner, accessor); } } return false; @@ -56,125 +60,89 @@ public boolean handle( private void spawnEntities( SpawnData spawnData, - ServerLevel serverLevel, + ServerLevel level, BlockPos pos, - RandomSource randomSource, + RandomSource random, + BaseSpawner spawner, BaseSpawnerAccessor accessor ) { - for (int i = 0; i < accessor.getSpawnCount(); ++i) { - CompoundTag compoundTag = spawnData.getEntityToSpawn(); - Optional> optional = EntityType.by(compoundTag); - if (optional.isEmpty()) { - return; - } + for (int c = 0; c < accessor.getSpawnCount(); c++) { + try (ProblemReporter.ScopedCollector reporter = new ProblemReporter.ScopedCollector(this::toString, log)) { + ValueInput input = TagValueInput.create(reporter, level.registryAccess(), spawnData.getEntityToSpawn()); + Optional> entityType = EntityType.by(input); + if (entityType.isEmpty()) return; - ListTag listTag = compoundTag.getList("Pos", 6); - int size = listTag.size(); - double x; - double y; - double z; - if (size >= 1) { - x = listTag.getDouble(0); - } else { - x = (double) pos.getX() - + (randomSource.nextDouble() - randomSource.nextDouble()) * accessor.getSpawnRange() - + 0.5; - } - if (size >= 2) { - y = listTag.getDouble(1); - } else { - y = pos.getY() + randomSource.nextInt(3) - 1; - } - if (size >= 3) { - z = listTag.getDouble(2); - } else { - z = (double) pos.getZ() - + (randomSource.nextDouble() - randomSource.nextDouble()) * accessor.getSpawnRange() - + 0.5; - } - if (serverLevel.noCollision(optional.get().getSpawnAABB(x, y, z))) { - BlockPos blockPos = BlockPos.containing(x, y, z); - if (spawnData.getCustomSpawnRules().isPresent()) { - if (!optional.get().getCategory().isFriendly() - && serverLevel.getDifficulty() == Difficulty.PEACEFUL - ) { - continue; - } + Vec3 spawnPos = input.read("Pos", Vec3.CODEC) + .orElseGet( + () -> new Vec3( + pos.getX() + (random.nextDouble() - random.nextDouble()) * accessor.getSpawnRange() + 0.5, + pos.getY() + random.nextInt(3) - 1, + pos.getZ() + (random.nextDouble() - random.nextDouble()) * accessor.getSpawnRange() + 0.5 + ) + ); + if (level.noCollision(entityType.get().getSpawnAABB(spawnPos.x, spawnPos.y, spawnPos.z))) { + BlockPos spawnBlockPos = BlockPos.containing(spawnPos); + if (spawnData.getCustomSpawnRules().isPresent()) { + if (!entityType.get().getCategory().isFriendly() && level.getDifficulty() == Difficulty.PEACEFUL) { + continue; + } - SpawnData.CustomSpawnRules customSpawnRules = - spawnData.getCustomSpawnRules().get(); - if (!customSpawnRules - .blockLightLimit() - .isValueInRange(serverLevel.getBrightness(LightLayer.BLOCK, blockPos)) - || !customSpawnRules - .skyLightLimit() - .isValueInRange(serverLevel.getBrightness(LightLayer.SKY, blockPos)) - ) { + SpawnData.CustomSpawnRules customSpawnRules = spawnData.getCustomSpawnRules().get(); + if (!customSpawnRules.isValidPosition(spawnBlockPos, level)) { + continue; + } + } else if (!SpawnPlacements.checkSpawnRules( + entityType.get(), + level, + EntitySpawnReason.SPAWNER, + spawnBlockPos, + level.getRandom() + )) { continue; } - } else if (!SpawnPlacements.checkSpawnRules( - optional.get(), serverLevel, MobSpawnType.SPAWNER, blockPos, serverLevel.getRandom()) - ) { - continue; - } - Entity entity = EntityType.loadEntityRecursive(compoundTag, serverLevel, it -> { - it.moveTo(x, y, z, it.getYRot(), it.getXRot()); - return it; - }); - if (entity == null) { - return; - } - AABB boundingBox = new AABB( - pos.getX(), - pos.getY(), - pos.getZ(), - pos.getX() + 1, - pos.getY() + 1, - pos.getZ() + 1 - ); - int k = serverLevel - .getEntitiesOfClass(entity.getClass(), boundingBox.inflate(accessor.getSpawnRange())) - .size(); - if (k >= accessor.getMaxNearbyEntities()) { - return; - } - entity.moveTo( - entity.getX(), - entity.getY(), - entity.getZ(), - randomSource.nextFloat() * 360.0F, - 0.0F - ); - if (entity instanceof Mob mob) { - if (spawnData.getCustomSpawnRules().isEmpty() - && !mob.checkSpawnRules(serverLevel, MobSpawnType.SPAWNER) - || !mob.checkSpawnObstruction(serverLevel) - ) { - continue; - } + Entity entity = EntityType.loadEntityRecursive(input, level, EntitySpawnReason.SPAWNER, e -> { + e.snapTo(spawnPos.x, spawnPos.y, spawnPos.z, e.getYRot(), e.getXRot()); + return e; + }); + if (entity == null) return; + + int nearBy = level.getEntities( + EntityTypeTest.forExactClass(entity.getClass()), + new AABB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1) + .inflate(accessor.getSpawnRange()), + EntitySelector.NO_SPECTATORS + ).size(); + if (nearBy >= accessor.getMaxNearbyEntities()) return; + + entity.snapTo(entity.getX(), entity.getY(), entity.getZ(), random.nextFloat() * 360.0F, 0.0F); + if (entity instanceof Mob mob) { + if (!EventHooks.checkSpawnPositionSpawner(mob, level, EntitySpawnReason.SPAWNER, spawnData, spawner)) { + continue; + } - if (spawnData.getEntityToSpawn().size() == 1 - && spawnData.getEntityToSpawn().contains("id", 8) - ) { - EventHooks.finalizeMobSpawn( + boolean hasNoConfiguration = spawnData.getEntityToSpawn().size() == 1 + && spawnData.getEntityToSpawn().getString("id").isPresent(); + EventHooks.finalizeMobSpawnSpawner( mob, - serverLevel, - serverLevel.getCurrentDifficultyAt(entity.blockPosition()), - MobSpawnType.SPAWNER, - null + level, + level.getCurrentDifficultyAt(entity.blockPosition()), + EntitySpawnReason.SPAWNER, + null, + spawner, + hasNoConfiguration ); + + spawnData.getEquipment().ifPresent(mob::equip); } - } - if (!serverLevel.tryAddFreshEntityWithPassengers(entity)) { - return; - } + if (!level.tryAddFreshEntityWithPassengers(entity)) return; - serverLevel.levelEvent(2004, pos, 0); - serverLevel.gameEvent(entity, GameEvent.ENTITY_PLACE, blockPos); - if (entity instanceof Mob) { - ((Mob) entity).spawnAnim(); + level.levelEvent(2004, pos, 0); + level.gameEvent(entity, GameEvent.ENTITY_PLACE, spawnBlockPos); + if (entity instanceof Mob) { + ((Mob) entity).spawnAnim(); + } } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/ImpactPileBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/ImpactPileBehavior.java index a1f2789e9e..eda1c58301 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/ImpactPileBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/ImpactPileBehavior.java @@ -2,19 +2,19 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.block.ImpactPileBlock; +import dev.dubhe.anvilcraft.block.utility.ImpactPileBlock; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; public class ImpactPileBehavior implements IAnvilBehavior { @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { BlockState belowState = level.getBlockState(hitBlockPos.below()); if ( event.getFallDistance() + 1 >= 20 - && (level.getMinBuildHeight() <= hitBlockPos.getY() && hitBlockPos.getY() <= level.getMinBuildHeight() + 8) + && (level.getMinY() <= hitBlockPos.getY() && hitBlockPos.getY() <= level.getMinY() + 8) && (belowState.is(Blocks.DEEPSLATE) || belowState.is(Blocks.BEDROCK)) ) { ImpactPileBlock.impact(level, hitBlockPos); diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/ItemStampingBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/ItemStampingBehavior.java deleted file mode 100644 index daea42a145..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/ItemStampingBehavior.java +++ /dev/null @@ -1,124 +0,0 @@ -package dev.dubhe.anvilcraft.anvil; - -import dev.anvilcraft.lib.v2.util.predicate.ChanceItemStack; -import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; -import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; -import dev.dubhe.anvilcraft.recipe.anvil.StampingUniqueItemsRecipe; -import dev.dubhe.anvilcraft.recipe.anvil.input.ItemProcessInput; -import dev.dubhe.anvilcraft.util.AnvilUtil; -import dev.dubhe.anvilcraft.util.RecipeUtil; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import net.minecraft.Util; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.RecipeHolder; -import net.minecraft.world.item.crafting.RecipeType; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; - -import java.util.Map; -import java.util.Optional; - -public class ItemStampingBehavior implements IAnvilBehavior { - @Override - public boolean handle( - Level level, - BlockPos hitBlockPos, - BlockState hitBlockState, - float fallDistance, - AnvilEvent.OnLand event - ) { - return ItemStampingBehavior.itemProcess( - ModRecipeTypes.STAMPING_UNIQUE_ITEMS_TYPE.get(), - level, - hitBlockPos, - hitBlockPos.getCenter().add(0, 0.25, 0) - ); - } - - public static boolean itemProcess( - RecipeType recipeType, - Level level, - final BlockPos itemPos, - final Vec3 resultPos - ) { - Map items = level.getEntitiesOfClass(ItemEntity.class, new AABB(itemPos)).stream() - .map(it -> Map.entry(it, it.getItem())) - .collect(Util.toMap()); - - ItemProcessInput input = new ItemProcessInput(items.values().stream().toList()); - Optional> recipeOptional = level.getRecipeManager() - .getRecipesFor(recipeType, input, level) - .stream() - .max(ItemStampingBehavior::compareRecipeHolders); - if (recipeOptional.isPresent()) { - RecipeHolder recipe = recipeOptional.get(); - int times = recipe.value().getMaxCraftTime(); - Object2IntMap results = new Object2IntOpenHashMap<>(); - LootContext context; - if (level instanceof ServerLevel serverLevel) { - context = RecipeUtil.emptyLootContext(serverLevel); - } else { - return false; - } - - for (int i = 0; i < times; i++) { - for (Ingredient ingredient : recipe.value().getIngredients()) { - for (ItemStack stack : items.values()) { - if (ingredient.test(stack)) { - if (stack.hasCraftingRemainingItem()) { - ItemStack remain = stack.getCraftingRemainingItem(); - results.mergeInt(remain.getItem(), remain.getCount(), Integer::sum); - } - stack.shrink(1); - break; - } - } - } - for (ChanceItemStack stack : recipe.value().getResults()) { - int amount = stack.stack().getCount() * stack.count().getInt(context); - results.mergeInt(stack.stack().getItem(), amount, Integer::sum); - } - } - AnvilUtil.dropItems( - results.object2IntEntrySet().stream() - .map(entry -> new ItemStack(entry.getKey(), entry.getIntValue())) - .toList(), - level, - resultPos - ); - items.forEach((k, v) -> { - if (v.isEmpty()) { - k.discard(); - return; - } - k.setItem(v.copy()); - }); - return true; - } - return false; - } - - public static int compareRecipeHolders( - RecipeHolder holderA, - RecipeHolder holderB - ) { - StampingUniqueItemsRecipe a = holderA.value(); - StampingUniqueItemsRecipe b = holderB.value(); - if (a.mergedIngredients.size() == b.mergedIngredients.size()) { - int countA = a.mergedIngredients.stream().mapToInt(Object2IntMap.Entry::getIntValue).sum(); - int countB = b.mergedIngredients.stream().mapToInt(Object2IntMap.Entry::getIntValue).sum(); - return countA - countB; - } - return a.mergedIngredients.size() - b.mergedIngredients.size(); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/MagnetBlockBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/MagnetBlockBehavior.java index 2711b4b745..3487fafd18 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/MagnetBlockBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/MagnetBlockBehavior.java @@ -2,21 +2,21 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.block.MagnetBlock; +import dev.dubhe.anvilcraft.block.storage.MagnetBlock; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.init.item.ModItems; import dev.dubhe.anvilcraft.util.AnvilUtil; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import java.util.Collections; public class MagnetBlockBehavior implements IAnvilBehavior { @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { if (hitBlockState.is(ModBlocks.MAGNET_BLOCK.get())) { boolean lit = hitBlockState.getValue(MagnetBlock.LIT); level.setBlockAndUpdate(hitBlockPos, ModBlocks.HOLLOW_MAGNET_BLOCK.get().defaultBlockState().setValue(MagnetBlock.LIT, lit)); diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/MassInjectBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/MassInjectBehavior.java index e0db80284b..d2f1d2ea78 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/MassInjectBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/MassInjectBehavior.java @@ -7,11 +7,11 @@ import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; import dev.dubhe.anvilcraft.recipe.anvil.MassInjectRecipe; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.SingleRecipeInput; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; @@ -22,22 +22,22 @@ public class MassInjectBehavior implements IAnvilBehavior { @Override public boolean handle( - Level level, + ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, - float fallDistance, + double fallDistance, AnvilEvent.OnLand event ) { BlockEntity blockEntity = level.getBlockEntity(hitBlockPos); if (!(blockEntity instanceof SpaceOvercompressorBlockEntity compressor)) return false; int remainingProcessCount = AnvilLibRecipe.CONFIG.inWorldRecipeMaxEfficiency; long totalMassConsumed = 0L; - RecipeManager manager = level.getRecipeManager(); + RecipeManager manager = level.recipeAccess(); List itemEntities = level.getEntitiesOfClass(ItemEntity.class, new AABB(hitBlockPos.above()), i -> !i.getItem().isEmpty()); for (ItemEntity itemEntity : itemEntities) { - Optional opt = manager.getRecipeFor(ModRecipeTypes.MASS_INJECT_TYPE.get(), + Optional opt = manager.getRecipeFor(ModRecipeTypes.MASS_INJECT.get(), new SingleRecipeInput(itemEntity.getItem()), level) .map(RecipeHolder::value); diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/RedstoneEMPBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/RedstoneEMPBehavior.java index 8f7c7d4988..a7c91c9c6d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/RedstoneEMPBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/RedstoneEMPBehavior.java @@ -6,6 +6,7 @@ import dev.dubhe.anvilcraft.init.block.ModBlockTags; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.RedstoneTorchBlock; @@ -14,10 +15,10 @@ public class RedstoneEMPBehavior implements IAnvilBehavior { @Override public boolean handle( - Level level, + ServerLevel level, BlockPos pos, BlockState hitBlockState, - float fallDistance, + double fallDistance, AnvilEvent.OnLand event ) { int radius = AnvilCraft.CONFIG.redstoneEmpRadius; @@ -26,28 +27,28 @@ public boolean handle( if (!level.getBlockState(pos.relative(Direction.EAST)).is(Blocks.IRON_TRAPDOOR)) { for (int x = 1; x < distance; x++) { for (int z = -distance; z < distance; z++) { - redstoneEmp(level, pos.offset(x, 0, z)); + this.redstoneEmp(level, pos.offset(x, 0, z)); } } } if (!level.getBlockState(pos.relative(Direction.WEST)).is(Blocks.IRON_TRAPDOOR)) { for (int x = -1; x > -distance; x--) { for (int z = -distance; z < distance; z++) { - redstoneEmp(level, pos.offset(x, 0, z)); + this.redstoneEmp(level, pos.offset(x, 0, z)); } } } if (!level.getBlockState(pos.relative(Direction.SOUTH)).is(Blocks.IRON_TRAPDOOR)) { for (int x = -distance; x < distance; x++) { for (int z = 1; z < distance; z++) { - redstoneEmp(level, pos.offset(x, 0, z)); + this.redstoneEmp(level, pos.offset(x, 0, z)); } } } if (!level.getBlockState(pos.relative(Direction.NORTH)).is(Blocks.IRON_TRAPDOOR)) { for (int x = -distance; x < distance; x++) { for (int z = -1; z > -distance; z--) { - redstoneEmp(level, pos.offset(x, 0, z)); + this.redstoneEmp(level, pos.offset(x, 0, z)); } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/ResetVaultBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/ResetVaultBehavior.java index 50797e4206..6bb05c7d29 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/ResetVaultBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/ResetVaultBehavior.java @@ -5,7 +5,7 @@ import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.mixin.accessor.VaultServerDataAccessor; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.vault.VaultBlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -15,10 +15,10 @@ public class ResetVaultBehavior implements IAnvilBehavior { @Override public boolean handle( - Level level, + ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, - float fallDistance, + double fallDistance, AnvilEvent.OnLand event ) { if (!level.getBlockState(hitBlockPos).is(ModBlockTags.STORAGE_BLOCKS_LEAD)) return false; diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/SugarBlockBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/SugarBlockBehavior.java index 6a49e30dcd..e3e94d606e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/SugarBlockBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/SugarBlockBehavior.java @@ -2,14 +2,14 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.block.SugarBlock; +import dev.dubhe.anvilcraft.block.storage.SugarBlock; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.state.BlockState; public class SugarBlockBehavior implements IAnvilBehavior { @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { SugarBlock block = (SugarBlock) hitBlockState.getBlock(); block.onHit(level, hitBlockPos); return true; diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/TimeWarpPlayerBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/TimeWarpPlayerBehavior.java index f61f2874db..82ae165102 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/TimeWarpPlayerBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/TimeWarpPlayerBehavior.java @@ -2,27 +2,28 @@ import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; import dev.dubhe.anvilcraft.api.event.AnvilEvent; -import dev.dubhe.anvilcraft.block.CorruptedBeaconBlock; +import dev.dubhe.anvilcraft.block.workstation.CorruptedBeaconBlock; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.init.entity.ModDamageTypes; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import java.util.List; public class TimeWarpPlayerBehavior implements IAnvilBehavior { @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { - if (!(level instanceof ServerLevel serverLevel)) return false; + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { BlockState below = level.getBlockState(hitBlockPos.below()); if (!below.is(ModBlocks.CORRUPTED_BEACON)) return false; if (!below.getValue(CorruptedBeaconBlock.LIT)) return false; - List players = serverLevel.getPlayers(player -> player.getOnPos().equals(hitBlockPos)); + List players = level.getPlayers(player -> player.getOnPos().equals(hitBlockPos)); if (players.isEmpty()) return false; - for (ServerPlayer player : players) player.hurt(ModDamageTypes.lostInTime(level), Float.MAX_VALUE); + for (ServerPlayer player : players) { + // noinspection deprecation + player.hurtOrSimulate(ModDamageTypes.lostInTime(level), Float.MAX_VALUE); + } return true; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/TranscendiumBehavior.java b/src/main/java/dev/dubhe/anvilcraft/anvil/TranscendiumBehavior.java index 9b484fd8fa..a452bf1b0c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/TranscendiumBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/TranscendiumBehavior.java @@ -6,6 +6,7 @@ import dev.dubhe.anvilcraft.init.item.ModItems; import net.minecraft.core.BlockPos; import net.minecraft.core.component.DataComponents; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; @@ -20,7 +21,7 @@ // TODO: 临时硬编码解决方案 public class TranscendiumBehavior implements IAnvilBehavior { @Override - public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockState, float fallDistance, AnvilEvent.OnLand event) { + public boolean handle(ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, double fallDistance, AnvilEvent.OnLand event) { final RandomSource random = level.getRandom(); final List itemEntities = level.getEntitiesOfClass(ItemEntity.class, new AABB(hitBlockPos.above())); @@ -48,7 +49,7 @@ public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockStat if (enchantmentCount == 0) { this.spawnItemEntity(level, hitBlockPos, ModItems.TRANSCENDIUM_INGOT.asStack(4)); } else if (enchantmentCount >= 1 && enchantmentCount <= 10) { - if (random.nextDouble() < 10 * enchantmentCount / 100f) { + if (random.nextDouble() < 10 * enchantmentCount / 100F) { this.spawnItemEntity(level, hitBlockPos, ModItems.NEUTRONIUM_INGOT.asStack()); } this.spawnItemEntity(level, hitBlockPos, ModItems.TRANSCENDIUM_INGOT.asStack(4)); diff --git a/src/main/java/dev/dubhe/anvilcraft/anvil/package-info.java b/src/main/java/dev/dubhe/anvilcraft/anvil/package-info.java index 726f93d83e..32d55ad209 100644 --- a/src/main/java/dev/dubhe/anvilcraft/anvil/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/anvil/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.anvil; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/BlockPlaceAssist.java b/src/main/java/dev/dubhe/anvilcraft/api/BlockPlaceAssist.java index 191631e291..7c6d750c17 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/BlockPlaceAssist.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/BlockPlaceAssist.java @@ -3,6 +3,7 @@ import com.mojang.datafixers.util.Pair; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -26,10 +27,12 @@ public class BlockPlaceAssist { private static List orderDirectionByDistance( BlockPos pos, Vec3 hit, Predicate includeDirection) { - Vec3 centerToHit = hit.subtract(Vec3.atLowerCornerOf(pos).add(.5f, .5f, .5f)); + Vec3 centerToHit = hit.subtract(Vec3.atLowerCornerOf(pos).add(.5F, .5F, .5F)); return Arrays.stream(Direction.values()) .filter(includeDirection) - .map(dir -> Pair.of(dir, Vec3.atLowerCornerOf(dir.getNormal()).distanceTo(centerToHit))) + .map(dir -> Pair.of(dir, Vec3.atLowerCornerOf( + new Vec3i(dir.getStepX(), dir.getStepY(), dir.getStepZ()) + ).distanceTo(centerToHit))) .sorted(Comparator.comparingDouble(Pair::getSecond)) .map(Pair::getFirst) .collect(Collectors.toList()); @@ -46,7 +49,7 @@ public static InteractionResult tryPlace( EnumProperty propertyDef, BlockState newBlockState ) { - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; if (player.isShiftKeyDown() || !player.mayBuild()) return InteractionResult.PASS; ItemStack itemInHand = player.getItemInHand(hand); if (itemInHand.is(blockItem)) { @@ -79,8 +82,8 @@ public static InteractionResult tryPlace( blockPos, soundType.getPlaceSound(), SoundSource.BLOCKS, - (soundType.volume + 1) / 2.0f, - soundType.pitch * 0.8f + (soundType.volume + 1) / 2.0F, + soundType.pitch * 0.8F ); if (!player.getAbilities().instabuild) itemInHand.shrink(1); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/IHasDisplayItem.java b/src/main/java/dev/dubhe/anvilcraft/api/IHasDisplayItem.java index 94c60e5988..1b2efa7f1b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/IHasDisplayItem.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/IHasDisplayItem.java @@ -2,9 +2,7 @@ import net.minecraft.world.item.ItemStack; -/** - * 带有展示物品的方块实体 - */ +/// 带有展示物品的方块实体 public interface IHasDisplayItem { void updateDisplayItem(ItemStack stack); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/IHasMultiBlock.java b/src/main/java/dev/dubhe/anvilcraft/api/IHasMultiBlock.java index 4b821b3181..c0e5938293 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/IHasMultiBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/IHasMultiBlock.java @@ -4,9 +4,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -/** - * 多方块方块 - */ +/// 多方块方块 public interface IHasMultiBlock { void onRemove(Level level, BlockPos pos, BlockState state); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/RipeningManager.java b/src/main/java/dev/dubhe/anvilcraft/api/RipeningManager.java index 15a8e824b6..3fb4fe3a09 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/RipeningManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/RipeningManager.java @@ -24,9 +24,7 @@ public class RipeningManager { private final HashSet ripened = new HashSet<>(); private long lastTickRipen = -1; - /** - * 获取或新建一个当前维度催熟实例。 - */ + /// 获取或新建一个当前维度催熟实例。 public static RipeningManager from(Level level) { return INSTANCES.computeIfAbsent(level, RipeningManager::new); } @@ -35,28 +33,26 @@ public RipeningManager(Level level) { this.level = level; } - /** - * 进行催熟 - * - * @param pos 灯的位置 - * @param ripened 在本轮催熟中,已经被催熟过的位置 - */ + /// 进行催熟 + /// + /// @param pos 灯的位置 + /// @param ripened 在本轮催熟中,已经被催熟过的位置 private void doRipen(BlockPos pos, HashSet ripened) { int radius = AnvilCraft.CONFIG.inductionLightBlockRipeningRange / 2; for (BlockPos plantPos : BlockPos.betweenClosed(pos.offset(radius, radius, radius), pos.offset(-radius, -radius, -radius))) { if (ripened.contains(plantPos)) continue; - BlockState state = level.getBlockState(plantPos); + BlockState state = this.level.getBlockState(plantPos); Block block = state.getBlock(); if ( block instanceof BonemealableBlock growable && !(growable instanceof GrassBlock) && !(growable instanceof NyliumBlock) - && growable.isValidBonemealTarget(level, plantPos, state) - && level.getBrightness(LightLayer.BLOCK, plantPos) >= 10 + && growable.isValidBonemealTarget(this.level, plantPos, state) + && this.level.getBrightness(LightLayer.BLOCK, plantPos) >= 10 ) { - growable.performBonemeal((ServerLevel) level, level.getRandom(), plantPos, state); - level.addParticle( + growable.performBonemeal((ServerLevel) this.level, this.level.getRandom(), plantPos, state); + this.level.addParticle( ParticleTypes.HAPPY_VILLAGER, plantPos.getX() + 0.5, plantPos.getY() + 0.5, @@ -67,12 +63,12 @@ private void doRipen(BlockPos pos, HashSet ripened) { ); ripened.add(plantPos); } - if (state.is(Blocks.SUGAR_CANE) && level.getBlockState(plantPos.above()).is(Blocks.AIR)) { - level.setBlock(plantPos.above(), Blocks.SUGAR_CANE.defaultBlockState(), Block.UPDATE_ALL_IMMEDIATE); - } else if (state.is(Blocks.CACTUS) && level.getBlockState(plantPos.above()).is(Blocks.AIR)) { - level.setBlock(plantPos.above(), Blocks.CACTUS.defaultBlockState(), Block.UPDATE_ALL_IMMEDIATE); + if (state.is(Blocks.SUGAR_CANE) && this.level.getBlockState(plantPos.above()).is(Blocks.AIR)) { + this.level.setBlock(plantPos.above(), Blocks.SUGAR_CANE.defaultBlockState(), Block.UPDATE_ALL_IMMEDIATE); + } else if (state.is(Blocks.CACTUS) && this.level.getBlockState(plantPos.above()).is(Blocks.AIR)) { + this.level.setBlock(plantPos.above(), Blocks.CACTUS.defaultBlockState(), Block.UPDATE_ALL_IMMEDIATE); } else if (state.is(Blocks.NETHER_WART) && state.getValue(NetherWartBlock.AGE) != NetherWartBlock.MAX_AGE) { - level.setBlock( + this.level.setBlock( plantPos, Blocks.NETHER_WART.defaultBlockState().setValue(NetherWartBlock.AGE, state.getValue(NetherWartBlock.AGE) + 1), Block.UPDATE_ALL_IMMEDIATE @@ -82,29 +78,27 @@ private void doRipen(BlockPos pos, HashSet ripened) { } public void doRipen(BlockPos blockPos) { - if (isRipenReady()) doRipen(blockPos, ripened); + if (this.isRipenReady()) this.doRipen(blockPos, this.ripened); } - /** - * 如果当前时间距离上次催熟不小于催熟冷却则清空重复催熟过滤器 ripened 并重新计时,返回 true - * 如果时间差在 (0, 冷却) 之间则返回 false 无事发生 - * 如果为 0 则返回 true 无事发生(因为意味着其他灯已经调用过这个函数了) - * 如果为负数说明有时间旅行(time set xxx),重置上次催熟时间。 - * - * @return if already cooldown for ripen - */ + /// 如果当前时间距离上次催熟不小于催熟冷却则清空重复催熟过滤器 ripened 并重新计时,返回 true + /// 如果时间差在 (0, 冷却) 之间则返回 false 无事发生 + /// 如果为 0 则返回 true 无事发生(因为意味着其他灯已经调用过这个函数了) + /// 如果为负数说明有时间旅行(time set xxx),重置上次催熟时间。 + /// + /// @return if already cooldown for ripen private boolean isRipenReady() { - if (level.getServer() == null) return false; - long curTime = level.getGameTime(); - long ticksBeforeLastRipen = curTime - lastTickRipen; + if (this.level.getServer() == null) return false; + long curTime = this.level.getGameTime(); + long ticksBeforeLastRipen = curTime - this.lastTickRipen; if (ticksBeforeLastRipen == 0) return true; // another LightBlock is Ripened at this tick. if (ticksBeforeLastRipen < 0) { // time set xxx may change the gameTime. - lastTickRipen = curTime - 1; + this.lastTickRipen = curTime - 1; return false; } if (ticksBeforeLastRipen >= AnvilCraft.CONFIG.inductionLightBlockRipeningCooldown) { - lastTickRipen = curTime; - ripened.clear(); + this.lastTickRipen = curTime; + this.ripened.clear(); return true; } return false; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/SpawningManager.java b/src/main/java/dev/dubhe/anvilcraft/api/SpawningManager.java index 16d2fb2948..2558eb3c34 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/SpawningManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/SpawningManager.java @@ -2,14 +2,14 @@ import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.AnvilCraft; -import dev.dubhe.anvilcraft.block.InductionLightBlock; import dev.dubhe.anvilcraft.block.entity.InductionLightBlockEntity; +import dev.dubhe.anvilcraft.block.power.consumer.InductionLightBlock; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; @@ -24,27 +24,25 @@ import java.util.Map; import java.util.Set; -/** - * 电感灯生物生成管理器 - * - *

- * 该类负责管理电感灯方块对生物生成的控制功能,采用单例模式为每个世界维护一个实例。 - * 通过监听生物生成事件,检查生物是否在电感灯的生效区域内,并根据电感灯的设置阻止相应类型的生物生成。 - *

- * - *

- * 主要功能包括: - *

    - *
  • 维护动物和非动物生物生成控制的电感灯方块集合
  • - *
  • 处理生物生成事件,阻止在电感灯生效区域内的生物生成
  • - *
  • 自动清理失效的电感灯方块引用
  • - *
- *

- * - * @see InductionLightBlock - * @see InductionLightBlockEntity - * @see MobSpawnEvent.PositionCheck - */ +/// 电感灯生物生成管理器 +/// +///

+/// 该类负责管理电感灯方块对生物生成的控制功能,采用单例模式为每个世界维护一个实例。 +/// 通过监听生物生成事件,检查生物是否在电感灯的生效区域内,并根据电感灯的设置阻止相应类型的生物生成。 +///

+/// +///

+/// 主要功能包括: +///

    +///
  • 维护动物和非动物生物生成控制的电感灯方块集合
  • +///
  • 处理生物生成事件,阻止在电感灯生效区域内的生物生成
  • +///
  • 自动清理失效的电感灯方块引用
  • +///
+///

+/// +/// @see InductionLightBlock +/// @see InductionLightBlockEntity +/// @see MobSpawnEvent.PositionCheck @EventBusSubscriber(modid = AnvilCraft.MOD_ID) public class SpawningManager { private static final Map INSTANCES = new HashMap<>(); @@ -54,18 +52,16 @@ public class SpawningManager { @Getter private final Level level; - /** - * 获取与指定世界关联的 SpawningManager 实例 - * - *

- * 使用单例模式,为每个 Level 创建并缓存一个 SpawningManager 实例。
- * 如果指定的 Level 尚未创建实例,则通过 {@link SpawningManager#SpawningManager(Level)} 构造函数创建新实例。 - *

- * - * @param level 用于获取 SpawningManager 实例的世界对象 - * @return 与指定世界关联的 SpawningManager 实例 - * @see Map#computeIfAbsent(Object, java.util.function.Function) - */ + /// 获取与指定世界关联的 SpawningManager 实例 + /// + ///

+ /// 使用单例模式,为每个 Level 创建并缓存一个 SpawningManager 实例。
+ /// 如果指定的 Level 尚未创建实例,则通过 {@link SpawningManager#SpawningManager(Level)} 构造函数创建新实例。 + ///

+ /// + /// @param level 用于获取 SpawningManager 实例的世界对象 + /// @return 与指定世界关联的 SpawningManager 实例 + /// @see Map#computeIfAbsent(Object, java.util.function.Function) public static SpawningManager getInstance(Level level) { return INSTANCES.computeIfAbsent(level, SpawningManager::new); } @@ -74,21 +70,19 @@ private SpawningManager(Level level) { this.level = level; } - /** - * 添加电感灯方块到对应的生物生成控制集合中 - * - *

- * 根据 isAnimal 参数决定将指定位置的电感灯添加到动物生成控制集合或非动物生物生成控制集合。
- * 该方法会获取对应世界的 SpawningManager 实例,并将方块位置添加到相应的集合中。 - *

- * - * @param pos 电感灯方块的位置 - * @param level 方块所在的世界 - * @param isAnimal true表示该电感灯用于控制动物生成,false表示用于控制非动物生物生成 - * @see SpawningManager#getInstance(Level) - * @see #animalLightBlockSet - * @see #nonAnimalLightBlockSet - */ + /// 添加电感灯方块到对应的生物生成控制集合中 + /// + ///

+ /// 根据 isAnimal 参数决定将指定位置的电感灯添加到动物生成控制集合或非动物生物生成控制集合。
+ /// 该方法会获取对应世界的 SpawningManager 实例,并将方块位置添加到相应的集合中。 + ///

+ /// + /// @param pos 电感灯方块的位置 + /// @param level 方块所在的世界 + /// @param isAnimal true表示该电感灯用于控制动物生成,false表示用于控制非动物生物生成 + /// @see SpawningManager#getInstance(Level) + /// @see #animalLightBlockSet + /// @see #nonAnimalLightBlockSet public static void addLightBlock(BlockPos pos, Level level, boolean isAnimal) { SpawningManager spawningManager = SpawningManager.getInstance(level); if (isAnimal) { @@ -98,26 +92,24 @@ public static void addLightBlock(BlockPos pos, Level level, boolean isAnimal) { } } - /** - * 检查并阻止特定类型的生物在电感灯方块的生效区域内生成 - * - *

- * 遍历指定的电感灯方块位置集合,检查每个方块是否仍有效并且处于点亮状态。
- * 如果生物位于某个有效电感灯方块的阻挡区域内,则根据生物类型和电感灯设置阻止其生成。
- * 同时清理已失效的电感灯方块位置。 - *

- * - * @param level 生物生成所在的世界 - * @param event 生物生成位置检查事件 - * @param lightPosSet 电感灯方块位置集合 - * @param isAnimal true表示检查动物生成,false表示检查非动物生物生成 - * @return 是否成功阻止生成实体 - * @see InductionLightBlock#isLit(BlockState) - * @see InductionLightBlock#canBlockMobSummoning(BlockState) - * @see InductionLightBlock#canBlockAnimalSummoning(BlockState) - * @see InductionLightBlockEntity#isInRange(Vec3) - * @see MobSpawnEvent.PositionCheck#setResult(MobSpawnEvent.PositionCheck.Result) - */ + /// 检查并阻止特定类型的生物在电感灯方块的生效区域内生成 + /// + ///

+ /// 遍历指定的电感灯方块位置集合,检查每个方块是否仍有效并且处于点亮状态。
+ /// 如果生物位于某个有效电感灯方块的阻挡区域内,则根据生物类型和电感灯设置阻止其生成。
+ /// 同时清理已失效的电感灯方块位置。 + ///

+ /// + /// @param level 生物生成所在的世界 + /// @param event 生物生成位置检查事件 + /// @param lightPosSet 电感灯方块位置集合 + /// @param isAnimal true表示检查动物生成,false表示检查非动物生物生成 + /// @return 是否成功阻止生成实体 + /// @see InductionLightBlock#isLit(BlockState) + /// @see InductionLightBlock#canBlockMobSummoning(BlockState) + /// @see InductionLightBlock#canBlockAnimalSummoning(BlockState) + /// @see InductionLightBlockEntity#isInRange(Vec3) + /// @see MobSpawnEvent.PositionCheck#setResult(MobSpawnEvent.PositionCheck.Result) private static boolean ignoreSummonMob(Level level, MobSpawnEvent.PositionCheck event, Set lightPosSet, boolean isAnimal) { Mob entity = event.getEntity(); Iterator iterator = lightPosSet.iterator(); @@ -153,27 +145,25 @@ private static boolean ignoreSummonMob(Level level, MobSpawnEvent.PositionCheck return false; } - /** - * 处理生物生成位置检查事件 - * - *

- * 监听 Minecraft 的生物生成事件,只处理自然生成、区块生成和巡逻生成类型的生物。
- * 根据生物类型(动物或非动物)检查其生成位置是否在电感灯方块的阻挡区域内,
- * 如果在阻挡区域内则阻止生物生成。 - *

- * - * @param event 生物生成位置检查事件 - * @see MobSpawnEvent.PositionCheck - * @see MobSpawnType - * @see #ignoreSummonMob(Level, MobSpawnEvent.PositionCheck, Set, boolean) - */ + /// 处理生物生成位置检查事件 + /// + ///

+ /// 监听 Minecraft 的生物生成事件,只处理自然生成、区块生成和巡逻生成类型的生物。
+ /// 根据生物类型(动物或非动物)检查其生成位置是否在电感灯方块的阻挡区域内,
+ /// 如果在阻挡区域内则阻止生物生成。 + ///

+ /// + /// @param event 生物生成位置检查事件 + /// @see MobSpawnEvent.PositionCheck + /// @see EntitySpawnReason + /// @see #ignoreSummonMob(Level, MobSpawnEvent.PositionCheck, Set, boolean) @SubscribeEvent private static void blockEntitySummon(MobSpawnEvent.PositionCheck event) { - MobSpawnType spawnType = event.getSpawnType(); + EntitySpawnReason spawnType = event.getSpawnType(); if ( - !spawnType.equals(MobSpawnType.NATURAL) - && !spawnType.equals(MobSpawnType.CHUNK_GENERATION) - && !spawnType.equals(MobSpawnType.PATROL) + !spawnType.equals(EntitySpawnReason.NATURAL) + && !spawnType.equals(EntitySpawnReason.CHUNK_GENERATION) + && !spawnType.equals(EntitySpawnReason.PATROL) ) { return; } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/advancement/AdvancementLineHelper.java b/src/main/java/dev/dubhe/anvilcraft/api/advancement/AdvancementLineHelper.java index b87a8dbec1..f20f708397 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/advancement/AdvancementLineHelper.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/advancement/AdvancementLineHelper.java @@ -1,5 +1,6 @@ package dev.dubhe.anvilcraft.api.advancement; +import com.google.common.collect.Lists; import dev.anvilcraft.lib.v2.util.predicate.BlockStatePredicate; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.advancements.criterion.AnvilHammerClickBlockTrigger; @@ -19,7 +20,6 @@ import dev.dubhe.anvilcraft.advancements.criterion.PlacerPlaceTrigger; import dev.dubhe.anvilcraft.advancements.criterion.PlayerKilledEntityByAnvilHammerTrigger; import dev.dubhe.anvilcraft.advancements.criterion.PlayerWearAnvilHammerTrigger; -import dev.dubhe.anvilcraft.advancements.criterion.UseItemTrigger; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementHolder; import net.minecraft.advancements.AdvancementRequirements; @@ -27,46 +27,57 @@ import net.minecraft.advancements.AdvancementType; import net.minecraft.advancements.Criterion; import net.minecraft.advancements.DisplayInfo; -import net.minecraft.advancements.critereon.DamagePredicate; -import net.minecraft.advancements.critereon.DamageSourcePredicate; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.InventoryChangeTrigger; -import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.advancements.critereon.ItemUsedOnLocationTrigger; -import net.minecraft.advancements.critereon.MinMaxBounds; -import net.minecraft.advancements.critereon.PlayerHurtEntityTrigger; -import net.minecraft.advancements.critereon.PlayerTrigger; -import net.minecraft.advancements.critereon.RecipeCraftedTrigger; -import net.minecraft.advancements.critereon.SlotsPredicate; +import net.minecraft.advancements.criterion.ConsumeItemTrigger; +import net.minecraft.advancements.criterion.DamagePredicate; +import net.minecraft.advancements.criterion.DamageSourcePredicate; +import net.minecraft.advancements.criterion.DataComponentMatchers; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.InventoryChangeTrigger; +import net.minecraft.advancements.criterion.ItemPredicate; +import net.minecraft.advancements.criterion.ItemUsedOnLocationTrigger; +import net.minecraft.advancements.criterion.MinMaxBounds; +import net.minecraft.advancements.criterion.PlayerHurtEntityTrigger; +import net.minecraft.advancements.criterion.PlayerTrigger; +import net.minecraft.advancements.criterion.RecipeCraftedTrigger; +import net.minecraft.advancements.criterion.SlotsPredicate; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.HolderSet; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; import net.minecraft.world.inventory.SlotRanges; import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.storage.loot.LootTable; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.function.Consumer; import java.util.function.Supplier; public class AdvancementLineHelper { - private AdvancementHolder parent; + private final String namespace; + private @Nullable AdvancementHolder parent; + + public AdvancementLineHelper(String namespace) { + this.namespace = namespace; + } public AdvancementHelper next() { return new AdvancementHelper(this); } public AdvancementLineHelper createBranch() { - AdvancementLineHelper branch = new AdvancementLineHelper(); + AdvancementLineHelper branch = new AdvancementLineHelper(this.namespace); branch.parent = this.parent; return branch; } @@ -82,10 +93,10 @@ public AdvancementHelper(AdvancementLineHelper lineHelper) { } public AdvancementHelper display( - ItemStack icon, + ItemStackTemplate icon, Component title, Component description, - @Nullable ResourceLocation background, + @Nullable Identifier background, AdvancementType type, boolean showToast, boolean announceChat, @@ -99,7 +110,7 @@ public AdvancementHelper display( ItemLike icon, Component title, Component description, - @Nullable ResourceLocation background, + @Nullable Identifier background, AdvancementType type, boolean showToast, boolean announceChat, @@ -164,8 +175,15 @@ public AdvancementHelper playerFirstDetected(String key) { return this.addCriterion(key, PlayerTrigger.TriggerInstance.tick()); } - public AdvancementHelper hasItems(String key, TagKey tag) { - return this.addCriterion(key, InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(tag))); + public AdvancementHelper hasItems(HolderGetter items, TagKey tag) { + return this.addCriterion( + "has_" + tag.location().toShortString().replace(':', '_'), + InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(items, tag)) + ); + } + + public AdvancementHelper hasItems(String key, HolderGetter items, TagKey tag) { + return this.addCriterion(key, InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(items, tag))); } public AdvancementHelper hasItems(String key, ItemLike... items) { @@ -182,35 +200,35 @@ public AdvancementHelper hasItemAny(String keyPrefix, ItemLike... items) { return this; } - public AdvancementHelper useItem(String key, ItemLike item) { - return this.addCriterion(key, UseItemTrigger.TriggerInstance.useItem(item.asItem())); + public AdvancementHelper consumeItem(String key, HolderGetter items, ItemLike item) { + return this.addCriterion(key, ConsumeItemTrigger.TriggerInstance.usedItem(items, item.asItem())); } - public AdvancementHelper recipe(String key, ResourceLocation recipeId) { - return this.addCriterion(key, RecipeCraftedTrigger.TriggerInstance.craftedItem(recipeId)); + public AdvancementHelper recipe(String key, Identifier recipeId) { + return this.addCriterion(key, RecipeCraftedTrigger.TriggerInstance.craftedItem( + ResourceKey.create(Registries.RECIPE, recipeId) + )); } public AdvancementHelper recipeMod(String key, String namespace, String recipeId) { - return this.addCriterion(key, RecipeCraftedTrigger.TriggerInstance.craftedItem( - ResourceLocation.fromNamespaceAndPath(namespace, recipeId) - )); + return this.recipe(key, Identifier.fromNamespaceAndPath(namespace, recipeId)); } public AdvancementHelper recipeAnc(String key, String recipeId) { - return this.addCriterion(key, RecipeCraftedTrigger.TriggerInstance.craftedItem(AnvilCraft.of(recipeId))); + return this.recipe(key, AnvilCraft.of(recipeId)); } public AdvancementHelper inWorldRecipe(String key) { return this.addCriterion(key, InWorldRecipeTrigger.TriggerInstance.inWorldRecipe()); } - public AdvancementHelper inWorldRecipe(String key, ResourceLocation recipeId) { + public AdvancementHelper inWorldRecipe(String key, Identifier recipeId) { return this.addCriterion(key, InWorldRecipeTrigger.TriggerInstance.inWorldRecipe(recipeId)); } public AdvancementHelper inWorldRecipeMod(String key, String namespace, String recipeId) { return this.addCriterion(key, InWorldRecipeTrigger.TriggerInstance.inWorldRecipe( - ResourceLocation.fromNamespaceAndPath(namespace, recipeId) + Identifier.fromNamespaceAndPath(namespace, recipeId) )); } @@ -218,13 +236,13 @@ public AdvancementHelper inWorldRecipeAnc(String key, String recipeId) { return this.addCriterion(key, InWorldRecipeTrigger.TriggerInstance.inWorldRecipe(AnvilCraft.of(recipeId))); } - public AdvancementHelper inWorldRecipeType(String key, ResourceLocation typeId) { + public AdvancementHelper inWorldRecipeType(String key, Identifier typeId) { return this.addCriterion(key, InWorldRecipeTrigger.TriggerInstance.inWorldRecipeType(typeId)); } public AdvancementHelper inWorldRecipeTypeMod(String key, String namespace, String typeId) { return this.addCriterion(key, InWorldRecipeTrigger.TriggerInstance.inWorldRecipeType( - ResourceLocation.fromNamespaceAndPath(namespace, typeId) + Identifier.fromNamespaceAndPath(namespace, typeId) )); } @@ -240,8 +258,8 @@ public AdvancementHelper anvilLooting(String key) { return this.addCriterion(key, AnvilLootingTrigger.TriggerInstance.looting()); } - public AdvancementHelper anvilLooting(String key, EntityType type) { - return this.addCriterion(key, AnvilLootingTrigger.TriggerInstance.looting(type)); + public AdvancementHelper anvilLooting(String key, HolderGetter> lookup, EntityType type) { + return this.addCriterion(key, AnvilLootingTrigger.TriggerInstance.looting(lookup, type)); } public AdvancementHelper repairIronGolem(String key) { @@ -300,8 +318,8 @@ public AdvancementHelper hammerHurt(String key, float damage) { return this.addCriterion(key, AnvilHammerHurtEntityTrigger.TriggerInstance.hurtEntity(damage)); } - public AdvancementHelper hammerKill(String key, EntityType type) { - return this.addCriterion(key, PlayerKilledEntityByAnvilHammerTrigger.TriggerInstance.killedEntity(type)); + public AdvancementHelper hammerKill(String key, HolderGetter> lookup, EntityType type) { + return this.addCriterion(key, PlayerKilledEntityByAnvilHammerTrigger.TriggerInstance.killedEntity(lookup, type)); } public AdvancementHelper wearHammer(String key) { @@ -327,6 +345,7 @@ public AdvancementHelper hurt(String key, ItemPredicate.Builder builder, float d )); } + @SuppressWarnings("deprecation") public AdvancementHelper hurt(String key, float damage, ItemLike... items) { return this.addCriterion(key, PlayerHurtEntityTrigger.TriggerInstance.playerHurtEntityWithDamage( DamagePredicate.Builder.damageInstance() @@ -336,7 +355,14 @@ public AdvancementHelper hurt(String key, float damage, ItemLike... items) { EntityPredicate.Builder.entity() .slots(new SlotsPredicate(Map.of( Objects.requireNonNull(SlotRanges.nameToIds("weapon")), - ItemPredicate.Builder.item().of(items).build() + new ItemPredicate( + Optional.of(HolderSet.direct(Lists.transform( + List.of(items), + item -> item.asItem().builtInRegistryHolder() + ))), + MinMaxBounds.Ints.ANY, + DataComponentMatchers.ANY + ) ))) ) ) @@ -361,9 +387,17 @@ public AdvancementHelper mineralFountainCreate(String key) { } public AdvancementHolder build(String id) { - AdvancementHolder holder = this.current.build(AnvilCraft.advancementOf(id)); + AdvancementHolder holder = this.current.build( + Identifier.fromNamespaceAndPath(this.lineHelper.namespace, this.lineHelper.namespace + "/" + id) + ); this.lineHelper.parent = holder; return holder; } + + public AdvancementHolder save(Consumer output, String id) { + AdvancementHolder advancement = this.build(id); + output.accept(advancement); + return advancement; + } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/advancement/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/advancement/package-info.java index 7ee5507ebf..c507431e6c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/advancement/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/advancement/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.advancement; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/AmuletManager.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/AmuletManager.java index 918abcd14c..bcf3c53c96 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/AmuletManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/amulet/AmuletManager.java @@ -1,16 +1,14 @@ package dev.dubhe.anvilcraft.api.amulet; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Sets; import dev.anvilcraft.lib.v2.util.CollectionUtil; -import dev.anvilcraft.lib.v2.util.InventoryUtil; -import dev.dubhe.anvilcraft.api.amulet.type.AmuletType; +import dev.dubhe.anvilcraft.api.amulet.def.IAmuletDefinition; +import dev.dubhe.anvilcraft.api.event.AmuletEvent; import dev.dubhe.anvilcraft.init.ModDataAttachments; -import dev.dubhe.anvilcraft.init.ModRegistries; import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.init.item.ModItems; -import dev.dubhe.anvilcraft.item.amulet.AmuletItem; -import dev.dubhe.anvilcraft.item.property.component.BoxContents; +import dev.dubhe.anvilcraft.init.registry.ModRegistryKeys; +import dev.dubhe.anvilcraft.item.property.component.amulet.DoNothingAmulet; +import dev.dubhe.anvilcraft.item.property.component.amulet.IAmulet; +import dev.dubhe.anvilcraft.item.property.component.amulet.WrappedOthersAmulet; import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; import net.minecraft.server.level.ServerPlayer; @@ -18,176 +16,174 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.ItemLike; +import net.neoforged.neoforge.common.NeoForge; +import org.jspecify.annotations.Nullable; +import java.lang.ref.SoftReference; import java.util.ArrayList; -import java.util.Collections; +import java.util.Comparator; import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.function.BiConsumer; -import java.util.function.Supplier; public class AmuletManager { - public static final AmuletManager INSTANCE = new AmuletManager(); - private final Set> amuletItems = Sets.newConcurrentHashSet(); - private final List>> amuletFinders = new ArrayList<>(); - - private AmuletManager() { - this.registerAmulets( - ModItems.EMERALD_AMULET::get, - ModItems.TOPAZ_AMULET::get, - ModItems.RUBY_AMULET::get, - ModItems.SAPPHIRE_AMULET::get, - ModItems.ANVIL_AMULET::get, - ModItems.COMRADE_AMULET::get, - ModItems.FEATHER_AMULET::get, - ModItems.CAT_AMULET::get, - ModItems.DOG_AMULET::get, - ModItems.SILENCE_AMULET::get, - ModItems.ABNORMAL_AMULET::get, - ModItems.GEM_AMULET::get, - ModItems.NATURE_AMULET::get - ); - this.registerFinders( - (player, holders) -> processFoundStack(player.getWeaponItem(), holders), - (player, holders) -> processFoundStack(player.getOffhandItem(), holders) - ); - } + private static @Nullable SoftReference INSTANCE; - @SafeVarargs - public final void registerAmulets(Supplier... amuletItems) { - Collections.addAll(this.amuletItems, amuletItems); + public static AmuletManager get(HolderLookup.Provider registries) { + if (AmuletManager.INSTANCE == null || AmuletManager.INSTANCE.get() == null) { + AmuletManager.INSTANCE = new SoftReference<>(new AmuletManager(AmuletManager.extractDefinitions(registries))); + } + return AmuletManager.INSTANCE.get(); } - @SafeVarargs - public final void registerFinders(BiConsumer>... typeFinders) { - Collections.addAll(this.amuletFinders, typeFinders); + public static List> extractDefinitions(HolderLookup.Provider registries) { + return registries.lookupOrThrow(ModRegistryKeys.AMULET_DEF) + .listElements() + .toList(); } - public static void processFoundStack(ItemStack found, List holders) { - if (found.is(ModItems.AMULET_BOX)) { - BoxContents contents = found.get(ModComponents.BOX_CONTENTS); - if (contents == null) return; - for (ItemStack stack : contents.amulets()) { - if (stack.getItem() instanceof AmuletItem) { - holders.add(stack.copy()); - } - } - } else if (found.getItem() instanceof AmuletItem) { - holders.add(found); - } + public static void clear() { + AmuletManager.INSTANCE = null; } - public HashMultimap, ItemStack> getAmuletsFromInventory(Player player) { - List amuletItems = new ArrayList<>(); - for (BiConsumer> amuletFinder : this.amuletFinders) { - amuletFinder.accept(player, amuletItems); - } - return CollectionUtil.newMultimap( - HashMultimap.create(), amuletItems, stack -> ((AmuletItem) stack.getItem()).getType() - ); + private final List> definitions; + + private AmuletManager(List> definitions) { + this.definitions = definitions; } - public List> getTypesFromInventory(Player player) { - return List.copyOf(this.getAmuletsFromInventory(player).keySet()); + public List getAmuletsFromInventory(Player player) { + List founds = new ArrayList<>(); + NeoForge.EVENT_BUS.post(new AmuletEvent.Find(this, player, founds::add)); + List amulets = new ArrayList<>(); + for (ItemStack found : founds) { + this.processFoundStack(found, amulets); + } + return amulets; } - public Optional> getTypeMatchedDamage(ServerPlayer player, DamageSource source, HolderLookup.Provider registries) { - Optional> lookupOptional = registries.lookup(ModRegistries.AMULET_TYPE_KEY); - return lookupOptional.flatMap(lookup -> lookup.listElements() - .filter(reference -> reference.value().canObtain(player, source)) - .findFirst()); + private void processFoundStack(ItemStack found, List amulets) { + AmuletEvent.ProcessFound event = new AmuletEvent.ProcessFound(this, found); + NeoForge.EVENT_BUS.post(event); + if (event.isCanceled()) { + return; + } + List extracted = event.getExtracted(); + if (extracted.isEmpty()) { + if (found.has(ModComponents.AMULET)) { + amulets.add(found); + } + return; + } + for (ItemStack amulet : extracted) { + if (!amulet.has(ModComponents.AMULET)) { + continue; + } + amulets.add(amulet); + } } - public void startRaffle(ServerPlayer player, DamageSource source) { - Optional typeOp = this.getTypeMatchedDamage(player, source, player.registryAccess()).map(Holder::value); - if (typeOp.isEmpty()) return; - AmuletType type = typeOp.get(); - ItemStack amulet = type.amulet().get(); - if (!InventoryUtil.getFirstItem(player.getInventory(), amulet.getItem()).isEmpty()) return; - if (!InventoryUtil.getItemInCompat(player, stack -> ItemStack.isSameItem(stack, amulet)).isEmpty()) return; + public void tryRaffle(ServerPlayer player, DamageSource source) { + Holder.Reference trying = null; + ItemStack amulet = null; RandomSource random = player.getRandom(); - int probability = Math.min(this.getRaffleProbability(player, source), 100); - if (probability > random.nextIntBetweenInclusive(0, 100)) { - player.getInventory().placeItemBackInInventory(amulet.copy()); - this.setRaffleProbability(player, source, 0); - } else { - this.setRaffleProbability(player, source, Math.min(probability + 10, 100)); + List> defs = this.getDefinitionMatchedDamage(player, source); + if (defs.isEmpty()) { + return; } - } - public static int getStoredRaffleProbability(Player player, AmuletType type) { - return player.getData(ModDataAttachments.AMULET_RAFFLE_PROBABILITY).getProbability(type); - } + List> shuffled = new ArrayList<>(defs); + shuffled.sort(Comparator.comparingInt(_ -> random.nextInt())); + for (Holder.Reference def : shuffled) { + amulet = def.value().create(); + if (!this.hasAmuletInInventory(player, amulet.getOrDefault(ModComponents.AMULET, DoNothingAmulet.INSTANCE))) { + trying = def; + break; + } + } - public int getRaffleProbability(Player player, DamageSource source) { - Optional> type = Optional.empty(); - if (player instanceof ServerPlayer serverPlayer) { - type = this.getTypeMatchedDamage(serverPlayer, source, serverPlayer.registryAccess()); + if (trying == null) { + return; } - return type.map(holder -> this.getRaffleProbability(player, holder)).orElse(0); - } - public int getRaffleProbability(Player player, Holder type) { - if (!this.hasAmuletInInventory(player, type)) { - return getStoredRaffleProbability(player, type.value()) + 20; + int probability = Math.min(this.getRaffleProbability(player, trying), 100); + if (random.nextInt(100) < probability) { + player.getInventory().placeItemBackInInventory(amulet.copy()); + this.setRaffleProbability(player, trying, 0); } else { - return 0; + probability = NeoForge.EVENT_BUS.post(new AmuletEvent.ModifyRaffleProbability( + this, + player, + source, + trying, + probability + 10 + )).getProbability(); + this.setRaffleProbability(player, trying, Math.clamp(probability, 0, 100)); } } - public void setRaffleProbability(ServerPlayer player, DamageSource source, int probability) { - Optional> typeHolder = this.getTypeMatchedDamage(player, source, player.registryAccess()); - typeHolder.ifPresent(holder -> this.setRaffleProbability(player, holder, probability)); + public List> getDefinitionMatchedDamage(ServerPlayer victim, DamageSource source) { + List> results = new ArrayList<>(); + for (Holder.Reference def : this.definitions) { + if (def.value().mayObtain(victim, source)) { + results.add(def); + } + } + return results; } - public void setRaffleProbability(ServerPlayer player, Holder type, int probability) { - AmuletRaffleProbability arp = player.getData(ModDataAttachments.AMULET_RAFFLE_PROBABILITY); - if (!this.hasAmuletInInventory(player, type)) { - arp.setProbability(type.value(), probability); - } else { - arp.setProbability(type.value(), 0); + public int getRaffleProbability(Player player, Holder def) { + if (this.hasAmuletInInventory(player, def)) { + return 0; } + return AmuletManager.getStoredRaffleProbability(player, def); + } + + public static int getStoredRaffleProbability(Player player, Holder def) { + return player.getData(ModDataAttachments.AMULET_RAFFLE_PROBABILITY).getProbability(def); } - public boolean hasAmuletInInventory(Player player, ItemLike itemLike) { - List> holders = this.getTypesFromInventory(player); - return !holders.isEmpty() && CollectionUtil.anyMatch(holders, holder -> holder.value().matches(itemLike)); + public boolean hasAmuletInInventory(Player player, IAmulet amulet) { + List amulets = this.getAmuletsFromInventory(player); + return CollectionUtil.anyMatch(amulets, stack -> stack.get(ModComponents.AMULET).canActAs(amulet)); } - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - public boolean hasAmuletInInventory(Player player, Holder type) { - List> holders = this.getTypesFromInventory(player); - return !holders.isEmpty() && CollectionUtil.anyMatch(holders, holder -> holder.equals(type)); + public boolean hasAmuletInInventory(Player player, Holder def) { + ItemStack target = def.value().create(); + List amulets = this.getAmuletsFromInventory(player); + return CollectionUtil.anyMatch(amulets, stack -> ItemStack.isSameItem(stack, target)); } - public void resetState(ServerPlayer player) { - for (Supplier amuletGetter : this.amuletItems) { - AmuletType type = amuletGetter.get().getType().value(); - type.inventoryTick(player, type.amulet().get(), false); + public void setRaffleProbability(ServerPlayer player, Holder def, int probability) { + AmuletRaffleProbability arp = player.getData(ModDataAttachments.AMULET_RAFFLE_PROBABILITY); + if (!this.hasAmuletInInventory(player, def)) { + arp.setProbability(def, probability); + } else { + arp.setProbability(def, 0); } } public void inventoryTick(ServerPlayer player) { - resetState(player); - HashMultimap, ItemStack> amulets = this.getAmuletsFromInventory(player); - for (Supplier amuletGetter : this.amuletItems) { - AmuletItem amuletItem = amuletGetter.get(); - Holder type = amuletItem.getType(); - if (amulets.containsKey(type)) { - for (ItemStack amulet : amulets.get(type)) { - type.value().inventoryTick(player, amulet, true); - } - } else { - type.value().inventoryTick(player, type.value().amulet().get(), false); - } + List all = new ArrayList<>(); + for (Holder def : this.definitions) { + all.add(def.value().create()); + } + List now = this.getAmuletsFromInventory(player); + for (ItemStack stack : now) { + IAmulet amulet = stack.get(ModComponents.AMULET); + all.removeIf(other -> amulet.canActAs(other.get(ModComponents.AMULET))); + stack.get(ModComponents.AMULET).inventoryTick(player, stack, true); + } + for (ItemStack stack : all) { + IAmulet amulet = stack.get(ModComponents.AMULET); + if (amulet instanceof WrappedOthersAmulet) return; + amulet.inventoryTick(player, stack, false); } } - public boolean shouldIgnoreDamage(ServerPlayer player, DamageSource source) { - List> holders = this.getTypesFromInventory(player); - return !holders.isEmpty() && CollectionUtil.anyMatch(holders, holder -> holder.value().shouldImmuneDamage(player, source)); + public boolean shouldImmune(ServerPlayer player, DamageSource source) { + return CollectionUtil.anyMatch( + this.getAmuletsFromInventory(player), + stack -> stack.get(ModComponents.AMULET).shouldImmune(player, source) + ); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/AmuletRaffleProbability.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/AmuletRaffleProbability.java index 7961739f03..1e53997463 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/AmuletRaffleProbability.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/amulet/AmuletRaffleProbability.java @@ -1,41 +1,51 @@ package dev.dubhe.anvilcraft.api.amulet; import com.mojang.serialization.Codec; -import dev.dubhe.anvilcraft.api.amulet.type.AmuletType; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.dubhe.anvilcraft.api.amulet.def.IAmuletDefinition; +import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import net.minecraft.core.Holder; +import java.util.Map; import java.util.function.Function; -/** - * 存储了玩家目前护符抽取的额外概率 - * - * @param map 存储概率,键为类型,值为该类型目前的概率 - */ -public record AmuletRaffleProbability(Object2IntOpenHashMap map) { +/// 存储了玩家目前护符抽取的额外概率 +/// +/// @param map 存储概率,键为类型,值为该类型目前的概率 +public record AmuletRaffleProbability(Object2IntMap> map) { public static final AmuletRaffleProbability EMPTY = new AmuletRaffleProbability(new Object2IntOpenHashMap<>()); - public static final Codec CODEC = Codec.unboundedMap(AmuletType.CODEC, Codec.INT) - .xmap(Object2IntOpenHashMap::new, Function.identity()) - .xmap(AmuletRaffleProbability::new, AmuletRaffleProbability::map); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group( + Codec.unboundedMap(IAmuletDefinition.CODEC, Codec.INT) + .fieldOf("probabilities") + .xmap(AmuletRaffleProbability::fromMap, Function.identity()) + .forGetter(AmuletRaffleProbability::map) + ).apply(inst, AmuletRaffleProbability::new)); - /** - * 获取该类型在此处存储的概率。 - * - * @param type 类型 - * @return 概率 - */ - public int getProbability(AmuletType type) { - return this.map.getInt(type); + /// 获取该类型在此处存储的概率。 + /// + /// @param type 类型 + /// @return 概率 + public int getProbability(Holder type) { + int probability = this.map.getInt(type); + if (probability <= 0) { + probability = 20; + } + return probability; } - /** - * 向此处存储该类型的概率。 - * - * @param type 类型 - * @param probability 新概率 - * @return 旧概率 - */ + /// 向此处存储该类型的概率。 + /// + /// @param type 类型 + /// @param probability 新概率 + /// @return 旧概率 @SuppressWarnings("UnusedReturnValue") - public int setProbability(AmuletType type, int probability) { + public int setProbability(Holder type, int probability) { return this.map.put(type, probability); } + + private static Object2IntMap> fromMap(Map, Integer> map) { + return new Object2IntOpenHashMap<>(map); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/AmuletDefinition.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/AmuletDefinition.java new file mode 100644 index 0000000000..46d5aaf49c --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/AmuletDefinition.java @@ -0,0 +1,231 @@ +package dev.dubhe.anvilcraft.api.amulet.def; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.anvilcraft.lib.v2.codec.StreamCodecUtil; +import dev.dubhe.anvilcraft.init.item.ModAmuletDefinitionTypes; +import net.minecraft.advancements.criterion.DamageSourcePredicate; +import net.minecraft.advancements.criterion.EntityPredicate; +import net.minecraft.advancements.criterion.EntitySubPredicate; +import net.minecraft.advancements.criterion.EntityTypePredicate; +import net.minecraft.advancements.criterion.ItemPredicate; +import net.minecraft.advancements.criterion.SlotsPredicate; +import net.minecraft.advancements.criterion.TagPredicate; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.component.DataComponentPatch; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.TypedDataComponent; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.inventory.SlotRange; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; +import net.minecraft.world.level.ItemLike; +import org.jspecify.annotations.Nullable; + +import java.util.Map; +import java.util.Optional; +import java.util.function.Consumer; + +public record AmuletDefinition( + ItemStackTemplate amulet, + Optional obtain +) implements IAmuletDefinition { + public AmuletDefinition(ItemLike amulet, DataComponentPatch components, DamageSourcePredicate obtain) { + this(new ItemStackTemplate(amulet.asItem(), components), Optional.of(obtain)); + } + + public AmuletDefinition(ItemLike amulet, DamageSourcePredicate obtain) { + this(new ItemStackTemplate(amulet.asItem()), Optional.of(obtain)); + } + + public AmuletDefinition(ItemLike amulet, DataComponentPatch components) { + this(new ItemStackTemplate(amulet.asItem(), components), Optional.empty()); + } + + public AmuletDefinition(ItemLike amulet) { + this(new ItemStackTemplate(amulet.asItem()), Optional.empty()); + } + + public static Builder builder(ItemLike amulet) { + return new Builder(amulet); + } + + @Override + public ItemStack create() { + return this.amulet.withCount(1).create(); + } + + @Override + public boolean mayObtain(ServerPlayer victim, DamageSource source) { + return this.obtain().map(predicate -> predicate.matches(victim, source)).orElse(false); + } + + @Override + public Type getType() { + return ModAmuletDefinitionTypes.NORMAL.get(); + } + + public static class Type implements IAmuletDefinition.Type { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group( + ItemStackTemplate.CODEC + .fieldOf("amulet") + .forGetter(AmuletDefinition::amulet), + DamageSourcePredicate.CODEC + .optionalFieldOf("obtain") + .forGetter(AmuletDefinition::obtain) + ).apply(inst, AmuletDefinition::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ItemStackTemplate.STREAM_CODEC, + AmuletDefinition::amulet, + ByteBufCodecs.optional(StreamCodecUtil.DAMAGE_SOURCE_PREDICATE), + AmuletDefinition::obtain, + AmuletDefinition::new + ); + + @Override + public MapCodec codec() { + return Type.CODEC; + } + + @Override + public StreamCodec streamCodec() { + return Type.STREAM_CODEC; + } + } + + public static class Builder { + private final ItemLike amulet; + private DataComponentPatch.@Nullable Builder components = null; + private DamageSourcePredicate.@Nullable Builder obtain = null; + + public Builder(ItemLike amulet) { + this.amulet = amulet; + } + + public Builder component(DataComponentType type, T value) { + if (this.components == null) { + this.components = DataComponentPatch.builder(); + } + this.components.set(type, value); + return this; + } + + public Builder component(TypedDataComponent component) { + if (this.components == null) { + this.components = DataComponentPatch.builder(); + } + this.components.set(component); + return this; + } + + public Builder component(Iterable> components) { + if (this.components == null) { + this.components = DataComponentPatch.builder(); + } + this.components.set(components); + return this; + } + + public Builder obtain(TagPredicate types) { + if (this.obtain == null) { + this.obtain = DamageSourcePredicate.Builder.damageType(); + } + this.obtain.tag(types); + return this; + } + + public Builder obtain(TagKey types) { + return this.obtain(TagPredicate.is(types)); + } + + public Builder obtainNot(TagKey types) { + return this.obtain(TagPredicate.isNot(types)); + } + + // CHECKSTYLE.SUPPRESS: OverloadMethodsDeclarationOrder + public Builder obtain(TagKey types, boolean expected) { + return this.obtain(new TagPredicate<>(types, expected)); + } + + public Builder obtain(Consumer source) { + if (this.obtain == null) { + this.obtain = DamageSourcePredicate.Builder.damageType(); + } + EntityPredicate.Builder builder = EntityPredicate.Builder.entity(); + source.accept(builder); + this.obtain.source(builder); + return this; + } + + public Builder obtain(HolderGetter> lookup, EntityType type) { + return this.obtain(builder -> builder.entityType(EntityTypePredicate.of(lookup, type))); + } + + public Builder obtain(HolderGetter> lookup, TagKey> types) { + return this.obtain(builder -> builder.entityType(EntityTypePredicate.of(lookup, types))); + } + + public Builder obtain(EntitySubPredicate sub) { + return this.obtain(builder -> builder.subPredicate(sub)); + } + + public Builder obtain(Map slots) { + return this.obtain(builder -> builder.slots(new SlotsPredicate(slots))); + } + + public Builder obtain(SlotRange slot, ItemPredicate.Builder item) { + return this.obtain(builder -> builder.slots(new SlotsPredicate(Map.of(slot, item.build())))); + } + + public Builder obtainDirect(Consumer direct) { + if (this.obtain == null) { + this.obtain = DamageSourcePredicate.Builder.damageType(); + } + EntityPredicate.Builder builder = EntityPredicate.Builder.entity(); + direct.accept(builder); + this.obtain.direct(builder); + return this; + } + + public Builder obtainDirect(HolderGetter> lookup, EntityType type) { + return this.obtainDirect(builder -> builder.entityType(EntityTypePredicate.of(lookup, type))); + } + + public Builder obtainDirect(HolderGetter> lookup, TagKey> types) { + return this.obtainDirect(builder -> builder.entityType(EntityTypePredicate.of(lookup, types))); + } + + public Builder obtainDirect(EntitySubPredicate sub) { + return this.obtainDirect(builder -> builder.subPredicate(sub)); + } + + public Builder obtainDirect(Map slots) { + return this.obtainDirect(builder -> builder.slots(new SlotsPredicate(slots))); + } + + public Builder obtainDirect(SlotRange slot, ItemPredicate.Builder item) { + return this.obtainDirect(builder -> builder.slots(new SlotsPredicate(Map.of(slot, item.build())))); + } + + public AmuletDefinition build() { + if (this.components == null) { + if (this.obtain == null) { + return new AmuletDefinition(this.amulet); + } + return new AmuletDefinition(this.amulet, this.obtain.build()); + } else { + if (this.obtain == null) { + return new AmuletDefinition(this.amulet, this.components.build()); + } + return new AmuletDefinition(this.amulet, this.components.build(), this.obtain.build()); + } + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/IAmuletDefinition.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/IAmuletDefinition.java new file mode 100644 index 0000000000..9e4acb9bd9 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/IAmuletDefinition.java @@ -0,0 +1,50 @@ +package dev.dubhe.anvilcraft.api.amulet.def; + +import com.mojang.serialization.Codec; +import dev.anvilcraft.lib.v2.util.ISerializer; +import dev.dubhe.anvilcraft.init.registry.ModRegistries; +import dev.dubhe.anvilcraft.init.registry.ModRegistryKeys; +import net.minecraft.core.Holder; +import net.minecraft.resources.RegistryFileCodec; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.VisibleForDebug; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.item.ItemStack; + +public interface IAmuletDefinition { + Codec DIRECT_CODEC = ModRegistries.AMULET_DEF_TYPE + .byNameCodec() + .dispatch(IAmuletDefinition::getType, Type::codec); + Codec> CODEC = RegistryFileCodec.create(ModRegistryKeys.AMULET_DEF, IAmuletDefinition.DIRECT_CODEC); + Codec HOLDER_HELPER_CODEC = CODEC.xmap( + HolderHolder::new, + value -> value instanceof HolderHolder(Holder def) ? def : Holder.direct(value) + ); + + ItemStack create(); + + boolean mayObtain(ServerPlayer victim, DamageSource source); + + Type getType(); + + interface Type extends ISerializer { + } + + @VisibleForDebug + record HolderHolder(Holder def) implements IAmuletDefinition { + @Override + public ItemStack create() { + return this.def.value().create(); + } + + @Override + public boolean mayObtain(ServerPlayer victim, DamageSource source) { + return this.def.value().mayObtain(victim, source); + } + + @Override + public Type getType() { + return this.def.value().getType(); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/package-info.java new file mode 100644 index 0000000000..99d8392a3d --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/amulet/def/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.api.amulet.def; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/Effect.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/Effect.java deleted file mode 100644 index e7a3b9183a..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/Effect.java +++ /dev/null @@ -1,17 +0,0 @@ -package dev.dubhe.anvilcraft.api.amulet.fromto; - -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.item.ItemStack; - -public record Effect(InventoryTick inventoryTick, ImmuneDamage immuneDamage) { - public static final Effect NOP = new Effect(InventoryTick.NOP, ImmuneDamage.NEVER); - - public void inventoryTick(ServerPlayer player, ItemStack amulet, boolean isEnabled) { - this.inventoryTick.inventoryTick(player, amulet, isEnabled); - } - - public boolean shouldImmuneDamage(ServerPlayer player, DamageSource source) { - return this.immuneDamage.shouldImmuneDamage(player, source); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/ImmuneDamage.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/ImmuneDamage.java deleted file mode 100644 index 8367084064..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/ImmuneDamage.java +++ /dev/null @@ -1,128 +0,0 @@ -package dev.dubhe.anvilcraft.api.amulet.fromto; - -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.damagesource.DamageSource; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.BiPredicate; - -public interface ImmuneDamage extends BiPredicate { - ImmuneDamage NEVER = (player, source) -> false; - - boolean shouldImmuneDamage(ServerPlayer player, DamageSource source); - - @Override - default boolean test(ServerPlayer player, DamageSource source) { - return this.shouldImmuneDamage(player, source); - } - - @Override - default ImmuneDamage and(BiPredicate other) { - return new Multiple(this).and(other); - } - - @Override - default ImmuneDamage negate() { - return new Negate(this); - } - - @Override - default ImmuneDamage or(BiPredicate other) { - return new Multiple(this).or(other); - } - - class Negate implements ImmuneDamage { - protected final ImmuneDamage self; - private boolean isNegate = true; - - protected Negate(ImmuneDamage self) { - this.self = self; - } - - @Override - public boolean shouldImmuneDamage(ServerPlayer player, DamageSource source) { - return this.self.shouldImmuneDamage(player, source) ^ this.isNegate; - } - - @Override - public ImmuneDamage negate() { - this.isNegate = !this.isNegate; - return this; - } - } - - class Multiple implements ImmuneDamage { - private ImmuneDamage first; - private final List subs = new ArrayList<>(); - - Multiple(ImmuneDamage first) { - this.first = first; - } - - @Override - public boolean shouldImmuneDamage(ServerPlayer player, DamageSource source) { - boolean result = this.first.shouldImmuneDamage(player, source); - for (Sub sub : this.subs) { - result = sub.shouldImmuneDamage(player, source, result); - } - return result; - } - - @Override - public ImmuneDamage and(BiPredicate other) { - this.subs.add(new And(other)); - return this; - } - - @Override - public ImmuneDamage negate() { - this.first = this.first.negate(); - this.subs.getLast().negate(); - return this; - } - - @Override - public ImmuneDamage or(BiPredicate other) { - this.subs.add(new Or(other)); - return this; - } - - private abstract static class Sub { - protected final BiPredicate self; - protected boolean isNegate = true; - - protected Sub(BiPredicate self) { - this.self = self; - } - - abstract boolean shouldImmuneDamage(ServerPlayer player, DamageSource source, boolean otherResult); - - void negate() { - this.isNegate = !this.isNegate; - } - } - - private static class And extends Sub { - private And(BiPredicate self) { - super(self); - } - - @Override - public boolean shouldImmuneDamage(ServerPlayer player, DamageSource source, boolean otherResult) { - return (otherResult && this.self.test(player, source)) ^ this.isNegate; - } - } - - private static class Or extends Sub { - private Or(BiPredicate self) { - super(self); - } - - @Override - public boolean shouldImmuneDamage(ServerPlayer player, DamageSource source, boolean otherResult) { - return (otherResult || this.self.test(player, source)) ^ this.isNegate; - } - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/InventoryTick.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/InventoryTick.java deleted file mode 100644 index 8eb251aaf8..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/InventoryTick.java +++ /dev/null @@ -1,45 +0,0 @@ -package dev.dubhe.anvilcraft.api.amulet.fromto; - -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import org.apache.commons.lang3.function.TriConsumer; - -import java.util.ArrayList; -import java.util.List; - -public interface InventoryTick extends TriConsumer { - InventoryTick NOP = (player, amulet, isEnabled) -> {}; - - void inventoryTick(ServerPlayer player, ItemStack amulet, boolean isEnabled); - - @Override - default void accept(ServerPlayer player, ItemStack amulet, Boolean isEnabled) { - this.inventoryTick(player, amulet, isEnabled); - } - - @Override - default InventoryTick andThen(TriConsumer after) { - return new Multiple(this).andThen(after); - } - - class Multiple implements InventoryTick { - private final List subs = new ArrayList<>(); - - Multiple(InventoryTick inventoryTick) { - this.subs.add(inventoryTick); - } - - @Override - public void inventoryTick(ServerPlayer player, ItemStack amulet, boolean isEnabled) { - for (InventoryTick sub : this.subs) { - sub.inventoryTick(player, amulet, isEnabled); - } - } - - @Override - public InventoryTick andThen(TriConsumer after) { - this.subs.add(after::accept); - return this; - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/Obtain.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/Obtain.java deleted file mode 100644 index a3bb7a5705..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/Obtain.java +++ /dev/null @@ -1,127 +0,0 @@ -package dev.dubhe.anvilcraft.api.amulet.fromto; - -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.damagesource.DamageSource; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.BiPredicate; - -public interface Obtain extends BiPredicate { - Obtain NEVER = (player, source) -> false; - - boolean canObtain(ServerPlayer player, DamageSource source); - - @Override - default boolean test(ServerPlayer player, DamageSource source) { - return this.canObtain(player, source); - } - - @Override - default Obtain and(BiPredicate other) { - return new Multiple(this).and(other); - } - - @Override - default Obtain negate() { - return new Negate(this); - } - - @Override - default Obtain or(BiPredicate other) { - return new Multiple(this).or(other); - } - - class Negate implements Obtain { - protected final Obtain self; - private boolean isNegate = true; - - protected Negate(Obtain self) { - this.self = self; - } - - @Override - public boolean canObtain(ServerPlayer player, DamageSource source) { - return this.self.canObtain(player, source) ^ this.isNegate; - } - - @Override - public Obtain negate() { - this.isNegate = !this.isNegate; - return this; - } - } - - class Multiple implements Obtain { - private final Obtain first; - private final List subs = new ArrayList<>(); - - Multiple(Obtain first) { - this.first = first; - } - - @Override - public boolean canObtain(ServerPlayer player, DamageSource source) { - boolean result = this.first.canObtain(player, source); - for (Sub sub : this.subs) { - result = sub.canObtain(player, source, result); - } - return result; - } - - @Override - public Obtain and(BiPredicate other) { - this.subs.add(new And(other)); - return this; - } - - @Override - public Obtain negate() { - this.subs.getLast().negate(); - return this; - } - - @Override - public Obtain or(BiPredicate other) { - this.subs.add(new Or(other)); - return this; - } - - private abstract static class Sub { - protected final BiPredicate self; - protected boolean isNegate = false; - - protected Sub(BiPredicate self) { - this.self = self; - } - - abstract boolean canObtain(ServerPlayer player, DamageSource source, boolean otherResult); - - void negate() { - this.isNegate = !this.isNegate; - } - } - - private static class And extends Sub { - private And(BiPredicate self) { - super(self); - } - - @Override - public boolean canObtain(ServerPlayer player, DamageSource source, boolean otherResult) { - return (otherResult && this.self.test(player, source)) ^ this.isNegate; - } - } - - private static class Or extends Sub { - private Or(BiPredicate self) { - super(self); - } - - @Override - public boolean canObtain(ServerPlayer player, DamageSource source, boolean otherResult) { - return (otherResult || this.self.test(player, source)) ^ this.isNegate; - } - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/package-info.java deleted file mode 100644 index f54abbbe97..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/fromto/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.api.amulet.fromto; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/package-info.java index bb2a17b98f..b684c9e474 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/amulet/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.amulet; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/AmuletType.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/AmuletType.java deleted file mode 100644 index 1a77137615..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/AmuletType.java +++ /dev/null @@ -1,302 +0,0 @@ -package dev.dubhe.anvilcraft.api.amulet.type; - -import com.mojang.serialization.Codec; -import dev.anvilcraft.lib.v2.util.Util; -import dev.dubhe.anvilcraft.AnvilCraft; -import dev.dubhe.anvilcraft.api.amulet.fromto.Effect; -import dev.dubhe.anvilcraft.api.amulet.fromto.ImmuneDamage; -import dev.dubhe.anvilcraft.api.amulet.fromto.InventoryTick; -import dev.dubhe.anvilcraft.api.amulet.fromto.Obtain; -import dev.dubhe.anvilcraft.init.ModRegistries; -import lombok.Getter; -import lombok.experimental.Accessors; -import net.minecraft.core.registries.Registries; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.tags.TagKey; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.damagesource.DamageType; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.ItemLike; -import net.neoforged.neoforge.common.util.Lazy; - -import java.util.Optional; -import java.util.function.Supplier; - -@Getter -@Accessors(fluent = true, chain = false) -public class AmuletType { - public static final Codec CODEC = Codec.lazyInitialized(ModRegistries.AMULET_TYPE_REGISTRY::byNameCodec); - public static final StreamCodec STREAM_CODEC = ByteBufCodecs.registry( - ModRegistries.AMULET_TYPE_KEY); - private final Obtain obtain; - private final Effect effect; - private final Supplier amulet; - - protected AmuletType(Obtain obtain, Effect effect, Supplier amulet) { - this.obtain = obtain; - this.effect = effect; - this.amulet = Lazy.of(amulet); - } - - public static Builder builder() { - return new Builder(); - } - - public boolean canObtain(ServerPlayer player, DamageSource source) { - return this.obtain.canObtain(player, source); - } - - public boolean matches(ItemLike item) { - return this.amulet.get().is(item.asItem()); - } - - public void inventoryTick(ServerPlayer player, ItemStack amulet, boolean isEnabled) { - this.effect.inventoryTick(player, amulet, isEnabled); - } - - public boolean shouldImmuneDamage(ServerPlayer player, DamageSource source) { - return this.effect.shouldImmuneDamage(player, source); - } - - public static class Builder { - private Obtain obtain = Obtain.NEVER; - private InventoryTick inventoryTick = InventoryTick.NOP; - private ImmuneDamage immuneDamage = ImmuneDamage.NEVER; - private Supplier amulet; - - Builder() { - } - - @SafeVarargs - public final Builder obtainByDamage(ResourceKey... damages) { - return this.obtain((player, source) -> { - for (ResourceKey type : damages) { - if (source.typeHolder().is(type)) return true; - } - return false; - }); - } - - public Builder obtainByDamage(TagKey tag) { - return this.obtain((player, source) -> source.typeHolder().is(tag)); - } - - public Builder obtainByDamage(ResourceLocation type) { - return this.obtainByDamage(TagKey.create(Registries.DAMAGE_TYPE, type)); - } - - public Builder obtainByDamage(String type) { - return this.obtainByDamage(TagKey.create(Registries.DAMAGE_TYPE, AnvilCraft.of("amulet_valid/" + type))); - } - - public Builder obtainByMurder(EntityType... entities) { - return this.obtain((player, source) -> Optional.ofNullable(source.getEntity()) - .flatMap(e -> Util.castSafely(e, LivingEntity.class)) - .map(e -> { - for (EntityType type : entities) { - if (e.getType().equals(type)) return true; - } - return false; - }) - .orElse(false)); - } - - public Builder obtainByMurder(TagKey> tag) { - return this.obtain((player, source) -> Optional.ofNullable(source.getEntity()) - .flatMap(e -> Util.castSafely(e, LivingEntity.class)) - .map(e -> e.getType().is(tag)) - .orElse(false)); - } - - public Builder obtainByMurder(ResourceLocation type) { - return this.obtainByMurder(TagKey.create(Registries.ENTITY_TYPE, type)); - } - - public Builder obtainByMurder(String type) { - return this.obtainByMurder(TagKey.create(Registries.ENTITY_TYPE, AnvilCraft.of("amulet_valid/" + type))); - } - - public Builder obtainByDirectMurder(EntityType... entities) { - return this.obtain((player, source) -> Optional.ofNullable(source.getDirectEntity()) - .flatMap(e -> Util.castSafely(e, LivingEntity.class)) - .map(e -> { - for (EntityType type : entities) { - if (e.getType().equals(type)) return true; - } - return false; - }) - .orElse(false)); - } - - public Builder obtainByDirectMurder(TagKey> tag) { - return this.obtain((player, source) -> Optional.ofNullable(source.getDirectEntity()) - .flatMap(e -> Util.castSafely(e, LivingEntity.class)) - .map(e -> e.getType().is(tag)) - .orElse(false)); - } - - public Builder obtainByDirectMurder(ResourceLocation type) { - return this.obtainByDirectMurder(TagKey.create(Registries.ENTITY_TYPE, type)); - } - - public Builder obtainByDirectMurder(String type) { - return this.obtainByDirectMurder(TagKey.create(Registries.ENTITY_TYPE, AnvilCraft.of("amulet_valid/" + type))); - } - - public Builder obtain(Obtain obtain) { - if (this.obtain == Obtain.NEVER) { - this.obtain = obtain; - return this; - } - this.obtain = this.obtain.and(obtain); - return this; - } - - @SafeVarargs - public final Builder obtainByDamageOr(ResourceKey... damages) { - return this.obtainOr((player, source) -> { - for (ResourceKey type : damages) { - if (source.typeHolder().is(type)) return true; - } - return false; - }); - } - - public Builder obtainByDamageOr(TagKey tag) { - return this.obtainOr((player, source) -> source.typeHolder().is(tag)); - } - - public Builder obtainByDamageOr(ResourceLocation type) { - return this.obtainByDamageOr(TagKey.create(Registries.DAMAGE_TYPE, type)); - } - - public Builder obtainByDamageOr(String type) { - return this.obtainByDamageOr(TagKey.create(Registries.DAMAGE_TYPE, AnvilCraft.of("amulet_valid/" + type))); - } - - public Builder obtainByMurderOr(EntityType... entities) { - return this.obtainOr((player, source) -> Optional.ofNullable(source.getEntity()) - .flatMap(e -> Util.castSafely(e, LivingEntity.class)) - .map(e -> { - for (EntityType type : entities) { - if (e.getType().equals(type)) return true; - } - return false; - }) - .orElse(false)); - } - - public Builder obtainByMurderOr(TagKey> tag) { - return this.obtainOr((player, source) -> Optional.ofNullable(source.getEntity()) - .flatMap(e -> Util.castSafely(e, LivingEntity.class)) - .map(e -> e.getType().is(tag)) - .orElse(false)); - } - - public Builder obtainByMurderOr(ResourceLocation type) { - return this.obtainByMurderOr(TagKey.create(Registries.ENTITY_TYPE, type)); - } - - public Builder obtainByMurderOr(String type) { - return this.obtainByMurderOr(TagKey.create(Registries.ENTITY_TYPE, AnvilCraft.of("amulet_valid/" + type))); - } - - public Builder obtainByDirectMurderOr(EntityType... entities) { - return this.obtainOr((player, source) -> Optional.ofNullable(source.getDirectEntity()) - .flatMap(e -> Util.castSafely(e, LivingEntity.class)) - .map(e -> { - for (EntityType type : entities) { - if (e.getType().equals(type)) return true; - } - return false; - }) - .orElse(false)); - } - - public Builder obtainByDirectMurderOr(TagKey> tag) { - return this.obtainOr((player, source) -> Optional.ofNullable(source.getDirectEntity()) - .flatMap(e -> Util.castSafely(e, LivingEntity.class)) - .map(e -> e.getType().is(tag)) - .orElse(false)); - } - - public Builder obtainByDirectMurderOr(ResourceLocation type) { - return this.obtainByDirectMurderOr(TagKey.create(Registries.ENTITY_TYPE, type)); - } - - public Builder obtainByDirectMurderOr(String type) { - return this.obtainByDirectMurderOr(TagKey.create(Registries.ENTITY_TYPE, AnvilCraft.of("amulet_valid/" + type))); - } - - public Builder obtainOr(Obtain obtain) { - if (this.obtain == Obtain.NEVER) { - this.obtain = obtain; - return this; - } - this.obtain = this.obtain.or(obtain); - return this; - } - - public Builder inventoryTick(InventoryTick inventoryTick) { - if (this.inventoryTick == InventoryTick.NOP) { - this.inventoryTick = inventoryTick; - return this; - } - this.inventoryTick = this.inventoryTick.andThen(inventoryTick); - return this; - } - - public Builder immuneDamage(ImmuneDamage immuneDamage) { - if (this.immuneDamage == ImmuneDamage.NEVER) { - this.immuneDamage = immuneDamage; - return this; - } - this.immuneDamage = this.immuneDamage.and(immuneDamage); - return this; - } - - public Builder immuneDamageOr(ImmuneDamage immuneDamage) { - if (this.immuneDamage == ImmuneDamage.NEVER) { - this.immuneDamage = immuneDamage; - return this; - } - this.immuneDamage = this.immuneDamage.or(immuneDamage); - return this; - } - - public Builder immuneDamageFromObtain() { - this.immuneDamage = this.obtain::canObtain; - return this; - } - - public Builder amulet(Supplier amuletGetter) { - this.amulet = amuletGetter; - return this; - } - - public Builder amulet(ItemStack amulet) { - return this.amulet(() -> amulet); - } - - public Builder amulet(ItemLike amulet) { - return this.amulet(() -> amulet.asItem().getDefaultInstance()); - } - - public AmuletType build() { - if (this.amulet == null) { - throw new IllegalArgumentException("The amulet of the amulet type cannot be null!"); - } - Obtain obtain = this.obtain; - InventoryTick inventoryTick = this.inventoryTick; - ImmuneDamage immuneDamage = this.immuneDamage; - return new AmuletType(obtain, new Effect(inventoryTick, immuneDamage), this.amulet); - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/FourToOneAmuletType.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/FourToOneAmuletType.java deleted file mode 100644 index f0f29ad281..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/FourToOneAmuletType.java +++ /dev/null @@ -1,53 +0,0 @@ -package dev.dubhe.anvilcraft.api.amulet.type; - -import com.google.common.collect.Lists; -import dev.dubhe.anvilcraft.api.amulet.fromto.Effect; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.ItemLike; - -import java.util.List; -import java.util.function.Supplier; - -public class FourToOneAmuletType extends AmuletType { - private final List types; - - protected FourToOneAmuletType(List> types, Supplier amulet) { - super((player, source) -> false, Effect.NOP, amulet); - this.types = Lists.transform(types.subList(0, 4), Supplier::get); - } - - @SafeVarargs - public static FourToOneAmuletType of(Supplier amulet, Supplier... types) { - return new FourToOneAmuletType(List.of(types), amulet); - } - - @Override - public boolean canObtain(ServerPlayer player, DamageSource source) { - return false; - } - - @Override - public boolean matches(ItemLike item) { - for (AmuletType type : this.types) { - if (type.matches(item)) return true; - } - return super.matches(item); - } - - @Override - public void inventoryTick(ServerPlayer player, ItemStack amulet, boolean isEnabled) { - for (AmuletType type : this.types) { - type.inventoryTick(player, amulet, isEnabled); - } - } - - @Override - public boolean shouldImmuneDamage(ServerPlayer player, DamageSource source) { - for (AmuletType type : this.types) { - if (type.shouldImmuneDamage(player, source)) return true; - } - return false; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/package-info.java deleted file mode 100644 index cf98d02ed1..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/amulet/type/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.api.amulet.type; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/anvil/IAnvilBehavior.java b/src/main/java/dev/dubhe/anvilcraft/api/anvil/IAnvilBehavior.java index cdae076cce..fd80f70688 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/anvil/IAnvilBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/anvil/IAnvilBehavior.java @@ -3,7 +3,7 @@ import dev.dubhe.anvilcraft.api.event.AnvilBehaviorRegisterEvent; import dev.dubhe.anvilcraft.api.event.AnvilEvent; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.neoforge.common.NeoForge; @@ -19,10 +19,10 @@ public interface IAnvilBehavior { Map, IAnvilBehavior> BEHAVIORS = new LinkedHashMap<>(); boolean handle( - Level level, + ServerLevel level, BlockPos hitBlockPos, BlockState hitBlockState, - float fallDistance, + double fallDistance, AnvilEvent.OnLand event ); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/anvil/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/anvil/package-info.java index 720f95b525..281a8751eb 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/anvil/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/anvil/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.anvil; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/behavior/BehaviorTree.java b/src/main/java/dev/dubhe/anvilcraft/api/behavior/BehaviorTree.java index ec10ddfdc2..7498181f6a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/behavior/BehaviorTree.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/behavior/BehaviorTree.java @@ -11,7 +11,7 @@ public BehaviorTree(TreeNode root) { public boolean run(T context) { AtomicBoolean matches = new AtomicBoolean(false); - walkNode(new ExecutionContext<>(context), root, matches); + this.walkNode(new ExecutionContext<>(context), this.root, matches); return matches.get(); } @@ -19,7 +19,7 @@ public void walkNode(ExecutionContext context, TreeNode node, AtomicBoolea if (node.matches(context)) { returns.set(true); for (TreeNode child : node.getChildren()) { - walkNode(context, child, returns); + this.walkNode(context, child, returns); } node.run(context); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/behavior/ExecutableTreeNode.java b/src/main/java/dev/dubhe/anvilcraft/api/behavior/ExecutableTreeNode.java index 1dcce03203..1de5d4ff37 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/behavior/ExecutableTreeNode.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/behavior/ExecutableTreeNode.java @@ -19,6 +19,6 @@ public boolean matches(ExecutionContext context) { @Override public void run(ExecutionContext context) { - executes.accept(context); + this.executes.accept(context); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/behavior/ExecutionContext.java b/src/main/java/dev/dubhe/anvilcraft/api/behavior/ExecutionContext.java index a41b9d5a3d..e352d15345 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/behavior/ExecutionContext.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/behavior/ExecutionContext.java @@ -12,11 +12,11 @@ public ExecutionContext(T context) { } public void putAttachment(String key, Object item) { - attachment.put(key, item); + this.attachment.put(key, item); } public T1 getAttachment(String key, Class ty) { - Object item = attachment.get(key); + Object item = this.attachment.get(key); if (ty.isInstance(item)) { return ty.cast(item); } @@ -30,10 +30,10 @@ public T1 getAttachment(String key, Class ty) { } public boolean has(String key) { - return attachment.containsKey(key); + return this.attachment.containsKey(key); } public T unwrap() { - return context; + return this.context; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/behavior/PredicateExecutableTreeNode.java b/src/main/java/dev/dubhe/anvilcraft/api/behavior/PredicateExecutableTreeNode.java index 2cb8695f30..f1bf4a6022 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/behavior/PredicateExecutableTreeNode.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/behavior/PredicateExecutableTreeNode.java @@ -20,7 +20,7 @@ public void run(ExecutionContext context) { @Override public boolean matches(ExecutionContext context) { - return predicate.test(context); + return this.predicate.test(context); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/api/behavior/PredicateTreeNode.java b/src/main/java/dev/dubhe/anvilcraft/api/behavior/PredicateTreeNode.java index 29c8c52f6b..fc23541149 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/behavior/PredicateTreeNode.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/behavior/PredicateTreeNode.java @@ -13,6 +13,6 @@ public PredicateTreeNode(Predicate> predicate) { @Override public boolean matches(ExecutionContext context) { - return predicate.test(context); + return this.predicate.test(context); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/behavior/SetTreeNode.java b/src/main/java/dev/dubhe/anvilcraft/api/behavior/SetTreeNode.java index ea8cf99d01..134ed8658d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/behavior/SetTreeNode.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/behavior/SetTreeNode.java @@ -25,10 +25,10 @@ public SetTreeNode then(TreeNode node) { @Override public Collection> getChildren() { - return childrens; + return this.childrens; } public SetTreeNode executes(Consumer> consumer) { - return then(TreeNode.executes(consumer)); + return this.then(TreeNode.executes(consumer)); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/behavior/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/behavior/package-info.java index 5bdc80db07..878587b203 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/behavior/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/behavior/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.behavior; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/block/IEmberBlock.java b/src/main/java/dev/dubhe/anvilcraft/api/block/IEmberBlock.java index 732db6af06..70f53c7c52 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/block/IEmberBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/block/IEmberBlock.java @@ -14,9 +14,7 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; -/** - * 余烬金属系方块 - */ +/// 余烬金属系方块 public interface IEmberBlock extends INegativeShapeBlock { BlockState getCheckBlockState(); @@ -27,13 +25,11 @@ default Class getBlockType() { return IEmberBlock.class; } - /** - * 尝试吸水 - */ + /// 尝试吸水 default void tryAbsorbWater(Level level, BlockPos pos) { if (this.removeFluidBreadthFirstSearch(level, pos)) { - level.levelEvent(2001, pos, Block.getId(getCheckBlockState())); - level.playSound(null, pos, SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1f, 1f); + level.levelEvent(2001, pos, Block.getId(this.getCheckBlockState())); + level.playSound(null, pos, SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1F, 1F); } } @@ -49,20 +45,20 @@ private boolean removeFluidBreadthFirstSearch(Level level, BlockPos pos) { }, (checkedPos) -> { if (checkedPos.equals(pos)) { - return true; + return BlockPos.TraversalNodeStatus.ACCEPT; } else { BlockState blockState = level.getBlockState(checkedPos); FluidState fluidState = level.getFluidState(checkedPos); if (!fluidState.is(Fluids.WATER)) { - return false; + return BlockPos.TraversalNodeStatus.SKIP; } else { Block block = blockState.getBlock(); if (block instanceof BucketPickup bucketPickup) { if (!bucketPickup .pickupBlock(null, level, checkedPos, blockState) .isEmpty()) { - setCheckBlockState(blockState); - return true; + this.setCheckBlockState(blockState); + return BlockPos.TraversalNodeStatus.ACCEPT; } } @@ -73,7 +69,7 @@ private boolean removeFluidBreadthFirstSearch(Level level, BlockPos pos) { && !blockState.is(Blocks.KELP_PLANT) && !blockState.is(Blocks.SEAGRASS) && !blockState.is(Blocks.TALL_SEAGRASS)) { - return false; + return BlockPos.TraversalNodeStatus.SKIP; } BlockEntity blockEntity = @@ -81,8 +77,8 @@ private boolean removeFluidBreadthFirstSearch(Level level, BlockPos pos) { Block.dropResources(blockState, level, checkedPos, blockEntity); level.setBlock(checkedPos, Blocks.AIR.defaultBlockState(), 3); } - setCheckBlockState(blockState); - return true; + this.setCheckBlockState(blockState); + return BlockPos.TraversalNodeStatus.ACCEPT; } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/block/IIgnitableCauldron.java b/src/main/java/dev/dubhe/anvilcraft/api/block/IIgnitableCauldron.java new file mode 100644 index 0000000000..82472646cd --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/block/IIgnitableCauldron.java @@ -0,0 +1,20 @@ +package dev.dubhe.anvilcraft.api.block; + +import dev.anvilcraft.lib.v2.recipe.cache.BlockCache; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.material.Fluid; + +public interface IIgnitableCauldron { + default boolean isIgnited(BlockCache cache, BlockPos pos) { + return true; + } + + default void setIgnited(BlockCache cache, BlockPos pos, boolean ignited) { + } + + Fluid getFluid(BlockCache cache, BlockPos pos); + + default boolean consumeOnce(BlockCache cache, BlockPos pos) { + return false; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/block/INegativeShapeBlock.java b/src/main/java/dev/dubhe/anvilcraft/api/block/INegativeShapeBlock.java index 048ad96a97..e48a3c1033 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/block/INegativeShapeBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/block/INegativeShapeBlock.java @@ -1,7 +1,15 @@ package dev.dubhe.anvilcraft.api.block; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import net.minecraft.world.level.block.state.BlockState; -public interface INegativeShapeBlock extends IHammerRemovable { +import java.util.function.Predicate; + +public interface INegativeShapeBlock extends IHammerRemovable, Predicate { Class getBlockType(); + + @Override + default boolean test(BlockState blockState) { + return this.getBlockType().isInstance(blockState.getBlock()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/block/entity/IConvertableBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/api/block/entity/IConvertableBlockEntity.java new file mode 100644 index 0000000000..965e4aa699 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/block/entity/IConvertableBlockEntity.java @@ -0,0 +1,11 @@ +package dev.dubhe.anvilcraft.api.block.entity; + +import net.minecraft.core.Holder; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +public interface IConvertableBlockEntity { + Holder> targetTypeHolder(); + + void convertTo(T newBe); +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/block/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/block/package-info.java index 2b7fe47cc2..26332abf08 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/block/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/block/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.block; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/chargecollector/ChargeCollectorManager.java b/src/main/java/dev/dubhe/anvilcraft/api/chargecollector/ChargeCollectorManager.java index 26a8ff69e0..d9a492f404 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/chargecollector/ChargeCollectorManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/chargecollector/ChargeCollectorManager.java @@ -25,9 +25,7 @@ public ChargeCollectorManager(Level level) { this.level = level; } - /** - * 获取当前维度的ChargeCollectorManager - */ + /// 获取当前维度的ChargeCollectorManager public static ChargeCollectorManager getInstance(Level level) { if (!INSTANCES.containsKey(level)) { INSTANCES.put(level, new ChargeCollectorManager(level)); @@ -35,55 +33,45 @@ public static ChargeCollectorManager getInstance(Level level) { return INSTANCES.get(level); } - /** - * 充电 - * - * @param chargeNum 充电量 - * @param level 维度 - * @param blockPos 充电的位置 - */ + /// 充电 + /// + /// @param chargeNum 充电量 + /// @param level 维度 + /// @param blockPos 充电的位置 public static void charge(double chargeNum, Level level, BlockPos blockPos) { ChargeCollectorManager instance = ChargeCollectorManager.getInstance(level); instance.charge(chargeNum, blockPos); } - /** - * 充电 - * - * @param chargeNum 充电量 - * @param blockPos 充电的位置 - */ + /// 充电 + /// + /// @param chargeNum 充电量 + /// @param blockPos 充电的位置 public void charge(double chargeNum, BlockPos blockPos) { Collection chargeCollectorCollection = this.getNearestChargeCollect(blockPos); double surplus = chargeNum; for (Entry entry : chargeCollectorCollection) { - ChargeCollectorBlockEntity chargeCollectorBlockEntity = entry.getBlockEntity(); + ChargeCollectorBlockEntity chargeCollectorBlockEntity = entry.blockEntity(); if (!this.canCollect(chargeCollectorBlockEntity, blockPos)) return; surplus = chargeCollectorBlockEntity.incomingCharge(surplus, blockPos); if (surplus == 0) return; } } - /** - * 添加新的集电器 - */ + /// 添加新的集电器 public void addChargeCollector(ChargeCollectorBlockEntity blockEntity) { - chargeCollectors.put(blockEntity.getBlockPos(), blockEntity); + this.chargeCollectors.put(blockEntity.getBlockPos(), blockEntity); } - /** - * 删除集电器 - */ + /// 删除集电器 public void removeChargeCollector(ChargeCollectorBlockEntity blockEntity) { - chargeCollectors.remove(blockEntity.getBlockPos()); + this.chargeCollectors.remove(blockEntity.getBlockPos()); } - /** - * 获取最近的集电器的List集合(以从近至远排序) - */ + /// 获取最近的集电器的List集合(以从近至远排序) public List getNearestChargeCollect(BlockPos blockPos) { List distanceList = new ArrayList<>(); - for (Map.Entry entry : chargeCollectors.entrySet()) { + for (Map.Entry entry : this.chargeCollectors.entrySet()) { double distance = Vector3f.distance( entry.getKey().getX(), entry.getKey().getY(), @@ -95,17 +83,15 @@ public List getNearestChargeCollect(BlockPos blockPos) { distanceList.add(new Entry(distance, entry.getValue())); } return distanceList.stream() - .sorted(Comparator.comparing(Entry::getDistance)) + .sorted(Comparator.comparing(Entry::distance)) .collect(Collectors.toList()); } - /** - * 判断是否能被集电器收集 - * - * @param blockEntity 集电器方块实体 - * @param blockPos 电荷的位置 - * @return 是否能被集点器收集 - */ + /// 判断是否能被集电器收集 + /// + /// @param blockEntity 集电器方块实体 + /// @param blockPos 电荷的位置 + /// @return 是否能被集点器收集 public boolean canCollect(ChargeCollectorBlockEntity blockEntity, BlockPos blockPos) { return blockEntity.getPos().getX() - 2 <= blockPos.getX() && blockEntity.getPos().getY() - 2 <= blockPos.getY() @@ -115,14 +101,6 @@ public boolean canCollect(ChargeCollectorBlockEntity blockEntity, BlockPos block && blockEntity.getPos().getZ() + 2 >= blockPos.getZ(); } - @Getter - public static class Entry { - public final double distance; - public final ChargeCollectorBlockEntity blockEntity; - - public Entry(Double distance, ChargeCollectorBlockEntity blockEntity) { - this.distance = distance; - this.blockEntity = blockEntity; - } + public record Entry(double distance, ChargeCollectorBlockEntity blockEntity) { } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/chargecollector/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/chargecollector/package-info.java index f61ed89f99..f17c625966 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/chargecollector/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/chargecollector/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.chargecollector; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/component/ModNameContents.java b/src/main/java/dev/dubhe/anvilcraft/api/component/ModNameContents.java new file mode 100644 index 0000000000..3678e14ca9 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/component/ModNameContents.java @@ -0,0 +1,97 @@ +package dev.dubhe.anvilcraft.api.component; + +import com.google.common.collect.ImmutableList; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import dev.anvilcraft.lib.v2.codec.CodecUtil; +import lombok.AccessLevel; +import lombok.Getter; +import net.minecraft.locale.Language; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentContents; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.ResolutionContext; +import net.minecraft.network.chat.Style; +import net.neoforged.fml.ModList; +import org.jspecify.annotations.Nullable; + +import java.util.List; +import java.util.Optional; + +@Getter(AccessLevel.PROTECTED) +public class ModNameContents implements ComponentContents { + public static final MapCodec CODEC = CodecUtil.mapCodec( + Codec.STRING + .fieldOf("mod_id") + .forGetter(ModNameContents::getId), + ModNameContents::new + ); + private static final String KEY = "component_content.anvilcraft.mod_name.unknown"; + private final String id; + private @Nullable Language decomposedWith; + private List decomposedParts = ImmutableList.of(); + + public ModNameContents(String id) { + this.id = id; + } + + private void decompose() { + Language currentLanguage = Language.getInstance(); + if (currentLanguage == this.decomposedWith) { + return; + } + + this.decomposedWith = currentLanguage; + + Optional modNameOp = ModList.get() + .getModContainerById(this.id) + .map(container -> container.getModInfo().getDisplayName()); + if (modNameOp.isPresent()) { + this.decomposedParts = ImmutableList.of(FormattedText.of(modNameOp.get())); + return; + } + + Component unknown = Component.translatable(ModNameContents.KEY, this.id); + this.decomposedParts = ImmutableList.of(unknown); + } + + @Override + public Optional visit(FormattedText.StyledContentConsumer output, Style currentStyle) { + this.decompose(); + + for (FormattedText part : this.decomposedParts) { + Optional result = part.visit(output, currentStyle); + if (result.isPresent()) { + return result; + } + } + + return Optional.empty(); + } + + @Override + public Optional visit(FormattedText.ContentConsumer output) { + this.decompose(); + + for (FormattedText part : this.decomposedParts) { + Optional result = part.visit(output); + if (result.isPresent()) { + return result; + } + } + + return Optional.empty(); + } + + @Override + public MutableComponent resolve(ResolutionContext context, int recursionDepth) throws CommandSyntaxException { + return MutableComponent.create(new ModNameContents(this.id)); + } + + @Override + public MapCodec codec() { + return ModNameContents.CODEC; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/component/TranslatableContents.java b/src/main/java/dev/dubhe/anvilcraft/api/component/TranslatableContents.java new file mode 100644 index 0000000000..585c988b78 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/component/TranslatableContents.java @@ -0,0 +1,277 @@ +package dev.dubhe.anvilcraft.api.component; + +import com.google.common.collect.ImmutableList; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.datafixers.util.Either; +import com.mojang.serialization.Codec; +import com.mojang.serialization.DataResult; +import com.mojang.serialization.MapCodec; +import dev.anvilcraft.lib.v2.codec.CodecUtil; +import lombok.Getter; +import net.minecraft.locale.Language; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentContents; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.network.chat.ComponentUtils; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.ResolutionContext; +import net.minecraft.network.chat.Style; +import net.minecraft.util.ExtraCodecs; +import org.jspecify.annotations.Nullable; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class TranslatableContents implements ComponentContents { + public static final Object[] NO_ARGS = new Object[0]; + private static final Codec PRIMITIVE_ARG_CODEC = ExtraCodecs.JAVA.validate(TranslatableContents::filterAllowedArguments); + @SuppressWarnings("NullableProblems") + private static final Codec ARG_CODEC = Codec.either(PRIMITIVE_ARG_CODEC, ComponentSerialization.CODEC).xmap( + e -> e.map(Function.identity(), component -> Objects.requireNonNullElse(component.tryCollapseToString(), component)), + o -> o instanceof Component c ? Either.right(c) : Either.left(o) + ); + public static final MapCodec MAP_CODEC = CodecUtil.mapCodec( + Codec.STRING + .fieldOf("translate") + .forGetter(o -> o.key), + ComponentSerialization.flatRestrictedCodec(Integer.MAX_VALUE) + .lenientOptionalFieldOf("fallback") + .forGetter(o -> Optional.ofNullable(o.fallback)), + ARG_CODEC + .listOf() + .optionalFieldOf("with") + .forGetter(o -> adjustArgs(o.args)), + TranslatableContents::create + ); + private static final FormattedText TEXT_PERCENT = FormattedText.of("%"); + private static final FormattedText TEXT_NULL = FormattedText.of("null"); + @Getter + private final String key; + @Getter + private final @Nullable Component fallback; + @Getter + private final Object[] args; + private @Nullable Language decomposedWith; + private List decomposedParts = ImmutableList.of(); + private static final Pattern FORMAT_PATTERN = Pattern.compile("%(?:(\\d+)\\$)?([A-Za-z%]|$)"); + + private static DataResult filterAllowedArguments(@Nullable Object result) { + return !isAllowedPrimitiveArgument(result) + ? DataResult.error(() -> "This value needs to be parsed as component") + : DataResult.success(result); + } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + public static boolean isAllowedPrimitiveArgument(@Nullable Object object) { + return object instanceof Number || object instanceof Boolean || object instanceof String; + } + + private static Optional> adjustArgs(Object[] args) { + return args.length == 0 ? Optional.empty() : Optional.of(Arrays.asList(args)); + } + + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + private static Object[] adjustArgs(Optional> args) { + return args.map(a -> a.isEmpty() ? NO_ARGS : a.toArray()).orElse(NO_ARGS); + } + + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + private static TranslatableContents create(String key, Optional fallback, Optional> args) { + return new TranslatableContents(key, fallback.orElse(null), adjustArgs(args)); + } + + public TranslatableContents(String key, @Nullable Component fallback, Object[] args) { + this.key = key; + this.fallback = fallback; + this.args = args; + // Neo: This is transitively called by some static initializers. To allow using Minecraft classes from tests + // without fully initializing FML, we disable the validation if FML is not initialized. + var loader = net.neoforged.fml.loading.FMLLoader.getCurrentOrNull(); + if (loader != null && !loader.isProduction()) { + for (Object arg : this.args) { + if (!(arg instanceof Component) && !isAllowedPrimitiveArgument(arg)) { + throw new IllegalArgumentException( + "TranslatableContents' arguments must be either a Component, Number, Boolean, or a String. Was given " + arg + + " for " + this.key); + } + } + } + } + + @Override + public MapCodec codec() { + return MAP_CODEC; + } + + private void decompose() { + Language currentLanguage = Language.getInstance(); + if (currentLanguage != this.decomposedWith) { + this.decomposedWith = currentLanguage; + + Component langComponent = currentLanguage.getComponent(this.key); + if (langComponent != null) { + this.decomposedParts = ImmutableList.of(langComponent); + return; + } + + String format; + if (this.fallback != null) { + format = currentLanguage.getOrDefault(this.key, this.key); + if (format.equals(this.key)) { + format = this.fallback.getString(); + } + } else { + format = currentLanguage.getOrDefault(this.key); + } + + try { + ImmutableList.Builder parts = ImmutableList.builder(); + this.decomposeTemplate(format, parts::add); + this.decomposedParts = parts.build(); + } catch (TranslatableFormatException var4) { + this.decomposedParts = ImmutableList.of(FormattedText.of(format)); + } + } + } + + private void decomposeTemplate(String template, Consumer decomposedParts) { + Matcher matcher = FORMAT_PATTERN.matcher(template); + + try { + int replacementIndex = 0; + int current = 0; + + while (matcher.find(current)) { + int start = matcher.start(); + int end = matcher.end(); + if (start > current) { + String prefix = template.substring(current, start); + if (prefix.indexOf(37) != -1) { + throw new IllegalArgumentException(); + } + + decomposedParts.accept(FormattedText.of(prefix)); + } + + String formatType = matcher.group(2); + String formatString = template.substring(start, end); + if ("%".equals(formatType) && "%%".equals(formatString)) { + decomposedParts.accept(TEXT_PERCENT); + } else { + if (!"s".equals(formatType)) { + throw new TranslatableFormatException(this, "Unsupported format: '" + formatString + "'"); + } + + String possiblePositionIndex = matcher.group(1); + int index = possiblePositionIndex != null ? Integer.parseInt(possiblePositionIndex) - 1 : replacementIndex++; + decomposedParts.accept(this.getArgument(index)); + } + + current = end; + } + + if (current < template.length()) { + String tail = template.substring(current); + if (tail.indexOf(37) != -1) { + throw new IllegalArgumentException(); + } + + decomposedParts.accept(FormattedText.of(tail)); + } + } catch (IllegalArgumentException var12) { + throw new TranslatableFormatException(this, var12); + } + } + + private FormattedText getArgument(int index) { + if (index >= 0 && index < this.args.length) { + Object arg = this.args[index]; + if (arg instanceof Component componentArg) { + return componentArg; + } else { + // noinspection ConstantValue + return arg == null ? TEXT_NULL : FormattedText.of(arg.toString()); + } + } else { + throw new TranslatableFormatException(this, index); + } + } + + @Override + public Optional visit(FormattedText.StyledContentConsumer output, Style currentStyle) { + this.decompose(); + + for (FormattedText part : this.decomposedParts) { + Optional result = part.visit(output, currentStyle); + if (result.isPresent()) { + return result; + } + } + + return Optional.empty(); + } + + @Override + public Optional visit(FormattedText.ContentConsumer output) { + this.decompose(); + + for (FormattedText part : this.decomposedParts) { + Optional result = part.visit(output); + if (result.isPresent()) { + return result; + } + } + + return Optional.empty(); + } + + @Override + public MutableComponent resolve(ResolutionContext context, int recursionDepth) throws CommandSyntaxException { + Object[] argsCopy = new Object[this.args.length]; + + for (int i = 0; i < argsCopy.length; i++) { + Object param = this.args[i]; + if (param instanceof Component component) { + argsCopy[i] = ComponentUtils.resolve(context, component, recursionDepth); + } else { + argsCopy[i] = param; + } + } + + return MutableComponent.create(new TranslatableContents(this.key, this.fallback, argsCopy)); + } + + @Override + public boolean equals(Object o) { + return this == o + || o instanceof TranslatableContents that + && Objects.equals(this.key, that.key) + && Objects.equals(this.fallback, that.fallback) + && Arrays.equals(this.args, that.args); + } + + @Override + public int hashCode() { + int result = Objects.hashCode(this.key); + result = 31 * result + Objects.hashCode(this.fallback); + return 31 * result + Arrays.hashCode(this.args); + } + + @Override + public String toString() { + return "translation{key='" + + this.key + + "'" + + (this.fallback != null ? ", fallback='" + this.fallback + "'" : "") + + ", args=" + + Arrays.toString(this.args) + + "}"; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/component/TranslatableFormatException.java b/src/main/java/dev/dubhe/anvilcraft/api/component/TranslatableFormatException.java new file mode 100644 index 0000000000..e8eae65576 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/component/TranslatableFormatException.java @@ -0,0 +1,17 @@ +package dev.dubhe.anvilcraft.api.component; + +import java.util.Locale; + +public class TranslatableFormatException extends IllegalArgumentException { + public TranslatableFormatException(TranslatableContents component, String message) { + super(String.format(Locale.ROOT, "Error parsing: %s: %s", component, message)); + } + + public TranslatableFormatException(TranslatableContents component, int index) { + super(String.format(Locale.ROOT, "Invalid index %d requested for %s", index, component)); + } + + public TranslatableFormatException(TranslatableContents component, Throwable t) { + super(String.format(Locale.ROOT, "Error while parsing: %s", component), t); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/component/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/component/package-info.java new file mode 100644 index 0000000000..d2bd18280c --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/component/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.api.component; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/energy/EnergyHelper.java b/src/main/java/dev/dubhe/anvilcraft/api/energy/EnergyHelper.java index 7ab4a4fdde..46c146df71 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/energy/EnergyHelper.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/energy/EnergyHelper.java @@ -4,15 +4,16 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.Level; import net.neoforged.neoforge.capabilities.Capabilities; -import net.neoforged.neoforge.energy.IEnergyStorage; +import net.neoforged.neoforge.transfer.energy.EnergyHandler; +import net.neoforged.neoforge.transfer.transaction.Transaction; public class EnergyHelper { - /** - * 塞能量 - */ + /// 塞能量 public static void insertEnergy(Level level, BlockPos pos, Direction direction, int amount) { - IEnergyStorage energyStorage = level.getCapability(Capabilities.EnergyStorage.BLOCK, pos, direction); + EnergyHandler energyStorage = level.getCapability(Capabilities.Energy.BLOCK, pos, direction); if (energyStorage == null) return; - energyStorage.receiveEnergy(amount, false); + Transaction transaction = Transaction.openRoot(); + energyStorage.insert(amount, transaction); + transaction.commit(); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/energy/ItemFEStorage.java b/src/main/java/dev/dubhe/anvilcraft/api/energy/ItemFEStorage.java new file mode 100644 index 0000000000..7f14772613 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/energy/ItemFEStorage.java @@ -0,0 +1,250 @@ +package dev.dubhe.anvilcraft.api.energy; + +import dev.dubhe.anvilcraft.init.item.ModComponents; +import dev.dubhe.anvilcraft.item.property.component.StoredEnergy; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.transfer.TransferPreconditions; +import net.neoforged.neoforge.transfer.access.ItemAccess; +import net.neoforged.neoforge.transfer.energy.EnergyHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.SnapshotJournal; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; +import org.jspecify.annotations.Nullable; + +/** + * 基于 DataComponent 的 FE 能量存储实现 + * 使用 {@link ModComponents#STORED_ENERGY} 作为后端存储 + * + *

支持两种模式: + *

    + *
  • ItemAccess 模式(首选):通过 {@link ItemAccess#exchange} 进行原子物品交换, + * 与 NeoForge 通用 FE 系统完全兼容。其他模组的充电器/放电器可以正确追踪能量变更。
  • + *
  • SnapshotJournal 模式(回退):当 ItemAccess 上下文不可用时,使用事务快照回滚保证一致性。
  • + *
+ */ +public class ItemFEStorage implements EnergyHandler { + /// ItemAccess 模式字段 + @Nullable + private final ItemAccess itemAccess; + private final Item validItem; + private final int capacity; + private final int maxInsert; + private final int maxExtract; + + /// SnapshotJournal 回退模式字段 + @Nullable + private final ItemStack stack; + @Nullable + private final EnergyJournal journal; + + /** + * 使用 ItemAccess 创建(推荐)——与通用 FE 系统完全兼容 + */ + public ItemFEStorage(ItemAccess itemAccess, int capacity) { + this(itemAccess, capacity, capacity, capacity); + } + + /** + * 使用 ItemAccess 创建并指定传输限制 + */ + public ItemFEStorage(ItemAccess itemAccess, int capacity, int maxInsert, int maxExtract) { + TransferPreconditions.checkNonNegative(capacity); + TransferPreconditions.checkNonNegative(maxInsert); + TransferPreconditions.checkNonNegative(maxExtract); + + this.itemAccess = itemAccess; + this.validItem = itemAccess.getResource().getItem(); + this.capacity = capacity; + this.maxInsert = maxInsert; + this.maxExtract = maxExtract; + + this.stack = null; + this.journal = null; + } + + /** + * 使用 ItemStack 创建(回退模式)——保持向后兼容 + * + * @deprecated 建议使用 {@link #ItemFEStorage(ItemAccess, int)} + */ + @Deprecated + @SuppressWarnings("DeprecatedIsStillUsed") + public ItemFEStorage(ItemStack stack, int capacity) { + TransferPreconditions.checkNonNegative(capacity); + + this.stack = stack; + this.capacity = capacity; + this.maxInsert = capacity; + this.maxExtract = capacity; + + this.itemAccess = null; + this.validItem = stack.getItem(); + this.journal = new EnergyJournal(); + } + + /** + * 工厂方法:根据上下文自动选择最佳模式 + */ + @SuppressWarnings("Deprecation") + public static ItemFEStorage create(ItemStack stack, @Nullable ItemAccess ctx, int capacity) { + if (ctx != null) { + return new ItemFEStorage(ctx, capacity); + } + return new ItemFEStorage(stack, capacity); + } + + @Override + public long getAmountAsLong() { + if (this.itemAccess != null) { + return (long) this.itemAccess.getAmount() * (long) this.getEnergyFrom(this.itemAccess.getResource()); + } + if (this.stack == null) return 0; + return this.stack.getOrDefault(ModComponents.STORED_ENERGY, StoredEnergy.EMPTY).value(); + } + + @Override + public long getCapacityAsLong() { + if (this.itemAccess != null) { + ItemResource resource = this.itemAccess.getResource(); + if (!resource.is(this.validItem)) return 0; + return (long) this.itemAccess.getAmount() * (long) this.capacity; + } + return this.capacity; + } + + /** + * 从 ItemResource 读取存储的能量值 + */ + private int getEnergyFrom(ItemResource resource) { + if (!resource.is(this.validItem)) return 0; + return resource.getOrDefault(ModComponents.STORED_ENERGY, StoredEnergy.EMPTY).value(); + } + + @Override + public int insert(int amount, TransactionContext transaction) { + TransferPreconditions.checkNonNegative(amount); + + if (this.itemAccess != null) { + return this.insertViaExchange(amount, transaction); + } + return this.insertViaJournal(amount, transaction); + } + + @Override + public int extract(int amount, TransactionContext transaction) { + TransferPreconditions.checkNonNegative(amount); + + if (this.itemAccess != null) { + return this.extractViaExchange(amount, transaction); + } + return this.extractViaJournal(amount, transaction); + } + + /** + * 通过 ItemAccess.exchange() 插入能量。 + * 这是 NeoForge 通用 FE 系统的标准模式:创建新的 ItemResource(携带更新后的能量), + * 然后通过原子交换替换旧物品。其他模组的库存系统可以正确追踪此操作。 + */ + private int insertViaExchange(int amount, TransactionContext transaction) { + if (this.itemAccess == null) return 0; + int accessAmount = this.itemAccess.getAmount(); + if (accessAmount == 0) return 0; + int amountPerItem = Math.min(this.maxInsert, amount / accessAmount); + if (amountPerItem == 0) return 0; + + ItemResource accessResource = this.itemAccess.getResource(); + if (!accessResource.is(this.validItem)) return 0; + int currentEnergyPerItem = this.getEnergyFrom(accessResource); + + int insertedPerItem = Math.min(amountPerItem, this.capacity - currentEnergyPerItem); + if (insertedPerItem > 0) { + ItemResource filledResource = accessResource.with( + ModComponents.STORED_ENERGY, + new StoredEnergy(currentEnergyPerItem + insertedPerItem)); + if (!filledResource.isEmpty()) { + return insertedPerItem * this.itemAccess.exchange(filledResource, accessAmount, transaction); + } + } + return 0; + } + + /** + * 通过 ItemAccess.exchange() 抽取能量。 + */ + private int extractViaExchange(int amount, TransactionContext transaction) { + if (this.itemAccess == null) return 0; + int accessAmount = this.itemAccess.getAmount(); + if (accessAmount == 0) return 0; + int amountPerItem = Math.min(this.maxExtract, amount / accessAmount); + if (amountPerItem == 0) return 0; + + ItemResource accessResource = this.itemAccess.getResource(); + int currentEnergyPerItem = this.getEnergyFrom(accessResource); + + int extractedPerItem = Math.min(amountPerItem, currentEnergyPerItem); + if (extractedPerItem > 0) { + ItemResource emptiedResource = accessResource.with( + ModComponents.STORED_ENERGY, + new StoredEnergy(currentEnergyPerItem - extractedPerItem)); + if (!emptiedResource.isEmpty()) { + return extractedPerItem * this.itemAccess.exchange(emptiedResource, accessAmount, transaction); + } + } + return 0; + } + + /** + * 通过 SnapshotJournal 插入能量(回退模式)。 + */ + private int insertViaJournal(int amount, TransactionContext transaction) { + if (this.journal == null) return 0; + int energy = this.getEnergyFromStack(); + int accepted = Math.min(amount, this.capacity - energy); + if (accepted > 0) { + this.journal.updateSnapshots(transaction); + this.setEnergyToStack(energy + accepted); + } + return accepted; + } + + /** + * 通过 SnapshotJournal 抽取能量(回退模式)。 + */ + private int extractViaJournal(int amount, TransactionContext transaction) { + if (this.journal == null) return 0; + int energy = this.getEnergyFromStack(); + int extracted = Math.min(energy, amount); + if (extracted > 0) { + this.journal.updateSnapshots(transaction); + this.setEnergyToStack(energy - extracted); + } + return extracted; + } + + private int getEnergyFromStack() { + if (this.stack == null) return 0; + return this.stack.getOrDefault(ModComponents.STORED_ENERGY, StoredEnergy.EMPTY).value(); + } + + private void setEnergyToStack(int energy) { + if (this.stack == null) return; + this.stack.set(ModComponents.STORED_ENERGY, new StoredEnergy(energy)); + } + + /** + * 能量快照日志,用于在事务回滚时恢复物品的能量值。 + * 仅在回退模式(无 ItemAccess 上下文)下使用。 + */ + private class EnergyJournal extends SnapshotJournal { + @Override + protected Integer createSnapshot() { + return ItemFEStorage.this.getEnergyFromStack(); + } + + @Override + protected void revertToSnapshot(Integer snapshot) { + ItemFEStorage.this.setEnergyToStack(snapshot); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/energy/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/energy/package-info.java index 0be935ce23..a2d135e349 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/energy/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/energy/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.energy; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/entity/attribute/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/entity/attribute/package-info.java index 5754129ea0..87576b6b24 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/entity/attribute/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/entity/attribute/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.entity.attribute; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/entity/fakeplayer/AnvilCraftDestroyerFakePlayer.java b/src/main/java/dev/dubhe/anvilcraft/api/entity/fakeplayer/AnvilCraftDestroyerFakePlayer.java index 0d259137c7..c0f8bc4eaf 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/entity/fakeplayer/AnvilCraftDestroyerFakePlayer.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/entity/fakeplayer/AnvilCraftDestroyerFakePlayer.java @@ -1,7 +1,6 @@ package dev.dubhe.anvilcraft.api.entity.fakeplayer; import com.mojang.authlib.GameProfile; -import lombok.Data; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; @@ -34,7 +33,7 @@ public ServerPlayer offerPlayer(ServerLevel level) { destroyer = new Destroyer(level, ENABLED_DESTROYERS.size()); } ENABLED_DESTROYERS.add(destroyer); - return destroyer.getPlayer(); + return destroyer.player(); } public void enabledDestroy(ServerPlayer player, ItemStack itemStack) { @@ -45,29 +44,26 @@ public void enabledDestroy(ServerPlayer player, ItemStack itemStack) { } public void disable(ServerPlayer player) { - ENABLED_DESTROYERS.stream() - .filter(destroyer -> destroyer.getUUID().equals(player.getUUID())) - .findFirst() - .ifPresent(destroyer -> { - destroyer.getPlayer().setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY); - DISABLED_DESTROYERS.offer(destroyer); - ENABLED_DESTROYERS.remove(destroyer); - }); + for (Destroyer destroyer : AnvilCraftDestroyerFakePlayer.ENABLED_DESTROYERS) { + if (!destroyer.getUUID().equals(player.getUUID())) continue; + destroyer.player().setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY); + DISABLED_DESTROYERS.offer(destroyer); + ENABLED_DESTROYERS.remove(destroyer); + break; + } } - @Data - public static final class Destroyer { - private final GameProfile profile; - private final ServerPlayer player; + public record Destroyer(ServerPlayer player, GameProfile profile) { + public Destroyer(ServerLevel player, int profile) { + this(FakePlayerFactory.get(player, Destroyer.create(profile)), Destroyer.create(profile)); + } - public Destroyer(ServerLevel level, int index) { - this.profile = FAKE_PROFILE_FACTORY.apply(index + 1); - this.player = FakePlayerFactory.get(level, this.profile); + private static GameProfile create(int profile) { + return AnvilCraftDestroyerFakePlayer.FAKE_PROFILE_FACTORY.apply(profile + 1); } public UUID getUUID() { return this.player.getUUID(); } } - } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/entity/fakeplayer/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/entity/fakeplayer/package-info.java index 7b8c64c793..936818d284 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/entity/fakeplayer/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/entity/fakeplayer/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.entity.fakeplayer; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/entity/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/entity/package-info.java index b2bac1d780..c2df07c591 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/entity/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/entity/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.entity; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/entity/player/IAnvilCraftBlockPlacer.java b/src/main/java/dev/dubhe/anvilcraft/api/entity/player/IAnvilCraftBlockPlacer.java index cf1e0e52b5..af693c135f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/entity/player/IAnvilCraftBlockPlacer.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/entity/player/IAnvilCraftBlockPlacer.java @@ -19,37 +19,31 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -/** - * 假人方块放置器 - */ +/// 假人方块放置器 public interface IAnvilCraftBlockPlacer { ServerPlayer getPlayer(); - /** - * 放置方块 - * - * @param level 放置世界 - * @param pos 放置位置 - * @param orientation 放置方向 - * @param blockItem 放置方块物品 - * @return 放置结果 - */ + /// 放置方块 + /// + /// @param level 放置世界 + /// @param pos 放置位置 + /// @param orientation 放置方向 + /// @param blockItem 放置方块物品 + /// @return 放置结果 default InteractionResult placeBlock( Level level, BlockPos pos, Orientation orientation, BlockItem blockItem, ItemStack itemStack) { if (AnvilCraftFakePlayers.BLOCK_PLACER_BLACKLIST.contains(BuiltInRegistries.BLOCK.getKey(blockItem.getBlock()).toString())) { return InteractionResult.FAIL; } - if (level instanceof ServerLevel serverLevel) getPlayer().setServerLevel(serverLevel); + if (level instanceof ServerLevel serverLevel) this.getPlayer().setServerLevel(serverLevel); // 获取fakePlayer的方向 与放置器的方向不太一样 Orientation fakePlayerOrientation = orientation.flipHorizontalIfVertical(); - getPlayer().setYRot(fakePlayerOrientation.getYRotation()); - /* - * net.minecraft.core.Direction#orderedByNearest 方法判断的是玩家的yHeadRot,设置YRot时需要将 - * 该字段一并设置,以使得部分方块的方向检测正确 - */ - getPlayer().setYHeadRot(fakePlayerOrientation.getYRotation()); - getPlayer().setXRot(fakePlayerOrientation.getXRotation()); - Vec3 clickClickLocation = getPosFromOrientation(orientation); + this.getPlayer().setYRot(fakePlayerOrientation.getYRotation()); + // net.minecraft.core.Direction#orderedByNearest 方法判断的是玩家的yHeadRot,设置YRot时需要将 + // 该字段一并设置,以使得部分方块的方向检测正确 + this.getPlayer().setYHeadRot(fakePlayerOrientation.getYRotation()); + this.getPlayer().setXRot(fakePlayerOrientation.getXRotation()); + Vec3 clickClickLocation = this.getPosFromOrientation(orientation); double x = clickClickLocation.x; double y = clickClickLocation.y; double z = clickClickLocation.z; @@ -62,8 +56,8 @@ default InteractionResult placeBlock( BlockPlaceContext blockPlaceContext = new BlockPlaceContext( level, - getPlayer(), - getPlayer().getUsedItemHand(), + this.getPlayer(), + this.getPlayer().getUsedItemHand(), itemStack, blockHitResult ); @@ -71,14 +65,14 @@ default InteractionResult placeBlock( // 实际上,如果需要nbt的话,直接用NeoForge自带的就行 InteractionResult ir = blockItem.place(blockPlaceContext); if (ir == InteractionResult.FAIL) return ir; - SoundType soundType = blockState.getSoundType(level, pos, getPlayer()); + SoundType soundType = blockState.getSoundType(level, pos, this.getPlayer()); level.playSound( - getPlayer(), + this.getPlayer(), pos, soundType.getPlaceSound(), SoundSource.BLOCKS, - (soundType.getVolume() + 1.0f) / 2.0f, - soundType.getPitch() * 0.8f + (soundType.getVolume() + 1.0F) / 2.0F, + soundType.getPitch() * 0.8F ); TriggerUtil.placerPlaceBlock(level, pos, blockState.getBlock()); return InteractionResult.SUCCESS; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/entity/player/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/entity/player/package-info.java index 4726cab52c..0888ab8962 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/entity/player/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/entity/player/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.entity.player; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/event/AmuletEvent.java b/src/main/java/dev/dubhe/anvilcraft/api/event/AmuletEvent.java new file mode 100644 index 0000000000..790f84d9c3 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/event/AmuletEvent.java @@ -0,0 +1,107 @@ +package dev.dubhe.anvilcraft.api.event; + +import dev.dubhe.anvilcraft.api.amulet.AmuletManager; +import dev.dubhe.anvilcraft.api.amulet.def.IAmuletDefinition; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.Holder; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.bus.api.Event; +import net.neoforged.bus.api.ICancellableEvent; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +/// 所有与本模组的 {@link dev.dubhe.anvilcraft.item.property.component.amulet.IAmulet 护符} 有关的事件的基类。 +@Getter +public abstract sealed class AmuletEvent extends Event + permits AmuletEvent.Find, + AmuletEvent.ProcessFound, + AmuletEvent.ModifyRaffleProbability { + private final AmuletManager manager; + + protected AmuletEvent(AmuletManager manager) { + this.manager = manager; + } + + /// 本事件会在 {@link AmuletManager#getAmuletsFromInventory(Player)} 内发出,
+ /// 并允许其它模组从非物品栈形式的源提供护符。 + ///

注意:您不需要在此事件中处理护符容器(物品栈形式的源)。请与 {@link AmuletEvent.ProcessFound} 中执行上述操作。

+ ///

本事件会在双端发出。

+ /// + /// @see AmuletEvent.ProcessFound + public static final class Find extends AmuletEvent { + @Getter + private final Player player; + private final Consumer collector; + + public Find(AmuletManager manager, Player player, Consumer collector) { + super(manager); + this.player = player; + this.collector = collector; + } + + /// 向事件提供源物品栈 + /// + /// @param source 源物品栈 + public void provide(ItemStack source) { + this.collector.accept(source); + } + } + + /// 本事件会在 {@link AmuletManager#processFoundStack(ItemStack, List)} 内发出,
+ /// 并允许其它模组处理护符容器(物品栈形式的源)并提供。 + ///

取消该事件将阻止源及其可能包含的其它护符被加入最终结果。

+ ///

注意:您不应在此事件中从非物品栈形式的源提供护符。请与 {@link AmuletEvent.Find} 中执行上述操作。

+ ///

本事件会在双端发出。

+ /// + /// @see AmuletEvent.Find + @Getter + public static final class ProcessFound extends AmuletEvent implements ICancellableEvent { + private final ItemStack found; + private final List extracted = new ArrayList<>(); + + public ProcessFound(AmuletManager manager, ItemStack found) { + super(manager); + this.found = found; + } + + /// 向事件提供护符物品栈 + /// + /// @param amulet 护符物品栈 + public void provide(ItemStack amulet) { + this.extracted.add(amulet); + } + } + + /// 本事件会在 {@link AmuletManager#tryRaffle(ServerPlayer, DamageSource)} 中抽取失败时发出,
+ /// 并允许修改抽取概率。 + ///

抽取概率为 0-100 的整数,对应 0%-100%

+ ///

本事件会在逻辑服务端发出。

+ @Getter + public static final class ModifyRaffleProbability extends AmuletEvent { + private final ServerPlayer player; + private final DamageSource source; + private final Holder.Reference def; + @Setter + private int probability; + + public ModifyRaffleProbability( + AmuletManager manager, + ServerPlayer player, + DamageSource source, + Holder.Reference def, + int probability + ) { + super(manager); + this.player = player; + this.source = source; + this.def = def; + this.probability = probability; + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/event/AnvilBehaviorRegisterEvent.java b/src/main/java/dev/dubhe/anvilcraft/api/event/AnvilBehaviorRegisterEvent.java index 23f9a9e26a..111913070f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/event/AnvilBehaviorRegisterEvent.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/event/AnvilBehaviorRegisterEvent.java @@ -1,6 +1,7 @@ package dev.dubhe.anvilcraft.api.event; import dev.dubhe.anvilcraft.api.anvil.IAnvilBehavior; +import net.minecraft.core.Holder; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.bus.api.Event; @@ -16,12 +17,16 @@ public AnvilBehaviorRegisterEvent(BlockBehaviorRegister blockBehaviorRegister, S this.stateBehaviorRegister = stateBehaviorRegister; } + public void registerBehavior(Holder matchingBlock, IAnvilBehavior behavior) { + this.blockBehaviorRegister.register(matchingBlock.value(), behavior); + } + public void registerBehavior(Block matchingBlock, IAnvilBehavior behavior) { - blockBehaviorRegister.register(matchingBlock, behavior); + this.blockBehaviorRegister.register(matchingBlock, behavior); } public void registerBehavior(Predicate pred, IAnvilBehavior behavior) { - stateBehaviorRegister.register(pred, behavior); + this.stateBehaviorRegister.register(pred, behavior); } public interface BlockBehaviorRegister { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/event/AnvilEvent.java b/src/main/java/dev/dubhe/anvilcraft/api/event/AnvilEvent.java index 669d385dad..8473ea207c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/event/AnvilEvent.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/event/AnvilEvent.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.level.Level; @@ -21,22 +22,20 @@ public AnvilEvent(FallingBlockEntity entity) { @Getter public static class OnLand extends AnvilEvent { - private final Level level; + private final ServerLevel level; private final BlockPos pos; - private final float fallDistance; + private final double fallDistance; @Setter private boolean isAnvilDamage = false; - /** - * 铁砧落地事件 - * - * @param level 世界 - * @param pos 位置 - * @param entity 铁砧 - * @param fallDistance 下落距离 - */ - public OnLand(Level level, BlockPos pos, FallingBlockEntity entity, float fallDistance) { + /// 铁砧落地事件 + /// + /// @param level 世界 + /// @param pos 位置 + /// @param entity 铁砧 + /// @param fallDistance 下落距离 + public OnLand(ServerLevel level, BlockPos pos, FallingBlockEntity entity, double fallDistance) { super(entity); this.level = level; this.pos = pos; @@ -53,14 +52,12 @@ public static class CollisionBlock extends AnvilEvent implements ICancellableEve @Setter private boolean isAnvilDamage = false; - /** - * 铁砧落地事件 - * - * @param level 世界 - * @param pos 位置 - * @param entity 铁砧 - * @param speed 撞击速度 - */ + /// 铁砧落地事件 + /// + /// @param level 世界 + /// @param pos 位置 + /// @param entity 铁砧 + /// @param speed 撞击速度 public CollisionBlock(Level level, BlockPos pos, FallingBlockEntity entity, double speed) { super(entity); this.level = level; @@ -71,7 +68,7 @@ public CollisionBlock(Level level, BlockPos pos, FallingBlockEntity entity, doub @Getter public static class GiantOnLand extends AnvilEvent { - private final Level level; + private final ServerLevel level; private final BlockPos pos; private final float fallDistance; private final FallingGiantAnvilEntity entity; @@ -79,15 +76,13 @@ public static class GiantOnLand extends AnvilEvent { @Setter private boolean isAnvilDamage = false; - /** - * 铁砧落地事件 - * - * @param level 世界 - * @param pos 位置 - * @param entity 铁砧 - * @param fallDistance 下落距离 - */ - public GiantOnLand(Level level, BlockPos pos, FallingGiantAnvilEntity entity, float fallDistance) { + /// 铁砧落地事件 + /// + /// @param level 世界 + /// @param pos 位置 + /// @param entity 铁砧 + /// @param fallDistance 下落距离 + public GiantOnLand(ServerLevel level, BlockPos pos, FallingGiantAnvilEntity entity, float fallDistance) { super(entity); this.level = level; this.pos = pos; @@ -99,23 +94,21 @@ public GiantOnLand(Level level, BlockPos pos, FallingGiantAnvilEntity entity, fl @Getter public static class HurtEntity extends AnvilEvent { private final BlockPos pos; - private final Level level; + private final ServerLevel level; private final Entity hurtedEntity; private final float damage; - /** - * 铁砧伤害实体 - * - * @param entity 铁砧 - * @param pos 位置 - * @param level 世界 - * @param hurtedEntity 被伤害的实体 - * @param damage 伤害 - */ + /// 铁砧伤害实体 + /// + /// @param entity 铁砧 + /// @param pos 位置 + /// @param level 世界 + /// @param hurtedEntity 被伤害的实体 + /// @param damage 伤害 public HurtEntity( FallingBlockEntity entity, BlockPos pos, - Level level, + ServerLevel level, Entity hurtedEntity, float damage ) { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/event/AppendCustomHoverTextEvent.java b/src/main/java/dev/dubhe/anvilcraft/api/event/AppendCustomHoverTextEvent.java new file mode 100644 index 0000000000..c325972b86 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/event/AppendCustomHoverTextEvent.java @@ -0,0 +1,25 @@ +package dev.dubhe.anvilcraft.api.event; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; +import net.neoforged.bus.api.Event; +import org.jspecify.annotations.Nullable; + +import java.util.function.Consumer; + +@Getter +@AllArgsConstructor +public class AppendCustomHoverTextEvent extends Event { + private final ItemStack stack; + private final Item.TooltipContext context; + private final TooltipDisplay display; + private final @Nullable Player player; + private final TooltipFlag tooltipFlag; + private final Consumer builder; +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/event/HammerChangeBlockEvent.java b/src/main/java/dev/dubhe/anvilcraft/api/event/HammerChangeBlockEvent.java new file mode 100644 index 0000000000..9667784586 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/event/HammerChangeBlockEvent.java @@ -0,0 +1,47 @@ +package dev.dubhe.anvilcraft.api.event; + +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.level.BlockEvent; + +public class HammerChangeBlockEvent extends BlockEvent { + @Getter + private final Player player; + @Getter + private final BlockState oldState; + @Getter + @Setter + private boolean isVerified; + + public HammerChangeBlockEvent( + LevelAccessor level, + Player player, + BlockPos pos, + BlockState state, + BlockState oldState, + boolean isVerified + ) { + super(level, pos, state); + this.player = player; + this.oldState = oldState; + this.isVerified = isVerified; + } + + public static boolean invoke( + LevelAccessor level, + Player player, + BlockPos pos, + BlockState state, + BlockState oldState, + boolean isVerified + ) { + HammerChangeBlockEvent event = new HammerChangeBlockEvent(level, player, pos, state, oldState, isVerified); + NeoForge.EVENT_BUS.post(event); + return event.isVerified(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/event/LightningBoltStrikeEvent.java b/src/main/java/dev/dubhe/anvilcraft/api/event/LightningBoltStrikeEvent.java index 86456249a6..a9fcf3c53c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/event/LightningBoltStrikeEvent.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/event/LightningBoltStrikeEvent.java @@ -12,13 +12,11 @@ public class LightningBoltStrikeEvent extends EntityEvent { private final BlockPos pos; private final LightningBolt entity; - /** - * 雷击事件 - * - * @param entity 闪电 - * @param level 世界 - * @param pos 位置 - */ + /// 雷击事件 + /// + /// @param entity 闪电 + /// @param level 世界 + /// @param pos 位置 public LightningBoltStrikeEvent(LightningBolt entity, Level level, BlockPos pos) { super(entity); this.level = level; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/event/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/event/package-info.java index cece9d51cb..d76a91a5c2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/event/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/event/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.event; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/fluid/CapacityModifiableFluidHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/fluid/CapacityModifiableFluidHandler.java new file mode 100644 index 0000000000..e8dbbde2cf --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/fluid/CapacityModifiableFluidHandler.java @@ -0,0 +1,19 @@ +package dev.dubhe.anvilcraft.api.fluid; + +import net.minecraft.core.NonNullList; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.fluid.FluidStacksResourceHandler; + +public class CapacityModifiableFluidHandler extends FluidStacksResourceHandler { + public CapacityModifiableFluidHandler(int size, int capacity) { + super(size, capacity); + } + + public CapacityModifiableFluidHandler(NonNullList stacks, int capacity) { + super(stacks, capacity); + } + + public void setCapacity(int capacity) { + this.capacity = capacity; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/fluid/FluidStackResourceHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/fluid/FluidStackResourceHandler.java new file mode 100644 index 0000000000..6031a29249 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/fluid/FluidStackResourceHandler.java @@ -0,0 +1,151 @@ +package dev.dubhe.anvilcraft.api.fluid; + +import lombok.Getter; +import lombok.Setter; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.common.util.ValueIOSerializable; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.fluids.FluidType; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.TransferPreconditions; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.transaction.SnapshotJournal; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; + +import java.util.Objects; + +public class FluidStackResourceHandler implements ResourceHandler, ValueIOSerializable { + @Getter + private FluidStack stack = FluidStack.EMPTY; + @Setter + private int capacity; + + private final StackJournal snapshotJournal = new StackJournal(); + + public FluidStackResourceHandler() { + this(FluidType.BUCKET_VOLUME); + } + + public FluidStackResourceHandler(int capacity) { + this.capacity = capacity; + } + + @Override + public int size() { + return 1; + } + + @Override + public FluidResource getResource(int index) { + return FluidResource.of(this.stack); + } + + @Override + public long getAmountAsLong(int index) { + return this.stack.getAmount(); + } + + @Override + public long getCapacityAsLong(int index, FluidResource resource) { + return this.isValid(index, resource) ? this.capacity : 0; + } + + @Override + public boolean isValid(int index, FluidResource resource) { + return resource.matches(this.stack); + } + + @Override + public int insert(int index, FluidResource resource, int amount, TransactionContext transaction) { + Objects.checkIndex(index, this.size()); + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); + + int currentAmount = this.getAmountAsInt(index); + + if (currentAmount == 0 && this.isValid(index, resource)) { + int inserted = Math.min(amount, this.getCapacityAsInt(index, resource) - currentAmount); + + if (inserted > 0) { + this.snapshotJournal.updateSnapshots(transaction); + this.stack = resource.toStack(currentAmount + inserted); + this.onContentChanged(this.stack); + return inserted; + } + } + + return 0; + } + + @Override + public int extract(int index, FluidResource resource, int amount, TransactionContext transaction) { + Objects.checkIndex(index, this.size()); + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); + + if (this.isValid(index, resource)) { + int currentAmount = this.getAmountAsInt(index); + int extracted = Math.min(amount, currentAmount); + + if (extracted > 0) { + this.snapshotJournal.updateSnapshots(transaction); + this.stack = resource.toStack(currentAmount - extracted); + this.onContentChanged(this.stack); + return extracted; + } + } + + return 0; + } + + public void set(FluidResource resource, int amount) { + TransferPreconditions.checkNonNegative(amount); + if (resource.isEmpty() && amount > 0) { + throw new IllegalArgumentException("Resource is empty but the amount is positive: " + amount); + } + + this.stack = resource.toStack(amount); + this.onContentChanged(this.stack); + } + + @Override + public void serialize(ValueOutput output) { + output.store("Fluid", FluidStack.OPTIONAL_CODEC, this.stack); + } + + @Override + public void deserialize(ValueInput input) { + this.stack = input.read("Fluid", FluidStack.OPTIONAL_CODEC).orElse(FluidStack.EMPTY); + this.onContentChanged(this.stack); + } + + public boolean isFull() { + return this.stack.amount() == this.capacity; + } + + public float getFill() { + return (float) this.stack.amount() / this.capacity; + } + + protected void onContentChanged(FluidStack stack) { + } + + private class StackJournal extends SnapshotJournal { + private StackJournal() { + } + + @Override + protected FluidStack createSnapshot() { + return FluidStackResourceHandler.this.stack.copy(); + } + + @Override + protected void revertToSnapshot(FluidStack snapshot) { + FluidStackResourceHandler.this.stack = snapshot; + } + + @Override + protected void onRootCommit(FluidStack originalState) { + FluidStackResourceHandler.this.onContentChanged(originalState); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/fluid/IFluidHandlerHolder.java b/src/main/java/dev/dubhe/anvilcraft/api/fluid/IFluidHandlerHolder.java index ea6b1264e6..8bb1560e7a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/fluid/IFluidHandlerHolder.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/fluid/IFluidHandlerHolder.java @@ -1,10 +1,9 @@ package dev.dubhe.anvilcraft.api.fluid; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; -/** - * 持有FluidTank的 - */ +/// 持有FluidTank的 public interface IFluidHandlerHolder { - IFluidHandler getFluidHandler(); + ResourceHandler getFluidHandler(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/fluid/InfinityFluidTank.java b/src/main/java/dev/dubhe/anvilcraft/api/fluid/InfinityFluidTank.java new file mode 100644 index 0000000000..4f62672525 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/fluid/InfinityFluidTank.java @@ -0,0 +1,109 @@ +package dev.dubhe.anvilcraft.api.fluid; + +import dev.dubhe.anvilcraft.mixin.accessor.StacksResourceHandlerAccessor; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.NonNullList; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.fluid.FluidStacksResourceHandler; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; + +@Getter +@Setter +public class InfinityFluidTank extends FluidStacksResourceHandler { + private boolean infinity; + + public InfinityFluidTank(int capacity) { + this(1, capacity, false); + } + + public InfinityFluidTank(int capacity, boolean infinity) { + this(1, capacity, infinity); + } + + public InfinityFluidTank(int size, int capacity, boolean infinity) { + super(size, capacity); + this.infinity = infinity; + } + + public InfinityFluidTank(NonNullList stacks, int capacity, boolean infinity) { + super(stacks, capacity); + this.infinity = infinity; + } + + @Override + protected int getCapacity(int index, FluidResource resource) { + if (this.isInfinity()) return Integer.MAX_VALUE; + return super.getCapacity(index, resource); + } + + public void setCapacity(int capacity) { + this.capacity = capacity; + for (int i = 0; i < this.size(); i++) { + FluidResource resource = this.getResource(i); + if (this.infinity && !resource.isEmpty()) { + this.stacks.set(i, this.getStackFrom(resource, capacity)); + } + } + } + + @Override + public int extract(FluidResource resource, int amount, TransactionContext transaction) { + if (!this.infinity) return super.extract(resource, amount, transaction); + + for (int i = 0; i < this.size(); i++) { + int extracted = this.extract(i, resource, amount, transaction); + if (extracted == amount) return amount; + } + return 0; + } + + @Override + public int extract(int index, FluidResource resource, int amount, TransactionContext transaction) { + if (!this.infinity) return super.extract(index, resource, amount, transaction); + + return this.getResource(index).isEmpty() ? 0 : amount; + } + + @Override + public int insert(FluidResource resource, int amount, TransactionContext transaction) { + if (!this.infinity) return super.insert(resource, amount, transaction); + + for (int i = 0; i < this.size(); i++) { + int inserted = this.insert(i, resource, amount, transaction); + if (inserted == amount) return amount; + } + return 0; + } + + @Override + public int insert(int index, FluidResource resource, int amount, TransactionContext transaction) { + if (!this.infinity) return super.insert(index, resource, amount, transaction); + + if (resource.isEmpty() || !this.isValid(index, resource)) return 0; + + FluidResource resourceIn = this.getResource(0); + if (!resourceIn.isEmpty() && !resourceIn.equals(resource)) return 0; + + if (resourceIn.isEmpty()) { + ((StacksResourceHandlerAccessor) this).getSnapshotJournals().get(index).updateSnapshots(transaction); + this.stacks.set(index, this.getStackFrom(resource, this.getCapacity(index, resource))); + } + return amount; + } + + @Override + public void serialize(ValueOutput output) { + super.serialize(output); + output.putBoolean("Infinity", this.infinity); + } + + @Override + public void deserialize(ValueInput input) { + super.deserialize(input); + this.infinity = input.getBooleanOr("Infinity", false); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/fluid/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/fluid/package-info.java index b994f6ec8b..9c82f6cd08 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/fluid/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/fluid/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.fluid; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/fluidtank/InfinityFluidTank.java b/src/main/java/dev/dubhe/anvilcraft/api/fluidtank/InfinityFluidTank.java deleted file mode 100644 index a01d799003..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/fluidtank/InfinityFluidTank.java +++ /dev/null @@ -1,82 +0,0 @@ -package dev.dubhe.anvilcraft.api.fluidtank; - -import lombok.Getter; -import lombok.Setter; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.neoforged.neoforge.fluids.FluidStack; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.fluids.capability.templates.FluidTank; - -import java.util.function.Predicate; - -public class InfinityFluidTank extends FluidTank { - @Setter - @Getter - private boolean isInfinity; - - public InfinityFluidTank(int capacity, Predicate validator) { - this(capacity, validator, true); - } - - public InfinityFluidTank(int capacity, Predicate validator, boolean isInfinity) { - super(capacity, validator); - this.isInfinity = isInfinity; - } - - public InfinityFluidTank(int capacity) { - this(capacity, true); - } - - public InfinityFluidTank(int capacity, boolean isInfinity) { - super(capacity); - this.isInfinity = isInfinity; - } - - public FluidTank readFromNBT(HolderLookup.Provider lookupProvider, CompoundTag nbt) { - super.readFromNBT(lookupProvider, nbt); - this.isInfinity = nbt.getBoolean("Infinity"); - return this; - } - - public CompoundTag writeToNBT(HolderLookup.Provider lookupProvider, CompoundTag nbt) { - super.writeToNBT(lookupProvider, nbt); - nbt.putBoolean("Infinity", this.isInfinity); - return nbt; - } - - @Override - public FluidTank setCapacity(int capacity) { - super.setCapacity(capacity); - if (this.isInfinity && !this.fluid.isEmpty()) this.fluid.setAmount(this.capacity); - return this; - } - - @Override - public int fill(FluidStack resource, IFluidHandler.FluidAction action) { - if (!this.isInfinity) return super.fill(resource, action); - - if (resource.isEmpty() || !this.isFluidValid(resource)) return 0; - - if (!this.fluid.isEmpty() && !FluidStack.isSameFluidSameComponents(this.fluid, resource)) return 0; - - if (!action.simulate() && this.fluid.isEmpty()) { - this.fluid = resource.copyWithAmount(this.capacity); - this.onContentsChanged(); - } - return resource.getAmount(); - - } - - @Override - public FluidStack drain(int maxDrain, IFluidHandler.FluidAction action) { - if (!this.isInfinity) return super.drain(maxDrain, action); - - return this.isEmpty() ? FluidStack.EMPTY : this.fluid.copyWithAmount(maxDrain); - } - - @Override - public int getSpace() { - return isInfinity ? Integer.MAX_VALUE : super.getSpace(); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/fluidtank/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/fluidtank/package-info.java deleted file mode 100644 index b61332633c..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/fluidtank/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.api.fluidtank; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/dev/dubhe/anvilcraft/api/hammer/HammerManager.java b/src/main/java/dev/dubhe/anvilcraft/api/hammer/HammerManager.java index 9295e40d4f..0792eb918f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/hammer/HammerManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/hammer/HammerManager.java @@ -16,12 +16,10 @@ public static void registerChange(Supplier block, IHammerChangeable chang HammerManager.INIT_CHANGE.put(block, changeable); } - /** - * 获取方块修改方法实现 - * - * @param block 方块 - * @return 方块修改方法实现 - */ + /// 获取方块修改方法实现 + /// + /// @param block 方块 + /// @return 方块修改方法实现 public static IHammerChangeable getChange(Block block) { if (block instanceof IHammerChangeable changeable) return changeable; return HammerManager.CHANGE.getOrDefault( @@ -31,9 +29,7 @@ public static IHammerChangeable getChange(Block block) { ); } - /** - * 注册铁砧锤处理器 - */ + /// 注册铁砧锤处理器 public static void register() { for (Map.Entry, IHammerChangeable> entry : INIT_CHANGE.entrySet()) { HammerManager.CHANGE.put(entry.getKey().get(), entry.getValue()); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/hammer/HammerRotateBehavior.java b/src/main/java/dev/dubhe/anvilcraft/api/hammer/HammerRotateBehavior.java index cb3171f864..50d77aee4e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/hammer/HammerRotateBehavior.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/hammer/HammerRotateBehavior.java @@ -7,17 +7,15 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; -/** - * 可被锤子改变的方块 - */ +/// 可被锤子改变的方块 @SuppressWarnings("unused") public interface HammerRotateBehavior extends IHammerChangeable { - DirectionProperty FACING_HOPPER = BlockStateProperties.FACING_HOPPER; - DirectionProperty FACING = BlockStateProperties.FACING; - DirectionProperty HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING; + EnumProperty FACING_HOPPER = BlockStateProperties.FACING_HOPPER; + EnumProperty FACING = BlockStateProperties.FACING; + EnumProperty HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING; HammerRotateBehavior DEFAULT = new HammerRotateBehavior() { }; HammerRotateBehavior EMPTY = new HammerRotateBehavior() { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHammerChangeable.java b/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHammerChangeable.java index 436597b207..20f2866408 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHammerChangeable.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHammerChangeable.java @@ -6,21 +6,17 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -/** - * 可被锤子改变的 - */ +/// 可被锤子改变的 public interface IHammerChangeable { - /** - * 改变状态 - * - * @param player 玩家 - * @param blockPos 坐标 - * @param level 世界 - * @param anvilHammer 铁砧锤物品 - * @return 是否改变成功 - */ + /// 改变状态 + /// + /// @param player 玩家 + /// @param blockPos 坐标 + /// @param level 世界 + /// @param anvilHammer 铁砧锤物品 + /// @return 是否改变成功 boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer); default boolean checkBlockState(BlockState blockState) { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHammerRemovable.java b/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHammerRemovable.java index c6c5aa9fc4..bbcf7a3cbb 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHammerRemovable.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHammerRemovable.java @@ -1,7 +1,5 @@ package dev.dubhe.anvilcraft.api.hammer; -/** - * 可被锤子移除的 - */ +/// 可被锤子移除的 public interface IHammerRemovable { } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHasHammerEffect.java b/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHasHammerEffect.java index 3cdbfbd818..dfdff95180 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHasHammerEffect.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/hammer/IHasHammerEffect.java @@ -1,6 +1,6 @@ package dev.dubhe.anvilcraft.api.hammer; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/hammer/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/hammer/package-info.java index fc32d9c86e..bd39ca5ffc 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/hammer/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/hammer/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.hammer; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/heat/HeatRecorder.java b/src/main/java/dev/dubhe/anvilcraft/api/heat/HeatRecorder.java index 071baa4040..b492e2c6bf 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/heat/HeatRecorder.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/heat/HeatRecorder.java @@ -11,7 +11,7 @@ import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.init.block.ModBlocks; import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -29,11 +29,11 @@ import java.util.function.Supplier; public class HeatRecorder { - private static final Map ENTRY_TO_ID = new HashMap<>(); - private static final Map> ENTRIES = new HashMap<>(); + private static final Map ENTRY_TO_ID = new HashMap<>(); + private static final Map> ENTRIES = new HashMap<>(); static final Set> PRODUCER_INFOS = new HashSet<>(); - public static RegisterHelper registerHeatables(ResourceLocation id) { + public static RegisterHelper registerHeatables(Identifier id) { return new RegisterHelper(id); } @@ -44,9 +44,9 @@ public static HeaterInfo registerProducerInfo(HeaterInfo info) { @SuppressWarnings({"unused", "UnusedReturnValue"}) public static class RegisterHelper { - private final ResourceLocation id; + private final Identifier id; - public RegisterHelper(ResourceLocation id) { + public RegisterHelper(Identifier id) { this.id = id; } @@ -167,14 +167,14 @@ public RegisterHelper customTier(HeatTier tier, Block heatable, TriPredicate getEntry(ResourceLocation id, HeatTier tier) { + public static Optional getEntry(Identifier id, HeatTier tier) { for (HeatableBlockEntry entry : ENTRIES.get(id)) { if (entry.getTier().equals(tier)) return Optional.of(entry); } return Optional.empty(); } - public static Optional getEntry(ResourceLocation id, Level level, BlockPos pos, BlockState state) { + public static Optional getEntry(Identifier id, Level level, BlockPos pos, BlockState state) { for (HeatableBlockEntry entry : ENTRIES.get(id)) { if (entry.isValidBlock(level, pos, state)) return Optional.of(entry); } @@ -194,7 +194,7 @@ public static Optional getEntry(Level level, BlockPos pos, B .flatMap(id -> Optional.ofNullable(ENTRIES.get(id).get(tier.ordinal()))); } - private static Pair, Optional> getIdAndEntry(HeatTier tier) { + private static Pair, Optional> getIdAndEntry(HeatTier tier) { for (List entries : ENTRIES.values()) { for (HeatableBlockEntry entry : entries) { if (entry.getTier().equals(tier)) { @@ -205,7 +205,7 @@ private static Pair, Optional> ge return new Pair<>(Optional.empty(), Optional.empty()); } - private static Pair, Optional> getIdAndEntry( + private static Pair, Optional> getIdAndEntry( Level level, BlockPos pos, BlockState state ) { for (List entries : ENTRIES.values()) { @@ -218,11 +218,11 @@ private static Pair, Optional> ge return new Pair<>(Optional.empty(), Optional.empty()); } - public static Optional getId(HeatTier tier) { + public static Optional getId(HeatTier tier) { return getIdAndEntry(tier).getFirst(); } - public static Optional getId(Level level, BlockPos pos, BlockState state) { + public static Optional getId(Level level, BlockPos pos, BlockState state) { return getIdAndEntry(level, pos, state).getFirst(); } @@ -234,13 +234,13 @@ public static Optional getHeatableBlock(Level level, BlockPos pos, BlockS return getEntry(level, pos, prevState, tier).map(HeatableBlockEntry::getDefaultBlock); } - public static Optional getHeatableBlock(ResourceLocation id, HeatTier tier) { + public static Optional getHeatableBlock(Identifier id, HeatTier tier) { return getEntry(id, tier).map(HeatableBlockEntry::getDefaultBlock); } public static Optional getPrevTierEntry(Level level, BlockPos pos, BlockState state) { - Pair, Optional> pair = getIdAndEntry(level, pos, state); - Optional idOp = pair.getFirst(); + Pair, Optional> pair = getIdAndEntry(level, pos, state); + Optional idOp = pair.getFirst(); Optional entryOp = pair.getSecond(); if (idOp.isEmpty() || entryOp.isEmpty()) return Optional.empty(); List entries = ENTRIES.get(idOp.get()); @@ -256,8 +256,8 @@ public static Optional getPrevTierHeatableBlock(Level level, BlockPos pos } public static Optional getNextTierEntry(Level level, BlockPos pos, BlockState state) { - Pair, Optional> pair = getIdAndEntry(level, pos, state); - Optional idOp = pair.getFirst(); + Pair, Optional> pair = getIdAndEntry(level, pos, state); + Optional idOp = pair.getFirst(); Optional entryOp = pair.getSecond(); if (idOp.isEmpty() || entryOp.isEmpty()) return Optional.empty(); List entries = ENTRIES.get(idOp.get()); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/heat/HeaterManager.java b/src/main/java/dev/dubhe/anvilcraft/api/heat/HeaterManager.java index 066c6b487a..21b039620c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/heat/HeaterManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/heat/HeaterManager.java @@ -6,19 +6,21 @@ import com.google.common.collect.Multimaps; import com.mojang.datafixers.util.Pair; import dev.anvilcraft.lib.v2.util.Util; +import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.block.entity.heatable.HeatableBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlockTags; import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.redstone.Orientation; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; @@ -30,8 +32,6 @@ import java.util.Optional; import java.util.Set; -import static dev.dubhe.anvilcraft.api.power.PowerGrid.GRID_TICK; - public class HeaterManager { private static final Map INSTANCES = new HashMap<>(); @@ -40,7 +40,7 @@ public class HeaterManager { private final Multimap, BlockPos> producers = Multimaps.synchronizedSetMultimap(HashMultimap.create()); public static HeaterManager getInstance(Level level) { - if (level.isClientSide) return new HeaterManager(level); + if (level.isClientSide()) return new HeaterManager(level); if (!INSTANCES.containsKey(level)) { INSTANCES.put(level, new HeaterManager(level)); } @@ -69,7 +69,7 @@ public static void removeProducer(BlockPos pos, Level level, HeaterInfo info) public static void tickAll() { INSTANCES.forEach((level, manager) -> { - if (level.getGameTime() % GRID_TICK != 0) return; + if (level.getGameTime() % PowerGrid.GRID_TICK != 0) return; if (level.tickRateManager().isFrozen() && !level.tickRateManager().isSteppingForward()) return; manager.tick(); }); @@ -121,7 +121,7 @@ private void tickProducers( } } - private void tickHeatableBlock(BlockPos pos, @Nullable HeatTierLine.Point point) { + private void tickHeatableBlock(BlockPos pos, HeatTierLine.@Nullable Point point) { this.heatableBlocks.remove(pos); if (!this.level.isLoaded(pos)) return; BlockState heatableState = this.level.getBlockState(pos); @@ -129,7 +129,7 @@ private void tickHeatableBlock(BlockPos pos, @Nullable HeatTierLine.Point point) this.heatableBlocks.add(pos); HeatableBlockEntity heatable = Util.castSafely(this.level.getBlockEntity(pos), HeatableBlockEntity.class).orElse(null); - Optional idOp = HeatRecorder.getId(this.level, pos, heatableState); + Optional idOp = HeatRecorder.getId(this.level, pos, heatableState); if (idOp.isEmpty()) return; HeatTier tier = HeatRecorder.getTier(this.level, pos, heatableState) .orElseThrow(() -> new IllegalStateException("Unexpected non tier heatable block!")); @@ -147,17 +147,14 @@ private void tickHeatableBlock(BlockPos pos, @Nullable HeatTierLine.Point point) // region this.level.updateNeighbourForOutputSignal(pos, deltaBlock); for (Direction direction : Direction.values()) { BlockPos neighbourPos = pos.relative(direction); - if (this.level.isLoaded(neighbourPos)) { - BlockState neighbourState = this.level.getBlockState(neighbourPos); - neighbourState.onNeighborChange(this.level, neighbourPos, pos); - if (neighbourState.isRedstoneConductor(this.level, neighbourPos)) { - neighbourPos = neighbourPos.relative(direction); - neighbourState = this.level.getBlockState(neighbourPos); - if (neighbourState.getWeakChanges(this.level, neighbourPos)) { - this.level.neighborChanged(neighbourState, neighbourPos, deltaBlock, pos, false); - } - } - } + if (!this.level.isLoaded(neighbourPos)) continue; + BlockState neighbourState = this.level.getBlockState(neighbourPos); + neighbourState.onNeighborChange(this.level, neighbourPos, pos); + if (!neighbourState.isRedstoneConductor(this.level, neighbourPos)) continue; + neighbourPos = neighbourPos.relative(direction); + neighbourState = this.level.getBlockState(neighbourPos); + if (!neighbourState.getWeakChanges(this.level, neighbourPos)) continue; + this.level.neighborChanged(neighbourState, neighbourPos, deltaBlock, Orientation.random(this.level.getRandom()), false); } // endregion heatable = heatableEntity; @@ -185,17 +182,20 @@ private void tickHeatableBlock(BlockPos pos, @Nullable HeatTierLine.Point point) // region this.level.updateNeighbourForOutputSignal(pos, prevState.getBlock()); for (Direction direction : Direction.values()) { BlockPos neighbourPos = pos.relative(direction); - if (this.level.isLoaded(neighbourPos)) { - BlockState neighbourState = this.level.getBlockState(neighbourPos); - neighbourState.onNeighborChange(this.level, neighbourPos, pos); - if (neighbourState.isRedstoneConductor(this.level, neighbourPos)) { - neighbourPos = neighbourPos.relative(direction); - neighbourState = this.level.getBlockState(neighbourPos); - if (neighbourState.getWeakChanges(this.level, neighbourPos)) { - this.level.neighborChanged(neighbourState, neighbourPos, prevState.getBlock(), pos, false); - } - } - } + if (!this.level.isLoaded(neighbourPos)) continue; + BlockState neighbourState = this.level.getBlockState(neighbourPos); + neighbourState.onNeighborChange(this.level, neighbourPos, pos); + if (!neighbourState.isRedstoneConductor(this.level, neighbourPos)) continue; + neighbourPos = neighbourPos.relative(direction); + neighbourState = this.level.getBlockState(neighbourPos); + if (!neighbourState.getWeakChanges(this.level, neighbourPos)) continue; + this.level.neighborChanged( + neighbourState, + neighbourPos, + prevState.getBlock(), + Orientation.random(this.level.getRandom()), + false + ); } // endregion } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/HeatCollectorManager.java b/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/HeatCollectorManager.java index cfe8f9c2fe..073f15d4b0 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/HeatCollectorManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/HeatCollectorManager.java @@ -1,6 +1,7 @@ package dev.dubhe.anvilcraft.api.heat.collector; import dev.anvilcraft.lib.v2.util.Util; +import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.block.entity.HeatCollectorBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -30,11 +31,10 @@ import java.util.Map; import java.util.Optional; import java.util.Set; - -import static dev.dubhe.anvilcraft.api.power.PowerGrid.GRID_TICK; +import java.util.WeakHashMap; public class HeatCollectorManager { - private static final Map INSTANCES = new HashMap<>(); + private static final Map INSTANCES = new WeakHashMap<>(); private static final List SOURCE_ENTRIES = new ArrayList<>(); static { @@ -53,7 +53,7 @@ public class HeatCollectorManager { registerEntry(HeatSourceEntry.predicate( 4, state -> state.getFluidState().isSourceOfType(Fluids.LAVA), - it -> Blocks.OBSIDIAN.defaultBlockState() + _ -> Blocks.OBSIDIAN.defaultBlockState() )); registerEntry(HeatSourceEntry.simple(4, Blocks.LAVA_CAULDRON, ModBlocks.OBSIDIAN_CAULDRON.get())); @@ -65,13 +65,7 @@ public class HeatCollectorManager { private final Level level; private final Set heatCollectors = Collections.synchronizedSet(new HashSet<>()); - public static void clear() { - INSTANCES.clear(); - } - - /** - * 获取当前维度的HeatCollectorManager - */ + /// 获取当前维度的HeatCollectorManager public static HeatCollectorManager getInstance(Level level) { synchronized (INSTANCES) { if (INSTANCES.get(level) == null) { @@ -81,6 +75,10 @@ public static HeatCollectorManager getInstance(Level level) { } } + public static void remove(Level level) { + INSTANCES.remove(level); + } + public static void registerEntry(HeatSourceEntry entry) { SOURCE_ENTRIES.add(entry); } @@ -105,9 +103,9 @@ public static void checkWhenPlaceCollector(BlockPlaceContext ctx, BlockPos pos, AABB validRange = AABB.ofSize(pos.getCenter(), 9, 9, 9); for (BlockPos checkedPos : manager.heatCollectors) { if (validRange.contains(checkedPos.getCenter())) { - Optional.ofNullable(ctx.getPlayer()).ifPresent(player -> player.displayClientMessage( + Optional.ofNullable(ctx.getPlayer()).ifPresent(player -> player.sendOverlayMessage( Component.translatable("block.anvilcraft.heat_collector.placement_too_close_to_another") - .withStyle(ChatFormatting.RED), true + .withStyle(ChatFormatting.RED) )); manager.heatCollectors.add(pos); return; @@ -125,10 +123,8 @@ public static void tickAll() { } private void tick() { - if (level.isClientSide) { - return; - } - if (this.level.getGameTime() % GRID_TICK != 0) return; + if (this.level.isClientSide()) return; + if (this.level.getGameTime() % PowerGrid.GRID_TICK != 0) return; List collectors = this.getCollectorsFromNWToSE(); Map> heatSources = new HashMap<>(); for (HeatCollectorBlockEntity collector : collectors) { @@ -169,7 +165,7 @@ private void collectSources(HeatCollectorBlockEntity collector, Map { - heatSourcesCache.computeIfAbsent(new Entry(finalPos, state, entry), it -> new Double2ObjectAVLTreeMap<>()) + heatSourcesCache.computeIfAbsent(new Entry(finalPos, state, entry), _ -> new Double2ObjectAVLTreeMap<>()) .put( Vector3i.distance( finalPos.getX(), finalPos.getY(), finalPos.getZ(), @@ -182,14 +178,12 @@ private void collectSources(HeatCollectorBlockEntity collector, Map new Double2ObjectAVLTreeMap<>()) + .computeIfAbsent(entry.getKey(), _ -> new Double2ObjectAVLTreeMap<>()) .putAll(entry.getValue()); } } - /** - * 获取集热器的List集合(以从西北到东南排序) - */ + /// 获取集热器的List集合(以从西北到东南排序) private List getCollectorsFromNWToSE() { List collectors = new ArrayList<>(); for (Iterator iterator = this.heatCollectors.iterator(); iterator.hasNext(); ) { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/HeatSourceEntry.java b/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/HeatSourceEntry.java index 9488aead62..97f314e1b9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/HeatSourceEntry.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/HeatSourceEntry.java @@ -41,9 +41,7 @@ public static HeatSourceEntry simple(int charge, Block input, Block output) { return new Simple(charge, input, output); } - /** - * not really forever - */ + /// not really forever public static HeatSourceEntry forever(int charge, Block block) { return new Always(charge, block); } @@ -64,15 +62,13 @@ public Predicate( @Override public int accepts(BlockState state) { - if (input.test(state)) { - return this.getCharge(); - } - return 0; + if (!this.input.test(state)) return 0; + return this.getCharge(); } @Override public BlockState transform(BlockState state) { - return transformer.apply(state); + return this.transformer.apply(state); } } @@ -88,12 +84,12 @@ public Simple(int charge, Block input, Block output) { @Override public int accepts(BlockState state) { - return state.is(input) ? getCharge() : 0; + return state.is(this.input) ? getCharge() : 0; } @Override public BlockState transform(BlockState state) { - return output.defaultBlockState(); + return this.output.defaultBlockState(); } } @@ -107,12 +103,12 @@ public Always(int charge, Block input) { @Override public int accepts(BlockState state) { - return state.is(input) ? getCharge() : 0; + return state.is(this.input) ? getCharge() : 0; } @Override public BlockState transform(BlockState state) { - return input.defaultBlockState(); + return this.input.defaultBlockState(); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/IHeatCollector.java b/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/IHeatCollector.java new file mode 100644 index 0000000000..2e1e4562f7 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/IHeatCollector.java @@ -0,0 +1,18 @@ +package dev.dubhe.anvilcraft.api.heat.collector; + +import net.minecraft.core.BlockPos; + +/** + * 热能收集器接口,用于统一处理热能收集逻辑。 + */ +public interface IHeatCollector { + BlockPos getCollectorPos(); + + boolean isCollectorWorking(); + + void setCollectorWorking(boolean working); + + int inputHeat(int amount); + + int getCollectorRange(); +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/package-info.java index 95a8d7e107..3871d21a5c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/heat/collector/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.heat.collector; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/heat/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/heat/package-info.java index a9945c430a..d70204f453 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/heat/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/heat/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.heat; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/holderset/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/holderset/package-info.java new file mode 100644 index 0000000000..a07e9a1dcd --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/holderset/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.api.holderset; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/IExplosionExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/IExplosionExtension.java index 59c0102345..b0a913b1c8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/IExplosionExtension.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/IExplosionExtension.java @@ -4,9 +4,7 @@ import java.util.Collection; -/** - * 用于设置爆炸方块转换 - */ +/// 用于设置爆炸方块转换 public interface IExplosionExtension { default void anvilcraft$setBlockTransformExplosion(Collection blockTransformExplosions) { throw new AssertionError(); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/IItemSubmitExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/IItemSubmitExtension.java new file mode 100644 index 0000000000..a72c8744c3 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/IItemSubmitExtension.java @@ -0,0 +1,11 @@ +package dev.dubhe.anvilcraft.api.injection; + +public interface IItemSubmitExtension { + default void anvilcraft$setHalfTransparent(boolean halfTransparent) { + throw new AssertionError(); + } + + default boolean anvilcraft$isHalfTransparent() { + throw new AssertionError(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/block/IBlockExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/block/IBlockExtension.java index dfc807ae22..cd7becfc61 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/block/IBlockExtension.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/block/IBlockExtension.java @@ -9,16 +9,14 @@ private Block self() { return (Block) this; } - /** - * Determines if this block can stick to another block when pushed by a piston. - * - * @param pos My pos - * @param state My state - * @param otherPos Other pos - * @param other Other state - * @return True to link blocks - */ + /// Determines if this block can stick to another block when pushed by a piston. + /// + /// @param pos My pos + /// @param state My state + /// @param otherPos Other pos + /// @param other Other state + /// @return True to link blocks default boolean anvilcraft$canStickTo(BlockPos pos, BlockState state, BlockPos otherPos, BlockState other) { - return self().canStickTo(state, other); + return this.self().canStickTo(state, other); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/block/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/block/package-info.java index 9d58783d7e..6e00c14e56 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/block/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/block/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.injection.block; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/block/state/IBlockStateExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/block/state/IBlockStateExtension.java index fb30803306..63d6e73bf2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/block/state/IBlockStateExtension.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/block/state/IBlockStateExtension.java @@ -8,15 +8,13 @@ private BlockState self() { return (BlockState) this; } - /** - * Determines if this block can stick to another block when pushed by a piston. - * - * @param pos My pos - * @param otherPos Other pos - * @param other Other state - * @return True to link blocks - */ + /// Determines if this block can stick to another block when pushed by a piston. + /// + /// @param pos My pos + /// @param otherPos Other pos + /// @param other Other state + /// @return True to link blocks default boolean anvilcraft$canStickTo(BlockPos pos, BlockPos otherPos, BlockState other) { - return self().getBlock().anvilcraft$canStickTo(pos, self(), otherPos, other); + return this.self().getBlock().anvilcraft$canStickTo(pos, this.self(), otherPos, other); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/block/state/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/block/state/package-info.java index 6724a1fbdb..234c26bab7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/block/state/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/block/state/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.injection.block.state; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/IEntityExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/IEntityExtension.java index 22ef679ed6..b89cee67c0 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/IEntityExtension.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/IEntityExtension.java @@ -2,9 +2,7 @@ import net.minecraft.world.phys.Vec3; -/** - * 用于实体mixin中获取实体是否被转向环转向的接口 - */ +/// 用于实体mixin中获取实体是否被转向环转向的接口 public interface IEntityExtension { default boolean anvilcraft$isDeflected() { return false; @@ -13,4 +11,4 @@ public interface IEntityExtension { default Vec3 anvilcraft$getFixedDeltaMovement() { return Vec3.ZERO; } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/IFallingBlockEntityExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/IFallingBlockEntityExtension.java index a2d75d238b..9c1cbb1a65 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/IFallingBlockEntityExtension.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/IFallingBlockEntityExtension.java @@ -1,7 +1,7 @@ package dev.dubhe.anvilcraft.api.injection.entity; public interface IFallingBlockEntityExtension { - default float anvilcraft$getFallDistance() { + default double anvilcraft$getFallDistance() { throw new AssertionError(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/ILivingEntityExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/ILivingEntityExtension.java new file mode 100644 index 0000000000..1c795f52a8 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/ILivingEntityExtension.java @@ -0,0 +1,7 @@ +package dev.dubhe.anvilcraft.api.injection.entity; + +public interface ILivingEntityExtension { + default void anvilcraft$setRaged() { + throw new AssertionError(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/package-info.java index 1383677dbf..bdd88e1442 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/entity/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.injection.entity; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/input/IMouseHandlerExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/input/IMouseHandlerExtension.java similarity index 83% rename from src/main/java/dev/dubhe/anvilcraft/api/input/IMouseHandlerExtension.java rename to src/main/java/dev/dubhe/anvilcraft/api/injection/input/IMouseHandlerExtension.java index 5f9ac76810..6055f02342 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/input/IMouseHandlerExtension.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/input/IMouseHandlerExtension.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.api.input; +package dev.dubhe.anvilcraft.api.injection.input; import net.minecraft.client.MouseHandler; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/input/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/input/package-info.java new file mode 100644 index 0000000000..d902126f09 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/input/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.api.injection.input; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/package-info.java index 12b27d1ca3..4780b2215f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.injection; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/tooltip/ITooltipProviderExtension.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/tooltip/ITooltipProviderExtension.java index 9fa2019b29..c9de06c6eb 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/tooltip/ITooltipProviderExtension.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/tooltip/ITooltipProviderExtension.java @@ -7,28 +7,22 @@ import java.util.List; -/** - * 头戴铁砧锤时需要显示tooltip,用于接口注入至原版内容 - */ +/// 头戴铁砧锤时需要显示tooltip,用于接口注入至原版内容 public interface ITooltipProviderExtension { - /** - * 获取需要渲染的tooltip
- * 此方法用于{@link BlockEntity}及其它类 - * - * @return 一个按顺序存储了所有需要渲染的tooltip的List - * @see ITooltipProviderExtension#anvilcraft$getTooltip(BlockState) - */ + /// 获取需要渲染的tooltip
+ /// 此方法用于{@link BlockEntity}及其它类 + /// + /// @return 一个按顺序存储了所有需要渲染的tooltip的List + /// @see ITooltipProviderExtension#anvilcraft$getTooltip(BlockState) default List anvilcraft$getTooltip() { throw new AssertionError(); } - /** - * 获取需要渲染的tooltip
- * 此方法用于{@link Block}类 - * - * @return 一个按顺序存储了所有需要渲染的tooltip的List - * @see ITooltipProviderExtension#anvilcraft$getTooltip() - */ + /// 获取需要渲染的tooltip
+ /// 此方法用于{@link Block}类 + /// + /// @return 一个按顺序存储了所有需要渲染的tooltip的List + /// @see ITooltipProviderExtension#anvilcraft$getTooltip() default List anvilcraft$getTooltip(BlockState state) { throw new AssertionError(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/injection/tooltip/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/injection/tooltip/package-info.java index a417fd3572..59a5c0f112 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/injection/tooltip/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/injection/tooltip/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.injection.tooltip; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/input/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/input/package-info.java deleted file mode 100644 index afbb2651e0..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/input/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.api.input; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/item/IChargerChargeable.java b/src/main/java/dev/dubhe/anvilcraft/api/item/IChargerChargeable.java index 7a1ae631d8..4d277b1eaa 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/item/IChargerChargeable.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/item/IChargerChargeable.java @@ -2,9 +2,7 @@ import net.minecraft.world.item.ItemStack; -/** - * 可使用充电器充电的物品 - */ +/// 可使用充电器充电的物品 public interface IChargerChargeable { ItemStack charge(ItemStack input); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/item/IChargerDischargeable.java b/src/main/java/dev/dubhe/anvilcraft/api/item/IChargerDischargeable.java index 9ec4ee6876..1c474a09e3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/item/IChargerDischargeable.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/item/IChargerDischargeable.java @@ -2,9 +2,7 @@ import net.minecraft.world.item.ItemStack; -/** - * 可使用放电器放电的物品 - */ +/// 可使用放电器放电的物品 public interface IChargerDischargeable { ItemStack discharge(ItemStack input); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/item/IDiskCloneable.java b/src/main/java/dev/dubhe/anvilcraft/api/item/IDiskCloneable.java index a54f763b6b..3c245ba1d2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/item/IDiskCloneable.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/item/IDiskCloneable.java @@ -1,34 +1,31 @@ package dev.dubhe.anvilcraft.api.item; import dev.dubhe.anvilcraft.init.item.ModItems; -import net.minecraft.nbt.CompoundTag; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.BlockHitResult; -/** - * 可用磁盘复制的方块 - */ +/// 可用磁盘复制的方块 public interface IDiskCloneable { - void storeDiskData(CompoundTag tag); + void storeDiskData(ValueOutput output); - void applyDiskData(CompoundTag data); + void applyDiskData(ValueInput input); - /** - * 使用磁盘物品与方块进行交互 - * - * @param level 当前游戏世界 - * @param player 执行交互的玩家 - * @param hand 玩家使用的手(主手或副手) - * @param itemStack 玩家手中的物品堆 - * @param hitResult 方块点击结果信息 - * @return 交互结果,PASS表示不处理,SUCCESS表示处理成功 - */ + /// 使用磁盘物品与方块进行交互 + /// + /// @param level 当前游戏世界 + /// @param player 执行交互的玩家 + /// @param hand 玩家使用的手(主手或副手) + /// @param itemStack 玩家手中的物品堆 + /// @param hitResult 方块点击结果信息 + /// @return 交互结果,PASS表示不处理,SUCCESS表示处理成功 default InteractionResult useDisk( Level level, Player player, diff --git a/src/main/java/dev/dubhe/anvilcraft/api/item/IExtraItemDisplay.java b/src/main/java/dev/dubhe/anvilcraft/api/item/IExtraItemDisplay.java index 27972a8d69..8fb318eca3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/item/IExtraItemDisplay.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/item/IExtraItemDisplay.java @@ -2,44 +2,34 @@ import net.minecraft.world.item.ItemStack; -/** - * 继承该接口的物品可用于在GUI内部,于自身上方额外渲染另一个物品。
- * 注意:额外渲染嵌套层数过深时不会继续渲染。 - */ +/// 继承该接口的物品可用于在GUI内部,于自身上方额外渲染另一个物品。
+/// 注意:额外渲染嵌套层数过深时不会继续渲染。 public interface IExtraItemDisplay { - /** - * 判断一个物品的额外渲染物品。若无需额外渲染,返回{@link ItemStack#EMPTY}。 - * - * @param stack 需判断额外渲染物的物品 - * @return 需要额外渲染的物品。 - */ + /// 判断一个物品的额外渲染物品。若无需额外渲染,返回{@link ItemStack#EMPTY}。 + /// + /// @param stack 需判断额外渲染物的物品 + /// @return 需要额外渲染的物品。 ItemStack getDisplayedItem(ItemStack stack); - /** - * 渲染的额外物品相对于左侧的水平偏移量。 - * 返回0相当于对其自齐最左侧,返回16相当于对齐自身最右侧。 - * - * @param stack 需判断偏移量的物品 - * @return 水平偏移量 - */ + /// 渲染的额外物品相对于左侧的水平偏移量。 + /// 返回0相当于对其自齐最左侧,返回16相当于对齐自身最右侧。 + /// + /// @param stack 需判断偏移量的物品 + /// @return 水平偏移量 int offsetX(ItemStack stack); - /** - * 渲染的额外物品相对于上侧的垂直偏移量。 - * 返回0相当于对齐自身最上侧,返回16相当于对齐自身最下侧。 - * - * @param stack 需判断偏移量的物品 - * @return 垂直偏移量 - */ + /// 渲染的额外物品相对于上侧的垂直偏移量。 + /// 返回0相当于对齐自身最上侧,返回16相当于对齐自身最下侧。 + /// + /// @param stack 需判断偏移量的物品 + /// @return 垂直偏移量 int offsetY(ItemStack stack); - /** - * 渲染的额外物品相对于自身的缩放大小。 - * 返回1.0相当于与自身相同,返回0.5相当于渲染为自身大小的一半。 - * - * @param stack 需判断缩放大小的物品 - * @return 缩放大小 - */ + /// 渲染的额外物品相对于自身的缩放大小。 + /// 返回1.0相当于与自身相同,返回0.5相当于渲染为自身大小的一半。 + /// + /// @param stack 需判断缩放大小的物品 + /// @return 缩放大小 float scale(ItemStack stack); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/item/IMultipleMaterial.java b/src/main/java/dev/dubhe/anvilcraft/api/item/IMultipleMaterial.java index 13b9a92189..3b4fc7257b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/item/IMultipleMaterial.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/item/IMultipleMaterial.java @@ -1,29 +1,23 @@ package dev.dubhe.anvilcraft.api.item; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import java.util.List; -/** - * 多合一配方的材料 - */ +/// 多合一配方的材料 public interface IMultipleMaterial { - /** - * 获取在余烬锻造台内鼠标悬停时显示的tooltip - * - * @return 需要显示的tooltip - */ + /// 获取在余烬锻造台内鼠标悬停时显示的tooltip + /// + /// @return 需要显示的tooltip Component getInputTooltip(ItemStack template, List inputs); - /** - * 获取在余烬锻造台内对应空槽位显示的纹理集 - * - * @param template 作为模板的物品 - * @param id 槽位id - * @param inputs 其它槽位内的物品 - * @return 该槽位应显示的纹理集 - */ - List getEmptySlotTextures(ItemStack template, int id, List inputs); + /// 获取在余烬锻造台内对应空槽位显示的纹理集 + /// + /// @param template 作为模板的物品 + /// @param id 槽位id + /// @param inputs 其它槽位内的物品 + /// @return 该槽位应显示的纹理集 + List getEmptySlotTextures(ItemStack template, int id, List inputs); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/item/IPermutationMaterial.java b/src/main/java/dev/dubhe/anvilcraft/api/item/IPermutationMaterial.java index d93c6c144a..4949d0e11a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/item/IPermutationMaterial.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/item/IPermutationMaterial.java @@ -1,27 +1,21 @@ package dev.dubhe.anvilcraft.api.item; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import java.util.List; -/** - * 嬗变配方的材料 - */ +/// 嬗变配方的材料 public interface IPermutationMaterial { - /** - * 获取在浮霜锻造台内鼠标悬停时显示的tooltip - * - * @param material 作为材料的物品 - * @return 需要显示的tooltip - */ + /// 获取在浮霜锻造台内鼠标悬停时显示的tooltip + /// + /// @param material 作为材料的物品 + /// @return 需要显示的tooltip Component getInputTooltip(ItemStack material); - /** - * 获取在浮霜锻造台内对应空槽位显示的纹理集 - * - * @return 该槽位应显示的纹理集 - */ - List getEmptySlotTextures(); + /// 获取在浮霜锻造台内对应空槽位显示的纹理集 + /// + /// @return 该槽位应显示的纹理集 + List getEmptySlotTextures(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/item/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/item/package-info.java index 5ac4d7e0a2..be2228cb7d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/item/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/item/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.item; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/item/property/IIntegerComponent.java b/src/main/java/dev/dubhe/anvilcraft/api/item/property/IIntegerComponent.java new file mode 100644 index 0000000000..338effec4f --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/item/property/IIntegerComponent.java @@ -0,0 +1,5 @@ +package dev.dubhe.anvilcraft.api.item.property; + +public interface IIntegerComponent { + int value(); +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/FilteredItemStackHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/FilteredItemStackHandler.java index ab9bdec0c7..4e920e8d13 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/FilteredItemStackHandler.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/FilteredItemStackHandler.java @@ -1,38 +1,46 @@ package dev.dubhe.anvilcraft.api.itemhandler; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.anvilcraft.lib.v2.codec.CodecUtil; import dev.dubhe.anvilcraft.block.entity.IFilterBlockEntity; -import dev.dubhe.anvilcraft.item.FilterItem; +import dev.dubhe.anvilcraft.item.utility.FilterItem; import lombok.Getter; -import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.Tag; import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.items.ItemStackHandler; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler; import java.util.List; import java.util.Optional; @Getter @SuppressWarnings("unused") -public class FilteredItemStackHandler extends ItemStackHandler { - - public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( - Codec.BOOL.fieldOf("filterEnabled").forGetter(o -> o.filterEnabled), - CodecUtil.createOptionalCodec(ItemStack.CODEC) - .listOf() - .fieldOf("filteredItems") - .forGetter(o -> o.filteredItems.stream() - .map(it -> it.isEmpty() ? Optional.empty() : Optional.of(it)) - .toList()), - Codec.BOOL.listOf().fieldOf("disabled").forGetter(o -> o.disabled), - Codec.INT.listOf().fieldOf("slotLimits").forGetter(o -> o.slotLimits)) - .apply(ins, FilteredItemStackHandler::new)); +public class FilteredItemStackHandler extends ItemStacksResourceHandler { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( + Codec.BOOL + .fieldOf("filterEnabled") + .forGetter(FilteredItemStackHandler::isFilterEnabled), + CodecUtil.createOptionalCodec(ItemStack.CODEC) + .listOf() + .fieldOf("filteredItems") + .forGetter(o -> o.filteredItems.stream() + .map(it -> Optional.of(it).filter(ItemStack::isEmpty)) + .toList()), + Codec.BOOL + .listOf() + .fieldOf("disabled") + .forGetter(FilteredItemStackHandler::getDisabled), + Codec.INT + .listOf() + .fieldOf("slotLimits") + .forGetter(FilteredItemStackHandler::getSlotLimits) + ).apply(ins, FilteredItemStackHandler::new)); private boolean filterEnabled = false; private NonNullList filteredItems; @@ -48,7 +56,7 @@ public FilteredItemStackHandler( super(filteredItems.size()); this.filteredItems = NonNullList.create(); this.filteredItems.addAll(filteredItems.stream() - .map(it -> it.orElse(ItemStack.EMPTY)).toList() + .map(it -> it.orElse(ItemStack.EMPTY)).toList() ); this.disabled = NonNullList.create(); this.disabled.addAll(disabled); @@ -56,11 +64,9 @@ public FilteredItemStackHandler( this.slotLimits.addAll(slotLimits); } - /** - * 有过滤的容器 - * - * @param size 大小 - */ + /// 有过滤的容器 + /// + /// @param size 大小 public FilteredItemStackHandler(int size) { super(size); this.filteredItems = NonNullList.withSize(size, ItemStack.EMPTY); @@ -68,17 +74,15 @@ public FilteredItemStackHandler(int size) { this.slotLimits = NonNullList.withSize(size, IFilterBlockEntity.DEFAULT_SLOT_LIMIT); } - /** - * 设置是否启用过滤 - * - * @param filterEnabled 是否启用过滤 - */ + /// 设置是否启用过滤 + /// + /// @param filterEnabled 是否启用过滤 public void setFilterEnabled(boolean filterEnabled) { this.filteredItems.clear(); this.filterEnabled = filterEnabled; if (this.filterEnabled) { - for (int i = 0; i < this.getSlots(); i++) { - ItemStack stack = this.getStackInSlot(i); + for (int i = 0; i < this.size(); i++) { + ItemStack stack = this.getStackFrom(this.getResource(i), this.getAmountAsInt(i)); if (stack.isEmpty()) continue; this.setFilter(i, stack); } @@ -86,76 +90,65 @@ public void setFilterEnabled(boolean filterEnabled) { } @Override - public boolean isItemValid(int slot, ItemStack stack) { - if (!this.filterEnabled) return !this.isSlotDisabled(slot); - return !this.isSlotDisabled(slot) && this.isFiltered(slot, stack); + public boolean isValid(int index, ItemResource resource) { + if (this.isSlotDisabled(index)) { + return false; + } + return !this.filterEnabled || this.isFiltered(index, resource.toStack()); } @Override - public void setStackInSlot(int slot, ItemStack stack) { - if (!filterEnabled && !stack.isEmpty()) { - this.setSlotDisabled(slot, false); + public void set(int index, ItemResource resource, int amount) { + if (!this.filterEnabled && !resource.isEmpty()) { + this.setSlotDisabled(index, false); } - super.setStackInSlot(slot, stack); + super.set(index, resource, amount); } - /** - * 判断指定槽位是否被禁用 - * - * @param slot 槽位 - * @return 指定槽位是否被禁用 - */ - public boolean isSlotDisabled(int slot) { - if (!this.filterEnabled) { - return this.disabled.get(slot); - } else { - return this.disabled.get(slot) - || (getStackInSlot(slot).isEmpty() - && this.filteredItems.get(slot).isEmpty() - ); - } + /// 判断指定槽位是否被禁用 + /// + /// @param index 槽位 + /// @return 指定槽位是否被禁用 + public boolean isSlotDisabled(int index) { + if (!this.filterEnabled) return this.disabled.get(index); + return this.disabled.get(index) + || (this.getResource(index).isEmpty() && this.filteredItems.get(index).isEmpty()); } - /** - * 为指定槽位设定禁用情况 - * - * @param slot 槽位 - * @param disable 禁用情况 - */ + /// 为指定槽位设定禁用情况 + /// + /// @param slot 槽位 + /// @param disable 禁用情况 public void setSlotDisabled(int slot, boolean disable) { this.filteredItems.set(slot, ItemStack.EMPTY); this.disabled.set(slot, disable); } - /** - * 使指定槽位禁用情况翻转 - * - * @param slot 槽位 - * @return 指定槽位的禁用情况 - */ + /// 使指定槽位禁用情况翻转 + /// + /// @param slot 槽位 + /// + /// @return 指定槽位的禁用情况 public boolean cycleDisabled(int slot) { boolean disable = !this.disabled.get(slot); this.setSlotDisabled(slot, disable); return disable; } - /** - * 判断指定槽位是否允许放入指定物品堆叠 - * - * @param slot 槽位 - * @param stack 物品堆叠 - * @return 指定槽位是否允许放入指定物品堆叠 - */ + /// 判断指定槽位是否允许放入指定物品堆叠 + /// + /// @param slot 槽位 + /// @param stack 物品堆叠 + /// + /// @return 指定槽位是否允许放入指定物品堆叠 public boolean isFiltered(int slot, ItemStack stack) { return FilterItem.filter(this.filteredItems.get(slot), stack); } - /** - * 设置指定槽位的过滤 - * - * @param slot 槽位 - * @param stack 过滤物品堆叠(不检查NBT) - */ + /// 设置指定槽位的过滤 + /// + /// @param slot 槽位 + /// @param stack 过滤物品堆叠(不检查NBT) public boolean setFilter(int slot, ItemStack stack) { if (slot < 0 || slot >= this.filteredItems.size()) return false; if (stack.isEmpty()) return false; @@ -164,12 +157,11 @@ public boolean setFilter(int slot, ItemStack stack) { return true; } - /** - * 获取指定槽位上的过滤 - * - * @param slot 槽位 - * @return 指定槽位上的过滤 - */ + /// 获取指定槽位上的过滤 + /// + /// @param slot 槽位 + /// + /// @return 指定槽位上的过滤 public ItemStack getFilter(int slot) { return this.filteredItems.get(slot); } @@ -187,99 +179,93 @@ public boolean isEmpty() { return true; } - /** - * 获取指定槽位的物品数量上限 - * - * @param slot 槽位 - * @return 物品数量上限 - */ + /// 获取指定槽位的物品数量上限 + /// + /// @param slot 槽位 + /// + /// @return 物品数量上限 public int getSlotLimit(int slot) { if (slot < 0 || slot >= this.slotLimits.size()) return IFilterBlockEntity.DEFAULT_SLOT_LIMIT; return this.slotLimits.get(slot); } - /** - * 设置指定槽位的物品数量上限 - * - * @param slot 槽位 - * @param limit 物品数量上限 - */ + /// 设置指定槽位的物品数量上限 + /// + /// @param slot 槽位 + /// @param limit 物品数量上限 public void setSlotLimit(int slot, int limit) { if (slot < 0 || slot >= this.slotLimits.size()) return; this.slotLimits.set(slot, limit); } @Override - public CompoundTag serializeNBT(HolderLookup.Provider provider) { - CompoundTag compoundTag = new CompoundTag(); - compoundTag.putBoolean("FilterEnabled", this.filterEnabled); - ListTag inventory = new ListTag(); - int slots = this.getSlots(); - compoundTag.putInt("Size", slots); + public void serialize(ValueOutput output) { + output.putBoolean("FilterEnabled", this.filterEnabled); + int slots = this.size(); + output.putInt("Size", slots); + ValueOutput.ValueOutputList inventory = output.childrenList("Inventory"); for (int slot = 0; slot < slots; slot++) { - CompoundTag inventoryEntry = new CompoundTag(); + ValueOutput inventoryEntry = inventory.addChild(); + inventoryEntry.putInt("Slot", slot); - ItemStack stack = this.getStackInSlot(slot); + + ItemStack stack = this.getStackFrom(this.getResource(slot), this.getAmountAsInt(slot)); inventoryEntry.putBoolean("IsEmptySlot", stack.isEmpty()); if (!stack.isEmpty()) { - Tag itemTag = stack.save(provider); - inventoryEntry.put("SlotItem", itemTag); + inventoryEntry.store("SlotItem", ItemStack.OPTIONAL_CODEC, stack); } ItemStack filtering = this.getFilter(slot); - inventoryEntry.putBoolean("SlotFilterEnabled", !filtering.isEmpty()); if (!filtering.isEmpty()) { - Tag filterItemTag = filtering.save(provider); - inventoryEntry.put("SlotFilterItem", filterItemTag); + inventoryEntry.store("SlotFilterItem", ItemStack.OPTIONAL_CODEC, stack); } inventoryEntry.putBoolean("Disabled", this.disabled.get(slot)); - inventoryEntry.putInt("SlotLimit", this.getSlotLimit(slot)); - inventory.add(inventoryEntry); + inventoryEntry.putInt("SlotLimit", this.getSlotLimit(slot)); } - compoundTag.put("Inventory", inventory); - return compoundTag; } @Override - public void deserializeNBT(HolderLookup.Provider provider, CompoundTag tag) { - if (!tag.contains("Inventory")) return; - this.filterEnabled = tag.getBoolean("FilterEnabled"); - ListTag inventory = (ListTag) tag.get("Inventory"); - int size = tag.getInt("Size"); - for (Tag entry : inventory) { - CompoundTag inventoryEntry = (CompoundTag) entry; - int slot = inventoryEntry.getInt("Slot"); - boolean isEmptySlot = inventoryEntry.getBoolean("IsEmptySlot"); + public void deserialize(ValueInput input) { + Optional inventoryOp = input.childrenList("Inventory"); + if (inventoryOp.isEmpty()) return; + this.filterEnabled = input.getBooleanOr("FilterEnabled", false); + ValueInput.ValueInputList inventory = inventoryOp.get(); + int size = input.getIntOr("Size", -1); + if (size < 0) return; + for (ValueInput entry : inventory) { + int slot = entry.getIntOr("Slot", -1); + if (slot < 0) continue; + + boolean isEmptySlot = entry.getBooleanOr("IsEmptySlot", true); if (!isEmptySlot) { - CompoundTag itemTag = inventoryEntry.getCompound("SlotItem"); - this.stacks.set(slot, ItemStack.parseOptional(provider, itemTag)); + entry.read("SlotItem", ItemStack.OPTIONAL_CODEC).ifPresent(stack -> this.stacks.set(slot, stack)); } - boolean slotFilterEnabled = inventoryEntry.getBoolean("SlotFilterEnabled"); + + boolean slotFilterEnabled = entry.getBooleanOr("SlotFilterEnabled", false); if (slotFilterEnabled) { - CompoundTag filterItemTag = inventoryEntry.getCompound("SlotFilterItem"); - this.filteredItems.set(slot, ItemStack.parseOptional(provider, filterItemTag)); - } - this.disabled.set(slot, inventoryEntry.getBoolean("Disabled")); - if (inventoryEntry.contains("SlotLimit")) { - this.slotLimits.set(slot, inventoryEntry.getInt("SlotLimit")); - } else { - this.slotLimits.set(slot, IFilterBlockEntity.DEFAULT_SLOT_LIMIT); + entry.read("SlotFilterItem", ItemStack.OPTIONAL_CODEC).ifPresent(stack -> this.filteredItems.set(slot, stack)); } + + this.disabled.set(slot, entry.getBooleanOr("Disabled", false)); + + this.slotLimits.set(slot, entry.getIntOr("SlotLimit", IFilterBlockEntity.DEFAULT_SLOT_LIMIT)); } } - public CompoundTag serializeFiltering() { - return (CompoundTag) CODEC.encodeStart(NbtOps.INSTANCE, this).getOrThrow(); + public void serializeFiltering(ValueOutput output) { + output.store((CompoundTag) CODEC.codec().encodeStart(NbtOps.INSTANCE, this).getOrThrow()); } - public void deserializeFiltering(CompoundTag tag) { - FilteredItemStackHandler handler = - CODEC.decode(NbtOps.INSTANCE, tag).getOrThrow().getFirst(); - if (this.getSlots() != handler.getSlots()) throw new IllegalArgumentException("Depository size mismatch"); - this.filterEnabled = tag.getBoolean("filterEnabled"); + public void deserializeFiltering(ValueInput input) { + @SuppressWarnings("deprecation") + Optional handlerOp = input.read(CODEC); + if (handlerOp.isEmpty()) return; + FilteredItemStackHandler handler = handlerOp.get(); + if (this.size() != handler.size()) throw new IllegalArgumentException("Depository size mismatch"); + this.filterEnabled = input.getBooleanOr("filterEnabled", false); int size = handler.filteredItems.size(); this.filteredItems = NonNullList.of(ItemStack.EMPTY, handler.filteredItems.toArray(new ItemStack[size])); this.disabled = handler.disabled; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/HoneyCauldronWrapper.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/HoneyCauldronWrapper.java deleted file mode 100644 index 9e1985a47b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/HoneyCauldronWrapper.java +++ /dev/null @@ -1,76 +0,0 @@ -package dev.dubhe.anvilcraft.api.itemhandler; - -import dev.dubhe.anvilcraft.block.HoneyCauldronBlock; -import net.minecraft.core.BlockPos; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.items.IItemHandler; - -public class HoneyCauldronWrapper implements IItemHandler { - private final Level level; - private final BlockPos pos; - - public HoneyCauldronWrapper(Level level, BlockPos pos) { - this.level = level; - this.pos = pos; - } - - @Override - public int getSlots() { - return 1; - } - - @Override - public ItemStack getStackInSlot(int slot) { - if (slot == 0) { - BlockState state = level.getBlockState(pos); - if (state.getBlock() instanceof HoneyCauldronBlock && level.getBlockState(pos).getValue(HoneyCauldronBlock.LEVEL) == 4) { - return new ItemStack(Items.HONEY_BLOCK, 1); - } - } - return ItemStack.EMPTY; - } - - @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - return stack; - } - - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (amount <= 0) return ItemStack.EMPTY; - if (slot == 0) { - ItemStack stackInSlot = getStackInSlot(slot); - if (!stackInSlot.isEmpty()) { - if (simulate) { - return stackInSlot.copyWithCount(1); - } else { - ItemStack copy = stackInSlot.copy(); - stackInSlot.shrink(1); - updateWorld(); - return copy; - } - } else { - return ItemStack.EMPTY; - } - } - return ItemStack.EMPTY; - } - - @Override - public int getSlotLimit(int slot) { - return 1; - } - - @Override - public boolean isItemValid(int slot, ItemStack stack) { - return false; - } - - private void updateWorld() { - level.setBlockAndUpdate(pos, Blocks.CAULDRON.defaultBlockState()); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/IItemHandlerHolder.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/IItemHandlerHolder.java deleted file mode 100644 index 99810aaa2b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/IItemHandlerHolder.java +++ /dev/null @@ -1,11 +0,0 @@ -package dev.dubhe.anvilcraft.api.itemhandler; - -import net.neoforged.neoforge.items.IItemHandler; - -/** - * 持有ItemHandler的 - */ -public interface IItemHandlerHolder { - - IItemHandler getItemHandler(); -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/IItemResourceHandlerHolder.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/IItemResourceHandlerHolder.java new file mode 100644 index 0000000000..66c2088e3b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/IItemResourceHandlerHolder.java @@ -0,0 +1,9 @@ +package dev.dubhe.anvilcraft.api.itemhandler; + +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; + +/// 持有ItemHandler的 +public interface IItemResourceHandlerHolder { + ResourceHandler getItemHandler(); +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/InputRefusingItemHandlerWrapper.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/InputRefusingItemHandlerWrapper.java index 34661aa2e1..88cc08609e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/InputRefusingItemHandlerWrapper.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/InputRefusingItemHandlerWrapper.java @@ -1,46 +1,62 @@ package dev.dubhe.anvilcraft.api.itemhandler; -import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; -public class InputRefusingItemHandlerWrapper implements IItemHandler { - private final IItemHandler delegate; +public class InputRefusingItemHandlerWrapper implements ResourceHandler { + private final ResourceHandler delegate; - public InputRefusingItemHandlerWrapper(IItemHandler delegate) { + public InputRefusingItemHandlerWrapper(ResourceHandler delegate) { this.delegate = delegate; } - @Override - public int getSlots() { - return delegate.getSlots(); + public static ResourceHandler wrap(ResourceHandler ih) { + return new InputRefusingItemHandlerWrapper(ih); } @Override - public ItemStack getStackInSlot(int i) { - return delegate.getStackInSlot(i); + public int size() { + return this.delegate.size(); } @Override - public ItemStack insertItem(int i, ItemStack itemStack, boolean b) { - return itemStack; + public ItemResource getResource(int index) { + return this.delegate.getResource(index); } @Override - public ItemStack extractItem(int i, int i1, boolean b) { - return delegate.extractItem(i, i1, b); + public long getAmountAsLong(int index) { + return this.delegate.getAmountAsLong(index); } @Override - public int getSlotLimit(int i) { - return delegate.getSlotLimit(i); + public long getCapacityAsLong(int index, ItemResource resource) { + return this.delegate.getCapacityAsLong(index, resource); } @Override - public boolean isItemValid(int i, ItemStack itemStack) { + public boolean isValid(int index, ItemResource resource) { return false; } - public static IItemHandler wrap(IItemHandler ih) { - return new InputRefusingItemHandlerWrapper(ih); + @Override + public int insert(int index, ItemResource resource, int amount, TransactionContext transaction) { + return 0; + } + + @Override + public int insert(ItemResource resource, int amount, TransactionContext transaction) { + return 0; + } + + @Override + public int extract(int index, ItemResource resource, int amount, TransactionContext transaction) { + return this.delegate.extract(index, resource, amount, transaction); + } + + @Override + public int extract(ItemResource resource, int amount, TransactionContext transaction) { + return this.delegate.extract(resource, amount, transaction); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/ItemHandlerUtil.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/ItemHandlerUtil.java index b2ce955c2d..e9a4e6a055 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/ItemHandlerUtil.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/ItemHandlerUtil.java @@ -1,9 +1,9 @@ package dev.dubhe.anvilcraft.api.itemhandler; +import com.google.common.collect.ImmutableList; import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.block.utility.BlockPlacerBlock; import dev.dubhe.anvilcraft.util.AnvilUtil; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.Entity; @@ -15,165 +15,138 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.capabilities.Capabilities; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.ItemHandlerHelper; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.access.ItemAccess; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jetbrains.annotations.Unmodifiable; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; import java.util.List; -import java.util.function.Predicate; - -import static dev.dubhe.anvilcraft.block.BlockPlacerBlock.ORIENTATION; +import java.util.function.BiPredicate; public class ItemHandlerUtil { public static boolean exportToTarget( - IItemHandler source, + ResourceHandler source, int maxAmountWeight, - Predicate predicate, - @Nullable IItemHandler target + BiPredicate predicate, + @Nullable ResourceHandler target ) { boolean success = false; - ItemStack filterStack = null; - boolean lockFilterItem = false; int maxAmount = maxAmountWeight; - outerLoop: - for (int srcIndex = 0; srcIndex < source.getSlots(); srcIndex++) { - ItemStack sourceStack = source.extractItem(srcIndex, Integer.MAX_VALUE, true); - if (sourceStack.isEmpty() || !predicate.test(sourceStack)) continue; - if (filterStack == null) { - filterStack = sourceStack.copy(); - maxAmount = (int) (maxAmountWeight / 64f * sourceStack.getMaxStackSize()); - } else if (!ItemStack.isSameItemSameComponents(filterStack, sourceStack)) { - continue; - } - for (int i = 0; i < maxAmount; i++) { - ItemStack remainder = ItemHandlerHelper.insertItem(target, sourceStack, true); - int amountToInsert = sourceStack.getCount() - remainder.getCount(); - sourceStack = remainder; - if (amountToInsert > 0) { - ItemStack extracted = source.extractItem(srcIndex, Math.min(maxAmount, amountToInsert), false); - ItemStack actualRemainder = ItemHandlerHelper.insertItem(target, extracted, false); - if (!actualRemainder.isEmpty()) { - source.insertItem(srcIndex, actualRemainder, false); - amountToInsert -= actualRemainder.getCount(); - } + try (Transaction root = Transaction.openRoot()) { + for (int srcIndex = 0; srcIndex < source.size(); srcIndex++) { + ItemResource resource = source.getResource(srcIndex); + if (resource.isEmpty()) continue; + try (Transaction transaction = Transaction.open(root)) { + int extracted = source.extract(srcIndex, resource, maxAmount, transaction); + if (extracted <= 0 || !predicate.test(resource, extracted)) continue; + int inserted = target.insert(resource, extracted, transaction); + if (inserted == 0) continue; success = true; - lockFilterItem = true; - maxAmount -= amountToInsert; - if (maxAmount <= 0) break outerLoop; - if (remainder.getCount() == 0) break; - } else { - if (!lockFilterItem) filterStack = null; - break; + maxAmount -= inserted; + if (maxAmount < 0) break; + transaction.commit(); } } + root.commit(); } return success; } public static boolean importFromTarget( - IItemHandler target, + ResourceHandler target, int maxAmountWeight, - Predicate predicate, - IItemHandler source + BiPredicate predicate, + ResourceHandler source ) { - boolean success = false; - ItemStack filterStack = null; - boolean lockFilterItem = false; - int maxAmount = maxAmountWeight; - outerLoop: - for (int srcIndex = 0; srcIndex < source.getSlots(); srcIndex++) { - ItemStack sourceStack = source.extractItem(srcIndex, Integer.MAX_VALUE, true); - if (sourceStack.isEmpty() || !predicate.test(sourceStack)) continue; - if (filterStack == null) { - filterStack = sourceStack.copy(); - maxAmount = (int) (maxAmountWeight / 64f * sourceStack.getMaxStackSize()); - } else if (!ItemStack.isSameItemSameComponents(filterStack, sourceStack)) { - continue; - } - for (int i = 0; i < maxAmount; i++) { - ItemStack remainder = ItemHandlerHelper.insertItem(target, sourceStack, true); - int amountToInsert = sourceStack.getCount() - remainder.getCount(); - if (amountToInsert > 0) { - ItemStack extracted = source.extractItem(srcIndex, Math.min(maxAmount, amountToInsert), false); - ItemStack actualRemainder = ItemHandlerHelper.insertItem(target, extracted, false); - if (!actualRemainder.isEmpty()) { - source.insertItem(srcIndex, actualRemainder, false); - amountToInsert -= actualRemainder.getCount(); - } - success = true; - lockFilterItem = true; - maxAmount -= amountToInsert; - if (maxAmount <= 0) break outerLoop; - if (remainder.getCount() == 0) break; - } else { - if (!lockFilterItem) filterStack = null; - break; - } - } - } - return success; + return ItemHandlerUtil.exportToTarget(source, maxAmountWeight, predicate, target); } - public static void exportAllToTarget(IItemHandler source, Predicate predicate, IItemHandler target) { - for (int srcIndex = 0; srcIndex < source.getSlots(); srcIndex++) { - ItemStack sourceStack = source.extractItem(srcIndex, Integer.MAX_VALUE, true); - if (sourceStack.isEmpty() || !predicate.test(sourceStack)) continue; - - ItemStack remainder = ItemHandlerHelper.insertItem(target, sourceStack, true); - - int amountToInsert = sourceStack.getCount() - remainder.getCount(); - if (amountToInsert > 0) { - sourceStack = source.extractItem(srcIndex, amountToInsert, false); - ItemHandlerHelper.insertItem(target, sourceStack, false); + public static void exportAllToTarget( + ResourceHandler source, + BiPredicate predicate, + ResourceHandler target + ) { + try (Transaction root = Transaction.openRoot()) { + for (int srcIndex = 0; srcIndex < source.size(); srcIndex++) { + ItemResource resource = source.getResource(srcIndex); + try (Transaction transaction = Transaction.open(root)) { + int extracted = source.extract(srcIndex, resource, Integer.MAX_VALUE, transaction); + if (extracted <= 0 || predicate.test(resource, extracted)) continue; + int inserted = target.insert(resource, extracted, transaction); + if (inserted == 0) continue; + transaction.commit(); + } } + root.commit(); } } - public static void exportContentsToItemHandlers(IItemHandler source, @Nullable List itemHandlerList) { + public static void exportContentsToItemHandlers( + ResourceHandler source, + @Nullable List> itemHandlerList + ) { if (itemHandlerList == null) return; - for (IItemHandler target : itemHandlerList) { - exportAllToTarget(source, stack -> true, target); + for (ResourceHandler target : itemHandlerList) { + ItemHandlerUtil.exportAllToTarget(source, (_, _) -> true, target); } } - public static void dropAllToPos(IItemHandler source, Level level, Vec3 pos) { + public static void dropAllToPos(ResourceHandler source, Level level, Vec3 pos) { List items = new ArrayList<>(); - for (int slot = 0; slot < source.getSlots(); slot++) { - ItemStack stack = source.extractItem(slot, Integer.MAX_VALUE, false); - if (!stack.isEmpty()) items.add(stack); + try (Transaction root = Transaction.openRoot()) { + for (int srcIndex = 0; srcIndex < source.size(); srcIndex++) { + ItemResource resource = source.getResource(srcIndex); + if (resource.isEmpty()) continue; + try (Transaction transaction = Transaction.open(root)) { + int extracted = source.extract(srcIndex, resource, Integer.MAX_VALUE, transaction); + if (extracted != 0) items.add(resource.toStack(extracted)); + transaction.commit(); + } + } + root.commit(); } AnvilUtil.dropItems(items, level, pos); } - public static @Nullable IItemHandler getSourceItemHandler(BlockPos inputBlockPos, Direction context, @Nullable Level level) { + public static @Nullable ResourceHandler getSourceItemHandler( + BlockPos inputBlockPos, + Direction context, + @Nullable Level level + ) { if (level == null) return null; - IItemHandler itemHandler = level.getCapability( - Capabilities.ItemHandler.BLOCK, + ResourceHandler itemHandler = level.getCapability( + Capabilities.Item.BLOCK, inputBlockPos, context ); if (itemHandler != null) return itemHandler; AABB aabb = new AABB(inputBlockPos); List entities = level.getEntitiesOfClass( - Entity.class, aabb, e -> e instanceof ContainerEntity && !((ContainerEntity) e).isEmpty()) - .stream() - .map(it -> (ContainerEntity) it) - .toList(); + Entity.class, + aabb, + e -> e instanceof ContainerEntity && !((ContainerEntity) e).isEmpty() + ).stream().map(it -> (ContainerEntity) it).toList(); if (!entities.isEmpty()) { itemHandler = ((Entity) entities.getFirst()).getCapability( - Capabilities.ItemHandler.ENTITY, + Capabilities.Item.ENTITY, null ); } return itemHandler; } - public static @Nullable List getTargetItemHandlerList(BlockPos inputBlockPos, Direction context, @Nullable Level level) { + public static @Nullable List> getTargetItemHandlerList( + BlockPos inputBlockPos, + @Nullable Direction context, + @Nullable Level level + ) { if (level == null) return null; - List list = new ArrayList<>(); - IItemHandler input = level.getCapability( - Capabilities.ItemHandler.BLOCK, + List> list = new ArrayList<>(); + ResourceHandler input = level.getCapability( + Capabilities.Item.BLOCK, inputBlockPos, context ); @@ -183,41 +156,35 @@ public static void dropAllToPos(IItemHandler source, Level level, Vec3 pos) { } AABB aabb = new AABB(inputBlockPos); list = level.getEntitiesOfClass( - Entity.class, aabb, e -> e instanceof ContainerEntity) - .stream() - .map(e -> e.getCapability( - Capabilities.ItemHandler.ENTITY, - null - )) - .toList(); + Entity.class, + aabb, + e -> e instanceof ContainerEntity + ).stream().map(e -> e.getCapability(Capabilities.Item.ENTITY, null)).toList(); return list; } - public static int countItemsInHandler(IItemHandler handler) { + public static int countItemsInHandler(ResourceHandler handler) { int count = 0; - for (int i = 0; i < handler.getSlots(); i++) { - count += handler.getStackInSlot(i).getCount(); + for (int i = 0; i < handler.size(); i++) { + count += handler.getAmountAsInt(i); } return count; } - public static Object2IntMap mergeHandlerItems(IItemHandler handler) { - Object2IntMap items = new Object2IntOpenHashMap<>(); - for (int i = 0; i < handler.getSlots(); i++) { - ItemStack stack = handler.getStackInSlot(i); - items.mergeInt(stack.getItem(), stack.getCount(), Integer::sum); - } - return items; - } - @Nullable - public static IItemHandler getSourceItemHandlerRecursive(Block source, BlockPos inputPos, Direction context, @Nullable Level level) { + public static ResourceHandler getSourceItemHandlerRecursive( + Block source, + BlockPos inputPos, + Direction context, + @Nullable Level level + ) { int i = 0; do { - if (level == null) return null; - if ( - level.getBlockState(inputPos).is(source) - && level.getBlockState(inputPos).getValue(ORIENTATION).getDirection() == context + if (level == null) { + return null; + } + if (level.getBlockState(inputPos).is(source) + && level.getBlockState(inputPos).getValue(BlockPlacerBlock.ORIENTATION).getDirection() == context ) { i++; inputPos = inputPos.relative(context.getOpposite()); @@ -228,35 +195,74 @@ public static IItemHandler getSourceItemHandlerRecursive(Block source, BlockPos return null; } - public static ItemStack insertItem(@Nullable IItemHandler dest, ItemStack stack, boolean simulate) { - if (dest == null || stack.isEmpty()) { - return stack; - } + public static ItemStack insertItem(@Nullable ResourceHandler dest, ItemStack stack, boolean simulate) { + if (dest == null || stack.isEmpty()) return stack; if (dest instanceof PollableFilteredItemStackHandler pollable) { - for (int i = 0; i < dest.getSlots(); i++) { - stack = pollable.insertItemNoPolling(i, stack, simulate); - if (stack.isEmpty()) { - return ItemStack.EMPTY; + try (Transaction root = Transaction.openRoot()) { + for (int i = 0; i < dest.size(); i++) { + try (Transaction transaction = Transaction.open(root)) { + stack.setCount(pollable.insertNoPolling(i, pollable.getResourceFrom(stack), stack.getCount(), transaction)); + if (stack.isEmpty()) { + if (!simulate) { + transaction.commit(); + } + return ItemStack.EMPTY; + } + if (!simulate) { + transaction.commit(); + } + } + } + if (!simulate) { + root.commit(); } } - - return stack; } else { - return ItemHandlerHelper.insertItem(dest, stack, simulate); + try (Transaction transaction = Transaction.openRoot()) { + int stackCount = stack.getCount(); + int inserted = dest.insert(ItemResource.of(stack.getItem(), stack.getComponentsPatch()), stackCount, transaction); + stack.setCount(inserted); + if (!simulate) { + transaction.commit(); + } + } } + return stack; } - public static boolean isEmptyContainer(@Nullable IItemHandler handler) { + public static boolean isEmptyContainer(@Nullable ResourceHandler handler) { if (handler != null) { - for (int i = 0; i < handler.getSlots(); i++) { - if (!handler.getStackInSlot(i).isEmpty()) return true; + for (int i = 0; i < handler.size(); i++) { + if (!handler.getResource(i).isEmpty()) return false; } } - return false; + return true; } public static boolean isEmptyContainer(ItemStack stack) { - return ItemHandlerUtil.isEmptyContainer(stack.getCapability(Capabilities.ItemHandler.ITEM)); + return ItemHandlerUtil.isEmptyContainer(stack.getCapability(Capabilities.Item.ITEM, ItemAccess.forStack(stack))); + } + + public static int hash(ResourceHandler handler) { + int hash = 0; + for (int i = 0; i < handler.size(); i++) { + ItemStack stack = handler.getResource(i).toStack(); + if (stack.isEmpty()) continue; + hash *= 31; + hash += Item.getId(stack.getItem()) + stack.getDamageValue(); + } + return hash; + } + + public static @Unmodifiable List getNonEmptyItemsFromHandler(ResourceHandler handler) { + ImmutableList.Builder builder = ImmutableList.builder(); + for (int i = 0; i < handler.size(); i++) { + ItemResource resource = handler.getResource(i); + ItemStack stack = new ItemStack(resource.typeHolder(), handler.getAmountAsInt(i), resource.getComponentsPatch()); + if (stack.isEmpty()) continue; + builder.add(stack); + } + return builder.build(); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/OverLimitItemHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/OverLimitItemHandler.java index 5456aee9fc..01226eaff4 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/OverLimitItemHandler.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/OverLimitItemHandler.java @@ -1,191 +1,71 @@ package dev.dubhe.anvilcraft.api.itemhandler; -import dev.anvilcraft.lib.v2.util.stack.UnlimitedItemStack; -import net.minecraft.core.HolderLookup; +import dev.anvilcraft.lib.v2.util1.stack.UnlimitedItemStack; import net.minecraft.core.NonNullList; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.Tag; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.common.util.INBTSerializable; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.IItemHandlerModifiable; +import net.neoforged.neoforge.transfer.StacksResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; -public class OverLimitItemHandler implements IItemHandler, IItemHandlerModifiable, INBTSerializable { +public class OverLimitItemHandler extends StacksResourceHandler { private final int baseLimit; - private NonNullList stacks; public OverLimitItemHandler(int baseLimit) { this(baseLimit, 1); } public OverLimitItemHandler(int baseLimit, int size) { - this.stacks = NonNullList.withSize(size, UnlimitedItemStack.EMPTY); + super(NonNullList.withSize(size, UnlimitedItemStack.EMPTY), UnlimitedItemStack.EMPTY, UnlimitedItemStack.CODEC); this.baseLimit = baseLimit; } public OverLimitItemHandler(int baseLimit, NonNullList stacks) { - this.stacks = NonNullList.createWithCapacity(stacks.size()); - for (int i = 0, stacksSize = stacks.size(); i < stacksSize; i++) { - this.stacks.add(i, new UnlimitedItemStack(stacks.get(i))); - } + super(OverLimitItemHandler.transform(stacks), UnlimitedItemStack.EMPTY, UnlimitedItemStack.CODEC); this.baseLimit = baseLimit; } public OverLimitItemHandler(NonNullList stacks, int baseLimit) { - this.stacks = NonNullList.copyOf(stacks); + super(stacks, UnlimitedItemStack.EMPTY, UnlimitedItemStack.CODEC); this.baseLimit = baseLimit; } - @Override - public int getSlots() { - return this.stacks.size(); - } - - @Override - public ItemStack getStackInSlot(int slot) { - return this.getUnlimitedStackInSlot(slot).toStack(); - } - - public UnlimitedItemStack getUnlimitedStackInSlot(int slot) { - return this.stacks.get(slot); - } - - @Override - public void setStackInSlot(int slot, ItemStack stack) { - this.stacks.set(slot, new UnlimitedItemStack(stack)); - } - - public void setUnlimitedStackInSlot(int slot, UnlimitedItemStack stack) { - this.stacks.set(slot, stack); - } - - @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (stack.isEmpty()) return ItemStack.EMPTY; - if (!this.isItemValid(slot, stack)) return stack; - this.validateSlotIndex(slot); - - UnlimitedItemStack existing = this.stacks.get(slot); - - int limit = this.getSlotLimit(slot); - if (!existing.isEmpty()) { - if (!existing.isSameItemSameComponents(stack)) return stack; - limit -= existing.getCount(); - } - if (limit <= 0) return stack; - - boolean reachedLimit = stack.getCount() > limit; - if (!simulate) { - int maxLimit = this.getSlotLimit(slot); - if (existing.isEmpty()) { - this.stacks.set(slot, reachedLimit ? new UnlimitedItemStack(stack, maxLimit) : new UnlimitedItemStack(stack)); - } else { - existing.grow(reachedLimit ? maxLimit : stack.getCount()); - } - this.onContentsChanged(slot); - } - - return reachedLimit ? stack.copyWithCount(stack.getCount() - limit) : ItemStack.EMPTY; - } - - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (amount == 0) return ItemStack.EMPTY; - this.validateSlotIndex(slot); - - UnlimitedItemStack existing = this.stacks.get(slot); - if (existing.isEmpty()) return ItemStack.EMPTY; - - int toExtract = Math.min(amount, existing.getStack().getMaxStackSize()); - - if (existing.getCount() <= toExtract) { - if (!simulate) { - this.stacks.set(slot, UnlimitedItemStack.EMPTY); - this.onContentsChanged(slot); - } - return existing.toStack(); - } else { - if (!simulate) { - this.stacks.set(slot, existing.copyWithCount(existing.getCount() - toExtract)); - this.onContentsChanged(slot); - } - return existing.copyWithCount(toExtract).toStack(); + private static NonNullList transform(NonNullList stacks) { + NonNullList result = NonNullList.createWithCapacity(stacks.size()); + for (int i = 0, stacksSize = stacks.size(); i < stacksSize; i++) { + result.add(i, new UnlimitedItemStack(stacks.get(i))); } + return result; } @Override - public int getSlotLimit(int slot) { - return this.stacks.get(slot).getStack().getMaxStackSize() * this.baseLimit; + protected ItemResource getResourceFrom(UnlimitedItemStack stack) { + return ItemResource.of(stack.getItem(), stack.getComponentsPatch()); } @Override - public boolean isItemValid(int slot, ItemStack stack) { - return true; - } - - public boolean isEmpty() { - for (UnlimitedItemStack stack : this.stacks) { - if (!stack.isEmpty()) return false; - } - return true; + protected int getAmountFrom(UnlimitedItemStack stack) { + return stack.getCount(); } @Override - public CompoundTag serializeNBT(HolderLookup.Provider provider) { - ListTag itemsTag = new ListTag(); - for (int i = 0; i < this.stacks.size(); i++) { - UnlimitedItemStack stack = this.stacks.get(i); - if (stack.isEmpty()) continue; - CompoundTag itemTag = new CompoundTag(); - itemTag.putInt("Slot", i); - itemTag.merge(stack.serializeNBT(provider)); - itemsTag.add(itemTag); - } - CompoundTag nbt = new CompoundTag(); - nbt.put("Items", itemsTag); - nbt.putInt("Size", this.stacks.size()); - return nbt; + protected UnlimitedItemStack getStackFrom(ItemResource resource, int amount) { + return new UnlimitedItemStack(resource.toStack(), amount); } @Override - public void deserializeNBT(HolderLookup.Provider provider, CompoundTag nbt) { - this.setSize(nbt.contains("Size", Tag.TAG_INT) ? nbt.getInt("Size") : this.stacks.size()); - ListTag itemsTag = nbt.getList("Items", Tag.TAG_COMPOUND); - for (int i = 0; i < itemsTag.size(); i++) { - CompoundTag itemTag = itemsTag.getCompound(i); - int slot = itemTag.getInt("Slot"); - - if (slot < 0 || slot >= this.stacks.size()) continue; - UnlimitedItemStack.parse(provider, itemTag).ifPresent(stack -> this.stacks.set(slot, stack)); - } - this.onLoad(); - } - - public void setSize(int size) { - this.stacks = NonNullList.withSize(size, UnlimitedItemStack.EMPTY); - } - - protected void validateSlotIndex(int slot) { - if (slot < 0 || slot >= this.stacks.size()) { - throw new RuntimeException("Slot " + slot + " not in valid range - [0," + this.stacks.size() + ")"); - } - } - - protected void onLoad() { - } - - protected void onContentsChanged(int slot) { + protected UnlimitedItemStack copyOf(UnlimitedItemStack stack) { + return stack.copy(); } @Override - public boolean equals(Object o) { - if (!(o instanceof OverLimitItemHandler that)) return false; - return this.baseLimit == that.baseLimit && UnlimitedItemStack.listMatches(this.stacks, that.stacks); + protected int getCapacity(int index, ItemResource resource) { + return !resource.isEmpty() + ? this.getResource(index).getMaxStackSize() * this.baseLimit + : Item.ABSOLUTE_MAX_STACK_SIZE * this.baseLimit; } - @Override - public int hashCode() { - return this.baseLimit * 31 + UnlimitedItemStack.hashStackList(this.stacks); + public UnlimitedItemStack peek(int index) { + ItemResource resource = this.getResource(index); + return new UnlimitedItemStack(resource.typeHolder(), this.getAmountAsInt(index), resource.getComponentsPatch()); } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/PollableFilteredItemStackHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/PollableFilteredItemStackHandler.java index 6d483d95ed..481f1cee7d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/PollableFilteredItemStackHandler.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/PollableFilteredItemStackHandler.java @@ -1,8 +1,13 @@ package dev.dubhe.anvilcraft.api.itemhandler; +import dev.dubhe.anvilcraft.mixin.accessor.StacksResourceHandlerAccessor; import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.transfer.TransferPreconditions; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; import java.util.List; +import java.util.Objects; public class PollableFilteredItemStackHandler extends FilteredItemStackHandler { public PollableFilteredItemStackHandler(int size) { @@ -10,49 +15,37 @@ public PollableFilteredItemStackHandler(int size) { } @Override - public boolean isItemValid(int slot, ItemStack stack) { - return getEmptyOrSmallerSlot(stack) == slot && super.isItemValid(slot, stack); + public boolean isValid(int index, ItemResource resource) { + return this.getEmptyOrSmallerSlot(resource) == index && super.isValid(index, resource); } - @Override - public boolean isFiltered(int slot, ItemStack stack) { - ItemStack filter = this.getFilteredItems().get(slot); - return filter.isEmpty() || ItemStack.isSameItem(filter, stack); - } - - private int getEmptyOrSmallerSlot(ItemStack stack) { - int slotCount = this.getSlots(); - int slot = -1; + private int getEmptyOrSmallerSlot(ItemResource resource) { + int size = this.size(); + int valid = -1; int countInSlot = Integer.MAX_VALUE; - for (int index = slotCount - 1; index >= 0; index--) { - if (this.isSlotDisabled(index)) continue; - ItemStack stackInSlot = this.getStackInSlot(index); - if (this.isSlotDisabled(index)) continue; - if (!this.isFiltered(index, stack)) continue; - if (stackInSlot.isEmpty()) { - slot = index; - countInSlot = 0; - continue; - } else if (!ItemStack.isSameItemSameComponents(stackInSlot, stack)) { - continue; - } - int stackInSlotCount = stackInSlot.getCount(); - if (stackInSlotCount <= countInSlot && stackInSlotCount < this.getSlotLimit(index)) { - slot = index; + for (int slot = size - 1; slot >= 0; slot--) { + if (this.isSlotDisabled(slot)) continue; + if (!this.isFiltered(slot, resource.toStack())) continue; + ItemResource resourceIn = this.getResource(slot); + if (resourceIn.isEmpty()) return slot; + if (!resourceIn.equals(resource)) continue; + int stackInSlotCount = this.getAmountAsInt(slot); + if (stackInSlotCount <= countInSlot && stackInSlotCount < this.getSlotLimit(slot)) { + valid = slot; countInSlot = stackInSlotCount; } } - return slot; + return valid; } public boolean canCompletelyInsert(List items) { List copyItems = items.stream().map(ItemStack::copy).toList(); - for (int slot = 0; slot < this.getSlots(); slot++) { + for (int slot = 0; slot < this.size(); slot++) { for (ItemStack stack : copyItems) { if (stack.isEmpty()) continue; ItemStack existing = this.stacks.get(slot); if (!ItemStack.isSameItemSameComponents(stack, existing) && !existing.isEmpty()) continue; - int limit = this.getStackLimit(slot, stack); + int limit = this.getCapacity(slot, ItemResource.of(stack)); int shrink = Math.min(stack.getCount(), limit - existing.getCount()); stack.shrink(shrink); if (!stack.isEmpty() || limit == shrink) break; @@ -61,39 +54,35 @@ public boolean canCompletelyInsert(List items) { return copyItems.stream().allMatch(ItemStack::isEmpty); } - public ItemStack insertItemNoPolling(int slot, ItemStack stack, boolean simulate) { - if (stack.isEmpty()) { - return ItemStack.EMPTY; - } else if (!super.isItemValid(slot, stack)) { - return stack; - } else { - this.validateSlotIndex(slot); - ItemStack existing = this.stacks.get(slot); - int limit = this.getStackLimit(slot, stack); - if (!existing.isEmpty()) { - if (!ItemStack.isSameItemSameComponents(stack, existing)) { - return stack; - } + public int insertNoPolling(ItemResource resource, int amount, TransactionContext transaction) { + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); - limit -= existing.getCount(); - } + int inserted = 0; + int size = this.size(); + for (int index = 0; index < size; index++) { + inserted += this.insertNoPolling(index, resource, amount - inserted, transaction); + if (inserted == amount) break; + } + return inserted; + } - if (limit <= 0) { - return stack; - } else { - boolean reachedLimit = stack.getCount() > limit; - if (!simulate) { - if (existing.isEmpty()) { - this.stacks.set(slot, reachedLimit ? stack.copyWithCount(limit) : stack); - } else { - existing.grow(reachedLimit ? limit : stack.getCount()); - } + public int insertNoPolling(int index, ItemResource resource, int amount, TransactionContext transaction) { + Objects.checkIndex(index, this.size()); + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); - this.onContentsChanged(slot); - } + ItemStack currentStack = this.stacks.get(index); + int currentAmount = this.getAmountFrom(currentStack); - return reachedLimit ? stack.copyWithCount(stack.getCount() - limit) : ItemStack.EMPTY; + if ((currentAmount == 0 || this.matches(currentStack, resource)) && super.isValid(index, resource)) { + int inserted = Math.min(amount, this.getCapacity(index, resource) - currentAmount); + + if (inserted > 0) { + ((StacksResourceHandlerAccessor) this).getSnapshotJournals().get(index).updateSnapshots(transaction); + this.stacks.set(index, this.getStackFrom(resource, currentAmount + inserted)); + return inserted; } } + + return 0; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/PollableItemHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/PollableItemHandler.java index 605961f445..0e9f98afea 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/PollableItemHandler.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/PollableItemHandler.java @@ -1,31 +1,44 @@ package dev.dubhe.anvilcraft.api.itemhandler; -import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.items.ItemStackHandler; +import com.google.common.primitives.Ints; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler; -public class PollableItemHandler extends ItemStackHandler { +public class PollableItemHandler extends ItemStacksResourceHandler { public PollableItemHandler(int size) { super(size); } @Override - public boolean isItemValid(int slot, ItemStack stack) { - return slot == getEmptyOrSmallerSlot(stack); + public boolean isValid(int slot, ItemResource resource) { + return slot == this.getEmptyOrSmallerSlot(resource); } - private int getEmptyOrSmallerSlot(ItemStack stack) { - int slotCount = this.getSlots(); + protected int getEmptyOrSmallerSlot(ItemResource resource) { + int slotCount = this.size(); int slot = -1; int countInSlot = Integer.MAX_VALUE; for (int i = slotCount - 1; i >= 0; i--) { - ItemStack stackInSlot = this.getStackInSlot(i); - if (!stackInSlot.isEmpty() && !ItemStack.isSameItemSameComponents(stackInSlot, stack)) continue; - int stackInSlotCount = stackInSlot.getCount(); - if (stackInSlotCount <= countInSlot && stackInSlotCount < this.getSlotLimit(i)) { + ItemResource resourceIn = this.getResourceDirect(i); + if (!resourceIn.isEmpty() && !resourceIn.equals(resource)) continue; + int amount = this.getAmountAsInt(i); + if (amount <= countInSlot && amount < this.getCapacityAsIntDirect(i, resourceIn)) { slot = i; - countInSlot = stackInSlotCount; + countInSlot = amount; } } return slot; } + + protected int getCapacityAsIntDirect(int index, ItemResource resource) { + return Ints.saturatedCast(this.getCapacityAsLongDirect(index, resource)); + } + + public long getCapacityAsLongDirect(int index, ItemResource resource) { + return !resource.isEmpty() ? getCapacity(index, resource) : 0; + } + + protected ItemResource getResourceDirect(int index) { + return getResourceFrom(stacks.get(index)); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SingleStackResourceHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SingleStackResourceHandler.java new file mode 100644 index 0000000000..8a587302f7 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SingleStackResourceHandler.java @@ -0,0 +1,19 @@ +package dev.dubhe.anvilcraft.api.itemhandler; + +import lombok.Getter; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.transfer.item.ItemStackResourceHandler; + +@Getter +public class SingleStackResourceHandler extends ItemStackResourceHandler { + protected ItemStack stack = ItemStack.EMPTY; + + @Override + public void setStack(ItemStack stack) { + this.stack = stack; + this.onContentChanged(stack); + } + + protected void onContentChanged(ItemStack stack) { + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SlotItemHandlerWithFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SlotItemHandlerWithFilter.java index 5b7ca3d620..4390643a7f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SlotItemHandlerWithFilter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SlotItemHandlerWithFilter.java @@ -1,48 +1,50 @@ package dev.dubhe.anvilcraft.api.itemhandler; import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.SlotItemHandler; +import net.neoforged.neoforge.transfer.IndexModifier; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ResourceHandlerSlot; -public class SlotItemHandlerWithFilter extends SlotItemHandler { - public SlotItemHandlerWithFilter(IItemHandler itemHandler, int index, int posX, int posY) { - super(itemHandler, index, posX, posY); +public class SlotItemHandlerWithFilter extends ResourceHandlerSlot { + public SlotItemHandlerWithFilter( + ResourceHandler handler, + IndexModifier modifier, + int index, + int posX, + int posY + ) { + super(handler, modifier, index, posX, posY); } - /** - * 判断槽位是否支持过滤 - * - * @return 是否支持过滤 - */ + /// 判断槽位是否支持过滤 + /// + /// @return 是否支持过滤 public boolean isFilter() { - return this.getItemHandler() instanceof FilteredItemStackHandler; + return this.getResourceHandler() instanceof FilteredItemStackHandler; } public boolean mayPlace(ItemStack stack) { return true; } - /** - * 获取指定槽位上的过滤器要过滤的物品 - * - * @param slotIndex 槽位的索引 - * @return 如果指定槽位是过滤器,返回过滤器要过滤的物品,否则返回空物品 - */ + /// 获取指定槽位上的过滤器要过滤的物品 + /// + /// @param slotIndex 槽位的索引 + /// @return 如果指定槽位是过滤器,返回过滤器要过滤的物品,否则返回空物品 public ItemStack getFilterItem(int slotIndex) { - if (this.getItemHandler() instanceof FilteredItemStackHandler filtered) { + if (this.getResourceHandler() instanceof FilteredItemStackHandler filtered) { return filtered.getFilter(slotIndex); } return ItemStack.EMPTY; } - /** - * 判断指定槽位是否被禁用 - * - * @param slot 槽位 - * @return 指定槽位是否被禁用 - */ + /// 判断指定槽位是否被禁用 + /// + /// @param slot 槽位 + /// @return 指定槽位是否被禁用 public boolean isSlotDisabled(int slot) { - if (this.getItemHandler() instanceof FilteredItemStackHandler filtered) { + if (this.getResourceHandler() instanceof FilteredItemStackHandler filtered) { return filtered.isSlotDisabled(slot); } return false; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SolidCauldronExtractor.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SolidCauldronExtractor.java new file mode 100644 index 0000000000..8b17bf29df --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/SolidCauldronExtractor.java @@ -0,0 +1,126 @@ +package dev.dubhe.anvilcraft.api.itemhandler; + +import com.google.common.collect.MapMaker; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.fluids.CauldronFluidContent; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.VanillaContainerWrapper; +import net.neoforged.neoforge.transfer.transaction.SnapshotJournal; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; + +import java.util.Map; +import java.util.function.Predicate; + +public class SolidCauldronExtractor extends SnapshotJournal implements ResourceHandler { + /// To make sure multiple accesses to the same cauldron return the same wrapper, + /// we maintain a `(Level, BlockPos) -> Wrapper` cache. + private record WrapperLocation(Level level, BlockPos pos) { + public BlockState getBlockState() { + return this.level.getBlockState(this.pos); + } + } + + /// Wrapper map, similar to {@link VanillaContainerWrapper#wrappers}. + /// We need the cauldron wrapper to hold a strong reference to the wrapper location to avoid the weak keys being cleared too early. + private static final Map WRAPPERS = new MapMaker() + .concurrencyLevel(1) + .weakKeys() + .weakValues() + .makeMap(); + + public static SolidCauldronExtractor get(Level level, BlockPos pos, Predicate validCauldron) { + SolidCauldronExtractor.WrapperLocation location = new SolidCauldronExtractor.WrapperLocation(level, pos.immutable()); + return WRAPPERS.computeIfAbsent(location, location1 -> new SolidCauldronExtractor(validCauldron, location1)); + } + + private final Predicate validCauldron; + private final SolidCauldronExtractor.WrapperLocation location; + + private SolidCauldronExtractor(Predicate validCauldron, SolidCauldronExtractor.WrapperLocation location) { + this.validCauldron = validCauldron; + this.location = location; + } + + @Override + public int size() { + return 1; + } + + @Override + public ItemResource getResource(int index) { + if (index != 0) return ItemResource.EMPTY; + BlockState state = this.location.getBlockState(); + if (!this.validCauldron.test(state)) return ItemResource.EMPTY; + return ItemResource.of(Items.HONEY_BLOCK); + } + + @Override + public long getAmountAsLong(int index) { + if (index != 0) return 0; + BlockState state = this.location.getBlockState(); + if (!this.validCauldron.test(state)) return 0; + return 1; + } + + @Override + public long getCapacityAsLong(int index, ItemResource resource) { + return 1; + } + + @Override + public boolean isValid(int index, ItemResource resource) { + return false; + } + + @Override + public int insert(int index, ItemResource resource, int amount, TransactionContext transaction) { + return 0; + } + + @Override + public int extract(int index, ItemResource resource, int amount, TransactionContext transaction) { + if (amount <= 0) return 0; + if (index != 0) return 0; + ItemResource resourceIn = this.getResource(index); + if (resourceIn.isEmpty()) return 0; + this.setLevel(transaction); + return 1; + + } + + private void setLevel(TransactionContext transaction) { + this.updateSnapshots(transaction); + this.location.level.setBlock(this.location.pos, Blocks.CAULDRON.defaultBlockState(), 0); + } + + @Override + protected BlockState createSnapshot() { + return this.location.getBlockState(); + } + + @Override + protected void revertToSnapshot(BlockState snapshot) { + this.location.level.setBlock(this.location.pos, snapshot, 0); + } + + @Override + protected void onRootCommit(BlockState originalState) { + BlockState state = this.location.getBlockState(); + + // Skip updating if nothing changed or if the cauldron was removed + if (originalState == state || CauldronFluidContent.getForBlock(state.getBlock()) == null) return; + + // Revert back to the blockstate before any changes happened so that the next + // call will not short-circuit due to the blockstate not really changing. + this.location.level.setBlock(this.location.pos, originalState, 0); + // Now perform the change that will trigger notifications to other blocks/neighbors/clients. + this.location.level.setBlockAndUpdate(this.location.pos, state); + + // Currently we don't send a BLOCK_CHANGE nor FLUID_PLACE/FLUID_PICKUP game event. This can be reconsidered. + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/TypeLimitItemStacksResourceHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/TypeLimitItemStacksResourceHandler.java new file mode 100644 index 0000000000..4e503d2151 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/TypeLimitItemStacksResourceHandler.java @@ -0,0 +1,269 @@ +package dev.dubhe.anvilcraft.api.itemhandler; + +import com.mojang.serialization.Codec; +import dev.anvilcraft.lib.v2.network.util.BoolAndInt; +import dev.anvilcraft.lib.v2.util1.stack.UnlimitedItemStack; +import net.minecraft.core.NonNullList; +import net.minecraft.world.item.ItemInstance; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.common.util.ValueIOSerializable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.TransferPreconditions; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.SnapshotJournal; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Function; + +public class TypeLimitItemStacksResourceHandler implements ResourceHandler, ValueIOSerializable { + public static final String VALUE_IO_KEY = "stacks"; + public static final Codec> STACKS_CODEC = UnlimitedItemStack.CODEC + .listOf() + .xmap(TypeLimitItemStacksResourceHandler::constructStackList, Function.identity()); + private final int typeLimit; + private final int spaceSize; + private final NonNullList stacks = TypeLimitItemStacksResourceHandler.constructStackList(); + private int space = 0; + + private final ArrayList snapshotJournals = new ArrayList<>(); + + public TypeLimitItemStacksResourceHandler(int spaceSize) { + this(Integer.MAX_VALUE, spaceSize); + } + + public TypeLimitItemStacksResourceHandler(int typeLimit, int spaceSize) { + this.typeLimit = typeLimit; + this.spaceSize = spaceSize; + } + + private static NonNullList constructStackList() { + return new NonNullList<>(new ArrayList<>(), UnlimitedItemStack.EMPTY); + } + + private static NonNullList constructStackList(List from) { + NonNullList empty = TypeLimitItemStacksResourceHandler.constructStackList(); + empty.addAll(from); + return empty; + } + + @Override + public int size() { + return this.stacks.size(); + } + + @Override + public ItemResource getResource(int index) { + return ItemResource.of(this.stacks.get(index).getStack()); + } + + @Override + public long getAmountAsLong(int index) { + return this.stacks.get(index).getCount(); + } + + @Override + public long getCapacityAsLong(int index, ItemResource resource) { + return Integer.MAX_VALUE; + } + + @Override + public boolean isValid(int index, ItemResource resource) { + return true; + } + + protected int computeEmptySize(ItemResource resource) { + return TypeLimitItemStacksResourceHandler.computeCount(resource, this.spaceSize - this.space); + } + + protected int findEmptySlot() { + for (int i = 0; i < this.stacks.size(); i++) { + if (this.stacks.get(i).isEmpty()) { + return i; + } + } + return this.stacks.size() >= this.typeLimit ? -1 : this.stacks.size(); + } + + @Override + public int insert(ItemResource resource, int amount, TransactionContext transaction) { + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); + + int size = this.size(); + for (int index = 0; index < size; index++) { + BoolAndInt result = this.insertInternal(index, resource, amount, transaction); + if (result.bool()) { + return result.integer(); + } + } + + int index = this.findEmptySlot(); + if (index < 0) { + return 0; + } + if (index == this.stacks.size()) { + this.stacks.add(UnlimitedItemStack.EMPTY); + this.updateStacksSize(); + } + + int inserted = Math.min(amount, this.computeEmptySize(resource)); + this.snapshotJournals.get(index).updateSnapshots(transaction); + this.stacks.set(index, new UnlimitedItemStack(resource, inserted)); + this.space += TypeLimitItemStacksResourceHandler.computeSpace(resource, inserted); + return inserted; + } + + @Override + public int insert(int index, ItemResource resource, int amount, TransactionContext transaction) { + return this.insertInternal(index, resource, amount, transaction).integer(); + } + + private BoolAndInt insertInternal(int index, ItemResource resource, int amount, TransactionContext transaction) { + Objects.checkIndex(index, this.size()); + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); + + UnlimitedItemStack stack = this.stacks.get(index); + if (!stack.isSameItemSameComponents(resource)) { + return new BoolAndInt(false, 0); + } + + int inserted = Math.min(amount, this.computeEmptySize(resource)); + if (inserted <= 0) { + return new BoolAndInt(true, 0); + } + + int count = stack.count(); + this.snapshotJournals.get(index).updateSnapshots(transaction); + this.stacks.set(index, new UnlimitedItemStack(resource, count + inserted)); + this.space += TypeLimitItemStacksResourceHandler.computeSpace(resource, inserted); + return new BoolAndInt(true, inserted); + } + + @Override + public int extract(int index, ItemResource resource, int amount, TransactionContext transaction) { + Objects.checkIndex(index, this.size()); + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); + + UnlimitedItemStack stack = this.stacks.get(index); + int count = stack.count(); + if (!stack.isSameItemSameComponents(resource)) { + return 0; + } + + int extracted = Math.min(amount, count); + if (extracted <= 0) { + return 0; + } + + this.snapshotJournals.get(index).updateSnapshots(transaction); + this.stacks.set(index, new UnlimitedItemStack(resource, count - extracted)); + this.space -= TypeLimitItemStacksResourceHandler.computeSpace(resource, extracted); + return amount; + } + + private void updateStacksSize() { + this.snapshotJournals.ensureCapacity(this.stacks.size()); + // Add missing entries + while (this.snapshotJournals.size() < this.stacks.size()) { + this.snapshotJournals.add(new StackJournal(this.snapshotJournals.size())); + } + // 通常情况下不允许减少快照列表大小。此处将报错 + if (this.snapshotJournals.size() > this.stacks.size()) { + // this.snapshotJournals.subList(this.stacks.size(), this.snapshotJournals.size()).clear(); + throw new IllegalStateException("Cannot decrease the snapshot journals' size"); + } + } + + @Override + public void serialize(ValueOutput output) { + NonNullList saving = TypeLimitItemStacksResourceHandler.constructStackList(); + for (UnlimitedItemStack stack : this.stacks) { + if (stack.isEmpty()) { + continue; + } + saving.add(stack); + } + output.store(TypeLimitItemStacksResourceHandler.VALUE_IO_KEY, TypeLimitItemStacksResourceHandler.STACKS_CODEC, saving); + } + + @Override + public void deserialize(ValueInput input) { + Optional> stacksOp = input.read( + TypeLimitItemStacksResourceHandler.VALUE_IO_KEY, + TypeLimitItemStacksResourceHandler.STACKS_CODEC + ); + if (stacksOp.isEmpty()) { + return; + } + NonNullList stacks = stacksOp.get(); + + // Add missing entries + while (this.stacks.size() < stacks.size()) { + this.stacks.add(UnlimitedItemStack.EMPTY); + } + if (this.stacks.size() > stacks.size()) { + this.stacks.subList(stacks.size(), this.stacks.size()).clear(); + } + + this.space = 0; + for (int i = 0; i < stacks.size(); i++) { + UnlimitedItemStack stack = stacks.get(i); + this.stacks.set(i, stack); + this.space += TypeLimitItemStacksResourceHandler.computeSpace(stack, stack.count()); + } + + this.updateStacksSize(); + } + + @SuppressWarnings("unused") + protected void onContentsChanged(int index, UnlimitedItemStack original) { + } + + private class StackJournal extends SnapshotJournal { + private final int index; + + private StackJournal(int index) { + this.index = index; + } + + @Override + protected UnlimitedItemStack createSnapshot() { + return TypeLimitItemStacksResourceHandler.this.stacks.get(this.index).copy(); + } + + @Override + protected void revertToSnapshot(UnlimitedItemStack snapshot) { + UnlimitedItemStack stack = TypeLimitItemStacksResourceHandler.this.stacks.get(this.index); + TypeLimitItemStacksResourceHandler.this.stacks.set(this.index, snapshot); + TypeLimitItemStacksResourceHandler.this.space += + TypeLimitItemStacksResourceHandler.computeSpace(snapshot, snapshot.getCount()) + - TypeLimitItemStacksResourceHandler.computeSpace(stack, stack.getCount()); + TypeLimitItemStacksResourceHandler.this.updateStacksSize(); + } + + @Override + protected void onRootCommit(UnlimitedItemStack originalState) { + TypeLimitItemStacksResourceHandler.this.onContentsChanged(this.index, originalState); + } + } + + public static int computeSpace(ItemResource resource, int count) { + return Math.ceilDiv(64, resource.getMaxStackSize()) * count; + } + + public static int computeSpace(ItemInstance instance, int count) { + return Math.ceilDiv(64, instance.getMaxStackSize()) * count; + } + + public static int computeCount(ItemResource resource, int space) { + return Math.floorDiv(space, Math.ceilDiv(64, resource.getMaxStackSize())); + } + + public static int computeCount(ItemInstance instance, int space) { + return Math.floorDiv(space, Math.ceilDiv(64, instance.getMaxStackSize())); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/package-info.java index 62bcacf0e9..99420314ad 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/itemhandler/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.itemhandler; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/package-info.java index 2aecbeebda..3c97a0583a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/portal/PortalType.java b/src/main/java/dev/dubhe/anvilcraft/api/portal/PortalType.java index b8327cb66d..858113bdac 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/portal/PortalType.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/portal/PortalType.java @@ -8,7 +8,7 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Portal; @@ -17,21 +17,21 @@ @Getter public class PortalType { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group( - ResourceLocation.CODEC + Identifier.CODEC .fieldOf("portal") .forGetter(PortalType::getId) ).apply(inst, PortalType::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ResourceLocation.STREAM_CODEC, + Identifier.STREAM_CODEC, PortalType::getId, PortalType::new ); - private final ResourceLocation id; + private final Identifier id; private final Portal portal; - public PortalType(ResourceLocation id) { + public PortalType(Identifier id) { this.id = id; - Block block = BuiltInRegistries.BLOCK.get(id); + Block block = BuiltInRegistries.BLOCK.getValue(id); if (!(block instanceof Portal portal1)) { throw new IllegalArgumentException("Block '" + id + "' is not a portal"); } @@ -40,7 +40,7 @@ public PortalType(ResourceLocation id) { @SuppressWarnings("deprecation") public PortalType(T portal) { - this.id = portal.builtInRegistryHolder().key().location(); + this.id = portal.builtInRegistryHolder().key().identifier(); this.portal = portal; } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/DynamicPowerComponent.java b/src/main/java/dev/dubhe/anvilcraft/api/power/DynamicPowerComponent.java index a90ca0ef05..409ca584db 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/DynamicPowerComponent.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/DynamicPowerComponent.java @@ -7,8 +7,8 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.AABB; -import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import org.jspecify.annotations.Nullable; import java.util.Collections; import java.util.IdentityHashMap; @@ -33,7 +33,7 @@ public DynamicPowerComponent(Entity owner, Supplier aabbSupplier) { public int getPowerConsumption() { int amount = 0; - for (PowerConsumption powerConsumption : powerConsumptions) { + for (PowerConsumption powerConsumption : this.powerConsumptions) { amount += powerConsumption.amount; } return amount; @@ -51,16 +51,16 @@ public void switchTo(@Nullable PowerGrid powerGrid) { } public AABB boundingBox() { - return aabbSupplier.get(); + return this.aabbSupplier.get(); } public void gridTick() { - if (owner instanceof IDynamicPowerComponentHolder) { - ((IDynamicPowerComponentHolder) owner).anvilcraft$gridTick(); + if (this.owner instanceof IDynamicPowerComponentHolder) { + ((IDynamicPowerComponentHolder) this.owner).anvilcraft$gridTick(); } } - public MutableComponent getCommandDiscription() { + public MutableComponent getCommandDescription() { double x = this.owner.getX(); double y = this.owner.getY(); double z = this.owner.getZ(); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/FastShape.java b/src/main/java/dev/dubhe/anvilcraft/api/power/FastShape.java index de2eb40de4..a34f37d235 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/FastShape.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/FastShape.java @@ -14,7 +14,7 @@ public FastShape(List shapes) { } public boolean inRange(Vec3 pos) { - for (AABB aabb : shapes) { + for (AABB aabb : this.shapes) { if (aabb.contains(pos)) { return true; } @@ -23,7 +23,7 @@ public boolean inRange(Vec3 pos) { } public boolean intersects(AABB box) { - for (AABB aabb : shapes) { + for (AABB aabb : this.shapes) { if (aabb.intersects(box)) { return true; } @@ -32,7 +32,7 @@ public boolean intersects(AABB box) { } public void add(AABB shape) { - shapes.add(shape); + this.shapes.add(shape); } public static FastShape create(List shapes) { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerComponent.java b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerComponent.java index 5455ef79e8..967e7821b3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerComponent.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerComponent.java @@ -12,13 +12,11 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.phys.AABB; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Optional; -/** - * 电力元件 - */ +/// 电力元件 @SuppressWarnings("unused") public interface IPowerComponent extends Comparable { BooleanProperty OVERLOAD = BooleanProperty.create("overload"); @@ -32,26 +30,22 @@ default void gridTick() { BlockPos getPos(); default AABB getShape() { - float range = getRange() * 2 + 1; - return AABB.ofSize(getPos().getCenter(), range, range, range); + float range = this.getRange() * 2 + 1; + return AABB.ofSize(this.getPos().getCenter(), range, range, range); } default int getRange() { return 0; } - /** - * 设置电网 - * - * @param grid 电网 - */ + /// 设置电网 + /// + /// @param grid 电网 void setGrid(@Nullable PowerGrid grid); - /** - * 获取电网 - * - * @return 电网 - */ + /// 获取电网 + /// + /// @return 电网 @Nullable PowerGrid getGrid(); PowerComponentType getComponentType(); @@ -94,7 +88,7 @@ default void flushState(Level level, BlockPos pos) { @Override default int compareTo(IPowerComponent powerComponent) { if (this.equals(powerComponent)) return 0; - int i = getComponentType().compareTo(powerComponent.getComponentType()); + int i = this.getComponentType().compareTo(powerComponent.getComponentType()); return i == 0 ? 1 : i; } @@ -102,6 +96,20 @@ default boolean isGridWorking() { return Optional.ofNullable(this.getGrid()).map(PowerGrid::isWorking).orElse(false); } + /// 转换为电网元件信息 + default PowerComponentInfo toPowerComponentInfo() { + return new PowerComponentInfo( + this.getPos(), + 0, + 0, + 0, + 0, + this.getRange(), + this.getShape(), + this.getComponentType() + ); + } + default MutableComponent getCommandDiscription() { Block block = Optional.ofNullable(this.getCurrentLevel()) .map(level -> level.getBlockState(this.getPos()).getBlock()) diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerConsumer.java b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerConsumer.java index 5b4825ce42..5e3e72c2c7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerConsumer.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerConsumer.java @@ -1,8 +1,6 @@ package dev.dubhe.anvilcraft.api.power; -/** - * 用电 - */ +/// 用电 public interface IPowerConsumer extends IPowerComponent { default int getInputPower() { return 0; @@ -12,4 +10,18 @@ default int getInputPower() { default PowerComponentType getComponentType() { return PowerComponentType.CONSUMER; } + + @Override + default PowerComponentInfo toPowerComponentInfo() { + return new PowerComponentInfo( + getPos(), + this.getInputPower(), + 0, + 0, + 0, + getRange(), + getShape(), + PowerComponentType.CONSUMER + ); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerProducer.java b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerProducer.java index e3baf2cd90..caf365ac4b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerProducer.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerProducer.java @@ -1,13 +1,8 @@ package dev.dubhe.anvilcraft.api.power; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; - import java.util.Optional; -/** - * 发电 - */ +/// 发电 public interface IPowerProducer extends IPowerComponent { default int getOutputPower() { return 0; @@ -22,10 +17,22 @@ default PowerComponentType getComponentType() { return PowerComponentType.PRODUCER; } - /** - * 实际电量 - */ - @OnlyIn(Dist.CLIENT) + @Override + default PowerComponentInfo toPowerComponentInfo() { + return new PowerComponentInfo( + getPos(), + 0, + this.getOutputPower(), + 0, + 0, + getRange(), + getShape(), + PowerComponentType.PRODUCER + ); + } + + /// 实际电量 + // @OnlyIn(Dist.CLIENT) default int getServerPower() { Optional s = SimplePowerGrid.findPowerGrid(getPos()); if (s.isPresent()) { @@ -38,7 +45,7 @@ default int getServerPower() { : powerComponentInfo.consumes()) .orElse(1); } else { - return Math.abs(getOutputPower()); + return Math.abs(this.getOutputPower()); } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerStorage.java b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerStorage.java index ba65c3f093..575879fbb8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerStorage.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerStorage.java @@ -1,41 +1,45 @@ package dev.dubhe.anvilcraft.api.power; -/** - * 储电 - */ +/// 储电 public interface IPowerStorage extends IPowerProducer, IPowerConsumer { - /** - * 输入电量 - * - * @param power 输入值 - * @return 无法输入的值 - */ + /// 输入电量 + /// + /// @param power 输入值 + /// @return 无法输入的值 int insert(int power); - /** - * 获取电量 - * - * @param power 想要获取的值 - * @return 实际获取的值 - */ + /// 获取电量 + /// + /// @param power 想要获取的值 + /// @return 实际获取的值 int extract(int power); - /** - * 获取已存储的电量 - * - * @return 电量值 - */ + /// 获取已存储的电量 + /// + /// @return 电量值 int getPowerAmount(); - /** - * 获取储电容量 - * - * @return 储电容量 - */ + /// 获取储电容量 + /// + /// @return 储电容量 int getCapacity(); @Override default PowerComponentType getComponentType() { return PowerComponentType.STORAGE; } + + @Override + default PowerComponentInfo toPowerComponentInfo() { + return new PowerComponentInfo( + getPos(), + 0, + 0, + this.getPowerAmount(), + this.getCapacity(), + getRange(), + getShape(), + PowerComponentType.STORAGE + ); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerTransmitter.java b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerTransmitter.java index da4d470f20..07bcfa93e5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerTransmitter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/IPowerTransmitter.java @@ -2,9 +2,7 @@ import dev.dubhe.anvilcraft.AnvilCraft; -/** - * 电力中继器 - */ +/// 电力中继器 public interface IPowerTransmitter extends IPowerComponent { @Override default int getRange() { @@ -15,4 +13,18 @@ default int getRange() { default PowerComponentType getComponentType() { return PowerComponentType.TRANSMITTER; } + + @Override + default PowerComponentInfo toPowerComponentInfo() { + return new PowerComponentInfo( + getPos(), + 0, + 0, + 0, + 0, + this.getRange(), + getShape(), + PowerComponentType.TRANSMITTER + ); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/PowerComponentInfo.java b/src/main/java/dev/dubhe/anvilcraft/api/power/PowerComponentInfo.java index 53708c9269..c6a906cfd3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/PowerComponentInfo.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/PowerComponentInfo.java @@ -3,10 +3,12 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.anvilcraft.lib.v2.codec.StreamCodecUtil; -import io.netty.buffer.ByteBuf; +import dev.dubhe.anvilcraft.util.CodecUtil; import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.phys.AABB; public record PowerComponentInfo( BlockPos pos, @@ -15,6 +17,7 @@ public record PowerComponentInfo( int stores, int capacity, int range, + AABB boundingBox, PowerComponentType type ) { public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( @@ -36,11 +39,14 @@ public record PowerComponentInfo( Codec.INT .fieldOf("range") .forGetter(PowerComponentInfo::range), + CodecUtil.AABB_CODEC + .fieldOf("boundingBox") + .forGetter(PowerComponentInfo::boundingBox), PowerComponentType.CODEC .fieldOf("type") .forGetter(PowerComponentInfo::type) ).apply(ins, PowerComponentInfo::new)); - public static final StreamCodec STREAM_CODEC = StreamCodecUtil.composite( + public static final StreamCodec STREAM_CODEC = StreamCodecUtil.composite( BlockPos.STREAM_CODEC, PowerComponentInfo::pos, ByteBufCodecs.VAR_INT, @@ -53,6 +59,8 @@ public record PowerComponentInfo( PowerComponentInfo::consumes, ByteBufCodecs.VAR_INT, PowerComponentInfo::consumes, + CodecUtil.AABB_STREAM_CODEC, + PowerComponentInfo::boundingBox, StreamCodecUtil.enumStreamCodec(PowerComponentType.class), PowerComponentInfo::type, PowerComponentInfo::new diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/PowerComponentType.java b/src/main/java/dev/dubhe/anvilcraft/api/power/PowerComponentType.java index bb7c703f47..eff97d4d25 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/PowerComponentType.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/PowerComponentType.java @@ -3,9 +3,7 @@ import com.mojang.serialization.Codec; import net.minecraft.util.StringRepresentable; -/** - * 电力元件类型 - */ +/// 电力元件类型 public enum PowerComponentType implements StringRepresentable { INVALID, PRODUCER, diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/PowerGrid.java b/src/main/java/dev/dubhe/anvilcraft/api/power/PowerGrid.java index 98c6e2f624..7893e08af2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/PowerGrid.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/PowerGrid.java @@ -13,6 +13,7 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.network.PacketDistributor; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; import java.util.Collections; @@ -21,9 +22,7 @@ import java.util.Optional; import java.util.Set; -/** - * 电网 - */ +/// 电网 @SuppressWarnings("unused") public class PowerGrid { public static boolean isServerClosing = false; @@ -50,10 +49,10 @@ public class PowerGrid { final Set dynamicComponents = Collections.synchronizedSet(new HashSet<>()); @Getter - private FastShape shape = null; + private @Nullable FastShape shape = null; @Getter - private BlockPos pos = null; + private @Nullable BlockPos pos = null; @Getter private final Level level; @@ -67,9 +66,9 @@ public PowerGrid(Level level) { } public void update(boolean forced) { - if (forced || changed) { + if (forced || this.changed) { PacketDistributor.sendToPlayersTrackingChunk( - (ServerLevel) level, + (ServerLevel) this.level, this.level.getChunkAt(this.getPos()).getPos(), new PowerGridSyncPacket(this) ); @@ -84,11 +83,9 @@ public boolean isEmpty() { return this.getComponentCount() <= 0; } - /** - * 获取电网中的剩余电量 - * - * @return 剩余电量,可为负值 - */ + /// 获取电网中的剩余电量 + /// + /// @return 剩余电量,可为负值 public int getRemaining() { return this.generate - this.consume; } @@ -97,24 +94,20 @@ public void markChanged() { this.changed = true; } - /** - * 总电力刻 - */ + /// 总电力刻 public static void tickGrid() { MANAGER.tick(); } - /** - * 电力刻 - */ + /// 电力刻 protected void tick() { if (this.level.getGameTime() % GRID_TICK != 0) return; - if (this.isMarkedRemoval()) return; + if (this.markedRemoval) return; if (this.flush()) return; if (this.isWorking()) { int remainder = this.generate - this.consume; - for (IPowerStorage storage : storages) { - if (checkRemove(storage)) return; + for (IPowerStorage storage : this.storages) { + if (this.checkRemove(storage)) return; remainder = storage.insert(remainder); if (remainder <= 0) break; } @@ -134,12 +127,12 @@ protected void tick() { } this.gridTick(); this.update(false); - changed = false; + this.changed = false; } private void gridTick() { - components.forEach(IPowerComponent::gridTick); - dynamicComponents.forEach(DynamicPowerComponent::gridTick); + this.components.forEach(IPowerComponent::gridTick); + this.dynamicComponents.forEach(DynamicPowerComponent::gridTick); } private boolean checkRemove(IPowerComponent component) { @@ -155,28 +148,22 @@ public boolean flush() { final int oldConsume = this.consume; this.generate = 0; this.consume = 0; - for (IPowerTransmitter transmitter : transmitters) { - if (checkRemove(transmitter)) { - return true; - } + for (IPowerTransmitter transmitter : this.transmitters) { + if (this.checkRemove(transmitter)) return true; } for (IPowerProducer producer : this.producers) { - if (checkRemove(producer)) { - return true; - } + if (this.checkRemove(producer)) return true; this.generate += producer.getOutputPower(); } for (IPowerConsumer consumer : this.consumers) { - if (checkRemove(consumer)) { - return true; - } + if (this.checkRemove(consumer)) return true; this.consume += consumer.getInputPower(); } for (DynamicPowerComponent dynamicComponent : new ArrayList<>(this.dynamicComponents)) { Entity owner = dynamicComponent.getOwner(); if (owner.level() != this.level || !this.collideFast(dynamicComponent.boundingBox())) { - notifyLeaving(dynamicComponent); + this.notifyLeaving(dynamicComponent); continue; } int power = dynamicComponent.getPowerConsumption(); @@ -194,25 +181,21 @@ public boolean flush() { } public boolean inRangeFast(Vec3 pos) { - return shape.inRange(pos); + return this.shape.inRange(pos); } public boolean collideFast(AABB box) { - return shape.intersects(box); + return this.shape.intersects(box); } - /** - * 是否正常工作(未过载) - */ + /// 是否正常工作(未过载) public boolean isWorking() { return this.generate >= this.consume; } - /** - * 增加电力元件 - * - * @param components 元件 - */ + /// 增加电力元件 + /// + /// @param components 元件 public void add(IPowerComponent... components) { for (IPowerComponent component : components) { if (component.getComponentType() == PowerComponentType.INVALID) continue; @@ -254,11 +237,9 @@ public void notifyEntering(DynamicPowerComponent component) { this.dynamicComponents.add(component); } - /** - * 移除电网元件 - * - * @param components 元件 - */ + /// 移除电网元件 + /// + /// @param components 元件 public static void removeComponent(IPowerComponent... components) { try { if (PowerGrid.isServerClosing) return; @@ -272,11 +253,9 @@ public static void removeComponent(IPowerComponent... components) { } } - /** - * 移除电力元件 - * - * @param components 电力元件 - */ + /// 移除电力元件 + /// + /// @param components 电力元件 public void remove(IPowerComponent... components) { this.markedRemoval = true; for (IPowerComponent component : this.components) { @@ -300,34 +279,28 @@ private boolean clearGrid(IPowerComponent component) { return true; } - /** - * 将另一个电网合并至当前电网 - * - * @param grid 电网 - */ + /// 将另一个电网合并至当前电网 + /// + /// @param grid 电网 public void merge(PowerGrid grid) { grid.producers.forEach(this::add); grid.consumers.forEach(this::add); grid.storages.forEach(this::add); grid.transmitters.forEach(this::add); - changed = true; + this.changed = true; } - /** - * 判断元件是否在电网范围内 - * - * @param component 元件 - * @return 元件是否在电网范围内 - */ + /// 判断元件是否在电网范围内 + /// + /// @param component 元件 + /// @return 元件是否在电网范围内 public boolean isInRange(IPowerComponent component) { return ConnectivityChecker.check(this, component); } - /** - * 增加电力元件 - * - * @param components 元件 - */ + /// 增加电力元件 + /// + /// @param components 元件 public static void addComponent(IPowerComponent... components) { for (IPowerComponent component : components) { MANAGER.addComponent(component); @@ -358,9 +331,7 @@ public static Optional findPowerGridContains(Level level, AABB vec3) return Optional.empty(); } - /** - * 清空电网 - */ + /// 清空电网 public static void clear() { MANAGER.clear(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/PowerGridManager.java b/src/main/java/dev/dubhe/anvilcraft/api/power/PowerGridManager.java index c154618055..e09d145dc4 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/PowerGridManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/PowerGridManager.java @@ -25,7 +25,7 @@ public PowerGridManager() { public synchronized void addComponent(IPowerComponent component) { try { if (component.getCurrentLevel() == null) return; - addQueue.offer(Map.entry(component.getCurrentLevel(), component), 500, TimeUnit.MICROSECONDS); + this.addQueue.offer(Map.entry(component.getCurrentLevel(), component), 500, TimeUnit.MICROSECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } @@ -41,20 +41,20 @@ public synchronized void removeAll(Collection powerGrids) { } public void clear() { - gridMap.clear(); + this.gridMap.clear(); } public synchronized void tick() { - while (!addQueue.isEmpty()) { - Map.Entry entry = addQueue.poll(); + while (!this.addQueue.isEmpty()) { + Map.Entry entry = this.addQueue.poll(); if (entry == null) continue; IPowerComponent component = entry.getValue(); if (component.getComponentType() == PowerComponentType.INVALID) continue; AtomicReference grid = new AtomicReference<>(null); - Set grids = getGridSet(entry.getKey()); + Set grids = this.getGridSet(entry.getKey()); Set remove = Collections.synchronizedSet(new HashSet<>()); grids.forEach(powerGrid -> { - if (powerGrid.isMarkedRemoval() || !powerGrid.isInRange(component)) return; + if (powerGrid.markedRemoval || !powerGrid.isInRange(component)) return; if (grid.get() == null) { grid.set(powerGrid); } else { @@ -70,10 +70,10 @@ public synchronized void tick() { grid.get().add(component); grids.add(grid.get()); } - for (Set grids : gridMap.values()) { + for (Set grids : this.gridMap.values()) { Set remove = Collections.synchronizedSet(new HashSet<>()); grids.forEach(powerGrid -> { - if (powerGrid.isEmpty() || powerGrid.isMarkedRemoval()) { + if (powerGrid.isEmpty() || powerGrid.markedRemoval) { remove.add(powerGrid); } powerGrid.tick(); @@ -83,11 +83,11 @@ public synchronized void tick() { } public Set getGridSet(Level level) { - if (gridMap.containsKey(level)) { - return gridMap.get(level); + if (this.gridMap.containsKey(level)) { + return this.gridMap.get(level); } else { Set grids = Collections.synchronizedSet(new HashSet<>()); - gridMap.put(level, grids); + this.gridMap.put(level, grids); return grids; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/SimplePowerGrid.java b/src/main/java/dev/dubhe/anvilcraft/api/power/SimplePowerGrid.java index 2e945b6924..52db230a71 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/SimplePowerGrid.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/SimplePowerGrid.java @@ -16,12 +16,13 @@ import net.minecraft.nbt.Tag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.util.FastColor; +import net.minecraft.util.ARGB; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; import java.util.HashSet; @@ -37,7 +38,7 @@ @Getter public class SimplePowerGrid { - private static ExecutorService EXECUTOR; + private static @Nullable ExecutorService EXECUTOR; public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( Codec.INT.fieldOf("hash").forGetter(o -> o.id), Codec.STRING.fieldOf("level").forGetter(o -> o.level), @@ -66,29 +67,27 @@ public class SimplePowerGrid { private final int consume; // 耗电功率 private final int color; private List powerGridBoundLines = new ArrayList<>(); - private Future shapeFuture; + private @Nullable Future shapeFuture; - /** - * 简单电网 - */ + /// 简单电网 public SimplePowerGrid(int id, String level, BlockPos pos, List powerComponentInfoList, int generate, int consume) { this.pos = pos; this.level = level; this.id = id; - random.setSeed(id); - int[] colors = ColorUtil.hsvToRgb(random.nextInt(360), 80, 80); - this.color = FastColor.ARGB32.color((int) (0.4 * 255), colors[0], colors[1], colors[2]); + this.random.setSeed(id); + int[] colors = ColorUtil.hsvToRgb(this.random.nextInt(360), 80, 80); + this.color = ARGB.color((int) (0.4 * 255), colors[0], colors[1], colors[2]); this.generate = generate; this.consume = consume; - blocks.addAll(powerComponentInfoList.stream().map(PowerComponentInfo::pos).toList()); + this.blocks.addAll(powerComponentInfoList.stream().map(PowerComponentInfo::pos).toList()); this.powerComponentInfoList.addAll(powerComponentInfoList); - createMergedOutlineShape(); - createTransmitterVisualLines(); + this.createMergedOutlineShape(); + this.createTransmitterVisualLines(); } public SimplePowerGrid(PowerGrid grid) { this.id = grid.hashCode(); - this.level = grid.getLevel().dimension().location().toString(); + this.level = grid.getLevel().dimension().identifier().toString(); this.pos = grid.getPos(); Set powerComponents = new HashSet<>(); powerComponents.addAll(grid.storages); @@ -97,75 +96,13 @@ public SimplePowerGrid(PowerGrid grid) { powerComponents.addAll(grid.transmitters); this.color = 0; for (IPowerComponent component : powerComponents) { - switch (component.getComponentType()) { - case STORAGE -> { - IPowerStorage it = (IPowerStorage) component; - powerComponentInfoList.add(new PowerComponentInfo( - it.getPos(), - 0, - 0, - it.getPowerAmount(), - it.getCapacity(), - it.getRange(), - PowerComponentType.STORAGE - )); - } - case CONSUMER -> { - IPowerConsumer it = (IPowerConsumer) component; - powerComponentInfoList.add(new PowerComponentInfo( - it.getPos(), - it.getInputPower(), - 0, - 0, - 0, - it.getRange(), - PowerComponentType.CONSUMER - )); - } - case PRODUCER -> { - IPowerProducer it = (IPowerProducer) component; - powerComponentInfoList.add(new PowerComponentInfo( - it.getPos(), - 0, - it.getOutputPower(), - 0, - 0, - it.getRange(), - PowerComponentType.PRODUCER - )); - } - - case TRANSMITTER -> { - IPowerTransmitter it = (IPowerTransmitter) component; - powerComponentInfoList.add(new PowerComponentInfo( - it.getPos(), - 0, - 0, - 0, - 0, - it.getRange(), - PowerComponentType.TRANSMITTER - )); - } - - default -> powerComponentInfoList.add(new PowerComponentInfo( - component.getPos(), - 0, - 0, - 0, - 0, - component.getRange(), - PowerComponentType.INVALID - )); - } + this.powerComponentInfoList.add(component.toPowerComponentInfo()); } this.consume = grid.getConsume(); this.generate = grid.getGenerate(); } - /** - * 寻找电网 - */ + /// 寻找电网 public static Optional findPowerGrid(BlockPos pos) { for (SimplePowerGrid value : PowerGridSupport.getGridMap().values()) { for (BlockPos block : value.blocks) { @@ -202,35 +139,25 @@ public boolean collideFast(AABB aabb) { return false; } - /** - * 获得指定坐标的电网元件信息 - */ + /// 获得指定坐标的电网元件信息 public Optional getInfoForPos(BlockPos pos) { - return powerComponentInfoList.stream().filter(it -> it.pos().equals(pos)).findFirst(); + return this.powerComponentInfoList.stream().filter(it -> it.pos().equals(pos)).findFirst(); } public boolean isOverloaded() { return this.getConsume() > this.getGenerate(); } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean shouldRender(Vec3 cameraPos) { int renderDistance = Minecraft.getInstance().options.getEffectiveRenderDistance() * 16; - return powerComponentInfoList.stream().anyMatch(it -> it.pos().getCenter().distanceTo(cameraPos) < renderDistance); + return this.powerComponentInfoList.stream().anyMatch(it -> it.pos().getCenter().distanceTo(cameraPos) < renderDistance); } private void createTransmitterVisualLines() { List> shapes = this.powerComponentInfoList.stream() .filter(it -> it.type() == PowerComponentType.TRANSMITTER) - .map(it -> Map.entry( - it.pos(), new AABB( - -it.range() + it.pos().getX(), - -it.range() + it.pos().getY(), - -it.range() + it.pos().getZ(), - it.range() + 1 + it.pos().getX(), - it.range() + 1 + it.pos().getY(), - it.range() + 1 + it.pos().getZ() - ) - )) + .map(it -> Map.entry(it.pos(), it.boundingBox())) .toList(); for (int i = 0; i < shapes.size(); i++) { @@ -242,7 +169,7 @@ private void createTransmitterVisualLines() { if (a.intersects(b)) { Vec3 start = e1.getKey().getCenter(); Vec3 end = e2.getKey().getCenter(); - powerTransmitterLines.add(new Line(start, end)); + this.powerTransmitterLines.add(new Line(start, end)); } } } @@ -252,10 +179,8 @@ private void createMergedOutlineShape() { if (SimplePowerGrid.EXECUTOR.isShutdown()) SimplePowerGrid.recreateExecutor(); this.shapeFuture = SimplePowerGrid.EXECUTOR.submit(() -> { List input = new ArrayList<>(); - for (PowerComponentInfo it : powerComponentInfoList) { - Vec3 center = it.pos().getCenter(); - float size = it.range() * 2 + 1; - input.add(Shapes.create(AABB.ofSize(center, size, size, size))); + for (PowerComponentInfo it : this.powerComponentInfoList) { + input.add(Shapes.create(it.boundingBox())); } // noinspection CatchMayIgnoreException try { @@ -281,8 +206,8 @@ private BlockPos offset(BlockPos pos) { } public void destroy() { - if (!shapeFuture.isDone()) { - shapeFuture.cancel(true); + if (!this.shapeFuture.isDone()) { + this.shapeFuture.cancel(true); } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/power/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/power/package-info.java index aee02b12af..e388534f3d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/power/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/power/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.power; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/ICustomDataComponent.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/ICustomDataComponent.java index a1f0e2adb0..20915c29fd 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/ICustomDataComponent.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/ICustomDataComponent.java @@ -2,73 +2,53 @@ import com.mojang.serialization.Codec; import dev.anvilcraft.lib.v2.util.ISerializer; -import dev.dubhe.anvilcraft.init.ModRegistries; -import it.unimi.dsi.fastutil.objects.Object2BooleanMap; +import dev.dubhe.anvilcraft.api.recipe.result.ResultContext; +import dev.dubhe.anvilcraft.init.registry.ModRegistries; +import dev.dubhe.anvilcraft.init.registry.ModRegistryKeys; import net.minecraft.core.component.DataComponentType; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -import java.util.List; - -/** - * 自定义数据组件。通常为必需其它数据组件才能正常构建的数据组件。 - * - * @param 该数据组件的类型 - */ +/// 自定义数据组件。通常为必需其它数据组件才能正常构建的数据组件。 +/// +/// @param 该数据组件的类型 public interface ICustomDataComponent { - Codec> CODEC = Codec.lazyInitialized(() -> ModRegistries.CUSTOM_DATA_TYPE_REGISTRY + Codec> CODEC = Codec.lazyInitialized(() -> ModRegistries.CUSTOM_DATA_TYPE .byNameCodec().dispatch(ICustomDataComponent::getType, ICustomDataComponent.Type::codec)); StreamCodec> STREAM_CODEC = StreamCodec.recursive( - streamCodec -> ByteBufCodecs.registry(ModRegistries.CUSTOM_DATA_TYPE_KEY) + streamCodec -> ByteBufCodecs.registry(ModRegistryKeys.CUSTOM_DATA_TYPE) .dispatch(ICustomDataComponent::getType, ICustomDataComponent.Type::streamCodec)); - /** - * 获取该数据组件的类型。 - * - * @return 该数据组件的类型 - */ + /// 获取该数据组件的类型。 + /// + /// @return 该数据组件的类型 DataComponentType getDataComponentType(); - /** - * 获取该自定义数据组件的类型。 - * - * @return 该自定义数据组件的类型 - */ + /// 获取该自定义数据组件的类型。 + /// + /// @return 该自定义数据组件的类型 Type> getType(); - /** - * 获取构建该数据组件所必需的其它已有的数据组件类型。

- * 由于 {@link ICustomDataComponent#make(List)} 方法强依赖于该方法返回的 {@link List} 的顺序, - * 返回的 {@link List} 顺序敏感。 - * - * @return 一个包含所有必需的数据组件类型和其值是否可为 {@code null} 的 {@link Object2BooleanMap} - */ - List getRequired(); - - /** - * 使用所有必需的数据组件构建一个该数据组件。 - * - * @param data 所有必需的数据组件。顺序由 {@link ICustomDataComponent#getRequired()} 方法中返回的 {@link List} 控制。 - * @return 一个全新的该数据组件 - */ + /// 根据上下文构建数据组件。 + /// + /// @param ctx 上下文 + /// @return 一个全新的数据组件 @Nullable - T make(List data); + T make(ResultContext ctx); default void applyToStack(ItemStack stack, @Nullable T value) { if (value == null) stack.remove(this.getDataComponentType()); stack.set(this.getDataComponentType(), value); } - /** - * 将两个数据合并为一个新的组件。 - * - * @param oldData 旧数据 - * @param newData 新数据 - * @return 合并后的数据 - */ + /// 将两个数据合并为一个新的组件。 + /// + /// @param oldData 旧数据 + /// @param newData 新数据 + /// @return 合并后的数据 T merge(T oldData, T newData); interface Type> extends ISerializer { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/ItemEnchantmentsData.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/ItemEnchantmentsData.java index 268f943bae..1cda4bca8f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/ItemEnchantmentsData.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/ItemEnchantmentsData.java @@ -1,9 +1,10 @@ package dev.dubhe.anvilcraft.api.recipe.data; -import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.anvilcraft.lib.v2.util.Util; +import dev.dubhe.anvilcraft.api.recipe.result.ResultContext; +import dev.dubhe.anvilcraft.api.recipe.slot.RecipeInputSlot; import dev.dubhe.anvilcraft.init.item.ModComponents; import dev.dubhe.anvilcraft.init.item.ModCustomDataComponents; import lombok.EqualsAndHashCode; @@ -12,50 +13,70 @@ import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.ItemEnchantments; -import java.util.List; - @Getter @EqualsAndHashCode public class ItemEnchantmentsData implements ICustomDataComponent { - private final List required; - private final int input; - private final DataComponentType dataComponentType; + private final RecipeInputSlot input; + private final DataComponentType type; - private ItemEnchantmentsData(int input, DataComponentType type) { + private ItemEnchantmentsData(RecipeInputSlot input, DataComponentType type) { this.input = input; - this.dataComponentType = Util.cast(type); - this.required = List.of(new RequiredEntry(input, type, true)); + this.type = Util.cast(type); + } + + private ItemEnchantmentsData(int input, DataComponentType type) { + this(RecipeInputSlot.input(input), type); + } + + public static ItemEnchantmentsData custom(RecipeInputSlot input, DataComponentType type) { + return new ItemEnchantmentsData(input, type); } public static ItemEnchantmentsData custom(int input, DataComponentType type) { return new ItemEnchantmentsData(input, type); } + public static ItemEnchantmentsData enchantments(RecipeInputSlot input) { + return new ItemEnchantmentsData(input, DataComponents.ENCHANTMENTS); + } + public static ItemEnchantmentsData enchantments(int input) { return new ItemEnchantmentsData(input, DataComponents.ENCHANTMENTS); } + public static ItemEnchantmentsData storedEnchantments(RecipeInputSlot input) { + return new ItemEnchantmentsData(input, DataComponents.STORED_ENCHANTMENTS); + } + public static ItemEnchantmentsData storedEnchantments(int input) { return new ItemEnchantmentsData(input, DataComponents.STORED_ENCHANTMENTS); } + public static ItemEnchantmentsData mercilessEnchantments(RecipeInputSlot input) { + return new ItemEnchantmentsData(input, ModComponents.MERCILESS_ENCHANTMENTS); + } + public static ItemEnchantmentsData mercilessEnchantments(int input) { return new ItemEnchantmentsData(input, ModComponents.MERCILESS_ENCHANTMENTS); } + @Override + public DataComponentType getDataComponentType() { + return this.type; + } + @Override public Type getType() { return ModCustomDataComponents.ITEM_ENCHANTMENTS.get(); } @Override - public ItemEnchantments make(List data) { - return Util.cast(data.getFirst()); + public ItemEnchantments make(ResultContext ctx) { + return ctx.getInput(this.input).get(this.type); } @Override @@ -70,15 +91,14 @@ public ItemEnchantments merge(ItemEnchantments oldData, ItemEnchantments newData public static class Type implements ICustomDataComponent.Type { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group( - Codec.INT - .fieldOf("input") + RecipeInputSlot.CODEC .forGetter(ItemEnchantmentsData::getInput), DataComponentType.CODEC .fieldOf("component") .forGetter(ItemEnchantmentsData::getDataComponentType) ).apply(inst, ItemEnchantmentsData::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.VAR_INT, + RecipeInputSlot.STREAM_CODEC, ItemEnchantmentsData::getInput, DataComponentType.STREAM_CODEC, ItemEnchantmentsData::getDataComponentType, diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/MultiphaseData.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/MultiphaseData.java index 5d9b9db1ba..83ccee3e02 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/MultiphaseData.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/MultiphaseData.java @@ -3,11 +3,15 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import dev.anvilcraft.lib.v2.util.ListUtil; +import dev.dubhe.anvilcraft.api.recipe.result.ResultContext; +import dev.dubhe.anvilcraft.api.recipe.slot.RecipeInputSlot; import dev.dubhe.anvilcraft.init.item.ModComponents; import dev.dubhe.anvilcraft.init.item.ModCustomDataComponents; import dev.dubhe.anvilcraft.item.property.component.MultiphaseRef; import dev.dubhe.anvilcraft.saved.multiphase.Multiphase; +import lombok.AccessLevel; import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; import net.minecraft.network.RegistryFriendlyByteBuf; @@ -17,20 +21,13 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.ItemEnchantments; import net.neoforged.neoforge.server.ServerLifecycleHooks; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -import java.util.ArrayList; import java.util.LinkedList; -import java.util.List; +@NoArgsConstructor(access = AccessLevel.PROTECTED) @EqualsAndHashCode public abstract class MultiphaseData implements ICustomDataComponent { - private final List required; - - private MultiphaseData(List required) { - this.required = required; - } - public static MultiphaseData two() { return new Two(); } @@ -48,7 +45,7 @@ private static MultiphaseData fromType(String type) { case Two.TYPE -> new Two(); case Four.TYPE -> new Four(); case Eight.TYPE -> new Eight(); - case null, default -> throw new IllegalArgumentException("Find invalid type. Expect two, four and eight, get " + type); + case null, default -> throw new IllegalArgumentException("Find invalid type. Expect two, four or eight, get " + type); }; } @@ -62,11 +59,6 @@ public Type getType() { return ModCustomDataComponents.MULTIPHASE.get(); } - @Override - public List getRequired() { - return this.required; - } - @Override public MultiphaseRef merge(MultiphaseRef oldData, MultiphaseRef newData) { Multiphase old = oldData.toMultiphase(); @@ -104,52 +96,28 @@ public void applyToStack(ItemStack stack, @Nullable MultiphaseRef value) { protected abstract String type(); - private static @Nullable Component processCustomName(@Nullable Object customName) { - return customName instanceof Component it ? it : null; - } - - private static int processRepairCost(@Nullable Object repairCost) { - return repairCost instanceof Integer it ? it : 0; - } - - private static ItemEnchantments processItemEnchantments(@Nullable Object enchantments) { - return enchantments instanceof ItemEnchantments it ? it : ItemEnchantments.EMPTY; - } - private static class Two extends MultiphaseData { - private static final List REQUIRED = new ArrayList<>(); public static final String TYPE = "two"; - Two() { - super(Two.getOrFillRequired()); - } - - @SuppressWarnings("SameReturnValue") - private static List getOrFillRequired() { - if (!Two.REQUIRED.isEmpty()) return Two.REQUIRED; - for (int i = 0; i < 2; i++) { - Two.REQUIRED.add(new RequiredEntry(i, DataComponents.CUSTOM_NAME, true)); - Two.REQUIRED.add(new RequiredEntry(i, DataComponents.REPAIR_COST, true)); - Two.REQUIRED.add(new RequiredEntry(i, DataComponents.ENCHANTMENTS, true)); - } - return Two.REQUIRED; - } - @Override protected String type() { return Two.TYPE; } @Override - public MultiphaseRef make(List data) { + public MultiphaseRef make(ResultContext ctx) { LinkedList phases = new LinkedList<>(); for (int i = 0; i < 2; i++) { - int base = i * 3; + ItemStack stack = ctx.getInput(RecipeInputSlot.input(i)); phases.add( Multiphase.Phase.create(i) - .withCustomName(MultiphaseData.processCustomName(data.get(base))) - .withRepairCost(MultiphaseData.processRepairCost(data.get(base + 1))) - .withEnchantments(MultiphaseData.processItemEnchantments(data.get(base + 2))) + .withCustomName(stack.get(DataComponents.CUSTOM_NAME)) + .withItemName( + Component.translatable(ctx.getResult().getItem().getDescriptionId()).copy().append(Multiphase.makeSuffix(i)) + ) + .withRepairCost(stack.getOrDefault(DataComponents.REPAIR_COST, 0)) + .withEnchantments(stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack.getOrDefault(ModComponents.MERCILESS_ENCHANTMENTS, ItemEnchantments.EMPTY)) ); } return new MultiphaseRef(new Multiphase(phases)); @@ -157,46 +125,31 @@ public MultiphaseRef make(List data) { } private static class Four extends MultiphaseData { - private static final List REQUIRED = new ArrayList<>(); public static final String TYPE = "four"; - Four() { - super(Four.getOrFillRequired()); - } - - @SuppressWarnings("SameReturnValue") - private static List getOrFillRequired() { - if (!Four.REQUIRED.isEmpty()) return Four.REQUIRED; - Four.REQUIRED.add(new RequiredEntry(0, DataComponents.CUSTOM_NAME, true)); - Four.REQUIRED.add(new RequiredEntry(2, DataComponents.CUSTOM_NAME, true)); - for (int i = 0; i < 4; i++) { - Four.REQUIRED.add(new RequiredEntry(i, DataComponents.REPAIR_COST, true)); - Four.REQUIRED.add(new RequiredEntry(i, DataComponents.ENCHANTMENTS, true)); - } - return Four.REQUIRED; - } - @Override protected String type() { return Four.TYPE; } @Override - public MultiphaseRef make(List data) { + public MultiphaseRef make(ResultContext ctx) { LinkedList phases = new LinkedList<>(); - Component[] customNames = new Component[] { - MultiphaseData.processCustomName(data.getFirst()), - MultiphaseData.processCustomName(data.get(1)) - }; for (int i = 0; i < 2; i++) { - int base = i * 4 + 2; + ItemStack stack = ctx.getInput(RecipeInputSlot.input(i * 2)); + ItemStack stack1 = ctx.getInput(RecipeInputSlot.input(i * 2 + 1)); phases.add( Multiphase.Phase.create(i) - .withCustomName(customNames[i]) - .withRepairCost(MultiphaseData.processRepairCost(data.get(base))) - .addRepairCost(MultiphaseData.processRepairCost(data.get(base + 2))) - .withEnchantments(MultiphaseData.processItemEnchantments(data.get(base + 1))) - .addEnchantments(MultiphaseData.processItemEnchantments(data.get(base + 3))) + .withCustomName(stack.get(DataComponents.CUSTOM_NAME)) + .withItemName( + Component.translatable(ctx.getResult().getItem().getDescriptionId()).copy().append(Multiphase.makeSuffix(i)) + ) + .withRepairCost(stack.getOrDefault(DataComponents.REPAIR_COST, 0)) + .addRepairCost(stack1.getOrDefault(DataComponents.REPAIR_COST, 0)) + .withEnchantments(stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack.getOrDefault(ModComponents.MERCILESS_ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack1.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack1.getOrDefault(ModComponents.MERCILESS_ENCHANTMENTS, ItemEnchantments.EMPTY)) ); } return new MultiphaseRef(new Multiphase(phases)); @@ -204,50 +157,39 @@ public MultiphaseRef make(List data) { } private static class Eight extends MultiphaseData { - private static final List REQUIRED = new ArrayList<>(); public static final String TYPE = "eight"; - Eight() { - super(Eight.getOrFillRequired()); - } - - @SuppressWarnings("SameReturnValue") - private static List getOrFillRequired() { - if (!Eight.REQUIRED.isEmpty()) return Eight.REQUIRED; - Eight.REQUIRED.add(new RequiredEntry(0, DataComponents.CUSTOM_NAME, true)); - Eight.REQUIRED.add(new RequiredEntry(4, DataComponents.CUSTOM_NAME, true)); - for (int i = 0; i < 8; i++) { - Eight.REQUIRED.add(new RequiredEntry(i, DataComponents.REPAIR_COST, true)); - Eight.REQUIRED.add(new RequiredEntry(i, DataComponents.ENCHANTMENTS, true)); - } - return Eight.REQUIRED; - } - @Override protected String type() { return Eight.TYPE; } @Override - public MultiphaseRef make(List data) { + public MultiphaseRef make(ResultContext ctx) { LinkedList phases = new LinkedList<>(); - Component[] customNames = new Component[] { - data.getFirst() instanceof Component it ? it : null, - data.get(1) instanceof Component it ? it : null - }; for (int i = 0; i < 2; i++) { - int base = i * 8 + 2; + ItemStack stack = ctx.getInput(RecipeInputSlot.input(i * 4)); + ItemStack stack1 = ctx.getInput(RecipeInputSlot.input(i * 4 + 1)); + ItemStack stack2 = ctx.getInput(RecipeInputSlot.input(i * 4 + 2)); + ItemStack stack3 = ctx.getInput(RecipeInputSlot.input(i * 4 + 3)); phases.add( Multiphase.Phase.create(i) - .withCustomName(customNames[i]) - .withRepairCost(MultiphaseData.processRepairCost(data.get(base))) - .addRepairCost(MultiphaseData.processRepairCost(data.get(base + 2))) - .addRepairCost(MultiphaseData.processRepairCost(data.get(base + 4))) - .addRepairCost(MultiphaseData.processRepairCost(data.get(base + 6))) - .withEnchantments(MultiphaseData.processItemEnchantments(data.get(base + 1))) - .addEnchantments(MultiphaseData.processItemEnchantments(data.get(base + 3))) - .addEnchantments(MultiphaseData.processItemEnchantments(data.get(base + 5))) - .addEnchantments(MultiphaseData.processItemEnchantments(data.get(base + 7))) + .withCustomName(stack.get(DataComponents.CUSTOM_NAME)) + .withItemName( + Component.translatable(ctx.getResult().getItem().getDescriptionId()).copy().append(Multiphase.makeSuffix(i)) + ) + .withRepairCost(stack.getOrDefault(DataComponents.REPAIR_COST, 0)) + .addRepairCost(stack1.getOrDefault(DataComponents.REPAIR_COST, 0)) + .addRepairCost(stack2.getOrDefault(DataComponents.REPAIR_COST, 0)) + .addRepairCost(stack3.getOrDefault(DataComponents.REPAIR_COST, 0)) + .withEnchantments(stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack.getOrDefault(ModComponents.MERCILESS_ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack1.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack1.getOrDefault(ModComponents.MERCILESS_ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack2.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack2.getOrDefault(ModComponents.MERCILESS_ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack3.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)) + .addEnchantments(stack3.getOrDefault(ModComponents.MERCILESS_ENCHANTMENTS, ItemEnchantments.EMPTY)) ); } return new MultiphaseRef(new Multiphase(phases)); @@ -255,7 +197,8 @@ public MultiphaseRef make(List data) { } public static class Type implements ICustomDataComponent.Type { - public static final MapCodec CODEC = Codec.STRING.fieldOf("input_type") + public static final MapCodec CODEC = Codec.STRING + .fieldOf("input_type") .xmap(MultiphaseData::fromType, MultiphaseData::type); public static final StreamCodec STREAM_CODEC = ByteBufCodecs.STRING_UTF8 .map(MultiphaseData::fromType, MultiphaseData::type).cast(); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/NormalDataComponent.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/NormalDataComponent.java index 5d6ba9c94d..19fb5363c9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/NormalDataComponent.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/NormalDataComponent.java @@ -1,45 +1,49 @@ package dev.dubhe.anvilcraft.api.recipe.data; -import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.anvilcraft.lib.v2.util.Util; +import dev.dubhe.anvilcraft.api.recipe.result.ResultContext; +import dev.dubhe.anvilcraft.api.recipe.slot.RecipeInputSlot; import dev.dubhe.anvilcraft.init.item.ModCustomDataComponents; import lombok.EqualsAndHashCode; import lombok.Getter; import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -import java.util.List; - @Getter @EqualsAndHashCode public class NormalDataComponent implements ICustomDataComponent { - private final List required; - private final int input; - private final DataComponentType dataComponentType; + private final RecipeInputSlot input; + private final DataComponentType type; - private NormalDataComponent(int input, DataComponentType type) { + private NormalDataComponent(RecipeInputSlot input, DataComponentType type) { this.input = input; - this.dataComponentType = type; - this.required = List.of(new RequiredEntry(input, type, true)); + this.type = type; } - public static NormalDataComponent of(int input, DataComponentType type) { + public static NormalDataComponent of(RecipeInputSlot input, DataComponentType type) { return new NormalDataComponent<>(input, type); } + public static NormalDataComponent of(int input, DataComponentType type) { + return new NormalDataComponent<>(RecipeInputSlot.input(input), type); + } + + @Override + public DataComponentType getDataComponentType() { + return this.type; + } + @Override public Type getType() { return ModCustomDataComponents.NORMAL.get(); } @Override - public T make(List data) { - return Util.cast(data.getFirst()); + public T make(ResultContext ctx) { + return ctx.getInput(this.input).get(this.type); } @Override @@ -49,15 +53,14 @@ public T merge(T oldData, T newData) { public static class Type implements ICustomDataComponent.Type> { public static final MapCodec> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( - Codec.INT - .fieldOf("input") + RecipeInputSlot.CODEC .forGetter(NormalDataComponent::getInput), DataComponentType.CODEC .fieldOf("component") .forGetter(NormalDataComponent::getDataComponentType) ).apply(instance, NormalDataComponent::new)); public static final StreamCodec> STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.VAR_INT, + RecipeInputSlot.STREAM_CODEC, NormalDataComponent::getInput, DataComponentType.STREAM_CODEC, NormalDataComponent::getDataComponentType, diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/RequiredEntry.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/RequiredEntry.java deleted file mode 100644 index e5c1ed53b4..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/RequiredEntry.java +++ /dev/null @@ -1,30 +0,0 @@ -package dev.dubhe.anvilcraft.api.recipe.data; - -import dev.dubhe.anvilcraft.api.recipe.slot.RecipeInputSlot; -import net.minecraft.core.component.DataComponentType; - -/** - * 必需的数据组件类型条目 - */ -public record RequiredEntry(RecipeInputSlot slot, DataComponentType component, boolean isNullable) { - /** - * 构建一个必需条目 - * - * @param slot 输入材料的槽位 - * @param component 数据组件类型 - * @param isNullable 是否可为 {@code null} - */ - public RequiredEntry { - } - - /** - * 构建一个必需条目 - * - * @param input 输入的槽位 - * @param component 数据组件类型 - * @param isNullable 是否可为 {@code null} - */ - public RequiredEntry(int input, DataComponentType component, boolean isNullable) { - this(RecipeInputSlot.input(input), component, isNullable); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/package-info.java index 3eff70bde5..10bff59eb7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/data/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.recipe.data; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/number/INumberProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/number/INumberProvider.java index 33a21ba198..9bdc36bba8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/number/INumberProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/number/INumberProvider.java @@ -4,19 +4,20 @@ import com.mojang.serialization.Codec; import dev.anvilcraft.lib.v2.util.ISerializer; import dev.dubhe.anvilcraft.api.recipe.result.ResultContext; -import dev.dubhe.anvilcraft.init.ModRegistries; +import dev.dubhe.anvilcraft.init.registry.ModRegistries; +import dev.dubhe.anvilcraft.init.registry.ModRegistryKeys; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; public interface INumberProvider { - Codec TYPED_CODEC = Codec.lazyInitialized(() -> ModRegistries.NUMBER_PROVIDER_TYPE_REGISTRY + Codec TYPED_CODEC = Codec.lazyInitialized(() -> ModRegistries.NUMBER_PROVIDER_TYPE .byNameCodec().dispatch(INumberProvider::type, Type::codec)); Codec CODEC = Codec.lazyInitialized(() -> Codec.either(INumberProvider.TYPED_CODEC, ConstantValue.INLINE_CODEC).xmap( Either::unwrap, provider -> provider instanceof ConstantValue constant ? Either.right(constant) : Either.left(provider) )); - StreamCodec STREAM_CODEC = ByteBufCodecs.registry(ModRegistries.NUMBER_PROVIDER_TYPE_KEY) + StreamCodec STREAM_CODEC = ByteBufCodecs.registry(ModRegistryKeys.NUMBER_PROVIDER_TYPE) .dispatch(INumberProvider::type, Type::streamCodec); float getFloat(ResultContext ctx); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/number/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/number/package-info.java index 1e45f38bc0..1290b17827 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/number/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/number/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.recipe.number; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/RecipeResult.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/RecipeResult.java index 04617741e4..b84a51c2f5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/RecipeResult.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/RecipeResult.java @@ -6,8 +6,6 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.anvilcraft.lib.v2.codec.CodecUtil; -import dev.anvilcraft.lib.v2.codec.StreamCodecUtil; import dev.dubhe.anvilcraft.api.recipe.data.ICustomDataComponent; import dev.dubhe.anvilcraft.api.recipe.result.modifier.ApplyData; import dev.dubhe.anvilcraft.api.recipe.result.modifier.ChangeDataType; @@ -23,17 +21,18 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; import net.minecraft.world.level.ItemLike; import org.jetbrains.annotations.Unmodifiable; import java.util.List; -public record RecipeResult(Item result, @Unmodifiable List modifiers) { +public record RecipeResult(ItemStackTemplate result, @Unmodifiable List modifiers) { public static final MapCodec DIRECT_CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( - CodecUtil.ITEM + ItemStackTemplate.CODEC .fieldOf("result") .forGetter(RecipeResult::result), IResultModifier.CODEC @@ -41,13 +40,13 @@ public record RecipeResult(Item result, @Unmodifiable List modi .optionalFieldOf("modifiers", List.of()) .forGetter(RecipeResult::modifiers) ).apply(ins, RecipeResult::new)); - public static final Codec INLINE_CODEC = CodecUtil.ITEM.xmap(RecipeResult::new, RecipeResult::result); + public static final Codec INLINE_CODEC = ItemStackTemplate.CODEC.xmap(RecipeResult::new, RecipeResult::result); public static final Codec CODEC = Codec.either(RecipeResult.DIRECT_CODEC.codec(), RecipeResult.INLINE_CODEC).xmap( Either::unwrap, result -> result.modifiers.isEmpty() ? Either.right(result) : Either.left(result) ); public static final MapCodec> LIST_DIRECT_CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( - CodecUtil.ITEM + ItemStackTemplate.CODEC .listOf() .fieldOf("items") .forGetter(items -> Lists.transform(items, RecipeResult::result)), @@ -55,7 +54,7 @@ public record RecipeResult(Item result, @Unmodifiable List modi .listOf() .optionalFieldOf("modifiers", List.of()) .forGetter(items -> items.getFirst().modifiers()) - ).apply(ins, (items, modifiers) -> Lists.transform(items, item -> new RecipeResult(item, modifiers)))); + ).apply(ins, RecipeResult::constructFromList)); public static final Codec> LIST_CODEC = Codec .either(RecipeResult.LIST_DIRECT_CODEC.codec(), RecipeResult.CODEC.listOf()) .xmap( @@ -71,27 +70,26 @@ public record RecipeResult(Item result, @Unmodifiable List modi } ); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - StreamCodecUtil.ITEM, + ItemStackTemplate.STREAM_CODEC, RecipeResult::result, IResultModifier.STREAM_CODEC.apply(ByteBufCodecs.list()), RecipeResult::modifiers, RecipeResult::new ); - public RecipeResult(Item result) { + public RecipeResult(ItemStackTemplate result) { this(result, List.of()); } public RecipeResult(Item result, List modifiers) { - this.result = result; - this.modifiers = modifiers; + this(new ItemStackTemplate(result), modifiers); } public static Builder builder() { return new Builder(); } - public static RecipeResult.Builder simple(ItemLike result) { + public static Builder simple(ItemLike result) { return RecipeResult.builder().result(result.asItem()); } @@ -182,7 +180,7 @@ public Builder removeAttribute(RemoveAttribute.Builder builder) { return this; } - public Builder removeAttribute(ResourceLocation... attrs) { + public Builder removeAttribute(Identifier... attrs) { return this.removeAttribute(RemoveAttribute.removeAttr(attrs)); } @@ -199,4 +197,8 @@ public RecipeResult build() { return new RecipeResult(this.result, this.modifiers.build()); } } + + private static List constructFromList(List items, List modifiers) { + return Lists.transform(items, item -> new RecipeResult(item, modifiers)); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/ResultContext.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/ResultContext.java index 30972ab42e..f5efc3de31 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/ResultContext.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/ResultContext.java @@ -8,8 +8,8 @@ import net.minecraft.core.component.DataComponentType; import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; +import org.jspecify.annotations.Nullable; import java.util.Map; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/ChangeDataType.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/ChangeDataType.java index 69471c9231..e258108032 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/ChangeDataType.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/ChangeDataType.java @@ -13,14 +13,12 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; -/** - * 复制指定输入物品的数据,并将其粘贴到另一个数据组件类型下。 - */ +/// 复制指定输入物品的数据,并将其粘贴到另一个数据组件类型下。 public record ChangeDataType(RecipeInputSlot input, DataComponentType orig, ICustomDataComponent dest) implements IResultModifier { public static final MapCodec> CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( - ResourceLocation.CODEC + Identifier.CODEC .fieldOf("orig") .forGetter(ChangeDataType::origId), ICustomDataComponent.CODEC @@ -30,7 +28,7 @@ public record ChangeDataType(RecipeInputSlot input, DataComponentType orig .forGetter(ChangeDataType::input) ).apply(ins, ChangeDataType::new)); public static final StreamCodec> STREAM_CODEC = StreamCodec.composite( - ResourceLocation.STREAM_CODEC, + Identifier.STREAM_CODEC, ChangeDataType::origId, ICustomDataComponent.STREAM_CODEC, ChangeDataType::dest, @@ -39,10 +37,10 @@ public record ChangeDataType(RecipeInputSlot input, DataComponentType orig ChangeDataType::new ); - public ChangeDataType(ResourceLocation origId, ICustomDataComponent dest, RecipeInputSlot slot) { + public ChangeDataType(Identifier origId, ICustomDataComponent dest, RecipeInputSlot slot) { this( slot, - Util.cast(BuiltInRegistries.DATA_COMPONENT_TYPE.get(origId)), + Util.cast(BuiltInRegistries.DATA_COMPONENT_TYPE.getValue(origId)), dest ); } @@ -71,7 +69,7 @@ public Type type() { return ModResultModifierTypes.CHANGE_DATA_TYPE.get(); } - private ResourceLocation origId() { + private Identifier origId() { return BuiltInRegistries.DATA_COMPONENT_TYPE.getKey(this.orig); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/CopyData.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/CopyData.java index ccb58e60d0..e34b577cb2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/CopyData.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/CopyData.java @@ -6,24 +6,17 @@ import dev.dubhe.anvilcraft.api.recipe.data.ICustomDataComponent; import dev.dubhe.anvilcraft.api.recipe.data.NormalDataComponent; import dev.dubhe.anvilcraft.api.recipe.result.ResultContext; -import dev.dubhe.anvilcraft.api.recipe.slot.RecipeInputSlot; import dev.dubhe.anvilcraft.init.recipe.ModResultModifierTypes; import net.minecraft.core.component.DataComponentType; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.world.item.ItemStack; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -/** - * 复制指定输入物品的数据。 - * - * @param types 包含指定的输入物品和将要复制的数据组件类型的自定义数据组件。 - */ +/// 复制指定输入物品的数据。 +/// +/// @param types 包含指定的输入物品和将要复制的数据组件类型的自定义数据组件。 public record CopyData(List> types) implements IResultModifier { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( ICustomDataComponent.CODEC.listOf().fieldOf("types").forGetter(CopyData::types) @@ -43,9 +36,8 @@ public static Builder copyData(ICustomDataComponent... types) { @Override public void modify(ResultContext ctx) { - Map cache = new HashMap<>(); for (ICustomDataComponent type : this.types) { - CopyData.wrapModify(ctx, type, cache); + CopyData.wrappedMake(ctx, type); } } @@ -54,20 +46,8 @@ public Type type() { return ModResultModifierTypes.COPY_DATA.get(); } - private static void wrapModify( - ResultContext ctx, ICustomDataComponent type, Map cache - ) { - var required = type.getRequired(); - List data = new ArrayList<>(); - for (var entry : required) { - ItemStack source = cache.computeIfAbsent(entry.slot(), slot -> IResultModifier.getInput(ctx, slot)); - Object value = source.get(entry.component()); - if (value == null && !entry.isNullable()) throw new IllegalArgumentException( - "The value of type %s cannot be null in the %s.".formatted(entry.component(), entry.slot().getSerializedName()) - ); - data.add(value); - } - type.applyToStack(ctx.getResult(), type.make(data)); + private static void wrappedMake(ResultContext ctx, ICustomDataComponent type) { + type.applyToStack(ctx.getResult(), type.make(ctx)); } public static class Type implements IResultModifier.Type { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/IResultModifier.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/IResultModifier.java index a22c817cf7..cd7699b22a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/IResultModifier.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/IResultModifier.java @@ -4,17 +4,18 @@ import dev.anvilcraft.lib.v2.util.ISerializer; import dev.dubhe.anvilcraft.api.recipe.result.ResultContext; import dev.dubhe.anvilcraft.api.recipe.slot.RecipeInputSlot; -import dev.dubhe.anvilcraft.init.ModRegistries; +import dev.dubhe.anvilcraft.init.registry.ModRegistries; +import dev.dubhe.anvilcraft.init.registry.ModRegistryKeys; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; public interface IResultModifier { - Codec CODEC = Codec.lazyInitialized(() -> ModRegistries.MODIFIER_TYPE_REGISTRY + Codec CODEC = Codec.lazyInitialized(() -> ModRegistries.MODIFIER_TYPE .byNameCodec().dispatch(IResultModifier::type, Type::codec)); StreamCodec STREAM_CODEC = StreamCodec.recursive( - streamCodec -> ByteBufCodecs.registry(ModRegistries.MODIFIER_KEY) + streamCodec -> ByteBufCodecs.registry(ModRegistryKeys.MODIFIER) .dispatch(IResultModifier::type, Type::streamCodec)); void modify(ResultContext ctx); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/MergeData.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/MergeData.java index 403c828736..4b9b599564 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/MergeData.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/MergeData.java @@ -6,24 +6,17 @@ import dev.dubhe.anvilcraft.api.recipe.data.ICustomDataComponent; import dev.dubhe.anvilcraft.api.recipe.data.NormalDataComponent; import dev.dubhe.anvilcraft.api.recipe.result.ResultContext; -import dev.dubhe.anvilcraft.api.recipe.slot.RecipeInputSlot; import dev.dubhe.anvilcraft.init.recipe.ModResultModifierTypes; import net.minecraft.core.component.DataComponentType; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.world.item.ItemStack; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -/** - * 复制并合并指定输入物品的数据。 - * - * @param types 包含指定的输入物品和将要复制的数据组件类型的自定义数据组件。 - */ +/// 复制并合并指定输入物品的数据。 +/// +/// @param types 包含指定的输入物品和将要复制的数据组件类型的自定义数据组件。 public record MergeData(List> types) implements IResultModifier { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( ICustomDataComponent.CODEC.listOf() @@ -46,9 +39,8 @@ public static Builder mergeData(ICustomDataComponent... types) { @Override public void modify(ResultContext ctx) { - Map cache = new HashMap<>(); for (ICustomDataComponent type : this.types) { - MergeData.wrapModify(ctx, type, cache); + MergeData.wrappedMake(ctx, type); } } @@ -57,19 +49,8 @@ public Type type() { return ModResultModifierTypes.MERGE_DATA.get(); } - private static void wrapModify( - ResultContext ctx, ICustomDataComponent type, Map cache - ) { - var required = type.getRequired(); - List data = new ArrayList<>(); - for (var entry : required) { - ItemStack source = cache.computeIfAbsent(entry.slot(), slot -> IResultModifier.getInput(ctx, slot)); - Object value = source.get(entry.component()); - if (value == null && !entry.isNullable()) throw new IllegalArgumentException( - "The value of type %s cannot be null in the %s.".formatted(entry.component(), entry.slot().getSerializedName())); - data.add(value); - } - T newData = type.make(data); + private static void wrappedMake(ResultContext ctx, ICustomDataComponent type) { + T newData = type.make(ctx); T oldData = ctx.getResult().get(type.getDataComponentType()); if (oldData != null && newData != null) { newData = type.merge(oldData, newData); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/RemoveAttribute.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/RemoveAttribute.java index 7ab39e327e..61b56d66b1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/RemoveAttribute.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/RemoveAttribute.java @@ -9,25 +9,23 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.component.ItemAttributeModifiers; import java.util.List; -/** - * 删除指定输入物品的数据。 - * - * @param attrs 包含指定的输入物品和将要删除的数据组件类型。 - */ -public record RemoveAttribute(List attrs) implements IResultModifier { +/// 删除指定输入物品的数据。 +/// +/// @param attrs 包含指定的输入物品和将要删除的数据组件类型。 +public record RemoveAttribute(List attrs) implements IResultModifier { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( - ResourceLocation.CODEC + Identifier.CODEC .listOf() .fieldOf("attrs") .forGetter(RemoveAttribute::attrs) ).apply(ins, RemoveAttribute::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ResourceLocation.STREAM_CODEC.apply(ByteBufCodecs.list()), + Identifier.STREAM_CODEC.apply(ByteBufCodecs.list()), RemoveAttribute::attrs, RemoveAttribute::new ); @@ -36,7 +34,7 @@ public static Builder builder() { return new Builder(); } - public static Builder removeAttr(ResourceLocation... attrs) { + public static Builder removeAttr(Identifier... attrs) { return new Builder().withAttrs(attrs); } @@ -67,21 +65,22 @@ public StreamCodec streamCodec() { } public static class Builder { - private final ImmutableList.Builder attrs = ImmutableList.builder(); + private final ImmutableList.Builder attrs = ImmutableList.builder(); - public Builder withAttr(ResourceLocation attr) { + @SuppressWarnings("UnusedReturnValue") + public Builder withAttr(Identifier attr) { this.attrs.add(attr); return this; } - public Builder withAttrs(ResourceLocation... attrs) { - for (ResourceLocation attr : attrs) { + public Builder withAttrs(Identifier... attrs) { + for (Identifier attr : attrs) { this.withAttr(attr); } return this; } - public Builder withAttrs(List attrs) { + public Builder withAttrs(List attrs) { this.attrs.addAll(attrs); return this; } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/RemoveData.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/RemoveData.java index 8e4e9d10d1..44aa9b67c9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/RemoveData.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/RemoveData.java @@ -12,11 +12,9 @@ import java.util.List; -/** - * 删除指定输入物品的数据。 - * - * @param types 包含指定的输入物品和将要删除的数据组件类型。 - */ +/// 删除指定输入物品的数据。 +/// +/// @param types 包含指定的输入物品和将要删除的数据组件类型。 public record RemoveData(List> types) implements IResultModifier { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( DataComponentType.CODEC @@ -65,6 +63,7 @@ public StreamCodec streamCodec() { public static class Builder { private final ImmutableList.Builder> types = ImmutableList.builder(); + @SuppressWarnings("UnusedReturnValue") public Builder withType(DataComponentType type) { this.types.add(type); return this; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/package-info.java index 8e405f1bf9..cfeda52efe 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/modifier/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.recipe.result.modifier; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/package-info.java index 57195a4b86..169f2c045c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/result/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.recipe.result; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/recipe/slot/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/recipe/slot/package-info.java index ec3b52d2b6..b046f79c13 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/recipe/slot/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/recipe/slot/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.recipe.slot; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBERenderingPipeline.java b/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBERenderingPipeline.java deleted file mode 100644 index 9c93e3c165..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBERenderingPipeline.java +++ /dev/null @@ -1,82 +0,0 @@ -package dev.dubhe.anvilcraft.api.rendering; - -import lombok.Getter; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.block.entity.BlockEntity; -import org.joml.Matrix4f; - -import java.util.ArrayDeque; -import java.util.HashMap; -import java.util.Map; -import java.util.Queue; - -public class CacheableBERenderingPipeline { - @Getter - private static CacheableBERenderingPipeline instance; - private final ClientLevel level; - private final Queue pendingCompiles = new ArrayDeque<>(); - private final Queue pendingUploads = new ArrayDeque<>(); - private final Map renderRegions = new HashMap<>(); - private boolean valid = true; - - public RenderRegion getRenderRegion(ChunkPos chunkPos) { - if (renderRegions.containsKey(chunkPos)) { - return renderRegions.get(chunkPos); - } - RenderRegion renderRegion = new RenderRegion(chunkPos, this); - renderRegions.put(chunkPos, renderRegion); - return renderRegion; - } - - public CacheableBERenderingPipeline(ClientLevel level) { - this.level = level; - } - - public void runTasks() { - while (!pendingCompiles.isEmpty() && valid) { - pendingCompiles.poll().run(); - } - while (!pendingUploads.isEmpty() && valid) { - pendingUploads.poll().run(); - } - } - - public static void updateLevel(ClientLevel level) { - if (instance != null) { - instance.releaseBuffers(); - } - instance = new CacheableBERenderingPipeline(level); - } - - public void blockRemoved(BlockEntity be) { - ChunkPos chunkPos = new ChunkPos(be.getBlockPos()); - getRenderRegion(chunkPos).blockRemoved(be); - } - - public void update(BlockEntity be) { - ChunkPos chunkPos = new ChunkPos(be.getBlockPos()); - getRenderRegion(chunkPos).update(be); - } - - public void submitUploadTask(Runnable task) { - pendingUploads.add(task); - } - - public void submitCompileTask(Runnable task) { - pendingCompiles.add(task); - } - - public void releaseBuffers() { - renderRegions.values().forEach(RenderRegion::releaseBuffers); - valid = false; - } - - public void renderBloomed(Matrix4f frustumMatrix, Matrix4f projectionMatrix) { - renderRegions.values().forEach(it -> it.renderBloomed(frustumMatrix, projectionMatrix)); - } - - public void render(Matrix4f frustumMatrix, Matrix4f projectionMatrix) { - renderRegions.values().forEach(it -> it.render(frustumMatrix, projectionMatrix)); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBlockEntityRenderer.java b/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBlockEntityRenderer.java deleted file mode 100644 index 0bc1c0e225..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBlockEntityRenderer.java +++ /dev/null @@ -1,13 +0,0 @@ -package dev.dubhe.anvilcraft.api.rendering; - -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.world.level.block.entity.BlockEntity; - -public interface CacheableBlockEntityRenderer { - void render( - T cacheableBlockEntity, - MultiBufferSource.BufferSource buffer, - PoseStack poseStack - ); -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBlockEntityRenderers.java b/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBlockEntityRenderers.java deleted file mode 100644 index c0fc129ea4..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/rendering/CacheableBlockEntityRenderers.java +++ /dev/null @@ -1,30 +0,0 @@ -package dev.dubhe.anvilcraft.api.rendering; - -import dev.dubhe.anvilcraft.client.renderer.laser.LaserRenderer; -import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; - -import java.util.HashMap; -import java.util.Map; - -public class CacheableBlockEntityRenderers { - private static final Map, CacheableBlockEntityRenderer> RENDERERS = new HashMap<>(); - - public static void register( - BlockEntityType type, - CacheableBlockEntityRenderer renderProvider - ) { - RENDERERS.put(type, renderProvider); - } - - public static CacheableBlockEntityRenderer get(BlockEntityType type) { - return RENDERERS.get(type); - } - - static { - LaserRenderer laserRenderer = new LaserRenderer(); - RENDERERS.put(ModBlockEntities.RUBY_LASER.get(), laserRenderer); - RENDERERS.put(ModBlockEntities.RUBY_PRISM.get(), laserRenderer); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/rendering/CompileResult.java b/src/main/java/dev/dubhe/anvilcraft/api/rendering/CompileResult.java deleted file mode 100644 index 025cb852d2..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/rendering/CompileResult.java +++ /dev/null @@ -1,60 +0,0 @@ -package dev.dubhe.anvilcraft.api.rendering; - -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.VertexBuffer; -import com.mojang.blaze3d.vertex.VertexFormat; -import lombok.EqualsAndHashCode; -import net.minecraft.client.renderer.RenderType; -import org.lwjgl.opengl.GL15; -import org.lwjgl.opengl.GL15C; -import org.lwjgl.system.MemoryUtil; - -@EqualsAndHashCode -final class CompileResult { - private static final MemoryUtil.MemoryAllocator ALLOCATOR = MemoryUtil.getAllocator(false); - private final RenderType renderType; - private final int vertexCount; - private final int vertexSize; - private final long vertexBufferPtr; - final int indexCount; - private boolean freed = false; - - CompileResult( - RenderType renderType, - int vertexCount, - int vertexSize, - long vertexBufferPtr, - int indexCount - ) { - this.renderType = renderType; - this.vertexCount = vertexCount; - this.vertexSize = vertexSize; - this.vertexBufferPtr = vertexBufferPtr; - this.indexCount = indexCount; - } - - void upload(VertexBuffer vertexBuffer) { - if (freed) return; - final VertexFormat.Mode mode = renderType.mode; - vertexBuffer.bind(); - if (vertexBuffer.format != null) { - vertexBuffer.format.clearBufferState(); - } - GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertexBuffer.vertexBufferId); - renderType.format.setupBufferState(); - vertexBuffer.format = renderType.format; - GL15C.nglBufferData(GL15.GL_ARRAY_BUFFER, (long) vertexCount * vertexSize, vertexBufferPtr, GL15.GL_STATIC_DRAW); - RenderSystem.AutoStorageIndexBuffer indexBuffer = RenderSystem.getSequentialBuffer(mode); - if (indexBuffer != vertexBuffer.sequentialIndices || !indexBuffer.hasStorage(indexCount)) { - indexBuffer.bind(indexCount); - } - vertexBuffer.sequentialIndices = indexBuffer; - VertexBuffer.unbind(); - } - - void free() { - if (freed) return; - ALLOCATOR.free(vertexBufferPtr); - freed = true; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/rendering/FullyBufferedBufferSource.java b/src/main/java/dev/dubhe/anvilcraft/api/rendering/FullyBufferedBufferSource.java deleted file mode 100644 index f221bb0024..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/rendering/FullyBufferedBufferSource.java +++ /dev/null @@ -1,92 +0,0 @@ -package dev.dubhe.anvilcraft.api.rendering; - -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.ByteBufferBuilder; -import com.mojang.blaze3d.vertex.MeshData; -import com.mojang.blaze3d.vertex.VertexBuffer; -import com.mojang.blaze3d.vertex.VertexConsumer; -import it.unimi.dsi.fastutil.objects.Reference2IntMap; -import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import org.lwjgl.system.MemoryUtil; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Consumer; -import java.util.function.Function; - -public class FullyBufferedBufferSource extends MultiBufferSource.BufferSource implements AutoCloseable { - private static final MemoryUtil.MemoryAllocator ALLOCATOR = MemoryUtil.getAllocator(false); - private final Map byteBuffers = new HashMap<>(); - private final Map bufferBuilders = new HashMap<>(); - final Reference2IntMap indexCountMap = new Reference2IntOpenHashMap<>(); - - public FullyBufferedBufferSource() { - super(null, null); - } - - private ByteBufferBuilder getByteBuffer(RenderType renderType) { - return byteBuffers.computeIfAbsent(renderType, it -> new ByteBufferBuilder(786432)); - } - - @Override - public VertexConsumer getBuffer(RenderType renderType) { - return bufferBuilders.computeIfAbsent( - renderType, - it -> new BufferBuilder(getByteBuffer(it), it.mode, it.format) - ); - } - - public boolean isEmpty() { - return !bufferBuilders.isEmpty() && bufferBuilders.values().stream().noneMatch(it -> it.vertices > 0); - } - - @Override - public void endBatch(RenderType renderType) { - } - - public void upload( - Function vertexBufferGetter, - Consumer runner - ) { - for (RenderType renderType : bufferBuilders.keySet()) { - runner.accept(() -> { - BufferBuilder bufferBuilder = bufferBuilders.get(renderType); - ByteBufferBuilder byteBuffer = byteBuffers.get(renderType); - long ptr = byteBuffer.pointer; - int compiledVertices = bufferBuilder.vertices * renderType.format.getVertexSize(); - if (compiledVertices >= 0) { - long allocated = ALLOCATOR.malloc(compiledVertices); - MemoryUtil.memCopy(ptr, allocated, compiledVertices); - MeshData mesh = bufferBuilder.build(); - if (mesh != null) { - mesh.close(); - } - CompileResult compileResult = new CompileResult( - renderType, - bufferBuilder.vertices, - renderType.format.getVertexSize(), - allocated, - renderType.mode.indexCount(bufferBuilder.vertices) - ); - indexCountMap.put(renderType, renderType.mode.indexCount(bufferBuilder.vertices)); - compileResult.upload(vertexBufferGetter.apply(renderType)); - compileResult.free(); - } - byteBuffer.close(); - bufferBuilders.remove(renderType); - byteBuffers.remove(renderType); - }); - } - } - - public void close(RenderType renderType) { - ByteBufferBuilder builder = byteBuffers.get(renderType); - builder.close(); - } - - public void close() { - byteBuffers.keySet().forEach(this::close); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/rendering/RenderRegion.java b/src/main/java/dev/dubhe/anvilcraft/api/rendering/RenderRegion.java deleted file mode 100644 index 38930fdbbe..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/rendering/RenderRegion.java +++ /dev/null @@ -1,205 +0,0 @@ -package dev.dubhe.anvilcraft.api.rendering; - -import com.mojang.blaze3d.platform.Window; -import com.mojang.blaze3d.shaders.Uniform; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexBuffer; -import com.mojang.blaze3d.vertex.VertexFormat; -import dev.dubhe.anvilcraft.client.init.ModRenderTypes; -import dev.dubhe.anvilcraft.client.renderer.RenderState; -import it.unimi.dsi.fastutil.objects.Reference2IntMap; -import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.ShaderInstance; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL15; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class RenderRegion { - public static final RenderType[] FORCED_ORDER = { - RenderType.SOLID, - ModRenderTypes.LASER, - RenderType.TRANSLUCENT, - }; - public static final List BLOOM_RENDERTYPES = List.of( - ModRenderTypes.LASER - ); - private final ChunkPos chunkPos; - private final Map buffers = new HashMap<>(); - private Reference2IntMap indexCountMap = new Reference2IntOpenHashMap<>(); - private final Set blockEntityList = new HashSet<>(); - private final CacheableBERenderingPipeline pipeline; - private final Minecraft minecraft = Minecraft.getInstance(); - private RebuildTask lastRebuildTask; - - private boolean isEmpty = true; - - public RenderRegion(ChunkPos chunkPos, CacheableBERenderingPipeline pipeline) { - this.chunkPos = chunkPos; - this.pipeline = pipeline; - } - - public void update(BlockEntity be) { - if (lastRebuildTask != null) { - lastRebuildTask.cancel(); - } - blockEntityList.removeIf(BlockEntity::isRemoved); - if (be.isRemoved()) { - blockEntityList.remove(be); - pipeline.submitCompileTask(new RebuildTask()); - return; - } - blockEntityList.add(be); - pipeline.submitCompileTask(new RebuildTask()); - } - - public void blockRemoved(BlockEntity be) { - if (lastRebuildTask != null) { - lastRebuildTask.cancel(); - } - blockEntityList.remove(be); - blockEntityList.removeIf(BlockEntity::isRemoved); - pipeline.submitCompileTask(new RebuildTask()); - } - - public void renderBloomed(Matrix4f frustumMatrix, Matrix4f projectionMatrix) { - renderInternal(frustumMatrix, projectionMatrix, BLOOM_RENDERTYPES, RenderState::bloomStage); - } - - public void render(Matrix4f frustumMatrix, Matrix4f projectionMatrix) { - renderInternal(frustumMatrix, projectionMatrix, buffers.keySet(), RenderState::levelStage); - } - - public VertexBuffer getBuffer(RenderType renderType) { - if (buffers.containsKey(renderType)) { - return buffers.get(renderType); - } - VertexBuffer vb = new VertexBuffer(VertexBuffer.Usage.STATIC); - buffers.put(renderType, vb); - return vb; - } - - private void renderInternal( - Matrix4f frustumMatrix, - Matrix4f projectionMatrix, - Collection renderTypes, - Runnable stateSwitcher - ) { - if (isEmpty) return; - RenderSystem.enableBlend(); - Window window = Minecraft.getInstance().getWindow(); - Vec3 cameraPosition = minecraft.gameRenderer.getMainCamera().getPosition(); - int renderDistance = Minecraft.getInstance().options.getEffectiveRenderDistance() * 16; - if (cameraPosition.distanceTo(new Vec3(chunkPos.x * 16, cameraPosition.y, chunkPos.z * 16)) > renderDistance) { - return; - } - List allRenderTypes = new ArrayList<>(renderTypes); - for (int i = FORCED_ORDER.length - 1; i >= 0; i--) { - RenderType type = FORCED_ORDER[i]; - if (allRenderTypes.contains(type)) { - allRenderTypes.remove(type); - allRenderTypes.addFirst(type); - } - } - for (RenderType renderType : allRenderTypes) { - VertexBuffer vb = buffers.get(renderType); - if (vb == null) continue; - stateSwitcher.run(); - renderLayer(renderType, vb, frustumMatrix, projectionMatrix, cameraPosition, window); - } - } - - public void releaseBuffers() { - buffers.values().forEach(VertexBuffer::close); - } - - private void renderLayer( - RenderType renderType, - VertexBuffer vertexBuffer, - Matrix4f frustumMatrix, - Matrix4f projectionMatrix, - Vec3 cameraPosition, - Window window - ) { - int indexCount = indexCountMap.getInt(renderType); - if (indexCount <= 0) return; - renderType.setupRenderState(); - ShaderInstance shader = RenderSystem.getShader(); - shader.setDefaultUniforms(VertexFormat.Mode.QUADS, frustumMatrix, projectionMatrix, window); - shader.apply(); - Uniform uniform = shader.CHUNK_OFFSET; - if (uniform != null) { - uniform.set( - (float) -cameraPosition.x, - (float) -cameraPosition.y, - (float) -cameraPosition.z - ); - uniform.upload(); - } - vertexBuffer.bind(); - GL11.glDrawElements(GL15.GL_TRIANGLES, indexCount, vertexBuffer.sequentialIndices.type().asGLType, 0L); - VertexBuffer.unbind(); - if (uniform != null) { - uniform.set(0.0F, 0.0F, 0.0F); - } - renderType.clearRenderState(); - } - - private class RebuildTask implements Runnable { - private boolean cancelled = false; - - @Override - public void run() { - lastRebuildTask = this; - PoseStack poseStack = new PoseStack(); - RenderRegion.this.isEmpty = true; - FullyBufferedBufferSource bufferSource = new FullyBufferedBufferSource(); - for (BlockEntity be : blockEntityList) { - if (cancelled) { - bufferSource.close(); - return; - } - CacheableBlockEntityRenderer renderer = CacheableBlockEntityRenderers.get(be.getType()); - if (renderer == null) continue; - poseStack.pushPose(); - BlockPos pos = be.getBlockPos(); - poseStack.translate( - pos.getX(), - pos.getY(), - pos.getZ() - ); - renderer.render( - be, - bufferSource, - poseStack - ); - poseStack.popPose(); - } - RenderRegion.this.isEmpty = bufferSource.isEmpty(); - bufferSource.upload( - RenderRegion.this::getBuffer, - pipeline::submitUploadTask - ); - RenderRegion.this.indexCountMap = bufferSource.indexCountMap; - lastRebuildTask = null; - } - - void cancel() { - cancelled = true; - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/rendering/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/rendering/package-info.java deleted file mode 100644 index 667d65de2b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/rendering/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.api.rendering; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/sliding/SlidingBlockSection.java b/src/main/java/dev/dubhe/anvilcraft/api/sliding/SlidingBlockSection.java index 77723b66d5..6f977d8c17 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/sliding/SlidingBlockSection.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/sliding/SlidingBlockSection.java @@ -10,6 +10,7 @@ import dev.dubhe.anvilcraft.api.heat.HeatRecorder; import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.util.AabbUtil; +import dev.dubhe.anvilcraft.util.PacketDistributingHelper; import io.netty.buffer.ByteBuf; import it.unimi.dsi.fastutil.ints.IntIntPair; import net.minecraft.core.BlockPos; @@ -19,7 +20,7 @@ import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; -import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.ProblemReporter; import net.minecraft.world.entity.Entity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.DirectionalPlaceContext; @@ -28,6 +29,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.redstone.Orientation; +import net.minecraft.world.level.storage.TagValueInput; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.apache.commons.lang3.tuple.Triple; @@ -124,7 +127,7 @@ private void calculateSide(Direction side) { } public void setBlock(Level level, BlockPos center, Entity entity) { - if (level.isClientSide) return; + if (level.isClientSide()) return; for (SlidingBlockInfo info : this.blocks) { BlockPos pos = info.getPos(center); BlockState state = info.state(); @@ -154,14 +157,13 @@ public void setBlock(Level level, BlockPos center, Entity entity) { state = Block.updateFromNeighbourShapes(state, level, pos); if (!level.setBlock(pos, state, Block.UPDATE_ALL)) continue; - Optional.ofNullable(level.getBlockEntity(pos)) - .ifPresent(entity1 -> entity1.loadCustomOnly(info.entityData(), level.registryAccess())); - level.neighborChanged(pos, state.getBlock(), pos); - - ((ServerLevel) level) - .getChunkSource() - .chunkMap - .broadcast(entity, new ClientboundBlockUpdatePacket(pos, level.getBlockState(pos))); + Optional.ofNullable(level.getBlockEntity(pos)).ifPresent(entity1 -> entity1.loadCustomOnly( + TagValueInput.create(ProblemReporter.DISCARDING, level.registryAccess(), info.entityData()) + )); + level.neighborChanged(pos, state.getBlock(), Orientation.random(level.getRandom())); + + + PacketDistributingHelper.sendToPlayersTrackingEntity(entity, new ClientboundBlockUpdatePacket(pos, level.getBlockState(pos))); } entity.discard(); } @@ -172,7 +174,7 @@ public String toString() { } public List blocks() { - return blocks; + return this.blocks; } @Override @@ -184,6 +186,6 @@ public boolean equals(Object obj) { @Override public int hashCode() { - return Objects.hash(blocks); + return Objects.hash(this.blocks); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/sliding/SlidingBlockStructureResolver.java b/src/main/java/dev/dubhe/anvilcraft/api/sliding/SlidingBlockStructureResolver.java index cec1eb06e5..6fc4dd982f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/sliding/SlidingBlockStructureResolver.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/sliding/SlidingBlockStructureResolver.java @@ -11,9 +11,7 @@ import java.util.List; -/** - * No-pistonPos-Check PistonStructureResolver - */ +/// No-pistonPos-Check PistonStructureResolver public class SlidingBlockStructureResolver { public static int MAX_PUSH_DEPTH = 12; private final Level level; @@ -21,14 +19,10 @@ public class SlidingBlockStructureResolver { private final BlockPos startPos; @Getter private final Direction pushDirection; - /** - * All block positions to be moved by the piston - */ + /// All block positions to be moved by the piston @Getter private final List toPush = Lists.newArrayList(); - /** - * All blocks to be destroyed by the piston - */ + /// All blocks to be destroyed by the piston @Getter private final List toDestroy = Lists.newArrayList(); private final Direction pistonDirection; @@ -45,6 +39,7 @@ public SlidingBlockStructureResolver(Level level, BlockPos startPos, Direction p } } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean resolve() { this.toPush.clear(); this.toDestroy.clear(); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/sliding/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/sliding/package-info.java index d7b6de1da8..03d3af3e98 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/sliding/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/sliding/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.sliding; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/sound/ISoundEventListener.java b/src/main/java/dev/dubhe/anvilcraft/api/sound/ISoundEventListener.java index a99c8d021b..ec01566535 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/sound/ISoundEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/sound/ISoundEventListener.java @@ -1,11 +1,9 @@ package dev.dubhe.anvilcraft.api.sound; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.phys.Vec3; -/** - * 声音事件监听器 - */ +/// 声音事件监听器 public interface ISoundEventListener { - boolean shouldMute(ResourceLocation sound, Vec3 pos); + boolean shouldMute(Identifier sound, Vec3 pos); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/sound/SoundHelper.java b/src/main/java/dev/dubhe/anvilcraft/api/sound/SoundHelper.java index b843430668..4d36ae827f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/sound/SoundHelper.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/sound/SoundHelper.java @@ -1,16 +1,16 @@ package dev.dubhe.anvilcraft.api.sound; import lombok.Getter; +import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import org.jspecify.annotations.Nullable; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; -import javax.annotation.Nullable; @Getter public class SoundHelper { @@ -18,7 +18,7 @@ public class SoundHelper { private final Map, List> eventListeners = new HashMap<>(); - public boolean shouldMute(@Nullable Level level, ResourceLocation sound, Vec3 pos) { + public boolean shouldMute(@Nullable Level level, Identifier sound, Vec3 pos) { if (level == null) return false; return this.eventListeners.computeIfAbsent(level.dimension(), k -> new CopyOnWriteArrayList<>()) .stream() diff --git a/src/main/java/dev/dubhe/anvilcraft/api/sound/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/sound/package-info.java index 928564f770..9d4cd4891d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/sound/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/sound/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.sound; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsEntityIdFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsEntityIdFilter.java deleted file mode 100644 index d150b01995..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsEntityIdFilter.java +++ /dev/null @@ -1,30 +0,0 @@ -package dev.dubhe.anvilcraft.api.taslatower; - -import lombok.Getter; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.LivingEntity; - -public class IsEntityIdFilter extends TeslaFilter { - @Getter - private final String id = "IsEntityIdFilter"; - - @Override - public boolean match(LivingEntity entity, String arg) { - return entity.getType().getDescriptionId().equals(arg); - } - - @Override - public boolean needArg() { - return true; - } - - @Override - public Component title() { - return Component.translatable("screen.anvilcraft.tesla_tower.filter.is_entity_id"); - } - - @Override - public String tooltip(String arg) { - return arg; - } -} \ No newline at end of file diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPlayerIdFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPlayerIdFilter.java deleted file mode 100644 index 37aa5dbb37..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPlayerIdFilter.java +++ /dev/null @@ -1,31 +0,0 @@ -package dev.dubhe.anvilcraft.api.taslatower; - -import lombok.Getter; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; - -public class IsPlayerIdFilter extends TeslaFilter { - @Getter - private final String id = "IsPlayerIdFilter"; - - @Override - public boolean match(LivingEntity entity, String arg) { - return entity instanceof Player player && player.getName().getString().equals(arg); - } - - @Override - public boolean needArg() { - return true; - } - - @Override - public Component title() { - return Component.translatable("screen.anvilcraft.tesla_tower.filter.is_player_id"); - } - - @Override - public String tooltip(String arg) { - return arg; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/taslatower/package-info.java deleted file mode 100644 index d966050196..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.api.taslatower; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/HasCustomNameFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/HasCustomNameFilter.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/api/taslatower/HasCustomNameFilter.java rename to src/main/java/dev/dubhe/anvilcraft/api/teslatower/HasCustomNameFilter.java index 1cc4abce5c..3db0b702cd 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/HasCustomNameFilter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/HasCustomNameFilter.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.api.taslatower; +package dev.dubhe.anvilcraft.api.teslatower; import lombok.Getter; import net.minecraft.network.chat.Component; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsBabyFriendlyFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsBabyFriendlyFilter.java similarity index 78% rename from src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsBabyFriendlyFilter.java rename to src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsBabyFriendlyFilter.java index 2ea487dc94..9c152a4fcd 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsBabyFriendlyFilter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsBabyFriendlyFilter.java @@ -1,9 +1,9 @@ -package dev.dubhe.anvilcraft.api.taslatower; +package dev.dubhe.anvilcraft.api.teslatower; import lombok.Getter; import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.animal.Animal; public class IsBabyFriendlyFilter extends TeslaFilter { @Getter @@ -11,7 +11,7 @@ public class IsBabyFriendlyFilter extends TeslaFilter { @Override public boolean match(LivingEntity entity, String arg) { - return entity.getType().getCategory().isFriendly() && entity instanceof Animal animal && animal.isBaby(); + return entity.getType().getCategory().isFriendly() && entity instanceof AgeableMob ageable && ageable.isBaby(); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsEntityIdFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsEntityIdFilter.java new file mode 100644 index 0000000000..32abe8cebd --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsEntityIdFilter.java @@ -0,0 +1,48 @@ +package dev.dubhe.anvilcraft.api.teslatower; + +import lombok.Getter; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; + +public class IsEntityIdFilter extends TeslaFilter { + @Getter + private final String id = "IsEntityIdFilter"; + + @Override + public boolean match(LivingEntity entity, String arg) { + return BuiltInRegistries.ENTITY_TYPE.getKey(entity.getType()).toString().equals(arg); + } + + @Override + public boolean needArg() { + return true; + } + + @Override + public Component title() { + return Component.translatable("screen.anvilcraft.tesla_tower.filter.is_entity_id"); + } + + @Override + public Component getTitle(String arg) { + int colonIndex = arg.indexOf(':'); + if (colonIndex < 0 || colonIndex >= arg.length() - 1) { + return Component.literal(arg); + } + Identifier identifier = Identifier.fromNamespaceAndPath( + arg.substring(0, colonIndex), + arg.substring(colonIndex + 1) + ); + return BuiltInRegistries.ENTITY_TYPE.get(identifier) + .map(ref -> Component.translatable(ref.value().getDescriptionId())) + .orElse(Component.literal(arg)); + } + + @Override + public String tooltip(String arg) { + return Component.translatable("screen.anvilcraft.tesla_tower.filter.is_entity_id").getString(); + } +} \ No newline at end of file diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsFriendlyFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsFriendlyFilter.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsFriendlyFilter.java rename to src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsFriendlyFilter.java index 5d17a1c40f..0953b65a96 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsFriendlyFilter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsFriendlyFilter.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.api.taslatower; +package dev.dubhe.anvilcraft.api.teslatower; import lombok.Getter; import net.minecraft.network.chat.Component; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsHostileFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsHostileFilter.java new file mode 100644 index 0000000000..eff9d257b1 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsHostileFilter.java @@ -0,0 +1,21 @@ +package dev.dubhe.anvilcraft.api.teslatower; + +import lombok.Getter; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.MobCategory; + +public class IsHostileFilter extends TeslaFilter { + @Getter + private final String id = "IsHostileFilter"; + + @Override + public boolean match(LivingEntity entity, String arg) { + return entity.getType().getCategory() == MobCategory.MONSTER; + } + + @Override + public Component title() { + return Component.translatable("screen.anvilcraft.tesla_tower.filter.is_hostile"); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsNeutralFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsNeutralFilter.java new file mode 100644 index 0000000000..eb8d0c68a2 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsNeutralFilter.java @@ -0,0 +1,21 @@ +package dev.dubhe.anvilcraft.api.teslatower; + +import lombok.Getter; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.NeutralMob; + +public class IsNeutralFilter extends TeslaFilter { + @Getter + private final String id = "IsNeutralFilter"; + + @Override + public boolean match(LivingEntity entity, String arg) { + return entity instanceof NeutralMob; + } + + @Override + public Component title() { + return Component.translatable("screen.anvilcraft.tesla_tower.filter.is_neutral"); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsOnVehicleFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsOnVehicleFilter.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsOnVehicleFilter.java rename to src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsOnVehicleFilter.java index c6ef0a0a4a..bc265ca2d1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsOnVehicleFilter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsOnVehicleFilter.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.api.taslatower; +package dev.dubhe.anvilcraft.api.teslatower; import lombok.Getter; import net.minecraft.network.chat.Component; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPetFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPetFilter.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPetFilter.java rename to src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPetFilter.java index 27fd80ddcf..1631e9704d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPetFilter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPetFilter.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.api.taslatower; +package dev.dubhe.anvilcraft.api.teslatower; import lombok.Getter; import net.minecraft.network.chat.Component; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPlayerFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPlayerFilter.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPlayerFilter.java rename to src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPlayerFilter.java index 882be749f8..e2e010a5a2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/IsPlayerFilter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPlayerFilter.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.api.taslatower; +package dev.dubhe.anvilcraft.api.teslatower; import lombok.Getter; import net.minecraft.network.chat.Component; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPlayerIdFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPlayerIdFilter.java new file mode 100644 index 0000000000..324700217d --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/IsPlayerIdFilter.java @@ -0,0 +1,36 @@ +package dev.dubhe.anvilcraft.api.teslatower; + +import lombok.Getter; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; + +public class IsPlayerIdFilter extends TeslaFilter { + @Getter + private final String id = "IsPlayerIdFilter"; + + @Override + public boolean match(LivingEntity entity, String arg) { + return entity instanceof Player player && player.getName().getString().equals(arg); + } + + @Override + public boolean needArg() { + return true; + } + + @Override + public Component title() { + return Component.translatable("screen.anvilcraft.tesla_tower.filter.is_player_id"); + } + + @Override + public Component getTitle(String arg) { + return Component.literal(arg); + } + + @Override + public String tooltip(String arg) { + return Component.translatable("screen.anvilcraft.tesla_tower.filter.is_player_id").getString(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/TeslaFilter.java b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/TeslaFilter.java similarity index 90% rename from src/main/java/dev/dubhe/anvilcraft/api/taslatower/TeslaFilter.java rename to src/main/java/dev/dubhe/anvilcraft/api/teslatower/TeslaFilter.java index c1d6720ae8..9bd1fa7af4 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/taslatower/TeslaFilter.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/teslatower/TeslaFilter.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.api.taslatower; +package dev.dubhe.anvilcraft.api.teslatower; import io.netty.buffer.ByteBuf; import net.minecraft.network.chat.Component; @@ -54,6 +54,10 @@ public boolean needArg() { public abstract Component title(); + public Component getTitle(String arg) { + return this.title(); + } + public String tooltip(String arg) { return ""; } @@ -65,6 +69,8 @@ public static void init() { register(new IsPetFilter()); register(new IsOnVehicleFilter()); register(new IsFriendlyFilter()); + register(new IsHostileFilter()); + register(new IsNeutralFilter()); register(new IsEntityIdFilter()); register(new IsBabyFriendlyFilter()); register(new HasCustomNameFilter()); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/thought/Thinkable.java b/src/main/java/dev/dubhe/anvilcraft/api/thought/Thinkable.java index a6311788ab..2a50264ca1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/thought/Thinkable.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/thought/Thinkable.java @@ -3,21 +3,16 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.neoforgespi.Environment; +import net.neoforged.fml.loading.FMLLoader; -import java.util.List; +import java.util.function.Consumer; public interface Thinkable { - @OnlyIn(Dist.CLIENT) - default void appendHoverText(List tooltipComponents) { - if (!Environment.get().getDist().isClient()) { - return; - } + default void appendHoverText(Consumer consumer) { + if (!FMLLoader.getCurrent().getDist().isClient()) return; long lastThoughtTime = ThoughtManager.getLastThoughtTime(); if (lastThoughtTime <= 0) { - tooltipComponents.add( + consumer.accept( Component.translatable( "tooltip.anvilcraft.thought", Component.keybind("key.anvilcraft.thought") @@ -29,16 +24,15 @@ default void appendHoverText(List tooltipComponents) { long curTime = minecraft.gui.getGuiTicks(); long deltaTime = curTime - lastThoughtTime; final int maxPlaceholderCount = 20; - final double maxSeconds = ThoughtManager.getMAX_SECONDS(); + final double maxSeconds = ThoughtManager.getMaxSeconds(); int placeholderCount = (int) Math.floor(Math.min(deltaTime, 20 * maxSeconds) / (20 * maxSeconds) * maxPlaceholderCount); int blankCount = maxPlaceholderCount - placeholderCount; StringBuilder builder = new StringBuilder("["); - builder.append("||".repeat(Math.max(0, placeholderCount))); - builder.append(" ".repeat(Math.max(0, blankCount))); - tooltipComponents.add(Component.literal(builder.append("]").toString()).withStyle(ChatFormatting.GRAY)); + builder.repeat("||", Math.max(0, placeholderCount)); + builder.repeat(" ", Math.max(0, blankCount)); + consumer.accept(Component.literal(builder.append("]").toString()).withStyle(ChatFormatting.GRAY)); } - @OnlyIn(Dist.CLIENT) default void onThought() { } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/thought/ThoughtManager.java b/src/main/java/dev/dubhe/anvilcraft/api/thought/ThoughtManager.java index 664d8f226b..5ccbe1499a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/thought/ThoughtManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/thought/ThoughtManager.java @@ -9,9 +9,12 @@ public class ThoughtManager { private static boolean onThought = false; @Getter private static long lastThoughtTime = -1L; - @Getter private static final double MAX_SECONDS = 1.0; + public static double getMaxSeconds() { + return ThoughtManager.MAX_SECONDS; + } + public static void onThought() { boolean checked = ThoughtManager.check(); if (!checked) { @@ -25,7 +28,7 @@ public static void onThought() { private static boolean check() { if (!(Minecraft.getInstance().screen instanceof AbstractContainerScreen screen)) return false; - Slot slot = screen.getSlotUnderMouse(); + Slot slot = screen.getHoveredSlot(); if (slot == null) return false; return slot.hasItem() && slot.getItem().getItem() instanceof Thinkable; } @@ -38,7 +41,7 @@ public static void onEndThought() { public static void onPostThought() { if (!(Minecraft.getInstance().screen instanceof AbstractContainerScreen screen)) return; - Slot slot = screen.getSlotUnderMouse(); + Slot slot = screen.getHoveredSlot(); if (slot == null) return; if (slot.hasItem() && slot.getItem().getItem() instanceof Thinkable thinkable) { thinkable.onThought(); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/thought/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/thought/package-info.java index 1ce84784d2..26b57df5e9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/thought/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/thought/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.thought; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/HudTooltipManager.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/HudTooltipManager.java index 73c5e34991..d3fe67e168 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/HudTooltipManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/HudTooltipManager.java @@ -3,8 +3,10 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import dev.dubhe.anvilcraft.api.tooltip.impl.AffectRangeProviderImpl; +import dev.dubhe.anvilcraft.api.tooltip.impl.BurningHeaterTooltipProvider; import dev.dubhe.anvilcraft.api.tooltip.impl.ChargerTooltipProvider; import dev.dubhe.anvilcraft.api.tooltip.impl.DeflectionRingTooltipProvider; +import dev.dubhe.anvilcraft.api.tooltip.impl.DischargerTooltipProvider; import dev.dubhe.anvilcraft.api.tooltip.impl.HeatCollectorTooltipProvider; import dev.dubhe.anvilcraft.api.tooltip.impl.HeatableBlockTooltipProvider; import dev.dubhe.anvilcraft.api.tooltip.impl.HeliostatsTooltip; @@ -21,7 +23,7 @@ import dev.dubhe.anvilcraft.init.item.ModItems; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; @@ -29,19 +31,17 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; import java.util.Comparator; import java.util.List; -import static dev.dubhe.anvilcraft.api.tooltip.TooltipRenderHelper.renderOutline; -import static dev.dubhe.anvilcraft.api.tooltip.TooltipRenderHelper.renderTooltipWithItemIcon; - public class HudTooltipManager { public static final HudTooltipManager INSTANCE = new HudTooltipManager(); private static final int BACKGROUND_COLOR = 0xCC100010; - private static final int BORDER_COLOR_TOP = 0x505000ff; - private static final int BORDER_COLOR_BOTTOM = 0x5028007f; + private static final int BORDER_COLOR_TOP = 0x505000Ff; + private static final int BORDER_COLOR_BOTTOM = 0x5028007F; private final List blockProviders = new ArrayList<>(); private final List blockEntityProviders = new ArrayList<>(); private final List affectRangeProviders = new ArrayList<>(); @@ -49,6 +49,7 @@ public class HudTooltipManager { static { INSTANCE.registerBlockEntityTooltip(new ChargerTooltipProvider()); + INSTANCE.registerBlockEntityTooltip(new DischargerTooltipProvider()); INSTANCE.registerBlockEntityTooltip(new HeatCollectorTooltipProvider()); INSTANCE.registerBlockEntityTooltip(new PowerComponentTooltipProvider()); INSTANCE.registerAffectRange(new AffectRangeProviderImpl()); @@ -60,31 +61,30 @@ public class HudTooltipManager { INSTANCE.registerBlockTooltip(new InjectedBlockTooltipProvider()); INSTANCE.registerBlockEntityTooltip(new InjectedBlockEntityTooltipProvider()); INSTANCE.registerBlockEntityTooltip(new HeatableBlockTooltipProvider()); + INSTANCE.registerBlockEntityTooltip(new BurningHeaterTooltipProvider()); INSTANCE.registerBlockEntityTooltip(new DeflectionRingTooltipProvider()); INSTANCE.registerBlockEntityTooltip(new PropelPistonTooltipProvider()); } public void registerAffectRange(AffectRangeProviderImpl affectRangeProvider) { - affectRangeProviders.add(affectRangeProvider); + this.affectRangeProviders.add(affectRangeProvider); } public void registerBlockTooltip(ITooltipProvider.BlockTooltipProvider provider) { - blockProviders.add(provider); + this.blockProviders.add(provider); } public void registerBlockEntityTooltip(ITooltipProvider.BlockEntityTooltipProvider provider) { - blockEntityProviders.add(provider); + this.blockEntityProviders.add(provider); } public void registerHandHeldItemTooltip(IHandHeldItemTooltipProvider provider) { - handItemProviders.add(provider); + this.handItemProviders.add(provider); } - /** - * 渲染方块的tooltip - */ + /// 渲染方块的tooltip public void renderTooltip( - GuiGraphics guiGraphics, + GuiGraphicsExtractor graphics, Level level, BlockPos pos, BlockState state, @@ -92,16 +92,15 @@ public void renderTooltip( int screenWidth, int screenHeight ) { - if (state == null) return; final int tooltipPosX = screenWidth / 2 + 10; final int tooltipPosY = screenHeight / 2 + 10; Font font = Minecraft.getInstance().font; - ITooltipProvider.BlockTooltipProvider currentProvider = determineBlockTooltipProvider(level, pos, state); + ITooltipProvider.BlockTooltipProvider currentProvider = this.determineBlockTooltipProvider(level, pos, state); if (currentProvider == null) return; List tooltip = currentProvider.tooltip(level, pos, state); - if (tooltip == null || tooltip.isEmpty()) return; - renderTooltipWithItemIcon( - guiGraphics, + if (tooltip.isEmpty()) return; + TooltipRenderHelper.renderTooltipWithItemIcon( + graphics, font, currentProvider.icon(level, pos, state), tooltip, @@ -113,26 +112,23 @@ public void renderTooltip( ); } - /** - * 渲染方块实体的tooltip - */ + /// 渲染方块实体的tooltip public void renderTooltip( - GuiGraphics guiGraphics, + GuiGraphicsExtractor graphics, BlockEntity entity, float partialTick, int screenWidth, int screenHeight ) { - if (entity == null) return; final int tooltipPosX = screenWidth / 2 + 10; final int tooltipPosY = screenHeight / 2 + 10; Font font = Minecraft.getInstance().font; - ITooltipProvider.BlockEntityTooltipProvider currentProvider = determineBlockEntityTooltipProvider(entity); + ITooltipProvider.BlockEntityTooltipProvider currentProvider = this.determineBlockEntityTooltipProvider(entity); if (currentProvider == null) return; List tooltip = currentProvider.tooltip(entity); - if (tooltip == null || tooltip.isEmpty()) return; - renderTooltipWithItemIcon( - guiGraphics, + if (tooltip.isEmpty()) return; + TooltipRenderHelper.renderTooltipWithItemIcon( + graphics, font, currentProvider.icon(entity), tooltip, @@ -144,10 +140,8 @@ public void renderTooltip( ); } - /** - * 渲染手持物品Tooltip - */ - public void renderHandItemLevelTooltip( + /// 渲染手持物品Tooltip + public void submitHandItemInWorldTooltip( ItemStack itemStack, PoseStack poseStack, VertexConsumer consumer, @@ -155,29 +149,25 @@ public void renderHandItemLevelTooltip( double camY, double camZ ) { - IHandHeldItemTooltipProvider pv = determineHandHeldItemTooltipProvider(itemStack); + IHandHeldItemTooltipProvider pv = this.determineHandHeldItemTooltipProvider(itemStack); if (pv == null) return; pv.render(poseStack, consumer, itemStack, camX, camY, camZ); } - /** - * 渲染手持物品Hud Tooltip - */ + /// 渲染手持物品Hud Tooltip public void renderHandItemHudTooltip( - GuiGraphics guiGraphics, + GuiGraphicsExtractor graphics, ItemStack itemStack, float partialTick, int screenWidth, int screenHeight ) { - IHandHeldItemTooltipProvider pv = determineHandHeldItemTooltipProvider(itemStack); + IHandHeldItemTooltipProvider pv = this.determineHandHeldItemTooltipProvider(itemStack); if (pv == null) return; - pv.renderTooltip(guiGraphics, screenWidth, screenHeight); + pv.renderTooltip(graphics, screenWidth, screenHeight); } - /** - * 渲染作用范围 - */ + /// 渲染作用范围 public void renderAffectRange( BlockEntity entity, PoseStack poseStack, @@ -186,40 +176,36 @@ public void renderAffectRange( double camY, double camZ ) { - IAffectRangeProvider currentProvider = determineAffectRangeProvider(entity); + IAffectRangeProvider currentProvider = this.determineAffectRangeProvider(entity); if (currentProvider == null) return; VoxelShape shape = currentProvider.affectRange(entity); - if (shape == null) return; - renderOutline(poseStack, consumer, camX, camY, camZ, BlockPos.ZERO, shape, 0xff00ffcc); + TooltipRenderHelper.renderOutline(poseStack, consumer, camX, camY, camZ, BlockPos.ZERO, shape, 0xff00Ffcc); } - private IHandHeldItemTooltipProvider determineHandHeldItemTooltipProvider(ItemStack itemStack) { - if (itemStack == null || itemStack.isEmpty()) return null; - return handItemProviders.stream() + private @Nullable IHandHeldItemTooltipProvider determineHandHeldItemTooltipProvider(ItemStack itemStack) { + if (itemStack.isEmpty()) return null; + return this.handItemProviders.stream() .filter(it -> it.accepts(itemStack)) .min(Comparator.comparingInt(IHandHeldItemTooltipProvider::priority)) .orElse(null); } - private ITooltipProvider.BlockTooltipProvider determineBlockTooltipProvider(Level level, BlockPos pos, BlockState state) { - if (state == null) return null; - return blockProviders.stream() + private ITooltipProvider.@Nullable BlockTooltipProvider determineBlockTooltipProvider(Level level, BlockPos pos, BlockState state) { + return this.blockProviders.stream() .filter(it -> it.accepts(level, pos, state)) .min(Comparator.comparingInt(ITooltipProvider::priority)) .orElse(null); } - private ITooltipProvider.BlockEntityTooltipProvider determineBlockEntityTooltipProvider(BlockEntity entity) { - if (entity == null) return null; - return blockEntityProviders.stream() + private ITooltipProvider.@Nullable BlockEntityTooltipProvider determineBlockEntityTooltipProvider(BlockEntity entity) { + return this.blockEntityProviders.stream() .filter(it -> it.accepts(entity)) .min(Comparator.comparingInt(ITooltipProvider::priority)) .orElse(null); } - private IAffectRangeProvider determineAffectRangeProvider(BlockEntity entity) { - if (entity == null) return null; - return affectRangeProviders.stream() + private @Nullable IAffectRangeProvider determineAffectRangeProvider(BlockEntity entity) { + return this.affectRangeProviders.stream() .filter(it -> it.accepts(entity)) .min(Comparator.comparingInt(IAffectRangeProvider::priority)) .orElse(null); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/ItemTooltipManager.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/ItemTooltipManager.java index 77fa9d73a9..6a1c16918f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/ItemTooltipManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/ItemTooltipManager.java @@ -1,33 +1,27 @@ package dev.dubhe.anvilcraft.api.tooltip; import com.google.common.collect.Maps; -import dev.anvilcraft.lib.v2.util.ListUtil; -import dev.anvilcraft.lib.v2.util.Util; -import dev.dubhe.anvilcraft.client.AnvilCraftClient; -import dev.dubhe.anvilcraft.client.init.ModKeyMappings; import dev.dubhe.anvilcraft.init.block.ModBlocks; -import dev.dubhe.anvilcraft.init.item.ModComponents; import dev.dubhe.anvilcraft.init.item.ModFoodItems; import dev.dubhe.anvilcraft.init.item.ModItemTags; import dev.dubhe.anvilcraft.init.item.ModItems; -import dev.dubhe.anvilcraft.util.UnitUtil; import net.minecraft.ChatFormatting; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.ComponentUtils; -import net.minecraft.network.chat.contents.TranslatableContents; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import java.util.Collections; -import java.util.List; import java.util.Map; +import java.util.function.Consumer; public class ItemTooltipManager { - + public static final Component SHIFT_TIP = Component.translatable( + "tooltip.anvilcraft.press_key", + Component.literal("Shift").withStyle(ChatFormatting.WHITE) + ).withStyle(ChatFormatting.DARK_GRAY); private static final Map NORMAL = Maps.newHashMap(); private static final Map SHIFT = Maps.newHashMap(); @@ -49,27 +43,35 @@ public class ItemTooltipManager { NORMAL.put(ModBlocks.ROYAL_GRINDSTONE.asItem(), "Explosion proof, Eliminating Curses and Punishing"); NORMAL.put(ModBlocks.ROYAL_SMITHING_TABLE.asItem(), "Explosion proof, Saving your Smithing Template"); NORMAL.put(ModBlocks.HEATER.asItem(), "Heating the block above, consumes 16 kW"); + NORMAL.put( + ModBlocks.BURNING_HEATER.asItem(), """ + Consume fuel to heat the block above + Each crafting consumes 240 seconds of burn time""" + ); NORMAL.put(ModBlocks.TRANSMISSION_POLE.asItem(), "Build a power grid with a transmission length of 8"); NORMAL.put(ModBlocks.CHARGE_COLLECTOR.asItem(), "Collecting charges to generate power"); - NORMAL.put(ModBlocks.POWER_CONVERTER_SMALL.asItem(), "Convert power into FE, consumes 1 kW"); - NORMAL.put(ModBlocks.POWER_CONVERTER_MIDDLE.asItem(), "Convert power into FE, consumes 6 kW"); - NORMAL.put(ModBlocks.POWER_CONVERTER_BIG.asItem(), "Convert power into FE, consumes 36 kW"); + NORMAL.put(ModBlocks.FE_COLLECTOR.asItem(), "Collecting FE to generate power"); NORMAL.put(ModBlocks.PIEZOELECTRIC_CRYSTAL.asItem(), "Charge generated by an anvil fall on it"); - NORMAL.put(ModBlocks.MAGNET_BLOCK.asItem(), - "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges"); - NORMAL.put(ModBlocks.HOLLOW_MAGNET_BLOCK.asItem(), - "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges"); - NORMAL.put(ModBlocks.FERRITE_CORE_MAGNET_BLOCK.asItem(), - "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges"); - NORMAL.put(ModBlocks.BATCH_CRAFTER.asItem(), - "Received a redstone signal and crafted all internal items at once, with a power consumption of 4 kW"); - NORMAL.put(ModBlocks.BATCH_CUTTER.asItem(), - "Received a redstone signal and cut all internal items at once, with a power consumption of 4 kW"); - NORMAL.put(ModBlocks.FISH_TANK.asItem(), """ - It is sturdier than it looks and can be used as a substitute for the alchemy pot to perform related anvil synthesis. - Wearing it on your head provides a temporary underwater breathing effect. - Right-click the top with an item in hand to place the item inside. - Right-click the lower part of the fish tank with a tropical fish bucket in hand to release the tropical fish."""); + NORMAL.put( + ModBlocks.MAGNET_BLOCK.asItem(), + "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges" + ); + NORMAL.put( + ModBlocks.HOLLOW_MAGNET_BLOCK.asItem(), + "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges" + ); + NORMAL.put( + ModBlocks.FERRITE_CORE_MAGNET_BLOCK.asItem(), + "Attracting the anvil below, when pushed and pulled by the piston, causes adjacent copper blocks to generate charges" + ); + NORMAL.put( + ModBlocks.BATCH_CRAFTER.asItem(), + "Received a redstone signal and crafted all internal items at once, with a power consumption of 4 kW" + ); + NORMAL.put( + ModBlocks.BATCH_CUTTER.asItem(), + "Received a redstone signal and cut all internal items at once, with a power consumption of 4 kW" + ); NORMAL.put(ModBlocks.ROYAL_STEEL_BLOCK.asItem(), "Explosion proof"); NORMAL.put(ModBlocks.SMOOTH_ROYAL_STEEL_BLOCK.asItem(), "Explosion proof"); NORMAL.put(ModBlocks.CUT_ROYAL_STEEL_BLOCK.asItem(), "Explosion proof"); @@ -110,36 +112,59 @@ public class ItemTooltipManager { NORMAL.put(ModBlocks.NEGATIVE_MATTER_BLOCK.asItem(), "Negative matter is not antimatter, it is anti gravity matter"); NORMAL.put(ModItems.NEUTRONIUM_INGOT.asItem(), "Pass through most blocks except end dust, negative matter block, and bedrock"); NORMAL.put(ModItems.STABLE_NEUTRONIUM_INGOT.asItem(), "No more passing through blocks"); - NORMAL.put(ModItems.CHARGED_NEUTRONIUM_INGOT.asItem(), - "No longer passing through blocks, storing a large amount of electrical energy"); - NORMAL.put(ModBlocks.TESLA_TOWER.asItem(), - "Electric shock to mobs or lightning rods within a range of 8 grids, with a power consumption of 128 kW"); + NORMAL.put( + ModItems.CHARGED_NEUTRONIUM_INGOT.asItem(), + "No longer passing through blocks, storing a large amount of electrical energy" + ); + NORMAL.put( + ModBlocks.TESLA_TOWER.asItem(), + "Electric shock to mobs or lightning rods within a range of 8 grids, with a power consumption of 128 kW" + ); NORMAL.put(ModBlocks.ACTIVE_SILENCER.asItem(), "Eliminate selected nearby sounds"); NORMAL.put(ModBlocks.COPPER_PRESSURE_PLATE.asItem(), "Redstone signal increases with pressing time, also a copper plate"); NORMAL.put(ModBlocks.EXPOSED_COPPER_PRESSURE_PLATE.asItem(), "Redstone signal increases with pressing time, also a copper plate"); NORMAL.put(ModBlocks.WEATHERED_COPPER_PRESSURE_PLATE.asItem(), "Redstone signal increases with pressing time, also a copper plate"); NORMAL.put(ModBlocks.OXIDIZED_COPPER_PRESSURE_PLATE.asItem(), "Redstone signal increases with pressing time, also a copper plate"); - NORMAL.put(ModBlocks.ZINC_PRESSURE_PLATE.asItem(), - "Output a redstone signal based on the highest percentage of health of the mobs above, also a zinc plate"); - NORMAL.put(ModBlocks.TIN_PRESSURE_PLATE.asItem(), - "Output a redstone signal based on the lowest percentage of health of the mobs above, also a tin plate"); - NORMAL.put(ModBlocks.LEAD_PRESSURE_PLATE.asItem(), - "Output redstone signal based on the number of biological species above, " - + "also a lead plateOutput redstone signal based on the number of mob species above, also a lead plate"); - NORMAL.put(ModBlocks.SILVER_PRESSURE_PLATE.asItem(), - "Output redstone signal based on the number of undead mobs above, also a silver plate"); - NORMAL.put(ModBlocks.TUNGSTEN_PRESSURE_PLATE.asItem(), - "Output redstone signal based on the number of fire-resistant entities above, also a tungsten plate"); - NORMAL.put(ModBlocks.TITANIUM_PRESSURE_PLATE.asItem(), - "Output a redstone signal based on the highest durability of the items above, also a titanium plate"); - NORMAL.put(ModBlocks.URANIUM_PRESSURE_PLATE.asItem(), - "Output a redstone signal based on the lowest durability of the items above, also a uranium plate"); - NORMAL.put(ModBlocks.PLUTONIUM_PRESSURE_PLATE.asItem(), - "Output a redstone signal based on the player in hand item durability, also a plutonium plate"); - NORMAL.put(ModBlocks.BRONZE_PRESSURE_PLATE.asItem(), - "Output a redstone signal based on player satiety above, also a bronze plate"); - NORMAL.put(ModBlocks.BRASS_PRESSURE_PLATE.asItem(), - "Output a redstone signal based on the inventory's filling degree of player above, also a brass plate"); + NORMAL.put( + ModBlocks.ZINC_PRESSURE_PLATE.asItem(), + "Output a redstone signal based on the highest percentage of health of the mobs above, also a zinc plate" + ); + NORMAL.put( + ModBlocks.TIN_PRESSURE_PLATE.asItem(), + "Output a redstone signal based on the lowest percentage of health of the mobs above, also a tin plate" + ); + NORMAL.put( + ModBlocks.LEAD_PRESSURE_PLATE.asItem(), + "Output redstone signal based on the number of mob species above, also a lead plate" + ); + NORMAL.put( + ModBlocks.SILVER_PRESSURE_PLATE.asItem(), + "Output redstone signal based on the number of undead mobs above, also a silver plate" + ); + NORMAL.put( + ModBlocks.TUNGSTEN_PRESSURE_PLATE.asItem(), + "Output redstone signal based on the number of fire-resistant entities above, also a tungsten plate" + ); + NORMAL.put( + ModBlocks.TITANIUM_PRESSURE_PLATE.asItem(), + "Output a redstone signal based on the highest durability of the items above, also a titanium plate" + ); + NORMAL.put( + ModBlocks.URANIUM_PRESSURE_PLATE.asItem(), + "Output a redstone signal based on the lowest durability of the items above, also a uranium plate" + ); + NORMAL.put( + ModBlocks.PLUTONIUM_PRESSURE_PLATE.asItem(), + "Output a redstone signal based on the player in hand item durability, also a plutonium plate" + ); + NORMAL.put( + ModBlocks.BRONZE_PRESSURE_PLATE.asItem(), + "Output a redstone signal based on player satiety above, also a bronze plate" + ); + NORMAL.put( + ModBlocks.BRASS_PRESSURE_PLATE.asItem(), + "Output a redstone signal based on the inventory's filling degree of player above, also a brass plate" + ); NORMAL.put(ModItems.MULTITOOL_ITEM.get(), "Press [Alt] to switch tool modes"); NORMAL.put(ModItems.SPECTRAL_SLINGSHOT.get(), "Load a weapon to fire its phantom"); NORMAL.put(ModItems.RECOVERY_PEARL.get(), "Right-click to teleport to last death point"); @@ -154,7 +179,7 @@ public class ItemTooltipManager { NORMAL.put(ModBlocks.DETECTOR_SLIDING_RAIL.asItem(), "Output signal when objects or blocks slide over"); NORMAL.put(ModBlocks.ACTIVATOR_SLIDING_RAIL.asItem(), "Activates blocks sliding over it"); NORMAL.put(ModBlocks.SLIDING_RAIL_STOP.asItem(), "Stops sliding items, entities, or blocks"); - NORMAL.put(ModBlocks.PROPEL_PISTON.asItem(), "Integrated piston worm. Requires Capacitor or Laser power"); + NORMAL.put(ModBlocks.PROPEL_PISTON.asItem(), "Integrated piston worm, requires Capacitor or Laser power"); NORMAL.put(ModBlocks.PULSE_GENERATOR.asItem(), "Customizes pulse delay and duration"); NORMAL.put(ModBlocks.ADVANCED_COMPARATOR.asItem(), "Supports Hysteresis and Window comparison modes"); NORMAL.put(ModItems.EMERALD_AMULET.get(), "Grants Hero of the Village"); @@ -166,153 +191,136 @@ public class ItemTooltipManager { NORMAL.put(ModItems.CAT_AMULET.get(), "Scares away Creepers and Phantoms"); NORMAL.put(ModItems.DOG_AMULET.get(), "Scares away Skeletons"); NORMAL.put(ModItems.SILENCE_AMULET.get(), "Silences the wearer"); - NORMAL.put(ModItems.ABNORMAL_AMULET.get(), - "Prevents damage from carrying Uranium, Plutonium, Floating Powder, Cursed Gold items"); + NORMAL.put( + ModItems.ABNORMAL_AMULET.get(), + "Prevents damage from carrying Uranium, Plutonium, Floating Powder, Cursed Gold items" + ); NORMAL.put(ModItems.NATURE_AMULET.get(), "Combines Silence, Cat, Dog, and Feather Amulet effects"); NORMAL.put(ModItems.GEM_AMULET.get(), "Combines effects of all four Gem Amulets"); - NORMAL.put(ModItems.CAPACITOR.asItem(), "4000kJ stored"); - NORMAL.put(ModItems.CAPACITOR_EMPTY.asItem(), "4000kJ capacity"); - NORMAL.put(ModItems.SUPER_CAPACITOR.asItem(), "80MJ stored"); - NORMAL.put(ModItems.SUPER_CAPACITOR_EMPTY.asItem(), "80MJ capacity"); - NORMAL.put(ModItems.ENERGY_WEAPON_PLATFORM.get(), "320MJ stored, but will only inherit the result of Energy Weapon Making"); + NORMAL.put(ModItems.CAPACITOR.asItem(), "8 MFE stored"); + NORMAL.put(ModItems.CAPACITOR_EMPTY.asItem(), "8 MFE capacity"); + NORMAL.put(ModItems.SUPER_CAPACITOR.asItem(), "160 MFE stored"); + NORMAL.put(ModItems.SUPER_CAPACITOR_EMPTY.asItem(), "160 MFE capacity"); + NORMAL.put(ModItems.ENERGY_WEAPON_PLATFORM.get(), "640 MFE stored, but will only inherit the result of Energy Weapon Making"); NORMAL.put(ModBlocks.BLACK_HOLE.asItem(), "Dev Block with intense gravitational attraction"); NORMAL.put(ModBlocks.WHITE_HOLE.asItem(), "Dev Block with intense gravitational repulsion"); - NORMAL.put(ModBlocks.CHARGER.asItem(), "Charges items. Supports manual or automated input"); - NORMAL.put(ModBlocks.DISCHARGER.asItem(), "Discharges capacitors. Supports manual or automated input"); + NORMAL.put(ModBlocks.CHARGER.asItem(), "Charges items, supports manual or automated input"); + NORMAL.put(ModBlocks.DISCHARGER.asItem(), "Discharges capacitors, supports manual or automated input"); NORMAL.put(ModBlocks.LASER_RECEIVER.asItem(), "Generates power and output signal from received lasers"); - NORMAL.put(ModBlocks.FROST_ANVIL.asItem(), "Wither proof"); - NORMAL.put(ModBlocks.FROST_GRINDSTONE.asItem(), "Wither proof"); - NORMAL.put(ModBlocks.FROST_SMITHING_TABLE.asItem(), "Wither proof"); - NORMAL.put(ModBlocks.FROST_METAL_BLOCK.asItem(), "Wither proof"); - NORMAL.put(ModBlocks.CUT_FROST_METAL_BLOCK.asItem(), "Wither proof"); - NORMAL.put(ModBlocks.CUT_FROST_METAL_PILLAR.asItem(), "Wither proof"); - NORMAL.put(ModBlocks.CUT_FROST_METAL_SLAB.asItem(), "Wither proof"); - NORMAL.put(ModBlocks.CUT_FROST_METAL_STAIRS.asItem(), "Wither proof"); + NORMAL.put(ModBlocks.FROST_ANVIL.asItem(), "Explosion proof"); + NORMAL.put(ModBlocks.FROST_GRINDSTONE.asItem(), "Explosion proof"); + NORMAL.put(ModBlocks.FROST_SMITHING_TABLE.asItem(), "Explosion proof"); + NORMAL.put(ModBlocks.FROST_METAL_BLOCK.asItem(), "Explosion proof"); + NORMAL.put(ModBlocks.CUT_FROST_METAL_BLOCK.asItem(), "Explosion proof"); + NORMAL.put(ModBlocks.CUT_FROST_METAL_PILLAR.asItem(), "Explosion proof"); + NORMAL.put(ModBlocks.CUT_FROST_METAL_SLAB.asItem(), "Explosion proof"); + NORMAL.put(ModBlocks.CUT_FROST_METAL_STAIRS.asItem(), "Explosion proof"); + NORMAL.put(ModBlocks.SPECTRAL_ANVIL.asItem(), "Creates phantom shadows when the upper magnet is demagnetized"); + NORMAL.put(ModBlocks.BLOCK_PLACER.asItem(), "Places blocks in front when powered by redstone"); + NORMAL.put(ModBlocks.FISH_TANK.asItem(), "Used for anvil synthesis and provides underwater breathing when worn"); + NORMAL.put(ModBlocks.BLOCK_DEVOURER.asItem(), "Breaks 3×3 area of blocks in front when powered by redstone"); + NORMAL.put(ModBlocks.INDUCTION_LIGHT.asItem(), "Provides lighting and configurable special modes"); + NORMAL.put(ModBlocks.HELIOSTATS.asItem(), "Heats targeted blocks during the day"); + NORMAL.put(ModItems.IONOCRAFT_BACKPACK.asItem(), "Allows creative flight while equipped, requires power from the energy grid or capacitors"); + NORMAL.put(ModBlocks.BLOCK_COMPARATOR.asItem(), "Outputs signal when side blocks are the same, right-click to switch to precise state detection mode"); + NORMAL.put(ModBlocks.ITEM_DETECTOR.asItem(), "Detects specific items behind (drops/containers) to output redstone signal"); + NORMAL.put(ModBlocks.IMPACT_PILE.asItem(), "Place on Bedrock and strike with falling anvil to create Moneral Fountain"); + NORMAL.put(ModBlocks.SPACE_OVERCOMPRESSOR.asItem(), "Compresses items into Neutronium Ingots, compresses multiblock outputs into drops"); + NORMAL.put(ModBlocks.ACCELERATION_RING.asItem(), "Creates acceleration field for anvils, projectiles, or players with Anvil Hammer"); + NORMAL.put(ModBlocks.DEFLECTION_RING.asItem(), "Deflects passing objects 90°, detect speed with Comparator"); + NORMAL.put(ModItems.DRAGON_ROD.asItem(), "Portable block devourer with adjustable range"); + NORMAL.put(ModItems.FILTER.asItem(), "Matches items based on configuration, usable in any filter slot"); + NORMAL.put(ModItems.TOTEM_OF_RECOVERY.asItem(), "Teleports to spawn on death, grants a Recall Pearl to return to death point"); + NORMAL.put(ModItems.TOTEM_OF_RAGE.asItem(), "Grants invulnerability and berserk on fatal damage, death is inevitable after 1 minute"); + NORMAL.put(ModItems.COMRADE_AMULET.asItem(), "Signable by players via right-click, prevents damage from signed players"); + NORMAL.put(ModItems.PILL_BOX.asItem(), "Store pills for quick use"); + NORMAL.put(ModItems.AMULET_BOX.asItem(), "Stores multiple active amulets or totems"); - SHIFT.put(ModBlocks.SPECTRAL_ANVIL.asItem(), - "When the upper magnet is demagnetized, a phantom shadow is created and falls downward. " - + "It can pass through transparent blocks, and no matter the actual height, the impact is always treated as a 2‑block fall"); - SHIFT.put(ModBlocks.BLOCK_PLACER.asItem(), """ - When powered by redstone, this block places a block in front of it. - If struck by a falling anvil, the placement distance increases — the farther the anvil falls, the farther the block is placed. - No internal inventory and must obtain blocks from dropped items or container inventories behind it"""); - SHIFT.put(ModBlocks.BLOCK_DEVOURER.asItem(), """ - When powered by redstone, this block instantly breaks a 3×3 area of blocks in front of it. - If struck by a falling anvil, the breaking range increases — the farther the anvil falls, the larger the area it destroys. - No internal inventory. Outputs items behind it — into containers, as dropped items, or at the break location if blocked. - Base world blocks such as stone, dirt, and deepslate drop only small amounts"""); - SHIFT.put(ModBlocks.INDUCTION_LIGHT.asItem(), """ - Provides lighting with a power consumption of 1 kW - Right‑click with Redstone to switch to Growth Acceleration Mode - Right‑click with Glowstone to switch to Anti‑Monster Spawning Mode - Right‑click with Void Matter to switch to Anti‑Animal Spawning Mode - All three special modes consume 16 kW of power"""); - SHIFT.put(ModBlocks.HELIOSTATS.asItem(), """ - Right‑click a Netherite Block or Tungsten Block with the handheld heliostat to set target block. - After placing the heliostat, it will heat the targeted block during the day, as well as the blocks above it"""); - SHIFT.put(ModItems.IONOCRAFT_BACKPACK.asItem(), - "Allows creative flight while equipped. Requires power supplied from the energy grid or from capacitors in the inventory"); - SHIFT.put(ModBlocks.BLOCK_COMPARATOR.asItem(), - "Output signal when side blocks are the same. Right-click to switch to precise state detection mode"); - SHIFT.put(ModBlocks.ITEM_DETECTOR.asItem(), "Detects specific items behind (drops/containers) to output signal"); - SHIFT.put(ModBlocks.IMPACT_PILE.asItem(), "Place on Bedrock. Strike with falling anvil to create a Moneral Fountain"); - SHIFT.put(ModBlocks.OVERSEER_BLOCK.asItem(), - "Chunk loader on 3x3 Royal Steel base. Higher base layers increase chunk load range (max 3 layers, 5x5 range)"); - SHIFT.put(ModBlocks.SPACE_OVERCOMPRESSOR.asItem(), - "Compresses items into Neutronium Ingots. Compresses multiblock outputs into drops"); - SHIFT.put(ModBlocks.ACCELERATION_RING.asItem(), - "Creates acceleration field. Accelerates anvils, projectiles, or players with Anvil Hammer"); - SHIFT.put(ModBlocks.DEFLECTION_RING.asItem(), "Deflects passing objects 90°. Detect speed with Comparator"); - SHIFT.put(ModItems.DRAGON_ROD.asItem(), - "Portable block devourer. Left-click to mine, right-click to adjust range. Larger range costs more durability"); - SHIFT.put(ModItems.FILTER.asItem(), "Matches items based on config or filters. Usable in any filter slot"); - SHIFT.put(ModItems.TOTEM_OF_RECOVERY.asItem(), "Teleports to spawn on death. Grants a Recall Pearl to return to death point"); - SHIFT.put(ModItems.TOTEM_OF_RAGE.asItem(), - "Grants invulnerability and berserk on fatal damage. Death is inevitable after 1 minute"); - SHIFT.put(ModItems.COMRADE_AMULET.asItem(), "Signable by players via right-click. Prevents damage from signed players"); + SHIFT.put( + ModBlocks.SPECTRAL_ANVIL.asItem(), + "When the upper magnet is demagnetized, a phantom shadow is created and falls downward, " + + "it can pass through transparent blocks, and no matter the actual height, the impact is always treated as a 2‑block fall" + ); + SHIFT.put( + ModBlocks.BLOCK_PLACER.asItem(), """ + When powered by redstone, this block places a block in front of it + If struck by a falling anvil, the placement distance increases — the farther the anvil falls, the farther the block is placed + No internal inventory and must obtain blocks from dropped items or container inventories behind it""" + ); + SHIFT.put( + ModBlocks.FISH_TANK.asItem(), """ + It is sturdier than it looks and can be used as a substitute for the alchemy pot to perform related anvil synthesis + Wearing it on your head provides a temporary underwater breathing effect + Right-click the top with an item in hand to place the item inside + Right-click the lower part of the fish tank with a tropical fish bucket in hand to release the tropical fish""" + ); + SHIFT.put( + ModBlocks.BLOCK_DEVOURER.asItem(), """ + When powered by redstone, this block instantly breaks a 3×3 area of blocks in front of it + If struck by a falling anvil, the breaking range increases — the farther the anvil falls, the larger the area it destroys + No internal inventory, outputs items behind it — into containers, as dropped items, or at the break location if blocked + Base world blocks such as stone, dirt, and deepslate drop only small amounts""" + ); + SHIFT.put( + ModBlocks.INDUCTION_LIGHT.asItem(), """ + Provides lighting with a power consumption of 1 kW + Right‑click with Redstone to switch to Growth Acceleration Mode + Right‑click with Glowstone to switch to Anti‑Monster Spawning Mode + Right‑click with Void Matter to switch to Anti‑Animal Spawning Mode + All three special modes consume 16 kW of power""" + ); + SHIFT.put( + ModBlocks.HELIOSTATS.asItem(), """ + Right‑click a Netherite Block or Tungsten Block with the handheld heliostat to set target block + After placing the heliostat, it will heat the targeted block during the day, as well as the blocks above it""" + ); + SHIFT.put( + ModItems.DRAGON_ROD.asItem(), + "Portable block devourer, left-click to mine, right-click to adjust range, larger range costs more durability" + ); + SHIFT.put( + ModItems.PILL_BOX.asItem(), + "Store pills, right-click to take one pill each, and press [%s] to use them in the inventory" + ); + SHIFT.put( + ModItems.AMULET_BOX.asItem(), """ + Stores multiple active amulets or totems + Right click to store the Totems of Undying on your inventory, and shift-right-click to retrieve the totems; + When holding, consume the totems in the box when needed, and after consuming the totem, you may receive a secret gift.""" + ); + // NORMAL 优先:基础 key 使用短文本,SHIFT 仅用于 .shift key Map allTooltips = Maps.newHashMap(); - allTooltips.putAll(NORMAL); allTooltips.putAll(SHIFT); + allTooltips.putAll(NORMAL); NEED_TOOLTIP_ITEMS = Collections.unmodifiableMap(allTooltips); } public static final Map NEED_TOOLTIP_ITEMS; - /** - * 为模组物品添加工具提示 - * - * @param stack 需要添加工具提示的物品堆叠 - * @param tooltip 提示内容 - */ - public static void addTooltip(ItemStack stack, List tooltip) { + /// 为模组物品添加工具提示 + /// + /// @param stack 需要添加工具提示的物品堆叠 + /// @param builder 工具提示添加器 + /// @param flags 工具提示标识 + public static void addTooltip(ItemStack stack, Consumer builder, TooltipFlag flags) { final Item item = stack.getItem(); - if (stack.has(ModComponents.STORED_ENERGY)) { - propertyTooltip( - "stored_energy", - tooltip, - ChatFormatting.GRAY, - UnitUtil.energyUnit(stack.getOrDefault(ModComponents.STORED_ENERGY, 0), Screen.hasShiftDown()) - ); - } - if (stack.has(ModComponents.MULTIPHASE)) { - if (AnvilCraftClient.CONFIG.showMultiphaseStoredId) { - propertyTooltip( - "multiphase.id", - tooltip, - 0xDD91FA, - stack.get(ModComponents.MULTIPHASE).id().toString() - ); - } - propertyTooltip( - "multiphase", - tooltip, - 0xDD91FA, - ModKeyMappings.SWITCH_PHASE.get().getKey().getDisplayName() - ); - } - if (stack.has(ModComponents.PROVIDENCE)) { - if (Screen.hasShiftDown()) { - propertyTooltip("providence.shifting", tooltip, 0xFFCB62, ComponentUtils.formatList( - List.of( - Component.translatable("enchantment.minecraft.fortune"), - Component.translatable("enchantment.minecraft.looting"), - Component.translatable("enchantment.anvilcraft.beheading"), - Component.translatable("enchantment.minecraft.thorns"), - Component.translatable("enchantment.minecraft.luck_of_the_sea") - ), ComponentUtils.DEFAULT_NO_STYLE_SEPARATOR)); - } else { - propertyTooltip( - "providence", tooltip, 0xFFCB62, - Minecraft.getInstance().options.keyShift.getKey().getDisplayName()); - } - } - if (stack.has(ModComponents.ETERNAL)) { - propertyTooltip("eternal", tooltip, 0xD3C5F6); - } - if (stack.has(ModComponents.FEROCIOUS)) { - propertyTooltip("ferocious", tooltip, 0xDD1212); - } - if (stack.has(ModComponents.MERCILESS)) { - propertyTooltip("merciless", tooltip, 0xB4F0F6); - } - if (stack.has(ModComponents.FIRE_REFORGING)) { - propertyTooltip("fire_reforging", tooltip, ChatFormatting.GOLD); - } - if (NORMAL.containsKey(item)) { - tooltip.add(1, getItemTooltip(item)); - } if (SHIFT.containsKey(item)) { - if (Screen.hasShiftDown()) { - tooltip.add(1, getItemTooltip(item)); + // SHIFT 物品:默认显示短文本+提示,按住 Shift 显示长文本(.shift) + if (flags.hasShiftDown()) { + builder.accept(ItemTooltipManager.getItemTooltipShift(item)); } else { - tooltip.add(1, Component.translatable("tooltip.anvilcraft.press_key", "Shift").withStyle(ChatFormatting.GRAY)); + if (NORMAL.containsKey(item)) { + builder.accept(ItemTooltipManager.getItemTooltip(item)); + } + builder.accept(SHIFT_TIP); } + } else if (NORMAL.containsKey(item)) { + builder.accept(ItemTooltipManager.getItemTooltip(item)); } if (stack.is(ModItemTags.REINFORCED_CONCRETE)) { - ResourceLocation key = BuiltInRegistries.ITEM.getKey(item); - tooltip.add( - 1, + Identifier key = BuiltInRegistries.ITEM.getKey(item); + builder.accept( Component.translatable("tooltip.%s.item.reinforced_concrete".formatted(key.getNamespace())) .withStyle(ChatFormatting.GRAY) ); @@ -320,71 +328,29 @@ public static void addTooltip(ItemStack stack, List tooltip) { } private static Component getItemTooltip(Item item) { - return Component.translatable(getTranslationKey(item)).withStyle(ChatFormatting.GRAY); + return Component.translatable(ItemTooltipManager.getTranslationKey(item)).withStyle(ChatFormatting.GRAY); } - public static String getTranslationKey(Item item) { - ResourceLocation key = BuiltInRegistries.ITEM.getKey(item); - return "tooltip.%s.item.%s".formatted(key.getNamespace(), key.getPath()); + private static Component getItemTooltipShift(Item item) { + if (item == ModItems.PILL_BOX.asItem()) { + return Component.translatable( + getTranslationKeyShift(item), + Component.keybind("key.anvilcraft.use_pill_box") + ).withStyle(ChatFormatting.GRAY); + } + return Component.translatable(getTranslationKeyShift(item)).withStyle(ChatFormatting.GRAY); } - private static void propertyTooltip(String propertyName, List tooltip, ChatFormatting color, Object... args) { - int i = 0; - for (int j = 0; j < tooltip.size(); j++) { - if (tooltip.get(j).getContents() instanceof TranslatableContents t && t.getKey().contains("enchantment") - && ListUtil.safelyGet(tooltip, j + 1) - .flatMap(tooltipI -> Util.castSafely(tooltipI.getContents(), TranslatableContents.class)) - .map(TranslatableContents::getKey) - .filter(key -> key.contains("enchantment")) - .isEmpty() - ) { - i = j; - break; - } - } - tooltip.add( - 1 + i, - Component.translatable("tooltip.anvilcraft.property.%s".formatted(propertyName), args).withStyle(color) - ); + public static String getTranslationKey(Item item) { + Identifier key = BuiltInRegistries.ITEM.getKey(item); + return "tooltip.%s.item.%s".formatted(key.getNamespace(), key.getPath()); } - private static void propertyTooltip(String propertyName, List tooltip, int color) { - int i = 0; - for (int j = 0; j < tooltip.size(); j++) { - if (tooltip.get(j).getContents() instanceof TranslatableContents t && t.getKey().contains("enchantment") - && ListUtil.safelyGet(tooltip, j + 1) - .flatMap(tooltipI -> Util.castSafely(tooltipI.getContents(), TranslatableContents.class)) - .map(TranslatableContents::getKey) - .filter(key -> key.contains("enchantment")) - .isEmpty() - ) { - i = j; - break; - } - } - tooltip.add( - 1 + i, - Component.translatable("tooltip.anvilcraft.property.%s".formatted(propertyName)).withColor(color) - ); + public static String getTranslationKeyShift(Item item) { + return getTranslationKey(item) + ".shift"; } - private static void propertyTooltip(String propertyName, List tooltip, int color, Object... args) { - int i = 0; - for (int j = 0; j < tooltip.size(); j++) { - if (tooltip.get(j).getContents() instanceof TranslatableContents t && t.getKey().contains("enchantment") - && ListUtil.safelyGet(tooltip, j + 1) - .flatMap(tooltipI -> Util.castSafely(tooltipI.getContents(), TranslatableContents.class)) - .map(TranslatableContents::getKey) - .filter(key -> key.contains("enchantment")) - .isEmpty() - ) { - i = j; - break; - } - } - tooltip.add( - 1 + i, - Component.translatable("tooltip.anvilcraft.property.%s".formatted(propertyName), args).withColor(color) - ); + public static Map getShiftMap() { + return Collections.unmodifiableMap(SHIFT); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/TooltipRenderHelper.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/TooltipRenderHelper.java index 87d6a7543e..e2cbb98b98 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/TooltipRenderHelper.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/TooltipRenderHelper.java @@ -3,7 +3,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; @@ -18,9 +18,7 @@ public class TooltipRenderHelper { - /** - * 渲染外框 - */ + /// 渲染外框 public static void renderOutline( PoseStack poseStack, VertexConsumer consumer, @@ -30,6 +28,28 @@ public static void renderOutline( BlockPos offsetPos, VoxelShape shape, int color + ) { + renderOutline( + poseStack.last(), + consumer, + camX, + camY, + camZ, + offsetPos, + shape, + color + ); + } + + public static void renderOutline( + PoseStack.Pose poseStack, + VertexConsumer consumer, + double camX, + double camY, + double camZ, + BlockPos offsetPos, + VoxelShape shape, + int color ) { renderShape( poseStack, @@ -43,7 +63,7 @@ public static void renderOutline( } private static void renderShape( - PoseStack poseStack, + PoseStack.Pose pose, VertexConsumer consumer, VoxelShape shape, double x, @@ -51,7 +71,6 @@ private static void renderShape( double z, int color ) { - PoseStack.Pose pose = poseStack.last(); shape.forAllEdges((minX, minY, minZ, maxX, maxY, maxZ) -> { float dx = (float) (maxX - minX); float dy = (float) (maxY - minY); @@ -59,25 +78,25 @@ private static void renderShape( float distance = Mth.sqrt(dx * dx + dy * dy + dz * dz); consumer.addVertex(pose.pose(), (float) (minX + x), (float) (minY + y), (float) (minZ + z)) .setColor(color) + .setLineWidth(4f) .setNormal(pose.copy(), dx /= distance, dy /= distance, dz /= distance); consumer.addVertex(pose.pose(), (float) (maxX + x), (float) (maxY + y), (float) (maxZ + z)) .setColor(color) + .setLineWidth(4f) .setNormal(pose.copy(), dx, dy, dz); }); } - /** - * 渲染带图标的Tooltip - * - * @param thiz GuiGraphics - * @param font 字体 - * @param itemStack 图标物品 - * @param lines Tooltip内容 - * @param x x坐标 - * @param y y坐标 - */ + /// 渲染带图标的Tooltip + /// + /// @param graphics GuiGraphicsExtractor + /// @param font 字体 + /// @param itemStack 图标物品 + /// @param lines Tooltip内容 + /// @param x x坐标 + /// @param y y坐标 public static void renderTooltipWithItemIcon( - GuiGraphics thiz, + GuiGraphicsExtractor graphics, Font font, ItemStack itemStack, List lines, @@ -98,43 +117,41 @@ public static void renderTooltipWithItemIcon( for (ClientTooltipComponent component : components) { width = Math.max(component.getWidth(font), width); - height += component.getHeight(); + height += component.getHeight(font); } - Vector2ic vector2ic = tooltipPositioner.positionTooltip(thiz.guiWidth(), thiz.guiHeight(), x, y, width, height); + Vector2ic vector2ic = tooltipPositioner.positionTooltip(graphics.guiWidth(), graphics.guiHeight(), x, y, width, height); int vx = vector2ic.x(); int vy = vector2ic.y(); - thiz.pose().pushPose(); + graphics.pose().pushMatrix(); int finalVy = vy; int finalWidth = width; int finalHeight = height + 16; - thiz.drawManaged(() -> renderTooltipBackground( - thiz, vx, finalVy, finalWidth, finalHeight, backgroundColor, borderTopColor, borderBottomColor)); - thiz.pose().translate(0.0F, 0.0F, 400.0F); + renderTooltipBackground(graphics, vx, finalVy, finalWidth, finalHeight, backgroundColor, borderTopColor, borderBottomColor); - thiz.renderFakeItem(itemStack, vx, vy); + graphics.item(itemStack, vx, vy); vy += 16; ClientTooltipComponent component; for (int i = 0, q = vy; i < components.size(); ++i) { component = components.get(i); - component.renderText(font, vx, q, thiz.pose().last().pose(), thiz.bufferSource()); - q += component.getHeight() + (i == 0 ? 2 : 0); + component.extractText(graphics, font, vx, q); + q += component.getHeight(font) + (i == 0 ? 2 : 0); } for (int i = 0, q = vy; i < components.size(); ++i) { component = components.get(i); - component.renderImage(font, vx, q, thiz); - q += component.getHeight() + (i == 0 ? 2 : 0); + component.extractImage(font, vx, q, finalWidth, finalHeight, graphics); + q += component.getHeight(font) + (i == 0 ? 2 : 0); } - thiz.pose().popPose(); + graphics.pose().popMatrix(); } private static void renderTooltipBackground( - GuiGraphics guiGraphics, + GuiGraphicsExtractor graphics, int x, int y, int width, @@ -147,45 +164,42 @@ private static void renderTooltipBackground( int j = y - 3; int k = width + 3 + 3; int l = height + 3 + 3; - renderHorizontalLine(guiGraphics, i, j - 1, k, 400, backgroundColor); - renderHorizontalLine(guiGraphics, i, j + l, k, 400, backgroundColor); - renderRectangle(guiGraphics, i, j, k, l, 400, backgroundColor); - renderVerticalLine(guiGraphics, i - 1, j, l, 400, backgroundColor); - renderVerticalLine(guiGraphics, i + k, j, l, 400, backgroundColor); - renderFrameGradient(guiGraphics, i, j + 1, k, l, 400, borderTopColor, borderBottomColor); + renderHorizontalLine(graphics, i, j - 1, k, backgroundColor); + renderHorizontalLine(graphics, i, j + l, k, backgroundColor); + renderRectangle(graphics, i, j, k, l, backgroundColor); + renderVerticalLine(graphics, i - 1, j, l, backgroundColor); + renderVerticalLine(graphics, i + k, j, l, backgroundColor); + renderFrameGradient(graphics, i, j + 1, k, l, borderTopColor, borderBottomColor); } private static void renderFrameGradient( - GuiGraphics guiGraphics, + GuiGraphicsExtractor graphics, int x, int y, int width, int height, - int z, int topColor, int bottomColor ) { - renderVerticalLineGradient(guiGraphics, x, y, height - 2, z, topColor, bottomColor); - renderVerticalLineGradient(guiGraphics, x + width - 1, y, height - 2, z, topColor, bottomColor); - renderHorizontalLine(guiGraphics, x, y - 1, width, z, topColor); - renderHorizontalLine(guiGraphics, x, y - 1 + height - 1, width, z, bottomColor); + renderVerticalLineGradient(graphics, x, y, height - 2, topColor, bottomColor); + renderVerticalLineGradient(graphics, x + width - 1, y, height - 2, topColor, bottomColor); + renderHorizontalLine(graphics, x, y - 1, width, topColor); + renderHorizontalLine(graphics, x, y - 1 + height - 1, width, bottomColor); } - private static void renderVerticalLine(GuiGraphics guiGraphics, int x, int y, int length, int z, int color) { - guiGraphics.fill(x, y, x + 1, y + length, z, color); + private static void renderVerticalLine(GuiGraphicsExtractor graphics, int x, int y, int length, int color) { + graphics.fill(x, y, x + 1, y + length, color); } - private static void renderVerticalLineGradient( - GuiGraphics guiGraphics, int x, int y, int length, int z, int topColor, int bottomColor) { - guiGraphics.fillGradient(x, y, x + 1, y + length, z, topColor, bottomColor); + private static void renderVerticalLineGradient(GuiGraphicsExtractor graphics, int x, int y, int length, int topColor, int bottomColor) { + graphics.fillGradient(x, y, x + 1, y + length, topColor, bottomColor); } - private static void renderHorizontalLine(GuiGraphics guiGraphics, int x, int y, int length, int z, int color) { - guiGraphics.fill(x, y, x + length, y + 1, z, color); + private static void renderHorizontalLine(GuiGraphicsExtractor graphics, int x, int y, int length, int color) { + graphics.fill(x, y, x + length, y + 1, color); } - private static void renderRectangle( - GuiGraphics guiGraphics, int x, int y, int width, int height, int z, int color) { - guiGraphics.fill(x, y, x + width, y + height, z, color); + private static void renderRectangle(GuiGraphicsExtractor graphics, int x, int y, int width, int height, int color) { + graphics.fill(x, y, x + width, y + height, color); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/AffectRangeProviderImpl.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/AffectRangeProviderImpl.java index df85c90092..69c3c8c74d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/AffectRangeProviderImpl.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/AffectRangeProviderImpl.java @@ -19,7 +19,7 @@ public VoxelShape affectRange(BlockEntity entity) { if (entity instanceof IHasAffectRange har && har.shape() instanceof AABB shape) { return Shapes.create(shape); } - return null; + return Shapes.empty(); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/BurningHeaterTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/BurningHeaterTooltipProvider.java new file mode 100644 index 0000000000..4c3d0e539b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/BurningHeaterTooltipProvider.java @@ -0,0 +1,98 @@ +package dev.dubhe.anvilcraft.api.tooltip.impl; + +import dev.dubhe.anvilcraft.api.tooltip.providers.ITooltipProvider; +import dev.dubhe.anvilcraft.block.BurningHeaterBlock; +import dev.dubhe.anvilcraft.block.entity.BurningHeaterBlockEntity; +import dev.dubhe.anvilcraft.client.AnvilCraftClient; +import dev.dubhe.anvilcraft.util.CompatUtil; +import dev.dubhe.anvilcraft.util.FormattingUtil; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.transfer.item.ItemResource; + +import java.util.ArrayList; +import java.util.List; + +public class BurningHeaterTooltipProvider extends ITooltipProvider.BlockEntityTooltipProvider { + @Override + public boolean accepts(BlockEntity value) { + return value instanceof BurningHeaterBlockEntity; + } + + @Override + public List tooltip(BlockEntity value) { + if (CompatUtil.HAS_JADE.get() && AnvilCraftClient.CONFIG.doNotShowTooltipWhenJadePresent) return List.of(); + if (!(value instanceof BurningHeaterBlockEntity be)) return List.of(); + + List lines = new ArrayList<>(); + + BlockState state = be.getBlockState(); + int level; + if (state.getBlock() instanceof BurningHeaterBlock) { + level = state.getValue(BurningHeaterBlock.LEVEL); + } else { + int burnTime = be.getBurnTime(); + if (burnTime >= BurningHeaterBlockEntity.LIT_THRESHOLD) { + level = 2; + } else if (burnTime > 0) { + level = 1; + } else { + level = 0; + } + } + + lines.add(Component.translatable("tooltip.anvilcraft.burning_heater.state_name") + .withStyle(ChatFormatting.BLUE)); + + String stateKey = switch (level) { + case 1 -> "tooltip.anvilcraft.burning_heater.state_name.smoldering"; + case 2 -> "tooltip.anvilcraft.burning_heater.state_name.lit"; + default -> "tooltip.anvilcraft.burning_heater.state_name.off"; + }; + lines.add(Component.translatable(stateKey).withStyle(ChatFormatting.GRAY)); + + int burnTime = be.getDisplayBurnTime(); + if (burnTime > 0) { + lines.add(Component.translatable("tooltip.anvilcraft.burning_heater.burn_time_label") + .withStyle(ChatFormatting.BLUE)); + lines.add(Component.literal( + " " + FormattingUtil.toFormattedTime(burnTime) + ).withStyle(ChatFormatting.GRAY)); + } + + lines.add(Component.translatable("tooltip.anvilcraft.burning_heater.fuel") + .withStyle(ChatFormatting.BLUE)); + ItemResource fuelResource = be.getItemHandler().getResource(0); + if (fuelResource.isEmpty()) { + lines.add(Component.translatable("tooltip.anvilcraft.burning_heater.fuel.none") + .withStyle(ChatFormatting.DARK_GRAY)); + } else { + int fuelCount = be.getItemHandler().getAmountAsInt(0); + ItemStack fuelStack = fuelResource.toStack(); + lines.add(Component.literal(" ") + .append(fuelStack.getHoverName()) + .append(" × " + fuelCount) + .withStyle(ChatFormatting.GRAY)); + } + + lines.add(Component.translatable("tooltip.anvilcraft.burning_heater.can_smelt") + .withStyle(ChatFormatting.BLUE)); + if (level == 2) { + lines.add(Component.translatable("tooltip.anvilcraft.burning_heater.can_smelt.yes") + .withStyle(ChatFormatting.GRAY)); + } else { + lines.add(Component.translatable("tooltip.anvilcraft.burning_heater.can_smelt.no") + .withStyle(ChatFormatting.DARK_GRAY)); + } + + return lines; + } + + @Override + public int priority() { + return 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaFluidInterfaceTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaFluidInterfaceTooltipProvider.java new file mode 100644 index 0000000000..f94cfc951b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaFluidInterfaceTooltipProvider.java @@ -0,0 +1,50 @@ +package dev.dubhe.anvilcraft.api.tooltip.impl; + +import dev.dubhe.anvilcraft.api.tooltip.providers.ITooltipProvider; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilFluidInterfaceBlockEntity; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; + +import java.util.ArrayList; +import java.util.List; + +public class CfaFluidInterfaceTooltipProvider extends ITooltipProvider.BlockEntityTooltipProvider { + @Override + public boolean accepts(BlockEntity value) { + return value instanceof CelestialForgingAnvilFluidInterfaceBlockEntity; + } + + @Override + public List tooltip(BlockEntity value) { + if (!(value instanceof CelestialForgingAnvilFluidInterfaceBlockEntity fluid)) return List.of(); + List lines = new ArrayList<>(); + ResourceHandler handler = fluid.getFluidHandler(); + boolean hasAny = false; + for (int i = 0; i < handler.size(); i++) { + FluidResource resource = handler.getResource(i); + if (!resource.isEmpty()) { + hasAny = true; + FluidStack stack = resource.toStack((int) handler.getAmountAsLong(i)); + lines.add(Component.literal(" · ") + .append(stack.getHoverName()) + .append(Component.literal(" " + (stack.getAmount() / 1000) + " B")) + .withStyle(ChatFormatting.GRAY)); + } + } + if (!hasAny) { + lines.add(Component.translatable("screen.anvilcraft.cfa.interface.empty") + .withStyle(ChatFormatting.DARK_GRAY)); + } + return lines; + } + + @Override + public int priority() { + return -1; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaLaserInterfaceTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaLaserInterfaceTooltipProvider.java new file mode 100644 index 0000000000..6c4463a688 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaLaserInterfaceTooltipProvider.java @@ -0,0 +1,74 @@ +package dev.dubhe.anvilcraft.api.tooltip.impl; + +import dev.dubhe.anvilcraft.api.tooltip.providers.ITooltipProvider; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLaserInterfaceBlockEntity; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.block.entity.BlockEntity; + +import java.util.ArrayList; +import java.util.List; + +public class CfaLaserInterfaceTooltipProvider extends ITooltipProvider.BlockEntityTooltipProvider { + @Override + public boolean accepts(BlockEntity value) { + return value instanceof CelestialForgingAnvilLaserInterfaceBlockEntity; + } + + @Override + public List tooltip(BlockEntity value) { + if (!(value instanceof CelestialForgingAnvilLaserInterfaceBlockEntity laser)) return List.of(); + List lines = new ArrayList<>(); + + int received = laser.getReceivedLaserLevel(); + int required = laser.getRequiredLaserLevel(); + boolean requiredGamma = laser.isRequiredGamma(); + boolean valid = laser.isLaserValid(); + boolean emittingGamma = laser.isEmittingGamma(); + int gammaLevel = laser.getGammaLevel(); + int laserLevel = laser.getLaserLevel(); + + if (received > 0) { + if (laser.isReceivedGamma()) { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.received_gamma", received) + .withStyle(ChatFormatting.DARK_PURPLE)); + } else { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.received", received) + .withStyle(ChatFormatting.RED)); + } + } else if (emittingGamma && gammaLevel > 0) { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.emitting_gamma", gammaLevel) + .withStyle(ChatFormatting.DARK_PURPLE)); + } else if (laserLevel > 0) { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.emitting", laserLevel) + .withStyle(ChatFormatting.RED)); + } else { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.no_laser") + .withStyle(ChatFormatting.DARK_GRAY)); + } + + if (required > 0) { + if (requiredGamma) { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.required_gamma", required) + .withStyle(ChatFormatting.YELLOW)); + } else { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.required", required) + .withStyle(ChatFormatting.YELLOW)); + } + if (valid) { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.valid") + .withStyle(ChatFormatting.GREEN)); + } else { + lines.add(Component.translatable("screen.anvilcraft.cfa.laser_interface.invalid") + .withStyle(ChatFormatting.RED)); + } + } + + return lines; + } + + @Override + public int priority() { + return -1; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaLogisticsInterfaceTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaLogisticsInterfaceTooltipProvider.java new file mode 100644 index 0000000000..27a1d7e22b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/CfaLogisticsInterfaceTooltipProvider.java @@ -0,0 +1,50 @@ +package dev.dubhe.anvilcraft.api.tooltip.impl; + +import dev.dubhe.anvilcraft.api.tooltip.providers.ITooltipProvider; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLogisticsInterfaceBlockEntity; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; + +import java.util.ArrayList; +import java.util.List; + +public class CfaLogisticsInterfaceTooltipProvider extends ITooltipProvider.BlockEntityTooltipProvider { + @Override + public boolean accepts(BlockEntity value) { + return value instanceof CelestialForgingAnvilLogisticsInterfaceBlockEntity; + } + + @Override + public List tooltip(BlockEntity value) { + if (!(value instanceof CelestialForgingAnvilLogisticsInterfaceBlockEntity logistics)) return List.of(); + List lines = new ArrayList<>(); + + ResourceHandler handler = logistics.getItemHandler(); + boolean hasAny = false; + for (int i = 0; i < handler.size(); i++) { + ItemResource resource = handler.getResource(i); + if (!resource.isEmpty()) { + hasAny = true; + ItemStack stack = resource.toStack(handler.getAmountAsInt(i)); + lines.add(Component.literal(" · ") + .append(stack.getHoverName()) + .append(Component.literal(" ×" + stack.getCount())) + .withStyle(ChatFormatting.GRAY)); + } + } + if (!hasAny) { + lines.add(Component.translatable("screen.anvilcraft.cfa.interface.empty") + .withStyle(ChatFormatting.DARK_GRAY)); + } + return lines; + } + + @Override + public int priority() { + return -1; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/ChargerTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/ChargerTooltipProvider.java index 756a2abcc2..dc6abee067 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/ChargerTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/ChargerTooltipProvider.java @@ -9,9 +9,11 @@ import dev.dubhe.anvilcraft.client.AnvilCraftClient; import dev.dubhe.anvilcraft.util.CompatUtil; import dev.dubhe.anvilcraft.util.FormattingUtil; +import dev.dubhe.anvilcraft.util.UnitUtil; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.level.block.entity.BlockEntity; import java.util.ArrayList; @@ -32,7 +34,7 @@ public List tooltip(BlockEntity value) { boolean overloaded = false; BlockPos pos = charger.getBlockPos(); if (charger.getBlockState().hasProperty(IPowerComponent.OVERLOAD)) { - overloaded = charger.getBlockState().getValues().getOrDefault(IPowerComponent.OVERLOAD, true).equals(Boolean.TRUE); + overloaded = charger.getBlockState().getValueOrElse(IPowerComponent.OVERLOAD, true).equals(Boolean.TRUE); } Optional powerGrids = SimplePowerGrid.findPowerGrid(pos); if (powerGrids.isEmpty()) return List.of(); @@ -71,6 +73,20 @@ public List tooltip(BlockEntity value) { FormattingUtil.toShadeProgress(progress, 5), String.valueOf(((int) (progress * 10000)) / 100.0) ).withStyle(ChatFormatting.GRAY)); + if (charger.isFeCharging()) { + int currentEnergy = charger.getTimeTotalCache() - charger.getTimeLeft(); + MutableComponent feLine = Component.literal(" ").withStyle(ChatFormatting.GRAY) + .append(UnitUtil.energyUnit(currentEnergy, false)) + .append(Component.literal(" / ").withStyle(ChatFormatting.GRAY)) + .append(UnitUtil.energyUnit(charger.getTimeTotalCache(), false)); + lines.add(feLine); + } else if (charger.getTimeTotalCache() > 0) { + lines.add(Component.translatable( + "tooltip.anvilcraft.working_progress.time", + FormattingUtil.toFormattedTime(charger.getTimeLeft()), + FormattingUtil.toFormattedTime(charger.getTimeTotalCache()) + ).withStyle(ChatFormatting.GRAY)); + } return lines; } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/DeflectionRingTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/DeflectionRingTooltipProvider.java index 1a43d37ae7..8c3b66898d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/DeflectionRingTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/DeflectionRingTooltipProvider.java @@ -1,7 +1,7 @@ package dev.dubhe.anvilcraft.api.tooltip.impl; -import dev.dubhe.anvilcraft.block.DeflectionRingBlock; import dev.dubhe.anvilcraft.block.entity.DeflectionRingBlockEntity; +import dev.dubhe.anvilcraft.block.power.ring.DeflectionRingBlock; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/DischargerTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/DischargerTooltipProvider.java new file mode 100644 index 0000000000..69a05340de --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/DischargerTooltipProvider.java @@ -0,0 +1,101 @@ +package dev.dubhe.anvilcraft.api.tooltip.impl; + +import dev.dubhe.anvilcraft.api.power.IPowerComponent; +import dev.dubhe.anvilcraft.api.power.PowerComponentInfo; +import dev.dubhe.anvilcraft.api.power.PowerComponentType; +import dev.dubhe.anvilcraft.api.power.SimplePowerGrid; +import dev.dubhe.anvilcraft.api.tooltip.providers.ITooltipProvider; +import dev.dubhe.anvilcraft.block.entity.DischargerBlockEntity; +import dev.dubhe.anvilcraft.client.AnvilCraftClient; +import dev.dubhe.anvilcraft.util.CompatUtil; +import dev.dubhe.anvilcraft.util.FormattingUtil; +import dev.dubhe.anvilcraft.util.UnitUtil; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.level.block.entity.BlockEntity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class DischargerTooltipProvider extends ITooltipProvider.BlockEntityTooltipProvider { + @Override + public boolean accepts(BlockEntity value) { + return value instanceof DischargerBlockEntity; + } + + @Override + public List tooltip(BlockEntity value) { + if (CompatUtil.HAS_JADE.get() && AnvilCraftClient.CONFIG.doNotShowTooltipWhenJadePresent) return List.of(); + if (!(value instanceof DischargerBlockEntity discharger)) return List.of(); + + final List lines = new ArrayList<>(); + BlockPos pos = discharger.getBlockPos(); + boolean overloaded = false; + if (discharger.getBlockState().hasProperty(IPowerComponent.OVERLOAD)) { + overloaded = discharger.getBlockState().getValueOrElse(IPowerComponent.OVERLOAD, true).equals(Boolean.TRUE); + } + Optional powerGrids = SimplePowerGrid.findPowerGrid(pos); + if (powerGrids.isEmpty()) return List.of(); + SimplePowerGrid grid = powerGrids.get(); + final Optional optional = grid.getInfoForPos(pos); + if (optional.isEmpty()) return List.of(); + PowerComponentInfo componentInfo = optional.get(); + overloaded |= grid.getConsume() > grid.getGenerate(); + PowerComponentType type = componentInfo.type(); + + if (overloaded) { + for (int i = 1; i <= 3; i++) { + lines.add(Component.translatable("tooltip.anvilcraft.grid_information.overloaded" + i)); + } + } + if (type == PowerComponentType.PRODUCER) { + lines.add(Component.translatable("tooltip.anvilcraft.grid_information.producer_stats").withStyle(ChatFormatting.BLUE)); + lines.add(Component.translatable("tooltip.anvilcraft.grid_information.output_power", componentInfo.produces()) + .withStyle(ChatFormatting.GRAY)); + } else if (type == PowerComponentType.CONSUMER) { + lines.add(Component.translatable("tooltip.anvilcraft.grid_information.consumer_stats").withStyle(ChatFormatting.BLUE)); + lines.add(Component.translatable("tooltip.anvilcraft.grid_information.input_power", componentInfo.consumes()) + .withStyle(ChatFormatting.GRAY)); + } + + lines.add(Component.translatable("tooltip.anvilcraft.grid_information.title").withStyle(ChatFormatting.BLUE)); + lines.add(Component.translatable("tooltip.anvilcraft.grid_information.total_consumed", grid.getConsume()) + .withStyle(ChatFormatting.GRAY)); + lines.add(Component.translatable("tooltip.anvilcraft.grid_information.total_generated", grid.getGenerate()) + .withStyle(ChatFormatting.GRAY)); + + // 放电器进度:从满衰减到空 (remaining / total) + int timeLeft = discharger.getTimeLeft(); + int timeTotalCache = discharger.getTimeTotalCache(); + double progress = discharger.getProgress(); + + lines.add(Component.translatable("tooltip.anvilcraft.working_progress.title").withStyle(ChatFormatting.BLUE)); + lines.add(Component.translatable( + "tooltip.anvilcraft.working_progress.progress", + FormattingUtil.toShadeProgress(progress, 5), + String.valueOf(((int) (progress * 10000)) / 100.0) + ).withStyle(ChatFormatting.GRAY)); + if (discharger.isFeDischarging()) { + MutableComponent feLine = Component.literal(" ").withStyle(ChatFormatting.GRAY) + .append(UnitUtil.energyUnit(timeLeft, false)) + .append(Component.literal(" / ").withStyle(ChatFormatting.GRAY)) + .append(UnitUtil.energyUnit(timeTotalCache, false)); + lines.add(feLine); + } else if (timeTotalCache > 0) { + lines.add(Component.translatable( + "tooltip.anvilcraft.working_progress.time", + FormattingUtil.toFormattedTime(timeLeft), + FormattingUtil.toFormattedTime(timeTotalCache) + ).withStyle(ChatFormatting.GRAY)); + } + return lines; + } + + @Override + public int priority() { + return 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeatCollectorTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeatCollectorTooltipProvider.java index 3a345dcab2..24ecd1ebe1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeatCollectorTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeatCollectorTooltipProvider.java @@ -37,8 +37,8 @@ public List tooltip(BlockEntity e) { if (player != null && player.isShiftKeyDown()) { original = true; } - if (CompatUtil.HAS_JADE.get() && AnvilCraftClient.CONFIG.doNotShowTooltipWhenJadePresent) return null; - if (!(e instanceof HeatCollectorBlockEntity heatCollector)) return null; + if (CompatUtil.HAS_JADE.get() && AnvilCraftClient.CONFIG.doNotShowTooltipWhenJadePresent) return List.of(); + if (!(e instanceof HeatCollectorBlockEntity heatCollector)) return List.of(); if (!heatCollector.isWorking()) { return List.of( Component.translatable("tooltip.anvilcraft.heat_collector.not_work").withStyle(ChatFormatting.RED), @@ -48,14 +48,14 @@ public List tooltip(BlockEntity e) { boolean overloaded = false; BlockPos pos; if (e.getBlockState().hasProperty(IPowerComponent.OVERLOAD)) { - overloaded = e.getBlockState().getValues().getOrDefault(IPowerComponent.OVERLOAD, true).equals(Boolean.TRUE); + overloaded = e.getBlockState().getValueOrElse(IPowerComponent.OVERLOAD, true).equals(Boolean.TRUE); } pos = e.getBlockPos(); Optional powerGrids = SimplePowerGrid.findPowerGrid(pos); if (powerGrids.isEmpty()) return List.of(); SimplePowerGrid grid = powerGrids.get(); final Optional optional = grid.getInfoForPos(pos); - if (optional.isEmpty()) return null; + if (optional.isEmpty()) return List.of(); PowerComponentInfo componentInfo = optional.get(); overloaded |= grid.getConsume() > grid.getGenerate(); final List lines = new ArrayList<>(); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeatableBlockTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeatableBlockTooltipProvider.java index dcc234a721..3682b62d30 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeatableBlockTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeatableBlockTooltipProvider.java @@ -22,7 +22,7 @@ public boolean accepts(BlockEntity entity) { @Override public List tooltip(BlockEntity entity) { - if (CompatUtil.HAS_JADE.get() && AnvilCraftClient.CONFIG.doNotShowTooltipWhenJadePresent) return null; + if (CompatUtil.HAS_JADE.get() && AnvilCraftClient.CONFIG.doNotShowTooltipWhenJadePresent) return List.of(); List components = new ArrayList<>(); HeatRecorder.getTier(entity.getLevel(), entity.getBlockPos(), entity.getBlockState()) .ifPresent(tier -> components.add(ITooltipProvider.withIndentAndMerge(Component.translatable( diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeliostatsTooltip.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeliostatsTooltip.java index 47ce3b9445..dc4e6b798f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeliostatsTooltip.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeliostatsTooltip.java @@ -4,9 +4,9 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import dev.dubhe.anvilcraft.api.tooltip.TooltipRenderHelper; import dev.dubhe.anvilcraft.api.tooltip.providers.IHandHeldItemTooltipProvider; -import dev.dubhe.anvilcraft.block.item.HeliostatsItem; import dev.dubhe.anvilcraft.init.block.ModBlocks; -import net.minecraft.client.gui.GuiGraphics; +import dev.dubhe.anvilcraft.item.block.HeliostatsItem; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.AABB; @@ -37,7 +37,7 @@ public void render( } @Override - public void renderTooltip(GuiGraphics guiGraphics, int screenWidth, int screenHeight) { + public void renderTooltip(GuiGraphicsExtractor graphics, int screenWidth, int screenHeight) { } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeliostatsTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeliostatsTooltipProvider.java index 12b1ea4efc..59a10ff140 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeliostatsTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/HeliostatsTooltipProvider.java @@ -20,7 +20,7 @@ public boolean accepts(BlockEntity entity) { @Override public List tooltip(BlockEntity e) { - if (!(e instanceof HeliostatsBlockEntity heliostatsBlockEntity)) return null; + if (!(e instanceof HeliostatsBlockEntity heliostatsBlockEntity)) return List.of(); final List lines = new ArrayList<>(); lines.add(Component.translatable("tooltip.anvilcraft.heliostats.not_work")); lines.add(Component.translatable(heliostatsBlockEntity.getWorkResult().getTranslateKey())); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/InjectedBlockEntityTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/InjectedBlockEntityTooltipProvider.java index 56ca5f3f30..36756a6dc1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/InjectedBlockEntityTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/InjectedBlockEntityTooltipProvider.java @@ -28,13 +28,13 @@ protected Optional cast(BlockEntity value) { @Override public boolean accepts(BlockEntity value) { - return cast(value).isPresent(); + return this.cast(value).isPresent(); } @Override public List tooltip(BlockEntity value) { if (CompatUtil.HAS_JADE.get() && AnvilCraftClient.CONFIG.doNotShowTooltipWhenJadePresent) return List.of(); - return cast(value).map(ITooltipProviderExtension::anvilcraft$getTooltip).orElse(List.of()); + return this.cast(value).map(ITooltipProviderExtension::anvilcraft$getTooltip).orElse(List.of()); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/PowerComponentTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/PowerComponentTooltipProvider.java index 1e0eeba7f3..b253f7cdce 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/PowerComponentTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/PowerComponentTooltipProvider.java @@ -5,9 +5,9 @@ import dev.dubhe.anvilcraft.api.power.PowerComponentType; import dev.dubhe.anvilcraft.api.power.SimplePowerGrid; import dev.dubhe.anvilcraft.api.tooltip.providers.ITooltipProvider; -import dev.dubhe.anvilcraft.block.RemoteTransmissionPoleBlock; -import dev.dubhe.anvilcraft.block.TransmissionPoleBlock; import dev.dubhe.anvilcraft.block.multipart.AbstractMultiPartBlock; +import dev.dubhe.anvilcraft.block.power.transmitting.RemoteTransmissionPoleBlock; +import dev.dubhe.anvilcraft.block.power.transmitting.TransmissionPoleBlock; import dev.dubhe.anvilcraft.client.AnvilCraftClient; import dev.dubhe.anvilcraft.util.CompatUtil; import dev.dubhe.anvilcraft.util.UnitUtil; @@ -53,7 +53,7 @@ public List tooltip(BlockEntity e) { } } else if (e instanceof IPowerComponent) { if (e.getBlockState().hasProperty(IPowerComponent.OVERLOAD)) { - overloaded = e.getBlockState().getValues().getOrDefault(IPowerComponent.OVERLOAD, true).equals(Boolean.TRUE); + overloaded = e.getBlockState().getValueOrElse(IPowerComponent.OVERLOAD, true).equals(Boolean.TRUE); } pos = e.getBlockPos(); } else { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/PropelPistonTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/PropelPistonTooltipProvider.java index 96fc158a96..36156f0f89 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/PropelPistonTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/PropelPistonTooltipProvider.java @@ -1,8 +1,8 @@ package dev.dubhe.anvilcraft.api.tooltip.impl; import dev.dubhe.anvilcraft.api.tooltip.providers.ITooltipProvider; -import dev.dubhe.anvilcraft.block.PropelPiston; import dev.dubhe.anvilcraft.block.entity.PropelPistonBlockEntity; +import dev.dubhe.anvilcraft.block.laser.PropelPistonBlock; import dev.dubhe.anvilcraft.util.UnitUtil; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; @@ -28,7 +28,7 @@ public List tooltip(BlockEntity blockEntity) { BlockPos pos = blockEntity.getBlockPos(); if (level != null) { BlockState state = level.getBlockState(pos); - if (state.getValue(PropelPiston.MOVING)) { + if (state.getValue(PropelPistonBlock.MOVING)) { return List.of(); } } @@ -40,7 +40,7 @@ public List tooltip(BlockEntity blockEntity) { List tooltips = new ArrayList<>(); if (blockEntity instanceof PropelPistonBlockEntity propelPistonBlockEntity) { int storedEnergy = propelPistonBlockEntity.getStoredEnergy(); - String count = String.format("%.0f", Math.ceil(storedEnergy / 5f)); + String count = String.format("%.0f", Math.ceil(storedEnergy / 5F)); tooltips.add(Component.translatable("tooltip.anvilcraft.propel_piston.state").withStyle(ChatFormatting.BLUE)); tooltips.add(Component.translatable("tooltip.anvilcraft.propel_piston.remaining_energy", UnitUtil.energyUnit(storedEnergy, original)) diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/RubyPrismTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/RubyPrismTooltipProvider.java index b4d449a86b..81a06907ad 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/RubyPrismTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/RubyPrismTooltipProvider.java @@ -21,12 +21,12 @@ public boolean accepts(BlockEntity entity) { @Override public List tooltip(BlockEntity e) { if (CompatUtil.HAS_JADE.get() && AnvilCraftClient.CONFIG.doNotShowTooltipWhenJadePresent) { - return null; + return List.of(); } if (e instanceof RubyPrismBlockEntity rubyPrismBlockEntity) { return List.of(Component.translatable("tooltip.anvilcraft.jade.ruby_prism.power", rubyPrismBlockEntity.getLaserLevel())); } - return null; + return List.of(); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/package-info.java index 63439b5404..a755ade20d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/impl/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.tooltip.impl; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/package-info.java index 5fb05c664c..fcff87897a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.tooltip; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IAffectRangeProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IAffectRangeProvider.java index bb95ac71f4..b4da892377 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IAffectRangeProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IAffectRangeProvider.java @@ -3,9 +3,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.shapes.VoxelShape; -/** - * 作用范围提供器 - */ +/// 作用范围提供器 public interface IAffectRangeProvider { boolean accepts(BlockEntity entity); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IHandHeldItemTooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IHandHeldItemTooltipProvider.java index c223aa4e5f..ce3cc60b8e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IHandHeldItemTooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IHandHeldItemTooltipProvider.java @@ -2,12 +2,10 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.world.item.ItemStack; -/** - * 手持物品的tooltip - */ +/// 手持物品的tooltip public interface IHandHeldItemTooltipProvider { boolean accepts(ItemStack itemStack); @@ -20,7 +18,7 @@ void render( double camZ ); - void renderTooltip(GuiGraphics guiGraphics, int screenWidth, int screenHeight); + void renderTooltip(GuiGraphicsExtractor graphics, int screenWidth, int screenHeight); int priority(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IHasAffectRange.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IHasAffectRange.java index d71a2512d8..fd72189901 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IHasAffectRange.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/IHasAffectRange.java @@ -1,12 +1,9 @@ package dev.dubhe.anvilcraft.api.tooltip.providers; import net.minecraft.world.phys.AABB; +import org.jspecify.annotations.Nullable; -import javax.annotation.Nullable; - -/** - * 拥有作用范围的方块实体 - */ +/// 拥有作用范围的方块实体 public interface IHasAffectRange { @Nullable AABB shape(); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/ITooltipProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/ITooltipProvider.java index d8417b2097..f00815df0c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/ITooltipProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/ITooltipProvider.java @@ -1,6 +1,7 @@ package dev.dubhe.anvilcraft.api.tooltip.providers; import com.google.errorprone.annotations.DoNotCall; +import com.mojang.logging.annotations.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -13,9 +14,7 @@ import java.util.List; -/** - * 头戴铁砧锤时显示的tooltip - */ +/// 头戴铁砧锤时显示的tooltip public interface ITooltipProvider { MutableComponent INDENTATION = Component.literal(" "); @@ -27,6 +26,7 @@ public interface ITooltipProvider { int priority(); + @MethodsReturnNonnullByDefault abstract class BlockTooltipProvider implements ITooltipProvider> { public BlockTooltipProvider() { } @@ -35,13 +35,13 @@ public BlockTooltipProvider() { public abstract boolean accepts(Level level, BlockPos pos, BlockState value); public boolean accepts(Triple value) { - return accepts(value.getLeft(), value.getMiddle(), value.getRight()); + return this.accepts(value.getLeft(), value.getMiddle(), value.getRight()); } @DoNotCall @Override public List tooltip(Triple value) { - return tooltip(value.getLeft(), value.getMiddle(), value.getRight()); + return this.tooltip(value.getLeft(), value.getMiddle(), value.getRight()); } public abstract List tooltip(Level level, BlockPos pos, BlockState value); @@ -49,7 +49,7 @@ public List tooltip(Triple value) { @DoNotCall @Override public ItemStack icon(Triple value) { - return icon(value.getLeft(), value.getMiddle(), value.getRight()); + return this.icon(value.getLeft(), value.getMiddle(), value.getRight()); } public ItemStack icon(Level level, BlockPos pos, BlockState value) { @@ -59,6 +59,7 @@ public ItemStack icon(Level level, BlockPos pos, BlockState value) { public abstract int priority(); } + @MethodsReturnNonnullByDefault abstract class BlockEntityTooltipProvider implements ITooltipProvider { public BlockEntityTooltipProvider() { } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/package-info.java index 0c9e03aac5..cadb718032 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/tooltip/providers/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.tooltip.providers; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/totem/TotemManager.java b/src/main/java/dev/dubhe/anvilcraft/api/totem/TotemManager.java deleted file mode 100644 index 8a39dca6d9..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/totem/TotemManager.java +++ /dev/null @@ -1,35 +0,0 @@ -package dev.dubhe.anvilcraft.api.totem; - -import dev.dubhe.anvilcraft.api.totem.handler.AmuletBoxHandler; -import dev.dubhe.anvilcraft.api.totem.handler.TotemHandler; -import dev.dubhe.anvilcraft.api.totem.handler.TotemOfRageHandler; -import dev.dubhe.anvilcraft.api.totem.handler.TotemOfRecoveryHandler; -import dev.dubhe.anvilcraft.api.totem.handler.TotemOfUndyingHandler; -import dev.dubhe.anvilcraft.init.item.ModItems; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import lombok.Getter; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Items; - -import java.util.Map; - -/** - * 用于管理图腾 - */ -public class TotemManager { - public static final TotemManager INSTANCE = new TotemManager(); - - @Getter - private final Map totemMap = new Object2ObjectOpenHashMap<>(); - - private TotemManager() { - registerTotem(ModItems.AMULET_BOX.asItem(), new AmuletBoxHandler()); - registerTotem(Items.TOTEM_OF_UNDYING, new TotemOfUndyingHandler()); - registerTotem(ModItems.TOTEM_OF_RECOVERY.get(), new TotemOfRecoveryHandler()); - registerTotem(ModItems.TOTEM_OF_RAGE.get(), new TotemOfRageHandler()); - } - - public void registerTotem(Item item, TotemHandler handler) { - totemMap.put(item, handler); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/AmuletBoxHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/AmuletBoxHandler.java deleted file mode 100644 index 350171d262..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/AmuletBoxHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -package dev.dubhe.anvilcraft.api.totem.handler; - -import dev.dubhe.anvilcraft.api.totem.TotemManager; -import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.item.property.component.BoxContents; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; - -import java.util.List; -import java.util.Map; - -public class AmuletBoxHandler implements TotemHandler { - @Override - public boolean canExecute(DamageSource damageSource, LivingEntity entity, ItemStack totemItem) { - return !totemItem.getOrDefault(ModComponents.BOX_CONTENTS, BoxContents.EMPTY).totems().isEmpty(); - } - - @Override - public boolean execute(DamageSource damageSource, LivingEntity entity, ItemStack totemItem) { - Map totemMap = TotemManager.INSTANCE.getTotemMap(); - List totems = totemItem.getOrDefault(ModComponents.BOX_CONTENTS, BoxContents.EMPTY).totems(); - if (!totems.isEmpty()) { - for (Item item : totemMap.keySet()) { - if (totems.getFirst().is(item)) { - return totemMap.get(item).execute(damageSource, entity, totems.getFirst()); - } - } - } - return false; - } - - @SuppressWarnings("DataFlowIssue") - @Override - public void shrink(ItemStack totemItem) { - BoxContents boxContents = totemItem.get(ModComponents.BOX_CONTENTS); - BoxContents.Mutable mutable = boxContents.mutable(); - mutable.popTotem(); - totemItem.set(ModComponents.BOX_CONTENTS, mutable.immutable()); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemHandler.java deleted file mode 100644 index 027b81d07c..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -package dev.dubhe.anvilcraft.api.totem.handler; - -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; - -/** - * 图腾触发时的事件 - */ -public interface TotemHandler { - /** - * 判断图腾是否可触发 - * - * @param damageSource 伤害来源 - * @param entity 持有图腾的实体 - * @param totemItem 图腾物品 - * @return 是否执行成功 - */ - default boolean canExecute(DamageSource damageSource, LivingEntity entity, ItemStack totemItem) { - return true; - } - - /** - * 图腾触发时执行 - * - * @param damageSource 伤害来源 - * @param entity 持有图腾的实体 - * @param totemItem 图腾物品 - * @return 是否执行成功 - */ - boolean execute(DamageSource damageSource, LivingEntity entity, ItemStack totemItem); - - /** - * 减少图腾物品数量 - * - * @param totemItem 图腾物品 - */ - void shrink(ItemStack totemItem); -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfRageHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfRageHandler.java deleted file mode 100644 index 9367f5c63b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfRageHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -package dev.dubhe.anvilcraft.api.totem.handler; - -import dev.dubhe.anvilcraft.init.ModMobEffects; -import dev.dubhe.anvilcraft.init.item.ModItems; -import net.minecraft.advancements.CriteriaTriggers; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.tags.DamageTypeTags; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.gameevent.GameEvent; - -public class TotemOfRageHandler implements TotemHandler { - @Override - public boolean execute(DamageSource damageSource, LivingEntity entity, ItemStack totemItem) { - if (!damageSource.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { - if (entity instanceof ServerPlayer player) { - player.getFoodData().setFoodLevel(20); - CriteriaTriggers.USED_TOTEM.trigger(player, ModItems.TOTEM_OF_RAGE.asStack()); - entity.gameEvent(GameEvent.ITEM_INTERACT_FINISH); - } - entity.setHealth(entity.getMaxHealth()); - entity.removeAllEffects(); - entity.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 1200, 4)); - entity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 1200, 2)); - entity.addEffect(new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 2)); - entity.addEffect(new MobEffectInstance(ModMobEffects.INVULNERABLE, 1200, 0)); - entity.addEffect(new MobEffectInstance(ModMobEffects.RAGE, 1200, 0)); - entity.level().broadcastEntityEvent(entity, (byte) 37); - - return true; - } - return false; - } - - @Override - public void shrink(ItemStack totemItem) { - totemItem.shrink(1); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfRecoveryHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfRecoveryHandler.java deleted file mode 100644 index 5bfc8c5fa9..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfRecoveryHandler.java +++ /dev/null @@ -1,68 +0,0 @@ -package dev.dubhe.anvilcraft.api.totem.handler; - -import dev.dubhe.anvilcraft.init.item.ModItems; -import dev.dubhe.anvilcraft.item.RecoveryPearl; -import net.minecraft.advancements.CriteriaTriggers; -import net.minecraft.core.BlockPos; -import net.minecraft.core.GlobalPos; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.stats.Stats; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.damagesource.DamageTypes; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.gameevent.GameEvent; -import net.neoforged.neoforge.common.EffectCures; - -import java.util.Optional; - -public class TotemOfRecoveryHandler implements TotemHandler { - @Override - public boolean execute(DamageSource damageSource, LivingEntity entity, ItemStack totemItem) { - if (!damageSource.is(DamageTypes.GENERIC_KILL)) { - if (entity instanceof ServerPlayer player) { - player.fallDistance = 0; - player.awardStat(Stats.ITEM_USED.get(ModItems.TOTEM_OF_RECOVERY.get()), 1); - CriteriaTriggers.USED_TOTEM.trigger(player, ModItems.TOTEM_OF_RECOVERY.asStack()); - entity.gameEvent(GameEvent.ITEM_INTERACT_FINISH); - player.getInventory().add(ModItems.RECOVERY_PEARL.asStack()); - ResourceKey deathDimension = player.level().dimension(); - BlockPos deathPos = player.getOnPos(); - if (deathDimension == Level.OVERWORLD) { - if (deathPos.getY() < -64) { - deathPos = deathPos.atY(-63); - } - } else { - if (deathPos.getY() < 0) { - deathPos = deathPos.atY(1); - } - } - deathPos = deathPos.atY(deathPos.getY() + 1); - player.setLastDeathLocation(Optional.of(GlobalPos.of(deathDimension, deathPos))); - ResourceKey respawnDimension = player.getRespawnDimension(); - BlockPos respawnPos = player.getRespawnPosition() == null - ? player.level().getSharedSpawnPos() - : player.getRespawnPosition(); - RecoveryPearl.crossDimensionTeleportTo(respawnDimension, player, respawnPos); - } - entity.setHealth(1.0f); - entity.removeEffectsCuredBy(EffectCures.PROTECTED_BY_TOTEM); - entity.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 900, 1)); - entity.addEffect(new MobEffectInstance(MobEffects.ABSORPTION, 100, 1)); - entity.addEffect(new MobEffectInstance(MobEffects.FIRE_RESISTANCE, 800, 0)); - entity.level().broadcastEntityEvent(entity, (byte) 36); - - return true; - } - return false; - } - - @Override - public void shrink(ItemStack totemItem) { - totemItem.shrink(1); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfUndyingHandler.java b/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfUndyingHandler.java deleted file mode 100644 index e98a9b6386..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/TotemOfUndyingHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package dev.dubhe.anvilcraft.api.totem.handler; - -import net.minecraft.advancements.CriteriaTriggers; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.stats.Stats; -import net.minecraft.tags.DamageTypeTags; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.gameevent.GameEvent; -import net.neoforged.neoforge.common.EffectCures; - -public class TotemOfUndyingHandler implements TotemHandler { - @Override - public boolean execute(DamageSource damageSource, LivingEntity entity, ItemStack totemItem) { - if (!damageSource.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { - if (entity instanceof ServerPlayer player) { - player.awardStat(Stats.ITEM_USED.get(Items.TOTEM_OF_UNDYING), 1); - CriteriaTriggers.USED_TOTEM.trigger(player, Items.TOTEM_OF_UNDYING.getDefaultInstance()); - entity.gameEvent(GameEvent.ITEM_INTERACT_FINISH); - } - entity.setHealth(1.0f); - entity.removeEffectsCuredBy(EffectCures.PROTECTED_BY_TOTEM); - entity.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 900, 1)); - entity.addEffect(new MobEffectInstance(MobEffects.ABSORPTION, 100, 1)); - entity.addEffect(new MobEffectInstance(MobEffects.FIRE_RESISTANCE, 800, 0)); - entity.level().broadcastEntityEvent(entity, (byte) 35); - return true; - } - return false; - } - - @Override - public void shrink(ItemStack totemItem) { - totemItem.shrink(1); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/package-info.java deleted file mode 100644 index 450e1da82a..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/totem/handler/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.api.totem.handler; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/totem/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/totem/package-info.java deleted file mode 100644 index 7c4f9b0ed5..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/api/totem/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.api.totem; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/uuid/CreateOnFirstUuidProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/uuid/CreateOnFirstUuidProvider.java index 446662f58a..2f49b9e75a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/uuid/CreateOnFirstUuidProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/uuid/CreateOnFirstUuidProvider.java @@ -19,12 +19,10 @@ public CreateOnFirstUuidProvider() { this.id = new Lazy<>(UUID::randomUUID); } - /** - * 构建一个首次调用时创建UUID提供器 - * - * @param id 自定义UUID提供器 - * @apiNote 不建议使用任何非常量组成提供器 - */ + /// 构建一个首次调用时创建UUID提供器 + /// + /// @param id 自定义UUID提供器 + /// @apiNote 不建议使用任何非常量组成提供器 public CreateOnFirstUuidProvider(Supplier id) { this.id = new Lazy<>(id); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/uuid/IUuidProvider.java b/src/main/java/dev/dubhe/anvilcraft/api/uuid/IUuidProvider.java index 3da70281dd..b10e4c2392 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/uuid/IUuidProvider.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/uuid/IUuidProvider.java @@ -2,7 +2,8 @@ import com.mojang.serialization.Codec; import dev.anvilcraft.lib.v2.util.ISerializer; -import dev.dubhe.anvilcraft.init.ModRegistries; +import dev.dubhe.anvilcraft.init.registry.ModRegistries; +import dev.dubhe.anvilcraft.init.registry.ModRegistryKeys; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; @@ -12,10 +13,10 @@ import java.util.function.Supplier; public interface IUuidProvider extends Supplier { - Codec CODEC = Codec.lazyInitialized(() -> ModRegistries.UUID_PROVIDER_TYPE_REGISTRY + Codec CODEC = Codec.lazyInitialized(() -> ModRegistries.UUID_PROVIDER_TYPE .byNameCodec().dispatch(IUuidProvider::getType, Type::codec)); StreamCodec STREAM_CODEC = StreamCodec.recursive( - streamCodec -> ByteBufCodecs.registry(ModRegistries.UUID_PROVIDER_TYPE_KEY) + streamCodec -> ByteBufCodecs.registry(ModRegistryKeys.UUID_PROVIDER_TYPE) .dispatch(IUuidProvider::getType, Type::streamCodec)); @Override @@ -31,11 +32,9 @@ default Optional optionalGet() { return this.canGet() ? Optional.of(this.get()) : Optional.empty(); } - /** - * 获取该UUID提供器的类型。 - * - * @return 该UUID提供器的类型 - */ + /// 获取该UUID提供器的类型。 + /// + /// @return 该UUID提供器的类型 IUuidProvider.Type getType(); interface Type extends ISerializer { diff --git a/src/main/java/dev/dubhe/anvilcraft/api/uuid/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/uuid/package-info.java index c6b60d36be..dbb3b8e964 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/uuid/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/uuid/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.uuid; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/world/load/LevelLoadManager.java b/src/main/java/dev/dubhe/anvilcraft/api/world/load/LevelLoadManager.java index 8005fb78bf..e5651329a2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/world/load/LevelLoadManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/world/load/LevelLoadManager.java @@ -14,13 +14,11 @@ public class LevelLoadManager { private static final Deque lazyCalls = new ArrayDeque<>(); private static boolean serverStarted = false; - /** - * 注册区块区域 - * - * @param centerPos 中心坐标 - * @param loadChuckData 区块区域数据 - * @param level 世界 - */ + /// 注册区块区域 + /// + /// @param centerPos 中心坐标 + /// @param loadChuckData 区块区域数据 + /// @param level 世界 public static void register(BlockPos centerPos, LoadChuckData loadChuckData, ServerLevel level) { if (LEVEL_LOAD_CHUCK_AREA_MAP.containsKey(centerPos)) return; LEVEL_LOAD_CHUCK_AREA_MAP.put(centerPos, loadChuckData); @@ -46,12 +44,10 @@ public static void notifyServerStarted() { } } - /** - * 取消注册 - * - * @param centerPos 中心坐标 - * @param level 世界 - */ + /// 取消注册 + /// + /// @param centerPos 中心坐标 + /// @param level 世界 public static void unregister(BlockPos centerPos, Level level) { if (!LEVEL_LOAD_CHUCK_AREA_MAP.containsKey(centerPos)) return; LEVEL_LOAD_CHUCK_AREA_MAP.get(centerPos).markRemoved(); diff --git a/src/main/java/dev/dubhe/anvilcraft/api/world/load/LoadChuckData.java b/src/main/java/dev/dubhe/anvilcraft/api/world/load/LoadChuckData.java index c67fdb17a7..bc5322548a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/world/load/LoadChuckData.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/world/load/LoadChuckData.java @@ -33,14 +33,12 @@ private LoadChuckData( this.serverLevel = serverLevel; } - /** - * 创建强加载区块区域数据 - * - * @param level 加载区域等级, 既边长为(level*2+1)区块的加载区域 - * @param centerPos 加载区中心 - * @param isNeedRandomTick 是否需要随机刻加载 - * @return 强加载区块区域数据 - */ + /// 创建强加载区块区域数据 + /// + /// @param level 加载区域等级, 既边长为(level*2+1)区块的加载区域 + /// @param centerPos 加载区中心 + /// @param isNeedRandomTick 是否需要随机刻加载 + /// @return 强加载区块区域数据 public static LoadChuckData createLoadChuckData( int level, BlockPos centerPos, @@ -48,25 +46,23 @@ public static LoadChuckData createLoadChuckData( ServerLevel serverLevel ) { List chunkPosList = new ArrayList<>(); - ChunkPos centerChunkPos = new ChunkPos(centerPos); - for (int x = centerChunkPos.x - level; x <= centerChunkPos.x + level; x++) { - for (int z = centerChunkPos.z - level; z <= centerChunkPos.z + level; z++) { + ChunkPos centerChunkPos = ChunkPos.containing(centerPos); + for (int x = centerChunkPos.x() - level; x <= centerChunkPos.x() + level; x++) { + for (int z = centerChunkPos.z() - level; z <= centerChunkPos.z() + level; z++) { chunkPosList.add(new ChunkPos(x, z)); } } return new LoadChuckData(centerPos, chunkPosList, isNeedRandomTick, level, serverLevel); } - /** - * 加载区块 - */ + /// 加载区块 public void apply(ServerLevel level) { LevelLoadManager.lazy(() -> { if (this.isNeedRandomTick) { RandomChuckTickLoadManager.register(this.centerPos, this); } - for (ChunkPos chunkPos : chunkPosList) { - level.setChunkForced(chunkPos.x, chunkPos.z, true); + for (ChunkPos chunkPos : this.chunkPosList) { + level.setChunkForced(chunkPos.x(), chunkPos.z(), true); } }); } @@ -75,16 +71,14 @@ public void markRemoved() { this.removed = true; } - /** - * 取消加载区块 - */ + /// 取消加载区块 public void discard(ServerLevel level) { LevelLoadManager.lazy(() -> { if (this.isNeedRandomTick) { RandomChuckTickLoadManager.unregister(this.centerPos); } - for (ChunkPos chunkPos : chunkPosList) { - level.setChunkForced(chunkPos.x, chunkPos.z, false); + for (ChunkPos chunkPos : this.chunkPosList) { + level.setChunkForced(chunkPos.x(), chunkPos.z(), false); } }); } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/world/load/RandomChuckTickLoadManager.java b/src/main/java/dev/dubhe/anvilcraft/api/world/load/RandomChuckTickLoadManager.java index b17aad4b0f..3971d93803 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/world/load/RandomChuckTickLoadManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/world/load/RandomChuckTickLoadManager.java @@ -4,7 +4,7 @@ import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.gamerules.GameRules; import java.util.HashMap; import java.util.Map; @@ -22,18 +22,16 @@ public static void unregister(BlockPos centerPos) { RANDOM_TICK_LOAD_CHUCK_AREA_MAP.remove(centerPos); } - /** - * tick - */ + /// tick public static void tick() { for (LoadChuckData loadChuckData : RANDOM_TICK_LOAD_CHUCK_AREA_MAP.values()) { for (ChunkPos chunkPos : loadChuckData.getChunkPosList()) { ServerLevel serverLevel = loadChuckData.getServerLevel(); ChunkMap chunkMap = serverLevel.getChunkSource().chunkMap; - if (chunkMap.updatingChunkMap.containsKey(chunkPos.toLong())) { + if (chunkMap.updatingChunkMap.containsKey(chunkPos.pack())) { serverLevel.tickChunk( - serverLevel.getChunk(chunkPos.x, chunkPos.z), - serverLevel.getServer().getGameRules().getInt(GameRules.RULE_RANDOMTICKING) + serverLevel.getChunk(chunkPos.x(), chunkPos.z()), + serverLevel.getServer().getGameRules().get(GameRules.RANDOM_TICK_SPEED) ); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/api/world/load/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/world/load/package-info.java index adb019bdf8..01379b2497 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/world/load/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/world/load/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.world.load; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/api/world/package-info.java b/src/main/java/dev/dubhe/anvilcraft/api/world/package-info.java index fb17cff00e..79e224c996 100644 --- a/src/main/java/dev/dubhe/anvilcraft/api/world/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/api/world/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.api.world; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/AbstractCakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/AbstractCakeBlock.java deleted file mode 100644 index 62bb079f8b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/AbstractCakeBlock.java +++ /dev/null @@ -1,94 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.anvilcraft.lib.v2.util.Util; -import dev.dubhe.anvilcraft.util.PlayerUtil; -import net.minecraft.core.BlockPos; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.gameevent.GameEvent; -import net.minecraft.world.level.material.PushReaction; -import net.minecraft.world.phys.BlockHitResult; -import net.neoforged.neoforge.common.ItemAbilities; - -import java.util.function.Function; - -public class AbstractCakeBlock extends Block { - public AbstractCakeBlock(Properties properties) { - super(properties.pushReaction(PushReaction.NORMAL)); - } - - @Override - @SuppressWarnings("RedundantMethodOverride") - protected InteractionResult useWithoutItem( - BlockState state, - Level level, - BlockPos pos, - Player player, - BlockHitResult hitResult - ) { - return InteractionResult.PASS; - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - ItemStack itemStack = player.getItemInHand(hand); - if (!(itemStack.getItem().canPerformAction(itemStack, ItemAbilities.SHOVEL_DIG))) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - if (level.isClientSide) { - if (eat(level, pos, player, getFoodLevel(), getSaturationLevel(), Util.interactionResultConverter()).consumesAction()) { - return ItemInteractionResult.SUCCESS; - } - - if (itemStack.isEmpty()) { - return ItemInteractionResult.CONSUME; - } - } else { - ItemInteractionResult itemInteractionResult = - eat(level, pos, player, getFoodLevel(), getSaturationLevel(), Util.interactionResultConverter()); - if (itemInteractionResult == ItemInteractionResult.SUCCESS) itemStack.hurtAndBreak(1, player, PlayerUtil.handToSlot(hand)); - return itemInteractionResult; - } - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - - private static T eat( - LevelAccessor level, - BlockPos pos, - Player player, - int foodLevel, - float saturationLevel, - Function converter) { - if (!player.canEat(false)) { - return converter.apply(InteractionResult.PASS); - } else { - player.getFoodData().eat(foodLevel, saturationLevel); - level.removeBlock(pos, false); - level.gameEvent(player, GameEvent.BLOCK_DESTROY, pos); - return converter.apply(InteractionResult.SUCCESS); - } - } - - public int getFoodLevel() { - return 0; - } - - public float getSaturationLevel() { - return 0; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BerryCakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/BerryCakeBlock.java deleted file mode 100644 index a5738832db..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/BerryCakeBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -public class BerryCakeBlock extends AbstractCakeBlock { - - public BerryCakeBlock(Properties properties) { - super(properties); - } - - @Override - public int getFoodLevel() { - return 14; - } - - @Override - public float getSaturationLevel() { - return 0.6F; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BerryCreamBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/BerryCreamBlock.java deleted file mode 100644 index e28a07f088..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/BerryCreamBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -public class BerryCreamBlock extends AbstractCakeBlock { - - public BerryCreamBlock(Properties properties) { - super(properties); - } - - @Override - public int getFoodLevel() { - return 8; - } - - @Override - public float getSaturationLevel() { - return 0.4F; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BurningHeaterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/BurningHeaterBlock.java new file mode 100644 index 0000000000..2e952aa5a0 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/BurningHeaterBlock.java @@ -0,0 +1,116 @@ +package dev.dubhe.anvilcraft.block; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.entity.BurningHeaterBlockEntity; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.entity.ModDamageTypes; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +@NullMarked +public class BurningHeaterBlock extends BaseEntityBlock implements IHammerRemovable { + /** + * 燃烧等级:0=熄灭,1=阴燃(0-300s),2=点燃(≥300s) + */ + public static final IntegerProperty LEVEL = IntegerProperty.create("level", 0, 2); + + public BurningHeaterBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, 0)); + } + + @Override + protected MapCodec codec() { + return simpleCodec(BurningHeaterBlock::new); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new BurningHeaterBlockEntity(ModBlockEntities.BURNING_HEATER.get(), pos, state); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(LEVEL); + } + + @Nullable + @Override + public BlockEntityTicker getTicker( + Level level, BlockState state, BlockEntityType type + ) { + return createTickerHelper(type, ModBlockEntities.BURNING_HEATER.get(), + (lvl, pos, st, entity) -> entity.tick(lvl, pos, st)); + } + + @Override + protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { + if (level.isClientSide()) return InteractionResult.SUCCESS; + if (!(level.getBlockEntity(pos) instanceof BurningHeaterBlockEntity be)) return InteractionResult.PASS; + ItemStacksResourceHandler handler = be.getItemHandler(); + + ItemStack held = player.getMainHandItem(); + ItemResource currentResource = handler.getResource(0); + boolean hasItem = !currentResource.isEmpty(); + + if (!held.isEmpty() && BurningHeaterBlockEntity.getItemBurnTime(held) > 0) { + ItemResource heldResource = ItemResource.of(held.getItem(), held.getComponentsPatch()); + try (Transaction tx = Transaction.openRoot()) { + int inserted = handler.insert(0, heldResource, held.getCount(), tx); + tx.commit(); + held.setCount(held.getCount() - inserted); + } + return InteractionResult.CONSUME; + } else if (held.isEmpty() && hasItem) { + int amount = handler.getAmountAsInt(0); + try (Transaction tx = Transaction.openRoot()) { + int extracted = handler.extract(0, currentResource, amount, tx); + tx.commit(); + if (extracted > 0) { + player.setItemInHand(player.getUsedItemHand(), currentResource.toStack(extracted)); + } + } + return InteractionResult.CONSUME; + } + + return InteractionResult.PASS; + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (state.getValue(LEVEL) > 0 + && !entity.isSteppingCarefully() + && entity instanceof LivingEntity) { + entity.hurt(ModDamageTypes.heaterBurn(level), 4.0F); + } + super.stepOn(level, pos, state, entity); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/CakeBaseBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/CakeBaseBlock.java deleted file mode 100644 index ab51fd3cb1..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/CakeBaseBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -public class CakeBaseBlock extends AbstractCakeBlock { - - public CakeBaseBlock(Properties properties) { - super(properties); - } - - @Override - public int getFoodLevel() { - return 5; - } - - @Override - public float getSaturationLevel() { - return 0.8F; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/CakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/CakeBlock.java deleted file mode 100644 index b0c947392d..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/CakeBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -public class CakeBlock extends AbstractCakeBlock { - - public CakeBlock(Properties properties) { - super(properties); - } - - @Override - public int getFoodLevel() { - return 10; - } - - @Override - public float getSaturationLevel() { - return 0.6F; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/CementCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/CementCauldronBlock.java deleted file mode 100644 index ca9208d38b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/CementCauldronBlock.java +++ /dev/null @@ -1,66 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.block.better.BetterAbstractCauldronBlock; -import dev.dubhe.anvilcraft.block.state.Color; -import dev.dubhe.anvilcraft.util.ModInteractionMap; -import lombok.Getter; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.AbstractCauldronBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; - -@Getter -public class CementCauldronBlock extends BetterAbstractCauldronBlock implements IHammerRemovable { - - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( - propertiesCodec(), Color.CODEC.fieldOf("color").forGetter(CementCauldronBlock::getColor) - ).apply(ins, CementCauldronBlock::new)); - - private final Color color; - - public CementCauldronBlock(Properties properties, Color color) { - super(properties, ModInteractionMap.CEMENT); - this.color = color; - } - - @Override - public ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - CauldronInteraction interaction = this.interactions.map().get(stack.getItem()); - if (interaction == null) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - return interaction.interact(state, level, pos, player, hand, stack); - } - - @Override - protected MapCodec codec() { - return CODEC; - } - - @Override - protected double getContentHeight(BlockState state) { - return 0.9375; - } - - @Override - public boolean isFull(BlockState state) { - return true; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ChargerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/ChargerBlock.java deleted file mode 100644 index 18cd7d6b50..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/ChargerBlock.java +++ /dev/null @@ -1,208 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; -import dev.dubhe.anvilcraft.api.power.IPowerComponent; -import dev.dubhe.anvilcraft.block.entity.ChargerBlockEntity; -import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import dev.dubhe.anvilcraft.util.IStateListener; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.util.RandomSource; -import net.minecraft.world.Containers; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; - -public class ChargerBlock extends BaseEntityBlock implements IHammerRemovable, IHammerChangeable { - public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; - - public ChargerBlock(Properties properties) { - super(properties); - registerDefaultState(getStateDefinition().any().setValue(POWERED, false).setValue(OVERLOAD, true)); - } - - @Override - protected MapCodec codec() { - return simpleCodec(ChargerBlock::new); - } - - @Nullable - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - return defaultBlockState().setValue(POWERED, false).setValue(OVERLOAD, true); - } - - @Nullable - @Override - public BlockEntityTicker getTicker( - Level level, - BlockState state, - BlockEntityType type - ) { - if (level.isClientSide) { - return null; - } - return createTickerHelper( - type, - ModBlockEntities.CHARGER.get(), - (level1, blockPos, blockState, blockEntity) -> blockEntity.tick(level1, blockPos) - ); - } - - @Override - public void neighborChanged( - BlockState state, - Level level, - BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston - ) { - if (level.isClientSide) { - return; - } - level.setBlock(pos, state.setValue(POWERED, level.hasNeighborSignal(pos)), 2); - } - - @Nullable - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new ChargerBlockEntity(ModBlockEntities.CHARGER.get(), pos, state); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(POWERED).add(OVERLOAD); - } - - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - - @Override - public void onRemove( - BlockState state, - Level level, - BlockPos pos, - BlockState newState, - boolean movedByPiston - ) { - if (state.is(newState.getBlock())) return; - if (level.getBlockEntity(pos) instanceof ChargerBlockEntity entity) { - Vec3 vec3 = entity.getBlockPos().getCenter(); - FilteredItemStackHandler depository = entity.getFilteredItemStackHandler(); - for (int slot = 0; slot < depository.getSlots(); slot++) { - Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, depository.getStackInSlot(slot)); - } - level.updateNeighbourForOutputSignal(pos, this); - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - - @Override - public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (state.getValue(POWERED) && !level.hasNeighborSignal(pos)) { - level.setBlock(pos, state.cycle(POWERED), 2); - } - } - - @SuppressWarnings("unchecked") - @Override - public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { - level.setBlock(blockPos, ModBlocks.DISCHARGER.getDefaultState(), 2); - if (level.getBlockEntity(blockPos) instanceof IStateListener listener) { - IStateListener self = (IStateListener) listener; - self.notifyStateChanged(false); - } - return true; - } - - @Override - public @Nullable Property getChangeableProperty(BlockState blockState) { - return null; - } - - @Override - protected boolean hasAnalogOutputSignal(BlockState state) { - return true; - } - - @Override - protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { - BlockEntity blockEntity = level.getBlockEntity(pos); - return blockEntity instanceof ChargerBlockEntity charger ? charger.getAnalogRedstoneSignal() : 0; - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hit - ) { - if (!level.isClientSide()) { - if (level.getBlockEntity(pos) instanceof ChargerBlockEntity charger) { - // 玩家空手时尝试取出物品 - if (stack.isEmpty()) { - // 优先从输出槽(槽位2)取物品,如果为空则从输入槽(槽位0)取 - for (int slot : new int[]{ - 2, - 0 - }) { - ItemStack itemInSlot = charger.getFilteredItemStackHandler().getStackInSlot(slot); - if (!itemInSlot.isEmpty()) { - ItemStack extracted = charger.getFilteredItemStackHandler().extractItem(slot, itemInSlot.getCount(), false); - player.getInventory().placeItemBackInInventory(extracted); - level.playSound( - null, - pos, - SoundEvents.ITEM_PICKUP, - SoundSource.PLAYERS, - .2f, - 1f + level.getRandom().nextFloat() - ); - return ItemInteractionResult.SUCCESS; - } - } - } else if (charger.containsValidItem(stack)) { - ItemStack result = charger.getFilteredItemStackHandler().insertItem(0, stack, true); - if (result.isEmpty() || result.getCount() < stack.getCount()) { - int countDiff = stack.getCount() - (result.isEmpty() ? 0 : result.getCount()); - ItemStack toInsert = stack.split(countDiff); - charger.getFilteredItemStackHandler().insertItem(0, toInsert, false); - return ItemInteractionResult.SUCCESS; - } - } - } - } - return super.useItemOn(stack, state, level, pos, player, hand, hit); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ChocolateCakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/ChocolateCakeBlock.java deleted file mode 100644 index 9a65ad2909..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/ChocolateCakeBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -public class ChocolateCakeBlock extends AbstractCakeBlock { - - public ChocolateCakeBlock(Properties properties) { - super(properties); - } - - @Override - public int getFoodLevel() { - return 20; - } - - @Override - public float getSaturationLevel() { - return 0.6F; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ChocolateCreamBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/ChocolateCreamBlock.java deleted file mode 100644 index 9cb15768ce..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/ChocolateCreamBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -public class ChocolateCreamBlock extends AbstractCakeBlock { - - public ChocolateCreamBlock(Properties properties) { - super(properties); - } - - @Override - public int getFoodLevel() { - return 12; - } - - @Override - public float getSaturationLevel() { - return 0.4F; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/CrabTrapBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/CrabTrapBlock.java deleted file mode 100644 index 1e873c5759..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/CrabTrapBlock.java +++ /dev/null @@ -1,209 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; -import dev.dubhe.anvilcraft.block.entity.CrabTrapBlockEntity; -import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.loot.ModLootTables; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.Containers; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.SimpleWaterloggedBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.Fluids; -import net.minecraft.world.level.storage.loot.LootParams; -import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; -import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.ItemHandlerHelper; -import org.jetbrains.annotations.Nullable; - -public class CrabTrapBlock extends BetterBaseEntityBlock implements SimpleWaterloggedBlock, IHammerRemovable { - public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; - public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; - - public CrabTrapBlock(Properties properties) { - super(properties); - registerDefaultState( - getStateDefinition().any() - .setValue(FACING, Direction.NORTH) - .setValue(WATERLOGGED, false) - ); - } - - @Override - protected MapCodec codec() { - return simpleCodec(CrabTrapBlock::new); - } - - @Override - public BlockState rotate(BlockState state, Rotation rotation) { - return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); - } - - @Override - public BlockState mirror(BlockState state, Mirror mirror) { - return state.rotate(mirror.getRotation(state.getValue(FACING))); - } - - @Nullable - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - return this.defaultBlockState() - .setValue(FACING, context.getHorizontalDirection().getOpposite()) - .setValue( - WATERLOGGED, - context.getLevel() - .getFluidState(context.getClickedPos()) - .getType() - == Fluids.WATER); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); - builder.add(WATERLOGGED); - } - - @Override - public FluidState getFluidState(BlockState state) { - return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); - } - - @Override - public boolean isRandomlyTicking(BlockState state) { - return state.getValue(WATERLOGGED); - } - - @Override - public void randomTick( - BlockState state, - ServerLevel level, - BlockPos pos, - RandomSource random) { - int times = 0; - for (Direction face : Direction.values()) { - if (level.getFluidState(pos.relative(face)).is(Fluids.WATER)) times++; - } - - if (times >= 3) { - // 获取战利品并放入 block entity - tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_COMMON); - tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_RIVER); - tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_OCEAN); - tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_WARM_OCEAN); - tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_SWAMP); - tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_JUNGLE); - } - } - - @Override - public InteractionResult use( - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hit - ) { - if (!level.isClientSide()) { - CrabTrapBlockEntity blockEntity = (CrabTrapBlockEntity) level.getBlockEntity(pos); - if (blockEntity != null) { - IItemHandler itemHandler = blockEntity.getItemHandler(); - for (int i = 0; i < itemHandler.getSlots(); i++) { - ItemStack stack = itemHandler.getStackInSlot(i); - if (stack.isEmpty()) continue; - Vec3 center = pos.relative(Direction.UP).getCenter(); - ItemEntity itemEntity = new ItemEntity(level, center.x(), center.y(), center.z(), stack, 0, 0.2, 0); - itemEntity.setDefaultPickUpDelay(); - level.addFreshEntity(itemEntity); - itemHandler.extractItem(i, stack.getCount(), false); - } - blockEntity.setChanged(); - } - } - return InteractionResult.SUCCESS; - } - - @Nullable - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new CrabTrapBlockEntity(ModBlockEntities.CRAB_TRAP.get(), pos, state); - } - - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - - @Override - public void onRemove( - BlockState state, - Level level, - BlockPos pos, - BlockState newState, - boolean movedByPiston - ) { - if (state.is(newState.getBlock())) return; - if (level.getBlockEntity(pos) instanceof CrabTrapBlockEntity entity) { - Vec3 vec3 = entity.getBlockPos().getCenter(); - IItemHandler itemHandler = entity.getItemHandler(); - for (int slot = 0; slot < itemHandler.getSlots(); slot++) { - Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, itemHandler.getStackInSlot(slot)); - } - level.updateNeighbourForOutputSignal(pos, this); - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - - private void tryInsertLoot( - BlockState state, - ServerLevel level, - BlockPos pos, - ResourceKey loot - ) { - if (state.hasBlockEntity()) { - LootParams lootParams = new LootParams.Builder(level) - .withParameter(LootContextParams.ORIGIN, pos.getCenter()) - .create(LootContextParamSets.CHEST); - - LootTable lootTable = level.getServer().reloadableRegistries().getLootTable(loot); - ObjectArrayList items = lootTable.getRandomItems(lootParams); - if (items.isEmpty()) return; - CrabTrapBlockEntity blockEntity = (CrabTrapBlockEntity) level.getBlockEntity(pos); - if (blockEntity != null) { - for (ItemStack item : items) { - ItemHandlerHelper.insertItem(blockEntity.getItemHandler(), item, false); - } - blockEntity.setChanged(); - } - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/CreamBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/CreamBlock.java deleted file mode 100644 index ca5946c1eb..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/CreamBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -public class CreamBlock extends AbstractCakeBlock { - - public CreamBlock(Properties properties) { - super(properties); - } - - @Override - public int getFoodLevel() { - return 5; - } - - @Override - public float getSaturationLevel() { - return 0.4F; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/DischargerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/DischargerBlock.java deleted file mode 100644 index 898d380201..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/DischargerBlock.java +++ /dev/null @@ -1,26 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import dev.dubhe.anvilcraft.util.IStateListener; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; - -public class DischargerBlock extends ChargerBlock { - - public DischargerBlock(Properties properties) { - super(properties); - } - - @SuppressWarnings("unchecked") - @Override - public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { - level.setBlock(blockPos, ModBlocks.CHARGER.getDefaultState(), 2); - if (level.getBlockEntity(blockPos) instanceof IStateListener listener) { - IStateListener self = (IStateListener) listener; - self.notifyStateChanged(true); - } - return true; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/EndDustBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/EndDustBlock.java deleted file mode 100644 index c55a3b5f89..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/EndDustBlock.java +++ /dev/null @@ -1,58 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.entity.FloatingBlockEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.tags.FluidTags; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.FallingBlock; -import net.minecraft.world.level.block.state.BlockState; - -public class EndDustBlock extends Block { - public EndDustBlock(Properties properties) { - super(properties); - } - - @Override - public void onPlace( - BlockState state, - Level level, - BlockPos pos, - BlockState oldState, - boolean movedByPiston - ) { - level.scheduleTick(pos, this, this.getDelayAfterPlace()); - } - - @Override - public void tick( - BlockState state, - ServerLevel level, - BlockPos pos, - RandomSource random - ) { - if (!level.getFluidState(pos.above()).is(FluidTags.WATER)) return; - if (!FallingBlock.isFree(level.getBlockState(pos.above()))) return; - FloatingBlockEntity._float(level, pos, state); - } - - @Override - public void neighborChanged( - BlockState state, - Level level, - BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston - ) { - if (level.getFluidState(neighborPos).is(FluidTags.WATER)) { - level.scheduleTick(pos, this, this.getDelayAfterPlace()); - } - } - - protected int getDelayAfterPlace() { - return 2; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ExpFluidBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/ExpFluidBlock.java deleted file mode 100644 index 15a87dd1ae..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/ExpFluidBlock.java +++ /dev/null @@ -1,28 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.LiquidBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.FlowingFluid; - -public class ExpFluidBlock extends LiquidBlock { - public static final int XP_POINTS = 50; - - public ExpFluidBlock(FlowingFluid fluid, Properties properties) { - super(fluid, properties); - } - - @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - if (level.isClientSide) return; - if (!level.getFluidState(pos).isSource()) return; - if (entity instanceof Player player) { - player.giveExperiencePoints(XP_POINTS); - level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ExpFluidCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/ExpFluidCauldronBlock.java deleted file mode 100644 index 6c96f1f912..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/ExpFluidCauldronBlock.java +++ /dev/null @@ -1,49 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.util.ModInteractionMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; - -public class ExpFluidCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable { - public ExpFluidCauldronBlock(Properties properties) { - super(properties, ModInteractionMap.EXP_FLUID); - } - - @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - if (level.isClientSide) return; - if (!this.isEntityInsideContent(state, pos, entity)) return; - if (entity instanceof Player player) { - if (!this.isFull(state)) return; - player.giveExperiencePoints(ExpFluidBlock.XP_POINTS); - level.setBlock(pos, Blocks.CAULDRON.defaultBlockState(), 3); - } - } - - @Override - public ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - CauldronInteraction interaction = this.interactions.map().get(stack.getItem()); - if (interaction == null) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - return interaction.interact(state, level, pos, player, hand, stack); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FeCollectorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/FeCollectorBlock.java new file mode 100644 index 0000000000..f572c626dc --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/FeCollectorBlock.java @@ -0,0 +1,145 @@ +package dev.dubhe.anvilcraft.block; + +import com.mojang.serialization.MapCodec; +import dev.anvilcraft.lib.v2.util.ShapeUtil; +import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; +import dev.dubhe.anvilcraft.block.entity.FeCollectorBlockEntity; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +@NullMarked +public class FeCollectorBlock extends BetterBaseEntityBlock implements HammerRotateBehavior, IHammerRemovable { + private static final VoxelShape SHAPE_X = ShapeUtil.merge( + Block.box(0, 0, 0, 16, 4, 16), + Block.box(0, 4, 4, 2, 12, 12), + Block.box(14, 4, 4, 16, 12, 12) + ); + private static final VoxelShape SHAPE_Z = ShapeUtil.rotate(Direction.Axis.Y, 90, SHAPE_X); + public static final EnumProperty AXIS = BlockStateProperties.HORIZONTAL_AXIS; + public static BooleanProperty POWERED = BlockStateProperties.POWERED; + + public FeCollectorBlock(Properties properties) { + super(properties); + this.registerDefaultState( + this.getStateDefinition() + .any() + .setValue(AXIS, Direction.Axis.X) + .setValue(POWERED, false) + ); + } + + @Override + protected MapCodec codec() { + return simpleCodec(FeCollectorBlock::new); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(AXIS).add(POWERED); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction dir = context.getHorizontalDirection(); + Direction.Axis axis = switch (dir) { + case NORTH, SOUTH -> Direction.Axis.X; + case WEST, EAST -> Direction.Axis.Z; + default -> Direction.Axis.X; + }; + return this.defaultBlockState().setValue(AXIS, axis); + } + + @Override + protected BlockState rotate(BlockState state, Rotation rotation) { + return switch (rotation) { + case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.getValue(AXIS)) { + case Z -> state.setValue(AXIS, Direction.Axis.X); + case X -> state.setValue(AXIS, Direction.Axis.Z); + default -> state; + }; + default -> state; + }; + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape( + BlockState state, + BlockGetter level, + BlockPos pos, + CollisionContext context + ) { + return state.getValue(AXIS) == Direction.Axis.X ? SHAPE_X : SHAPE_Z; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new FeCollectorBlockEntity(pos, state); + } + + public void activate(Level level, BlockPos pos, BlockState state) { + level.setBlockAndUpdate(pos, state.setValue(POWERED, true)); + this.updateNeighbours(level, pos); + level.scheduleTick(pos, this, 2); + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!state.getValue(POWERED)) return; + level.setBlockAndUpdate(pos, state.setValue(POWERED, false)); + this.updateNeighbours(level, pos); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + if (level.isClientSide() || state.is(oldState.getBlock())) return; + if (state.getValue(POWERED) && !level.getBlockTicks().hasScheduledTick(pos, this)) { + level.setBlock(pos, state.setValue(POWERED, false), 18); + } + } + + private void updateNeighbours(Level level, BlockPos pos) { + level.updateNeighborsAt(pos, this); + level.updateNeighborsAt(pos.below(), this); + } + + @Nullable + @Override + public BlockEntityTicker getTicker( + Level level, BlockState state, BlockEntityType type) { + return createTickerHelper( + type, + ModBlockEntities.FE_COLLECTOR.get(), + FeCollectorBlockEntity::tick + ); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FireCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/FireCauldronBlock.java deleted file mode 100644 index 0aa7bdb978..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/FireCauldronBlock.java +++ /dev/null @@ -1,61 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.HitResult; - -public class FireCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable { - public FireCauldronBlock(Properties properties) { - super(properties, CauldronInteraction.EMPTY); - } - - @Override - public void entityInside( - BlockState state, Level level, BlockPos pos, Entity entity) { - if (this.isEntityInsideContent(state, pos, entity)) { - entity.lavaHurt(); - } - } - - @Override - public ItemStack getCloneItemStack( - BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { - return new ItemStack(Items.CAULDRON); - } - - @Override - public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean ignored) { - if (level.getBlockState(pos.below()).is(ModBlocks.HEATER)) { - level.scheduleTick(pos, this, 2); - } - } - - @Override - protected void neighborChanged( - BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston - ) { - if (level.getBlockState(pos.below()).is(ModBlocks.HEATER)) { - level.scheduleTick(pos, this, 2); - } - } - - @Override - protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - BlockState below = level.getBlockState(pos.below()); - if (below.is(ModBlocks.HEATER) && !below.getValue(HeaterBlock.OVERLOAD) && !PlasmaJetsBlock.trySpawn(pos.above(), level)) { - level.scheduleTick(pos, this, 10); - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FishTankBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/FishTankBlock.java deleted file mode 100644 index 0c6938f148..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/FishTankBlock.java +++ /dev/null @@ -1,95 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.init.item.ModItemTags; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.shapes.BooleanOp; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -public class FishTankBlock extends Block implements HammerRotateBehavior, IHammerRemovable { - public static final BooleanProperty TROPICAL = BooleanProperty.create("tropical"); - public static final BooleanProperty OUTLET = BooleanProperty.create("outlet"); - public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; - - public static final VoxelShape INPUT = box(2.0, 14.0, 2.0, 14.0, 16.0, 14.0); - public static final VoxelShape INSIDE = box(1.0, 1.0, 1.0, 15.0, 14.0, 15.0); - public static final VoxelShape SHAPE = Shapes.join(Shapes.block(), Shapes.join(INSIDE, INPUT, BooleanOp.OR), BooleanOp.ONLY_FIRST); - - public FishTankBlock(Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any() - .setValue(TROPICAL, false) - .setValue(OUTLET, false) - .setValue(FACING, Direction.NORTH)); - } - - @Override - protected MapCodec codec() { - return simpleCodec(FishTankBlock::new); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(TROPICAL, OUTLET, FACING); - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return SHAPE; - } - - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - Direction facing = context.getHorizontalDirection().getOpposite(); - return this.defaultBlockState().setValue(FACING, facing); - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (!stack.is(ModItemTags.ANVIL_HAMMER)) { - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } - // 切换 OUTLET 状态 - if (!level.isClientSide()) { - // 水平的四个方向根据被右键的方向转换 - Direction newOutletDirection = Direction.from2DDataValue((hitResult.getDirection().get2DDataValue())); - boolean newOutletValue = !state.getValue(OUTLET); - BlockState newState = state.setValue(OUTLET, newOutletValue).setValue(FACING, newOutletDirection); - - level.setBlock(pos, newState, 3); - level.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, 1.0f, 1.0f); - } - - return ItemInteractionResult.SUCCESS; - - } -} \ No newline at end of file diff --git a/src/main/java/dev/dubhe/anvilcraft/block/GunpowderBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/GunpowderBlock.java deleted file mode 100644 index e55bc9aee2..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/GunpowderBlock.java +++ /dev/null @@ -1,162 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.block.heatable.HeatableBlock; -import dev.dubhe.anvilcraft.block.heatable.NormalBlock; -import dev.dubhe.anvilcraft.init.item.ModItems; -import dev.dubhe.anvilcraft.item.MultitoolItem; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.stats.Stats; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Explosion; -import net.minecraft.world.level.ExplosionDamageCalculator; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.BaseFireBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class GunpowderBlock extends Block { - public GunpowderBlock(Properties properties) { - super(properties); - } - - public void explosion(Level level, BlockPos pos) { - if (level.isClientSide) { - return; - } - level.setBlock(pos, Blocks.AIR.defaultBlockState(), 11); - level.explode(null, - null, - new ExplosionDamageCalculator() { - @Override - public Optional getBlockExplosionResistance( - Explosion explosion, - BlockGetter reader, - BlockPos pos, - BlockState state, - FluidState fluid - ) { - return Optional.of(Float.MAX_VALUE); - } - - @Override - public boolean shouldDamageEntity(Explosion explosion, Entity entity) { - return false; - } - }, - pos.getX(), - pos.getY(), - pos.getZ(), - 4.0f, - false, - Level.ExplosionInteraction.BLOCK); - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (stack.is(Items.FLINT_AND_STEEL) - || stack.is(Items.FIRE_CHARGE) - || (stack.is(ModItems.MULTITOOL_ITEM) - && MultitoolItem.getMode(stack) == MultitoolItem.FLINT_AND_STEEL_MODE)) { - explosion(level, pos); - Item item = stack.getItem(); - if (stack.is(Items.FLINT_AND_STEEL) - || (stack.is(ModItems.MULTITOOL_ITEM) - && MultitoolItem.getMode(stack) == MultitoolItem.FLINT_AND_STEEL_MODE)) { - stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand)); - } else { - stack.consume(1, player); - } - player.awardStat(Stats.ITEM_USED.get(item)); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } - - @Override - protected BlockState updateShape( - BlockState state, - Direction direction, - BlockState neighborState, - LevelAccessor level, - BlockPos pos, - BlockPos neighborPos - ) { - if (!level.isClientSide()) { - BlockState block = level.getBlockState(pos.relative(direction)); - if (block.getBlock() instanceof BaseFireBlock - || block.is(Blocks.LAVA) - || ((block.getBlock() instanceof HeatableBlock) && !(block.getBlock() instanceof NormalBlock))) { - explosion((Level) level, pos); - } - } - return super.updateShape(state, direction, neighborState, level, pos, neighborPos); - } - - @Override - protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { - if (!level.isClientSide()) { - for (Direction direction : Direction.values()) { - BlockState block = level.getBlockState(pos.relative(direction)); - if (block.getBlock() instanceof BaseFireBlock - || block.is(Blocks.LAVA) - || ((block.getBlock() instanceof HeatableBlock) && !(block.getBlock() instanceof NormalBlock))) { - explosion(level, pos); - } - } - } - } - - @Override - public void onCaughtFire(BlockState state, Level level, BlockPos pos, @Nullable Direction direction, @Nullable LivingEntity igniter) { - explosion(level, pos); - } - - @Override - protected void onProjectileHit(Level level, BlockState state, BlockHitResult hit, Projectile projectile) { - if (level.isClientSide) { - return; - } - BlockPos pos = hit.getBlockPos(); - if (projectile.isOnFire() && projectile.mayInteract(level, pos)) { - explosion(level, pos); - } - } - - @Override - public void wasExploded(Level level, BlockPos pos, Explosion explosion) { - if (level.isClientSide) { - return; - } - explosion(level, pos); - } - - @Override - public boolean canDropFromExplosion(BlockState state, BlockGetter level, BlockPos pos, Explosion explosion) { - return false; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HoneyCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/HoneyCauldronBlock.java deleted file mode 100644 index 5412b4007e..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/HoneyCauldronBlock.java +++ /dev/null @@ -1,55 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.util.ModInteractionMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; - -public class HoneyCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable { - public HoneyCauldronBlock(Properties properties) { - super(properties, ModInteractionMap.HONEY); - } - - @Override - public ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - CauldronInteraction interaction = this.interactions.map().get(stack.getItem()); - if (interaction == null) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - return interaction.interact(state, level, pos, player, hand, stack); - } - - @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - } - - @Override - public ItemStack getCloneItemStack( - BlockState state, - HitResult target, - LevelReader level, - BlockPos pos, - Player player - ) { - return new ItemStack(Items.CAULDRON); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/InfiniteCollectorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/InfiniteCollectorBlock.java new file mode 100644 index 0000000000..686ece70a2 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/InfiniteCollectorBlock.java @@ -0,0 +1,58 @@ +package dev.dubhe.anvilcraft.block; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.Nullable; + +public class InfiniteCollectorBlock extends BaseEntityBlock implements IHammerRemovable { + public static final VoxelShape SHAPE = Shapes.or(Block.box(0, 0, 0, 16, 4, 16)); + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + + public InfiniteCollectorBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.getStateDefinition().any().setValue(POWERED, false)); + } + + @Override + protected MapCodec codec() { + return simpleCodec(InfiniteCollectorBlock::new); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(POWERED); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + public void activate(Level level, BlockPos pos, BlockState state) { + level.setBlockAndUpdate(pos, state.setValue(POWERED, true)); + } + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return null; // Registration deferred; block entity is registered separately. + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/LavaCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/LavaCauldronBlock.java deleted file mode 100644 index cc1e7a8e76..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/LavaCauldronBlock.java +++ /dev/null @@ -1,83 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.util.ModInteractionMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; - -public class LavaCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable { - public LavaCauldronBlock(Properties properties) { - super(properties, ModInteractionMap.LAYERED_LAVA); - } - - @Override - public ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - CauldronInteraction interaction = this.interactions.map().get(stack.getItem()); - if (interaction == null) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - return interaction.interact(state, level, pos, player, hand, stack); - } - - @Override - public void entityInside( - BlockState state, Level level, BlockPos pos, Entity entity) { - if (this.isEntityInsideContent(state, pos, entity)) { - entity.lavaHurt(); - } - } - - @Override - public ItemStack getCloneItemStack( - BlockState state, - HitResult target, - LevelReader level, - BlockPos pos, - Player player - ) { - return new ItemStack(Items.CAULDRON); - } - - @Override - public void neighborChanged( - BlockState state, - Level level, - BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston) { - if (level.isClientSide) { - return; - } - if (this.isFull(state)) { - level.setBlockAndUpdate(pos, Blocks.LAVA_CAULDRON.defaultBlockState()); - } - } - - @Override - protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { - int layer = state.getValue(LEVEL); - return layer <= 2 ? layer : layer - 1; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/Layered4LevelCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/Layered4LevelCauldronBlock.java deleted file mode 100644 index 994d730ae2..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/Layered4LevelCauldronBlock.java +++ /dev/null @@ -1,78 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.AbstractCauldronBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.IntegerProperty; -import net.minecraft.world.level.gameevent.GameEvent; - -import java.util.Optional; - -public class Layered4LevelCauldronBlock extends AbstractCauldronBlock { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( - ins -> ins.group( - propertiesCodec(), - CauldronInteraction.CODEC.fieldOf("interactions").forGetter(block -> block.interactions) - ) - .apply(ins, Layered4LevelCauldronBlock::new) - ); - - public static final int MAX_LEVEL = 4; - - public static final IntegerProperty LEVEL = IntegerProperty.create("level", 1, MAX_LEVEL); - - public Layered4LevelCauldronBlock(Properties properties, CauldronInteraction.InteractionMap interactions) { - super(properties, interactions); - this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, 1)); - } - - public static void lowerFillLevel(BlockState state, Level level, BlockPos pos) { - int i = state.getValue(LEVEL) - 1; - BlockState blockstate = i == 0 ? Blocks.CAULDRON.defaultBlockState() : state.setValue(LEVEL, i); - level.setBlockAndUpdate(pos, blockstate); - level.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(blockstate)); - } - - @Override - protected MapCodec codec() { - return CODEC; - } - - @Override - public boolean isFull(BlockState state) { - return state.getValue(LEVEL) == MAX_LEVEL; - } - - @Override - protected double getContentHeight(BlockState state) { - return (6.0 + state.getValue(LEVEL) * 2.0) / 16.0; - } - - @Override - protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { - return state.getValue(LEVEL); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(LEVEL); - } - - public BlockState copyLevelFrom(BlockState otherCauldron) { - return this.defaultBlockState().setValue(LEVEL, Optional.of(otherCauldron) - .filter(state -> state.getBlock() instanceof Layered4LevelCauldronBlock) - .map(state -> state.getValue(LEVEL)) - .orElse(1)); - } - - public BlockState fullFilled() { - return this.defaultBlockState().setValue(LEVEL, MAX_LEVEL); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/LevitationPowderBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/LevitationPowderBlock.java deleted file mode 100644 index b51d3b78e7..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/LevitationPowderBlock.java +++ /dev/null @@ -1,48 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.entity.LevitatingBlockEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.item.FallingBlockEntity; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Fallable; -import net.minecraft.world.level.block.FallingBlock; -import net.minecraft.world.level.block.state.BlockState; - -public class LevitationPowderBlock extends FallingBlock { - public LevitationPowderBlock(Properties properties) { - super(properties); - } - - @Override - protected MapCodec codec() { - return null; - } - - @Override -protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - super.tick(state, level, pos, random); - // 和上方重力方块交换位置 - BlockState above = level.getBlockState(pos.above()); - if (above.getBlock() instanceof FallingBlock && !(above.getBlock() instanceof LevitationPowderBlock)) { - if (above.getBlock() instanceof Fallable) { - FallingBlockEntity.fall(level, pos.above(), above); - } - LevitatingBlockEntity.levitate(level, pos, state); - } - } - - @Override - protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { - level.scheduleTick(pos, this, 2); - } - - @Override - protected void neighborChanged( - BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { - level.scheduleTick(pos, this, 2); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/MagneticChuteBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/MagneticChuteBlock.java deleted file mode 100644 index aabfda836b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/MagneticChuteBlock.java +++ /dev/null @@ -1,235 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; -import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; -import dev.dubhe.anvilcraft.block.entity.BaseChuteBlockEntity; -import dev.dubhe.anvilcraft.block.entity.MagneticChuteBlockEntity; -import dev.dubhe.anvilcraft.init.ModMenuTypes; -import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import dev.dubhe.anvilcraft.init.item.ModItems; -import dev.dubhe.anvilcraft.network.MachineEnableFilterPacket; -import dev.dubhe.anvilcraft.network.MachineOutputDirectionPacket; -import dev.dubhe.anvilcraft.network.SlotDisableChangePacket; -import dev.dubhe.anvilcraft.network.SlotFilterChangePacket; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Containers; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.GameType; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import net.minecraft.world.level.pathfinder.PathComputationType; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.BooleanOp; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; - -public class MagneticChuteBlock extends BetterBaseEntityBlock implements HammerRotateBehavior, IHammerRemovable { - public static final DirectionProperty FACING = BlockStateProperties.FACING; - public static final BooleanProperty ENABLED = BlockStateProperties.ENABLED; - - public static final VoxelShape SHAPE_UP = - Shapes.join(Block.box(4, 8, 4, 12, 16, 12), Block.box(0, 0, 0, 16, 8, 16), BooleanOp.OR); - public static final VoxelShape SHAPE_DOWN = - Shapes.join(Block.box(4, 0, 4, 12, 8, 12), Block.box(0, 8, 0, 16, 16, 16), BooleanOp.OR); - public static final VoxelShape SHAPE_W = - Shapes.join(Block.box(0, 4, 4, 8, 12, 12), Block.box(8, 0, 0, 16, 16, 16), BooleanOp.OR); - public static final VoxelShape SHAPE_E = - Shapes.join(Block.box(8, 4, 4, 16, 12, 12), Block.box(0, 0, 0, 8, 16, 16), BooleanOp.OR); - public static final VoxelShape SHAPE_S = - Shapes.join(Block.box(4, 4, 8, 12, 12, 16), Block.box(0, 0, 0, 16, 16, 8), BooleanOp.OR); - public static final VoxelShape SHAPE_N = - Shapes.join(Block.box(4, 4, 0, 12, 12, 8), Block.box(0, 0, 8, 16, 16, 16), BooleanOp.OR); - - /** - * 溜槽方块 - * - * @param properties 方块属性 - */ - public MagneticChuteBlock(Properties properties) { - super(properties); - this.registerDefaultState( - this.stateDefinition.any().setValue(FACING, Direction.DOWN).setValue(ENABLED, true)); - } - - @Override - protected MapCodec codec() { - return simpleCodec(MagneticChuteBlock::new); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext collisionContext) { - return switch (state.getValue(FACING)) { - case NORTH -> SHAPE_N; - case SOUTH -> SHAPE_S; - case WEST -> SHAPE_W; - case EAST -> SHAPE_E; - case DOWN -> SHAPE_DOWN; - case UP -> SHAPE_UP; - }; - } - - @Override - protected boolean isPathfindable(BlockState state, PathComputationType pathComputationType) { - return false; - } - - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new MagneticChuteBlockEntity(ModBlockEntities.MAGNETIC_CHUTE.get(), pos, state); - } - - @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (!state.is(newState.getBlock())) { - if (level.getBlockEntity(pos) instanceof BaseChuteBlockEntity entity) { - Vec3 vec3 = entity.getBlockPos().getCenter(); - FilteredItemStackHandler depository = entity.getItemHandler(); - for (int slot = 0; slot < depository.getSlots(); slot++) { - Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, depository.getStackInSlot(slot)); - } - level.updateNeighbourForOutputSignal(pos, this); - } - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - - @Override - public boolean hasAnalogOutputSignal(BlockState blockState) { - return true; - } - - @Override - public int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos blockPos) { - BlockEntity blockEntity = level.getBlockEntity(blockPos); - if (blockEntity instanceof MagneticChuteBlockEntity magneticChuteBlockEntity) { - return magneticChuteBlockEntity.getRedstoneSignal(); - } - return 0; - } - - @Nullable - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - Level level = context.getLevel(); - BlockPos pos = context.getClickedPos(); - Player player = context.getPlayer(); - Direction facing = context.getNearestLookingDirection(); - if (player != null && player.isShiftKeyDown()) facing = facing.getOpposite(); - BlockState neighborState = level.getBlockState(pos.relative(facing)); - boolean cannotPlace = facing == Direction.UP - && (neighborState.is(ModBlocks.SIMPLE_CHUTE) || neighborState.is(ModBlocks.CHUTE)) - && neighborState.getValue(FACING_HOPPER) == Direction.DOWN; - if (cannotPlace) { - if (player != null) player.displayClientMessage(Component.translatable("message.anvilcraft.chute.cannot_place"), true); - return null; - } - return this.defaultBlockState() - .setValue(FACING, facing) - .setValue(ENABLED, !context.getLevel().hasNeighborSignal(context.getClickedPos())); - } - - @Override - public BlockState rotate(BlockState state, Rotation rotation) { - return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); - } - - @Override - public BlockState mirror(BlockState state, Mirror mirror) { - return this.rotate(state, mirror.getRotation(state.getValue(FACING))); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING, ENABLED); - } - - @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { - this.checkPoweredState(level, pos, state); - } - - private void checkPoweredState(Level level, BlockPos pos, BlockState state) { - boolean flag = !level.hasNeighborSignal(pos); - if (flag != state.getValue(ENABLED)) { - level.setBlock(pos, state.setValue(ENABLED, flag), 2); - } - } - - @Override - public @Nullable BlockEntityTicker getTicker( - Level level, BlockState state, BlockEntityType blockEntityType) { - if (level.isClientSide()) { - return null; - } - return createTickerHelper( - blockEntityType, - ModBlockEntities.MAGNETIC_CHUTE.get(), - ((level1, blockPos, blockState, blockEntity) -> blockEntity.tick())); - } - - @Override - public InteractionResult use( - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hit - ) { - if (level.isClientSide) { - return InteractionResult.SUCCESS; - } - BlockEntity blockEntity = level.getBlockEntity(pos); - if (blockEntity instanceof MagneticChuteBlockEntity entity) { - if (player.getItemInHand(hand).is(ModItems.DISK.get())) { - return entity.useDisk(level, player, hand, player.getItemInHand(hand), hit); - } - if (player instanceof ServerPlayer serverPlayer) { - if (serverPlayer.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS; - ModMenuTypes.open(serverPlayer, entity, pos); - PacketDistributor.sendToPlayer(serverPlayer, new MachineOutputDirectionPacket(entity.getDirection())); - PacketDistributor.sendToPlayer(serverPlayer, new MachineEnableFilterPacket(entity.isFilterEnabled())); - for (int i = 0; i < entity.getFilteredItems().size(); i++) { - PacketDistributor.sendToPlayer( - serverPlayer, - new SlotDisableChangePacket( - i, entity.getItemHandler().getDisabled().get(i))); - PacketDistributor.sendToPlayer(serverPlayer, new SlotFilterChangePacket(i, entity.getFilter(i))); - } - } - } - return InteractionResult.SUCCESS; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/MeltGemCauldron.java b/src/main/java/dev/dubhe/anvilcraft/block/MeltGemCauldron.java deleted file mode 100644 index a12ca50d93..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/MeltGemCauldron.java +++ /dev/null @@ -1,59 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.block.better.BetterAbstractCauldronBlock; -import dev.dubhe.anvilcraft.util.ModInteractionMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.AbstractCauldronBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; - -public class MeltGemCauldron extends BetterAbstractCauldronBlock implements IHammerRemovable { - public MeltGemCauldron(Properties properties) { - super(properties, ModInteractionMap.MELT_GEM); - } - - @Override - public ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - CauldronInteraction interaction = this.interactions.map().get(stack.getItem()); - if (interaction == null) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - return interaction.interact(state, level, pos, player, hand, stack); - } - - @Override - protected MapCodec codec() { - return simpleCodec(MeltGemCauldron::new); - } - - @Override - protected double getContentHeight(BlockState state) { - return 0.9375; - } - - @Override - public boolean isFull(BlockState state) { - return true; - } - - @Override - public int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { - return 3; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ObsidianCauldron.java b/src/main/java/dev/dubhe/anvilcraft/block/ObsidianCauldron.java deleted file mode 100644 index 7d4b0da0d0..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/ObsidianCauldron.java +++ /dev/null @@ -1,36 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.block.better.BetterAbstractCauldronBlock; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.AbstractCauldronBlock; -import net.minecraft.world.level.block.state.BlockState; - -public class ObsidianCauldron extends BetterAbstractCauldronBlock implements IHammerRemovable { - public ObsidianCauldron(Properties properties) { - super(properties, CauldronInteraction.EMPTY); - } - - @Override - protected MapCodec codec() { - return simpleCodec(ObsidianCauldron::new); - } - - @Override - protected double getContentHeight(BlockState state) { - return 0.9375; - } - - @Override - public boolean isFull(BlockState state) { - return true; - } - - @Override - public int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { - return 3; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/OilCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/OilCauldronBlock.java deleted file mode 100644 index e5fd3f8f20..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/OilCauldronBlock.java +++ /dev/null @@ -1,65 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import dev.dubhe.anvilcraft.init.item.ModItemTags; -import dev.dubhe.anvilcraft.util.ModInteractionMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; - -public class OilCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable { - public OilCauldronBlock(Properties properties) { - super(properties, ModInteractionMap.OIL); - } - - public static void ignite(LevelAccessor level, BlockPos pos, BlockState beforeConvert) { - level.setBlock(pos, ModBlocks.FIRE_CAULDRON.get().copyLevelFrom(beforeConvert), 3); - } - - @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - if (level.isClientSide) return; - if (!this.isEntityInsideContent(state, pos, entity)) return; - if (entity.getType().equals(EntityType.ARROW) && entity.isOnFire()) { - ignite(level, pos, state); - return; - } - if (!(entity instanceof ItemEntity itemEntity)) return; - if (itemEntity.getItem().is(ModItemTags.FIRE_STARTER)) { - ignite(level, pos, state); - itemEntity.getItem().setCount(itemEntity.getItem().getCount() - 1); - return; - } - if (itemEntity.getItem().is(ModItemTags.UNBROKEN_FIRE_STARTER)) { - ignite(level, pos, state); - } - } - - @Override - public ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - CauldronInteraction interaction = this.interactions.map().get(stack.getItem()); - if (interaction == null) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - return interaction.interact(state, level, pos, player, hand, stack); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/PlasmaJetsBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/PlasmaJetsBlock.java deleted file mode 100644 index 44c41d4105..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/PlasmaJetsBlock.java +++ /dev/null @@ -1,72 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.block.entity.PlasmaJetsBlockEntity; -import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; - -public class PlasmaJetsBlock extends BaseEntityBlock { - public PlasmaJetsBlock(Properties properties) { - super(properties); - } - - @Override - protected MapCodec codec() { - return simpleCodec(PlasmaJetsBlock::new); - } - - public static boolean trySpawn(BlockPos pos, Level level) { - BlockState cauldron = level.getBlockState(pos.below()); - BlockState heater = level.getBlockState(pos.below().below()); - if ( - !cauldron.is(ModBlocks.FIRE_CAULDRON) - || !heater.is(ModBlocks.HEATER) - || heater.getValue(HeaterBlock.OVERLOAD) - ) { - return false; - } - for (int i = 0; i < 8; i++) { - if (!level.getBlockState(pos.above(i)).isAir()) { - return false; - } - } - for (Direction direction : Direction.values()) { - if (!direction.getAxis().isHorizontal()) { - continue; - } - if (!level.getBlockState(pos.relative(direction)).isFaceSturdy(level, pos.relative(direction), direction.getOpposite())) { - return false; - } - } - level.setBlock(pos, ModBlocks.PLASMA_JETS.getDefaultState(), 3); - return true; - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return Shapes.empty(); - } - - @Override - public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - return createTickerHelper(type, ModBlockEntities.PLASMA_JETS.get(), PlasmaJetsBlockEntity::tick); - } - - @Override - public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return ModBlockEntities.PLASMA_JETS.create(pos, state); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/PropelPiston.java b/src/main/java/dev/dubhe/anvilcraft/block/PropelPiston.java deleted file mode 100644 index ca1154dd35..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/PropelPiston.java +++ /dev/null @@ -1,324 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.mojang.serialization.MapCodec; -import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; -import dev.anvilcraft.lib.v2.piston.injection.IPistonMovingBlockEntityExtension; -import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.block.entity.PropelPistonBlockEntity; -import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.init.item.ModItems; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.tags.BlockTags; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.DirectionalBlock; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.piston.MovingPistonBlock; -import net.minecraft.world.level.block.piston.PistonStructureResolver; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.material.PushReaction; -import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Map; - -public class PropelPiston extends DirectionalBlock implements IMoveableEntityBlock, IHammerRemovable, IHammerChangeable { - public static final BooleanProperty EXHAUSTED = BooleanProperty.create("exhausted"); - public static final BooleanProperty MOVING = BooleanProperty.create("moving"); - - @Override - protected MapCodec codec() { - return simpleCodec(PropelPiston::new); - } - - public PropelPiston(Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any() - .setValue(EXHAUSTED, true) - .setValue(FACING, Direction.NORTH) - .setValue(MOVING, false)); - } - - @Override - public @Nullable PushReaction getPistonPushReaction(BlockState state) { - if (state.getValue(MOVING)) { - return PushReaction.BLOCK; - } - return PushReaction.NORMAL; - } - - @Override - public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { - Direction clickedFace = context.getNearestLookingDirection().getOpposite(); - Player player = context.getPlayer(); - if (player != null && player.isShiftKeyDown()) { - return this.defaultBlockState().setValue(FACING, clickedFace.getOpposite()); - } - return this.defaultBlockState().setValue(FACING, clickedFace); - } - - @Override - protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { - level.setBlockAndUpdate(pos, state.cycle(MOVING)); - return InteractionResult.SUCCESS; - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (level.getBlockEntity(pos) instanceof PropelPistonBlockEntity propelPistonBlockEntity) { - int storedEnergy = propelPistonBlockEntity.getStoredEnergy(); - if (stack.is(ModItems.CAPACITOR)) { - if (storedEnergy < 76000) { - propelPistonBlockEntity.addEnergy(4000); - stack.consume(1, player); - player.addItem(ModItems.CAPACITOR_EMPTY.asStack()); - return ItemInteractionResult.SUCCESS; - } - } else if (stack.is(ModItems.SUPER_CAPACITOR)) { - if (storedEnergy < 20000) { - propelPistonBlockEntity.updateStoredEnergy(80000); - stack.consume(1, player); - player.addItem(ModItems.SUPER_CAPACITOR_EMPTY.asStack()); - return ItemInteractionResult.SUCCESS; - } - } - } - level.setBlockAndUpdate(pos, state.cycle(MOVING)); - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } - - @Override - protected void neighborChanged( - BlockState state, - Level level, - BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston - ) { - if (level.hasNeighborSignal(pos)) { - if (!state.getValue(MOVING)) { - level.setBlockAndUpdate(pos, state.setValue(MOVING, true)); - } - } - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(EXHAUSTED, FACING, MOVING); - } - - @Override - protected BlockState rotate(BlockState state, Rotation rotation) { - return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); - } - - @SuppressWarnings("deprecation") - @Override - protected BlockState mirror(BlockState state, Mirror mirror) { - return state.rotate(mirror.getRotation(state.getValue(FACING))); - } - - @Override - public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return ModBlockEntities.PROPEL_PISTON.create(pos, state); - } - - @Override - public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) { - return null; - } - return createTickerHelper(type, - ModBlockEntities.PROPEL_PISTON.get(), - (level1, blockPos, blockState, blockEntity) -> - blockEntity.tick(level1, blockPos, blockState)); - } - - @Override - public void setPlacedBy(Level level, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { - Integer energy = stack.getOrDefault(ModComponents.STORED_ENERGY, 0); - BlockEntity blockEntity = level.getBlockEntity(pos); - if (blockEntity instanceof PropelPistonBlockEntity propelPistonBlockEntity) { - propelPistonBlockEntity.updateStoredEnergy(energy); - } - } - - @Override - public CompoundTag clearData(Level level, BlockPos pos) { - BlockEntity blockEntity = level.getBlockEntity(pos); - if (blockEntity instanceof PropelPistonBlockEntity propelPistonBlockEntity) { - CompoundTag tag = new CompoundTag(); - tag.putInt("storedEnergyData", propelPistonBlockEntity.getStoredEnergy()); - return tag; - } - return new CompoundTag(); - } - - @Override - public void setData(Level level, BlockPos pos, CompoundTag nbt) { - BlockEntity blockEntity = level.getBlockEntity(pos); - if (blockEntity instanceof PropelPistonBlockEntity propelPistonBlockEntity) { - int data = nbt.getInt("storedEnergyData"); - propelPistonBlockEntity.updateStoredEnergy(data); - } - } - - @Override - protected boolean triggerEvent(BlockState state, Level level, BlockPos pos, int id, int param) { - Direction direction = state.getValue(PropelPiston.FACING); - if (id == 0) { - if (net.neoforged.neoforge.event.EventHooks.onPistonMovePre(level, pos, direction, true)) { - level.setBlockAndUpdate(pos, state.setValue(MOVING, false)); - return false; - } - if (!this.moveBlocks(level, pos, direction)) { - level.setBlockAndUpdate(pos, state.setValue(MOVING, false)); - return false; - } - level.playSound(null, pos, SoundEvents.PISTON_EXTEND, SoundSource.BLOCKS, 0.5F, level.random.nextFloat() * 0.25F + 0.6F); - } - net.neoforged.neoforge.event.EventHooks.onPistonMovePost(level, pos, direction, (id == 0)); - level.scheduleTick(pos.relative(direction), this, 6); - return true; - } - - @Override - public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { - BlockState state = level.getBlockState(blockPos); - level.setBlockAndUpdate(blockPos, state.cycle(FACING)); - return true; - } - - @Override - public @Nullable Property getChangeableProperty(BlockState blockState) { - return FACING; - } - - private boolean moveBlocks(Level level, BlockPos pos, Direction facing) { - PistonStructureResolver pistonstructureresolver = new PistonStructureResolver(level, pos, facing, true); - if (!pistonstructureresolver.resolve()) { - return false; - } else { - Map map = Maps.newHashMap(); - List list = pistonstructureresolver.getToPush(); - List list1 = Lists.newArrayList(); - list.addFirst(pos); - - if (level.getBlockEntity(pos) instanceof PropelPistonBlockEntity propelPistonBlockEntity) { - propelPistonBlockEntity.addEnergy(-(list.size() * 5)); - } - - for (BlockPos blockPos1 : list) { - BlockState blockState = level.getBlockState(blockPos1); - list1.add(blockState); - map.put(blockPos1, blockState); - } - - List list2 = pistonstructureresolver.getToDestroy(); - BlockState[] blockStates = new BlockState[list.size() + list2.size()]; - int i = 0; - - for (int j = list2.size() - 1; j >= 0; j--) { - BlockPos blockPos2 = list2.get(j); - BlockState blockState1 = level.getBlockState(blockPos2); - BlockEntity blockentity = blockState1.hasBlockEntity() ? level.getBlockEntity(blockPos2) : null; - dropResources(blockState1, level, blockPos2, blockentity); - blockState1.onDestroyedByPushReaction(level, blockPos2, facing, level.getFluidState(blockPos2)); - if (!blockState1.is(BlockTags.FIRE)) { - level.addDestroyBlockEffect(blockPos2, blockState1); - } - - blockStates[i++] = blockState1; - } - - for (int k = list.size() - 1; k >= 0; k--) { - BlockPos blockPos3 = list.get(k); - final BlockState blockState5 = level.getBlockState(blockPos3); - blockPos3 = blockPos3.relative(facing); - map.remove(blockPos3); - BlockState blockState8 = Blocks.MOVING_PISTON.defaultBlockState().setValue(FACING, facing); - CompoundTag nbt = new CompoundTag(); - if (list1.get(k).getBlock() instanceof IMoveableEntityBlock block) { - nbt = block.clearData(level, blockPos3.relative(facing.getOpposite())); - } - level.setBlock(blockPos3, blockState8, 68); - BlockEntity blockEntity = MovingPistonBlock.newMovingBlockEntity(blockPos3, blockState8, list1.get(k), facing, true, false); - if (blockEntity instanceof IPistonMovingBlockEntityExtension entity) { - entity.anvillib$setData(nbt); - } - level.setBlockEntity(blockEntity); - blockStates[i++] = blockState5; - } - - BlockState blockState3 = Blocks.AIR.defaultBlockState(); - - for (BlockPos blockPos4 : map.keySet()) { - level.setBlock(blockPos4, blockState3, 82); - } - - for (Map.Entry entry : map.entrySet()) { - BlockPos blockPos5 = entry.getKey(); - BlockState blockState2 = entry.getValue(); - blockState2.updateIndirectNeighbourShapes(level, blockPos5, 2); - blockState3.updateNeighbourShapes(level, blockPos5, 2); - blockState3.updateIndirectNeighbourShapes(level, blockPos5, 2); - } - - i = 0; - - for (int l = list2.size() - 1; l >= 0; l--) { - BlockState blockState7 = blockStates[i++]; - BlockPos blockPos6 = list2.get(l); - blockState7.updateIndirectNeighbourShapes(level, blockPos6, 2); - level.updateNeighborsAt(blockPos6, blockState7.getBlock()); - } - - for (int i1 = list.size() - 1; i1 >= 0; i1--) { - level.updateNeighborsAt(list.get(i1), blockStates[i++].getBlock()); - } - - return true; - } - } - - @SuppressWarnings("unchecked") - @Nullable - public static BlockEntityTicker createTickerHelper( - BlockEntityType serverType, BlockEntityType clientType, BlockEntityTicker ticker - ) { - return clientType == serverType ? (BlockEntityTicker) ticker : null; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ReinforcedConcreteBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/ReinforcedConcreteBlock.java deleted file mode 100644 index 415d862a47..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/ReinforcedConcreteBlock.java +++ /dev/null @@ -1,93 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.block.state.ReinforcedConcreteHalf; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.piston.PistonMovingBlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.EnumProperty; - -public class ReinforcedConcreteBlock extends Block { - public static final EnumProperty HALF = EnumProperty.create("half", ReinforcedConcreteHalf.class); - - public ReinforcedConcreteBlock(Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(HALF, ReinforcedConcreteHalf.SINGLE)); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(HALF); - } - - private boolean checkHalf(BlockState state, ReinforcedConcreteHalf half) { - return state.is(this) && state.getValue(HALF) == half; - } - - /** - * When piston finished a block movement, this block will receive an NC update where neighborPos is - * same as pos. So we cannot ignore the update when neighborPos.equals(pos). - * - * @param pos the position where block being updated - * @param fromPos the position where block update is spread from - * @return If the NC update should be ignored. - * @see PistonMovingBlockEntity#tick(Level, BlockPos, BlockState, PistonMovingBlockEntity) - */ - private static boolean shouldIgnoreUpdate(BlockPos pos, BlockPos fromPos) { - return pos.getY() == fromPos.getY() && (pos.getX() != fromPos.getX() || pos.getZ() != fromPos.getZ()); - } - - @Override - public void neighborChanged( - BlockState state, - Level level, - BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston) { - if (level.isClientSide) return; - if (shouldIgnoreUpdate(pos, neighborPos)) return; - ReinforcedConcreteHalf half = state.getValue(HALF); - BlockState aboveState = level.getBlockState(pos.above()); - BlockState belowState = level.getBlockState(pos.below()); - switch (half) { - case TOP: - if (this.checkHalf(belowState, ReinforcedConcreteHalf.SINGLE)) { - level.setBlock(pos.below(), state.setValue(HALF, ReinforcedConcreteHalf.BOTTOM), 2); - } else if (!this.checkHalf(belowState, ReinforcedConcreteHalf.BOTTOM)) { - level.setBlock(pos, state.setValue(HALF, ReinforcedConcreteHalf.SINGLE), 2); - } - break; - case BOTTOM: - if (this.checkHalf(aboveState, ReinforcedConcreteHalf.SINGLE)) { - level.setBlock(pos.above(), state.setValue(HALF, ReinforcedConcreteHalf.TOP), 2); - } else if (!this.checkHalf(aboveState, ReinforcedConcreteHalf.TOP)) { - level.setBlock(pos, state.setValue(HALF, ReinforcedConcreteHalf.SINGLE), 2); - } - break; - case SINGLE: - if (neighborPos.equals(pos.below()) && this.checkHalf(belowState, ReinforcedConcreteHalf.SINGLE)) { - level.setBlock(pos, state.setValue(HALF, ReinforcedConcreteHalf.TOP), 2); - level.setBlock(pos.below(), state.setValue(HALF, ReinforcedConcreteHalf.BOTTOM), 2); - } else if (neighborPos.equals(pos.above()) && this.checkHalf(aboveState, ReinforcedConcreteHalf.SINGLE)) { - level.setBlock(pos, state.setValue(HALF, ReinforcedConcreteHalf.BOTTOM), 2); - level.setBlock(pos.above(), state.setValue(HALF, ReinforcedConcreteHalf.TOP), 2); - } - break; - default: - } - } - - @Override - public void tick( - BlockState state, - ServerLevel level, - BlockPos pos, - RandomSource random) { - super.tick(state, level, pos, random); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/SimpleChuteBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/SimpleChuteBlock.java deleted file mode 100644 index 7dbb66742b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/SimpleChuteBlock.java +++ /dev/null @@ -1,318 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; -import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; -import dev.dubhe.anvilcraft.block.entity.ChuteBlockEntity; -import dev.dubhe.anvilcraft.block.entity.SimpleChuteBlockEntity; -import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.Containers; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.SimpleWaterloggedBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.Fluids; -import net.minecraft.world.level.pathfinder.PathComputationType; -import net.minecraft.world.phys.HitResult; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.BooleanOp; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.items.IItemHandler; -import org.jetbrains.annotations.Nullable; - -public class SimpleChuteBlock - extends BaseEntityBlock - implements SimpleWaterloggedBlock, IHammerChangeable, IHammerRemovable { - public static final DirectionProperty FACING = BlockStateProperties.FACING_HOPPER; - public static final BooleanProperty ENABLED = BlockStateProperties.ENABLED; - public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; - public static final BooleanProperty TALL = BooleanProperty.create("tall"); - - public static final VoxelShape AABB = Block.box(2, 0, 2, 14, 12, 14); - public static final VoxelShape AABB_TALL = Block.box(2, 0, 2, 14, 16, 14); - public static final VoxelShape AABB_N = Block.box(4, 4, 0, 12, 12, 12); - public static final VoxelShape AABB_TALL_N = - Shapes.join(Block.box(4, 4, 0, 12, 12, 12), Block.box(2, 8, 2, 14, 16, 14), BooleanOp.OR); - public static final VoxelShape AABB_E = Block.box(4, 4, 4, 16, 12, 12); - public static final VoxelShape AABB_TALL_E = - Shapes.join(Block.box(4, 4, 4, 16, 12, 12), Block.box(2, 8, 2, 14, 16, 14), BooleanOp.OR); - public static final VoxelShape AABB_S = Block.box(4, 4, 4, 12, 12, 16); - public static final VoxelShape AABB_TALL_S = - Shapes.join(Block.box(4, 4, 4, 12, 12, 16), Block.box(2, 8, 2, 14, 16, 14), BooleanOp.OR); - public static final VoxelShape AABB_W = Block.box(0, 4, 4, 12, 12, 12); - public static final VoxelShape AABB_TALL_W = - Shapes.join(Block.box(0, 4, 4, 12, 12, 12), Block.box(2, 8, 2, 14, 16, 14), BooleanOp.OR); - - public SimpleChuteBlock(Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition - .any() - .setValue(FACING, Direction.DOWN) - .setValue(WATERLOGGED, false) - .setValue(ENABLED, true) - .setValue(TALL, false)); - } - - @Override - protected MapCodec codec() { - return simpleCodec(SimpleChuteBlock::new); - } - - @Nullable - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new SimpleChuteBlockEntity(ModBlockEntities.SIMPLE_CHUTE.get(), pos, state); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING, WATERLOGGED, ENABLED, TALL); - } - - @Override - protected void neighborChanged( - BlockState state, - Level level, - BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston - ) { - if (level.isClientSide) return; - BlockState neighborState = level.getBlockState(neighborPos); - Block neighborBlock1 = neighborState.getBlock(); - if (ChuteBlock.isChuteBlock(neighborBlock) || ChuteBlock.isChuteBlock(neighborBlock1)) { - BlockState newState = getState(level, pos, state.getValue(FACING)); - if (newState != null && newState != state) level.setBlockAndUpdate(pos, newState); - } - this.checkPoweredState(level, pos, state); - } - - private void checkPoweredState(Level level, BlockPos pos, BlockState state) { - boolean flag = !level.hasNeighborSignal(pos); - if (flag != state.getValue(ENABLED)) { - level.setBlock(pos, state.setValue(ENABLED, flag), 2); - } - } - - @Override - protected BlockState updateShape( - BlockState state, - Direction facing, - BlockState facingState, - LevelAccessor level, - BlockPos currentPos, - BlockPos facingPos - ) { - if (state.getValue(WATERLOGGED)) { - level.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); - } - return super.updateShape(state, facing, facingState, level, currentPos, facingPos); - } - - @Override - public ItemStack getCloneItemStack( - BlockState state, - HitResult target, - LevelReader level, - BlockPos pos, - Player player - ) { - return new ItemStack(ModBlocks.CHUTE); - } - - @Override - public void tick( - BlockState state, - ServerLevel level, - BlockPos pos, - RandomSource random - ) { - if (!state.getValue(ENABLED) && !level.hasNeighborSignal(pos)) { - level.setBlock(pos, state.cycle(ENABLED), 2); - } - } - - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - - @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (!state.is(newState.getBlock())) { - if (level.getBlockEntity(pos) instanceof SimpleChuteBlockEntity oldEntity) { - IItemHandler oldHandler = oldEntity.getItemHandler(); - if (newState.is(ModBlocks.CHUTE.get())) { - level.removeBlockEntity(pos); - level.setBlock(pos, newState, 2); - IItemHandler newHandler = null; - if (level.getBlockEntity(pos) instanceof ChuteBlockEntity newEntity) { - newHandler = newEntity.getItemHandler(); - } - ItemHandlerUtil.exportToTarget(oldHandler, 64, stack -> true, newHandler); - } else level.removeBlockEntity(pos); - Vec3 vec3 = oldEntity.getBlockPos().getCenter(); - for (int slot = 0; slot < oldHandler.getSlots(); slot++) { - Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, oldHandler.getStackInSlot(slot)); - } - level.updateNeighbourForOutputSignal(pos, this); - } - } - - } - - @Nullable - @Override - public BlockEntityTicker getTicker( - Level level, BlockState state, BlockEntityType blockEntityType) { - if (level.isClientSide) return null; - return createTickerHelper( - blockEntityType, - ModBlockEntities.SIMPLE_CHUTE.get(), - ((level1, blockPos, blockState, blockEntity) -> blockEntity.tick())); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - Direction facing = state.getValue(FACING); - if (!state.getValue(TALL)) { - return switch (facing) { - case NORTH -> AABB_N; - case EAST -> AABB_E; - case SOUTH -> AABB_S; - case WEST -> AABB_W; - default -> AABB; - }; - } else { - return switch (facing) { - case NORTH -> AABB_TALL_N; - case EAST -> AABB_TALL_E; - case SOUTH -> AABB_TALL_S; - case WEST -> AABB_TALL_W; - default -> AABB_TALL; - }; - } - } - - @Override - protected boolean isPathfindable(BlockState state, PathComputationType pathComputationType) { - return false; - } - - @Override - public boolean hasAnalogOutputSignal(BlockState blockState) { - return true; - } - - @Override - public int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos blockPos) { - BlockEntity blockEntity = level.getBlockEntity(blockPos); - if (blockEntity instanceof SimpleChuteBlockEntity chuteBlockEntity) { - return chuteBlockEntity.getRedstoneSignal(); - } - return 0; - } - - @Override - public FluidState getFluidState(BlockState state) { - return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); - } - - @Override - public boolean change(Player player, BlockPos pos, Level level, ItemStack anvilHammer) { - HammerRotateBehavior.DEFAULT.change(player, pos, level, anvilHammer); - BlockState state = level.getBlockState(pos); - BlockState facingState = level.getBlockState(pos.relative(state.getValue(FACING))); - if (facingState.is(ModBlocks.CHUTE.get()) || facingState.is(ModBlocks.SIMPLE_CHUTE.get())) { - if (facingState.getValue(FACING).getOpposite() == state.getValue(FACING)) { - return this.change(player, pos, level, anvilHammer); - } - } - return true; - } - - @Override - public @Nullable Property getChangeableProperty(BlockState blockState) { - return FACING; - } - - @Override - public BlockState rotate(BlockState state, Rotation rotation) { - return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); - } - - @SuppressWarnings("deprecation") - @Override - public BlockState mirror(BlockState state, Mirror mirror) { - return state.rotate(mirror.getRotation(state.getValue(FACING))); - } - - @Nullable - BlockState getState(Level level, BlockPos pos, Direction facing) { - boolean success = false; - boolean tall = false; - BlockState result = level.getBlockState(pos); - // 遍历六个方向 获取指向自己的溜槽 - for (Direction dir : Direction.values()) { - BlockPos neighborPos = pos.relative(dir); - BlockState neighborState = level.getBlockState(neighborPos); - if (ChuteBlock.isChuteBlock(neighborState)) { - if (ChuteBlock.getFacing(neighborState) == dir.getOpposite()) { - success = true; - if (dir == Direction.UP) { - tall = !neighborState.is(ModBlocks.MAGNETIC_CHUTE.get()); - } - } - - } - } - if (!success) { - result = ModBlocks.CHUTE.getDefaultState() - .setValue(FACING, facing) - .setValue(ENABLED, !level.hasNeighborSignal(pos)); - } else { - result = result.setValue(TALL, tall); - } - return result; - } - - // 防止流体流动时破坏溜槽 - @Override - public boolean canBeReplaced(BlockState state, net.minecraft.world.level.material.Fluid fluid) { - return false; - } - - // 防止玩家使用桶放置流体时直接替换掉溜槽 - @Override - public boolean canBeReplaced(BlockState state, net.minecraft.world.item.context.BlockPlaceContext context) { - return false; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/SpaceOvercompressorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/SpaceOvercompressorBlock.java deleted file mode 100644 index 20e028c95a..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/SpaceOvercompressorBlock.java +++ /dev/null @@ -1,55 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import com.mojang.serialization.MapCodec; -import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; -import dev.dubhe.anvilcraft.block.entity.SpaceOvercompressorBlockEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; - -public class SpaceOvercompressorBlock extends BetterBaseEntityBlock implements IHammerRemovable, IMoveableEntityBlock { - public SpaceOvercompressorBlock(Properties properties) { - super(properties); - } - - @Override - protected RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - - @Override - protected MapCodec codec() { - return simpleCodec(SpaceOvercompressorBlock::new); - } - - @Override - public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new SpaceOvercompressorBlockEntity(pos, state); - } - - @Override - public CompoundTag clearData(Level level, BlockPos pos) { - CompoundTag tag = new CompoundTag(); - BlockEntity entity = level.getBlockEntity(pos); - if (entity instanceof SpaceOvercompressorBlockEntity s) { - tag.putLong("storedMass", s.getStoredMass()); - } - return tag; - } - - @Override - public void setData(Level level, BlockPos pos, CompoundTag nbt) { - BlockEntity entity = level.getBlockEntity(pos); - long mass = nbt.getLong("storedMass"); - if (entity instanceof SpaceOvercompressorBlockEntity s) { - s.injectMass(mass - s.getStoredMass()); - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/StepEffectBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/StepEffectBlock.java deleted file mode 100644 index 7a8c486a75..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/StepEffectBlock.java +++ /dev/null @@ -1,48 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; - -import java.util.function.Consumer; - -public class StepEffectBlock extends Block { - private final Consumer stepAction; - public static final int EFFECT_PERIOD = 80; - public static final int EFFECT_DURATION = 180; - - public StepEffectBlock(Properties properties, Consumer stepAction) { - super(properties); - this.stepAction = stepAction; - } - - @Override - public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { - stepAction.accept(entity); - } - - public static void stepOnChocolateBlock(Entity entity) { - if (!(entity instanceof Player player)) return; - if (entity.level().getGameTime() % EFFECT_PERIOD != 0) return; - player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, EFFECT_DURATION, 9, true, true)); - } - - public static void stepOnBlackChocolateBlock(Entity entity) { - if (!(entity instanceof Player player)) return; - if (entity.level().getGameTime() % EFFECT_PERIOD != 0) return; - player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, EFFECT_DURATION, 4, true, true)); - player.addEffect(new MobEffectInstance(MobEffects.DIG_SPEED, EFFECT_DURATION, 3, true, true)); - } - - public static void stepOnWhiteChocolateBlock(Entity entity) { - if (!(entity instanceof Player player)) return; - if (entity.level().getGameTime() % EFFECT_PERIOD != 0) return; - player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, EFFECT_DURATION, 4, true, true)); - player.addEffect(new MobEffectInstance(MobEffects.JUMP, EFFECT_DURATION, 5, true, true)); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/TransparentCraftingTableBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/TransparentCraftingTableBlock.java deleted file mode 100644 index 3329e26c28..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/TransparentCraftingTableBlock.java +++ /dev/null @@ -1,287 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.AnvilCraft; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.init.ModMenuTypes; -import dev.dubhe.anvilcraft.init.block.ModBlockTags; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.stats.Stats; -import net.minecraft.util.StringRepresentable; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.MenuProvider; -import net.minecraft.world.SimpleMenuProvider; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.ContainerLevelAccess; -import net.minecraft.world.inventory.CraftingMenu; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.TransparentBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.EnumProperty; -import net.minecraft.world.phys.BlockHitResult; - -public class TransparentCraftingTableBlock extends TransparentBlock implements IHammerRemovable { - - public static final EnumProperty TYPE = EnumProperty.create("type", Type.class); - - public TransparentCraftingTableBlock(Properties properties) { - super(properties); - registerDefaultState(stateDefinition.any().setValue(TYPE, Type.SINGLE)); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(TYPE); - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (stack.is(ModBlocks.TRANSPARENT_CRAFTING_TABLE.asItem())) { - return ItemInteractionResult.SKIP_DEFAULT_BLOCK_INTERACTION; - } - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - - @Override - protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { - if (level.isClientSide) return InteractionResult.SUCCESS; - ModMenuTypes.open((ServerPlayer) player, getMenuProvider(state, level, pos)); - player.awardStat(Stats.INTERACT_WITH_CRAFTING_TABLE); - return InteractionResult.sidedSuccess(level.isClientSide()); - } - - @Override - protected MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) { - return new SimpleMenuProvider( - (id, inventory, player) -> new CraftingMenu(id, inventory, ContainerLevelAccess.create(level, pos)), - Component.translatable("container.crafting") - ); - } - - @Override - protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { - if (oldState.is(this)) return; - if (this.tryFormMatrix(level, pos)) { - return; - } - if (state.getValue(TYPE) != Type.SINGLE) level.setBlockAndUpdate(pos, state.setValue(TYPE, Type.SINGLE)); - Direction.Plane.HORIZONTAL.stream() - .map(pos::relative) - .filter(poz -> { - BlockState adjacentState = level.getBlockState(poz); - return adjacentState.is(this) && adjacentState.getValue(TYPE) != Type.SINGLE; - }) - .forEach(poz -> deformMatrix(level, poz)); - } - - @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (newState.is(this)) return; - if (state.getValue(TYPE) != Type.SINGLE) { - this.deformMatrix(level, pos); - return; - } - Direction.Plane.HORIZONTAL.stream() - .map(pos::relative) - .forEach(poz -> this.tryFormMatrix(level, poz)); - } - - @Override - protected BlockState updateShape( - BlockState state, - Direction direction, - BlockState neighborState, - LevelAccessor level, - BlockPos pos, - BlockPos neighborPos - ) { - if (neighborState.is(this)) return state; - if (this.tryFormMatrix((Level) level, pos)) { - return state; - } - if (state.getValue(TYPE) != Type.SINGLE && !isValidMatrixBlock(neighborState, false)) { - this.deformMatrix((Level) level, pos); - return state; - } - return state; - } - - /** - * 以某个方块为起始点,尝试构建一个有透明工作台组成的矩阵。 - * 若与该方块相连的所有透明工作台不构成一个长方形,构建失败。 - * - * @param level 尝试构建矩阵的维度 - * @param pos 尝试构建矩阵的方块位置 - * @return 是否成功构建透明工作台矩阵 - */ - private boolean tryFormMatrix(Level level, BlockPos pos) { - if (!isValidMatrixBlock(level.getBlockState(pos), false)) return false; - int maxSize = AnvilCraft.CONFIG.transparentCraftingTableMaxMatrixSize; - int x0 = pos.getX(); - int y0 = pos.getY(); - int z0 = pos.getZ(); - BlockPos.MutableBlockPos mpos = pos.mutable(); - // 以放置方块为起始点,向正负x、z轴逐个延申并进行检测,扩充至最大作为矩阵尺寸。 - int minX = x0; - int maxX = x0; - while ((maxX - minX < maxSize) && isValidMatrixBlock(level.getBlockState(mpos.set(minX - 1, y0, z0)), false)) { - minX--; - } - while ((maxX - minX < maxSize) && isValidMatrixBlock(level.getBlockState(mpos.set(maxX + 1, y0, z0)), false)) { - maxX++; - } - int sizeX = maxX - minX + 1; - if (sizeX < 2 || sizeX > maxSize) return false; - int minZ = z0; - int maxZ = z0; - while ((maxZ - minZ < maxSize) && isValidMatrixBlock(level.getBlockState(mpos.set(x0, y0, minZ - 1)), false)) { - minZ--; - } - while ((maxZ - minZ < maxSize) && isValidMatrixBlock(level.getBlockState(mpos.set(x0, y0, maxZ + 1)), false)) { - maxZ++; - } - int sizeZ = maxZ - minZ + 1; - if (sizeZ < 2 || sizeZ > maxSize) return false; - // 检测矩阵内所有方块是否匹配 - for (int x = minX; x <= maxX; x++) { - if (x == x0) continue; - for (int z = minZ; z <= maxZ; z++) { - if (z == z0) continue; - if (!isValidMatrixBlock(level.getBlockState(mpos.set(x, y0, z)), false)) return false; - } - } - // 向矩阵外圈检测是否有多余的方块 - for (int x = minX; x <= maxX; x++) { - if (isValidMatrixBlock(level.getBlockState(mpos.set(x, y0, minZ - 1)), true)) return false; - if (isValidMatrixBlock(level.getBlockState(mpos.set(x, y0, maxZ + 1)), true)) return false; - } - for (int z = minZ; z <= maxZ; z++) { - if (isValidMatrixBlock(level.getBlockState(mpos.set(minX - 1, y0, z)), true)) return false; - if (isValidMatrixBlock(level.getBlockState(mpos.set(maxX + 1, y0, z)), true)) return false; - } - // 将矩阵内的通透工作台转换为连接状态 - for (int x = minX; x <= maxX; x++) { - for (int z = minZ; z <= maxZ; z++) { - int indexX = x == maxX ? 2 : x > minX ? 1 : 0; - int indexZ = z == maxZ ? 2 : z > minZ ? 1 : 0; - BlockState state = level.getBlockState(mpos.set(x, y0, z)); - if (!state.is(this)) continue; - level.setBlockAndUpdate(mpos, state.setValue(TYPE, Type.LOOKUP[indexX][indexZ])); - } - } - return true; - } - - /** - * 以某个方块为起始点,尝试移除该方块所属的透明工作台组成的矩阵。 - * - * @param level 尝试移除矩阵的维度 - * @param pos 尝试移除矩阵的方块位置 - */ - private void deformMatrix(Level level, BlockPos pos) { - int x0 = pos.getX(); - int y0 = pos.getY(); - int z0 = pos.getZ(); - BlockPos.MutableBlockPos mpos = pos.mutable(); - - int minX = x0; - int maxX = x0; - while (isValidMatrixBlock(level.getBlockState(mpos.set(minX - 1, y0, z0)), false)) { - minX--; - } - while (isValidMatrixBlock(level.getBlockState(mpos.set(maxX + 1, y0, z0)), false)) { - maxX++; - } - int minZ = z0; - int maxZ = z0; - while (isValidMatrixBlock(level.getBlockState(mpos.set(x0, y0, minZ - 1)), false)) { - minZ--; - } - while (isValidMatrixBlock(level.getBlockState(mpos.set(x0, y0, maxZ + 1)), false)) { - maxZ++; - } - - for (int x = minX; x <= maxX; x++) { - for (int z = minZ; z <= maxZ; z++) { - BlockState state = level.getBlockState(mpos.set(x, y0, z)); - if (!state.is(this)) continue; - level.setBlockAndUpdate(mpos, state.setValue(TYPE, Type.SINGLE)); - } - } - } - - /** - * 判断是否是通透工作台或其它允许参与形成矩阵的方块(目前仅包含空间超压器)。 - * - * @param block 需要进行判断的方块 - * @param isSelfOnly 是否只匹配通透工作台 - * @return 判断结果 - */ - public boolean isValidMatrixBlock(BlockState block, Boolean isSelfOnly) { - return block.is(this) || (!isSelfOnly && block.is(ModBlockTags.CRAFTING_MATRIX_ELEMENT)); - } - - public enum Type implements StringRepresentable { - SINGLE("single"), - CENTER("center"), - SIDE_NORTH("side_n"), - SIDE_EAST("side_e"), - SIDE_SOUTH("side_s"), - SIDE_WEST("side_w"), - CORNER_NORTH_WEST("corner_nw"), - CORNER_NORTH_EAST("corner_ne"), - CORNER_SOUTH_WEST("corner_sw"), - CORNER_SOUTH_EAST("corner_se"); - - public static final Type[][] LOOKUP = { - { - CORNER_NORTH_WEST, - SIDE_WEST, - CORNER_SOUTH_WEST - }, - { - SIDE_NORTH, - CENTER, - SIDE_SOUTH - }, - { - CORNER_NORTH_EAST, - SIDE_EAST, - CORNER_SOUTH_EAST - } - }; - - final String serializedName; - - Type(String serializedName) { - this.serializedName = serializedName; - } - - @Override - public String getSerializedName() { - return serializedName; - } - - @Override - public String toString() { - return getSerializedName(); - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/VoidMatterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/VoidMatterBlock.java deleted file mode 100644 index 14cca35e4e..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/VoidMatterBlock.java +++ /dev/null @@ -1,39 +0,0 @@ -package dev.dubhe.anvilcraft.block; - -import dev.dubhe.anvilcraft.init.block.ModBlockTags; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.registries.Registries; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; - -public class VoidMatterBlock extends Block { - public static final int VOID_DECAY_THRESHOLD = 5; - - public VoidMatterBlock(Properties properties) { - super(properties.randomTicks()); - } - - public static BlockState voidDecay(Level level, BlockPos pos, BlockState state, RandomSource random) { - return level.registryAccess().registryOrThrow(Registries.BLOCK) - .getTag(ModBlockTags.VOID_DECAY_PRODUCTS) - .flatMap(it -> it.getRandomElement(random)) - .map(h -> h.value().defaultBlockState()) - .orElse(state); - } - - @Override - protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - long neighborVoidMatterCount = Direction.stream() - .map(d -> level.getBlockState(pos.relative(d))) - .filter(b -> b.getBlock() instanceof VoidMatterBlock) - .count(); - if (neighborVoidMatterCount >= VOID_DECAY_THRESHOLD) { - level.setBlockAndUpdate(pos, voidDecay(level, pos, state, random)); - } - } - -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/batch/BaseBatchCraftingBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/batch/BaseBatchCraftingBlock.java deleted file mode 100644 index a9a97c5b4c..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/batch/BaseBatchCraftingBlock.java +++ /dev/null @@ -1,227 +0,0 @@ -package dev.dubhe.anvilcraft.block.batch; - -import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; -import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.api.item.IDiskCloneable; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; -import dev.dubhe.anvilcraft.api.power.IPowerComponent; -import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; -import dev.dubhe.anvilcraft.block.entity.batch.BatchCrafterBlockEntity; -import dev.dubhe.anvilcraft.init.item.ModItems; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.Containers; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.DirectionalBlock; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.items.IItemHandler; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.Unmodifiable; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Supplier; - -public abstract class BaseBatchCraftingBlock extends BetterBaseEntityBlock implements HammerRotateBehavior, IHammerRemovable { - public static final DirectionProperty FACING = DirectionalBlock.FACING; - public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; - - protected BaseBatchCraftingBlock(Properties properties) { - super(properties); - this.registerDefaultState( - this.stateDefinition - .any() - .setValue(POWERED, false) - .setValue(OVERLOAD, true) - .setValue(FACING, Direction.NORTH) - ); - } - - @Override - public boolean hasAnalogOutputSignal(BlockState state) { - return true; - } - - @Override - public int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos blockPos) { - BlockEntity blockEntity = level.getBlockEntity(blockPos); - if (blockEntity instanceof BatchCrafterBlockEntity crafterBlockEntity) { - return crafterBlockEntity.getRedstoneSignal(); - } - return 0; - } - - @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - if (level.isClientSide) return InteractionResult.SUCCESS; - - BlockEntity be = level.getBlockEntity(pos); - ItemStack stack = player.getItemInHand(hand); - if (be instanceof IDiskCloneable cloneable && stack.is(ModItems.DISK.get())) { - return cloneable.useDisk(level, player, hand, stack, hit); - } - - return this.playerUse(level, pos, state, be, player, hand, hit); - } - - /** - * 当玩家交互此方块时调用 - * - * @param level 方块所在的世界 - * @param pos 方块所在的位置 - * @param state 方块的状态 - * @param be 方块的方块实体 - * @param player 交互该方块的玩家 - * @param hand 玩家交互该方块的手 - * @param hit 玩家视线与方块的碰撞计算结果 - * @return 此次交互的结果 - */ - protected abstract InteractionResult playerUse( - Level level, - BlockPos pos, - BlockState state, - @Nullable BlockEntity be, - Player player, - InteractionHand hand, - BlockHitResult hit - ); - - public abstract Item getToastSymbol(); - - @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (state.is(newState.getBlock())) return; - if (level.getBlockEntity(pos) instanceof IItemHandlerHolder holder) { - Vec3 vec3 = pos.getCenter(); - IItemHandler handler = holder.getItemHandler(); - for (int slot = 0; slot < handler.getSlots(); slot++) { - Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, handler.getStackInSlot(slot)); - } - level.updateNeighbourForOutputSignal(pos, this); - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - - @Override - public boolean useShapeForLightOcclusion(BlockState state) { - return true; - } - - @Override - public VoxelShape getVisualShape( - BlockState state, - BlockGetter level, - BlockPos pos, - CollisionContext context - ) { - return Shapes.empty(); - } - - @Override - public float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { - return 1.0F; - } - - @Override - public boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { - return false; - } - - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - - @Override - @Nullable - public BlockState getStateForPlacement(BlockPlaceContext context) { - Direction dir = context.getNearestLookingDirection().getOpposite(); - if (context.getPlayer() != null && context.getPlayer().isShiftKeyDown()) dir = dir.getOpposite(); - return this.defaultBlockState() - .setValue(FACING, dir) - .setValue(POWERED, context.getLevel().hasNeighborSignal(context.getClickedPos())) - .setValue(OVERLOAD, true); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(POWERED).add(OVERLOAD).add(FACING); - } - - @Override - public void neighborChanged( - BlockState state, - Level level, - BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston - ) { - if (level.isClientSide) return; - level.setBlock(pos, state.setValue(POWERED, level.hasNeighborSignal(pos)), 2); - } - - @Override - public void tick( - BlockState state, - ServerLevel level, - BlockPos pos, - RandomSource random - ) { - if (state.getValue(POWERED) && !level.hasNeighborSignal(pos)) { - level.setBlock(pos, state.cycle(POWERED), 2); - } - } - - @Override - public BlockState rotate(BlockState state, Rotation rotation) { - return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); - } - - @Override - public BlockState mirror(BlockState state, Mirror mirror) { - return this.rotate(state, mirror.getRotation(state.getValue(FACING))); - } - - public static BlockState copy(BlockState from, BlockState to) { - if (!(from.getBlock() instanceof BaseBatchCraftingBlock) || !(to.getBlock() instanceof BaseBatchCraftingBlock)) return to; - return to - .setValue(POWERED, from.getValue(POWERED)) - .setValue(OVERLOAD, from.getValue(OVERLOAD)) - .setValue(FACING, from.getValue(FACING)); - } - - private static final List> BATCH_CRAFTING_BLOCK_GETTERS = new ArrayList<>(); - - public static void registerBatchCrafting(Supplier getter) { - BaseBatchCraftingBlock.BATCH_CRAFTING_BLOCK_GETTERS.add(getter); - } - - public static @Unmodifiable List> getBatchCraftingBlockGetters() { - return BaseBatchCraftingBlock.BATCH_CRAFTING_BLOCK_GETTERS; - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/batch/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/batch/package-info.java deleted file mode 100644 index f341281f49..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/batch/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.block.batch; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterAbstractCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterAbstractCauldronBlock.java deleted file mode 100644 index 2eb880d340..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterAbstractCauldronBlock.java +++ /dev/null @@ -1,28 +0,0 @@ -package dev.dubhe.anvilcraft.block.better; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.AbstractCauldronBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.HitResult; - -public abstract class BetterAbstractCauldronBlock extends AbstractCauldronBlock { - public BetterAbstractCauldronBlock(Properties properties, CauldronInteraction.InteractionMap interactions) { - super(properties, interactions); - } - - @Override - public ItemStack getCloneItemStack( - BlockState state, - HitResult target, - LevelReader level, - BlockPos pos, - Player player - ) { - return new ItemStack(Items.CAULDRON); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterAnvilBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterAnvilBlock.java index 031dbf45ed..67370351cf 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterAnvilBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterAnvilBlock.java @@ -1,10 +1,8 @@ package dev.dubhe.anvilcraft.block.better; -import dev.anvilcraft.lib.v2.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -18,7 +16,7 @@ public BetterAnvilBlock(Properties properties) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -27,7 +25,7 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - return Util.interactionResultConverter().apply(this.use(state, level, pos, player, hand, hitResult)); + return this.use(state, level, pos, player, hand, hitResult); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterBaseEntityBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterBaseEntityBlock.java index 0eba4c4c4f..643ff3083e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterBaseEntityBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterBaseEntityBlock.java @@ -1,10 +1,8 @@ package dev.dubhe.anvilcraft.block.better; -import dev.anvilcraft.lib.v2.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -18,7 +16,7 @@ protected BetterBaseEntityBlock(Properties properties) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -27,7 +25,7 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - return Util.interactionResultConverter().apply(this.use(state, level, pos, player, hand, hitResult)); + return this.use(state, level, pos, player, hand, hitResult); } @Override @@ -41,8 +39,7 @@ protected InteractionResult useWithoutItem( return this.use(state, level, pos, player, InteractionHand.MAIN_HAND, hitResult); } - public InteractionResult use( - BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { return InteractionResult.PASS; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterBlock.java index 3dfab5c74f..a3efe20994 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterBlock.java @@ -1,10 +1,8 @@ package dev.dubhe.anvilcraft.block.better; -import dev.anvilcraft.lib.v2.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -18,7 +16,7 @@ public BetterBlock(Properties properties) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -27,7 +25,7 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - return Util.interactionResultConverter().apply(this.use(state, level, pos, player, hand, hitResult)); + return this.use(state, level, pos, player, hand, hitResult); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterGrindstoneBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterGrindstoneBlock.java index 3aac99d98f..6ac6a3ecae 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/better/BetterGrindstoneBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/better/BetterGrindstoneBlock.java @@ -1,10 +1,8 @@ package dev.dubhe.anvilcraft.block.better; -import dev.anvilcraft.lib.v2.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -19,7 +17,7 @@ public BetterGrindstoneBlock(Properties properties) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -28,7 +26,7 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - return Util.interactionResultConverter().apply(this.use(state, level, pos, player, hand, hitResult)); + return this.use(state, level, pos, player, hand, hitResult); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/better/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/better/package-info.java index 39c8d95fe3..b2f3f5536e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/better/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/better/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.better; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/BerryCakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/BerryCakeBlock.java new file mode 100644 index 0000000000..a2404fee7a --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/BerryCakeBlock.java @@ -0,0 +1,18 @@ +package dev.dubhe.anvilcraft.block.cake; + +public class BerryCakeBlock extends ShovelEatableCakeBlock { + + public BerryCakeBlock(Properties properties) { + super(properties); + } + + @Override + public int getFoodLevel() { + return 14; + } + + @Override + public float getSaturationLevel() { + return 0.6F; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/BerryCreamBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/BerryCreamBlock.java new file mode 100644 index 0000000000..a433fddec9 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/BerryCreamBlock.java @@ -0,0 +1,18 @@ +package dev.dubhe.anvilcraft.block.cake; + +public class BerryCreamBlock extends ShovelEatableCakeBlock { + + public BerryCreamBlock(Properties properties) { + super(properties); + } + + @Override + public int getFoodLevel() { + return 8; + } + + @Override + public float getSaturationLevel() { + return 0.4F; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/CakeBaseBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/CakeBaseBlock.java new file mode 100644 index 0000000000..97b0109e96 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/CakeBaseBlock.java @@ -0,0 +1,18 @@ +package dev.dubhe.anvilcraft.block.cake; + +public class CakeBaseBlock extends ShovelEatableCakeBlock { + + public CakeBaseBlock(Properties properties) { + super(properties); + } + + @Override + public int getFoodLevel() { + return 5; + } + + @Override + public float getSaturationLevel() { + return 0.8F; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/CakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/CakeBlock.java new file mode 100644 index 0000000000..4401545eca --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/CakeBlock.java @@ -0,0 +1,18 @@ +package dev.dubhe.anvilcraft.block.cake; + +public class CakeBlock extends ShovelEatableCakeBlock { + + public CakeBlock(Properties properties) { + super(properties); + } + + @Override + public int getFoodLevel() { + return 10; + } + + @Override + public float getSaturationLevel() { + return 0.6F; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/ChocolateCakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/ChocolateCakeBlock.java new file mode 100644 index 0000000000..327138e4a3 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/ChocolateCakeBlock.java @@ -0,0 +1,18 @@ +package dev.dubhe.anvilcraft.block.cake; + +public class ChocolateCakeBlock extends ShovelEatableCakeBlock { + + public ChocolateCakeBlock(Properties properties) { + super(properties); + } + + @Override + public int getFoodLevel() { + return 20; + } + + @Override + public float getSaturationLevel() { + return 0.6F; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/ChocolateCreamBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/ChocolateCreamBlock.java new file mode 100644 index 0000000000..a58ae90a82 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/ChocolateCreamBlock.java @@ -0,0 +1,18 @@ +package dev.dubhe.anvilcraft.block.cake; + +public class ChocolateCreamBlock extends ShovelEatableCakeBlock { + + public ChocolateCreamBlock(Properties properties) { + super(properties); + } + + @Override + public int getFoodLevel() { + return 12; + } + + @Override + public float getSaturationLevel() { + return 0.4F; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/CreamBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/CreamBlock.java new file mode 100644 index 0000000000..f5be2ab253 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/CreamBlock.java @@ -0,0 +1,18 @@ +package dev.dubhe.anvilcraft.block.cake; + +public class CreamBlock extends ShovelEatableCakeBlock { + + public CreamBlock(Properties properties) { + super(properties); + } + + @Override + public int getFoodLevel() { + return 5; + } + + @Override + public float getSaturationLevel() { + return 0.4F; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/LargeCakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/LargeCakeBlock.java similarity index 94% rename from src/main/java/dev/dubhe/anvilcraft/block/LargeCakeBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/cake/LargeCakeBlock.java index c507f03894..f5fdb14baa 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/LargeCakeBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/LargeCakeBlock.java @@ -1,10 +1,12 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.cake; import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock; import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.monster.piglin.PiglinAi; @@ -12,8 +14,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Mirror; @@ -202,7 +204,7 @@ public float getShadeBrightness(BlockState state, BlockGetter level, BlockPos po } @Override - public boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + protected boolean propagatesSkylightDown(BlockState state) { return true; } @@ -223,23 +225,29 @@ public void onPlace( } @Override - public BlockState updateShape( + protected BlockState updateShape( BlockState state, + LevelReader level, + ScheduledTickAccess ticks, + BlockPos pos, Direction direction, + BlockPos neighborPos, BlockState neighborState, - LevelAccessor level, - BlockPos pos, - BlockPos neighborPos + RandomSource random ) { return direction == Direction.DOWN && !state.canSurvive(level, pos) ? Blocks.AIR.defaultBlockState() : state; } @Override public BlockState playerWillDestroy( - Level level, BlockPos pos, BlockState state, Player player) { + Level level, + BlockPos pos, + BlockState state, + Player player + ) { this.spawnDestroyParticles(level, player, pos, state); - if (state.is(BlockTags.GUARDED_BY_PIGLINS)) { - PiglinAi.angerNearbyPiglins(player, false); + if (level instanceof ServerLevel && state.is(BlockTags.GUARDED_BY_PIGLINS)) { + PiglinAi.angerNearbyPiglins((ServerLevel) level, player, false); } level.gameEvent(GameEvent.BLOCK_DESTROY, pos, GameEvent.Context.of(player, state)); @@ -262,7 +270,7 @@ public InteractionResult use( BlockHitResult hit ) { ItemStack itemStack = player.getItemInHand(hand); - if (level.isClientSide) { + if (level.isClientSide()) { if (eat(level, pos, player).consumesAction()) { return InteractionResult.SUCCESS; } @@ -279,7 +287,7 @@ private static InteractionResult eat(Level level, BlockPos pos, Player player) { if (!player.canEat(false)) { return InteractionResult.PASS; } else { - player.getFoodData().eat(15, 0.8f); + player.getFoodData().eat(15, 0.8F); removeFromTop(level, pos, player); return InteractionResult.SUCCESS; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/ShovelEatableCakeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/ShovelEatableCakeBlock.java new file mode 100644 index 0000000000..45a3b1ea7f --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/ShovelEatableCakeBlock.java @@ -0,0 +1,88 @@ +package dev.dubhe.anvilcraft.block.cake; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.neoforged.neoforge.common.ItemAbilities; + +public class ShovelEatableCakeBlock extends Block { + public ShovelEatableCakeBlock(Properties properties) { + super(properties.pushReaction(PushReaction.NORMAL)); + } + + @Override + @SuppressWarnings("RedundantMethodOverride") + protected InteractionResult useWithoutItem( + BlockState state, + Level level, + BlockPos pos, + Player player, + BlockHitResult hitResult + ) { + return InteractionResult.PASS; + } + + @Override + protected InteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + ItemStack itemStack = player.getItemInHand(hand); + if (!(itemStack.getItem().canPerformAction(itemStack, ItemAbilities.SHOVEL_DOUSE))) { + return InteractionResult.PASS; + } + if (level.isClientSide()) { + if (eat(level, pos, player, this.getFoodLevel(), this.getSaturationLevel()).consumesAction()) { + return InteractionResult.SUCCESS; + } + + if (itemStack.isEmpty()) { + return InteractionResult.CONSUME; + } + } else { + InteractionResult result = eat(level, pos, player, this.getFoodLevel(), this.getSaturationLevel()); + if (result == InteractionResult.SUCCESS) itemStack.hurtAndBreak(1, player, hand.asEquipmentSlot()); + return result; + } + return InteractionResult.PASS; + } + + private static InteractionResult eat( + LevelAccessor level, + BlockPos pos, + Player player, + int foodLevel, + float saturationLevel + ) { + if (!player.canEat(false)) { + return InteractionResult.PASS; + } else { + player.getFoodData().eat(foodLevel, saturationLevel); + level.removeBlock(pos, false); + level.gameEvent(player, GameEvent.BLOCK_DESTROY, pos); + return InteractionResult.SUCCESS; + } + } + + public int getFoodLevel() { + return 0; + } + + public float getSaturationLevel() { + return 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectBlock.java new file mode 100644 index 0000000000..5d73875cc2 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectBlock.java @@ -0,0 +1,48 @@ +package dev.dubhe.anvilcraft.block.cake; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.function.Consumer; + +public class StepEffectBlock extends Block { + private final Consumer stepAction; + public static final int EFFECT_PERIOD = 80; + public static final int EFFECT_DURATION = 180; + + public StepEffectBlock(Properties properties, Consumer stepAction) { + super(properties); + this.stepAction = stepAction; + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + this.stepAction.accept(entity); + } + + public static void stepOnChocolateBlock(Entity entity) { + if (!(entity instanceof Player player)) return; + if (entity.level().getGameTime() % EFFECT_PERIOD != 0) return; + player.addEffect(new MobEffectInstance(MobEffects.SPEED, EFFECT_DURATION, 9, true, true)); + } + + public static void stepOnBlackChocolateBlock(Entity entity) { + if (!(entity instanceof Player player)) return; + if (entity.level().getGameTime() % EFFECT_PERIOD != 0) return; + player.addEffect(new MobEffectInstance(MobEffects.SPEED, EFFECT_DURATION, 4, true, true)); + player.addEffect(new MobEffectInstance(MobEffects.HASTE, EFFECT_DURATION, 3, true, true)); + } + + public static void stepOnWhiteChocolateBlock(Entity entity) { + if (!(entity instanceof Player player)) return; + if (entity.level().getGameTime() % EFFECT_PERIOD != 0) return; + player.addEffect(new MobEffectInstance(MobEffects.SPEED, EFFECT_DURATION, 4, true, true)); + player.addEffect(new MobEffectInstance(MobEffects.JUMP_BOOST, EFFECT_DURATION, 5, true, true)); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/StepEffectSlabBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectSlabBlock.java similarity index 88% rename from src/main/java/dev/dubhe/anvilcraft/block/StepEffectSlabBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectSlabBlock.java index a0ca65bd44..c8bbe11d1a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/StepEffectSlabBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectSlabBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.cake; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; @@ -18,7 +18,7 @@ public StepEffectSlabBlock(Properties properties, Consumer stepAction) { @Override public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { - stepAction.accept(entity); + this.stepAction.accept(entity); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/StepEffectStairBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectStairBlock.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/StepEffectStairBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectStairBlock.java index fc76d0c114..a6b92c6d0a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/StepEffectStairBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/StepEffectStairBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.cake; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; @@ -18,7 +18,7 @@ public StepEffectStairBlock(BlockState baseState, Properties properties, Consume @Override public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { - stepAction.accept(entity); + this.stepAction.accept(entity); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cake/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/cake/package-info.java new file mode 100644 index 0000000000..0151ae4ea3 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cake/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.cake; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/BaseCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/BaseCauldronBlock.java new file mode 100644 index 0000000000..cc85468f3b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/BaseCauldronBlock.java @@ -0,0 +1,25 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.cauldron.CauldronInteraction; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.AbstractCauldronBlock; +import net.minecraft.world.level.block.state.BlockState; + +public abstract class BaseCauldronBlock extends AbstractCauldronBlock { + public BaseCauldronBlock(Properties properties) { + this(properties, new CauldronInteraction.Dispatcher()); + } + + public BaseCauldronBlock(Properties properties, CauldronInteraction.Dispatcher dispatcher) { + super(properties, dispatcher); + } + + @Override + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData, Player player) { + return new ItemStack(Items.CAULDRON); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/CementCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/CementCauldronBlock.java new file mode 100644 index 0000000000..6f9ebd0ea8 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/CementCauldronBlock.java @@ -0,0 +1,47 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.state.Color; +import dev.dubhe.anvilcraft.util.ModInteractionMap; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AbstractCauldronBlock; +import net.minecraft.world.level.block.state.BlockState; + +@Getter +public class CementCauldronBlock extends BaseCauldronBlock implements IHammerRemovable { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( + propertiesCodec(), Color.CODEC.fieldOf("color").forGetter(CementCauldronBlock::getColor) + ).apply(ins, CementCauldronBlock::new)); + + private final Color color; + + public CementCauldronBlock(Properties properties, Color color) { + super(properties, ModInteractionMap.CEMENT); + this.color = color; + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + protected double getContentHeight(BlockState state) { + return 0.9375; + } + + @Override + public boolean isFull(BlockState state) { + return true; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + return 3; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/ExpFluidCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/ExpFluidCauldronBlock.java new file mode 100644 index 0000000000..fe68db0fd2 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/ExpFluidCauldronBlock.java @@ -0,0 +1,35 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.fluid.ExpFluidBlock; +import dev.dubhe.anvilcraft.util.ModInteractionMap; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; + +public class ExpFluidCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable { + public ExpFluidCauldronBlock(Properties properties) { + super(properties, ModInteractionMap.EXP_FLUID); + } + + @Override + protected void entityInside( + BlockState state, + Level level, + BlockPos pos, + Entity entity, + InsideBlockEffectApplier effectApplier, + boolean isPrecise + ) { + if (level.isClientSide()) return; + if (entity instanceof Player player) { + if (!this.isFull(state)) return; + player.giveExperiencePoints(ExpFluidBlock.XP_POINTS); + level.setBlock(pos, Blocks.CAULDRON.defaultBlockState(), 3); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/HoneyCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/HoneyCauldronBlock.java new file mode 100644 index 0000000000..13f7453203 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/HoneyCauldronBlock.java @@ -0,0 +1,10 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.util.ModInteractionMap; + +public class HoneyCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable { + public HoneyCauldronBlock(Properties properties) { + super(properties, ModInteractionMap.HONEY); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/LavaCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/LavaCauldronBlock.java new file mode 100644 index 0000000000..11a3b6099d --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/LavaCauldronBlock.java @@ -0,0 +1,51 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.util.ModInteractionMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.redstone.Orientation; +import org.jspecify.annotations.Nullable; + +public class LavaCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable { + public LavaCauldronBlock(Properties properties) { + super(properties, ModInteractionMap.LAVA); + } + + @Override + protected void entityInside( + BlockState state, + Level level, + BlockPos pos, + Entity entity, + InsideBlockEffectApplier effectApplier, + boolean isPrecise + ) { + entity.lavaHurt(); + } + + @Override + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { + if (level.isClientSide()) return; + if (this.isFull(state)) level.setBlockAndUpdate(pos, Blocks.LAVA_CAULDRON.defaultBlockState()); + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + int layer = state.getValue(LEVEL); + return layer <= 2 ? layer : layer - 1; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/Layered4LevelCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/Layered4LevelCauldronBlock.java new file mode 100644 index 0000000000..f85e48cd55 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/Layered4LevelCauldronBlock.java @@ -0,0 +1,104 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.cauldron.CauldronInteraction; +import net.minecraft.core.cauldron.CauldronInteractions; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AbstractCauldronBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.shapes.VoxelShape; + +import java.util.Optional; + +public class Layered4LevelCauldronBlock extends BaseCauldronBlock { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( + propertiesCodec(), + CauldronInteractions.CODEC + .fieldOf("interactions") + .forGetter(block -> block.interactions) + ).apply(ins, Layered4LevelCauldronBlock::new)); + + public static final int MAX_LEVEL = 4; + public static final IntegerProperty LEVEL = IntegerProperty.create("level", 1, MAX_LEVEL); + + public Layered4LevelCauldronBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, 1)); + } + + public Layered4LevelCauldronBlock(Properties properties, CauldronInteraction.Dispatcher interactions) { + super(properties, interactions); + this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, 1)); + } + + public static void lowerFillLevel(BlockState state, Level level, BlockPos pos) { + int i = state.getValue(LEVEL) - 1; + BlockState blockstate = i == 0 ? Blocks.CAULDRON.defaultBlockState() : state.setValue(LEVEL, i); + level.setBlockAndUpdate(pos, blockstate); + level.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(blockstate)); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + public boolean isFull(BlockState state) { + return state.getValue(LEVEL) == MAX_LEVEL; + } + + @Override + protected double getContentHeight(BlockState state) { + return (6.0 + state.getValue(LEVEL) * 2.0) / 16.0; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + return state.getValue(LEVEL); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LEVEL); + } + + public BlockState copyLevelFrom(BlockState otherCauldron) { + return this.defaultBlockState().setValue(LEVEL, Optional.of(otherCauldron) + .filter(state -> state.getBlock() instanceof Layered4LevelCauldronBlock) + .map(state -> state.getValue(LEVEL)) + .orElse(1)); + } + + public BlockState fullFilled() { + return this.defaultBlockState().setValue(LEVEL, MAX_LEVEL); + } + + // Shapes + + @Override + protected VoxelShape getEntityInsideCollisionShape(BlockState state, BlockGetter level, BlockPos pos, Entity entity) { + return switch (state.getValue(LEVEL)) { + case 1 -> LEVEL1; + case 2 -> LEVEL2; + case 3 -> LEVEL3; + case 4 -> LEVEL4; + case null, default -> throw new IllegalStateException("Unexpected value " + state.getValue(LEVEL) + ". How did you get here?"); + }; + } + + protected static final VoxelShape LEVEL1 = Block.box(2, 4, 2, 14, 6, 14); + protected static final VoxelShape LEVEL2 = Block.box(2, 4, 2, 14, 9, 14); + protected static final VoxelShape LEVEL3 = Block.box(2, 4, 2, 14, 12, 14); + protected static final VoxelShape LEVEL4 = Block.box(2, 4, 2, 14, 15, 14); +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/MeltGemCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/MeltGemCauldronBlock.java new file mode 100644 index 0000000000..b06f34be78 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/MeltGemCauldronBlock.java @@ -0,0 +1,36 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.util.ModInteractionMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AbstractCauldronBlock; +import net.minecraft.world.level.block.state.BlockState; + +public class MeltGemCauldronBlock extends BaseCauldronBlock implements IHammerRemovable { + public MeltGemCauldronBlock(Properties properties) { + super(properties, ModInteractionMap.MELT_GEM); + } + + @Override + protected MapCodec codec() { + return simpleCodec(MeltGemCauldronBlock::new); + } + + @Override + protected double getContentHeight(BlockState state) { + return 0.9375; + } + + @Override + public boolean isFull(BlockState state) { + return true; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + return 3; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/ObsidianCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/ObsidianCauldronBlock.java new file mode 100644 index 0000000000..7843d23f5d --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/ObsidianCauldronBlock.java @@ -0,0 +1,36 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.util.ModInteractionMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AbstractCauldronBlock; +import net.minecraft.world.level.block.state.BlockState; + +public class ObsidianCauldronBlock extends BaseCauldronBlock implements IHammerRemovable { + public ObsidianCauldronBlock(Properties properties) { + super(properties, ModInteractionMap.OBSIDIAN); + } + + @Override + protected MapCodec codec() { + return simpleCodec(ObsidianCauldronBlock::new); + } + + @Override + protected double getContentHeight(BlockState state) { + return 0.9375; + } + + @Override + public boolean isFull(BlockState state) { + return true; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + return 3; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/OilCauldronBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/OilCauldronBlock.java new file mode 100644 index 0000000000..9a4d8ad019 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/OilCauldronBlock.java @@ -0,0 +1,79 @@ +package dev.dubhe.anvilcraft.block.cauldron; + +import dev.anvilcraft.lib.v2.recipe.cache.BlockCache; +import dev.dubhe.anvilcraft.api.block.IIgnitableCauldron; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.init.block.ModFluids; +import dev.dubhe.anvilcraft.init.item.ModItemTags; +import dev.dubhe.anvilcraft.util.ModInteractionMap; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.material.Fluid; + +public class OilCauldronBlock extends Layered4LevelCauldronBlock implements IHammerRemovable, IIgnitableCauldron { + public static final BooleanProperty IGNITED = BooleanProperty.create("ignited"); + + public OilCauldronBlock(Properties properties) { + super(properties, ModInteractionMap.OIL); + this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, 1).setValue(OilCauldronBlock.IGNITED, false)); + } + + public static void ignite(LevelAccessor level, BlockPos pos) { + level.setBlock(pos, level.getBlockState(pos).setValue(OilCauldronBlock.IGNITED, true), 3); + } + + @Override + protected void entityInside( + BlockState state, + Level level, + BlockPos pos, + Entity entity, + InsideBlockEffectApplier effectApplier, + boolean isPrecise + ) { + if (level.isClientSide()) return; + if (entity.getType().equals(EntityType.ARROW) && entity.isOnFire()) { + ignite(level, pos); + return; + } + if (!(entity instanceof ItemEntity itemEntity)) return; + if (itemEntity.getItem().is(ModItemTags.FIRE_STARTER)) { + ignite(level, pos); + itemEntity.getItem().setCount(itemEntity.getItem().getCount() - 1); + return; + } + if (itemEntity.getItem().is(ModItemTags.UNBROKEN_FIRE_STARTER)) { + ignite(level, pos); + } + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(OilCauldronBlock.IGNITED); + } + + @Override + public boolean isIgnited(BlockCache cache, BlockPos pos) { + return cache.getBlockState(pos).getValue(OilCauldronBlock.IGNITED); + } + + @Override + public void setIgnited(BlockCache cache, BlockPos pos, boolean ignited) { + cache.setBlock(pos, cache.getBlockState(pos).setValue(OilCauldronBlock.IGNITED, ignited)); + } + + @Override + public Fluid getFluid(BlockCache cache, BlockPos pos) { + return ModFluids.OIL.get(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cauldron/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/package-info.java new file mode 100644 index 0000000000..76cdc3f18f --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cauldron/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.cauldron; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilAmplifierBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilAmplifierBlock.java index 5bb7b744ed..9d8263b478 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilAmplifierBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilAmplifierBlock.java @@ -18,20 +18,19 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class CelestialForgingAnvilAmplifierBlock - extends FlexibleMultiPartBlock + extends FlexibleMultiPartBlock, Direction> implements IHammerChangeable, IHammerRemovable { public static final EnumProperty HALF = EnumProperty.create("half", DirectionCube232PartHalf.class); - public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + public static final EnumProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public static final VoxelShape NORTH_TIP = ShapeUtil.merge( new AABB(0, 0, 0, 16, 4, 16), new AABB(5, 5, 5, 10, 10, 10) @@ -171,7 +170,7 @@ public DirectionCube232PartHalf[] getParts() { } @Override - public DirectionProperty getAdditionalProperty() { + public EnumProperty getAdditionalProperty() { return FACING; } @@ -194,7 +193,7 @@ protected BlockState mirror(BlockState state, Mirror mirror) { @Override public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { - this.change(blockPos, level, (state) -> state.cycle(FACING)); + this.change(blockPos, level, state -> state.cycle(FACING)); return true; } @@ -210,14 +209,11 @@ protected VoxelShape getVisualShape(BlockState state, BlockGetter level, BlockPo @Override protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { - return 1.0f; + return 1.0F; } @Override - protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + protected boolean propagatesSkylightDown(BlockState state) { return true; } - - // region VoxelShapes - // E } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilBlock.java index 6577a52927..37704ab7c5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilBlock.java @@ -4,7 +4,7 @@ import dev.anvilcraft.lib.v2.multiblock.dynamic.controller.IController; import dev.anvilcraft.lib.v2.util.ShapeUtil; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.block.PropelPiston; +import dev.dubhe.anvilcraft.block.laser.PropelPistonBlock; import dev.dubhe.anvilcraft.block.multipart.MultiPartBlockEntity; import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock; import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; @@ -12,7 +12,7 @@ import dev.dubhe.anvilcraft.init.block.ModMultiblockDefinitions; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; @@ -31,7 +31,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class CelestialForgingAnvilBlock extends SimpleMultiPartBlock @@ -158,11 +158,11 @@ protected BlockState mirror(BlockState state, Mirror mirror) { @Override protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { - return 1.0f; + return 1.0F; } @Override - protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + protected boolean propagatesSkylightDown(BlockState state) { return true; } @@ -174,10 +174,10 @@ protected void createBlockStateDefinition(StateDefinition.Builder BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { if (level.isClientSide()) { - return PropelPiston.createTickerHelper( + return PropelPistonBlock.createTickerHelper( type, ModBlockEntities.CELESTIAL_FORGING_ANVIL.get(), - (level1, blockPos, blockState, blockEntity) -> blockEntity.tick() + (_, _, _, be) -> be.tick() ); } return null; @@ -199,8 +199,8 @@ public Block getBlock() { } @Override - public ResourceLocation getDefinitionId() { - return ModMultiblockDefinitions.CELESTIAL_FORGING_ANVIL.location(); + public Identifier getDefinitionId() { + return ModMultiblockDefinitions.CELESTIAL_FORGING_ANVIL.identifier(); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilPortalBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilPortalBlock.java new file mode 100644 index 0000000000..1437e6393a --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/CelestialForgingAnvilPortalBlock.java @@ -0,0 +1,199 @@ +package dev.dubhe.anvilcraft.block.cfa; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilPortalBlockEntity; +import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.Nullable; + +public class CelestialForgingAnvilPortalBlock extends HorizontalDirectionalBlock + implements IHammerRemovable, IHammerChangeable, EntityBlock, SimpleWaterloggedBlock { + + public static final BooleanProperty OPEN = BlockStateProperties.OPEN; + + // 2px thin slab on the face touching CFA (opposite of FACING) + private static final VoxelShape SHAPE_SLAB_NORTH = Shapes.box(0, 0, 0, 1, 1, 2.0 / 16.0); + private static final VoxelShape SHAPE_SLAB_SOUTH = Shapes.box(0, 0, 14.0 / 16.0, 1, 1, 1); + private static final VoxelShape SHAPE_SLAB_WEST = Shapes.box(0, 0, 0, 2.0 / 16.0, 1, 1); + private static final VoxelShape SHAPE_SLAB_EAST = Shapes.box(14.0 / 16.0, 0, 0, 1, 1, 1); + + public CelestialForgingAnvilPortalBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.getStateDefinition().any() + .setValue(FACING, Direction.NORTH) + .setValue(OPEN, false) + .setValue(BlockStateProperties.WATERLOGGED, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING, OPEN, BlockStateProperties.WATERLOGGED); + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.getValue(BlockStateProperties.WATERLOGGED) + ? Fluids.WATER.getSource(false) + : super.getFluidState(state); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockState state = super.getStateForPlacement(context); + if (state != null) { + state = state.setValue(BlockStateProperties.WATERLOGGED, + context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER); + } + return state; + } + + @Override + protected BlockState updateShape(BlockState state, LevelReader level, ScheduledTickAccess ticks, + BlockPos pos, Direction directionToNeighbour, BlockPos neighbourPos, + BlockState neighbourState, RandomSource random) { + if (state.getValue(BlockStateProperties.WATERLOGGED)) { + ticks.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + return super.updateShape(state, level, ticks, pos, directionToNeighbour, neighbourPos, neighbourState, random); + } + + @Override + protected MapCodec codec() { + return simpleCodec(CelestialForgingAnvilPortalBlock::new); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return switch (state.getValue(FACING)) { + case NORTH -> SHAPE_SLAB_SOUTH; + case SOUTH -> SHAPE_SLAB_NORTH; + case WEST -> SHAPE_SLAB_EAST; + case EAST -> SHAPE_SLAB_WEST; + default -> Shapes.block(); + }; + } + + @Override + protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { + return 1.0f; + } + + @Override + protected boolean propagatesSkylightDown(BlockState state) { + return true; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return getShape(state, level, pos, context); + } + + @Override + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, + InsideBlockEffectApplier effectApplier, boolean isPrecise) { + if (level.isClientSide()) return; + if (!state.getValue(OPEN)) return; + if (level.getBlockEntity(pos) instanceof CelestialForgingAnvilPortalBlockEntity portalBe) { + portalBe.tryTouchTeleport(entity); + } + } + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return ModBlockEntities.CELESTIAL_FORGING_ANVIL_PORTAL.create(pos, state); + } + + @Override + public @Nullable BlockEntityTicker getTicker( + Level level, BlockState state, BlockEntityType type + ) { + if (level.isClientSide()) return null; + if (type == ModBlockEntities.CELESTIAL_FORGING_ANVIL_PORTAL.get()) { + return (lvl, pos, st, be) -> ((CelestialForgingAnvilPortalBlockEntity) be).tick(); + } + return null; + } + + @Override + public void setPlacedBy(Level level, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { + super.setPlacedBy(level, pos, state, placer, stack); + if (!level.isClientSide()) { + Direction towardsCfa = state.getValue(FACING).getOpposite(); + BlockPos cfaPos = pos.relative(towardsCfa); + BlockState cfaState = level.getBlockState(cfaPos); + if (cfaState.getBlock() instanceof CelestialForgingAnvilBlock) { + Cube323PartHalf half = cfaState.getValue(CelestialForgingAnvilBlock.HALF); + if (half == Cube323PartHalf.BOTTOM_N || half == Cube323PartHalf.BOTTOM_S + || half == Cube323PartHalf.BOTTOM_E || half == Cube323PartHalf.BOTTOM_W) { + BlockPos controllerPos = new BlockPos( + cfaPos.getX() - half.getOffsetX(), + cfaPos.getY() - half.getOffsetY(), + cfaPos.getZ() - half.getOffsetZ() + ); + if (level.getBlockEntity(controllerPos) instanceof CelestialForgingAnvilBlockEntity cfaBe) { + cfaBe.addPortal(half, pos); + } + } + } + } + } + + // Block removal cleanup is handled by the portal BE's setRemoved() via WormholeStabilizerHandler. + + public static Direction getFacingFromSide(Cube323PartHalf side) { + return switch (side) { + case BOTTOM_N -> Direction.NORTH; + case BOTTOM_S -> Direction.SOUTH; + case BOTTOM_E -> Direction.EAST; + case BOTTOM_W -> Direction.WEST; + default -> Direction.NORTH; + }; + } + + // === IHammerChangeable === + + @Override + public @Nullable Property getChangeableProperty(BlockState blockState) { + return FACING; + } + + @Override + public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { + BlockState state = level.getBlockState(blockPos); + level.setBlockAndUpdate(blockPos, state.cycle(FACING)); + return true; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilFluidInterfaceBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilFluidInterfaceBlock.java index 09285fc12f..e0b4a6b0fb 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilFluidInterfaceBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilFluidInterfaceBlock.java @@ -45,6 +45,6 @@ protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); + builder.add(FACING, ACTIVE); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilInterfaceBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilInterfaceBlock.java index d07faece83..cf0281add7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilInterfaceBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilInterfaceBlock.java @@ -13,14 +13,18 @@ import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public abstract class CelestialForgingAnvilInterfaceBlock extends HorizontalDirectionalBlock implements IHammerRemovable, IHammerChangeable { + public static final BooleanProperty ACTIVE = BlockStateProperties.ENABLED; public static final VoxelShape BASE_NORTH = ShapeUtil.merge( new AABB(0, 0, 2, 16, 4, 16), new AABB(0, 4, 8, 16, 8, 16), @@ -34,16 +38,28 @@ public abstract class CelestialForgingAnvilInterfaceBlock public CelestialForgingAnvilInterfaceBlock(Properties properties) { super(properties); this.registerDefaultState(this.getStateDefinition().any() - .setValue(FACING, Direction.NORTH)); + .setValue(FACING, Direction.NORTH) + .setValue(ACTIVE, false)); + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, + Block block, @Nullable Orientation orientation, boolean movedByPiston) { + if (!level.isClientSide()) { + boolean hasSignal = level.hasNeighborSignal(pos); + if (state.getValue(ACTIVE) != hasSignal) { + level.setBlock(pos, state.setValue(ACTIVE, hasSignal), 3); + } + } } @Override protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { - return 1.0f; + return 1.0F; } @Override - protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + protected boolean propagatesSkylightDown(BlockState state) { return true; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilInterfacePlaceholderBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilInterfacePlaceholderBlock.java new file mode 100644 index 0000000000..bc16d6db14 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilInterfacePlaceholderBlock.java @@ -0,0 +1,130 @@ +package dev.dubhe.anvilcraft.block.cfa.interfaces; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.cfa.CelestialForgingAnvilBlock; +import dev.dubhe.anvilcraft.block.cfa.item.CelestialForgingAnvilInterfaceBlockItem; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; +import dev.dubhe.anvilcraft.init.ModMenuTypes; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.phys.BlockHitResult; +import org.jspecify.annotations.Nullable; + +public class CelestialForgingAnvilInterfacePlaceholderBlock + extends HorizontalDirectionalBlock + implements IHammerRemovable, IHammerChangeable { + + public CelestialForgingAnvilInterfacePlaceholderBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.getStateDefinition().any() + .setValue(FACING, Direction.NORTH)); + } + + @Override + protected MapCodec codec() { + return simpleCodec(CelestialForgingAnvilInterfacePlaceholderBlock::new); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { + return 1.0f; + } + + @Override + protected boolean propagatesSkylightDown(BlockState state) { + return true; + } + + @Override + public @Nullable Property getChangeableProperty(BlockState blockState) { + return FACING; + } + + @Override + public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { + BlockState state = level.getBlockState(blockPos); + level.setBlockAndUpdate(blockPos, state.cycle(FACING)); + return true; + } + + @Override + protected InteractionResult useItemOn( + ItemStack stack, BlockState state, Level level, BlockPos pos, + Player player, InteractionHand hand, BlockHitResult hitResult + ) { + if (stack.getItem() instanceof CelestialForgingAnvilInterfaceBlockItem interfaceItem) { + Block interfaceBlock = interfaceItem.getBlock(); + if (interfaceBlock instanceof CelestialForgingAnvilInterfaceBlock) { + if (level.isClientSide()) { + return InteractionResult.SUCCESS; + } + Direction facing = state.getValue(FACING); + BlockState placementState = interfaceBlock.defaultBlockState() + .setValue(CelestialForgingAnvilInterfaceBlock.FACING, facing) + .setValue(CelestialForgingAnvilInterfaceBlock.ACTIVE, false); + level.setBlockAndUpdate(pos, placementState); + SoundType soundType = placementState.getSoundType(); + level.playSound(null, pos, soundType.getPlaceSound(), SoundSource.BLOCKS, + (soundType.getVolume() + 1.0f) / 2.0f, soundType.getPitch() * 0.8f); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + ItemStack placeholderStack = new ItemStack(this); + if (!player.getInventory().add(placeholderStack)) { + player.drop(placeholderStack, false); + } + return InteractionResult.SUCCESS; + } + } + return super.useItemOn(stack, state, level, pos, player, hand, hitResult); + } + + @Override + protected InteractionResult useWithoutItem( + BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult + ) { + if (level.isClientSide()) return InteractionResult.SUCCESS; + for (int dx = -5; dx <= 5; dx++) { + for (int dz = -5; dz <= 5; dz++) { + for (int dy = -1; dy <= 1; dy++) { + BlockPos checkPos = pos.offset(dx, dy, dz); + BlockState checkState = level.getBlockState(checkPos); + if (checkState.getBlock() instanceof CelestialForgingAnvilBlock + && checkState.hasProperty(CelestialForgingAnvilBlock.HALF) + && checkState.getValue(CelestialForgingAnvilBlock.HALF) == Cube323PartHalf.BOTTOM_CENTER) { + if (level.getBlockEntity(checkPos) instanceof CelestialForgingAnvilBlockEntity cfaBe + && player instanceof ServerPlayer sp) { + if (sp.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS; + ModMenuTypes.open(sp, cfaBe, checkPos); + return InteractionResult.SUCCESS; + } + } + } + } + } + return InteractionResult.PASS; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilLaserInterfaceBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilLaserInterfaceBlock.java index f2c1d448d4..9ba3b26e71 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilLaserInterfaceBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilLaserInterfaceBlock.java @@ -46,6 +46,6 @@ protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); + builder.add(FACING, ACTIVE); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilLogisticsInterfaceBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilLogisticsInterfaceBlock.java index 3afaee4186..75b8a3cd12 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilLogisticsInterfaceBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/CelestialForgingAnvilLogisticsInterfaceBlock.java @@ -45,6 +45,6 @@ protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); + builder.add(FACING, ACTIVE); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/package-info.java index e6fdbda8f8..26564cf5df 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/interfaces/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.cfa.interfaces; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilAmplifierBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilAmplifierBlockItem.java index dd1dd7cea9..616067a343 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilAmplifierBlockItem.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilAmplifierBlockItem.java @@ -1,11 +1,11 @@ package dev.dubhe.anvilcraft.block.cfa.item; import dev.dubhe.anvilcraft.block.cfa.CelestialForgingAnvilBlock; -import dev.dubhe.anvilcraft.block.item.FlexibleMultiPartBlockItem; import dev.dubhe.anvilcraft.block.multipart.FlexibleMultiPartBlock; import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; import dev.dubhe.anvilcraft.block.state.DirectionCube232PartHalf; import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.item.block.FlexibleMultiPartBlockItem; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -15,12 +15,12 @@ import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; public class CelestialForgingAnvilAmplifierBlockItem - extends FlexibleMultiPartBlockItem { + extends FlexibleMultiPartBlockItem, Direction> { public CelestialForgingAnvilAmplifierBlockItem( - FlexibleMultiPartBlock block, + FlexibleMultiPartBlock, Direction> block, Properties properties ) { super(block, properties); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilBlockItem.java new file mode 100644 index 0000000000..388621626b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilBlockItem.java @@ -0,0 +1,45 @@ +package dev.dubhe.anvilcraft.block.cfa.item; + +import dev.dubhe.anvilcraft.item.block.SimpleMultiPartBlockItem; +import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock; +import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public class CelestialForgingAnvilBlockItem extends SimpleMultiPartBlockItem { + private static final int PLACEMENT_RADIUS = 7; + + public CelestialForgingAnvilBlockItem( + SimpleMultiPartBlock block, Properties properties + ) { + super(block, properties); + } + + @Override + public boolean canPlace(BlockPlaceContext context, BlockState state) { + Level level = context.getLevel(); + Player player = context.getPlayer(); + BlockPos clickedPos = context.getClickedPos(); + for (BlockPos pos : BlockPos.betweenClosed( + clickedPos.offset(PLACEMENT_RADIUS, PLACEMENT_RADIUS, PLACEMENT_RADIUS), + clickedPos.offset(-PLACEMENT_RADIUS, -PLACEMENT_RADIUS, -PLACEMENT_RADIUS) + )) { + if (level.getBlockState(pos).is(this.getBlock())) { + if (level.isClientSide() && player != null) { + player.sendSystemMessage( + Component.translatable( + "block.anvilcraft.celestial_forging_anvil.placement_too_close_to_another") + .withStyle(ChatFormatting.RED) + ); + } + return false; + } + } + return super.canPlace(context, state); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilInterfaceBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilInterfaceBlockItem.java index e6982be3a4..c97c6140c6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilInterfaceBlockItem.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilInterfaceBlockItem.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.List; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilPortalBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilPortalBlockItem.java new file mode 100644 index 0000000000..68377895ed --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/CelestialForgingAnvilPortalBlockItem.java @@ -0,0 +1,55 @@ +package dev.dubhe.anvilcraft.block.cfa.item; + +import dev.dubhe.anvilcraft.block.cfa.CelestialForgingAnvilBlock; +import dev.dubhe.anvilcraft.block.cfa.CelestialForgingAnvilPortalBlock; +import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import org.jspecify.annotations.Nullable; + +public class CelestialForgingAnvilPortalBlockItem extends BlockItem { + public CelestialForgingAnvilPortalBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + protected @Nullable BlockState getPlacementState(BlockPlaceContext context) { + Level level = context.getLevel(); + Player player = context.getPlayer(); + BlockPos pos = context.getClickedPos(); + if (player == null) return null; + + // Scan adjacent positions for CFA side centers + for (Direction dir : Direction.Plane.HORIZONTAL) { + BlockPos cfaPos = pos.relative(dir); + BlockState cfaState = level.getBlockState(cfaPos); + if (cfaState.is(ModBlocks.CELESTIAL_FORGING_ANVIL)) { + Cube323PartHalf half = cfaState.getValue(CelestialForgingAnvilBlock.HALF); + // Only allow placement on side centers (BOTTOM_N/S/E/W) + if (half == Cube323PartHalf.BOTTOM_N || half == Cube323PartHalf.BOTTOM_S + || half == Cube323PartHalf.BOTTOM_E || half == Cube323PartHalf.BOTTOM_W) { + return getBlock().defaultBlockState() + .setValue(CelestialForgingAnvilPortalBlock.FACING, dir.getOpposite()) + .setValue(CelestialForgingAnvilPortalBlock.OPEN, false); + } + } + } + + if (player instanceof ServerPlayer sp) { + sp.sendSystemMessage( + Component.translatable("message.anvilcraft.portal.invalid_placement") + .withStyle(ChatFormatting.RED), true); + } + return null; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/package-info.java index ed68af1ebc..0854621122 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/item/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.cfa.item; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/cfa/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/cfa/package-info.java index eacef08d44..6dc07103a4 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/cfa/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/cfa/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.cfa; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/container/CrateBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/container/CrateBlock.java new file mode 100644 index 0000000000..5996721da3 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/container/CrateBlock.java @@ -0,0 +1,9 @@ +package dev.dubhe.anvilcraft.block.container; + +import net.minecraft.world.level.block.Block; + +public class CrateBlock extends Block { + public CrateBlock(Properties properties) { + super(properties); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FluidTankBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/container/FluidTankBlock.java similarity index 83% rename from src/main/java/dev/dubhe/anvilcraft/block/FluidTankBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/container/FluidTankBlock.java index d4ca7f6732..16c10e2051 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FluidTankBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/container/FluidTankBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.container; import com.mojang.serialization.MapCodec; import dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockState; @@ -9,10 +9,9 @@ import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModMultiblockDefinitions; import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -22,7 +21,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class FluidTankBlock extends BaseEntityBlock implements HammerRotateBehavior, IHammerRemovable, IController { @@ -47,7 +46,7 @@ protected RenderShape getRenderShape(BlockState state) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -56,16 +55,16 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - InteractionResult result = super.useItemOn(stack, state, level, pos, player, hand, hitResult).result(); + InteractionResult result = super.useItemOn(stack, state, level, pos, player, hand, hitResult); if (result == InteractionResult.PASS) { if (level.getBlockEntity(pos) instanceof FluidTankBlockEntity tank) { if (tank.onPlayerUse(player, hand)) { - return ItemInteractionResult.sidedSuccess(level.isClientSide()); + return InteractionResult.SUCCESS; } } } - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + return InteractionResult.PASS; } @Override @@ -74,8 +73,8 @@ public Block getBlock() { } @Override - public ResourceLocation getDefinitionId() { - return ModMultiblockDefinitions.FLUID_TANK.location(); + public Identifier getDefinitionId() { + return ModMultiblockDefinitions.FLUID_TANK.identifier(); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/container/HyperdimensionStorageStationBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/container/HyperdimensionStorageStationBlock.java new file mode 100644 index 0000000000..bd048a193d --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/container/HyperdimensionStorageStationBlock.java @@ -0,0 +1,140 @@ +package dev.dubhe.anvilcraft.block.container; + +import dev.anvilcraft.lib.v2.util.ShapeUtil; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.multipart.MultiPartBlockEntity; +import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock; +import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class HyperdimensionStorageStationBlock + extends SimpleMultiPartBlock + implements MultiPartBlockEntity, IHammerRemovable { + public static final EnumProperty HALF = EnumProperty.create("half", Cube3x3PartHalf.class); + + public HyperdimensionStorageStationBlock(Properties properties) { + super(properties); + } + + @Override + public Property getPart() { + return HyperdimensionStorageStationBlock.HALF; + } + + @Override + public Cube3x3PartHalf[] getParts() { + return Cube3x3PartHalf.values(); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HyperdimensionStorageStationBlock.HALF); + } + + @Override + public HyperdimensionStorageStationBlock getMultiBlock() { + return this; + } + + @Override + protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { + return 1.0F; + } + + @Override + protected boolean propagatesSkylightDown(BlockState state) { + return true; + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return ModBlockEntities.HYPERDIMENSION_STORAGE_STATION.create(pos, state); + } + + // region VoxelShapes + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return switch (state.getValue(HALF)) { + case BOTTOM_W -> BOTTOM_W; + case BOTTOM_E -> BOTTOM_E; + case BOTTOM_N -> BOTTOM_N; + case BOTTOM_S -> BOTTOM_S; + case BOTTOM_WN -> BOTTOM_NW; + case BOTTOM_WS -> BOTTOM_SW; + case BOTTOM_EN -> BOTTOM_NE; + case BOTTOM_ES -> BOTTOM_SE; + case MID_CENTER, BOTTOM_CENTER, MID_N, MID_S, MID_E, MID_W, TOP_CENTER -> MID_CENTER; + case MID_WN -> MID_NW; + case MID_WS -> MID_SW; + case MID_EN -> MID_NE; + case MID_ES -> MID_SE; + case TOP_W -> TOP_W; + case TOP_E -> TOP_E; + case TOP_N -> TOP_N; + case TOP_S -> TOP_S; + case TOP_WN -> TOP_NW; + case TOP_WS -> TOP_SW; + case TOP_EN -> TOP_NE; + case TOP_ES -> TOP_SE; + }; + } + + protected static final VoxelShape MID_CENTER = Shapes.block(); + + protected static final VoxelShape BOTTOM_N = ShapeUtil.merge( + new AABB(0, 3.5, 3.5, 2.5, 6.5, 6.5), + new AABB(2.5, 2, 2, 13.5, 8, 8), + new AABB(13.5, 3.5, 3.5, 16, 6.5, 6.5), + + new AABB(0, 14, 4, 16, 16, 16), + new AABB(0, 4, 14, 16, 16, 16), + + new AABB(4, 7, 7, 12, 14, 14) + ); + protected static final VoxelShape BOTTOM_W = ShapeUtil.rotate(Direction.Axis.Y, 90, BOTTOM_N); + protected static final VoxelShape BOTTOM_S = ShapeUtil.rotate(Direction.Axis.Y, 180, BOTTOM_N); + protected static final VoxelShape BOTTOM_E = ShapeUtil.rotate(Direction.Axis.Y, 270, BOTTOM_N); + + protected static final VoxelShape BOTTOM_NW = ShapeUtil.merge( + new AABB(0, 0, 0, 10, 10, 10), + new AABB(3.5, 3.5, 11, 6.5, 6.5, 16), + new AABB(3.5, 11, 3.5, 6.5, 16, 6.5), + new AABB(11, 3.5, 3.5, 16, 6.5, 6.5), + + new AABB(4, 14, 14, 16, 16, 16), + new AABB(14, 4, 14, 16, 16, 16), + new AABB(14, 14, 4, 16, 16, 16) + ); + protected static final VoxelShape BOTTOM_SW = ShapeUtil.rotate(Direction.Axis.Y, 90, BOTTOM_NW); + protected static final VoxelShape BOTTOM_SE = ShapeUtil.rotate(Direction.Axis.Y, 180, BOTTOM_NW); + protected static final VoxelShape BOTTOM_NE = ShapeUtil.rotate(Direction.Axis.Y, 270, BOTTOM_NW); + + protected static final VoxelShape MID_NW = ShapeUtil.rotate(Direction.Axis.Z, 90, BOTTOM_N); + protected static final VoxelShape MID_SW = ShapeUtil.rotate(Direction.Axis.Y, 90, MID_NW); + protected static final VoxelShape MID_SE = ShapeUtil.rotate(Direction.Axis.Y, 180, MID_NW); + protected static final VoxelShape MID_NE = ShapeUtil.rotate(Direction.Axis.Y, 270, MID_NW); + + protected static final VoxelShape TOP_N = ShapeUtil.rotate(Direction.Axis.Z, 180, BOTTOM_N); + protected static final VoxelShape TOP_W = ShapeUtil.rotate(Direction.Axis.Y, 90, TOP_N); + protected static final VoxelShape TOP_S = ShapeUtil.rotate(Direction.Axis.Y, 180, TOP_N); + protected static final VoxelShape TOP_E = ShapeUtil.rotate(Direction.Axis.Y, 270, TOP_N); + + protected static final VoxelShape TOP_NW = ShapeUtil.rotate(Direction.Axis.X, 270, BOTTOM_NW); + protected static final VoxelShape TOP_SW = ShapeUtil.rotate(Direction.Axis.Y, 90, TOP_NW); + protected static final VoxelShape TOP_SE = ShapeUtil.rotate(Direction.Axis.Y, 180, TOP_NW); + protected static final VoxelShape TOP_NE = ShapeUtil.rotate(Direction.Axis.Y, 270, TOP_NW); + // endregion +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/container/LargeCrateBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/container/LargeCrateBlock.java new file mode 100644 index 0000000000..09fb079c86 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/container/LargeCrateBlock.java @@ -0,0 +1,143 @@ +package dev.dubhe.anvilcraft.block.container; + +import dev.anvilcraft.lib.v2.util.ShapeUtil; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.multipart.MultiPartBlockEntity; +import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock; +import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class LargeCrateBlock + extends SimpleMultiPartBlock + implements MultiPartBlockEntity, IHammerRemovable { + public static final EnumProperty HALF = EnumProperty.create("half", Cube3x3PartHalf.class); + + public LargeCrateBlock(Properties properties) { + super(properties); + } + + @Override + public Property getPart() { + return LargeCrateBlock.HALF; + } + + @Override + public Cube3x3PartHalf[] getParts() { + return Cube3x3PartHalf.values(); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LargeCrateBlock.HALF); + } + + @Override + public LargeCrateBlock getMultiBlock() { + return this; + } + + @Override + protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { + return 1.0F; + } + + @Override + protected boolean propagatesSkylightDown(BlockState state) { + return true; + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return ModBlockEntities.LARGE_CRATE.create(pos, state); + } + + // region VoxelShapes + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return switch (state.getValue(HALF)) { + case BOTTOM_CENTER -> BOTTOM_CENTER; + case BOTTOM_W -> BOTTOM_W; + case BOTTOM_E -> BOTTOM_E; + case BOTTOM_N -> BOTTOM_N; + case BOTTOM_S -> BOTTOM_S; + case BOTTOM_WN -> BOTTOM_NW; + case BOTTOM_WS -> BOTTOM_SW; + case BOTTOM_EN -> BOTTOM_NE; + case BOTTOM_ES -> BOTTOM_SE; + case MID_CENTER -> MID_CENTER; + case MID_W -> MID_W; + case MID_E -> MID_E; + case MID_N -> MID_N; + case MID_S -> MID_S; + case MID_WN -> MID_NW; + case MID_WS -> MID_SW; + case MID_EN -> MID_NE; + case MID_ES -> MID_SE; + case TOP_CENTER -> TOP_CENTER; + case TOP_W -> TOP_W; + case TOP_E -> TOP_E; + case TOP_N -> TOP_N; + case TOP_S -> TOP_S; + case TOP_WN -> TOP_NW; + case TOP_WS -> TOP_SW; + case TOP_EN -> TOP_NE; + case TOP_ES -> TOP_SE; + }; + } + + protected static final VoxelShape MID_CENTER = Shapes.block(); + + protected static final VoxelShape BOTTOM_CENTER = Block.box(0, 2, 0, 16, 16, 16); + protected static final VoxelShape TOP_CENTER = ShapeUtil.rotate(Direction.Axis.X, 180, BOTTOM_CENTER); + protected static final VoxelShape MID_N = ShapeUtil.rotate(Direction.Axis.X, 270, BOTTOM_CENTER); + protected static final VoxelShape MID_W = ShapeUtil.rotate(Direction.Axis.Y, 90, MID_N); + protected static final VoxelShape MID_S = ShapeUtil.rotate(Direction.Axis.Y, 180, MID_N); + protected static final VoxelShape MID_E = ShapeUtil.rotate(Direction.Axis.Y, 270, MID_N); + + protected static final VoxelShape BOTTOM_N = ShapeUtil.merge( + new AABB(0, 2, 2, 16, 16, 16), + new AABB(0, 0, 0, 16, 7, 7) + ); + protected static final VoxelShape BOTTOM_W = ShapeUtil.rotate(Direction.Axis.Y, 90, BOTTOM_N); + protected static final VoxelShape BOTTOM_S = ShapeUtil.rotate(Direction.Axis.Y, 180, BOTTOM_N); + protected static final VoxelShape BOTTOM_E = ShapeUtil.rotate(Direction.Axis.Y, 270, BOTTOM_N); + + protected static final VoxelShape BOTTOM_NW = ShapeUtil.cut( + new AABB(0, 0, 0, 16, 16, 16), + new AABB(7, 7, 0, 16, 16, 2), + new AABB(7, 0, 7, 16, 2, 16), + new AABB(0, 7, 7, 2, 16, 16) + ); + protected static final VoxelShape BOTTOM_SW = ShapeUtil.rotate(Direction.Axis.Y, 90, BOTTOM_NW); + protected static final VoxelShape BOTTOM_SE = ShapeUtil.rotate(Direction.Axis.Y, 180, BOTTOM_NW); + protected static final VoxelShape BOTTOM_NE = ShapeUtil.rotate(Direction.Axis.Y, 270, BOTTOM_NW); + + protected static final VoxelShape MID_NW = ShapeUtil.rotate(Direction.Axis.Z, 90, BOTTOM_N); + protected static final VoxelShape MID_SW = ShapeUtil.rotate(Direction.Axis.Y, 90, MID_NW); + protected static final VoxelShape MID_SE = ShapeUtil.rotate(Direction.Axis.Y, 180, MID_NW); + protected static final VoxelShape MID_NE = ShapeUtil.rotate(Direction.Axis.Y, 270, MID_NW); + + protected static final VoxelShape TOP_N = ShapeUtil.rotate(Direction.Axis.Z, 180, BOTTOM_N); + protected static final VoxelShape TOP_W = ShapeUtil.rotate(Direction.Axis.Y, 90, TOP_N); + protected static final VoxelShape TOP_S = ShapeUtil.rotate(Direction.Axis.Y, 180, TOP_N); + protected static final VoxelShape TOP_E = ShapeUtil.rotate(Direction.Axis.Y, 270, TOP_N); + + protected static final VoxelShape TOP_NW = ShapeUtil.rotate(Direction.Axis.X, 270, BOTTOM_NW); + protected static final VoxelShape TOP_SW = ShapeUtil.rotate(Direction.Axis.Y, 90, TOP_NW); + protected static final VoxelShape TOP_SE = ShapeUtil.rotate(Direction.Axis.Y, 180, TOP_NW); + protected static final VoxelShape TOP_NE = ShapeUtil.rotate(Direction.Axis.Y, 270, TOP_NW); + // endregion +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/LargeFluidTankBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/container/LargeFluidTankBlock.java similarity index 85% rename from src/main/java/dev/dubhe/anvilcraft/block/LargeFluidTankBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/container/LargeFluidTankBlock.java index c49417cd01..d1357e40fe 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/LargeFluidTankBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/container/LargeFluidTankBlock.java @@ -1,9 +1,10 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.container; import dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockState; import dev.anvilcraft.lib.v2.multiblock.dynamic.controller.IController; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.block.entity.LargeFluidTankBlockEntity; +import dev.dubhe.anvilcraft.block.laser.PropelPistonBlock; import dev.dubhe.anvilcraft.block.multipart.MultiPartBlockEntity; import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock; import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; @@ -11,11 +12,10 @@ import dev.dubhe.anvilcraft.init.block.ModMultiblockDefinitions; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; @@ -29,9 +29,7 @@ import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; - -import static dev.dubhe.anvilcraft.block.PropelPiston.createTickerHelper; +import org.jspecify.annotations.Nullable; public class LargeFluidTankBlock extends SimpleMultiPartBlock @@ -78,7 +76,7 @@ public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { @Nullable @Override public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - return createTickerHelper( + return PropelPistonBlock.createTickerHelper( type, ModBlockEntities.LARGE_FLUID_TANK.get(), (level1, blockPos, blockState, blockEntity) -> blockEntity.tick() @@ -86,7 +84,7 @@ public BlockEntityTicker getTicker(Level level, Block } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -95,17 +93,17 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - InteractionResult result = super.useItemOn(stack, state, level, pos, player, hand, hitResult).result(); + InteractionResult result = super.useItemOn(stack, state, level, pos, player, hand, hitResult); if (result == InteractionResult.PASS) { BlockPos mainPartPos = getMainPartPos(pos, state); BlockEntity blockEntity = level.getBlockEntity(mainPartPos); if (blockEntity instanceof LargeFluidTankBlockEntity tank) { if (tank.onPlayerUse(player, hand)) { - return ItemInteractionResult.sidedSuccess(level.isClientSide()); + return InteractionResult.SUCCESS; } } } - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + return InteractionResult.PASS; } @@ -115,7 +113,7 @@ protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos } @Override - protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + protected boolean propagatesSkylightDown(BlockState state) { return true; } @@ -125,8 +123,8 @@ public Block getBlock() { } @Override - public ResourceLocation getDefinitionId() { - return ModMultiblockDefinitions.LARGE_FLUID_TANK.location(); + public Identifier getDefinitionId() { + return ModMultiblockDefinitions.LARGE_FLUID_TANK.identifier(); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ShulkerContainerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/container/ShulkerContainerBlock.java similarity index 98% rename from src/main/java/dev/dubhe/anvilcraft/block/ShulkerContainerBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/container/ShulkerContainerBlock.java index c666e5e11d..cdca495d9f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ShulkerContainerBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/container/ShulkerContainerBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.container; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -117,39 +117,6 @@ public ShulkerContainerBlock(Properties properties) { ); } - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return switch (state.getValue(HALF)) { - case BOTTOM_CENTER -> BOTTOM_CENTER; - case BOTTOM_W -> BOTTOM_W; - case BOTTOM_E -> BOTTOM_E; - case BOTTOM_N -> BOTTOM_N; - case BOTTOM_S -> BOTTOM_S; - case BOTTOM_NW -> BOTTOM_NW; - case BOTTOM_SW -> BOTTOM_SW; - case BOTTOM_NE -> BOTTOM_NE; - case BOTTOM_SE -> BOTTOM_SE; - case MID_CENTER -> MID_CENTER; - case MID_W -> MID_W; - case MID_E -> MID_E; - case MID_N -> MID_N; - case MID_S -> MID_S; - case MID_NW -> MID_NW; - case MID_SW -> MID_SW; - case MID_NE -> MID_NE; - case MID_SE -> MID_SE; - case TOP_CENTER -> TOP_CENTER; - case TOP_W -> TOP_W; - case TOP_E -> TOP_E; - case TOP_N -> TOP_N; - case TOP_S -> TOP_S; - case TOP_NW -> TOP_NW; - case TOP_SW -> TOP_SW; - case TOP_NE -> TOP_NE; - case TOP_SE -> TOP_SE; - }; - } - @Override public void removePartsAndUpdate(Level level, BlockPos pos) { BlockState blockState = level.getBlockState(pos); @@ -164,9 +131,9 @@ public void removePartsAndUpdate(Level level, BlockPos pos) { BlockPos fromPos = updatedPos.relative(direction); level.neighborShapeChanged( direction, - level.getBlockState(fromPos), - updatedPos, + updatedPos, fromPos, + level.getBlockState(fromPos), 3, 512 ); @@ -194,7 +161,7 @@ protected float getShadeBrightness(BlockState state, BlockGetter getter, BlockPo } @Override - protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + protected boolean propagatesSkylightDown(BlockState state) { return true; } @@ -224,6 +191,39 @@ public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { } // region VoxelShapes + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return switch (state.getValue(HALF)) { + case BOTTOM_CENTER -> BOTTOM_CENTER; + case BOTTOM_W -> BOTTOM_W; + case BOTTOM_E -> BOTTOM_E; + case BOTTOM_N -> BOTTOM_N; + case BOTTOM_S -> BOTTOM_S; + case BOTTOM_NW -> BOTTOM_NW; + case BOTTOM_SW -> BOTTOM_SW; + case BOTTOM_NE -> BOTTOM_NE; + case BOTTOM_SE -> BOTTOM_SE; + case MID_CENTER -> MID_CENTER; + case MID_W -> MID_W; + case MID_E -> MID_E; + case MID_N -> MID_N; + case MID_S -> MID_S; + case MID_NW -> MID_NW; + case MID_SW -> MID_SW; + case MID_NE -> MID_NE; + case MID_SE -> MID_SE; + case TOP_CENTER -> TOP_CENTER; + case TOP_W -> TOP_W; + case TOP_E -> TOP_E; + case TOP_N -> TOP_N; + case TOP_S -> TOP_S; + case TOP_NW -> TOP_NW; + case TOP_SW -> TOP_SW; + case TOP_NE -> TOP_NE; + case TOP_SE -> TOP_SE; + }; + } + protected static final VoxelShape MID_CENTER = Shapes.block(); protected static final VoxelShape BOTTOM_CENTER = Block.box(0, 2, 0, 16, 16, 16); @@ -268,4 +268,4 @@ public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { protected static final VoxelShape TOP_SE = ShapeUtil.rotate(Direction.Axis.Y, 180, TOP_NW); protected static final VoxelShape TOP_NE = ShapeUtil.rotate(Direction.Axis.Y, 270, TOP_NW); // endregion -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/container/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/container/package-info.java new file mode 100644 index 0000000000..99606a3bfb --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/container/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.container; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/decoration/ReinforcedConcreteBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ReinforcedConcreteBlock.java new file mode 100644 index 0000000000..4ba3e92cd4 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ReinforcedConcreteBlock.java @@ -0,0 +1,110 @@ +package dev.dubhe.anvilcraft.block.decoration; + +import dev.dubhe.anvilcraft.block.state.Color; +import dev.dubhe.anvilcraft.block.state.ReinforcedConcreteHalf; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.piston.PistonMovingBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.EnumProperty; + +public class ReinforcedConcreteBlock extends Block { + public static final EnumProperty HALF = EnumProperty.create("half", ReinforcedConcreteHalf.class); + @Getter + private final Color color; + + public ReinforcedConcreteBlock(Properties properties, Color color) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HALF, ReinforcedConcreteHalf.SINGLE)); + this.color = color; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HALF); + } + + private boolean checkHalf(BlockState state, ReinforcedConcreteHalf half) { + return state.is(this) && state.getValue(HALF) == half; + } + + /// When piston finished a block movement, this block will receive an NC update where neighborPos is + /// same as pos. So we cannot ignore the update when neighborPos.equals(pos). + /// + /// @param pos the position where block being updated + /// @param fromPos the position where block update is spread from + /// @return If the NC update should be ignored. + /// @see PistonMovingBlockEntity#tick(Level, BlockPos, BlockState, PistonMovingBlockEntity) + private static boolean shouldIgnoreUpdate(BlockPos pos, BlockPos fromPos) { + return pos.getY() == fromPos.getY() && (pos.getX() != fromPos.getX() || pos.getZ() != fromPos.getZ()); + } + + @Override + protected BlockState updateShape( + BlockState state, + LevelReader levelReader, + ScheduledTickAccess ticks, + BlockPos pos, + Direction directionToNeighbour, + BlockPos neighbourPos, + BlockState neighbourState, + RandomSource random + ) { + if (!(levelReader instanceof Level level)) { + return state; + } + if (level.isClientSide()) { + return state; + } + if (shouldIgnoreUpdate(pos, neighbourPos)) { + return state; + } + ReinforcedConcreteHalf half = state.getValue(HALF); + BlockState aboveState = level.getBlockState(pos.above()); + BlockState belowState = level.getBlockState(pos.below()); + switch (half) { + case TOP: + if (this.checkHalf(belowState, ReinforcedConcreteHalf.SINGLE)) { + level.setBlock(pos.below(), state.setValue(HALF, ReinforcedConcreteHalf.BOTTOM), 2); + } else if (!this.checkHalf(belowState, ReinforcedConcreteHalf.BOTTOM)) { + state = state.setValue(HALF, ReinforcedConcreteHalf.SINGLE); + } + break; + case BOTTOM: + if (this.checkHalf(aboveState, ReinforcedConcreteHalf.SINGLE)) { + level.setBlock(pos.above(), state.setValue(HALF, ReinforcedConcreteHalf.TOP), 2); + } else if (!this.checkHalf(aboveState, ReinforcedConcreteHalf.TOP)) { + state = state.setValue(HALF, ReinforcedConcreteHalf.SINGLE); + } + break; + case SINGLE: + if (neighbourPos.equals(pos.below()) && this.checkHalf(belowState, ReinforcedConcreteHalf.SINGLE)) { + state = state.setValue(HALF, ReinforcedConcreteHalf.TOP); + level.setBlock(pos.below(), state.setValue(HALF, ReinforcedConcreteHalf.BOTTOM), 2); + } else if (neighbourPos.equals(pos.above()) && this.checkHalf(aboveState, ReinforcedConcreteHalf.SINGLE)) { + state = state.setValue(HALF, ReinforcedConcreteHalf.BOTTOM); + level.setBlock(pos.above(), state.setValue(HALF, ReinforcedConcreteHalf.TOP), 2); + } + break; + default: + } + return state; + } + + @Override + public void tick( + BlockState state, + ServerLevel level, + BlockPos pos, + RandomSource random) { + super.tick(state, level, pos, random); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/EmberMetalBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalBlock.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/EmberMetalBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalBlock.java index 805b82e425..f92fbb6191 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/EmberMetalBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.ember; import dev.dubhe.anvilcraft.api.block.IEmberBlock; import lombok.Getter; @@ -33,7 +33,7 @@ public void randomTick( BlockPos pos, RandomSource random ) { - if (random.nextDouble() <= waterAbsorptionChance) { + if (random.nextDouble() <= this.waterAbsorptionChance) { tryAbsorbWater(level, pos); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/EmberMetalPillarBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalPillarBlock.java similarity index 94% rename from src/main/java/dev/dubhe/anvilcraft/block/EmberMetalPillarBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalPillarBlock.java index 6233e85e80..9ef0c4cd64 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/EmberMetalPillarBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalPillarBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.ember; import dev.dubhe.anvilcraft.api.block.IEmberBlock; import lombok.Getter; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/EmberMetalSlabBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalSlabBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/EmberMetalSlabBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalSlabBlock.java index 8adae3c1a7..9b124575d4 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/EmberMetalSlabBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalSlabBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.ember; import dev.dubhe.anvilcraft.api.block.IEmberBlock; import lombok.Getter; @@ -33,7 +33,7 @@ public void randomTick( RandomSource random ) { if (random.nextDouble() <= 0.1) { - level.playSound(null, pos, SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1f, 1f); + level.playSound(null, pos, SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1F, 1F); level.setBlock(pos, state.setValue(SlabBlock.WATERLOGGED, false), 2); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/EmberMetalStairBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalStairBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/EmberMetalStairBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalStairBlock.java index 43075e9fda..cad970554d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/EmberMetalStairBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/EmberMetalStairBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.ember; import dev.dubhe.anvilcraft.api.block.IEmberBlock; import lombok.Getter; @@ -34,7 +34,7 @@ public void randomTick( RandomSource random ) { if (random.nextDouble() <= 0.1) { - level.playSound(null, pos, SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1f, 1f); + level.playSound(null, pos, SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1F, 1F); level.setBlock(pos, state.setValue(SlabBlock.WATERLOGGED, false), 2); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/package-info.java new file mode 100644 index 0000000000..e666b5fd27 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/ember/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.decoration.ember; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FrostMetalBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalBlock.java similarity index 82% rename from src/main/java/dev/dubhe/anvilcraft/block/FrostMetalBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalBlock.java index e793efcf59..faf57584a5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FrostMetalBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.frost; import dev.dubhe.anvilcraft.api.block.IFrostBlock; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FrostMetalPillarBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalPillarBlock.java similarity index 84% rename from src/main/java/dev/dubhe/anvilcraft/block/FrostMetalPillarBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalPillarBlock.java index 80ddff82f7..69514775a7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FrostMetalPillarBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalPillarBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.frost; import dev.dubhe.anvilcraft.api.block.IFrostBlock; import net.minecraft.world.level.block.RotatedPillarBlock; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FrostMetalSlabBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalSlabBlock.java similarity index 83% rename from src/main/java/dev/dubhe/anvilcraft/block/FrostMetalSlabBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalSlabBlock.java index d57c03771e..3f43333e88 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FrostMetalSlabBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalSlabBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.frost; import dev.dubhe.anvilcraft.api.block.IFrostBlock; import net.minecraft.world.level.block.SlabBlock; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FrostMetalStairBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalStairBlock.java similarity index 87% rename from src/main/java/dev/dubhe/anvilcraft/block/FrostMetalStairBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalStairBlock.java index e6d6b7e018..996af49fee 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FrostMetalStairBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/FrostMetalStairBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.frost; import dev.dubhe.anvilcraft.api.block.IFrostBlock; import net.minecraft.world.level.block.StairBlock; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/package-info.java new file mode 100644 index 0000000000..1ac8bbcdee --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/frost/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.decoration.frost; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronBeamBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronBeamBlock.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/block/HeavyIronBeamBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronBeamBlock.java index 602794a0a1..7279b874c4 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronBeamBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronBeamBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.heavyiron; import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -17,7 +17,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class HeavyIronBeamBlock extends Block implements IHammerRemovable, HammerRotateBehavior { @@ -52,13 +52,11 @@ public VoxelShape getShape( BlockPos blockPos, CollisionContext collisionContext ) { - return switch (blockState.getValue(AXIS)) { - case X: - yield AABB_X; - case Z: - default: - yield AABB_Z; - }; + if (blockState.getValue(AXIS) == Direction.Axis.X) { + return AABB_X; + } else { + return AABB_Z; + } } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronDoorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronDoorBlock.java similarity index 87% rename from src/main/java/dev/dubhe/anvilcraft/block/HeavyIronDoorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronDoorBlock.java index 8d639cfa96..07c60c4c33 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronDoorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronDoorBlock.java @@ -1,13 +1,12 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.heavyiron; import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; -import dev.dubhe.anvilcraft.item.AnvilHammerItem; +import dev.dubhe.anvilcraft.item.tool.AnvilHammerItem; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -19,8 +18,9 @@ import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class HeavyIronDoorBlock extends DoorBlock implements IHammerChangeable { public HeavyIronDoorBlock(Properties properties) { @@ -31,7 +31,7 @@ public HeavyIronDoorBlock(Properties properties) { public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { BlockPos blockpos = context.getClickedPos(); Level level = context.getLevel(); - if (blockpos.getY() < level.getMaxBuildHeight() - 1 && level.getBlockState(blockpos.above()).canBeReplaced(context)) { + if (blockpos.getY() < level.getMaxY() - 1 && level.getBlockState(blockpos.above()).canBeReplaced(context)) { boolean flag = level.getBestNeighborSignal(blockpos) >= 15 || level.getBestNeighborSignal(blockpos.above()) >= 15; return this.defaultBlockState() @@ -46,7 +46,7 @@ public HeavyIronDoorBlock(Properties properties) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -67,9 +67,9 @@ protected ItemInteractionResult useItemOn( level.getRandom().nextFloat() * 0.1F + 0.9F ); level.gameEvent(player, this.isOpen(state) ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, pos); - return ItemInteractionResult.SUCCESS; + return InteractionResult.SUCCESS; } - return ItemInteractionResult.FAIL; + return InteractionResult.FAIL; } @Override @@ -78,7 +78,14 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockP } @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { boolean flag = level.getBestNeighborSignal(pos) >= 15 || level.getBestNeighborSignal(pos.relative(state.getValue(HALF) == DoubleBlockHalf.LOWER ? Direction.UP diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronPlateBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronPlateBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/HeavyIronPlateBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronPlateBlock.java index 6e7d220a10..6af7863f92 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronPlateBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronPlateBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.heavyiron; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import net.minecraft.core.BlockPos; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronTrapdoorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronTrapdoorBlock.java similarity index 84% rename from src/main/java/dev/dubhe/anvilcraft/block/HeavyIronTrapdoorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronTrapdoorBlock.java index 86e71f3da6..c25dd3eaa2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronTrapdoorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronTrapdoorBlock.java @@ -1,11 +1,10 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.heavyiron; import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; -import dev.dubhe.anvilcraft.item.AnvilHammerItem; +import dev.dubhe.anvilcraft.item.tool.AnvilHammerItem; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -16,8 +15,9 @@ import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class HeavyIronTrapdoorBlock extends TrapDoorBlock implements IHammerChangeable { public HeavyIronTrapdoorBlock(Properties properties) { @@ -38,7 +38,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -50,13 +50,20 @@ protected ItemInteractionResult useItemOn( if (stack.getItem() instanceof AnvilHammerItem) { this.toggle(state, level, pos, player); this.playSound(null, level, pos, state.getValue(OPEN)); - return ItemInteractionResult.SUCCESS; + return InteractionResult.SUCCESS; } - return ItemInteractionResult.FAIL; + return InteractionResult.FAIL; } @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { boolean flag = level.getBestNeighborSignal(pos) >= 15; if (flag != state.getValue(POWERED)) { if (state.getValue(OPEN) != flag) { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronWallBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronWallBlock.java similarity index 88% rename from src/main/java/dev/dubhe/anvilcraft/block/HeavyIronWallBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronWallBlock.java index 6abea1e591..ff7af609fa 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeavyIronWallBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/HeavyIronWallBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.decoration.heavyiron; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import net.minecraft.world.level.block.WallBlock; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/package-info.java new file mode 100644 index 0000000000..8904018481 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/heavyiron/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.decoration.heavyiron; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/decoration/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/decoration/package-info.java new file mode 100644 index 0000000000..8747d41af4 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/decoration/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.decoration; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/AccelerationRingBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/AccelerationRingBlockEntity.java index 626a90df29..4ce561c17b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/AccelerationRingBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/AccelerationRingBlockEntity.java @@ -4,12 +4,12 @@ import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.PowerComponentType; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.AccelerationRingBlock; -import dev.dubhe.anvilcraft.block.DeflectionRingBlock; -import dev.dubhe.anvilcraft.block.GiantAnvilBlock; +import dev.dubhe.anvilcraft.block.power.ring.AccelerationRingBlock; +import dev.dubhe.anvilcraft.block.power.ring.DeflectionRingBlock; import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; import dev.dubhe.anvilcraft.block.state.DirectionCube3x3PartHalf; import dev.dubhe.anvilcraft.block.state.GiantAnvilCube; +import dev.dubhe.anvilcraft.block.workstation.GiantAnvilBlock; import dev.dubhe.anvilcraft.entity.FallingGiantAnvilEntity; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlockTags; @@ -20,7 +20,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.tags.BlockTags; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -30,8 +29,8 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -import org.jetbrains.annotations.Nullable; import org.joml.Vector2d; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; import java.util.HashMap; @@ -66,7 +65,7 @@ public static Iterable getAllBlocks(Level level) { } } - public static AABB getAABB(BlockPos pos) { + public static @Nullable AABB getAABB(BlockPos pos) { return ACCELERATION_AABB_MAP.get(pos); } @@ -132,10 +131,12 @@ public void tick() { BlockState state = getBlockState(); if (this.level.isClientSide()) { if (!state.getValue(AccelerationRingBlock.HALF).equals(DirectionCube3x3PartHalf.MID_CENTER)) return; - if (isWork()) { - addSelfToMap(); - accelerate(); - } else removeSelfFromMap(); + if (this.isWork()) { + this.addSelfToMap(); + this.accelerate(); + } else { + this.removeSelfFromMap(); + } } if (this.grid == null) return; if (!state.getValue(AccelerationRingBlock.HALF).equals(DirectionCube3x3PartHalf.MID_CENTER)) return; @@ -145,15 +146,15 @@ public void tick() { } else if (!this.grid.isWorking() && !state.getValue(AccelerationRingBlock.OVERLOAD)) { block.updateState(this.level, getBlockPos(), AccelerationRingBlock.OVERLOAD, true, 3); } - if (!isWork()) { - removeSelfFromMap(); + if (!this.isWork()) { + this.removeSelfFromMap(); return; } - addSelfToMap(); + this.addSelfToMap(); if (state.getValue(AccelerationRingBlock.FACING).equals(Direction.UP)) { - attractGianAnvil(); + this.attractGianAnvil(); } - accelerate(); + this.accelerate(); } public void accelerate() { @@ -209,7 +210,6 @@ public void accelerate() { } } - @SuppressWarnings("DuplicatedCode") public void attractGianAnvil() { assert this.level != null; if ( @@ -291,7 +291,7 @@ public void attractGianAnvil() { .setValue(GiantAnvilBlock.CUBE, part.equals(Cube3x3PartHalf.MID_CENTER) ? GiantAnvilCube.CENTER : GiantAnvilCube.CORNER) ); } - fallingGiantAnvilEntity.ifPresent(Entity::kill); + fallingGiantAnvilEntity.ifPresent(FallingGiantAnvilEntity::discard); } @Override @@ -302,6 +302,6 @@ public int getInputPower() { @Override public void setRemoved() { super.setRemoved(); - removeSelfFromMap(); + this.removeSelfFromMap(); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ActivatorSlidingRailBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ActivatorSlidingRailBlockEntity.java index 6c13869b0d..f1d86da78f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ActivatorSlidingRailBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ActivatorSlidingRailBlockEntity.java @@ -7,11 +7,13 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.util.TriState; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.common.util.TriState; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import org.jspecify.annotations.Nullable; @Getter public class ActivatorSlidingRailBlockEntity extends BlockEntity { @@ -37,15 +39,15 @@ public CompoundTag getUpdateTag(HolderLookup.Provider registries) { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("ShouldPower", this.shouldPower.ordinal()); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("ShouldPower", this.shouldPower.ordinal()); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.shouldPower = TriState.values()[tag.getInt("ShouldPower")]; + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.shouldPower = TriState.values()[input.getIntOr("ShouldPower", 0)]; } public boolean shouldPower() { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ActiveSilencerBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ActiveSilencerBlockEntity.java index e089b29eb2..4b11e2a301 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ActiveSilencerBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ActiveSilencerBlockEntity.java @@ -7,7 +7,7 @@ import dev.dubhe.anvilcraft.api.sound.ISoundEventListener; import dev.dubhe.anvilcraft.api.sound.SoundHelper; import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; -import dev.dubhe.anvilcraft.block.ActiveSilencerBlock; +import dev.dubhe.anvilcraft.block.utility.ActiveSilencerBlock; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.inventory.ActiveSilencerMenu; import dev.dubhe.anvilcraft.network.SilencerSyncPacket; @@ -15,13 +15,13 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.Tag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.StringTag; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.MenuProvider; @@ -29,15 +29,17 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.neoforged.api.distmarker.Dist; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; @@ -45,35 +47,33 @@ public class ActiveSilencerBlockEntity extends BlockEntity implements MenuProvider, ISoundEventListener, IDiskCloneable, IHasAffectRange { - public static final Codec> CODEC = - ResourceLocation.CODEC.listOf().fieldOf("mutedSound").codec(); + public static final Codec> CODEC = + Identifier.CODEC.listOf().fieldOf("mutedSound").codec(); @Getter - private final Set mutedSound = new CopyOnWriteArraySet<>(); + private final Set muting = new CopyOnWriteArraySet<>(); private final AABB range; - /** - * 主动消音器 - */ + /// 主动消音器 public ActiveSilencerBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); - range = AABB.ofSize(Vec3.atCenterOf(pos), 31, 31, 31); + this.range = AABB.ofSize(Vec3.atCenterOf(pos), 31, 31, 31); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - Tag t = CODEC.encodeStart(NbtOps.INSTANCE, new ArrayList<>(mutedSound)).getOrThrow(); - tag.put("MutedSound", t); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + ValueOutput.TypedOutputList muted = output.list("MutedSounds", Identifier.CODEC); + for (Identifier sound : this.muting) { + muted.add(sound); + } } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - mutedSound.addAll(CODEC.decode(NbtOps.INSTANCE, tag.get("MutedSound")) - .getOrThrow() - .getFirst()); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + input.listOrEmpty("MutedSounds", Identifier.CODEC).forEach(this.muting::add); } @Nullable @@ -85,8 +85,11 @@ public Packet getUpdatePacket() { @Override public CompoundTag getUpdateTag(HolderLookup.Provider provider) { CompoundTag tag = new CompoundTag(); - Tag t = CODEC.encodeStart(NbtOps.INSTANCE, new ArrayList<>(mutedSound)).getOrThrow(); - tag.put("MutedSound", t); + ListTag muted = new ListTag(); + for (Identifier identifier : this.muting) { + muted.add(StringTag.valueOf(identifier.toShortString())); + } + tag.put("MutedSounds", muted); return tag; } @@ -114,56 +117,54 @@ public AbstractContainerMenu createMenu(int i, Inventory inventory, Player playe return new ActiveSilencerMenu(ModMenuTypes.ACTIVE_SILENCER.get(), i, inventory, this); } - /** - * 添加声音 - */ - public void addSound(ResourceLocation soundId) { - mutedSound.add(soundId); + /// 添加声音 + public void addSound(Identifier soundId) { + this.muting.add(soundId); this.setChanged(); } - public void removeSound(ResourceLocation soundId) { - mutedSound.remove(soundId); + public void removeSound(Identifier soundId) { + this.muting.remove(soundId); this.setChanged(); } @Override - public boolean shouldMute(ResourceLocation sound, Vec3 pos) { + public boolean shouldMute(Identifier sound, Vec3 pos) { if (getBlockState().getValue(ActiveSilencerBlock.POWERED)) return true; - boolean inRange = range.contains(pos); - boolean inList = mutedSound.contains(sound); + boolean inRange = this.range.contains(pos); + boolean inList = this.muting.contains(sound); return inRange && inList; } - public void sync(List sounds) { - this.mutedSound.clear(); - this.mutedSound.addAll(sounds); + public void sync(List sounds) { + this.muting.clear(); + this.muting.addAll(sounds); } - public void sync(Player player, List sounds) { + public void sync(Player player, List sounds) { this.sync(sounds); if (!(this.getLevel() instanceof ServerLevel serverLevel) || !(player instanceof ServerPlayer serverPlayer)) return; NetworkUtil.sendToAllPlayersInDimensionExcluded( serverLevel, serverPlayer, - new SilencerSyncPacket(this.getBlockPos(), List.copyOf(this.mutedSound)) + new SilencerSyncPacket(this.getBlockPos(), List.copyOf(this.muting)) ); } @Override - public void storeDiskData(CompoundTag tag) { - Tag t = CODEC.encodeStart(NbtOps.INSTANCE, new ArrayList<>(mutedSound)).getOrThrow(); - tag.put("MutedSound", t); + public void storeDiskData(ValueOutput output) { + ValueOutput.TypedOutputList muted = output.list("MutedSounds", Identifier.CODEC); + for (Identifier identifier : this.muting) { + muted.add(identifier); + } } @Override - public void applyDiskData(CompoundTag data) { - mutedSound.addAll(CODEC.decode(NbtOps.INSTANCE, data.get("MutedSound")) - .getOrThrow() - .getFirst()); + public void applyDiskData(ValueInput input) { + input.listOrEmpty("MutedSounds", Identifier.CODEC).forEach(this.muting::add); this.setChanged(); - if (level != null && !level.isClientSide) { - level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 3); + if (this.level != null && !this.level.isClientSide()) { + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/AdvancedComparatorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/AdvancedComparatorBlockEntity.java index dbcf67a2e3..3138ae77e9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/AdvancedComparatorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/AdvancedComparatorBlockEntity.java @@ -2,7 +2,7 @@ import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.api.item.IDiskCloneable; -import dev.dubhe.anvilcraft.block.AdvancedComparatorBlock; +import dev.dubhe.anvilcraft.block.utility.redstone.AdvancedComparatorBlock; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -22,13 +22,13 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import org.jspecify.annotations.Nullable; import java.util.Optional; @@ -62,30 +62,23 @@ public Packet getUpdatePacket() { @Override public CompoundTag getUpdateTag(HolderLookup.Provider registries) { - CompoundTag compoundTag = new CompoundTag(); - this.saveAdditional(compoundTag, registries); - return compoundTag; - } - - @Override - public void saveToItem(ItemStack stack, HolderLookup.Provider registries) { CompoundTag data = this.constructDataNbt(); - BlockItem.setBlockEntityData(stack, this.getType(), data); - stack.applyComponents(this.collectComponents()); + data.putInt("InputSignal", this.inputtingSignal); + return data; } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); CompoundTag data = this.constructDataNbt(); data.putInt("InputSignal", this.inputtingSignal); - tag.put("ExtraData", data); + output.store("ExtraData", CompoundTag.CODEC, data); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - CompoundTag data = tag.getCompound("ExtraData"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + CompoundTag data = input.read("ExtraData", CompoundTag.CODEC).orElse(new CompoundTag()); this.readDataNbt(data); if ((this.compareMode == Mode.HYSTERESIS && this.inputtingSignal >= this.highLimit) || (this.compareMode == Mode.WINDOW && this.inputtingSignal <= this.highLimit)) { @@ -107,23 +100,23 @@ public CompoundTag constructDataNbt() { } public AdvancedComparatorBlockEntity readDataNbt(CompoundTag data) { - this.compareMode = Mode.fromIndex(data.getByte("CompareMode")); - this.outputInvert = data.getBoolean("OutputMode"); - this.redstoneControl = data.getBoolean("RedstoneControl"); - this.highLimit = data.getInt("HighLimit"); - this.lowLimit = data.getInt("LowLimit"); - this.inputtingSignal = data.getInt("InputSignal"); + this.compareMode = Mode.fromIndex(data.getByteOr("CompareMode", (byte) 0)); + this.outputInvert = data.getBooleanOr("OutputMode", false); + this.redstoneControl = data.getBooleanOr("RedstoneControl", false); + this.highLimit = data.getIntOr("HighLimit", 0); + this.lowLimit = data.getIntOr("LowLimit", 0); + this.inputtingSignal = data.getIntOr("InputSignal", 0); return this; } @Override - public void storeDiskData(CompoundTag tag) { - tag.put("Data", this.constructDataNbt()); + public void storeDiskData(ValueOutput output) { + output.store("Data", CompoundTag.CODEC, this.constructDataNbt()); } @Override - public void applyDiskData(CompoundTag data) { - this.readDataNbt(data.getCompound("Data")); + public void applyDiskData(ValueInput input) { + this.readDataNbt(input.read("Data", CompoundTag.CODEC).orElse(new CompoundTag())); if (this.getLevel() == null) return; Util.castSafely(this.getBlockState().getBlock(), AdvancedComparatorBlock.class) .ifPresent(block -> block.update(this.getLevel(), this.getBlockPos(), this.getBlockState())); @@ -146,7 +139,7 @@ public void updateInputtingSignal(Level level, BlockPos pos, BlockState state) { public void onLoad() { super.onLoad(); if (this.level == null) return; - updateInputtingSignal(this.level, this.getBlockPos(), this.getBlockState()); + this.updateInputtingSignal(this.level, this.getBlockPos(), this.getBlockState()); } @Override @@ -157,20 +150,14 @@ public Component getDisplayName() { @Override public @Nullable AbstractContainerMenu createMenu(int containerId, Inventory inventory, Player player) { if (player.isSpectator()) return null; - if (player.level().getBlockEntity(getBlockPos()) instanceof AdvancedComparatorBlockEntity blockEntity) { + if (player.level().getBlockEntity(this.getBlockPos()) instanceof AdvancedComparatorBlockEntity blockEntity) { return new AdvancedComparatorMenu(ModMenuTypes.ADVANCED_COMPARATOR.get(), containerId, inventory, blockEntity); } return null; } - public CompoundTag exportMoveData() { - return constructDataNbt(); - } - - public void applyMoveData(Level level, BlockPos pos, BlockState state, CompoundTag nbt) { - readDataNbt(nbt); - ((AdvancedComparatorBlock) state.getBlock()).update(level, pos, state); - setChanged(); + public void notifyMoved() { + this.state = State.OUTPUT_LOW; } public enum State { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseChuteBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseChuteBlockEntity.java index c12d5094ad..54c4ef885f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseChuteBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseChuteBlockEntity.java @@ -3,7 +3,7 @@ import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.item.IDiskCloneable; import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; import lombok.Getter; import lombok.Setter; @@ -11,23 +11,31 @@ import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.util.ProblemReporter; +import net.minecraft.world.Containers; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.storage.TagValueOutput; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.ItemHandlerHelper; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; import java.util.List; import java.util.Objects; @@ -35,14 +43,14 @@ @Getter public abstract class BaseChuteBlockEntity extends BaseMachineBlockEntity - implements IFilterBlockEntity, IDiskCloneable, IItemHandlerHolder { + implements IFilterBlockEntity, IDiskCloneable, IItemResourceHandlerHolder { private final FilteredItemStackHandler itemHandler = new FilteredItemStackHandler(9) { @Override - public void onContentsChanged(int slot) { - assert level != null; - if (level.isClientSide) return; - setChanged(); + protected void onContentsChanged(int index, ItemStack previousContents) { + assert BaseChuteBlockEntity.this.level != null; + if (BaseChuteBlockEntity.this.level.isClientSide()) return; + BaseChuteBlockEntity.this.setChanged(); } }; @Setter @@ -57,26 +65,26 @@ protected BaseChuteBlockEntity(BlockEntityType type, Bloc public Direction getDirection() { if (this.level == null) return Direction.UP; BlockState state = this.level.getBlockState(this.getBlockPos()); - if (validateBlockState(state)) return state.getValue(getFacingProperty()); + if (this.validateBlockState(state)) return state.getValue(this.getFacingProperty()); return Direction.UP; } @Override public void setDirection(Direction direction) { - if (shouldSkipDirection(direction)) return; + if (this.shouldSkipDirection(direction)) return; BlockPos pos = this.getBlockPos(); Level level = this.getLevel(); if (null == level) return; BlockState state = level.getBlockState(pos); - if (!validateBlockState(state)) return; - level.setBlockAndUpdate(pos, state.setValue(getFacingProperty(), direction)); + if (!this.validateBlockState(state)) return; + level.setBlockAndUpdate(pos, state.setValue(this.getFacingProperty(), direction)); } protected abstract boolean shouldSkipDirection(Direction direction); protected abstract boolean validateBlockState(BlockState state); - protected abstract DirectionProperty getFacingProperty(); + protected abstract EnumProperty getFacingProperty(); protected abstract Direction getOutputDirection(); @@ -86,7 +94,7 @@ public void setDirection(Direction direction) { @Override public FilteredItemStackHandler getFilteredItemStackHandler() { - return itemHandler; + return this.itemHandler; } @Override @@ -97,128 +105,133 @@ public FilteredItemStackHandler getFilteredItemStackHandler() { public abstract AbstractContainerMenu createMenu(int i, Inventory inventory, Player player); @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.putInt("Cooldown", cooldown); - tag.put("Inventory", itemHandler.serializeNBT(provider)); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("Cooldown", this.cooldown); + this.itemHandler.serialize(output.child("Inventory")); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - cooldown = tag.getInt("Cooldown"); - itemHandler.deserializeNBT(provider, tag.getCompound("Inventory")); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.cooldown = input.getIntOr("Cooldown", 0); + this.itemHandler.deserialize(input.childOrEmpty("Inventory")); } - /** - * 溜槽 tick - */ + /// 溜槽 tick public void tick() { - if (level == null) return; - if (cooldown > 0) cooldown--; - tickedGameTime = level.getGameTime(); + if (this.level == null) return; + if (this.cooldown > 0) this.cooldown--; + this.tickedGameTime = this.level.getGameTime(); boolean resetCD = false; - if (cooldown <= 0) { - if (isEnabled()) { - BlockPos targetPos = getBlockPos().relative(getOutputDirection()); - // 尝试向朝向容器输出 - List targetList = ItemHandlerUtil.getTargetItemHandlerList( - targetPos, - getOutputDirection().getOpposite(), - level + if (this.cooldown > 0) { + this.level.updateNeighbourForOutputSignal(this.getBlockPos(), this.getBlockState().getBlock()); + return; + } + if (!this.isEnabled()) { + this.level.updateNeighbourForOutputSignal(this.getBlockPos(), this.getBlockState().getBlock()); + return; + } + BlockPos targetPos = this.getBlockPos().relative(this.getOutputDirection()); + // 尝试向朝向容器输出 + List> targetList = ItemHandlerUtil.getTargetItemHandlerList( + targetPos, + this.getOutputDirection().getOpposite(), + this.level + ); + if (targetList != null && !targetList.isEmpty()) { + for (ResourceHandler target : targetList) { + BlockEntity targetBE = this.level.getBlockEntity(targetPos); + boolean setChuteCD = targetBE != null && this.isTargetEmpty(targetBE); + boolean success = ItemHandlerUtil.exportToTarget(this.getItemHandler(), 64, (_, _) -> true, target); + if (success) { + // 特判溜槽cd7gt + if (setChuteCD) this.setChuteCD(targetBE); + resetCD = true; + break; + } + } + } else { + Vec3 center = this.getBlockPos().relative(this.getOutputDirection()).getCenter(); + AABB aabb = new AABB(center.add(-0.125, -0.125, -0.125), center.add(0.125, 0.125, 0.125)); + if (Objects.requireNonNull(this.getLevel()).noCollision(aabb)) { + List itemEntities = this.getLevel().getEntitiesOfClass( + ItemEntity.class, + new AABB(this.getBlockPos().relative(this.getOutputDirection())), + itemEntity -> !itemEntity.getItem().isEmpty() ); - if (targetList != null && !targetList.isEmpty()) { - for (IItemHandler target : targetList) { - BlockEntity targetBE = level.getBlockEntity(targetPos); - boolean setChuteCD = targetBE != null && isTargetEmpty(targetBE); - boolean success = ItemHandlerUtil.exportToTarget(getItemHandler(), 64, stack -> true, target); - if (success) { - // 特判溜槽cd7gt - if (setChuteCD) setChuteCD(targetBE); - resetCD = true; - break; - } - } - } else { - Vec3 center = getBlockPos().relative(getOutputDirection()).getCenter(); - AABB aabb = new AABB(center.add(-0.125, -0.125, -0.125), center.add(0.125, 0.125, 0.125)); - if (Objects.requireNonNull(getLevel()).noCollision(aabb)) { - List itemEntities = getLevel() - .getEntitiesOfClass( - ItemEntity.class, - new AABB(getBlockPos().relative(getOutputDirection())), - itemEntity -> !itemEntity.getItem().isEmpty()); - for (int i = 0; i < this.itemHandler.getSlots(); i++) { - ItemStack stack = this.itemHandler.getStackInSlot(i); - if (!stack.isEmpty()) { - int slotLimit = this.itemHandler.getSlotLimit(i); - int sameItemCount = 0; - for (ItemEntity entity : itemEntities) { - if (entity.getItem().getItem() == stack.getItem()) { - sameItemCount += entity.getItem().getCount(); - } - } - if (sameItemCount < slotLimit) { - ItemStack droppedItemStack = stack.copy(); - int droppedItemCount = - Math.min(stack.getCount(), slotLimit - sameItemCount); - droppedItemStack.setCount(droppedItemCount); - stack.setCount(stack.getCount() - droppedItemCount); - if (stack.getCount() == 0) stack = ItemStack.EMPTY; - ItemEntity itemEntity = new ItemEntity( - getLevel(), - center.x, - center.y, - center.z, - droppedItemStack, - 0, - 0, - 0 - ); - applySpeed(itemEntity, getOutputDirection()); - itemEntity.setDefaultPickUpDelay(); - getLevel().addFreshEntity(itemEntity); - this.itemHandler.setStackInSlot(i, stack); - resetCD = true; - break; - } - } - } + for (int i = 0; i < this.itemHandler.size(); i++) { + ItemResource resource = this.itemHandler.getResource(i); + if (resource.isEmpty()) continue; + int slotLimit = this.itemHandler.getSlotLimit(i); + int sameItemCount = 0; + for (ItemEntity entity : itemEntities) { + if (entity.getItem().getItem() != resource.getItem()) continue; + sameItemCount += entity.getItem().getCount(); } - - } - // 尝试从上方容器输入 - if (!this.inventoryFull()) { - IItemHandler source = ItemHandlerUtil.getSourceItemHandler( - getBlockPos().relative(getInputDirection()), - getInputDirection().getOpposite(), - level + if (sameItemCount >= slotLimit) continue; + int accessible = this.itemHandler.getAmountAsInt(i); + int dropping = Math.min(accessible, slotLimit - sameItemCount); + ItemStack remaining = resource.toStack(dropping); + if (resource.isEmpty()) remaining = ItemStack.EMPTY; + ItemEntity itemEntity = new ItemEntity( + this.getLevel(), + center.x, + center.y, + center.z, + remaining, + 0, + 0, + 0 ); - if (source != null) { - resetCD |= ItemHandlerUtil.importFromTarget(getItemHandler(), 64, stack -> true, source); + this.applySpeed(itemEntity, this.getOutputDirection()); + itemEntity.setDefaultPickUpDelay(); + this.getLevel().addFreshEntity(itemEntity); + this.itemHandler.set(i, resource, accessible - dropping); + resetCD = true; + break; + } + } + } + // 尝试从上方容器输入 + if (this.inventoryFull()) { + this.level.updateNeighbourForOutputSignal(getBlockPos(), getBlockState().getBlock()); + if (resetCD) this.cooldown = AnvilCraft.CONFIG.chuteMaxCooldown; + return; + } + ResourceHandler source = ItemHandlerUtil.getSourceItemHandler( + this.getBlockPos().relative(this.getInputDirection()), + this.getInputDirection().getOpposite(), + this.level + ); + if (source != null) { + resetCD |= ItemHandlerUtil.importFromTarget(this.getItemHandler(), 64, (_, _) -> true, source); + } else { + List itemEntities = Objects.requireNonNull(this.getLevel()).getEntitiesOfClass( + ItemEntity.class, + new AABB(this.getBlockPos().relative(this.getInputDirection())), + itemEntity -> !itemEntity.getItem().isEmpty() + ); + for (ItemEntity item : itemEntities) { + ItemStack stack = item.getItem(); + int inserted; + try (Transaction transaction = Transaction.openRoot()) { + inserted = this.getItemHandler().insert(ItemResource.of(stack), stack.count(), transaction); + if (inserted <= 0) { + continue; + } + transaction.commit(); + if (inserted == stack.count()) { + item.discard(); } else { - List itemEntities = Objects.requireNonNull(getLevel()) - .getEntitiesOfClass( - ItemEntity.class, - new AABB(getBlockPos().relative(getInputDirection())), - itemEntity -> !itemEntity.getItem().isEmpty()); - for (ItemEntity itemEntity : itemEntities) { - ItemStack itemStack = itemEntity.getItem(); - ItemStack remaining = - ItemHandlerHelper.insertItem(this.itemHandler, itemStack, true); - if (remaining.getCount() == itemStack.getCount()) continue; - ItemHandlerHelper.insertItem(this.itemHandler, itemEntity.getItem(), false); - itemEntity.setItem(remaining); - resetCD = true; - } + item.setItem(stack.copyWithCount(stack.count() - inserted)); } } - + resetCD = true; } - } - level.updateNeighbourForOutputSignal(getBlockPos(), getBlockState().getBlock()); - if (resetCD) cooldown = AnvilCraft.CONFIG.chuteMaxCooldown; + this.level.updateNeighbourForOutputSignal(getBlockPos(), getBlockState().getBlock()); + if (resetCD) this.cooldown = AnvilCraft.CONFIG.chuteMaxCooldown; } private boolean isTargetEmpty(BlockEntity blockEntity) { @@ -244,24 +257,20 @@ private void setChuteCD(BlockEntity targetBE) { } } - /** - * 获取红石信号强度 - * - * @return 红石信号强度 - */ + /// 获取红石信号强度 + /// + /// @return 红石信号强度 public int getRedstoneSignal() { int strength = 0; - for (int index = 0; index < itemHandler.getSlots(); index++) { - ItemStack itemStack = itemHandler.getStackInSlot(index); + for (int index = 0; index < this.itemHandler.size(); index++) { + ItemResource resource = this.itemHandler.getResource(index); // 槽位为未设置过滤的已禁用槽位 - if (itemHandler.isSlotDisabled(index) && !itemHandler.isFilterEnabled()) { + if (this.itemHandler.isSlotDisabled(index) && !this.itemHandler.isFilterEnabled()) { strength++; continue; } // 槽位上没有物品 - if (itemStack.isEmpty()) { - continue; - } + if (resource.isEmpty()) continue; strength++; } return strength; @@ -272,63 +281,57 @@ protected void applySpeed(ItemEntity itemEntity, Direction direction) { } @Override - public void storeDiskData(CompoundTag tag) { - tag.put("Filtering", itemHandler.serializeFiltering()); + public void storeDiskData(ValueOutput output) { + this.itemHandler.serializeFiltering(output.child("Filtering")); } @Override - public void applyDiskData(CompoundTag data) { - itemHandler.deserializeFiltering(data.getCompound("Filtering")); + public void applyDiskData(ValueInput input) { + this.itemHandler.deserializeFiltering(input.childOrEmpty("Filtering")); this.setChanged(); - if (level != null && !level.isClientSide) { - level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 3); + if (this.level != null && !this.level.isClientSide()) { + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); } } public boolean isEmpty() { - for (int i = 0; i < itemHandler.getSlots(); i++) { - if (!itemHandler.getStackInSlot(i).isEmpty()) return false; + for (int i = 0; i < this.itemHandler.size(); i++) { + if (!this.itemHandler.getResource(i).isEmpty()) return false; } return true; } private boolean inventoryFull() { - for (int i = 0; i < itemHandler.getSlots(); i++) { - ItemStack itemstack = itemHandler.getStackInSlot(i); - if (itemstack.isEmpty() || itemstack.getCount() != itemstack.getMaxStackSize()) return false; + for (int i = 0; i < this.itemHandler.size(); i++) { + ItemResource resource = this.itemHandler.getResource(i); + if (resource.isEmpty() || this.itemHandler.getAmountAsInt(i) < resource.getMaxStackSize()) return false; } return true; } - /** - * 获取更新标签 (由服务端调用,决定发给客户端什么数据) - */ + /// 获取更新标签 (由服务端调用,决定发给客户端什么数据) @Override - public CompoundTag getUpdateTag(HolderLookup.Provider provider) { - CompoundTag tag = new CompoundTag(); - this.saveAdditional(tag, provider); - return tag; + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + TagValueOutput output = TagValueOutput.createWithContext(new ProblemReporter.Collector(this.problemPath()), registries); + this.saveAdditional(output); + return output.buildResult(); } - /** - * 获取更新数据包 (区块加载时调用) - */ + /// 获取更新数据包 (区块加载时调用) @Nullable @Override public ClientboundBlockEntityDataPacket getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); } - /** - * 客户端接收数据包 (由客户端调用) - * 收到包 -> 读取NBT -> 覆盖本地数据 - */ @Override - public void onDataPacket(net.minecraft.network.Connection net, - ClientboundBlockEntityDataPacket pkt, - HolderLookup.Provider lookupProvider - ) { - CompoundTag tag = pkt.getTag(); - this.loadAdditional(tag, lookupProvider); + public void onDataPacket(Connection net, ValueInput input) { + this.loadAdditional(input); + } + + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Containers.dropContents(this.level, pos, this.itemHandler.getStacks()); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseLaserBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseLaserBlockEntity.java index 7cdf25b5a7..3161b47d1e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseLaserBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseLaserBlockEntity.java @@ -1,8 +1,9 @@ package dev.dubhe.anvilcraft.block.entity; +import dev.anvilcraft.lib.v2.rendering.cachedber.pipeline.CachedBlockEntityRenderingPipeline; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.heat.HeaterManager; -import dev.dubhe.anvilcraft.api.rendering.CacheableBERenderingPipeline; +import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; import dev.dubhe.anvilcraft.init.ModHeaterInfos; import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.init.entity.ModDamageTypes; @@ -29,11 +30,10 @@ import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.common.Tags; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.ItemHandlerHelper; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.UnknownNullability; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jspecify.annotations.Nullable; import java.util.HashSet; import java.util.List; @@ -53,7 +53,7 @@ public abstract class BaseLaserBlockEntity extends BlockEntity { protected HashSet irradiateSelfLaserBlockSet = new HashSet<>(); protected boolean changed = false; @Getter - protected @UnknownNullability BlockPos irradiateBlockPos = null; + protected @Nullable BlockPos irradiateBlockPos = null; @Getter protected int laserLevel = 0; @@ -78,21 +78,21 @@ private boolean canPassThrough(Direction direction, BlockPos blockPos) { } public void updateIrradiateBlockPos(@Nullable BlockPos newPos) { - if (irradiateBlockPos == null) { + if (this.irradiateBlockPos == null) { if (newPos != null) this.markChanged(); - irradiateBlockPos = newPos; + this.irradiateBlockPos = newPos; return; } - if (!irradiateBlockPos.equals(newPos)) this.markChanged(); - irradiateBlockPos = newPos; + if (!this.irradiateBlockPos.equals(newPos)) this.markChanged(); + this.irradiateBlockPos = newPos; } public void resetState() { - changed = false; + this.changed = false; } public void markChanged() { - changed = true; + this.changed = true; } private BlockPos getIrradiateBlockPos(int expectedLength, Direction direction, BlockPos originPos) { @@ -111,8 +111,8 @@ protected int getBaseLaserLevel() { } protected int calculateLaserLevel() { - return getBaseLaserLevel() - + irradiateSelfLaserBlockSet.stream() + return this.getBaseLaserLevel() + + this.irradiateSelfLaserBlockSet.stream() .mapToInt(BaseLaserBlockEntity::calculateLaserLevel) .sum(); } @@ -120,17 +120,17 @@ protected int calculateLaserLevel() { public void syncTo(ServerPlayer player) { PacketDistributor.sendToPlayer( player, - new LaserEmitPacket(getLaserLevel(), getBlockPos(), irradiateBlockPos) + new LaserEmitPacket(getLaserLevel(), getBlockPos(), this.irradiateBlockPos, false) ); } public void tick(Level level) { - if (changed) { + if (this.changed) { if (level instanceof ServerLevel serverLevel) { PacketDistributor.sendToPlayersTrackingChunk( serverLevel, level.getChunkAt(getBlockPos()).getPos(), - new LaserEmitPacket(getLaserLevel(), getBlockPos(), irradiateBlockPos) + new LaserEmitPacket(getLaserLevel(), getBlockPos(), this.irradiateBlockPos, false) ); } } @@ -141,21 +141,15 @@ && getIrradiateBlockPos() != null ) { HeaterManager.addProducer(this.getBlockPos(), serverLevel, ModHeaterInfos.LASER_EMITTER); } - tickCount++; + this.tickCount++; } - /** - * 发射激光 - */ + /// 发射激光 public void emitLaser(Direction direction) { if (this.level == null) return; BlockPos tempIrradiateBlockPos = this.getIrradiateBlockPos(this.maxTransmissionDistance, direction, this.getBlockPos()); - if (!tempIrradiateBlockPos.equals(this.irradiateBlockPos)) { - if ( - this.irradiateBlockPos != null - && this.level.getBlockEntity(this.irradiateBlockPos) - instanceof BaseLaserBlockEntity lastIrradiatedLaserBlockEntity - ) { + if (this.irradiateBlockPos != null && !tempIrradiateBlockPos.equals(this.irradiateBlockPos)) { + if (this.level.getBlockEntity(this.irradiateBlockPos) instanceof BaseLaserBlockEntity lastIrradiatedLaserBlockEntity) { lastIrradiatedLaserBlockEntity.onCancelingIrradiation(this); } } @@ -190,12 +184,13 @@ public void emitLaser(Direction direction) { .getCenter() .add(0.0625, 0.0625, 0.0625) ); + // noinspection deprecation this.level.getEntities( EntityTypeTest.forClass(LivingEntity.class), trackBoundingBox, Entity::isAlive ).forEach(livingEntity -> - livingEntity.hurt( + livingEntity.hurtOrSimulate( ModDamageTypes.laser(this.level), hurt ) @@ -208,7 +203,7 @@ public void emitLaser(Direction direction) { if (irradiateBlock.is(Tags.Blocks.ORES)) { List drops = BreakBlockUtil.drop( serverLevel, - irradiateBlockPos + this.irradiateBlockPos ); this.deliverItem(drops, direction, this.irradiateBlockPos); } @@ -218,20 +213,20 @@ public void emitLaser(Direction direction) { public void deliverItem(List drops, Direction direction, BlockPos sourceBlockPos) { if (this.level == null) return; Vec3 blockPos = getBlockPos().relative(direction.getOpposite()).getCenter(); - BlockPos downStreamPos = getBlockPos().relative(getFacing().getOpposite()); + BlockPos downStreamPos = getBlockPos().relative(this.getFacing().getOpposite()); if (getLevel() == null) return; - IItemHandler cap = getLevel() + ResourceHandler cap = getLevel() .getCapability( - Capabilities.ItemHandler.BLOCK, + Capabilities.Item.BLOCK, downStreamPos, - getFacing() + this.getFacing() ); BlockState sourceBlock = this.level.getBlockState(sourceBlockPos); drops.forEach(itemStack -> { if (cap != null) { - ItemStack outItemStack = ItemHandlerHelper.insertItem(cap, itemStack, true); - if (outItemStack.isEmpty()) { - ItemHandlerHelper.insertItem(cap, itemStack, false); + ItemStack outItemStack = ItemHandlerUtil.insertItem(cap, itemStack, true); + if (!outItemStack.isEmpty()) { + ItemHandlerUtil.insertItem(cap, itemStack, false); } else { this.level.addFreshEntity(new ItemEntity( this.level, @@ -274,28 +269,24 @@ public void deliverItem(List drops, Direction direction, BlockPos sou }*/ } - /** - * 检测光学原件是否在链接表中 - */ + /// 检测光学原件是否在链接表中 public boolean isInIrradiateSelfLaserBlockSet(BaseLaserBlockEntity baseLaserBlockEntity) { return baseLaserBlockEntity == this - || irradiateSelfLaserBlockSet.contains(baseLaserBlockEntity) - || irradiateSelfLaserBlockSet.stream() + || this.irradiateSelfLaserBlockSet.contains(baseLaserBlockEntity) + || this.irradiateSelfLaserBlockSet.stream() .anyMatch(baseLaserBlockEntity1 -> baseLaserBlockEntity1.isInIrradiateSelfLaserBlockSet(baseLaserBlockEntity)); } public void onIrradiated(BaseLaserBlockEntity baseLaserBlockEntity) { - irradiateSelfLaserBlockSet.add(baseLaserBlockEntity); + this.irradiateSelfLaserBlockSet.add(baseLaserBlockEntity); } - /** - * 当方块被取消激光照射时调用 - */ + /// 当方块被取消激光照射时调用 public void onCancelingIrradiation(BaseLaserBlockEntity baseLaserBlockEntity) { - irradiateSelfLaserBlockSet.remove(baseLaserBlockEntity); - BlockPos tempIrradiateBlockPos = irradiateBlockPos; - updateIrradiateBlockPos(null); + this.irradiateSelfLaserBlockSet.remove(baseLaserBlockEntity); + BlockPos tempIrradiateBlockPos = this.irradiateBlockPos; + this.updateIrradiateBlockPos(null); if (level == null) return; if (tempIrradiateBlockPos == null) return; if (!(level.getBlockEntity(tempIrradiateBlockPos) instanceof BaseLaserBlockEntity irradiateBlockEntity)) return; @@ -308,12 +299,12 @@ public void onCancelingIrradiation(BaseLaserBlockEntity baseLaserBlockEntity) { public void setRemoved() { super.setRemoved(); if (level == null) return; - if (irradiateBlockPos == null) return; - if (!level.isLoaded(irradiateBlockPos)) return; - if (!(level.getBlockEntity(irradiateBlockPos) instanceof BaseLaserBlockEntity irradiateBlockEntity)) return; + if (this.irradiateBlockPos == null) return; + if (!level.isLoaded(this.irradiateBlockPos)) return; + if (!(level.getBlockEntity(this.irradiateBlockPos) instanceof BaseLaserBlockEntity irradiateBlockEntity)) return; irradiateBlockEntity.onCancelingIrradiation(this); if (level.isClientSide()) { - CacheableBERenderingPipeline.getInstance().update(this); + CachedBlockEntityRenderingPipeline.getInstance().update(this, true); } } @@ -321,41 +312,28 @@ public float getLaserOffset() { return 0; } - /** - * 为了适配forge中修改的渲染逻辑所添加的函数 - * 返回一个无限碰撞箱 - * - * @return forge中为原版信标生成的无限碰撞箱 - */ - @SuppressWarnings("unused") - public AABB getRenderBoundingBox() { - return new AABB( - Double.NEGATIVE_INFINITY, - Double.NEGATIVE_INFINITY, - Double.NEGATIVE_INFINITY, - Double.POSITIVE_INFINITY, - Double.POSITIVE_INFINITY, - Double.POSITIVE_INFINITY); - } - @Override public void clearRemoved() { super.clearRemoved(); if (this.level != null && this.level.isClientSide()) { - CacheableBERenderingPipeline.getInstance().update(this); + CachedBlockEntityRenderingPipeline.getInstance().update(this, true); } } + public int getLaserColor() { + return 0x00ff0d0d; + } + public void updateLaserLevel(int value) { - if (laserLevel != value) { - markChanged(); + if (this.laserLevel != value) { + this.markChanged(); } - laserLevel = value; + this.laserLevel = value; } public void clientUpdate(BlockPos irradiateBlockPos, int laserLevel) { this.irradiateBlockPos = irradiateBlockPos; this.laserLevel = laserLevel; - CacheableBERenderingPipeline.getInstance().update(this); + CachedBlockEntityRenderingPipeline.getInstance().update(this, true); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseMachineBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseMachineBlockEntity.java index 7dc38f08f4..446ed21a68 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseMachineBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseMachineBlockEntity.java @@ -1,6 +1,6 @@ package dev.dubhe.anvilcraft.block.entity; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -12,7 +12,7 @@ @Getter public abstract class BaseMachineBlockEntity extends BlockEntity - implements MenuProvider, IItemHandlerHolder { + implements MenuProvider, IItemResourceHandlerHolder { protected BaseMachineBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/BlackHoleBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/BlackHoleBlockEntity.java index 25c4a8e7a4..88315ea0bf 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/BlackHoleBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/BlackHoleBlockEntity.java @@ -19,7 +19,7 @@ public static BlackHoleBlockEntity createBlockEntity(BlockEntityType type, Bl @Override public void onLoad() { super.onLoad(); - if (this.level != null && !this.level.isClientSide) { + if (this.level != null && !this.level.isClientSide()) { GravityManager.GravitySourceType type = GravityManager.GravitySourceManager.getType(this.getBlockState().getBlock()); if (type != null) { GravityManager.GravitySourceManager.addSource(this.level, this.worldPosition, type); @@ -30,7 +30,7 @@ public void onLoad() { @Override public void setRemoved() { super.setRemoved(); - if (this.level != null && !this.level.isClientSide) { + if (this.level != null && !this.level.isClientSide()) { GravityManager.GravitySourceManager.removeSource(this.level, this.worldPosition); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/BurningHeaterBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/BurningHeaterBlockEntity.java new file mode 100644 index 0000000000..aaf93152c7 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/BurningHeaterBlockEntity.java @@ -0,0 +1,276 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.dubhe.anvilcraft.api.heat.HeaterManager; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; +import dev.dubhe.anvilcraft.block.BurningHeaterBlock; +import dev.dubhe.anvilcraft.init.ModHeaterInfos; +import dev.dubhe.anvilcraft.init.ModSoundEvents; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.ProblemReporter; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.TagValueOutput; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.registries.datamaps.builtin.FurnaceFuel; +import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; + +@SuppressWarnings("deprecation") +public class BurningHeaterBlockEntity extends BlockEntity implements IItemResourceHandlerHolder { + public static final int MAX_BURN_TIME = 1200 * 20; + public static final int LIT_THRESHOLD = 240 * 20; + + @Getter + private int burnTime = 0; + + /** 客户端上次同步到 burnTime 时的游戏时间 */ + private long lastSyncGameTime = 0; + + @Getter + private final ItemStacksResourceHandler itemHandler = new ItemStacksResourceHandler(1) { + @Override + public void onContentsChanged(int index, ItemStack previousContents) { + setChanged(); + } + + @Override + public boolean isValid(int index, ItemResource resource) { + return getItemBurnTime(resource.toStack()) > 0 || resource.toStack().is(Items.BUCKET); + } + }; + + public BurningHeaterBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + } + + public static BurningHeaterBlockEntity createBlockEntity( + BlockEntityType type, BlockPos pos, BlockState blockState + ) { + return new BurningHeaterBlockEntity(type, pos, blockState); + } + + /** + * 获取用于显示的燃烧时间。 + * 客户端上根据上次同步时间进行本地倒计时估算,避免频繁网络同步。 + */ + public int getDisplayBurnTime() { + if (level == null || !level.isClientSide()) return this.burnTime; + if (this.lastSyncGameTime <= 0) return this.burnTime; + long elapsed = level.getGameTime() - this.lastSyncGameTime; + return Math.max(0, this.burnTime - (int) elapsed); + } + + public void tick(Level level, BlockPos pos, BlockState state) { + if (!level.isClientSide()) { + int oldBurnTime = this.burnTime; + int oldLevel = state.getValue(BurningHeaterBlock.LEVEL); + + if (this.burnTime > 0) { + this.burnTime--; + } + + this.tryConsumeFuel(); + int newLevel = state.getValue(BurningHeaterBlock.LEVEL); + + // 仅在燃烧时间大幅变化或燃烧等级改变时同步到客户端 + boolean bigChange = Math.abs(this.burnTime - oldBurnTime) > 20 + || oldLevel != newLevel; + + if (bigChange) { + setChanged(); + level.sendBlockUpdated(pos, state, state, 3); + level.updateNeighbourForOutputSignal(pos, state.getBlock()); + } + + this.updateBurningState(level, pos, state); + HeaterManager.addProducer(pos, level, ModHeaterInfos.BURNING_HEATER); + return; + } + + // 客户端逻辑:音效和粒子 + int burningLevel = state.getValue(BurningHeaterBlock.LEVEL); + if (burningLevel >= 1) { + RandomSource random = level.getRandom(); + if (burningLevel == 2 && random.nextInt(40) == 0) { + level.playLocalSound(pos.getX(), pos.getY(), pos.getZ(), + ModSoundEvents.BURNING_HEATER.get(), SoundSource.BLOCKS, 1.0f, 1.0f, false); + } + if (burningLevel == 2 && random.nextInt(3) == 0) { + double x = pos.getX() + 0.5 + (random.nextDouble() - 0.5) * 0.6; + double y = pos.getY() + 1.0; + double z = pos.getZ() + 0.5 + (random.nextDouble() - 0.5) * 0.6; + level.addParticle(ParticleTypes.FLAME, x, y, z, 0.0, 0.05, 0.0); + } + if (burningLevel == 2) { + if (random.nextInt(5) == 0) { + double x = pos.getX() + 0.5 + (random.nextDouble() - 0.5) * 0.6; + double y = pos.getY() + 1.0; + double z = pos.getZ() + 0.5 + (random.nextDouble() - 0.5) * 0.6; + level.addParticle(ParticleTypes.SMOKE, x, y, z, 0.0, 0.1, 0.0); + } + } else { + if (random.nextInt(10) == 0) { + double x = pos.getX() + 0.5 + (random.nextDouble() - 0.5) * 0.4; + double y = pos.getY() + 0.8 + random.nextDouble() * 0.4; + double z = pos.getZ() + 0.5 + (random.nextDouble() - 0.5) * 0.4; + level.addParticle(ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 0.0, 0.05, 0.0); + } + } + } + } + + @Override + public void onLoad() { + super.onLoad(); + if (level != null) { + this.lastSyncGameTime = level.getGameTime(); + } + } + + @Override + @Nullable + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider provider) { + TagValueOutput output = TagValueOutput.createWithContext(ProblemReporter.DISCARDING, provider); + this.saveAdditional(output); + return output.buildResult(); + } + + @Override + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.burnTime = input.getIntOr("BurnTime", 0); + // 从磁盘加载燃料物品 + input.read("FuelItem", ItemStack.CODEC).ifPresent(stack -> { + if (!stack.isEmpty()) { + ItemResource resource = ItemResource.of(stack.getItem(), stack.getComponentsPatch()); + this.itemHandler.set(0, resource, stack.getCount()); + } + }); + if (level != null) { + this.lastSyncGameTime = level.getGameTime(); + } + } + + public void consumeBurnTime(int ticks) { + int remaining = ticks; + + while (remaining > 0) { + ItemResource fuelResource = this.itemHandler.getResource(0); + if (fuelResource.isEmpty()) break; + int fuelCount = this.itemHandler.getAmountAsInt(0); + int burnTimePerItem = getItemBurnTime(fuelResource.toStack()); + if (burnTimePerItem <= 0) break; + + int itemsToConsume = (remaining + burnTimePerItem - 1) / burnTimePerItem; + itemsToConsume = Math.min(itemsToConsume, fuelCount); + if (itemsToConsume <= 0) break; + + remaining -= itemsToConsume * burnTimePerItem; + try (Transaction tx = Transaction.openRoot()) { + this.itemHandler.extract(0, fuelResource, itemsToConsume, tx); + tx.commit(); + } + ItemStack fuelStack = fuelResource.toStack(itemsToConsume); + if (fuelStack.getCraftingRemainder() != null && this.itemHandler.getResource(0).isEmpty()) { + ItemStack remainderStack = fuelStack.getCraftingRemainder().create(); + this.itemHandler.set(0, + ItemResource.of(remainderStack.getItem(), remainderStack.getComponentsPatch()), + remainderStack.getCount() + ); + } + } + + if (remaining > 0) { + this.burnTime = Math.max(0, this.burnTime - remaining); + } + + setChanged(); + if (level != null && !level.isClientSide()) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + level.updateNeighbourForOutputSignal(worldPosition, getBlockState().getBlock()); + } + } + + private void updateBurningState(Level level, BlockPos pos, BlockState state) { + int targetLevel; + if (this.burnTime >= LIT_THRESHOLD) { + targetLevel = 2; + } else if (this.burnTime > 0) { + targetLevel = 1; + } else { + targetLevel = 0; + } + if (state.getValue(BurningHeaterBlock.LEVEL) != targetLevel) { + level.setBlock(pos, state.setValue(BurningHeaterBlock.LEVEL, targetLevel), 3); + } + } + + private void tryConsumeFuel() { + if (this.burnTime >= MAX_BURN_TIME) return; + + ItemResource fuelResource = this.itemHandler.getResource(0); + if (fuelResource.isEmpty()) return; + int fuelCount = this.itemHandler.getAmountAsInt(0); + int burnTimePerItem = getItemBurnTime(fuelResource.toStack()); + if (burnTimePerItem <= 0) return; + + int itemsToConsume = Math.min(fuelCount, (MAX_BURN_TIME - this.burnTime) / burnTimePerItem); + if (itemsToConsume <= 0) return; + + this.burnTime += itemsToConsume * burnTimePerItem; + try (Transaction tx = Transaction.openRoot()) { + this.itemHandler.extract(0, fuelResource, itemsToConsume, tx); + tx.commit(); + } + if (fuelResource.toStack().getCraftingRemainder() != null && this.itemHandler.getResource(0).isEmpty()) { + ItemStack remainderStack = fuelResource.toStack().getCraftingRemainder().create(); + this.itemHandler.set(0, + ItemResource.of(remainderStack.getItem(), remainderStack.getComponentsPatch()), + remainderStack.getCount() + ); + } + } + + public static int getItemBurnTime(ItemStack stack) { + if (stack.isEmpty()) return 0; + FurnaceFuel fuel = stack.getItem().builtInRegistryHolder() + .getData(NeoForgeDataMaps.FURNACE_FUELS); + return fuel != null ? fuel.burnTime() : 0; + } + + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("BurnTime", this.burnTime); + // 持久化燃料物品 + int count = this.itemHandler.getAmountAsInt(0); + ItemStack fuelStack = this.itemHandler.getResource(0).toStack(); + if (!fuelStack.isEmpty()) { + fuelStack = fuelStack.copyWithCount(count); + output.store("FuelItem", ItemStack.CODEC, fuelStack); + } + } +} + diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java index ca8b172604..29aa0409fe 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java @@ -1,18 +1,93 @@ package dev.dubhe.anvilcraft.block.entity; +import dev.dubhe.anvilcraft.api.item.IDiskCloneable; +import dev.dubhe.anvilcraft.api.power.IPowerConsumer; +import dev.dubhe.anvilcraft.api.power.IPowerProducer; +import dev.dubhe.anvilcraft.api.power.PowerComponentInfo; +import dev.dubhe.anvilcraft.api.power.PowerComponentType; +import dev.dubhe.anvilcraft.api.power.PowerGrid; +import dev.dubhe.anvilcraft.api.world.load.LoadChuckData; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialBodyClass; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialBodyData; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialBodyMatcher; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorRegistry; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetResourceGenerator; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetaryResourceSet; +import dev.dubhe.anvilcraft.block.entity.celestial.SpecialCelestialBodyData; +import dev.dubhe.anvilcraft.block.entity.celestial.SpecialCelestialBodyRecipe; +import dev.dubhe.anvilcraft.block.entity.celestial.StarData; +import dev.dubhe.anvilcraft.block.entity.megastructure.ExcavatorHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.PenroseSphereHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.WormholeStabilizerHandler; +import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; +import dev.dubhe.anvilcraft.init.ModMenuTypes; +import dev.dubhe.anvilcraft.inventory.CelestialForgingAnvilMenu; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.init.entity.ModDamageTypes; +import dev.dubhe.anvilcraft.init.item.ModComponents; +import dev.dubhe.anvilcraft.init.item.ModItems; +import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; +import dev.dubhe.anvilcraft.item.property.component.DiskData; +import dev.dubhe.anvilcraft.item.utility.DiskItem; +import dev.dubhe.anvilcraft.recipe.sync.RecipesRecord; +import dev.dubhe.anvilcraft.util.GravityManager; import lombok.Getter; import lombok.Setter; +import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.component.CustomData; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import org.jspecify.annotations.Nullable; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class CelestialForgingAnvilBlockEntity extends BlockEntity + implements MenuProvider, IPowerConsumer, IPowerProducer, IDiskCloneable { + + // === Megastructure delegation === + @Getter + private final CfaMegastructureManager megastructureManager = new CfaMegastructureManager(); -public class CelestialForgingAnvilBlockEntity extends BlockEntity { @Getter private int preRotation = 0; @Getter @@ -22,37 +97,1454 @@ public class CelestialForgingAnvilBlockEntity extends BlockEntity { @Setter private boolean isAmplify = false; + @Getter + @Setter + @Nullable + private CelestialBodyData celestialBodyData = null; + + @Getter + @Setter + private long bodySeed = 0; + + /** + * Mass anvil count at time of body matching, for gravity calculation. + */ + @Getter + @Setter + private int stellarMass = 0; + + /** + * Age anvil count (time slot) stored for resource generation. + */ + @Getter + @Setter + private int ageAnvilCount = 0; + + /** + * Resources generated for the matched celestial body. + */ + @Getter + @Setter + @Nullable + private PlanetaryResourceSet planetaryResourceSet = null; + + /** + * Index of the currently built megastructure (refactor option), or -1 if none. + * Delegates to CfaMegastructureManager. + */ + public int getActiveMegastructureIndex() { + return megastructureManager.getActiveIndex(); + } + + /** + * Whether the excavator has valid laser input (for model switching). + * Delegates to ExcavatorHandler. + */ + public boolean isExcavatorLaserActive() { + ExcavatorHandler h = megastructureManager.findHandler(ExcavatorHandler.class); + return h != null && h.isLaserActive(); + } + + /** + * Whether the Penrose Sphere has valid laser input/output pairs (for model switching). + * Delegates to PenroseSphereHandler. + */ + public boolean isPenroseSphereLaserActive() { + PenroseSphereHandler h = megastructureManager.findHandler(PenroseSphereHandler.class); + return h != null && h.isLaserActive(); + } + + // === Wormhole Stabilizer state === + /** + * Hash of the black hole parameters, computed when the stabilizer is built. + */ + @Nullable + public UUID getWormholeParamsHash() { + WormholeStabilizerHandler wh = megastructureManager.getWormholeHandler(); + return wh.getBodyUuid(); + } + + /** + * Tracked chunk-loaded connected CFAs, keyed by dimension + position. + */ + private final Map wormholeLoadedChunks = new HashMap<>(); + + private record WormholeChunkLoadKey(Identifier dimension, BlockPos pos) {} + + // === Temple state === + /** + * Current position in the 3-day cycle: 0=blessing, 1=blessing, 2=punishment. + */ + @Getter + private int templeCycleDay = 0; + /** + * Last MC day when the demand was refreshed. + */ + private long templeLastDay = -1; + /** + * The currently demanded item type (count=1, identity only; synced to client for tooltip). + */ + @Getter + private ItemStack templeDemandItem = ItemStack.EMPTY; + /** + * Total count required for the current demand. + */ + @Getter + private int templeDemandCount = 0; + /** + * Cumulative count of items already offered toward the current demand. + * Resets when a new demand is picked or the demand is satisfied. + */ + @Getter + private int templeDemandProgress = 0; + /** + * Whether the current day's demand has been satisfied. + */ + @Getter + private boolean templeDemandSatisfied = false; + + // === Stellar Evolution Accelerator delegation === + public int getAcceleratorStage() { + return megastructureManager.getAcceleratorHandler().getStage(); + } + + public int getAcceleratorTicksRemaining() { + return megastructureManager.getAcceleratorHandler().getTicksRemaining(); + } + + public int getAcceleratorTicksTotal() { + return megastructureManager.getAcceleratorHandler().getTicksTotal(); + } + + public int getSupernovaFlashTicks() { + return megastructureManager.getAcceleratorHandler().getSupernovaFlashTicks(); + } + + public int getCollapseAnimTicks() { + return megastructureManager.getAcceleratorHandler().getCollapseAnimTicks(); + } + + /** + * Whether the stellar evolution accelerator is active (any stage 1-4). + */ + public boolean isAcceleratorActive() { + return megastructureManager.getAcceleratorHandler().isActive(); + } + public CelestialForgingAnvilBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); } + // === IPowerConsumer === + + @Override + public int getInputPower() { + if (searching && searchTicksRemaining > 0) { + return isAmplify ? 4000 : 1000; + } + return megastructureManager.getInputPower(this); + } + + @Override + public int getOutputPower() { + return megastructureManager.getOutputPower(this); + } + + @Override + public @Nullable Level getCurrentLevel() { + return this.level; + } + + @Override + public BlockPos getPos() { + return this.getBlockPos(); + } + + @Override + public int getRange() { + return 1; + } + + @Override + public void setGrid(@Nullable PowerGrid grid) { + this.grid = grid; + } + + @Override + public @Nullable PowerGrid getGrid() { + return this.grid; + } + + @Override + public PowerComponentType getComponentType() { + return megastructureManager.getComponentType(this); + } + + @Override + public PowerComponentInfo toPowerComponentInfo() { + PowerComponentType type = getComponentType(); + return new PowerComponentInfo( + getPos(), + getInputPower(), + getOutputPower(), + 0, 0, + getRange(), + getShape(), + type + ); + } + + @Override + public void gridTick() { + megastructureManager.gridTick(this); + } + + private boolean hasEnoughPower() { + if (grid == null) return false; + int required = getInputPower(); + return required <= 0 || grid.isWorking(); + } + + @Getter + private int bodyRotation = 0; + + // === Celestial body animation (client-side only, not persisted) === + @Getter + private int animationTicks = 0; + @Getter + private boolean animationForward = true; + @Nullable + @Getter + private CelestialBodyData animationPreviousBodyData = null; + private static final int ANIMATION_DURATION_TICKS = 20; // 1 second at 20 TPS + + /** + * Get the effective celestial body data for rendering, accounting for reverse animation. + * During reverse animation, the actual celestialBodyData is already null (server cleared it), + * so we use the cached previous data to keep rendering the shrinking body. + */ + @Nullable + public CelestialBodyData getEffectiveBodyDataForRendering() { + if (celestialBodyData != null) return celestialBodyData; + if (animationTicks > 0 && !animationForward && animationPreviousBodyData != null) { + return animationPreviousBodyData; + } + return null; + } + + /** + * Get animation progress from 0 (hidden) to 1 (fully visible). + * Uses ease-in-out cubic interpolation. + */ + public float getAnimationProgress(float partialTick) { + if (animationTicks <= 0) return animationForward ? 1.0f : 0.0f; + float t = (ANIMATION_DURATION_TICKS - animationTicks + partialTick) / (float) ANIMATION_DURATION_TICKS; + float eased = easeInOutCubic(t); + return animationForward ? eased : (1.0f - eased); + } + + /** + * Get rotation speed multiplier during animation. + * Starts fast (5x) and decays to 1x as animation progresses. + */ + public float getAnimationRotationBoost(float partialTick) { + float progress = getAnimationProgress(partialTick); + return 1.0f + 4.0f * (1.0f - progress); + } + + private static float easeInOutCubic(float t) { + return t < 0.5f ? 4.0f * t * t * t : 1.0f - (float) Math.pow(-2.0f * t + 2.0f, 3) / 2.0f; + } + + @Getter + @Setter + private boolean locked = false; + + /** + * Whether the amplifier multiblock is physically formed. + */ + @Getter + @Setter + private boolean amplifierPresent = false; + + // Material slot filter (set when a refactor option is selected) + @Getter + @Setter + private ItemStack materialFilter = new ItemStack(Items.BARRIER); + @Getter + @Setter + private int materialLimit = 0; + + @Getter + private final SimpleContainer materialContainer = new SimpleContainer(1) { + @Override + public void setChanged() { + super.setChanged(); + CelestialForgingAnvilBlockEntity.this.setChanged(); + } + }; + + /** + * Configure the material slot for a given refactor option. + * Called on the server when the player selects a refactor option. + */ + public void configureMaterialSlot(int optionIndex) { + if (level == null || level.isClientSide()) return; + if (celestialBodyData == null) return; + List options = getClientVisibleOptions(); + if (optionIndex < 0 || optionIndex >= options.size()) { + setMaterialFilter(new ItemStack(Items.BARRIER)); + setMaterialLimit(0); + } else { + CelestialRefactorOption opt = options.get(optionIndex); + if (opt.needsMaterial()) { + setMaterialFilter(opt.material().copy()); + setMaterialLimit(opt.materialCount()); + } else { + setMaterialFilter(new ItemStack(Items.BARRIER)); + setMaterialLimit(0); + } + } + this.setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + + // Search timer + @Getter + private int searchTicksRemaining = 0; + @Getter + private boolean searching = false; + @Getter + @Setter + private boolean searchFailed = false; + @Getter + private boolean powerInsufficient = false; + private static final int SEARCH_TICKS = 200; // 10 second + + // Track the seed item consumed when the search started (for special body matching) + @Nullable + private Item lastConsumedSeedItem = null; + @Nullable + private CompoundTag lastConsumedSeedNbt = null; + + // Power grid + @Setter + @Nullable + private PowerGrid grid; + + // Gravity source state + private boolean gravitySourceActive = false; + private double currentGravityStrength = 0; + private int currentGravitySize = 0; + /** + * Y-offset from controller block to the rendered star center. + */ + private static final int GRAVITY_CENTER_Y_OFFSET = 6; + /** + * Gravity influence radius (blocks), covers the Ring6 7×7×7 area. + * Represents ~2× the largest stellar radius (red supergiant ~2580 R☉). + */ + private static final int GRAVITY_RADIUS = 4; + /** + * Unified reference physical radius for all bodies' gravity calculation. + * 5000 × R☉, and R☉/R⊕ = 109, so R_ref/R⊕ = 545,000. + */ + private static final double GRAVITY_REFERENCE_RADIUS_RATIO = 5000.0 * 109.0; + /** + * Gameplay multiplier to make gravity perceptible at the block scale. + */ + private static final double GRAVITY_STRENGTH_MULTIPLIER = 10000000.0; + + public void startSearch() { + this.searchFailed = false; + this.powerInsufficient = false; + + // Check if seed item is present (for pre-check skip and consumption) + ItemStack seedStack = this.anvilInventory.getItem(4); + boolean hasSeedItem = !seedStack.isEmpty(); + + // Server-side parameter pre-check (skip when seed item is present) + if (level != null && !level.isClientSide()) { + if (!hasSeedItem) { + var preCheck = CelestialBodyMatcher.match( + getAnvilCount(0), + getAnvilCount(1), + getAnvilCount(2), + getAnvilCount(3), + this.isAmplify, + level.getRandom() + ); + if (preCheck == null) { + this.searchFailed = true; + this.searching = false; + this.searchTicksRemaining = 0; + setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + return; + } + } + } + + // Check power availability + if (!hasEnoughPower()) { + this.powerInsufficient = true; + this.searching = false; + this.searchTicksRemaining = 0; + setChanged(); + if (level != null && !level.isClientSide()) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + return; + } + + // Capture seed item data but don't consume yet (consumed on successful match) + if (hasSeedItem) { + this.lastConsumedSeedItem = seedStack.getItem(); + this.lastConsumedSeedNbt = extractSnapshot(seedStack); + } else { + this.lastConsumedSeedItem = null; + this.lastConsumedSeedNbt = null; + } + + // Only clear the old body once we know the search will actually start + this.setCelestialBodyData(null); + // Start search + this.searchTicksRemaining = SEARCH_TICKS; + this.searching = true; + setChanged(); + if (level != null && !level.isClientSide()) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + } + + public void serverTick() { + // Continuous power state refresh — clears stale powerInsufficient when grid recovers + boolean hasEnoughPower = hasEnoughPower(); + if (!hasEnoughPower && !this.powerInsufficient) { + this.powerInsufficient = true; + setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } else if (hasEnoughPower && this.powerInsufficient) { + this.powerInsufficient = false; + setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + if (searchTicksRemaining > 0) { + // Check if power is still sufficient during search + if (!hasEnoughPower) { + this.searching = false; + this.searchTicksRemaining = 0; + this.powerInsufficient = true; + setChanged(); + if (level != null) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + } else { + searchTicksRemaining--; + if (searchTicksRemaining == 0) { + this.searching = false; + tryMatchCelestialBody(); + if (celestialBodyData == null) { + this.searchFailed = true; + } + setChanged(); + if (level != null) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + } + } + } + + // Manage stellar gravity source + updateGravitySource(); + + // Destroy entities at the gravity center + if (gravitySourceActive && level != null) { + destroyEntitiesAtCenter(); + } + + // Megastructure logic (delegated to handler classes) + megastructureManager.serverTick(this); + + // Supernova flash timer + var accel = megastructureManager.getAcceleratorHandler(); + if (accel.getSupernovaFlashTicks() > 0) { + accel.setSupernovaFlashTicks(accel.getSupernovaFlashTicks() - 1); + } + } + + /** + * Update the gravity source for the current celestial body. + * + *

All bodies share a unified reference radius (5000 R☉ ≈ 2 × red supergiant radius) + * that corresponds to the {@link #GRAVITY_RADIUS} boundary in blocks. + * Gravity falls off as 1/r² from the source center. + * + *

Strength = gravity at the unified reference radius, in multiples of g⊕: + *

    + *
  • Mass: M/M⊕ = 2^((massAnvilCount - 12) / 2)
  • + *
  • Reference radius: R_ref/R⊕ = 5000 × 109 = 545,000
  • + *
  • Strength = (M/M⊕) / (R_ref/R⊕)²
  • + *
+ */ + private void updateGravitySource() { + if (level == null || level.isClientSide()) return; + + boolean shouldHaveGravity = amplifierPresent + && celestialBodyData instanceof StarData + && stellarMass > 0 + && celestialBodyData.size() > 0; + + double newStrength = 0; + if (shouldHaveGravity) { + double massRatio = Math.pow(2, (stellarMass - 12) / 2.0); + newStrength = massRatio * GRAVITY_STRENGTH_MULTIPLIER + / (GRAVITY_REFERENCE_RADIUS_RATIO * GRAVITY_REFERENCE_RADIUS_RATIO); + } + int newSize = shouldHaveGravity ? celestialBodyData.size() : 0; + + BlockPos centerPos = worldPosition.offset(0, GRAVITY_CENTER_Y_OFFSET, 0); + + if (shouldHaveGravity) { + if (!gravitySourceActive || newStrength != currentGravityStrength || newSize != currentGravitySize) { + // Remove old source if strength/size changed + if (gravitySourceActive) { + GravityManager.GravitySourceManager.removeSource(level, centerPos); + } + // Add new/updated source + GravityManager.GravitySourceType type = new GravityManager.GravitySourceType(newStrength, GRAVITY_RADIUS); + GravityManager.GravitySourceManager.addSource(level, centerPos, type); + gravitySourceActive = true; + currentGravityStrength = newStrength; + currentGravitySize = newSize; + } + } else if (gravitySourceActive) { + GravityManager.GravitySourceManager.removeSource(level, centerPos); + gravitySourceActive = false; + currentGravityStrength = 0; + currentGravitySize = 0; + } + } + + /** + * Force remove the gravity source. Called when the amplifier is dismantled + * to ensure gravity disappears immediately rather than waiting for next tick. + */ + public void removeGravitySource() { + if (level == null || level.isClientSide()) return; + BlockPos centerPos = worldPosition.offset(0, GRAVITY_CENTER_Y_OFFSET, 0); + GravityManager.GravitySourceManager.removeSource(level, centerPos); + gravitySourceActive = false; + currentGravityStrength = 0; + currentGravitySize = 0; + } + + private void destroyEntitiesAtCenter() { + BlockPos centerPos = worldPosition.offset(0, GRAVITY_CENTER_Y_OFFSET, 0); + AABB centerBox = new AABB(centerPos); + List entities = level.getEntitiesOfClass(Entity.class, centerBox); + for (Entity entity : entities) { + if (entity instanceof LivingEntity living) { + if (celestialBodyData instanceof StarData star + && star.bodyClass() == CelestialBodyClass.BLACK_HOLE) { + living.hurt(ModDamageTypes.lostInTime(level), Float.MAX_VALUE); + } else { + living.hurt(level.damageSources().inFire(), 1.0E12f); + } + } else { + entity.discard(); + } + } + } + + /** + * Search history, max 10 entries. Index 0 = newest. + */ + @Getter + private final List searchHistory = new ArrayList<>(); + private static final int MAX_HISTORY = 10; + + /** + * A search history entry bundling a celestial body with its generated resources. + */ + public record SearchHistoryEntry(CelestialBodyData body, @Nullable PlanetaryResourceSet resources) { + public CompoundTag toTag() { + CompoundTag tag = new CompoundTag(); + tag.put("body", body.toTag()); + if (resources != null) { + tag.put("resources", resources.toTag()); + } + return tag; + } + + public static SearchHistoryEntry fromTag(CompoundTag tag) { + CelestialBodyData body = CelestialBodyData.fromTag(tag.getCompoundOrEmpty("body")); + PlanetaryResourceSet resources = null; + if (tag.contains("resources")) { + resources = PlanetaryResourceSet.fromTag(tag.getCompoundOrEmpty("resources")); + } + return new SearchHistoryEntry(body, resources); + } + } + + /** + * Browsing index into searchHistory: 0 = showing locked body, 1+ = browsing. + */ + @Getter + private int historyBrowseIndex = 0; + @Nullable + private SearchHistoryEntry historyOriginalEntry; + + @Getter + private final SimpleContainer anvilInventory = new SimpleContainer(5) { + @Override + public void setChanged() { + super.setChanged(); + CelestialForgingAnvilBlockEntity.this.setChanged(); + } + }; + public void tick() { if (this.rotation == 360) this.rotation = 0; this.preRotation = this.rotation; this.rotation += 3; + this.bodyRotation += 1; + + // Animation tick (client-side only) + if (animationTicks > 0) { + animationTicks--; + if (animationTicks == 0 && !animationForward) { + animationPreviousBodyData = null; + } + } + // Supernova flash countdown (client-side, for rendering) + var accel = megastructureManager.getAcceleratorHandler(); + if (accel.getSupernovaFlashTicks() > 0) { + accel.setSupernovaFlashTicks(accel.getSupernovaFlashTicks() - 1); + } + // Collapse animation — during accelerator stage 3, the server syncs every tick + // so the client should NOT independently decrement to avoid desync. + // Outside stage 3, the client decrements independently as a fallback. + if (accel.getCollapseAnimTicks() > 0 && accel.getStage() != 3) { + accel.setCollapseAnimTicks(accel.getCollapseAnimTicks() - 1); + } + } + + public void setAmplify(boolean amplify) { + if (this.isAmplify != amplify) { + this.isAmplify = amplify; + if (level != null && !level.isClientSide()) { + if (celestialBodyData instanceof StarData) { + if (!amplify) { + this.locked = true; // Lock when amplifier removed with stellar body + } + } + } + this.setChanged(); + if (level != null) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + } } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putBoolean("amplified", this.isAmplify); + public void setRemoved() { + super.setRemoved(); + if (level != null && !level.isClientSide() && !PowerGrid.isServerClosing) { + if (gravitySourceActive) { + BlockPos centerPos = worldPosition.offset(0, GRAVITY_CENTER_Y_OFFSET, 0); + GravityManager.GravitySourceManager.removeSource(level, centerPos); + gravitySourceActive = false; + } + // Unregister wormhole and clear megastructures so connected portals close. + // Skip during server shutdown to avoid accessing saved data during save. + megastructureManager.clearAllMegastructures(this); + } + } + + /** + * Get a reproducible ±5% random offset percentage derived from bodySeed. + * Used only for UI display of age/radius/mass values. + * + * @param index 0=age(time), 1=radius(space), 2=mass + * @return offset in [-0.05, +0.05] + */ + public float getDisplayOffset(int index) { + if (bodySeed == 0) return 0f; + net.minecraft.util.RandomSource rand = net.minecraft.util.RandomSource.create(bodySeed + index * 7919L); + return (rand.nextFloat() - 0.5f) * 0.1f; + } + + @SuppressWarnings("checkstyle:VariableDeclarationUsageDistance") + public void tryMatchCelestialBody() { + if (level == null) return; + int time = getAnvilCount(0); + int space = getAnvilCount(1); + int mass = getAnvilCount(2); + int energy = getAnvilCount(3); + this.ageAnvilCount = time; + this.bodySeed = level.getRandom().nextLong(); + this.stellarMass = mass; + + // Verify seed item is still present — if player removed it during the search, + // clear captured data so we fall through to normal matching instead of granting + // a special planet without deducting the seed item. + if (lastConsumedSeedItem != null || lastConsumedSeedNbt != null) { + ItemStack seedStack = this.anvilInventory.getItem(4); + if (seedStack.isEmpty()) { + this.lastConsumedSeedItem = null; + this.lastConsumedSeedNbt = null; + } + } + + // First: check for seed item snapshot (disk / singularity crystal) + if (lastConsumedSeedNbt != null && lastConsumedSeedNbt.contains("celestialBody")) { + applySnapshot(lastConsumedSeedNbt); + consumeSeedItem(); + return; + } + + // Second: check for special celestial body discovery via seed item + if (lastConsumedSeedItem != null) { + SpecialCelestialBodyData specialBody = tryMatchSpecialCelestialBody( + time, + space, + mass, + energy, + lastConsumedSeedItem, + ((ServerLevel) level).getSeed() + ); + if (specialBody != null) { + this.celestialBodyData = specialBody; + if (!level.isClientSide()) { + Identifier recipeId = Identifier.parse(specialBody.recipeId()); + ResourceKey> key = + ResourceKey.create(Registries.RECIPE, recipeId); + net.minecraft.world.item.crafting.RecipeHolder holder = + RecipesRecord.getRecipes((ServerLevel) level).byKey(key); + if (holder != null && holder.value() instanceof SpecialCelestialBodyRecipe recipe) { + this.planetaryResourceSet = recipe.generateResources(); + } + } + addToSearchHistory(this.celestialBodyData, this.planetaryResourceSet); + consumeSeedItem(); + if (!level.isClientSide()) { + this.setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + return; + } + } + + // Fall back to normal three-step matching + this.celestialBodyData = CelestialBodyMatcher.match(time, space, mass, energy, this.isAmplify, level.getRandom()); + if (this.celestialBodyData != null) { + // Assign a UUID derived from bodySeed for wormhole identity + if (this.celestialBodyData instanceof StarData star && star.bodyUuid() == null) { + this.celestialBodyData = star.withBodyUuid(StarData.uuidFromBodySeed(this.bodySeed)); + } + // Generate planetary resources + if (!level.isClientSide()) { + this.planetaryResourceSet = PlanetResourceGenerator.generate( + this.celestialBodyData, + this.ageAnvilCount, + level, + this.bodySeed + ); + } + addToSearchHistory(this.celestialBodyData, this.planetaryResourceSet); + } else { + this.planetaryResourceSet = null; + this.searchTicksRemaining = 0; // Stop timer on failure + } + consumeSeedItem(); + + if (!level.isClientSide()) { + this.setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + } + + /** + * Try to match a special (hidden) celestial body based on anvil parameters + * and the consumed seed item. The seed item must be THE effective item for + * this world seed (using the same pattern as RoyalPreference). + */ + private void consumeSeedItem() { + if (level == null || level.isClientSide()) return; + ItemStack seed = this.anvilInventory.getItem(4); + if (!seed.isEmpty()) { + this.anvilInventory.setItem(4, ItemStack.EMPTY); + } + } + + @Nullable + private SpecialCelestialBodyData tryMatchSpecialCelestialBody( + int time, + int space, + int mass, + int energy, + Item consumedSeedItem, + long worldSeed + ) { + if (!(level instanceof ServerLevel serverLevel)) return null; + List recipes = RecipesRecord.getRecipes(serverLevel) + .byType(ModRecipeTypes.SPECIAL_CELESTIAL_BODY.get()) + .stream().map(RecipeHolder::value).toList(); + for (SpecialCelestialBodyRecipe recipe : recipes) { + if (recipe.time() == time && recipe.space() == space + && recipe.mass() == mass && recipe.energy() == energy + && recipe.isEffectiveSeedItem(consumedSeedItem, worldSeed) + ) { + // Find the recipe holder to get the full ID + return RecipesRecord.getRecipes(serverLevel) + .byType(ModRecipeTypes.SPECIAL_CELESTIAL_BODY.get()) + .stream() + .filter(h -> h.value() == recipe) + .findFirst() + .map(h -> SpecialCelestialBodyData.fromRecipe(recipe, h.id().identifier().toString())) + .orElse(null); + } + } + return null; + } + + /** + * Load a celestial body from a snapshot (disk / singularity crystal seed item). + * The snapshot contains all parameters — anvil counts are ignored for matching. + */ + private void applySnapshot(CompoundTag tag) { + if (level == null) return; + if (tag.contains("celestialBody")) { + this.celestialBodyData = CelestialBodyData.fromTag(tag.getCompoundOrEmpty("celestialBody")); + } + this.bodySeed = tag.getLongOr("bodySeed", 0); + this.ageAnvilCount = tag.getIntOr("ageAnvilCount", 0); + this.stellarMass = tag.getIntOr("stellarMass", 0); + if (tag.contains("planetaryResources")) { + this.planetaryResourceSet = PlanetaryResourceSet.fromTag(tag.getCompoundOrEmpty("planetaryResources")); + } + addToSearchHistory(this.celestialBodyData, this.planetaryResourceSet); + if (!level.isClientSide()) { + this.setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + } + + // === IDiskCloneable === + + @Override + public void storeDiskData(ValueOutput output) { + if (celestialBodyData != null) { + output.store("celestialBody", CompoundTag.CODEC, celestialBodyData.toTag()); + output.putLong("bodySeed", this.bodySeed); + output.putInt("ageAnvilCount", this.ageAnvilCount); + output.putInt("stellarMass", this.stellarMass); + output.putIntArray( + "anvilCounts", new int[]{ + getAnvilCount(0), + getAnvilCount(1), + getAnvilCount(2), + getAnvilCount(3) + } + ); + output.putBoolean("isAmplify", this.isAmplify); + if (planetaryResourceSet != null) { + output.store("planetaryResources", CompoundTag.CODEC, planetaryResourceSet.toTag()); + } + } + } + + @Override + public void applyDiskData(ValueInput input) { + // Disk data is only applied via the seed slot, not via right-click. + } + + @Override + public InteractionResult useDisk(Level level, Player player, InteractionHand hand, ItemStack itemStack, BlockHitResult hitResult) { + if (!player.getAbilities().mayBuild) return InteractionResult.PASS; + if (itemStack.is(ModItems.DISK.get())) { + // Only allow storing, not applying + if (!DiskItem.hasDataStored(itemStack)) { + // Extreme bodies (black hole / neutron star) require a singularity crystal + if (celestialBodyData instanceof StarData star && star.bodyClass().isExtreme()) { + player.sendSystemMessage( + Component.translatable("message.anvilcraft.disk.extreme_body_requires_crystal") + .withStyle(ChatFormatting.RED) + ); + return InteractionResult.FAIL; + } + // Redirect hit to main block position so DiskItem.useOn finds the BlockEntity + BlockHitResult mainHit = new BlockHitResult( + hitResult.getLocation(), + hitResult.getDirection(), + this.getBlockPos(), + hitResult.isInside() + ); + return itemStack.useOn(new UseOnContext(level, player, hand, itemStack, mainHit)); + } + } + return InteractionResult.PASS; + } + + /** + * Extract a celestial snapshot from a seed item stack. + */ + @Nullable + public static CompoundTag extractSnapshot(ItemStack stack) { + if (stack.getItem() instanceof DiskItem && DiskItem.hasDataStored(stack)) { + return DiskItem.getData(stack).copy(); + } + return loadSnapshotFromStack(stack); + } + + /** + * Load a celestial snapshot from a disk or singularity crystal. + */ + @Nullable + public static CompoundTag loadSnapshotFromStack(ItemStack stack) { + // Disk + if (stack.getItem() instanceof DiskItem && DiskItem.hasDataStored(stack)) { + CompoundTag data = DiskItem.getData(stack); + if (data.contains("celestialBody")) return data.copy(); + } + // Singularity crystal + if (stack.is(ModBlocks.SINGULARITY_CRYSTAL.asItem())) { + CustomData customData = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY); + CompoundTag tag = customData.copyTag(); + if (!tag.isEmpty() && tag.contains("celestialSnapshot")) { + CompoundTag snapshot = tag.getCompoundOrEmpty("celestialSnapshot"); + if (!snapshot.isEmpty() && snapshot.contains("celestialBody")) return snapshot.copy(); + } + } + return null; + } + + /** + * Save a snapshot into a disk or singularity crystal. + */ + public static void saveSnapshotToStack(ItemStack stack, CompoundTag snapshot) { + if (stack.getItem() instanceof DiskItem) { + // Extreme bodies (black hole / neutron star) cannot be stored on disks + if (snapshot.contains("celestialBody")) { + CompoundTag bodyTag = snapshot.getCompoundOrEmpty("celestialBody"); + String bodyClass = bodyTag.getStringOr("bodyClass", ""); + if ("BLACK_HOLE".equals(bodyClass) || "NEUTRON_STAR".equals(bodyClass)) { + return; // silently reject — extreme bodies require singularity crystal + } + } + CompoundTag diskTag = DiskItem.hasDataStored(stack) + ? DiskItem.getData(stack).copy() + : new CompoundTag(); + diskTag.merge(snapshot); + stack.set(ModComponents.DISK_DATA, new DiskData(diskTag)); + } else if (stack.is(ModBlocks.SINGULARITY_CRYSTAL.asItem())) { + CustomData oldCustom = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY); + CompoundTag updated = oldCustom.copyTag(); + updated.put("celestialSnapshot", snapshot.copy()); + stack.set(DataComponents.CUSTOM_DATA, CustomData.of(updated)); + } + } + + // === CFA block interaction === + + @Override + public void onLoad() { + super.onLoad(); + if (level != null && !level.isClientSide()) { + // Re-register with power grid to ensure CFA is in both producer and consumer sets + PowerGrid.addComponent(this); + // Re-register with wormhole network if wormhole stabilizer is active + // Delegated to handler's onBuild which handles re-registration + WormholeStabilizerHandler wh = megastructureManager.getWormholeHandler(); + if (megastructureManager.getActiveIndex() >= 0 && getActiveMegastructureOption() != null + && "wormhole_stabilizer".equals(getActiveMegastructureOption().megastructure())) { + wh.onBuild(this); + } + this.setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + } + + // === NBT persistence (26.1: ValueOutput/ValueInput for disk) === + + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putBoolean("amplified", this.isAmplify); + output.putLong("bodySeed", this.bodySeed); + output.putInt("stellarMass", this.stellarMass); + + output.putBoolean("locked", this.locked); + output.putBoolean("amplifierPresent", this.amplifierPresent); + output.putBoolean("searching", this.searching); + output.putInt("searchTicks", this.searchTicksRemaining); + output.putBoolean("searchFailed", this.searchFailed); + output.putBoolean("powerInsufficient", this.powerInsufficient); + if (celestialBodyData != null) { + output.store("celestialBody", CompoundTag.CODEC, celestialBodyData.toTag()); + } + // Search history + CompoundTag histTag = new CompoundTag(); + histTag.putInt("size", Math.min(searchHistory.size(), MAX_HISTORY)); + for (int i = 0; i < Math.min(searchHistory.size(), MAX_HISTORY); i++) { + histTag.put("h" + i, searchHistory.get(i).toTag()); + } + output.store("searchHistory", CompoundTag.CODEC, histTag); + // Anvil inventory + CompoundTag invTag = new CompoundTag(); + for (int i = 0; i < 5; i++) { + ItemStack stack = this.anvilInventory.getItem(i); + if (!stack.isEmpty()) { + invTag.put("s" + i, ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, stack).getOrThrow()); + } + } + output.store("anvils", CompoundTag.CODEC, invTag); + // Material slot + if (!materialFilter.isEmpty()) { + output.store("materialFilter", ItemStack.OPTIONAL_CODEC, materialFilter); + } + output.putInt("materialLimit", materialLimit); + output.putInt("ageAnvilCount", this.ageAnvilCount); + if (planetaryResourceSet != null) { + output.store("planetaryResources", CompoundTag.CODEC, planetaryResourceSet.toTag()); + } + // Portals are persisted by WormholeStabilizerHandler via megastructureManager + // Temple state + output.putInt("templeCycleDay", templeCycleDay); + output.putLong("templeLastDay", templeLastDay); + if (!templeDemandItem.isEmpty()) { + output.store("templeDemand", ItemStack.OPTIONAL_CODEC, templeDemandItem); + } + output.putInt("templeDemandCount", templeDemandCount); + output.putInt("templeDemandProgress", templeDemandProgress); + output.putBoolean("templeDemandSatisfied", templeDemandSatisfied); + output.putInt("historyBrowseIndex", historyBrowseIndex); + // Delegate megastructure NBT to manager + megastructureManager.saveAdditional(output); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.isAmplify = tag.getBoolean("amplified"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.isAmplify = input.getBooleanOr("amplified", false); + this.stellarMass = input.getIntOr("stellarMass", 0); + this.locked = input.getBooleanOr("locked", false); + this.amplifierPresent = input.getBooleanOr("amplifierPresent", false); + this.searching = input.getBooleanOr("searching", false); + this.searchTicksRemaining = input.getIntOr("searchTicks", 0); + this.searchFailed = input.getBooleanOr("searchFailed", false); + this.powerInsufficient = input.getBooleanOr("powerInsufficient", false); + // If searching was true but no timer was saved (old data or newly placed), + // reset the flag to prevent stuck searching state + if (this.searching && this.searchTicksRemaining <= 0) { + this.searching = false; + } + this.bodySeed = input.getLongOr("bodySeed", 0); + // Capture old body data for animation transition detection + CelestialBodyData oldBodyData = this.celestialBodyData; + this.celestialBodyData = input.read("celestialBody", CompoundTag.CODEC) + .map(CelestialBodyData::fromTag).orElse(null); + // Detect transitions for animation (client-side only, e.g. singleplayer chunk load) + // Skip animation during accelerator evolution or supernova flash + boolean skipAnimLoad = getAcceleratorStage() >= 1 || getSupernovaFlashTicks() > 0; + if (level != null && level.isClientSide() && !skipAnimLoad) { + detectAnimationTransition(oldBodyData, this.celestialBodyData); + } + // Search history + input.read("searchHistory", CompoundTag.CODEC).ifPresent(this::loadSearchHistory); + // Inventory + input.read("anvils", CompoundTag.CODEC).ifPresent(invTag -> loadInventoryFromTag(invTag)); + // Material filter + this.materialFilter = input.read("materialFilter", ItemStack.OPTIONAL_CODEC) + .orElse(new ItemStack(Items.BARRIER)); + this.materialLimit = input.getIntOr("materialLimit", 0); + this.ageAnvilCount = input.getIntOr("ageAnvilCount", 0); + // Planetary resources + this.planetaryResourceSet = input.read("planetaryResources", CompoundTag.CODEC) + .map(PlanetaryResourceSet::fromTag).orElse(null); + // Portals are loaded by WormholeStabilizerHandler via megastructureManager + // Temple state + this.templeCycleDay = input.getIntOr("templeCycleDay", 0); + this.templeLastDay = input.getLongOr("templeLastDay", -1); + this.templeDemandItem = input.read("templeDemand", ItemStack.OPTIONAL_CODEC).orElse(ItemStack.EMPTY); + this.templeDemandCount = input.getIntOr("templeDemandCount", 0); + this.templeDemandProgress = input.getIntOr("templeDemandProgress", 0); + this.templeDemandSatisfied = input.getBooleanOr("templeDemandSatisfied", false); + // Collider runtime state is not persisted — always start clean on load + this.historyBrowseIndex = input.getIntOr("historyBrowseIndex", 0); + // Delegate megastructure NBT to manager (must be last so managers overwrite BE fields) + megastructureManager.loadAdditional(input); + if (level != null && !level.isClientSide()) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } } + /** + * Detect body transition and trigger animation on the client side. + */ + private void detectAnimationTransition(@Nullable CelestialBodyData oldBody, @Nullable CelestialBodyData newBody) { + if (level == null || !level.isClientSide()) return; + boolean hadBody = oldBody != null; + boolean hasBody = newBody != null; + if (!hadBody && hasBody) { + // Body appeared — start forward (grow-in) animation + this.animationTicks = ANIMATION_DURATION_TICKS; + this.animationForward = true; + this.animationPreviousBodyData = null; + } else if (hadBody && !hasBody) { + // Body disappeared — start reverse (shrink-out) animation + this.animationTicks = ANIMATION_DURATION_TICKS; + this.animationForward = false; + this.animationPreviousBodyData = oldBody; + } else if (hadBody && !oldBody.toTag().equals(newBody.toTag())) { + // Body changed to a different type — animate transition + this.animationTicks = ANIMATION_DURATION_TICKS; + this.animationForward = true; + this.animationPreviousBodyData = oldBody; + } + } + + private void loadInventoryFromTag(CompoundTag invTag) { + for (int i = 0; i < 5; i++) { + String key = "s" + i; + if (invTag.contains(key)) { + ItemStack stack = ItemStack.CODEC.parse(NbtOps.INSTANCE, invTag.get(key)) + .result().orElse(ItemStack.EMPTY); + this.anvilInventory.setItem(i, stack); + } else { + this.anvilInventory.setItem(i, ItemStack.EMPTY); + } + } + } + + // === Network sync (26.1: getUpdateTag returns CompoundTag, client receives via loadAdditional) === + @Override public CompoundTag getUpdateTag(HolderLookup.Provider registries) { CompoundTag tag = super.getUpdateTag(registries); tag.putBoolean("amplified", this.isAmplify); + tag.putLong("bodySeed", this.bodySeed); + tag.putInt("stellarMass", this.stellarMass); + + tag.putBoolean("locked", this.locked); + tag.putBoolean("amplifierPresent", this.amplifierPresent); + tag.putBoolean("searching", this.searching); + tag.putInt("searchTicks", this.searchTicksRemaining); + tag.putBoolean("searchFailed", this.searchFailed); + tag.putBoolean("powerInsufficient", this.powerInsufficient); + if (celestialBodyData != null) { + tag.put("celestialBody", celestialBodyData.toTag()); + } + // Search history + CompoundTag histTag = new CompoundTag(); + histTag.putInt("size", Math.min(searchHistory.size(), MAX_HISTORY)); + for (int i = 0; i < Math.min(searchHistory.size(), MAX_HISTORY); i++) { + histTag.put("h" + i, searchHistory.get(i).toTag()); + } + tag.put("searchHistory", histTag); + // Anvil inventory (sync all 5 slots for client display) + CompoundTag invTag = new CompoundTag(); + for (int i = 0; i < 5; i++) { + ItemStack stack = this.anvilInventory.getItem(i); + if (!stack.isEmpty()) { + invTag.put("s" + i, ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, stack).getOrThrow()); + } + } + tag.put("anvils", invTag); + // Material filter sync + if (!materialFilter.isEmpty()) { + tag.put("materialFilter", ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, materialFilter).getOrThrow()); + } + tag.putInt("materialLimit", materialLimit); + tag.putInt("ageAnvilCount", this.ageAnvilCount); + if (planetaryResourceSet != null) { + tag.put("planetaryResources", planetaryResourceSet.toTag()); + } + // Portals are synced by WormholeStabilizerHandler via megastructureManager + // Temple state (client sync) + tag.putInt("templeCycleDay", templeCycleDay); + tag.putLong("templeLastDay", templeLastDay); + if (!templeDemandItem.isEmpty()) { + tag.put("templeDemand", ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, templeDemandItem).getOrThrow()); + } + tag.putInt("templeDemandCount", templeDemandCount); + tag.putInt("templeDemandProgress", templeDemandProgress); + tag.putBoolean("templeDemandSatisfied", templeDemandSatisfied); + // Collider runtime state not synced to client + tag.putInt("historyBrowseIndex", historyBrowseIndex); + // Delegate megastructure NBT to manager + megastructureManager.writeUpdateTag(tag, registries); return tag; } + public int getAnvilCount(int slot) { + return this.anvilInventory.getItem(slot).getCount(); + } + + public void addToSearchHistory(CelestialBodyData data, @Nullable PlanetaryResourceSet resources) { + // Dedup: don't add if it's already the most recent entry + if (!searchHistory.isEmpty()) { + SearchHistoryEntry latest = searchHistory.getFirst(); + if (latest.body().toTag().toString().equals(data.toTag().toString())) return; + } + searchHistory.addFirst(new SearchHistoryEntry(data, resources)); + while (searchHistory.size() > MAX_HISTORY) { + searchHistory.removeLast(); + } + } + + private void loadSearchHistory(CompoundTag tag) { + searchHistory.clear(); + int size = Math.min(tag.getIntOr("size", 0), MAX_HISTORY); + for (int i = 0; i < size; i++) { + if (tag.contains("h" + i)) { + CompoundTag entryTag = tag.getCompoundOrEmpty("h" + i); + if (entryTag.contains("body")) { + // New format: SearchHistoryEntry + searchHistory.add(SearchHistoryEntry.fromTag(entryTag)); + } else { + // Old format: bare CelestialBodyData (no resources saved) + CelestialBodyData body = CelestialBodyData.fromTag(entryTag); + searchHistory.add(new SearchHistoryEntry(body, null)); + } + } + } + } + + // === History browsing (server-side) === + + public boolean hasPreviousHistory() { + int sz = searchHistory.size(); + return sz > 1 && historyBrowseIndex < sz; + } + + public boolean hasNextHistory() { + return historyBrowseIndex > 0; + } + + public void browseHistoryPrev() { + if (level == null || level.isClientSide()) return; + int sz = searchHistory.size(); + // Need at least 2 entries: index 0 is the current locked body + if (sz <= 1 || historyBrowseIndex >= sz) return; + if (historyBrowseIndex == 0) { + historyOriginalEntry = new SearchHistoryEntry(celestialBodyData, planetaryResourceSet); + historyBrowseIndex = 1; // skip the current-body entry + } + historyBrowseIndex++; + if (historyBrowseIndex > sz) return; + applyHistoryEntry(); + } + + public void browseHistoryNext() { + if (level == null || level.isClientSide()) return; + if (historyBrowseIndex <= 0) return; + historyBrowseIndex--; + if (historyBrowseIndex == 0) { + if (historyOriginalEntry != null) { + celestialBodyData = historyOriginalEntry.body(); + planetaryResourceSet = historyOriginalEntry.resources(); + historyOriginalEntry = null; + } + setChanged(); + syncToClient(); + } else { + applyHistoryEntry(); + } + } + + private void applyHistoryEntry() { + if (historyBrowseIndex > 0 && historyBrowseIndex <= searchHistory.size()) { + SearchHistoryEntry entry = searchHistory.get(historyBrowseIndex - 1); + celestialBodyData = entry.body(); + planetaryResourceSet = entry.resources(); + } + setChanged(); + syncToClient(); + } + + private void syncToClient() { + if (level instanceof ServerLevel serverLevel) { + Packet packet = getUpdatePacket(); + for (ServerPlayer serverPlayer : serverLevel.getChunkSource().chunkMap.getPlayers( + serverLevel.getChunkAt(worldPosition) + .getPos(), false + )) { + serverPlayer.connection.send(packet); + } + } + } + + @Override + public Component getDisplayName() { + return Component.translatable("screen.anvilcraft.celestial_forging_anvil"); + } + + @Override + public @Nullable AbstractContainerMenu createMenu(int containerId, Inventory inventory, Player player) { + if (this.level == null || player.isSpectator()) return null; + return new CelestialForgingAnvilMenu(ModMenuTypes.CELESTIAL_FORGING_ANVIL.get(), containerId, inventory, this); + } + @Override public Packet getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); } + + // === Megastructure === + + /** + * Toggle the lock state. Called from the server when the player clicks the lock button. + */ + public void toggleLocked() { + if (level == null || level.isClientSide()) return; + if (isAcceleratorActive()) { + // Cannot unlock during stellar evolution + return; + } + this.locked = !this.locked; + if (!this.locked) { + // Unlocking: clear megastructure and accelerator to revert to restriction ring + clearMegastructure(); + clearAcceleratorState(); + } + this.setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + + private void clearAcceleratorState() { + megastructureManager.getAcceleratorHandler().onClear(this); + } + + /** + * Clear the active megastructure and all related state, reverting to the restriction ring. + */ + private void clearMegastructure() { + megastructureManager.clearMegastructure(this); + // Clear material filter (still owned by BE) + this.materialFilter = new ItemStack(Items.BARRIER); + this.materialLimit = 0; + // Re-register with power grid to restore CONSUMER type + PowerGrid.addComponent(this); + } + + /** + * Get the option list matching what the client sees (applies the same filtering). + * When a megastructure is already built, only the accelerator is visible. + */ + public List getClientVisibleOptions() { + List options = CelestialRefactorRegistry.getOptions( + celestialBodyData, + isAmplify, + this.planetaryResourceSet + ); + if (megastructureManager.getActiveIndex() >= 0) { + options = options.stream().filter(opt -> "stellar_evolution_accelerator".equals(opt.megastructure())).toList(); + } + return options; + } + + /** + * Get the currently active megastructure option, or null if none is built. + */ + @Nullable + public CelestialRefactorOption getActiveMegastructureOption() { + return megastructureManager.getActiveOption(this); + } + + /** + * Get the portals placed on this CFA's sides (unmodifiable). + */ + public Map getPortals() { + WormholeStabilizerHandler wh = megastructureManager.getWormholeHandler(); + return wh.getPortals(); + } + + /** + * Attempt to build a megastructure. Called from the server when the player clicks "Start Refactoring". + * + * @param optionIndex the selected refactor option index + */ + public void buildMegastructure(int optionIndex) { + if (level == null || level.isClientSide()) return; + if (celestialBodyData == null) return; + List options = getClientVisibleOptions(); + if (optionIndex < 0 || optionIndex >= options.size()) return; + + CelestialRefactorOption option = options.get(optionIndex); + + // Check materials first + if (option.needsMaterial()) { + ItemStack contained = materialContainer.getItem(0); + ItemStack required = option.material().copyWithCount(option.materialCount()); + if (!ItemStack.isSameItemSameComponents(contained, required) || contained.getCount() < required.getCount()) { + return; + } + contained.shrink(required.getCount()); + } + + // Delegate to megastructure manager + megastructureManager.buildMegastructure(optionIndex, this); + + // Re-register with power grid so the component type change takes effect + PowerGrid.addComponent(this); + this.setChanged(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + } + + // === Wormhole interface scanning === + + /** + * Get all laser interfaces mapped by relative offset from this CFA's controller. + */ + public Map getLaserInterfacesMap() { + return CfaInterfaceScanner.getInterfacesMap( + CelestialForgingAnvilLaserInterfaceBlockEntity.class, level, worldPosition); + } + + /** + * Get all logistics interfaces mapped by relative offset from this CFA's controller. + */ + public Map getLogisticsInterfacesMap() { + return CfaInterfaceScanner.getInterfacesMap( + CelestialForgingAnvilLogisticsInterfaceBlockEntity.class, level, worldPosition); + } + + /** + * Get all fluid interfaces mapped by relative offset from this CFA's controller. + */ + public Map getFluidInterfacesMap() { + return CfaInterfaceScanner.getInterfacesMap( + CelestialForgingAnvilFluidInterfaceBlockEntity.class, level, worldPosition); + } + + // === Wormhole content syncing === + + /** + * Called immediately when a player inserts/removes items in a logistics interface. + * Cross-CFA wormhole content syncing is deferred to future implementation. + */ + public void syncLogisticsOnChange(BlockPos interfacePos, int changedSlot) { + // Cross-CFA wormhole content syncing deferred. + } + + /** + * Register a portal on a specific side of the CFA. + * + * @return true if successful, false if side already has a portal or invalid side + */ + public boolean addPortal(Cube323PartHalf side, BlockPos portalPos) { + WormholeStabilizerHandler wh = megastructureManager.getWormholeHandler(); + return wh.addPortal(side, portalPos, this); + } + + /** + * Unregister a portal from a specific side. + */ + public void removePortal(Cube323PartHalf side) { + WormholeStabilizerHandler wh = megastructureManager.getWormholeHandler(); + wh.removePortal(side, this); + } + } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilFluidInterfaceBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilFluidInterfaceBlockEntity.java new file mode 100644 index 0000000000..f9e9526f4c --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilFluidInterfaceBlockEntity.java @@ -0,0 +1,154 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.dubhe.anvilcraft.api.power.IPowerConsumer; +import dev.dubhe.anvilcraft.api.power.PowerComponentType; +import dev.dubhe.anvilcraft.api.power.PowerGrid; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.ProblemReporter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.TagValueOutput; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.fluid.FluidStacksResourceHandler; +import org.jspecify.annotations.Nullable; + +/** + * Fluid interface for the Celestial Forging Anvil. + * Stores 4 fluid types, each up to 80 buckets. + * Consumes 128kW power. Supports fluid I/O via pipes. + */ +public class CelestialForgingAnvilFluidInterfaceBlockEntity extends BlockEntity implements IPowerConsumer { + private static final int TANK_COUNT = 4; + private static final int CAPACITY_PER_TANK = 80_000; // 80 buckets in mB + + @Getter + private final FluidStacksResourceHandler tank; + + @Setter + @Nullable + private PowerGrid grid; + + public CelestialForgingAnvilFluidInterfaceBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + this.tank = new FluidStacksResourceHandler(TANK_COUNT, CAPACITY_PER_TANK) { + @Override + public boolean isValid(int index, FluidResource resource) { + if (resource.isEmpty()) return false; + FluidStack currentStack = this.getStackFrom(this.getResource(index), this.getAmountAsInt(index)); + if (!currentStack.isEmpty() && currentStack.is(resource.getFluid())) return true; + if (currentStack.isEmpty()) { + for (int j = 0; j < TANK_COUNT; j++) { + if (j != index) { + FluidStack otherStack = this.getStackFrom(this.getResource(j), this.getAmountAsInt(j)); + if (!otherStack.isEmpty() && otherStack.is(resource.getFluid())) { + return false; + } + } + } + return true; + } + return false; + } + + protected void onContentsChanged() { + CelestialForgingAnvilFluidInterfaceBlockEntity.this.setChanged(); + } + }; + } + + public void syncToClients() { + if (level instanceof ServerLevel serverLevel) { + Packet packet = getUpdatePacket(); + if (packet != null) { + for (ServerPlayer player : serverLevel.getChunkSource().chunkMap + .getPlayers(serverLevel.getChunkAt(worldPosition).getPos(), false)) { + player.connection.send(packet); + } + } + } + } + + @Override + public void setChanged() { + super.setChanged(); + if (level != null && !level.isClientSide()) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + syncToClients(); + } + } + + @Override + public @Nullable Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public int getInputPower() { + return 128; + } + + @Override + public @Nullable Level getCurrentLevel() { + return this.level; + } + + @Override + public BlockPos getPos() { + return this.getBlockPos(); + } + + @Override + public @Nullable PowerGrid getGrid() { + return this.grid; + } + + @Override + public PowerComponentType getComponentType() { + return IPowerConsumer.super.getComponentType(); + } + + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + this.tank.serialize(output.child("tank")); + } + + @Override + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.tank.deserialize(input.childOrEmpty("tank")); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + CompoundTag tag = super.getUpdateTag(registries); + TagValueOutput fluidTag = TagValueOutput.createWithContext( + new ProblemReporter.Collector(this.problemPath()), registries); + this.tank.serialize(fluidTag); + tag.put("tank", fluidTag.buildResult()); + return tag; + } + + /** + * Returns the fluid handler capability for pipe I/O. + */ + @SuppressWarnings("unused") + public ResourceHandler getFluidHandler() { + return this.tank; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilLaserInterfaceBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilLaserInterfaceBlockEntity.java new file mode 100644 index 0000000000..d26eeddb59 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilLaserInterfaceBlockEntity.java @@ -0,0 +1,539 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.anvilcraft.lib.v2.rendering.cachedber.pipeline.CachedBlockEntityRenderingPipeline; +import dev.dubhe.anvilcraft.api.heat.HeaterManager; +import dev.dubhe.anvilcraft.block.cfa.interfaces.CelestialForgingAnvilInterfaceBlock; +import dev.dubhe.anvilcraft.block.entity.heatable.HeatableBlockEntity; +import dev.dubhe.anvilcraft.block.multipart.FlexibleMultiPartBlock; +import dev.dubhe.anvilcraft.init.ModHeaterInfos; +import dev.dubhe.anvilcraft.init.block.ModBlockTags; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.network.LaserEmitPacket; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.entity.EntityTypeTest; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.network.PacketDistributor; +import org.jspecify.annotations.Nullable; + +import java.util.EnumSet; +import java.util.Set; + +/** + * Laser interface for the Celestial Forging Anvil. + */ +public class CelestialForgingAnvilLaserInterfaceBlockEntity extends BaseLaserBlockEntity { + @Getter + private int receivedLaserLevel = 0; + @Getter + private boolean receivedGamma = false; + @Getter + private boolean laserValid = false; + @Getter + private int requiredLaserLevel = 0; + @Getter + private boolean requiredGamma = false; + + @Getter + private boolean emittingGamma = false; + @Getter + private int gammaLevel = 0; + + private int wormholeOutputLevel = 0; + private boolean wormholeOutputGamma = false; + + private static final int[] GAMMA_EXPOSURE_TICKS = { + Integer.MAX_VALUE, + 60, 20, 5, 1 + }; + + @Nullable + private BlockPos gammaIrradiatingPos = null; + private int gammaExposureTicks = 0; + + public CelestialForgingAnvilLaserInterfaceBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + } + + @Override + public Direction getFacing() { + BlockState state = getBlockState(); + if (state.hasProperty(CelestialForgingAnvilInterfaceBlock.FACING)) { + return state.getValue(CelestialForgingAnvilInterfaceBlock.FACING); + } + return Direction.NORTH; + } + + @Override + protected int getBaseLaserLevel() { + BlockState state = getBlockState(); + if (state.hasProperty(CelestialForgingAnvilInterfaceBlock.ACTIVE) + && state.getValue(CelestialForgingAnvilInterfaceBlock.ACTIVE)) { + if (wormholeOutputLevel > 0) { + return wormholeOutputLevel; + } + return 1; + } + return 0; + } + + @Override + public void syncTo(ServerPlayer player) { + PacketDistributor.sendToPlayer( + player, + new LaserEmitPacket(getLaserLevel(), getBlockPos(), this.irradiateBlockPos, this.emittingGamma) + ); + } + + public boolean isActive() { + BlockState state = getBlockState(); + return state.hasProperty(CelestialForgingAnvilInterfaceBlock.ACTIVE) + && state.getValue(CelestialForgingAnvilInterfaceBlock.ACTIVE); + } + + public void setWormholeLaserOutput(int level, boolean gamma) { + this.wormholeOutputLevel = level; + this.wormholeOutputGamma = gamma; + } + + @Override + public float getLaserOffset() { + return 0.125f; + } + + @Override + public void onIrradiated(BaseLaserBlockEntity source) { + int level = source.getLaserLevel(); + boolean gamma = source instanceof CelestialForgingAnvilLaserInterfaceBlockEntity cfaSource + && cfaSource.isEmittingGamma(); + onLaserReceived(level, gamma); + } + + @Override + public void onCancelingIrradiation(BaseLaserBlockEntity source) { + resetLaser(); + } + + @Override + public Set getIgnoreFace() { + EnumSet ignore = EnumSet.allOf(Direction.class); + ignore.remove(getFacing().getOpposite()); + return ignore; + } + + public void setLaserRequirement(int requiredLevel, boolean gamma) { + this.requiredLaserLevel = requiredLevel; + this.requiredGamma = gamma; + if (requiredLaserLevel > 0 && receivedLaserLevel > 0) { + this.laserValid = receivedLaserLevel >= requiredLaserLevel + && receivedGamma == requiredGamma; + } else { + this.laserValid = false; + } + this.setChanged(); + } + + public void onLaserReceived(int level, boolean gamma) { + this.receivedLaserLevel = level; + this.receivedGamma = gamma; + this.laserValid = (requiredLaserLevel > 0 + && level >= requiredLaserLevel + && gamma == requiredGamma); + this.setChanged(); + } + + public void resetLaser() { + this.receivedLaserLevel = 0; + this.receivedGamma = false; + this.laserValid = false; + this.setChanged(); + } + + public void emitGammaLaser(int level) { + this.emittingGamma = true; + this.gammaLevel = level; + this.updateLaserLevel(level); + } + + @SuppressWarnings("checkstyle:VariableDeclarationUsageDistance") + public void serverTick() { + if (level == null || level.isClientSide()) return; + BlockState state = getBlockState(); + if (!state.hasProperty(CelestialForgingAnvilInterfaceBlock.ACTIVE)) return; + + boolean active = state.getValue(CelestialForgingAnvilInterfaceBlock.ACTIVE); + + if (receivedLaserLevel > 0) { + if (irradiateBlockPos != null) { + BlockEntity oldBe = level.getBlockEntity(irradiateBlockPos); + if (oldBe instanceof BaseLaserBlockEntity lastIrradiated) { + lastIrradiated.onCancelingIrradiation(this); + } + updateIrradiateBlockPos(null); + } + irradiateSelfLaserBlockSet.clear(); + updateLaserLevel(0); + } else if (emittingGamma && gammaLevel > 0) { + Direction facing = getFacing(); + emitGammaLaserBeam(facing); + } else if (wormholeOutputGamma && wormholeOutputLevel > 0 && active) { + int savedGammaLevel = this.gammaLevel; + this.gammaLevel = wormholeOutputLevel; + this.emittingGamma = true; + Direction facing = getFacing(); + emitGammaLaserBeam(facing); + this.gammaLevel = savedGammaLevel; + } else if (active) { + Direction facing = getFacing(); + if (irradiateSelfLaserBlockSet.isEmpty()) { + emitLaser(facing); + } + } else { + if (irradiateBlockPos != null) { + BlockEntity oldBe = level.getBlockEntity(irradiateBlockPos); + if (oldBe instanceof BaseLaserBlockEntity lastIrradiated) { + lastIrradiated.onCancelingIrradiation(this); + } + updateIrradiateBlockPos(null); + } + irradiateSelfLaserBlockSet.clear(); + updateLaserLevel(0); + } + + tickWithGamma(level); + + if (emittingGamma) { + emittingGamma = false; + } + + if (level instanceof ServerLevel serverLevel + && irradiateBlockPos != null + && serverLevel.getBlockState(irradiateBlockPos).is(ModBlockTags.HEATABLE_BLOCKS)) { + HeaterManager.addProducer(getBlockPos(), serverLevel, ModHeaterInfos.LASER_EMITTER); + } + } + + @Override + public void tick(Level level) { + if (level.isClientSide()) { + super.tick(level); + } + } + + private void tickWithGamma(Level level) { + if (changed) { + if (level instanceof ServerLevel serverLevel) { + PacketDistributor.sendToPlayersTrackingChunk( + serverLevel, + level.getChunkAt(getBlockPos()).getPos(), + new LaserEmitPacket(getLaserLevel(), getBlockPos(), this.irradiateBlockPos, this.emittingGamma) + ); + } + } + this.tickCount++; + } + + @Override + public void clientUpdate(@Nullable BlockPos irradiateBlockPos, int laserLevel) { + this.emittingGamma = false; + this.gammaLevel = 0; + super.clientUpdate(irradiateBlockPos, laserLevel); + } + + public void clientUpdateGamma(@Nullable BlockPos irradiateBlockPos, int laserLevel) { + this.emittingGamma = true; + this.gammaLevel = laserLevel; + this.irradiateBlockPos = irradiateBlockPos; + this.laserLevel = laserLevel; + CachedBlockEntityRenderingPipeline.getInstance().update(this, true); + } + + @SuppressWarnings("checkstyle:VariableDeclarationUsageDistance") + private void emitGammaLaserBeam(Direction direction) { + if (this.level == null) return; + int originalMaxDistance = this.maxTransmissionDistance; + this.maxTransmissionDistance = 16; + + BlockPos tempIrradiateBlockPos = getGammaIrradiateBlockPos(16, direction, this.getBlockPos()); + if (this.getBlockState().getBlock() instanceof FlexibleMultiPartBlock) { + tempIrradiateBlockPos = getGammaIrradiateBlockPos( + 16, direction, this.getBlockPos().relative(direction)); + } + + destroyPrismsAlongPath(direction, tempIrradiateBlockPos); + + if (!tempIrradiateBlockPos.equals(this.irradiateBlockPos)) { + if (this.irradiateBlockPos != null) { + BlockEntity oldBe = this.level.getBlockEntity(this.irradiateBlockPos); + if (oldBe instanceof BaseLaserBlockEntity lastIrradiated) { + lastIrradiated.onCancelingIrradiation(this); + } + } + } + + if ( + this.level.getBlockEntity(tempIrradiateBlockPos) instanceof BaseLaserBlockEntity irradiatedLaserBlockEntity + && !this.isInIrradiateSelfLaserBlockSet(irradiatedLaserBlockEntity) + ) { + if (irradiatedLaserBlockEntity.getIgnoreFace().isEmpty()) { + this.level.updateNeighborsAt(tempIrradiateBlockPos, getBlockState().getBlock()); + irradiatedLaserBlockEntity.onIrradiated(this); + } else { + for (Direction dir : irradiatedLaserBlockEntity.getIgnoreFace()) { + if (direction != dir) { + this.level.updateNeighborsAt(tempIrradiateBlockPos, getBlockState().getBlock()); + irradiatedLaserBlockEntity.onIrradiated(this); + } + } + } + } + this.updateIrradiateBlockPos(tempIrradiateBlockPos); + this.updateLaserLevel(gammaLevel); + + if (!(this.level instanceof ServerLevel)) { + this.maxTransmissionDistance = originalMaxDistance; + return; + } + + int hurt = Math.min(16, gammaLevel - 4) * 16; + if (hurt > 0) { + Vec3 startPos = this.getBlockPos() + .relative(direction) + .getCenter() + .add(-0.0625, -0.0625, -0.0625); + AABB trackBoundingBox = new AABB( + startPos, + this.irradiateBlockPos.relative(direction.getOpposite()) + .getCenter() + .add(0.0625, 0.0625, 0.0625) + ); + //noinspection deprecation + this.level.getEntities( + EntityTypeTest.forClass(LivingEntity.class), + trackBoundingBox, + Entity::isAlive + ).forEach(livingEntity -> + livingEntity.hurtOrSimulate( + this.level.damageSources().magic(), + hurt + ) + ); + } + + BlockState irradiateBlock = this.level.getBlockState(this.irradiateBlockPos); + int requiredExposure = GAMMA_EXPOSURE_TICKS[Math.clamp(gammaLevel / 4, 0, 4)]; + + BlockPos currentTarget = this.irradiateBlockPos.immutable(); + if (!currentTarget.equals(this.gammaIrradiatingPos)) { + this.gammaIrradiatingPos = currentTarget; + this.gammaExposureTicks = 0; + } + + boolean canBreak = !irradiateBlock.is(BlockTags.WITHER_IMMUNE) + && !irradiateBlock.isAir() + && irradiateBlock.getDestroySpeed(this.level, this.irradiateBlockPos) >= 0; + + if (canBreak) { + this.gammaExposureTicks++; + if (this.gammaExposureTicks >= requiredExposure) { + this.gammaExposureTicks = 0; + BlockPos breakPos = this.irradiateBlockPos; + if (irradiateBlock.getBlock() instanceof FlexibleMultiPartBlock multiPartBlock) { + breakPos = multiPartBlock.getMainPartPos(this.irradiateBlockPos, irradiateBlock); + } + if (gammaLevel >= 16) { + this.level.destroyBlock(breakPos, false); + } else { + this.level.destroyBlock(this.irradiateBlockPos, true); + } + } + } else { + this.gammaExposureTicks = 0; + } + + tryHeatEmberMetal(direction); + + this.maxTransmissionDistance = originalMaxDistance; + } + + private void tryHeatEmberMetal(Direction direction) { + if (this.level == null || gammaLevel < 4) return; + if (this.level.getGameTime() % 20 != 0) return; + + int areaSize; + int thickness; + if (gammaLevel >= 16) { + areaSize = 7; + thickness = 3; + } else if (gammaLevel >= 12) { + areaSize = 5; + thickness = 2; + } else if (gammaLevel >= 8) { + areaSize = 3; + thickness = 1; + } else { + areaSize = 1; + thickness = 1; + } + + int halfSize = areaSize / 2; + BlockPos hitPos = this.irradiateBlockPos; + if (hitPos == null) return; + + Direction[] perpendiculars = switch (direction.getAxis()) { + case X -> new Direction[]{Direction.UP, Direction.NORTH}; + case Z -> new Direction[]{Direction.UP, Direction.EAST}; + default -> new Direction[]{Direction.NORTH, Direction.EAST}; + }; + + for (int depth = 0; depth < thickness; depth++) { + BlockPos depthPos = hitPos.relative(direction, depth); + for (int a = -halfSize; a <= halfSize; a++) { + for (int b = -halfSize; b <= halfSize; b++) { + BlockPos target = depthPos + .relative(perpendiculars[0], a) + .relative(perpendiculars[1], b); + tryHeatEmberMetalAt(target); + } + } + } + } + + private void tryHeatEmberMetalAt(BlockPos pos) { + BlockState state = this.level.getBlockState(pos); + + if (state.is(ModBlocks.EMBER_METAL_BLOCK.get())) { + Block overheatedBlock = ModBlocks.OVERHEATED_EMBER_METAL_BLOCK.get(); + this.level.setBlock(pos, overheatedBlock.defaultBlockState(), Block.UPDATE_CLIENTS); + if (overheatedBlock instanceof EntityBlock entityBlock) { + BlockEntity be = entityBlock.newBlockEntity(pos, overheatedBlock.defaultBlockState()); + if (be instanceof HeatableBlockEntity heatable) { + this.level.setBlockEntity(heatable); + heatable.addDurationInTick(80); + } + } + } else if (state.is(ModBlocks.OVERHEATED_EMBER_METAL_BLOCK.get())) { + BlockEntity be = this.level.getBlockEntity(pos); + if (be instanceof HeatableBlockEntity heatable) { + heatable.addDurationInTick(80); + } + } + } + + private void destroyPrismsAlongPath(Direction direction, BlockPos targetPos) { + if (level == null) return; + BlockPos.MutableBlockPos checkPos = getBlockPos().relative(direction).mutable(); + while (!checkPos.equals(targetPos)) { + BlockState checkState = level.getBlockState(checkPos); + if (checkState.getBlock() instanceof dev.dubhe.anvilcraft.block.laser.RubyPrismBlock) { + level.destroyBlock(checkPos.immutable(), true); + } + checkPos.move(direction); + } + } + + private BlockPos getGammaIrradiateBlockPos(int expectedLength, Direction direction, BlockPos originPos) { + for (int length = 1; length <= expectedLength; length++) { + BlockPos checkPos = originPos.relative(direction, length); + if (!gammaCanPassThrough(checkPos)) return checkPos; + } + return originPos.relative(direction, expectedLength); + } + + private boolean gammaCanPassThrough(BlockPos blockPos) { + if (this.level == null) return false; + BlockState blockState = this.level.getBlockState(blockPos); + return blockState.is(BlockTags.REPLACEABLE); + } + + // === Persistence === + + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("receivedLaserLevel", receivedLaserLevel); + output.putBoolean("receivedGamma", receivedGamma); + output.putInt("requiredLaserLevel", requiredLaserLevel); + output.putBoolean("requiredGamma", requiredGamma); + output.putBoolean("laserValid", laserValid); + } + + @Override + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.receivedLaserLevel = input.getIntOr("receivedLaserLevel", 0); + this.receivedGamma = input.getBooleanOr("receivedGamma", false); + this.requiredLaserLevel = input.getIntOr("requiredLaserLevel", 0); + this.requiredGamma = input.getBooleanOr("requiredGamma", false); + this.laserValid = input.getBooleanOr("laserValid", false); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + CompoundTag tag = super.getUpdateTag(registries); + tag.putInt("receivedLaserLevel", receivedLaserLevel); + tag.putBoolean("receivedGamma", receivedGamma); + tag.putInt("requiredLaserLevel", requiredLaserLevel); + tag.putBoolean("requiredGamma", requiredGamma); + tag.putBoolean("laserValid", laserValid); + tag.putBoolean("gamma", emittingGamma); + tag.putInt("gammaLevel", gammaLevel); + return tag; + } + + // === Network sync === + + public void syncToClients() { + if (level instanceof ServerLevel serverLevel) { + Packet packet = getUpdatePacket(); + if (packet != null) { + for (ServerPlayer player : serverLevel.getChunkSource().chunkMap + .getPlayers(serverLevel.getChunkAt(worldPosition).getPos(), false)) { + player.connection.send(packet); + } + } + } + } + + @Override + public void setChanged() { + super.setChanged(); + if (level != null && !level.isClientSide()) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + syncToClients(); + } + } + + @Override + public @Nullable Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public void clearRemoved() { + super.clearRemoved(); + if (this.level != null && this.level.isClientSide()) { + CachedBlockEntityRenderingPipeline.getInstance().update(this, true); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilLogisticsInterfaceBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilLogisticsInterfaceBlockEntity.java new file mode 100644 index 0000000000..908ec2201b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilLogisticsInterfaceBlockEntity.java @@ -0,0 +1,303 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; +import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; +import dev.dubhe.anvilcraft.block.cfa.CelestialForgingAnvilBlock; +import dev.dubhe.anvilcraft.block.cfa.interfaces.CelestialForgingAnvilInterfaceBlock; +import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +/** + * Logistics interface for the Celestial Forging Anvil. + * Stores up to 16 different item types, one stack per type. + */ +public class CelestialForgingAnvilLogisticsInterfaceBlockEntity extends BlockEntity { + private static final int TYPE_COUNT = 16; + @Setter + private boolean syncing = false; + + @Getter + private final FilteredItemStackHandler itemHandler = new FilteredItemStackHandler(TYPE_COUNT) { + @Override + public boolean isValid(int slot, ItemResource resource) { + ItemResource current = this.getResource(slot); + if (current.isEmpty()) { + for (int i = 0; i < TYPE_COUNT; i++) { + if (i != slot) { + ItemResource other = this.getResource(i); + if (!other.isEmpty() && ItemStack.isSameItemSameComponents(other.toStack(), resource.toStack())) { + return false; + } + } + } + return true; + } + return ItemStack.isSameItemSameComponents(current.toStack(), resource.toStack()); + } + + protected void onContentChanged(int slot) { + CelestialForgingAnvilLogisticsInterfaceBlockEntity.this.setChanged(); + if (!syncing) { + CelestialForgingAnvilLogisticsInterfaceBlockEntity.this.triggerWormholeSync(slot); + } + } + }; + + public CelestialForgingAnvilLogisticsInterfaceBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + } + + // === Network sync === + + public void syncToClients() { + if (level instanceof ServerLevel serverLevel) { + Packet packet = getUpdatePacket(); + if (packet != null) { + for (ServerPlayer player : serverLevel.getChunkSource().chunkMap + .getPlayers(serverLevel.getChunkAt(worldPosition).getPos(), false)) { + player.connection.send(packet); + } + } + } + } + + @Override + public void setChanged() { + super.setChanged(); + if (level != null && !level.isClientSide()) { + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); + syncToClients(); + } + } + + @Override + public @Nullable Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @SuppressWarnings("unused") + public ResourceHandler getItemHandler() { + return itemHandler; + } + + // === Wormhole sync === + + private void triggerWormholeSync(int changedSlot) { + if (level == null || level.isClientSide()) return; + BlockPos cfaPos = findParentCfa(); + if (cfaPos == null) return; + if (level.getBlockEntity(cfaPos) instanceof CelestialForgingAnvilBlockEntity cfa) { + cfa.syncLogisticsOnChange(worldPosition, changedSlot); + } + } + + @Nullable + private BlockPos findParentCfa() { + if (level == null) return null; + BlockState state = getBlockState(); + if (!(state.getBlock() instanceof CelestialForgingAnvilInterfaceBlock)) return null; + Direction towardsCfa = state.getValue(CelestialForgingAnvilInterfaceBlock.FACING).getOpposite(); + BlockPos cfaBlockPos = worldPosition.relative(towardsCfa); + BlockState cfaState = level.getBlockState(cfaBlockPos); + if (cfaState.getBlock() instanceof CelestialForgingAnvilBlock) { + Cube323PartHalf half = cfaState.getValue(CelestialForgingAnvilBlock.HALF); + BlockPos controllerPos = cfaBlockPos.offset(half.getOffset().multiply(-1)); + if (level.getBlockEntity(controllerPos) instanceof CelestialForgingAnvilBlockEntity) { + return controllerPos; + } + } + return null; + } + + // === Auto-eject tick === + + private static final int MAX_EJECT_PER_OP = 64; + public static final int EJECT_COOLDOWN = 8; + + @Setter + private int ejectCooldown = 0; + private int lastEjectSlot = 0; + + public void serverTick() { + if (level == null || level.isClientSide()) return; + BlockState state = getBlockState(); + if (!state.hasProperty(CelestialForgingAnvilInterfaceBlock.ACTIVE)) return; + if (!state.getValue(CelestialForgingAnvilInterfaceBlock.ACTIVE)) return; + + if (ejectCooldown > 0) { + ejectCooldown--; + return; + } + + Direction facing = state.getValue(CelestialForgingAnvilInterfaceBlock.FACING); + BlockPos targetPos = worldPosition.relative(facing); + boolean ejected = false; + int totalSlots = itemHandler.size(); + + for (int offset = 0; offset < totalSlots; offset++) { + int slot = (lastEjectSlot + offset) % totalSlots; + ItemResource resource = itemHandler.getResource(slot); + if (resource.isEmpty()) continue; + int amount = itemHandler.getAmountAsInt(slot); + int toExtract = Math.min(amount, MAX_EJECT_PER_OP); + ItemStack stackToMove = resource.toStack(toExtract); + + ResourceHandler targetHandler = level.getCapability( + Capabilities.Item.BLOCK, targetPos, facing.getOpposite() + ); + if (targetHandler != null) { + ItemStack remainder = ItemHandlerUtil.insertItem(targetHandler, stackToMove, false); + int inserted = toExtract - remainder.getCount(); + if (inserted > 0) { + try (Transaction tx = Transaction.openRoot()) { + itemHandler.extract(slot, resource, inserted, tx); + tx.commit(); + } + } + if (remainder.getCount() < stackToMove.getCount()) { + ejected = true; + lastEjectSlot = (slot + 1) % totalSlots; + break; + } + } else { + try (Transaction tx = Transaction.openRoot()) { + int extracted = itemHandler.extract(slot, resource, toExtract, tx); + if (extracted > 0) { + tx.commit(); + ItemStack toEject = resource.toStack(extracted); + Vec3 ejectPos = worldPosition.relative(facing).getCenter(); + Vec3 velocity = new Vec3( + facing.getStepX() * 0.25, + facing.getStepY() * 0.25, + facing.getStepZ() * 0.25 + ); + ItemEntity entity = new ItemEntity(level, ejectPos.x, ejectPos.y, ejectPos.z, toEject); + entity.setDeltaMovement(velocity); + entity.setDefaultPickUpDelay(); + level.addFreshEntity(entity); + ejected = true; + lastEjectSlot = (slot + 1) % totalSlots; + break; + } + } + } + } + + if (ejected) { + ejectCooldown = EJECT_COOLDOWN; + setChanged(); + } + } + + // === Temple & Collider display data (pushed by CFA controller) === + @Getter @Setter + private ItemStack templeDemandItem = ItemStack.EMPTY; + @Getter @Setter + private int templeDemandCount = 0; + @Getter @Setter + private int templeDemandProgress = 0; + @Getter @Setter + private boolean templeDemandSatisfied = false; + + @Getter @Setter + private List colliderTargetItems = new ArrayList<>(); + @Getter @Setter + private boolean colliderProcessing = false; + @Getter @Setter + private boolean colliderStarMissing = false; + + // === Persistence === + + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("ejectCooldown", ejectCooldown); + this.itemHandler.serialize(output.child("inventory")); + if (!templeDemandItem.isEmpty()) { + output.store("templeDemandItem", ItemStack.OPTIONAL_CODEC, templeDemandItem); + } + output.putInt("templeDemandCount", templeDemandCount); + output.putInt("templeDemandProgress", templeDemandProgress); + output.putBoolean("templeDemandSatisfied", templeDemandSatisfied); + if (!colliderTargetItems.isEmpty()) { + ValueOutput.ValueOutputList list = output.childrenList("colliderTargetItems"); + for (ItemStack stack : colliderTargetItems) { + if (!stack.isEmpty()) { + list.addChild().store("item", ItemStack.OPTIONAL_CODEC, stack); + } + } + } + output.putBoolean("colliderProcessing", colliderProcessing); + output.putBoolean("colliderStarMissing", colliderStarMissing); + } + + @Override + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.ejectCooldown = input.getIntOr("ejectCooldown", 0); + this.itemHandler.deserialize(input.childOrEmpty("inventory")); + this.templeDemandItem = input.read("templeDemandItem", ItemStack.OPTIONAL_CODEC).orElse(ItemStack.EMPTY); + this.templeDemandCount = input.getIntOr("templeDemandCount", 0); + this.templeDemandProgress = input.getIntOr("templeDemandProgress", 0); + this.templeDemandSatisfied = input.getBooleanOr("templeDemandSatisfied", false); + this.colliderTargetItems.clear(); + input.childrenList("colliderTargetItems").ifPresent(list -> { + for (ValueInput child : list) { + child.read("item", ItemStack.OPTIONAL_CODEC).ifPresent(colliderTargetItems::add); + } + }); + this.colliderProcessing = input.getBooleanOr("colliderProcessing", false); + this.colliderStarMissing = input.getBooleanOr("colliderStarMissing", false); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + CompoundTag tag = super.getUpdateTag(registries); + if (!templeDemandItem.isEmpty()) { + tag.put("templeDemandItem", ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, templeDemandItem).getOrThrow()); + } + tag.putInt("templeDemandCount", templeDemandCount); + tag.putInt("templeDemandProgress", templeDemandProgress); + tag.putBoolean("templeDemandSatisfied", templeDemandSatisfied); + if (!colliderTargetItems.isEmpty()) { + ListTag list = new ListTag(); + for (ItemStack stack : colliderTargetItems) { + if (!stack.isEmpty()) { + list.add(ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, stack).getOrThrow()); + } + } + tag.put("colliderTargetItems", list); + } + tag.putBoolean("colliderProcessing", colliderProcessing); + tag.putBoolean("colliderStarMissing", colliderStarMissing); + return tag; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilPortalBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilPortalBlockEntity.java new file mode 100644 index 0000000000..10e58c3e1b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilPortalBlockEntity.java @@ -0,0 +1,785 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.anvilcraft.lib.v2.rendering.cachedber.pipeline.CachedBlockEntityRenderingPipeline; +import dev.dubhe.anvilcraft.api.heat.HeaterManager; +import dev.dubhe.anvilcraft.block.laser.RubyPrismBlock; +import dev.dubhe.anvilcraft.block.cfa.CelestialForgingAnvilBlock; +import dev.dubhe.anvilcraft.block.cfa.CelestialForgingAnvilPortalBlock; +import dev.dubhe.anvilcraft.block.multipart.FlexibleMultiPartBlock; +import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; +import dev.dubhe.anvilcraft.init.ModHeaterInfos; +import dev.dubhe.anvilcraft.init.block.ModBlockTags; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.init.entity.ModDamageTypes; +import dev.dubhe.anvilcraft.network.LaserEmitPacket; +import dev.dubhe.anvilcraft.saved.WormholeNetwork; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.entity.EntityTypeTest; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.network.PacketDistributor; +import org.jspecify.annotations.Nullable; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +public class CelestialForgingAnvilPortalBlockEntity extends BaseLaserBlockEntity { + + /** + * Set of entity UUIDs currently touching this portal. + * Used to track enter/leave so that teleport fires once per touch, + * and resets when the entity steps away. + */ + private final Set touchingEntities = new HashSet<>(); + + /** + * Last known WATERLOGGED state, used to detect changes and sync to connected portal. + */ + private boolean lastWaterlogged = false; + + /** + * Laser level and type received from an external laser source hitting this portal front face. + */ + private int incomingLaserLevel = 0; + private boolean incomingLaserGamma = false; + + /** + * Laser level and type to emit, set by the connected portal via wormhole sync. + */ + private int wormholeLaserLevel = 0; + private boolean wormholeLaserGamma = false; + + /** + * Gamma rendering state for client-side laser beam color. + */ + @Getter + private boolean emittingGamma = false; + private int gammaLevel = 0; + + /** + * Gamma laser block breaking: track which block is being irradiated and for how long. + */ + @Nullable + private BlockPos gammaIrradiatingPos = null; + private int gammaExposureTicks = 0; + + // [disabled, ≥4:3s, ≥8:1s, ≥12:5gt, ≥16:1gt] + private static final int[] GAMMA_EXPOSURE_TICKS = { + Integer.MAX_VALUE, 60, 20, 5, 1 + }; + + @Override + public void syncTo(ServerPlayer player) { + PacketDistributor.sendToPlayer( + player, + new LaserEmitPacket(getLaserLevel(), getBlockPos(), this.irradiateBlockPos, this.emittingGamma) + ); + } + + public CelestialForgingAnvilPortalBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + } + + // === BaseLaserBlockEntity overrides === + + @Override + public Direction getFacing() { + BlockState state = getBlockState(); + if (state.hasProperty(CelestialForgingAnvilPortalBlock.FACING)) { + return state.getValue(CelestialForgingAnvilPortalBlock.FACING); + } + return Direction.NORTH; + } + + @Override + public Set getIgnoreFace() { + // Only accept lasers from the front (the direction opposite to FACING) + EnumSet ignore = EnumSet.allOf(Direction.class); + ignore.remove(getFacing().getOpposite()); + return ignore; + } + + @Override + protected int getBaseLaserLevel() { + if (wormholeLaserLevel > 0) return wormholeLaserLevel; + return 0; + } + + @Override + public void onIrradiated(BaseLaserBlockEntity source) { + this.incomingLaserLevel = source.getLaserLevel(); + this.incomingLaserGamma = source instanceof CelestialForgingAnvilLaserInterfaceBlockEntity cfaSource + && cfaSource.isEmittingGamma(); + } + + @Override + public void onCancelingIrradiation(BaseLaserBlockEntity source) { + this.incomingLaserLevel = 0; + this.incomingLaserGamma = false; + } + + /** + * Set the wormhole laser output from the connected portal. + * Called by the connected portal's tick via wormhole sync. + */ + public void setWormholeLaser(int level, boolean gamma) { + this.wormholeLaserLevel = level; + this.wormholeLaserGamma = gamma; + this.setChanged(); + } + + /** + * Client-side update for gamma laser rendering on the portal. + */ + public void clientUpdateGamma(@Nullable BlockPos irradiateBlockPos, int laserLevel) { + this.emittingGamma = true; + this.gammaLevel = laserLevel; + this.irradiateBlockPos = irradiateBlockPos; + this.laserLevel = laserLevel; + CachedBlockEntityRenderingPipeline.getInstance().update(this); + } + + @Override + public void clientUpdate(@Nullable BlockPos irradiateBlockPos, int laserLevel) { + this.emittingGamma = false; + this.gammaLevel = 0; + super.clientUpdate(irradiateBlockPos, laserLevel); + } + + /** + * Find the parent CFA block entity that this portal is attached to. + */ + @Nullable + public CelestialForgingAnvilBlockEntity findParentCfa() { + if (level == null) return null; + BlockState state = getBlockState(); + if (!(state.getBlock() instanceof CelestialForgingAnvilPortalBlock)) return null; + + // FACING points away from CFA; look opposite to find CFA + Direction towardsCfa = state.getValue(CelestialForgingAnvilPortalBlock.FACING).getOpposite(); + BlockPos cfaPos = worldPosition.relative(towardsCfa); + BlockState cfaState = level.getBlockState(cfaPos); + if (cfaState.getBlock() instanceof CelestialForgingAnvilBlock) { + Cube323PartHalf half = cfaState.getValue(CelestialForgingAnvilBlock.HALF); + BlockPos controllerPos = cfaPos.offset(half.getOffset().multiply(-1)); + if (level.getBlockEntity(controllerPos) instanceof CelestialForgingAnvilBlockEntity cfaBe) { + return cfaBe; + } + } + return null; + } + + public void tick() { + if (level == null || level.isClientSide()) return; + CelestialForgingAnvilBlockEntity parent = findParentCfa(); + BlockState state = getBlockState(); + if (!(state.getBlock() instanceof CelestialForgingAnvilPortalBlock)) return; + + // If the parent CFA is gone (destroyed by water, etc.), destroy this portal too + if (parent == null) { + level.destroyBlock(worldPosition, false); + return; + } + + // If the amplifier is missing, the portal should be closed + if (!parent.isAmplifierPresent()) { + if (state.getValue(CelestialForgingAnvilPortalBlock.OPEN)) { + level.setBlock(worldPosition, state.setValue(CelestialForgingAnvilPortalBlock.OPEN, false), 3); + } + touchingEntities.clear(); + return; + } + + Cube323PartHalf side = findSideFromParent(parent); + if (side == null) return; + + // Query wormhole network to determine if portal should be open. + // Portal opens only when exactly 2 CFAs in the network group have a portal + // on this same side. If there are more (>2), all doors close for security. + WormholeNetwork network = WormholeNetwork.get(); + UUID hash = parent.getWormholeParamsHash(); + if (hash == null) { + // No wormhole identity — close portal and clean up laser + if (state.getValue(CelestialForgingAnvilPortalBlock.OPEN)) { + level.setBlock(worldPosition, state.setValue(CelestialForgingAnvilPortalBlock.OPEN, false), 3); + touchingEntities.clear(); + } + if (wormholeLaserLevel > 0) { + if (irradiateBlockPos != null) { + BlockEntity oldBe = level.getBlockEntity(irradiateBlockPos); + if (oldBe instanceof BaseLaserBlockEntity lastIrradiated) { + lastIrradiated.onCancelingIrradiation(this); + } + updateIrradiateBlockPos(null); + } + irradiateSelfLaserBlockSet.clear(); + updateLaserLevel(0); + wormholeLaserLevel = 0; + wormholeLaserGamma = false; + this.emittingGamma = false; + this.gammaLevel = 0; + this.gammaIrradiatingPos = null; + this.gammaExposureTicks = 0; + this.setChanged(); + sendLaserPackets(); + } + return; + } + List connected = network.getConnected( + hash, level.dimension(), parent.getBlockPos() + ); + + // Ensure this portal's side is registered in the wormhole network. + if (!network.hasPortalAt(level.dimension(), parent.getBlockPos(), side)) { + parent.addPortal(side, worldPosition); + } + + // Count other CFAs in the group that have a portal on the same side + long sameSideCount = connected.stream() + .filter(e -> network.hasPortalAt(e.dimension(), e.pos(), side)) + .count(); + // Include self (this portal) + sameSideCount++; + boolean shouldBeOpen = sameSideCount == 2; + + if (state.getValue(CelestialForgingAnvilPortalBlock.OPEN) != shouldBeOpen) { + level.setBlock(worldPosition, state.setValue(CelestialForgingAnvilPortalBlock.OPEN, shouldBeOpen), 3); + state = state.setValue(CelestialForgingAnvilPortalBlock.OPEN, shouldBeOpen); + } + + // Sync waterlogged state with connected portal (only when this portal's state changed) + if (state.getValue(CelestialForgingAnvilPortalBlock.OPEN)) { + boolean thisWaterlogged = state.getValue(BlockStateProperties.WATERLOGGED); + if (thisWaterlogged != lastWaterlogged) { + lastWaterlogged = thisWaterlogged; + CelestialForgingAnvilPortalBlockEntity connectedPortal = findConnectedPortal(parent, side); + if (connectedPortal != null) { + BlockPos targetPortalPos = connectedPortal.getBlockPos(); + Level targetLevel = connectedPortal.level; + if (targetLevel != null) { + BlockState targetState = targetLevel.getBlockState(targetPortalPos); + if (targetState.getBlock() instanceof CelestialForgingAnvilPortalBlock + && targetState.getValue(BlockStateProperties.WATERLOGGED) != thisWaterlogged) { + targetLevel.setBlock(targetPortalPos, + targetState.setValue(BlockStateProperties.WATERLOGGED, thisWaterlogged), 3); + if (thisWaterlogged) { + targetLevel.scheduleTick(targetPortalPos, Fluids.WATER, + Fluids.WATER.getTickDelay(targetLevel)); + } + } + } + } + } + + // Sync laser: transmit incoming laser to connected portal + CelestialForgingAnvilPortalBlockEntity connectedPortal = findConnectedPortal(parent, side); + if (connectedPortal != null) { + connectedPortal.setWormholeLaser(incomingLaserLevel, incomingLaserGamma); + } + } else { + // Portal closed: clear any stale wormhole laser on the other side + CelestialForgingAnvilPortalBlockEntity connectedPortal = findConnectedPortal(parent, side); + if (connectedPortal != null && incomingLaserLevel == 0) { + connectedPortal.setWormholeLaser(0, false); + } + } + + // Emit laser if this portal has a wormhole laser set from connected portal + if (wormholeLaserLevel > 0) { + Direction facing = getFacing(); + if (irradiateSelfLaserBlockSet.isEmpty()) { + if (wormholeLaserGamma) { + emitPortalGammaLaser(facing); + } else { + emitLaser(facing); + } + } + this.emittingGamma = wormholeLaserGamma; + this.gammaLevel = wormholeLaserLevel; + } else { + // Stop laser emission + if (irradiateBlockPos != null) { + BlockEntity oldBe = level.getBlockEntity(irradiateBlockPos); + if (oldBe instanceof BaseLaserBlockEntity lastIrradiated) { + lastIrradiated.onCancelingIrradiation(this); + } + updateIrradiateBlockPos(null); + } + irradiateSelfLaserBlockSet.clear(); + updateLaserLevel(0); + this.emittingGamma = false; + this.gammaLevel = 0; + this.gammaIrradiatingPos = null; + this.gammaExposureTicks = 0; + } + + // Increment tickCount for ore extraction cooldown + this.tickCount++; + + // Send laser render packets + sendLaserPackets(); + + // Register as heat producer if the laser is hitting a heatable block + if (level instanceof ServerLevel serverLevel + && irradiateBlockPos != null + && serverLevel.getBlockState(irradiateBlockPos).is(ModBlockTags.HEATABLE_BLOCKS)) { + HeaterManager.addProducer(getBlockPos(), serverLevel, ModHeaterInfos.LASER_EMITTER); + } + + // Detect entities in the portal block and teleport them. + if (state.getValue(CelestialForgingAnvilPortalBlock.OPEN)) { + AABB detectionBox = new AABB(worldPosition); + List entities = level.getEntitiesOfClass(Entity.class, detectionBox); + + for (Entity entity : entities) { + UUID uuid = entity.getUUID(); + if (!touchingEntities.contains(uuid)) { + tryTouchTeleport(entity); + touchingEntities.add(uuid); + } + } + + Set currentUuids = entities.stream() + .map(Entity::getUUID) + .collect(Collectors.toSet()); + touchingEntities.removeIf(uuid -> !currentUuids.contains(uuid)); + } else { + touchingEntities.clear(); + } + } + + /** + * when an entity overlaps the portal block. + * Checks {@link #touchingEntities} to ensure teleport fires only once + * per touch — subsequent ticks while still inside the block are skipped. + * The BE tick clears the tracking when the entity leaves the block. + */ + public void tryTouchTeleport(Entity entity) { + UUID uuid = entity.getUUID(); + if (touchingEntities.contains(uuid)) return; + + CelestialForgingAnvilBlockEntity parent = findParentCfa(); + if (parent == null) return; + Cube323PartHalf side = findSideFromParent(parent); + if (side == null) return; + + WormholeNetwork network = WormholeNetwork.get(); + List connected = network.getConnected( + parent.getWormholeParamsHash(), level.dimension(), parent.getBlockPos() + ); + // Only teleport if exactly one other CFA has a portal on the same side + List matching = connected.stream() + .filter(e -> network.hasPortalAt(e.dimension(), e.pos(), side)) + .toList(); + if (matching.size() != 1) return; + + WormholeNetwork.Entry target = matching.getFirst(); + if (!network.hasPortalAt(target.dimension(), target.pos(), side)) return; + + ServerLevel targetLevel = level.getServer().getLevel(target.dimension()); + if (targetLevel == null) return; + + BlockPos targetPortalPos = target.pos().offset(side.getOffsetX(), side.getOffsetY(), side.getOffsetZ()); + Direction outwardFacing = CelestialForgingAnvilPortalBlock.getFacingFromSide(side); + BlockPos destPos = targetPortalPos.relative(outwardFacing, 2); + + double dx = destPos.getX() + 0.5; + double dy = destPos.getY(); + double dz = destPos.getZ() + 0.5; + + // Items and projectiles spawn 1 block higher so they don't land at feet level + if (entity instanceof ItemEntity || entity instanceof Projectile) { + dy += 1; + } + + // Only reverse the component perpendicular to the portal face; + // horizontal and vertical movement parallel to the slab is preserved. + Vec3 vel = entity.getDeltaMovement(); + Vec3 momentum; + if (outwardFacing.getAxis() == Direction.Axis.Z) { + momentum = new Vec3(vel.x, vel.y, -vel.z); + } else { + momentum = new Vec3(-vel.x, vel.y, vel.z); + } + float targetYRot = (entity.getYRot() + 180.0f) % 360.0f; + entity.teleportTo(targetLevel, dx, dy, dz, + Set.of(), targetYRot, entity.getXRot(), false); + entity.setDeltaMovement(momentum); + + touchingEntities.add(uuid); + } + + /** + * Find the connected portal block entity on the other side of the wormhole. + * Returns null if not connected or target portal is not found. + */ + @Nullable + private CelestialForgingAnvilPortalBlockEntity findConnectedPortal( + CelestialForgingAnvilBlockEntity parent, Cube323PartHalf side + ) { + WormholeNetwork network = WormholeNetwork.get(); + UUID hash = parent.getWormholeParamsHash(); + if (hash == null) return null; + List connected = network.getConnected( + hash, level.dimension(), parent.getBlockPos() + ); + List matching = connected.stream() + .filter(e -> network.hasPortalAt(e.dimension(), e.pos(), side)) + .toList(); + if (matching.size() != 1) return null; + + WormholeNetwork.Entry target = matching.getFirst(); + Direction outwardFacing = CelestialForgingAnvilPortalBlock.getFacingFromSide(side); + BlockPos targetPortalPos = target.pos() + .offset(side.getOffsetX(), side.getOffsetY(), side.getOffsetZ()) + .relative(outwardFacing); + ServerLevel targetLevel = level.getServer().getLevel(target.dimension()); + if (targetLevel == null) return null; + if (targetLevel.getBlockEntity(targetPortalPos) instanceof CelestialForgingAnvilPortalBlockEntity tp) { + return tp; + } + return null; + } + + /** + * Gamma laser emission with special properties: 16 block range, air-only pass-through, + * prism destruction, 16x entity damage, and block breaking based on gamma level. + */ + @SuppressWarnings("checkstyle:VariableDeclarationUsageDistance") + private void emitPortalGammaLaser(Direction direction) { + if (this.level == null) return; + int originalMaxDistance = this.maxTransmissionDistance; + this.maxTransmissionDistance = 16; + + BlockPos tempIrradiateBlockPos = getGammaIrradiateBlockPos(direction); + + // Destroy prisms along the beam path + destroyPrismsAlongPath(direction, tempIrradiateBlockPos); + + // Update old target if changed + if (!tempIrradiateBlockPos.equals(this.irradiateBlockPos)) { + if (this.irradiateBlockPos != null) { + BlockEntity oldBe = this.level.getBlockEntity(this.irradiateBlockPos); + if (oldBe instanceof BaseLaserBlockEntity lastIrradiated) { + lastIrradiated.onCancelingIrradiation(this); + } + } + } + + // Chain with other BaseLaserBlockEntity targets + if (this.level.getBlockEntity(tempIrradiateBlockPos) instanceof BaseLaserBlockEntity irradiated + && !this.isInIrradiateSelfLaserBlockSet(irradiated)) { + if (irradiated.getIgnoreFace().isEmpty()) { + this.level.updateNeighborsAt(tempIrradiateBlockPos, getBlockState().getBlock()); + irradiated.onIrradiated(this); + } else { + for (Direction dir : irradiated.getIgnoreFace()) { + if (direction != dir) { + this.level.updateNeighborsAt(tempIrradiateBlockPos, getBlockState().getBlock()); + irradiated.onIrradiated(this); + } + } + } + } + this.updateIrradiateBlockPos(tempIrradiateBlockPos); + this.updateLaserLevel(gammaLevel); + + if (!(this.level instanceof ServerLevel serverLevel)) { + this.maxTransmissionDistance = originalMaxDistance; + return; + } + + // Gamma entity damage: 16x normal laser damage + int hurt = Math.min(16, gammaLevel - 4) * 16; + if (hurt > 0) { + Vec3 startPos = this.getBlockPos() + .relative(direction) + .getCenter() + .add(-0.0625, -0.0625, -0.0625); + AABB trackBoundingBox = new AABB( + startPos, + this.irradiateBlockPos.relative(direction.getOpposite()) + .getCenter() + .add(0.0625, 0.0625, 0.0625) + ); + this.level.getEntities( + EntityTypeTest.forClass(LivingEntity.class), + trackBoundingBox, + Entity::isAlive + ).forEach(livingEntity -> + livingEntity.hurtOrSimulate(ModDamageTypes.gammaLaser(this.level), hurt) + ); + } + + // Gamma laser block breaking — continuous exposure per block position + BlockState irradiateBlock = this.level.getBlockState(this.irradiateBlockPos); + int requiredExposure = GAMMA_EXPOSURE_TICKS[Math.clamp(gammaLevel / 4, 0, 4)]; + + BlockPos currentTarget = this.irradiateBlockPos.immutable(); + if (!currentTarget.equals(this.gammaIrradiatingPos)) { + this.gammaIrradiatingPos = currentTarget; + this.gammaExposureTicks = 0; + } + + boolean canBreak = !irradiateBlock.is(BlockTags.WITHER_IMMUNE) + && !irradiateBlock.isAir() + && irradiateBlock.getDestroySpeed(this.level, this.irradiateBlockPos) >= 0; + + if (canBreak) { + this.gammaExposureTicks++; + if (this.gammaExposureTicks >= requiredExposure) { + this.gammaExposureTicks = 0; + BlockPos breakPos = this.irradiateBlockPos; + if (irradiateBlock.getBlock() instanceof FlexibleMultiPartBlock multi) { + breakPos = multi.getMainPartPos(this.irradiateBlockPos, irradiateBlock); + } + if (gammaLevel >= 16) { + this.level.destroyBlock(breakPos, false); + } else { + this.level.destroyBlock(this.irradiateBlockPos, true); + } + } + } else { + this.gammaExposureTicks = 0; + } + + // Gamma laser heating: upgrade ember metal blocks in cross-sectional area + tryHeatEmberMetal(direction); + + this.maxTransmissionDistance = originalMaxDistance; + } + + /** + * Find the gamma laser irradiated block position using air-only pass-through rules. + */ + private BlockPos getGammaIrradiateBlockPos(Direction direction) { + for (int length = 1; length <= 16; length++) { + BlockPos checkPos = this.getBlockPos().relative(direction, length); + if (!gammaCanPassThrough(checkPos)) return checkPos; + } + return this.getBlockPos().relative(direction, 16); + } + + /** + * Gamma laser can only pass through air and replaceable blocks (tall grass, etc.). + */ + private boolean gammaCanPassThrough(BlockPos blockPos) { + if (this.level == null) return false; + BlockState blockState = this.level.getBlockState(blockPos); + return blockState.is(BlockTags.REPLACEABLE); + } + + /** + * Destroy ruby prisms along the gamma laser path. + */ + private void destroyPrismsAlongPath(Direction direction, BlockPos targetPos) { + if (level == null) return; + BlockPos.MutableBlockPos checkPos = getBlockPos().relative(direction).mutable(); + while (!checkPos.equals(targetPos)) { + BlockState checkState = level.getBlockState(checkPos); + if (checkState.getBlock() instanceof RubyPrismBlock) { + level.destroyBlock(checkPos.immutable(), true); + } + checkPos.move(direction); + } + } + + /** + * Heat ember metal blocks in a cross-sectional area normal to the beam. + * Area scales with gamma level: ≥4→1×1, ≥8→3×3, ≥12→5×5×2, ≥16→7×7×3. + */ + private void tryHeatEmberMetal(Direction direction) { + if (this.level == null || gammaLevel < 4) return; + if (this.level.getGameTime() % 20 != 0) return; + + int areaSize; + int thickness; + if (gammaLevel >= 16) { + areaSize = 7; + thickness = 3; + } else if (gammaLevel >= 12) { + areaSize = 5; + thickness = 2; + } else if (gammaLevel >= 8) { + areaSize = 3; + thickness = 1; + } else { + areaSize = 1; + thickness = 1; + } + + int halfSize = areaSize / 2; + BlockPos hitPos = this.irradiateBlockPos; + if (hitPos == null) return; + + Direction[] perpendiculars = switch (direction.getAxis()) { + case X -> new Direction[]{Direction.UP, Direction.NORTH}; + case Z -> new Direction[]{Direction.UP, Direction.EAST}; + default -> new Direction[]{Direction.NORTH, Direction.EAST}; + }; + + for (int depth = 0; depth < thickness; depth++) { + BlockPos depthPos = hitPos.relative(direction, depth); + for (int a = -halfSize; a <= halfSize; a++) { + for (int b = -halfSize; b <= halfSize; b++) { + BlockPos target = depthPos + .relative(perpendiculars[0], a) + .relative(perpendiculars[1], b); + tryHeatEmberMetalAt(target); + } + } + } + } + + /** + * Upgrade or refresh a single ember metal block at the given position. + */ + private void tryHeatEmberMetalAt(BlockPos pos) { + BlockState state = this.level.getBlockState(pos); + if (state.is(ModBlocks.EMBER_METAL_BLOCK.get())) { + Block overheatedBlock = ModBlocks.OVERHEATED_EMBER_METAL_BLOCK.get(); + this.level.setBlock(pos, overheatedBlock.defaultBlockState(), 3); + if (overheatedBlock instanceof EntityBlock entityBlock) { + BlockEntity be = entityBlock.newBlockEntity(pos, overheatedBlock.defaultBlockState()); + if (be instanceof dev.dubhe.anvilcraft.block.entity.heatable.HeatableBlockEntity heatable) { + this.level.setBlockEntity(heatable); + heatable.addDurationInTick(80); + } + } + } else if (state.is(ModBlocks.OVERHEATED_EMBER_METAL_BLOCK.get())) { + BlockEntity be = this.level.getBlockEntity(pos); + if (be instanceof dev.dubhe.anvilcraft.block.entity.heatable.HeatableBlockEntity heatable) { + heatable.addDurationInTick(80); + } + } + } + + @Nullable + private Cube323PartHalf findSideFromParent(CelestialForgingAnvilBlockEntity parent) { + for (var entry : parent.getPortals().entrySet()) { + if (entry.getValue().equals(worldPosition)) { + return entry.getKey(); + } + } + // Fallback: compute from position. + BlockPos cfaPos = parent.getBlockPos(); + int dx = worldPosition.getX() - cfaPos.getX(); + int dz = worldPosition.getZ() - cfaPos.getZ(); + if (dx == -2 && dz == 0) return Cube323PartHalf.BOTTOM_W; + if (dx == 2 && dz == 0) return Cube323PartHalf.BOTTOM_E; + if (dx == 0 && dz == -2) return Cube323PartHalf.BOTTOM_N; + if (dx == 0 && dz == 2) return Cube323PartHalf.BOTTOM_S; + return null; + } + + /** + * Send laser render packets to clients tracking this chunk. + */ + private void sendLaserPackets() { + if (level instanceof ServerLevel serverLevel && changed) { + PacketDistributor.sendToPlayersTrackingChunk( + serverLevel, + level.getChunkAt(getBlockPos()).getPos(), + new LaserEmitPacket(getLaserLevel(), getBlockPos(), this.irradiateBlockPos, this.emittingGamma) + ); + resetState(); + } + } + + @Override + public void setRemoved() { + // Unregister portal from parent CFA before super.setRemoved() + if (this.level != null && !level.isClientSide()) { + CelestialForgingAnvilBlockEntity parent = findParentCfa(); + if (parent != null) { + Cube323PartHalf side = findSideFromParent(parent); + if (side != null) { + parent.removePortal(side); + } + } + } + super.setRemoved(); + if (this.level != null && level.isClientSide()) { + CachedBlockEntityRenderingPipeline.getInstance().update(this); + } + } + + /** + * Drop mined items at the broken ore position rather than behind the portal, + * so drops don't get trapped inside the CFA structure. + */ + @Override + public void deliverItem(List drops, Direction direction, BlockPos sourceBlockPos) { + if (this.level == null) return; + for (ItemStack itemStack : drops) { + this.level.addFreshEntity(new ItemEntity( + this.level, + sourceBlockPos.getX() + 0.5, + sourceBlockPos.getY() + 1.5, + sourceBlockPos.getZ() + 0.5, + itemStack + )); + } + } + + // === NBT persistence (26.1: ValueOutput/ValueInput for disk) === + + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putBoolean("emittingGamma", emittingGamma); + output.putInt("gammaLevel", gammaLevel); + output.putBoolean("lastWaterlogged", lastWaterlogged); + } + + @Override + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.emittingGamma = input.getBooleanOr("emittingGamma", false); + this.gammaLevel = input.getIntOr("gammaLevel", 0); + this.lastWaterlogged = input.getBooleanOr("lastWaterlogged", false); + } + + // === Network sync (26.1: getUpdateTag still CompoundTag-based) === + + @Override + public CompoundTag getUpdateTag(net.minecraft.core.HolderLookup.Provider registries) { + CompoundTag tag = super.getUpdateTag(registries); + tag.putBoolean("emittingGamma", emittingGamma); + tag.putInt("gammaLevel", gammaLevel); + return tag; + } + + @Override + public @Nullable Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaInterfaceScanner.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaInterfaceScanner.java new file mode 100644 index 0000000000..633c955ad2 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaInterfaceScanner.java @@ -0,0 +1,95 @@ +package dev.dubhe.anvilcraft.block.entity; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +public final class CfaInterfaceScanner { + + private CfaInterfaceScanner() { + } + + public static void scanAdjacentBlocks(BlockPos controllerPos, Level level, Consumer consumer) { + if (level == null) return; + int y = controllerPos.getY(); + int cx = controllerPos.getX(); + int cz = controllerPos.getZ(); + for (int dx = -1; dx <= 1; dx++) { + consumer.accept(new BlockPos(cx + dx, y, cz - 2)); + } + for (int dx = -1; dx <= 1; dx++) { + consumer.accept(new BlockPos(cx + dx, y, cz + 2)); + } + for (int dz = -1; dz <= 1; dz++) { + consumer.accept(new BlockPos(cx - 2, y, cz + dz)); + } + for (int dz = -1; dz <= 1; dz++) { + consumer.accept(new BlockPos(cx + 2, y, cz + dz)); + } + } + + public static List findLaserInterfaces( + Level level, BlockPos controllerPos + ) { + List result = new ArrayList<>(); + if (level == null) return result; + scanAdjacentBlocks(controllerPos, level, (checkPos) -> { + BlockEntity be = level.getBlockEntity(checkPos); + if (be instanceof CelestialForgingAnvilLaserInterfaceBlockEntity laserBe) { + result.add(laserBe); + } + }); + return result; + } + + public static List> findLogisticsInterfaces(Level level, BlockPos controllerPos) { + List> result = new ArrayList<>(); + if (level == null) return result; + scanAdjacentBlocks(controllerPos, level, (checkPos) -> { + BlockEntity be = level.getBlockEntity(checkPos); + if (be instanceof CelestialForgingAnvilLogisticsInterfaceBlockEntity logisticsBe) { + result.add(logisticsBe.getItemHandler()); + } + }); + return result; + } + + public static List findFluidInterfaces( + Level level, BlockPos controllerPos + ) { + List result = new ArrayList<>(); + if (level == null) return result; + scanAdjacentBlocks(controllerPos, level, (checkPos) -> { + BlockEntity be = level.getBlockEntity(checkPos); + if (be instanceof CelestialForgingAnvilFluidInterfaceBlockEntity fluidBe) { + result.add(fluidBe); + } + }); + return result; + } + + public static Map getInterfacesMap( + Class type, Level level, BlockPos controllerPos + ) { + Map result = new HashMap<>(); + if (level == null) return result; + scanAdjacentBlocks(controllerPos, level, (checkPos) -> { + BlockEntity be = level.getBlockEntity(checkPos); + if (type.isInstance(be)) { + BlockPos relOffset = new BlockPos( + checkPos.getX() - controllerPos.getX(), 0, + checkPos.getZ() - controllerPos.getZ()); + result.put(relOffset, type.cast(be)); + } + }); + return result; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaMegastructureManager.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaMegastructureManager.java new file mode 100644 index 0000000000..ed5242cbeb --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaMegastructureManager.java @@ -0,0 +1,232 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.dubhe.anvilcraft.api.power.PowerComponentType; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorRegistry; +import dev.dubhe.anvilcraft.block.entity.megastructure.AcceleratorHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.ColliderHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.DysonSphereHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.EcoStationHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.ExcavatorHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.ExtractorHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.GiantExtractorHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.IMegastructureHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.MagnetarCoilHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.MatterDecompressorHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.PenroseSphereHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.TempleHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.WormholeStabilizerHandler; +import lombok.Getter; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import org.jspecify.annotations.Nullable; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class CfaMegastructureManager { + private int activeMegastructureIndex = -1; + + private final Map handlers = new LinkedHashMap<>(); + @Getter + private final AcceleratorHandler acceleratorHandler; + + public CfaMegastructureManager() { + registerHandler(new ExcavatorHandler()); + registerHandler(new ExtractorHandler()); + registerHandler(new GiantExtractorHandler()); + registerHandler(new ColliderHandler()); + registerHandler(new DysonSphereHandler("dyson_sphere_small")); + registerHandler(new DysonSphereHandler("dyson_sphere_large")); + registerHandler(new MagnetarCoilHandler()); + registerHandler(new PenroseSphereHandler()); + registerHandler(new MatterDecompressorHandler()); + registerHandler(new WormholeStabilizerHandler()); + registerHandler(new EcoStationHandler()); + registerHandler(new TempleHandler()); + this.acceleratorHandler = new AcceleratorHandler(); + } + + private void registerHandler(IMegastructureHandler handler) { + handlers.put(handler.name(), handler); + } + + public int getActiveIndex() { + return activeMegastructureIndex; + } + + @Nullable + public IMegastructureHandler getActiveHandler(CelestialForgingAnvilBlockEntity be) { + CelestialRefactorOption option = getActiveOption(be); + if (option == null) return null; + return handlers.get(option.megastructure()); + } + + @Nullable + public CelestialRefactorOption getActiveOption(CelestialForgingAnvilBlockEntity be) { + if (activeMegastructureIndex < 0 || be.getCelestialBodyData() == null) return null; + var options = CelestialRefactorRegistry.getOptions( + be.getCelestialBodyData(), + be.isAmplify(), + be.getPlanetaryResourceSet() + ); + if (activeMegastructureIndex >= options.size()) return null; + return options.get(activeMegastructureIndex); + } + + @Nullable + @SuppressWarnings("unchecked") + public T findHandler(Class type) { + for (var handler : handlers.values()) { + if (type.isInstance(handler)) return (T) handler; + } + return null; + } + + public WormholeStabilizerHandler getWormholeHandler() { + return findHandler(WormholeStabilizerHandler.class); + } + + // === Tick === + + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (activeMegastructureIndex >= 0) { + IMegastructureHandler active = getActiveHandler(be); + if (active != null) { + active.serverTick(be); + } + syncLaserRequirements(be); + } + if (acceleratorHandler.isActive()) { + acceleratorHandler.serverTick(be); + } + } + + // === Laser requirements === + + public void syncLaserRequirements(CelestialForgingAnvilBlockEntity be) { + IMegastructureHandler active = getActiveHandler(be); + if (active == null) { + clearAllLaserRequirements(be); + return; + } + var lasers = CfaInterfaceScanner.findLaserInterfaces(be.getLevel(), be.getBlockPos()); + String name = active.name(); + if ("planet_excavator".equals(name)) { + for (var laser : lasers) { + laser.setLaserRequirement(16, false); + } + } else if ("matter_decompressor".equals(name)) { + for (var laser : lasers) { + laser.setLaserRequirement(1, true); + } + } else { + clearAllLaserRequirements(be); + } + } + + private void clearAllLaserRequirements(CelestialForgingAnvilBlockEntity be) { + var lasers = CfaInterfaceScanner.findLaserInterfaces(be.getLevel(), be.getBlockPos()); + for (var laser : lasers) { + laser.setLaserRequirement(0, false); + } + } + + // === Build / Clear === + + public void buildMegastructure(int optionIndex, CelestialForgingAnvilBlockEntity be) { + var body = be.getCelestialBodyData(); + if (body == null) return; + var options = be.getClientVisibleOptions(); + if (optionIndex < 0 || optionIndex >= options.size()) return; + CelestialRefactorOption option = options.get(optionIndex); + if ("stellar_evolution_accelerator".equals(option.megastructure())) { + acceleratorHandler.onBuild(be); + return; + } + if (activeMegastructureIndex >= 0) return; + this.activeMegastructureIndex = optionIndex; + IMegastructureHandler handler = handlers.get(option.megastructure()); + if (handler != null) { + handler.onBuild(be); + } + } + + public void clearMegastructure(CelestialForgingAnvilBlockEntity be) { + if (activeMegastructureIndex >= 0) { + IMegastructureHandler handler = getActiveHandler(be); + if (handler != null) { + handler.onClear(be); + } + } + this.activeMegastructureIndex = -1; + clearAllLaserRequirements(be); + } + + public void clearAllMegastructures(CelestialForgingAnvilBlockEntity be) { + acceleratorHandler.onClear(be); + clearMegastructure(be); + } + + // === Persistence: disk (ValueOutput/ValueInput) === + + public void saveAdditional(ValueOutput output) { + output.putInt("activeMegastructure", activeMegastructureIndex); + for (var handler : handlers.values()) { + handler.saveAdditional(output); + } + acceleratorHandler.saveAdditional(output); + } + + public void loadAdditional(ValueInput input) { + this.activeMegastructureIndex = input.getIntOr("activeMegastructure", -1); + for (var handler : handlers.values()) { + handler.loadAdditional(input); + } + acceleratorHandler.loadAdditional(input); + } + + // === Network sync (still CompoundTag-based) === + + public void writeUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + tag.putInt("activeMegastructure", activeMegastructureIndex); + for (var handler : handlers.values()) { + handler.writeUpdateTag(tag, registries); + } + acceleratorHandler.writeUpdateTag(tag, registries); + } + + public void readUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + this.activeMegastructureIndex = tag.getIntOr("activeMegastructure", -1); + for (var handler : handlers.values()) { + handler.readUpdateTag(tag, registries); + } + acceleratorHandler.readUpdateTag(tag, registries); + } + + // === Power === + + public int getInputPower(CelestialForgingAnvilBlockEntity be) { + IMegastructureHandler handler = getActiveHandler(be); + return handler != null ? handler.getInputPower(be) : 0; + } + + public int getOutputPower(CelestialForgingAnvilBlockEntity be) { + IMegastructureHandler handler = getActiveHandler(be); + return handler != null ? handler.getOutputPower(be) : 0; + } + + public PowerComponentType getComponentType(CelestialForgingAnvilBlockEntity be) { + IMegastructureHandler handler = getActiveHandler(be); + if (handler != null) return handler.getComponentType(); + return PowerComponentType.CONSUMER; + } + + public void gridTick(CelestialForgingAnvilBlockEntity be) { + IMegastructureHandler handler = getActiveHandler(be); + if (handler != null) handler.gridTick(be); + acceleratorHandler.gridTick(be); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ChargeCollectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ChargeCollectorBlockEntity.java index 04d4d6055b..9bd89aa605 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ChargeCollectorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ChargeCollectorBlockEntity.java @@ -3,21 +3,23 @@ import dev.dubhe.anvilcraft.api.power.IPowerProducer; import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; -import dev.dubhe.anvilcraft.block.ChargeCollectorBlock; +import dev.dubhe.anvilcraft.block.power.generator.ChargeCollectorBlock; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.network.ChargeCollectorIncomingChargePacket; import lombok.Getter; +import lombok.Setter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.LinkedList; import java.util.List; @@ -43,7 +45,9 @@ public boolean add(Integer integer) { }; private int outputCooldownCount = 10; private double chargeCount = 0; - private PowerGrid grid = null; + @Getter + @Setter + private @Nullable PowerGrid grid = null; private int power = 0; @Getter private int time = 0; @@ -81,42 +85,32 @@ public BlockPos getPos() { return this.getBlockPos(); } - @Override - public void setGrid(@Nullable PowerGrid grid) { - this.grid = grid; - } - - @Override - public @Nullable PowerGrid getGrid() { - return this.grid; - } - @Override public int getOutputPower() { return this.power; } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.inputCooldownCount = tag.getInt("InputCooldownCount"); - this.outputCooldownCount = tag.getInt("OutputCooldownCount"); - this.chargeCount = tag.getDouble("ChargeCount"); - this.power = tag.getInt("Power"); - int[] charges = tag.getIntArray("Charges"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.inputCooldownCount = input.getIntOr("InputCooldownCount", 2); + this.outputCooldownCount = input.getIntOr("OutputCooldownCount", 10); + this.chargeCount = input.getDoubleOr("ChargeCount", 0); + this.power = input.getIntOr("Power", 0); + int[] charges = input.getIntArray("Charges").orElse(new int[0]); for (int i : charges) { this.charges.add(i); } } @Override - public void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - tag.putInt("InputCooldownCount", this.inputCooldownCount); - tag.putInt("OutputCooldownCount", this.outputCooldownCount); - tag.putDouble("ChargeCount", this.chargeCount); - tag.putInt("Power", this.power); - tag.putIntArray("Charges", this.charges); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("InputCooldownCount", this.inputCooldownCount); + output.putInt("OutputCooldownCount", this.outputCooldownCount); + output.putDouble("ChargeCount", this.chargeCount); + output.putInt("Power", this.power); + output.putIntArray("Charges", this.charges.stream().mapToInt(i -> i).toArray()); } @Override @@ -143,12 +137,10 @@ public void gridTick() { } } - /** - * 向集电器添加电荷 - * - * @param num 添加至收集器的电荷数 - * @return 溢出的电荷数(即未被添加至收集器的电荷数) - */ + /// 向集电器添加电荷 + /// + /// @param num 添加至收集器的电荷数 + /// @return 溢出的电荷数(即未被添加至收集器的电荷数) public double incomingCharge(double num, BlockPos srcPos) { double overflow = num - (MAX_POWER_PER_INCOMING - this.chargeCount); if (overflow < 0) { @@ -157,7 +149,7 @@ public double incomingCharge(double num, BlockPos srcPos) { double acceptableChargeCount = num - overflow; PacketDistributor.sendToPlayersTrackingChunk( (ServerLevel) this.level, - this.level.getChunkAt(worldPosition).getPos(), + ChunkPos.containing(worldPosition), new ChargeCollectorIncomingChargePacket( srcPos, this.worldPosition, diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ChargerBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ChargerBlockEntity.java index 419e7ddc4d..44061d0726 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ChargerBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ChargerBlockEntity.java @@ -1,14 +1,14 @@ package dev.dubhe.anvilcraft.block.entity; +import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.IHasDisplayItem; import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; import dev.dubhe.anvilcraft.api.power.IPowerConsumer; -import dev.dubhe.anvilcraft.api.power.IPowerProducer; +import dev.dubhe.anvilcraft.api.power.PowerComponentInfo; import dev.dubhe.anvilcraft.api.power.PowerComponentType; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.ChargerBlock; -import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.block.power.generator.ChargerBlock; import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; import dev.dubhe.anvilcraft.network.ChargerSyncPacket; import dev.dubhe.anvilcraft.network.UpdateDisplayItemPacket; @@ -17,178 +17,223 @@ import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.Containers; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.SingleRecipeInput; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.access.ItemAccess; +import net.neoforged.neoforge.transfer.energy.EnergyHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; +import org.jspecify.annotations.Nullable; import java.util.Optional; public class ChargerBlockEntity extends BlockEntity - implements IPowerConsumer, IPowerProducer, IFilterBlockEntity, IStateListener, IItemHandlerHolder, IHasDisplayItem { + implements IPowerConsumer, IFilterBlockEntity, IStateListener, IItemResourceHandlerHolder, IHasDisplayItem { - @Setter - private boolean isCharger; + @Getter @Setter private int timeLeft = 0; + @Getter @Setter private int timeTotalCache = 0; private int powerValue = 0; + @Getter + @Setter + private boolean isFeCharging = false; + private boolean isFeCharged = false; // FE 充电已完成,等待移出 + private int feCooldown = 0; private int signalCache = 0; - @Getter private final FilteredItemStackHandler itemHandler = new FilteredItemStackHandler(3) { @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (slot == 0 && itemHandler.getStackInSlot(0).isEmpty()) { - ItemStack original = stack.copy(); - original.shrink(1); - if (original.isEmpty()) { - return super.insertItem(slot, stack.copyWithCount(1), simulate); - } else { - ItemStack left = super.insertItem(slot, stack.copyWithCount(1), simulate); - return stack.copyWithCount(stack.getCount() - 1 + left.getCount()); - } - } else { - return stack; - } + public boolean isValid(int index, ItemResource resource) { + // 只允许从输入槽(slot 0)放入物品 + if (index != 0) return false; + return super.isValid(index, resource); } @Override - public boolean isItemValid(int slot, ItemStack stack) { - return containsValidItem(stack); + public int getSlotLimit(int slot) { + return 1; } @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - return slot == 2 ? super.extractItem(2, amount, simulate) : ItemStack.EMPTY; + protected int getCapacity(int index, ItemResource resource) { + return this.getSlotLimit(index); } @Override - protected void onContentsChanged(int slot) { - super.onContentsChanged(slot); - if (level != null && !level.isClientSide) { - setChanged(); - updateDisplayItemStack(); - level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 3); - } + public int extract(int index, ItemResource resource, int maxExtract, TransactionContext transaction) { + // 漏斗只能从输出槽(slot 2)抽取物品 + if (index != 2) return 0; + return super.extract(index, resource, maxExtract, transaction); + } + + @Override + protected void onContentsChanged(int index, ItemStack previousContents) { + super.onContentsChanged(index, previousContents); + Level level = ChargerBlockEntity.this.getLevel(); + if (level == null || level.isClientSide()) return; + ChargerBlockEntity.this.setChanged(); + ChargerBlockEntity.this.updateDisplayItemStack(); + level.sendBlockUpdated( + ChargerBlockEntity.this.getBlockPos(), + ChargerBlockEntity.this.getBlockState(), + ChargerBlockEntity.this.getBlockState(), + Block.UPDATE_ALL + ); } }; @Getter private ItemStack displayItemStack = ItemStack.EMPTY; - + @Getter @Setter - private PowerGrid grid; + private @Nullable PowerGrid grid; public ChargerBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); - isCharger = blockState.is(ModBlocks.CHARGER.get()); } - public boolean containsValidItem(ItemStack stack) { - SingleRecipeInput input = new SingleRecipeInput(stack); - if (level != null) { - Optional> x = level.getRecipeManager() - .getRecipeFor(ModRecipeTypes.CHARGER_CHARGING_TYPE.get(), input, level); - if (x.isPresent()) { - if (x.get().value().power == 0) return false; - return isCharger == x.get().value().power < 0; - } + public boolean containsValidItem(ItemResource resource) { + SingleRecipeInput input = new SingleRecipeInput(resource.toStack()); + if (!(this.getLevel() instanceof ServerLevel serverLevel)) return false; + Optional> recipe = serverLevel.recipeAccess().getRecipeFor( + ModRecipeTypes.CHARGER_CHARGING.get(), + input, + serverLevel + ); + if (recipe.isPresent()) { + if (recipe.get().value().power() == 0) return false; + return recipe.get().value().power() < 0; // 充电器使用power < 0的配方 } - return false; + // 检查FE充电能力 + ItemStack stack = resource.toStack(); + if (stack.isEmpty()) return false; + EnergyHandler energyHandler = Capabilities.Energy.ITEM.getCapability(stack, ItemAccess.forStack(stack)); + if (energyHandler == null) return false; + return energyHandler.getAmountAsInt() < energyHandler.getCapacityAsInt(); } @Nullable - private ChargerChargingRecipe getItemRecipe(ItemStack stack) { - SingleRecipeInput input = new SingleRecipeInput(stack); - if (level != null) { - Optional> x = level.getRecipeManager() - .getRecipeFor(ModRecipeTypes.CHARGER_CHARGING_TYPE.get(), input, level); - if (x.isPresent()) { - return x.get().value(); - } - } - return null; + private ChargerChargingRecipe getItemRecipe(ItemResource resource) { + SingleRecipeInput input = new SingleRecipeInput(resource.toStack()); + if (!(this.getLevel() instanceof ServerLevel serverLevel)) return null; + Optional> recipe = serverLevel.recipeAccess().getRecipeFor( + ModRecipeTypes.CHARGER_CHARGING.get(), + input, + serverLevel + ); + return recipe.map(RecipeHolder::value).orElse(null); } - private boolean checkRecipeItemNotValid(@Nullable ChargerChargingRecipe recipe, @SuppressWarnings("unused") ItemStack stack) { - if (recipe != null) { - if (recipe.power == 0) return true; - return isCharger != recipe.power < 0; - } - return true; + private boolean checkRecipeItemNotValid(@Nullable ChargerChargingRecipe recipe) { + if (recipe == null) return true; + if (recipe.power() == 0) return true; + return recipe.power() >= 0; // 充电器只接受power < 0的配方 } private void moveItemToTransformingSlot() { - ItemStack stack = itemHandler.getStackInSlot(0).copy(); - if (stack.isEmpty()) return; - if (!itemHandler.getStackInSlot(1).isEmpty()) return; - ChargerChargingRecipe recipe = getItemRecipe(stack); - if (checkRecipeItemNotValid(recipe, stack)) return; - itemHandler.setStackInSlot(0, ItemStack.EMPTY); - if (isCharger) { - itemHandler.setStackInSlot(1, stack); - } else { - ItemStack transformed = recipe.getResult().copy(); - itemHandler.setStackInSlot(1, transformed); + ItemResource resource = this.itemHandler.getResource(0); + if (resource.isEmpty()) return; + if (!this.itemHandler.getResource(1).isEmpty()) return; + + ChargerChargingRecipe recipe = this.getItemRecipe(resource); + if (!this.checkRecipeItemNotValid(recipe)) { + this.isFeCharging = false; + this.itemHandler.set(0, ItemResource.EMPTY, 0); + this.itemHandler.set(1, resource, 1); + this.timeLeft = recipe.time() + 1; // since there is a "timeLeft--" after this, here +1 to negate + this.timeTotalCache = recipe.time(); + this.powerValue = recipe.power(); + this.syncPacket(); + return; } - timeLeft = recipe.time + 1; // since there is a "timeLeft--" after this, here +1 to negate - timeTotalCache = recipe.time; // make a total time cache for client display - powerValue = recipe.power; + + // FE充电:物品可接收FE时开始充电 + ItemStack stack = this.itemHandler.getStacks().get(0).copy(); + EnergyHandler energyHandler = Capabilities.Energy.ITEM.getCapability(stack, ItemAccess.forStack(stack)); + if (energyHandler != null + && energyHandler.getAmountAsInt() < energyHandler.getCapacityAsInt() + ) { + this.isFeCharging = true; + this.feCooldown = 0; + this.itemHandler.set(0, ItemResource.EMPTY, 0); + this.itemHandler.set(1, resource, 1); + int remainingFE = energyHandler.getCapacityAsInt() - energyHandler.getAmountAsInt(); + this.timeLeft = remainingFE; + this.timeTotalCache = energyHandler.getCapacityAsInt(); + this.powerValue = -64; + this.syncPacket(); + } + } + + private void syncPacket() { if (this.getCurrentLevel() == null || !(this.getCurrentLevel() instanceof ServerLevel serverLevel)) return; PacketDistributor.sendToPlayersTrackingChunk( serverLevel, serverLevel.getChunk(this.getBlockPos()).getPos(), - new ChargerSyncPacket(this.getPos(), this.timeLeft, this.timeTotalCache)); + new ChargerSyncPacket(this.getPos(), this.timeLeft, this.timeTotalCache, this.isFeCharging)); } private void moveItemToTransformedOverSlot() { - ItemStack stack = itemHandler.getStackInSlot(1).copy(); - if (stack.isEmpty()) return; - if (!itemHandler.getStackInSlot(2).isEmpty()) { - powerValue = 0; + ItemResource resource = this.itemHandler.getResource(1); + if (resource.isEmpty()) return; + // 输出槽被占 → 维持原始物品在加工槽,下一tick继续尝试 + if (!this.itemHandler.getResource(2).isEmpty()) { + this.powerValue = 0; return; } - if (isCharger) { - ChargerChargingRecipe recipe = getItemRecipe(stack); - if (checkRecipeItemNotValid(recipe, stack)) return; - ItemStack transformed = recipe.getResult().copy(); - itemHandler.setStackInSlot(2, transformed); + + if (this.isFeCharging || this.isFeCharged) { + this.isFeCharged = false; + this.itemHandler.set(2, resource, 1); } else { - itemHandler.setStackInSlot(2, stack); + ChargerChargingRecipe recipe = this.getItemRecipe(resource); + if (recipe == null || this.checkRecipeItemNotValid(recipe)) { + // 非配方物品直接移回输入槽 + this.itemHandler.set(0, resource, 1); + } else { + ItemStackTemplate transformed = recipe.result(); + this.itemHandler.set(2, ItemResource.of(transformed), transformed.count()); + } } - itemHandler.setStackInSlot(1, ItemStack.EMPTY); - powerValue = 0; + this.itemHandler.set(1, ItemResource.EMPTY, 0); + this.powerValue = 0; + this.isFeCharging = false; } private void updateDisplayItemStack() { - ItemStack newDisplayStack = getDisplayItemStackForRender(); - if (!ItemStack.matches(displayItemStack, newDisplayStack)) { - displayItemStack = newDisplayStack.copy(); - PacketDistributor.sendToPlayersTrackingChunk( - (ServerLevel) level, - level.getChunk(getBlockPos()).getPos(), - new UpdateDisplayItemPacket(displayItemStack, getPos()) - ); - } + ItemStack newDisplayStack = this.getDisplayItemStackForRender(); + if (ItemStack.matches(this.displayItemStack, newDisplayStack)) return; + this.displayItemStack = newDisplayStack.copy(); + PacketDistributor.sendToPlayersTrackingChunk( + (ServerLevel) this.level, + this.level.getChunk(this.getBlockPos()).getPos(), + new UpdateDisplayItemPacket(this.displayItemStack, this.getPos()) + ); } private ItemStack getDisplayItemStackForRender() { for (int i = 2; i >= 0; i--) { - if (!itemHandler.getStackInSlot(i).isEmpty()) { - return itemHandler.getStackInSlot(i); + if (!this.itemHandler.getResource(i).isEmpty()) { + return this.itemHandler.getResource(i).toStack(this.itemHandler.getAmountAsInt(i)); } } return ItemStack.EMPTY; @@ -201,59 +246,101 @@ public void updateDisplayItem(ItemStack stack) { @Override public BlockPos getPos() { - return getBlockPos(); + return this.getBlockPos(); } @Override public @Nullable Level getCurrentLevel() { - return getLevel(); + return this.getLevel(); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.putInt("TimeLeft", timeLeft); - tag.put("Depository", itemHandler.serializeNBT(provider)); - tag.putBoolean("Mode", isCharger); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("TimeLeft", this.timeLeft); + output.putInt("TimeTotalCache", this.timeTotalCache); + this.itemHandler.serialize(output.child("Depository")); + output.putBoolean("FeCharging", this.isFeCharging); + output.putBoolean("FeCharged", this.isFeCharged); + output.putInt("FeCooldown", this.feCooldown); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - timeLeft = tag.getInt("TimeLeft"); - itemHandler.deserializeNBT(provider, tag.getCompound("Depository")); - isCharger = tag.getBoolean("Mode"); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.timeLeft = input.getIntOr("TimeLeft", 0); + this.timeTotalCache = input.getIntOr("TimeTotalCache", 0); + this.itemHandler.deserialize(input.childOrEmpty("Depository")); + this.isFeCharging = input.getBooleanOr("FeCharging", false); + this.isFeCharged = input.getBooleanOr("FeCharged", false); + this.feCooldown = input.getIntOr("FeCooldown", 0); } @Override public int getInputPower() { - return isCharger && !this.getBlockState().getValue(ChargerBlock.POWERED) ? -powerValue : 0; + if (this.getBlockState().getValue(ChargerBlock.POWERED)) return 0; + return -this.powerValue; + } + + private int getFeChargingPowerLevel() { + if (this.grid == null) return 0; + int remaining = this.grid.getRemaining(); + if (remaining >= 512) return 512; + if (remaining >= 256) return 256; + if (remaining >= 128) return 128; + if (remaining >= 64) return 64; + return 0; + } + + @Nullable + public ItemStack tryExtractItemFromSlot1() { + ItemStack stack = this.itemHandler.getStacks().get(1).copy(); + if (stack.isEmpty()) return null; + this.itemHandler.set(1, ItemResource.EMPTY, 0); + this.isFeCharging = false; + this.feCooldown = 0; + this.timeLeft = 0; + this.powerValue = 0; + this.setChanged(); + return stack; } @Override public PowerComponentType getComponentType() { - return isCharger ? PowerComponentType.CONSUMER : PowerComponentType.PRODUCER; + return PowerComponentType.CONSUMER; + } + + public void stopProcessing() { + this.timeLeft = 0; + this.timeTotalCache = 0; + this.isFeCharging = false; + this.feCooldown = 0; + this.powerValue = 0; } - @Override public int getOutputPower() { - return !isCharger && !this.getBlockState().getValue(ChargerBlock.POWERED) ? powerValue : 0; + return 0; } public double getProgress() { - if (this.timeTotalCache != 0) return 1 - (double) timeLeft / timeTotalCache; - return 0; + if (this.timeTotalCache == 0) return 0; + return Math.max(0, Math.min(1, 1 - (double) this.timeLeft / this.timeTotalCache)); } public int getAnalogRedstoneSignal() { double progress = this.getProgress(); - if (itemHandler.getStackInSlot(0).isEmpty() && itemHandler.getStackInSlot(1).isEmpty()) return 0; + if (this.itemHandler.getResource(0).isEmpty() && this.itemHandler.getResource(1).isEmpty()) return 0; return (int) Math.round(progress * 15); } @Override public FilteredItemStackHandler getFilteredItemStackHandler() { - return itemHandler; + return this.itemHandler; + } + + @Override + public ResourceHandler getItemHandler() { + return this.itemHandler; } @Override @@ -263,74 +350,124 @@ public boolean isFilterEnabled() { @Override public boolean isSlotDisabled(int slot) { - return timeLeft > 0; + return this.timeLeft > 0; } @Override public Boolean getState() { - return isCharger; + return Boolean.TRUE; } @Override public void notifyStateChanged(Boolean newState) { - isCharger = newState; - ItemStack stack0 = itemHandler.getStackInSlot(0).copy(); - ItemStack stack1 = itemHandler.getStackInSlot(1).copy(); - ItemStack stack2 = itemHandler.getStackInSlot(2).copy(); - dropItemStack(stack0); - dropItemStack(stack1); - dropItemStack(stack2); - itemHandler.setStackInSlot(0, ItemStack.EMPTY); - itemHandler.setStackInSlot(1, ItemStack.EMPTY); - itemHandler.setStackInSlot(2, ItemStack.EMPTY); - timeLeft = 0; - powerValue = 0; - } - - private void dropItemStack(ItemStack stack1) { - if (!stack1.isEmpty()) { - if (level != null) { - Vec3 dropPos = getBlockPos().above().getBottomCenter(); - ItemEntity itemEntity = new ItemEntity(level, dropPos.x, dropPos.y, dropPos.z, - stack1, 0, 0, 0); - itemEntity.setDefaultPickUpDelay(); - } + ItemStack stack0 = this.itemHandler.getStacks().get(0).copy(); + ItemStack stack1 = this.itemHandler.getStacks().get(1).copy(); + ItemStack stack2 = this.itemHandler.getStacks().get(2).copy(); + this.dropItemStack(stack0); + this.dropItemStack(stack1); + this.dropItemStack(stack2); + this.itemHandler.set(0, ItemResource.EMPTY, 0); + this.itemHandler.set(1, ItemResource.EMPTY, 0); + this.itemHandler.set(2, ItemResource.EMPTY, 0); + this.timeLeft = 0; + this.isFeCharging = false; + this.feCooldown = 0; + this.powerValue = 0; + } + + private void dropItemStack(ItemStack stack) { + if (!stack.isEmpty() && this.level != null) { + Containers.dropItemStack(this.level, + this.getBlockPos().getX() + 0.5, + this.getBlockPos().getY() + 1.0, + this.getBlockPos().getZ() + 0.5, + stack); } } - /** - * 充放电器逻辑 - */ - public void tick(Level level1, BlockPos blockPos) { - this.flushState(level1, blockPos); - BlockState state = level1.getBlockState(blockPos); + /// 充电器逻辑 + public void tick(Level level, BlockPos blockPos) { + flushState(level, blockPos); + BlockState state = level.getBlockState(blockPos); boolean powered = state.getValue(ChargerBlock.POWERED); - if (grid == null) return; + if (this.grid == null) return; if (powered) return; - if (timeLeft == 0) { - moveItemToTransformingSlot(); + if (this.timeLeft == 0) { + this.moveItemToTransformingSlot(); } - if (timeLeft > 0) { - if (!isCharger || isGridWorking()) { - // if isDisCharger or (isCharger and isGridWorking) - timeLeft--; + if (this.timeLeft > 0) { + if (this.isFeCharging) { + this.powerValue = -(this.getFeChargingPowerLevel()); + } + if (this.isGridWorking()) { + if (this.isFeCharging) { + ItemStack processingStack = this.itemHandler.getStacks().get(1); + if (!processingStack.isEmpty()) { + EnergyHandler storage = Capabilities.Energy.ITEM.getCapability( + processingStack, ItemAccess.forStack(processingStack)); + if (storage != null) { + int powerLevel = this.getFeChargingPowerLevel(); + if (powerLevel > 0) { + int countdown = AnvilCraft.CONFIG.powerConverter.powerConverterCountdown; + int efficiency = AnvilCraft.CONFIG.powerConverter.powerConverterEfficiency; + int remainingFE = storage.getCapacityAsInt() - storage.getAmountAsInt(); + if (remainingFE <= 0) { + this.isFeCharging = false; + this.isFeCharged = true; // 标记充电完成,等待移入输出槽 + this.timeLeft = 0; + this.timeTotalCache = 0; + } else { + int feChargeRate = powerLevel * efficiency; + if (this.feCooldown <= 0) { + this.feCooldown = countdown; + try (var transaction = Transaction.openRoot()) { + storage.insert(feChargeRate * countdown, transaction); + transaction.commit(); + } + } else { + this.feCooldown--; + } + this.timeLeft = remainingFE; + this.timeTotalCache = storage.getCapacityAsInt(); + } + } + } + } + } else { + this.timeLeft--; + } } } - if (timeLeft == 0) { - moveItemToTransformedOverSlot(); - this.timeTotalCache = 0; + if (this.timeLeft == 0) { + boolean hadItem = !this.itemHandler.getResource(1).isEmpty(); + this.moveItemToTransformedOverSlot(); + // 只有成功移出(加工槽空了)才归零timeTotalCache,输出槽满时保留状态继续尝试 + if (this.itemHandler.getResource(1).isEmpty() && hadItem) { + this.timeTotalCache = 0; + } } int signal = this.getAnalogRedstoneSignal(); if (this.signalCache != signal) { this.signalCache = signal; - level1.updateNeighborsAt(this.getBlockPos(), this.getBlockState().getBlock()); + level.updateNeighborsAt(this.getBlockPos(), this.getBlockState().getBlock()); } - if (!(level1 instanceof ServerLevel level2)) return; - if (level2.getGameTime() % 10 != 0) return; + if (!(level instanceof ServerLevel serverLevel)) return; + if (serverLevel.getGameTime() % 10 != 0) return; PacketDistributor.sendToPlayersTrackingChunk( - level2, level2.getChunk(this.getBlockPos()).getPos(), - new ChargerSyncPacket(this.getPos(), this.timeLeft, this.timeTotalCache)); + serverLevel, serverLevel.getChunk(this.getBlockPos()).getPos(), + new ChargerSyncPacket(this.getPos(), this.timeLeft, this.timeTotalCache, this.isFeCharging)); + } + + @Override + public PowerComponentInfo toPowerComponentInfo() { + return IPowerConsumer.super.toPowerComponentInfo(); + } + + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Containers.dropContents(this.level, pos, this.getFilteredItemStackHandler().getStacks()); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ChuteBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ChuteBlockEntity.java index c7eb5ca16d..0030998399 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ChuteBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ChuteBlockEntity.java @@ -1,24 +1,37 @@ package dev.dubhe.anvilcraft.block.entity; -import dev.dubhe.anvilcraft.block.ChuteBlock; +import dev.dubhe.anvilcraft.api.block.entity.IConvertableBlockEntity; +import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; +import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; +import dev.dubhe.anvilcraft.block.logistics.chute.ChuteBlock; import dev.dubhe.anvilcraft.init.ModMenuTypes; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.inventory.ChuteMenu; +import dev.dubhe.anvilcraft.util.AnvilUtil; import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; +import net.minecraft.world.Containers; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; @Getter -public class ChuteBlockEntity extends BaseChuteBlockEntity { +public class ChuteBlockEntity extends BaseChuteBlockEntity implements IConvertableBlockEntity { protected ChuteBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); } @@ -34,7 +47,7 @@ protected boolean validateBlockState(BlockState state) { } @Override - protected DirectionProperty getFacingProperty() { + protected EnumProperty getFacingProperty() { return ChuteBlock.FACING; } @@ -57,9 +70,6 @@ public static ChuteBlockEntity createBlockEntity(BlockEntityType type, BlockP return new ChuteBlockEntity(type, pos, blockState); } - public static void onBlockEntityRegister(BlockEntityType type) { - } - @Override public Component getDisplayName() { return Component.translatable("block.anvilcraft.chute"); @@ -71,4 +81,35 @@ public AbstractContainerMenu createMenu(int i, Inventory inventory, Player playe if (player.isSpectator()) return null; return new ChuteMenu(ModMenuTypes.CHUTE.get(), i, inventory, this); } + + @Override + public Holder> targetTypeHolder() { + return ModBlockEntities.SIMPLE_CHUTE; + } + + @Override + public void convertTo(SimpleChuteBlockEntity newBe) { + List drops = new ArrayList<>(); + FilteredItemStackHandler handler = this.getItemHandler(); + for (int i = 0; i < handler.size(); i++) { + ItemResource resource = handler.getResource(i); + if (resource.isEmpty()) { + continue; + } + int count = handler.getAmountAsInt(i); + try (Transaction transaction = Transaction.openRoot()) { + int inserted = newBe.getItemHandler().insert(resource, count, transaction); + int extracted = handler.extract(i, resource, inserted, transaction); + if (inserted > extracted) { + continue; + } + count -= inserted; + if (count > 0) { + drops.add(resource.toStack(count)); + } + transaction.commit(); + } + } + AnvilUtil.dropItems(drops, this.level, newBe.getBlockPos().getCenter()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ConfinementChamberBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ConfinementChamberBlockEntity.java index 58ab05b6eb..63fe41b92f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ConfinementChamberBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ConfinementChamberBlockEntity.java @@ -1,23 +1,25 @@ package dev.dubhe.anvilcraft.block.entity; import dev.dubhe.anvilcraft.api.IHasDisplayItem; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.network.UpdateDisplayItemPacket; import lombok.Getter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.Containers; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.items.ItemStackHandler; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler; import java.util.concurrent.atomic.AtomicInteger; -public class ConfinementChamberBlockEntity extends BlockEntity implements IItemHandlerHolder, IHasDisplayItem { +public class ConfinementChamberBlockEntity extends BlockEntity implements IItemResourceHandlerHolder, IHasDisplayItem { private static final AtomicInteger COUNTER = new AtomicInteger(0); @Getter private final int id; @@ -37,29 +39,38 @@ public static ConfinementChamberBlockEntity createBlockEntity(BlockEntityType } @Getter - private final ItemStackHandler itemHandler = new ItemStackHandler(1) { + private final ItemStacksResourceHandler itemHandler = new ItemStacksResourceHandler(1) { @Override - protected void onContentsChanged(int slot) { - super.onContentsChanged(slot); - if (level == null || level.isClientSide) return; - PacketDistributor.sendToAllPlayers((new UpdateDisplayItemPacket(getStackInSlot(slot), getBlockPos()))); + protected void onContentsChanged(int index, ItemStack previousContents) { + super.onContentsChanged(index, previousContents); + if (ConfinementChamberBlockEntity.this.level == null || ConfinementChamberBlockEntity.this.level.isClientSide()) return; + PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket( + this.getStackFrom(this.getResource(index), this.getAmountAsInt(index)), + ConfinementChamberBlockEntity.this.getBlockPos() + )); } }; @Override public void updateDisplayItem(ItemStack stack) { - itemHandler.setStackInSlot(0, stack); + this.itemHandler.set(0, ItemResource.of(stack), stack.getCount()); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.put("Inventory", itemHandler.serializeNBT(provider)); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + this.itemHandler.serialize(output.child("Inventory")); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - itemHandler.deserializeNBT(provider, tag.getCompound("Inventory")); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + input.child("Inventory").ifPresent(this.itemHandler::deserialize); + } + + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Containers.dropContents(this.level, pos, this.itemHandler.copyToList()); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CorruptedBeaconBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CorruptedBeaconBlockEntity.java index 8e74fad269..baeb3d0340 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/CorruptedBeaconBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CorruptedBeaconBlockEntity.java @@ -2,7 +2,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; -import dev.dubhe.anvilcraft.block.CorruptedBeaconBlock; +import dev.dubhe.anvilcraft.block.workstation.CorruptedBeaconBlock; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; import dev.dubhe.anvilcraft.recipe.transform.MobTransformInput; @@ -20,18 +20,19 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.tags.BlockTags; -import net.minecraft.util.FastColor; +import net.minecraft.util.ARGB; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.animal.horse.AbstractHorse; -import net.minecraft.world.entity.animal.horse.SkeletonHorse; -import net.minecraft.world.entity.animal.horse.ZombieHorse; +import net.minecraft.world.entity.animal.equine.AbstractHorse; +import net.minecraft.world.entity.animal.equine.SkeletonHorse; +import net.minecraft.world.entity.animal.equine.ZombieHorse; import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BeaconBeamOwner; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -42,9 +43,9 @@ import java.util.Objects; import java.util.Optional; -public class CorruptedBeaconBlockEntity extends BlockEntity { - List beamSections = Lists.newArrayList(); - private List checkingBeamSections = Lists.newArrayList(); +public class CorruptedBeaconBlockEntity extends BlockEntity implements BeaconBeamOwner { + List beamSections = Lists.newArrayList(); + private List checkingBeamSections = Lists.newArrayList(); @Getter int levels; private int lastCheckY; @@ -61,14 +62,12 @@ private CorruptedBeaconBlockEntity(BlockEntityType type, BlockPos pos, BlockS super(type, pos, blockState); } - /** - * 腐化信标方块实体的tick逻辑,用于处理信标光柱的渲染和效果应用 - * - * @param level 方块所在的世界 - * @param pos 方块的位置 - * @param state 方块的状态 - * @param blockEntity 被tick的方块实体 - */ + /// 腐化信标方块实体的tick逻辑,用于处理信标光柱的渲染和效果应用 + /// + /// @param level 方块所在的世界 + /// @param pos 方块的位置 + /// @param state 方块的状态 + /// @param blockEntity 被tick的方块实体 @SuppressWarnings("unused") public static void tick(Level level, BlockPos pos, BlockState state, CorruptedBeaconBlockEntity blockEntity) { int posX = pos.getX(); @@ -85,7 +84,9 @@ public static void tick(Level level, BlockPos pos, BlockState state, CorruptedBe } // 获取当前正在检查的光柱段 - BeaconBeamSection beamSection = blockEntity.checkingBeamSections.isEmpty() ? null : blockEntity.checkingBeamSections.getLast(); + BeaconBeamOwner.Section beamSection = blockEntity.checkingBeamSections.isEmpty() + ? null + : blockEntity.checkingBeamSections.getLast(); // 获取地表高度 int height = level.getHeight(Heightmap.Types.WORLD_SURFACE, posX, posZ); @@ -97,20 +98,20 @@ public static void tick(Level level, BlockPos pos, BlockState state, CorruptedBe if (colorMultiplier != null) { // 如果当前检查的光柱段为空或只有一段,则创建新的光柱段 if (blockEntity.checkingBeamSections.size() <= 1) { - beamSection = new BeaconBeamSection(0xDF101010); + beamSection = new BeaconBeamOwner.Section(0xDF101010); blockEntity.checkingBeamSections.add(beamSection); } else if (beamSection != null) { // 根据颜色是否相同决定是增加高度还是创建新的光柱段 - if (colorMultiplier == beamSection.color) { + if (colorMultiplier == beamSection.getColor()) { beamSection.increaseHeight(); } else { - beamSection = new BeaconBeamSection(FastColor.ARGB32.average(beamSection.color, colorMultiplier)); + beamSection = new BeaconBeamOwner.Section(ARGB.average(beamSection.getColor(), colorMultiplier)); blockEntity.checkingBeamSections.add(beamSection); } } } else { // 如果当前方块会阻挡光柱且不是基岩,则清空光柱段 - if (beamSection == null || blockstate.getLightBlock(level, blockpos) >= 15 && !blockstate.is(Blocks.BEDROCK)) { + if (beamSection == null || blockstate.getLightEmission(level, blockpos) >= 15 && !blockstate.is(Blocks.BEDROCK)) { blockEntity.checkingBeamSections.clear(); blockEntity.lastCheckY = height; break; @@ -141,9 +142,9 @@ public static void tick(Level level, BlockPos pos, BlockState state, CorruptedBe // 如果已完成光柱检查 if (blockEntity.lastCheckY >= height) { - blockEntity.lastCheckY = level.getMinBuildHeight() - 1; + blockEntity.lastCheckY = level.getMinY() - 1; blockEntity.beamSections = blockEntity.checkingBeamSections; - if (!level.isClientSide) { + if (!level.isClientSide()) { boolean lastHasLevel = lastLevel > 0; boolean shouldLit = blockEntity.levels > 0 && !blockEntity.beamSections.isEmpty(); // 根据信标状态变化播放相应的音效和更新方块状态 @@ -179,7 +180,7 @@ private static int updateBase(Level level, int x, int y, int z) { int k; int i = 0; int j = 1; - while (j <= 4 && (k = y - j) >= level.getMinBuildHeight()) { + while (j <= 4 && (k = y - j) >= level.getMinY()) { boolean bl = true; block1: for (int l = x - j; l <= x + j && bl; ++l) { @@ -205,20 +206,20 @@ public void setRemoved() { private static void tryTransformEntity(LivingEntity livingEntity, ServerLevel level, RecipeManager manager) { MobTransformInput input = new MobTransformInput(livingEntity); Optional> optionalRecipeHolder = manager.getRecipeFor( - ModRecipeTypes.MOB_TRANSFORM_TYPE.get(), input, level); + ModRecipeTypes.MOB_TRANSFORM.get(), input, level); MobTransformWithItemRecipe.Input input2 = MobTransformWithItemRecipe.Input.of(livingEntity); Optional> optionalRecipeHolder2 = manager.getRecipeFor( - ModRecipeTypes.MOB_TRANSFORM_WITH_ITEM_TYPE.get(), input2, level); + ModRecipeTypes.MOB_TRANSFORM_WITH_ITEM.get(), input2, level); Entity result = null; boolean noItemFlag = true; if (optionalRecipeHolder2.isPresent()) { MobTransformWithItemRecipe recipe = optionalRecipeHolder2.get().value(); - result = recipe.apply(level.random, livingEntity, level); + result = recipe.apply(level.getRandom(), livingEntity, level); if (result != null) noItemFlag = false; } if (noItemFlag && optionalRecipeHolder.isPresent()) { MobTransformRecipe recipe = optionalRecipeHolder.get().value(); - result = recipe.apply(level.random, livingEntity, level); + result = recipe.apply(level.getRandom(), livingEntity, level); } if (result == null) return; Entity vehicle = null; @@ -238,7 +239,7 @@ private static void tryTransformEntity(LivingEntity livingEntity, ServerLevel le } private static void affectEntities(Level level, BlockPos pos) { - if (level.isClientSide) return; + if (level.isClientSide()) return; AABB aabb = new AABB(pos).expandTowards(0.0, level.getHeight(), 0.0); List list = level.getEntitiesOfClass(LivingEntity.class, aabb); if (list.isEmpty()) return; @@ -251,10 +252,10 @@ private static void affectEntities(Level level, BlockPos pos) { } public static void playSound(Level level, BlockPos pos, SoundEvent sound) { - level.playSound(null, pos, sound, SoundSource.BLOCKS, 1.0f, 1.0f); + level.playSound(null, pos, sound, SoundSource.BLOCKS, 1.0F, 1.0F); } - public List getBeamSections() { + public List getBeamSections() { return this.levels == 0 ? ImmutableList.of() : this.beamSections; } @@ -270,21 +271,6 @@ public CompoundTag getUpdateTag(HolderLookup.Provider registries) { @Override public void setLevel(Level level) { super.setLevel(level); - this.lastCheckY = level.getMinBuildHeight() - 1; + this.lastCheckY = level.getMinY() - 1; } - - @Getter - public static class BeaconBeamSection { - final int color; - private int height; - - public BeaconBeamSection(int color) { - this.color = color; - this.height = 1; - } - - protected void increaseHeight() { - this.height++; - } - } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CrabTrapBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CrabTrapBlockEntity.java index 9601b0e517..564dae1933 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/CrabTrapBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CrabTrapBlockEntity.java @@ -1,32 +1,39 @@ package dev.dubhe.anvilcraft.block.entity; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; import lombok.Getter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.Containers; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.items.ItemStackHandler; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler; @Getter -public class CrabTrapBlockEntity extends BlockEntity implements IItemHandlerHolder { +public class CrabTrapBlockEntity extends BlockEntity implements IItemResourceHandlerHolder { public CrabTrapBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); } - private final ItemStackHandler itemHandler = new ItemStackHandler(9); + private final ItemStacksResourceHandler itemHandler = new ItemStacksResourceHandler(9); @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.put("Inventory", itemHandler.serializeNBT(provider)); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + this.itemHandler.serialize(output.child("Inventory")); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - itemHandler.deserializeNBT(provider, tag.getCompound("Inventory")); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.itemHandler.deserialize(input.childOrEmpty("Inventory")); + } + + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Containers.dropContents(this.level, pos, this.itemHandler.copyToList()); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CreativeGeneratorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CreativeGeneratorBlockEntity.java index e12b578e9e..fd5bb138e5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/CreativeGeneratorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CreativeGeneratorBlockEntity.java @@ -2,6 +2,7 @@ import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.IPowerProducer; +import dev.dubhe.anvilcraft.api.power.PowerComponentInfo; import dev.dubhe.anvilcraft.api.power.PowerComponentType; import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; @@ -9,8 +10,6 @@ import dev.dubhe.anvilcraft.inventory.SliderMenu; import lombok.Getter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.MenuProvider; @@ -21,7 +20,9 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import org.jspecify.annotations.Nullable; import java.util.Objects; @@ -49,15 +50,15 @@ private CreativeGeneratorBlockEntity(BlockEntityType type, BlockPos pos, Bloc } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.putInt("power", power); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("power", this.power); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - this.power = tag.getInt("power"); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.power = input.getIntOr("power", 0); } @Override @@ -75,6 +76,14 @@ public PowerComponentType getComponentType() { return this.power > 0 ? PowerComponentType.PRODUCER : PowerComponentType.CONSUMER; } + @Override + public PowerComponentInfo toPowerComponentInfo() { + if (this.power >= 0) { + return IPowerProducer.super.toPowerComponentInfo(); + } + return IPowerConsumer.super.toPowerComponentInfo(); + } + @Override public BlockPos getPos() { return this.getBlockPos(); @@ -100,22 +109,22 @@ public AbstractContainerMenu createMenu(int i, Inventory inventory, Player playe public void setPower(int power) { this.power = power; if (level instanceof ServerLevel) { - if (grid != null) { + if (this.grid != null) { this.grid.markChanged(); return; } - previousSyncFailed = true; + this.previousSyncFailed = true; } } public void tick() { if (level instanceof ServerLevel) { - if (previousSyncFailed && grid != null) { - previousSyncFailed = false; - grid.markChanged(); + if (this.previousSyncFailed && this.grid != null) { + this.previousSyncFailed = false; + this.grid.markChanged(); } } - time++; + this.time++; } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/DeflectionRingBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/DeflectionRingBlockEntity.java index c82a87434d..c4dd6e0aca 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/DeflectionRingBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/DeflectionRingBlockEntity.java @@ -3,11 +3,11 @@ import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.PowerComponentType; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.DeflectionRingBlock; -import dev.dubhe.anvilcraft.block.GiantAnvilBlock; +import dev.dubhe.anvilcraft.block.power.ring.DeflectionRingBlock; import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; import dev.dubhe.anvilcraft.block.state.DirectionCube3x3PartHalf; import dev.dubhe.anvilcraft.block.state.GiantAnvilCube; +import dev.dubhe.anvilcraft.block.workstation.GiantAnvilBlock; import dev.dubhe.anvilcraft.entity.FallingGiantAnvilEntity; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -18,8 +18,6 @@ import lombok.Setter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; @@ -34,11 +32,13 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; import org.joml.Vector2d; +import org.jspecify.annotations.Nullable; import java.util.HashMap; import java.util.HashSet; @@ -112,8 +112,8 @@ private void updateLastEntitySpeed(Double speed) { if (!(level instanceof ServerLevel serverLevel)) return; PacketDistributor.sendToPlayersTrackingChunk( serverLevel, - new ChunkPos(getBlockPos()), - new DeflectionRingUpdateLastSpeedPacket(getBlockPos(), lastEntitySpeed) + ChunkPos.containing(getBlockPos()), + new DeflectionRingUpdateLastSpeedPacket(getBlockPos(), this.lastEntitySpeed) ); } @@ -123,17 +123,17 @@ private void updateLastEntitySpeed(Double speed) { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.putDouble("lastEntitySpeed", lastEntitySpeed); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putDouble("lastEntitySpeed", this.lastEntitySpeed); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - if (tag.contains("lastEntitySpeed")) { - this.lastEntitySpeed = tag.getDouble("entity"); + public void loadAdditional(ValueInput input) { + if (input.child("lastEntitySpeed").isPresent()) { + this.lastEntitySpeed = input.getDoubleOr("entity", 0.0); } - super.loadAdditional(tag, provider); + super.loadAdditional(input); } @Override @@ -168,40 +168,40 @@ public boolean isWork() { public void tick() { if (level == null) return; - if (resetEntitySpeedTickCounter >= 40 && !level.isClientSide) updateLastEntitySpeed(0.0); - else resetEntitySpeedTickCounter++; - if (overSpeed && overSpeedTick > 1) { - overSpeed = false; - overSpeedTick = 0; + if (this.resetEntitySpeedTickCounter >= 40 && !level.isClientSide()) this.updateLastEntitySpeed(0.0); + else this.resetEntitySpeedTickCounter++; + if (this.overSpeed && this.overSpeedTick > 1) { + this.overSpeed = false; + this.overSpeedTick = 0; BlockState state = getBlockState(); if (!(state.getBlock() instanceof DeflectionRingBlock block)) return; block.updateState(level, getBlockPos(), DeflectionRingBlock.OVERLOAD, state.getValue(DeflectionRingBlock.OVERLOAD), 3); - } else if (overSpeed) { - overSpeedTick++; + } else if (this.overSpeed) { + this.overSpeedTick++; } - if (level.isClientSide) { + if (level.isClientSide()) { if (!getBlockState().getValue(DeflectionRingBlock.HALF).equals(DirectionCube3x3PartHalf.MID_CENTER)) return; - if (isWork()) { - addSelfToMap(); - accelerate(); - } else removeSelfFromMap(); + if (this.isWork()) { + this.addSelfToMap(); + this.accelerate(); + } else this.removeSelfFromMap(); } - if (grid == null) return; + if (this.grid == null) return; BlockState state = getBlockState(); if (!state.getValue(DeflectionRingBlock.HALF).equals(DirectionCube3x3PartHalf.MID_CENTER)) return; if (!(state.getBlock() instanceof DeflectionRingBlock block)) return; - if (grid.isWorking() && state.getValue(DeflectionRingBlock.OVERLOAD)) { + if (this.grid.isWorking() && state.getValue(DeflectionRingBlock.OVERLOAD)) { block.updateState(level, getBlockPos(), DeflectionRingBlock.OVERLOAD, false, 3); - } else if (!grid.isWorking() && !state.getValue(DeflectionRingBlock.OVERLOAD)) { + } else if (!this.grid.isWorking() && !state.getValue(DeflectionRingBlock.OVERLOAD)) { block.updateState(level, getBlockPos(), DeflectionRingBlock.OVERLOAD, true, 3); } - if (!isWork()) { - removeSelfFromMap(); + if (!this.isWork()) { + this.removeSelfFromMap(); return; } - addSelfToMap(); - if (state.getValue(DeflectionRingBlock.FACING).getAxis().equals(Direction.Axis.Y)) attractGianAnvil(); - accelerate(); + this.addSelfToMap(); + if (state.getValue(DeflectionRingBlock.FACING).getAxis().equals(Direction.Axis.Y)) this.attractGianAnvil(); + this.accelerate(); } private double fixPos(double p1, double p2, double p3) { @@ -218,7 +218,7 @@ public void accelerate() { AccelerateManager::canBeAccelerated ); for (Entity entity : entities2) { - if (entity.getDeltaMovement().length() > Integer.MAX_VALUE * 0.99f) { + if (entity.getDeltaMovement().length() > Integer.MAX_VALUE * 0.99F) { this.overSpeed = true; BlockState state = getBlockState(); if (!(state.getBlock() instanceof DeflectionRingBlock block)) return; @@ -229,34 +229,34 @@ public void accelerate() { boolean applyOffset = entity instanceof FallingBlockEntity || entity instanceof Player; final Vec3 fixedPos = switch (facing) { case UP -> new Vec3( - fixPos(v.z, v.z, v.x), + this.fixPos(v.z, v.z, v.x), applyOffset ? -0.5 : 0, - -fixPos(v.x, v.z, v.x) + -this.fixPos(v.x, v.z, v.x) ); case DOWN -> new Vec3( - -fixPos(v.z, v.z, v.x), + -this.fixPos(v.z, v.z, v.x), applyOffset ? -0.5 : 0, - fixPos(v.x, v.z, v.x) + this.fixPos(v.x, v.z, v.x) ); case NORTH -> new Vec3( - fixPos(v.y, v.y, v.x), - -fixPos(v.x, v.y, v.x) + (applyOffset && Math.abs(v.y) > Math.abs(v.x) ? -0.5 : 0), + this.fixPos(v.y, v.y, v.x), + -this.fixPos(v.x, v.y, v.x) + (applyOffset && Math.abs(v.y) > Math.abs(v.x) ? -0.5 : 0), 0 ); case SOUTH -> new Vec3( - -fixPos(v.y, v.y, v.x), - fixPos(v.x, v.y, v.x) + (applyOffset && Math.abs(v.y) > Math.abs(v.x) ? -0.5 : 0), + -this.fixPos(v.y, v.y, v.x), + this.fixPos(v.x, v.y, v.x) + (applyOffset && Math.abs(v.y) > Math.abs(v.x) ? -0.5 : 0), 0 ); case WEST -> new Vec3( 0, - fixPos(v.z, v.z, v.y) + (applyOffset && Math.abs(v.y) > Math.abs(v.z) ? -0.5 : 0), - -fixPos(v.y, v.z, v.y) + this.fixPos(v.z, v.z, v.y) + (applyOffset && Math.abs(v.y) > Math.abs(v.z) ? -0.5 : 0), + -this.fixPos(v.y, v.z, v.y) ); case EAST -> new Vec3( 0, - -fixPos(v.z, v.z, v.y) + (applyOffset && Math.abs(v.y) > Math.abs(v.z) ? -0.5 : 0), - fixPos(v.y, v.z, v.y) + -this.fixPos(v.z, v.z, v.y) + (applyOffset && Math.abs(v.y) > Math.abs(v.z) ? -0.5 : 0), + this.fixPos(v.y, v.z, v.y) ); }; v = switch (facing) { @@ -296,12 +296,11 @@ public void accelerate() { } entity.setDeltaMovement(entity.getDeltaMovement().scale(1.0204081632653061)); entity.setDeltaMovement(entity.getDeltaMovement().add(0, entity.getGravity(), 0)); - if (level.isClientSide) continue; - updateLastEntitySpeed(entity.getDeltaMovement().length()); + if (level.isClientSide()) continue; + this.updateLastEntitySpeed(entity.getDeltaMovement().length()); } } - @SuppressWarnings("DuplicatedCode") public void attractGianAnvil() { assert level != null; if ( @@ -375,7 +374,7 @@ public void attractGianAnvil() { .setValue(GiantAnvilBlock.CUBE, part.equals(Cube3x3PartHalf.MID_CENTER) ? GiantAnvilCube.CENTER : GiantAnvilCube.CORNER) ); } - fallingGiantAnvilEntity.ifPresent(Entity::kill); + fallingGiantAnvilEntity.ifPresent(Entity::discard); } @Override @@ -386,6 +385,6 @@ public int getInputPower() { @Override public void setRemoved() { super.setRemoved(); - removeSelfFromMap(); + this.removeSelfFromMap(); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/DetectorSlidingRailBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/DetectorSlidingRailBlockEntity.java index 98251dfe2d..1d32798eb1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/DetectorSlidingRailBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/DetectorSlidingRailBlockEntity.java @@ -1,13 +1,12 @@ package dev.dubhe.anvilcraft.block.entity; +import dev.dubhe.anvilcraft.api.sliding.SlidingBlockStructureResolver; import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import static dev.dubhe.anvilcraft.api.sliding.SlidingBlockStructureResolver.MAX_PUSH_DEPTH; - public class DetectorSlidingRailBlockEntity extends BlockEntity { @Getter private int power = 0; @@ -24,11 +23,11 @@ public void cleanPower() { } public void updatePower(int blockCount) { - if (MAX_PUSH_DEPTH <= 15) { + if (SlidingBlockStructureResolver.MAX_PUSH_DEPTH <= 15) { this.power = blockCount; return; } - this.power = blockCount / MAX_PUSH_DEPTH; + this.power = blockCount / SlidingBlockStructureResolver.MAX_PUSH_DEPTH; if (this.power < 1 && blockCount > 0) { this.power = 1; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/DischargerBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/DischargerBlockEntity.java new file mode 100644 index 0000000000..f9e48c9085 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/DischargerBlockEntity.java @@ -0,0 +1,447 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.api.IHasDisplayItem; +import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; +import dev.dubhe.anvilcraft.api.power.IPowerComponent; +import dev.dubhe.anvilcraft.api.power.IPowerProducer; +import dev.dubhe.anvilcraft.api.power.PowerComponentInfo; +import dev.dubhe.anvilcraft.api.power.PowerComponentType; +import dev.dubhe.anvilcraft.api.power.PowerGrid; +import dev.dubhe.anvilcraft.block.power.generator.ChargerBlock; +import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; +import dev.dubhe.anvilcraft.network.ChargerSyncPacket; +import dev.dubhe.anvilcraft.network.UpdateDisplayItemPacket; +import dev.dubhe.anvilcraft.recipe.ChargerChargingRecipe; +import dev.dubhe.anvilcraft.util.IStateListener; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Containers; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.item.crafting.SingleRecipeInput; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.access.ItemAccess; +import net.neoforged.neoforge.transfer.energy.EnergyHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; +import org.jspecify.annotations.Nullable; + +import java.util.Optional; + +public class DischargerBlockEntity extends BlockEntity + implements IPowerProducer, IFilterBlockEntity, IStateListener, IItemResourceHandlerHolder, IHasDisplayItem { + + /** 放电器每tick从物品抽取的FE量 */ + static final int FE_EXTRACT_PER_TICK = 10_000; + + @Getter + @Setter + private int timeLeft = 0; + @Getter + @Setter + private int timeTotalCache = 0; + private int powerValue = 0; + @Getter + @Setter + private boolean isFeDischarging = false; + private boolean isFeDischarged = false; // FE 放电已完成,等待移出 + private int signalCache = 0; + + private final FilteredItemStackHandler itemHandler = new FilteredItemStackHandler(3) { + + @Override + public boolean isValid(int index, ItemResource resource) { + // 只允许从输入槽(slot 0)放入物品 + if (index != 0) return false; + return super.isValid(index, resource); + } + + @Override + public int extract(int index, ItemResource resource, int maxExtract, TransactionContext transaction) { + // 漏斗只能从输出槽(slot 2)抽取物品 + if (index != 2) return 0; + return super.extract(index, resource, maxExtract, transaction); + } + + @Override + public int getSlotLimit(int slot) { + return 1; + } + + @Override + protected int getCapacity(int index, ItemResource resource) { + return this.getSlotLimit(index); + } + + @Override + protected void onContentsChanged(int index, ItemStack previousContents) { + super.onContentsChanged(index, previousContents); + Level level = DischargerBlockEntity.this.getLevel(); + if (level == null || level.isClientSide()) return; + DischargerBlockEntity.this.setChanged(); + DischargerBlockEntity.this.updateDisplayItemStack(); + level.sendBlockUpdated( + DischargerBlockEntity.this.getBlockPos(), + DischargerBlockEntity.this.getBlockState(), + DischargerBlockEntity.this.getBlockState(), + Block.UPDATE_ALL + ); + } + }; + + @Getter + private ItemStack displayItemStack = ItemStack.EMPTY; + + @Getter + @Setter + private @Nullable PowerGrid grid; + + public DischargerBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + } + + public boolean containsValidItem(ItemResource resource) { + SingleRecipeInput input = new SingleRecipeInput(resource.toStack()); + if (!(this.getLevel() instanceof ServerLevel serverLevel)) return false; + Optional> recipe = serverLevel.recipeAccess().getRecipeFor( + ModRecipeTypes.CHARGER_CHARGING.get(), + input, + serverLevel + ); + if (recipe.isPresent()) { + if (recipe.get().value().power() == 0) return false; + return recipe.get().value().power() > 0; // 放电器使用power > 0的配方 + } + // 检查FE放电能力 + ItemStack stack = resource.toStack(); + if (stack.isEmpty()) return false; + EnergyHandler energyHandler = Capabilities.Energy.ITEM.getCapability(stack, ItemAccess.forStack(stack)); + if (energyHandler == null) return false; + return energyHandler.getAmountAsInt() > 0; + } + + @Nullable + private ChargerChargingRecipe getItemRecipe(ItemResource resource) { + SingleRecipeInput input = new SingleRecipeInput(resource.toStack()); + if (!(this.getLevel() instanceof ServerLevel serverLevel)) return null; + Optional> recipe = serverLevel.recipeAccess().getRecipeFor( + ModRecipeTypes.CHARGER_CHARGING.get(), + input, + serverLevel + ); + return recipe.map(RecipeHolder::value).orElse(null); + } + + private boolean checkRecipeItemNotValid(@Nullable ChargerChargingRecipe recipe) { + if (recipe == null) return true; + if (recipe.power() == 0) return true; + return recipe.power() <= 0; // 放电器只接受power > 0的配方 + } + + private void moveItemToTransformingSlot() { + ItemResource resource = this.itemHandler.getResource(0); + if (resource.isEmpty()) return; + if (!this.itemHandler.getResource(1).isEmpty()) return; + + ChargerChargingRecipe recipe = this.getItemRecipe(resource); + if (!this.checkRecipeItemNotValid(recipe)) { + this.isFeDischarging = false; + this.itemHandler.set(0, ItemResource.EMPTY, 0); + ItemStackTemplate transformed = recipe.result(); + this.itemHandler.set(1, ItemResource.of(transformed), transformed.count()); + this.timeLeft = recipe.time() + 1; + this.timeTotalCache = recipe.time(); + this.powerValue = recipe.power(); + this.syncPacket(); + return; + } + + // FE放电:物品有可抽取的FE时开始放电 + ItemStack stack = this.itemHandler.getStacks().get(0).copy(); + EnergyHandler energyHandler = Capabilities.Energy.ITEM.getCapability(stack, ItemAccess.forStack(stack)); + if (energyHandler != null && energyHandler.getAmountAsInt() > 0) { + this.isFeDischarging = true; + this.itemHandler.set(0, ItemResource.EMPTY, 0); + this.itemHandler.set(1, ItemResource.of(stack), stack.getCount()); + this.timeLeft = energyHandler.getAmountAsInt(); + this.timeTotalCache = energyHandler.getCapacityAsInt(); + this.powerValue = 64; + this.syncPacket(); + } + } + + private void syncPacket() { + if (this.getCurrentLevel() == null || !(this.getCurrentLevel() instanceof ServerLevel serverLevel)) return; + PacketDistributor.sendToPlayersTrackingChunk( + serverLevel, serverLevel.getChunk(this.getBlockPos()).getPos(), + new ChargerSyncPacket(this.getPos(), this.timeLeft, this.timeTotalCache, this.isFeDischarging)); + } + + private void moveItemToTransformedOverSlot() { + ItemResource resource = this.itemHandler.getResource(1); + if (resource.isEmpty()) return; + if (!this.itemHandler.getResource(2).isEmpty()) { + this.powerValue = 0; + return; + } + this.itemHandler.set(2, resource, 1); + this.itemHandler.set(1, ItemResource.EMPTY, 0); + this.powerValue = 0; + this.isFeDischarging = false; + this.isFeDischarged = false; + } + + private void updateDisplayItemStack() { + ItemStack newDisplayStack = this.getDisplayItemStackForRender(); + if (ItemStack.matches(this.displayItemStack, newDisplayStack)) return; + this.displayItemStack = newDisplayStack.copy(); + PacketDistributor.sendToPlayersTrackingChunk( + (ServerLevel) this.level, + this.level.getChunk(this.getBlockPos()).getPos(), + new UpdateDisplayItemPacket(this.displayItemStack, this.getPos()) + ); + } + + private ItemStack getDisplayItemStackForRender() { + for (int i = 2; i >= 0; i--) { + if (!this.itemHandler.getResource(i).isEmpty()) { + return this.itemHandler.getResource(i).toStack(this.itemHandler.getAmountAsInt(i)); + } + } + return ItemStack.EMPTY; + } + + @Override + public void updateDisplayItem(ItemStack stack) { + this.displayItemStack = stack; + } + + @Override + public BlockPos getPos() { + return this.getBlockPos(); + } + + @Override + public @Nullable Level getCurrentLevel() { + return this.getLevel(); + } + + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("TimeLeft", this.timeLeft); + output.putInt("TimeTotalCache", this.timeTotalCache); + this.itemHandler.serialize(output.child("Depository")); + output.putBoolean("FeDischarging", this.isFeDischarging); + output.putBoolean("FeDischarged", this.isFeDischarged); + } + + @Override + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.timeLeft = input.getIntOr("TimeLeft", 0); + this.timeTotalCache = input.getIntOr("TimeTotalCache", 0); + this.itemHandler.deserialize(input.childOrEmpty("Depository")); + this.isFeDischarging = input.getBooleanOr("FeDischarging", false); + this.isFeDischarged = input.getBooleanOr("FeDischarged", false); + } + + private int getFeDischargingPowerLevel() { + if (this.grid == null) return 0; + int consume = this.grid.getConsume(); + int count = 0; + for (IPowerComponent component : this.grid.getComponents()) { + if (component instanceof DischargerBlockEntity other && other.isFeDischarging) { + count++; + } + } + int perDevice = Math.max(1, consume / Math.max(1, count)); + if (perDevice >= 512) return 512; + if (perDevice >= 256) return 256; + if (perDevice >= 128) return 128; + if (perDevice >= 64) return 64; + return 0; + } + + @Nullable + public ItemStack tryExtractItemFromSlot1() { + ItemStack stack = this.itemHandler.getStacks().get(1).copy(); + if (stack.isEmpty()) return null; + this.itemHandler.set(1, ItemResource.EMPTY, 0); + this.isFeDischarging = false; + this.timeLeft = 0; + this.powerValue = 0; + this.setChanged(); + return stack; + } + + @Override + public int getOutputPower() { + return !this.getBlockState().getValue(ChargerBlock.POWERED) ? this.powerValue : 0; + } + + @Override + public PowerComponentType getComponentType() { + return PowerComponentType.PRODUCER; + } + + public void stopProcessing() { + this.timeLeft = 0; + this.timeTotalCache = 0; + this.isFeDischarging = false; + this.powerValue = 0; + } + + public double getProgress() { + if (this.timeTotalCache == 0) return 0; + // 放电器:进度从满衰减到空 (remaining / total) + return Math.max(0, Math.min(1, (double) this.timeLeft / this.timeTotalCache)); + } + + public int getAnalogRedstoneSignal() { + double progress = this.getProgress(); + if (this.itemHandler.getResource(0).isEmpty() && this.itemHandler.getResource(1).isEmpty()) return 0; + return (int) Math.round(progress * 15); + } + + @Override + public FilteredItemStackHandler getFilteredItemStackHandler() { + return this.itemHandler; + } + + @Override + public ResourceHandler getItemHandler() { + return this.itemHandler; + } + + @Override + public boolean isFilterEnabled() { + return true; + } + + @Override + public boolean isSlotDisabled(int slot) { + return this.timeLeft > 0; + } + + @Override + public Boolean getState() { + return Boolean.FALSE; + } + + @Override + public void notifyStateChanged(Boolean newState) { + ItemStack stack0 = this.itemHandler.getStacks().get(0).copy(); + ItemStack stack1 = this.itemHandler.getStacks().get(1).copy(); + ItemStack stack2 = this.itemHandler.getStacks().get(2).copy(); + this.dropItemStack(stack0); + this.dropItemStack(stack1); + this.dropItemStack(stack2); + this.itemHandler.set(0, ItemResource.EMPTY, 0); + this.itemHandler.set(1, ItemResource.EMPTY, 0); + this.itemHandler.set(2, ItemResource.EMPTY, 0); + this.timeLeft = 0; + this.isFeDischarging = false; + this.powerValue = 0; + } + + private void dropItemStack(ItemStack stack) { + if (!stack.isEmpty() && this.level != null) { + Containers.dropItemStack(this.level, + this.getBlockPos().getX() + 0.5, + this.getBlockPos().getY() + 1.0, + this.getBlockPos().getZ() + 0.5, + stack); + } + } + + /// 放电器逻辑 + public void tick(Level level, BlockPos blockPos) { + this.flushState(level, blockPos); + BlockState state = level.getBlockState(blockPos); + boolean powered = state.getValue(ChargerBlock.POWERED); + if (this.grid == null) return; + if (powered) return; + if (this.timeLeft == 0) { + this.moveItemToTransformingSlot(); + } + if (this.timeLeft > 0) { + if (this. isFeDischarging) { + this.powerValue = this.getFeDischargingPowerLevel(); + } + if (this.isFeDischarging) { + ItemStack processingStack = this.itemHandler.getStacks().get(1); + if (!processingStack.isEmpty()) { + EnergyHandler storage = Capabilities.Energy.ITEM.getCapability( + processingStack, ItemAccess.forStack(processingStack)); + if (storage != null) { + int currentEnergy = storage.getAmountAsInt(); + if (currentEnergy <= 0) { + this.isFeDischarging = false; + this.isFeDischarged = true; // 标记放电完成,等待移入输出槽 + this.timeLeft = 0; + this.timeTotalCache = 0; + } else { + try (var transaction = Transaction.openRoot()) { + int extracted = storage.extract( + Math.min(FE_EXTRACT_PER_TICK, currentEnergy), transaction); + transaction.commit(); + this.powerValue = (int) (extracted + * (1 - AnvilCraft.CONFIG.powerConverter.powerConverterLoss) + / AnvilCraft.CONFIG.powerConverter.powerConverterEfficiency); + this.timeLeft = currentEnergy - extracted; + this.timeTotalCache = storage.getCapacityAsInt(); + } + } + } + } + } else { + this.timeLeft--; + } + } + if (this.timeLeft == 0) { + this.moveItemToTransformedOverSlot(); + if (this.timeLeft == 0) { + this.timeTotalCache = 0; + } + } + + int signal = this.getAnalogRedstoneSignal(); + if (this.signalCache != signal) { + this.signalCache = signal; + level.updateNeighborsAt(this.getBlockPos(), this.getBlockState().getBlock()); + } + + if (!(level instanceof ServerLevel serverLevel)) return; + if (serverLevel.getGameTime() % 10 != 0) return; + PacketDistributor.sendToPlayersTrackingChunk( + serverLevel, serverLevel.getChunk(this.getBlockPos()).getPos(), + new ChargerSyncPacket(this.getPos(), this.timeLeft, this.timeTotalCache, this.isFeDischarging)); + } + + @Override + public PowerComponentInfo toPowerComponentInfo() { + return IPowerProducer.super.toPowerComponentInfo(); + } + + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Containers.dropContents(this.level, pos, this.getFilteredItemStackHandler().getStacks()); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/FeCollectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/FeCollectorBlockEntity.java new file mode 100644 index 0000000000..aa0ad07c37 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/FeCollectorBlockEntity.java @@ -0,0 +1,307 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.api.power.IPowerProducer; +import dev.dubhe.anvilcraft.api.power.PowerGrid; +import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; +import dev.dubhe.anvilcraft.block.FeCollectorBlock; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.minecraft.world.phys.AABB; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.transfer.energy.EnergyHandler; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; +import org.jspecify.annotations.Nullable; + +public class FeCollectorBlockEntity extends BlockEntity implements IPowerProducer, IHasAffectRange { + public static final int MAX_ENERGY = 1_000_000; + static final int FE_PER_TICK = 10_000; + public static final int PRODUCE_THRESHOLD = 400_000; + public static final int STOP_THRESHOLD = 20_000; + static final int TRANSFER_THRESHOLD = 500_000; + + int energy; + @Getter + float rotation; + @Getter + int time; + boolean producing; + int outputPower; + @Nullable PowerGrid grid; + @Nullable Direction lastInputSide; + private boolean clientSyncDirty; + + public static FeCollectorBlockEntity createBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + return new FeCollectorBlockEntity(type, pos, state); + } + + public FeCollectorBlockEntity(BlockPos pos, BlockState blockState) { + this(ModBlockEntities.FE_COLLECTOR.get(), pos, blockState); + } + + private FeCollectorBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + } + + @Override + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.energy = input.getIntOr("Energy", 0); + this.producing = input.getBooleanOr("Producing", false); + this.time = input.getIntOr("Time", 0); + String lastSide = input.getStringOr("LastInputSide", ""); + this.lastInputSide = lastSide.isEmpty() ? null : Direction.byName(lastSide); + } + + @Override + public void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("Energy", this.energy); + output.putBoolean("Producing", this.producing); + output.putInt("Time", this.time); + if (this.lastInputSide != null) { + output.putString("LastInputSide", this.lastInputSide.getName()); + } + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + CompoundTag tag = super.getUpdateTag(registries); + tag.putInt("Energy", this.energy); + tag.putBoolean("Producing", this.producing); + tag.putInt("Time", this.time); + if (this.lastInputSide != null) { + tag.putString("LastInputSide", this.lastInputSide.getName()); + } + return tag; + } + + @Override + public @Nullable Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public void onDataPacket(Connection connection, ValueInput input) { + super.onDataPacket(connection, input); + this.energy = input.getIntOr("Energy", 0); + this.producing = input.getBooleanOr("Producing", false); + this.time = input.getIntOr("Time", 0); + String lastSide = input.getStringOr("LastInputSide", ""); + this.lastInputSide = lastSide.isEmpty() ? null : Direction.byName(lastSide); + } + + Direction[] getConnectedSides() { + Direction.Axis a = getBlockState().getValue(BlockStateProperties.HORIZONTAL_AXIS); + return a == Direction.Axis.X + ? new Direction[]{Direction.EAST, Direction.WEST} + : new Direction[]{Direction.NORTH, Direction.SOUTH}; + } + + @Nullable + public EnergyHandler getEnergyStorage(@Nullable Direction side) { + if (side == null) return new FeEnergyStore(null); + for (Direction d : this.getConnectedSides()) { + if (d == side) return new FeEnergyStore(side); + } + return null; + } + + @SuppressWarnings("unused") + public static void tick(Level level, BlockPos pos, BlockState state, FeCollectorBlockEntity be) { + if (level.isClientSide()) { + be.clientTick(); + return; + } + be.serverTick(); + } + + void serverTick() { + if (level == null) return; + + if (this.energy >= PRODUCE_THRESHOLD) { + this.producing = true; + } else if (this.energy < STOP_THRESHOLD) { + this.producing = false; + } + + BlockState state = getBlockState(); + if (state.getValue(FeCollectorBlock.POWERED) != this.producing) { + level.setBlockAndUpdate(getBlockPos(), state.setValue(FeCollectorBlock.POWERED, this.producing)); + } + + if (this.producing) { + this.energy -= FE_PER_TICK; + this.time++; + setChanged(); + this.clientSyncDirty = true; + } + + if (this.energy > TRANSFER_THRESHOLD) { + this.pushExcess(); + } + if (this.clientSyncDirty && level.getGameTime() % 20 == 0) { + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), Block.UPDATE_ALL); + this.clientSyncDirty = false; + } + } + + void pushExcess() { + if (level == null) return; + int excess = this.energy - TRANSFER_THRESHOLD; + if (excess <= 0) return; + for (Direction side : this.getConnectedSides()) { + if (excess <= 0) break; + EnergyHandler target = level.getCapability( + Capabilities.Energy.BLOCK, getBlockPos().relative(side), side.getOpposite() + ); + if (target != null) { + try (Transaction transaction = Transaction.openRoot()) { + int accepted = target.insert(excess, transaction); + transaction.commit(); + if (accepted > 0) { + excess -= accepted; + this.energy -= accepted; + setChanged(); + this.clientSyncDirty = true; + } + } + } + } + } + + public void clientTick() { + this.rotation += (float) (Math.log(this.getServerPower() + 1) * 2.5); + } + + @Override + public int getOutputPower() { + return this.outputPower; + } + + @Override + public int getRange() { + return 2; + } + + @Override + public @Nullable Level getCurrentLevel() { + return this.level; + } + + @Override + public BlockPos getPos() { + return this.getBlockPos(); + } + + @Override + public void setGrid(@Nullable PowerGrid grid) { + this.grid = grid; + } + + @Override + public @Nullable PowerGrid getGrid() { + return this.grid; + } + + @Override + public AABB shape() { + return AABB.ofSize(this.getBlockPos().getCenter(), 5, 5, 5); + } + + @Override + public void gridTick() { + if (level == null || level.isClientSide()) return; + + final int prev = this.outputPower; + if (this.producing) { + this.outputPower = (int) (FE_PER_TICK * 20 + * (1 - AnvilCraft.CONFIG.powerConverter.powerConverterLoss) + / AnvilCraft.CONFIG.powerConverter.powerConverterEfficiency); + if (this.outputPower != prev && this.grid != null) this.grid.markChanged(); + } else if (this.outputPower > 0) { + this.outputPower = 0; + if (this.grid != null) this.grid.markChanged(); + } + } + + public int getEnergyStored() { + return this.energy; + } + + class FeEnergyStore implements EnergyHandler { + private final @Nullable Direction side; + + FeEnergyStore(@Nullable Direction side) { + this.side = side; + } + + private boolean isInputSide() { + return FeCollectorBlockEntity.this.lastInputSide == null + || FeCollectorBlockEntity.this.lastInputSide == this.side; + } + + private boolean isOutputSide() { + return FeCollectorBlockEntity.this.lastInputSide != null + && FeCollectorBlockEntity.this.lastInputSide != this.side; + } + + @Override + public long getAmountAsLong() { + return FeCollectorBlockEntity.this.energy; + } + + @Override + public long getCapacityAsLong() { + return MAX_ENERGY; + } + + @Override + public int insert(int maxInsert, TransactionContext transaction) { + if (!this.isInputSide()) return 0; + if (FeCollectorBlockEntity.this.energy >= MAX_ENERGY) return 0; + int r = Math.min(MAX_ENERGY - FeCollectorBlockEntity.this.energy, maxInsert); + if (r > 0) { + FeCollectorBlockEntity.this.energy += r; + if (this.side != null + && FeCollectorBlockEntity.this.lastInputSide != this.side + ) { + FeCollectorBlockEntity.this.lastInputSide = this.side; + } + setChanged(); + FeCollectorBlockEntity.this.clientSyncDirty = true; + } + return r; + } + + @Override + public int extract(int maxExtract, TransactionContext transaction) { + if (!this.isOutputSide()) return 0; + if (FeCollectorBlockEntity.this.energy <= 0) return 0; + int r = Math.min(FeCollectorBlockEntity.this.energy, maxExtract); + if (r > 0) { + FeCollectorBlockEntity.this.energy -= r; + setChanged(); + FeCollectorBlockEntity.this.clientSyncDirty = true; + } + return r; + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/FishTankBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/FishTankBlockEntity.java new file mode 100644 index 0000000000..649021ca1e --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/FishTankBlockEntity.java @@ -0,0 +1,969 @@ +package dev.dubhe.anvilcraft.block.entity; + +import com.google.common.collect.ImmutableList; +import dev.anvilcraft.lib.v2.recipe.cache.ItemResourceHandlerCache; +import dev.anvilcraft.lib.v2.util.MathUtil; +import dev.anvilcraft.lib.v2.util.Util; +import dev.dubhe.anvilcraft.api.fluid.FluidStackResourceHandler; +import dev.dubhe.anvilcraft.api.fluid.IFluidHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; +import dev.dubhe.anvilcraft.api.itemhandler.PollableItemHandler; +import dev.dubhe.anvilcraft.block.fluid.ExpFluidBlock; +import dev.dubhe.anvilcraft.block.workstation.FishTankBlock; +import dev.dubhe.anvilcraft.init.block.ModFluidTags; +import dev.dubhe.anvilcraft.init.block.ModFluids; +import dev.dubhe.anvilcraft.init.item.ModItemTags; +import dev.dubhe.anvilcraft.mixin.accessor.StacksResourceHandlerAccessor; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponents; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.util.ProblemReporter; +import net.minecraft.util.TriState; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.world.entity.InsideBlockEffectType; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.MobBucketItem; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.component.CustomData; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.storage.TagValueOutput; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.common.world.AuxiliaryLightManager; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.TransferPreconditions; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.fluid.FluidUtil; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; +import org.jetbrains.annotations.Unmodifiable; +import org.jspecify.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@Getter +public class FishTankBlockEntity extends BlockEntity implements IItemResourceHandlerHolder, ItemResourceHandlerCache, IFluidHandlerHolder { + private static final double EPSILON = 1.0 / 1024.0; + public static final int MAX_TROPICAL_FISH = 4; + + private static final Vec3 FLUID_CONTENT_AREA_MIN = new Vec3(0.0625, 0.0625, 0.0625); + private static final Vec3 FLUID_CONTENT_AREA_MAX = new Vec3(0.9375, 0.9375, 0.9375); + private static final double FLUID_CONTENT_AREA_HEIGHT = 7.0 / 8; + private static final String TAG_TROPICAL_FISH_DATA = "TropicalFishData"; + + private final List tropicalFishData = new ArrayList<>() { + @Override + public boolean add(CompoundTag tag) { + if (this.size() >= MAX_TROPICAL_FISH) return false; + FishTankBlockEntity.this.setChanged(); + FishTankBlockEntity.this.sendUpdate(); + return super.add(tag); + } + + @Override + public CompoundTag removeLast() { + FishTankBlockEntity.this.setChanged(); + FishTankBlockEntity.this.sendUpdate(); + return super.removeLast(); + } + + @Override + public void clear() { + FishTankBlockEntity.this.setChanged(); + FishTankBlockEntity.this.sendUpdate(); + super.clear(); + } + }; + private AABB fluidContentArea = new AABB(FLUID_CONTENT_AREA_MIN, FLUID_CONTENT_AREA_MAX); + private final FluidStackResourceHandler fluidHandler = new FluidStackResourceHandler() { + @Override + protected void onContentChanged(FluidStack stack) { + FishTankBlockEntity.this.setChanged(); + FishTankBlockEntity.this.refreshIgnited(); + FishTankBlockEntity.this.sendUpdate(); + FishTankBlockEntity.this.sendNeighbourUpdate(); + FishTankBlockEntity.this.updateLightLevel(); + this.updateContentArea(); + + if (stack.is(Fluids.WATER)) return; + FishTankBlockEntity.this.dropFish(); + FishTankBlockEntity.this.updateFishState(); + } + + private void updateContentArea() { + double diffY = FishTankBlockEntity.FLUID_CONTENT_AREA_HEIGHT * (1.0 - (double) this.getFill()); + Vec3 pos = getBlockPos().getBottomCenter().subtract(0.5, 0, 0.5); + FishTankBlockEntity.this.fluidContentArea = new AABB( + FishTankBlockEntity.FLUID_CONTENT_AREA_MIN.add(pos), + FishTankBlockEntity.FLUID_CONTENT_AREA_MAX.subtract(0, diffY, 0).add(pos) + ); + } + }; + + /// 0-7 为输出产物,
+ /// 8-15 为输入原料 + private final ItemStacksResourceHandler proxy = new ItemStacksResourceHandler(16) { + @Override + public ItemResource getResource(int index) { + if (index < 8) { + return FishTankBlockEntity.this.output.getResource(index); + } else { + return FishTankBlockEntity.this.input.getResource(index - 8); + } + } + + @Override + public long getAmountAsLong(int index) { + if (index < 8) { + return FishTankBlockEntity.this.output.getAmountAsLong(index); + } else { + return FishTankBlockEntity.this.input.getAmountAsLong(index - 8); + } + } + + @Override + public long getCapacityAsLong(int index, ItemResource resource) { + if (index < 8) { + return FishTankBlockEntity.this.output.getCapacityAsLong(index, resource); + } else { + return FishTankBlockEntity.this.input.getCapacityAsLong(index - 8, resource); + } + } + + @Override + protected void setStacks(NonNullList stacks) { + } + + @Override + public void set(int index, ItemResource resource, int amount) { + if (index < 8) { + FishTankBlockEntity.this.output.set(index, resource, amount); + } else { + FishTankBlockEntity.this.input.set(index - 8, resource, amount); + } + } + + @Override + public boolean isValid(int index, ItemResource resource) { + return index >= 8 && FishTankBlockEntity.this.input.isValid(index - 8, resource); + } + + @Override + public int insert(int index, ItemResource resource, int amount, TransactionContext transaction) { + Objects.checkIndex(index, this.size()); + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); + + int currentAmount = this.getAmountAsInt(index); + + if ((currentAmount == 0 || resource.equals(this.getResource(index))) && this.isValid(index, resource)) { + int inserted = Math.min(amount, this.getCapacityAsInt(index, resource) - currentAmount); + + if (inserted > 0) { + Util.cast(this).getSnapshotJournals().get(index).updateSnapshots(transaction); + this.set(index, resource, currentAmount + inserted); + return inserted; + } + } + + return 0; + } + + @Override + public int extract(int index, ItemResource resource, int amount, TransactionContext transaction) { + Objects.checkIndex(index, size()); + TransferPreconditions.checkNonEmptyNonNegative(resource, amount); + + if (resource.equals(this.getResource(index))) { + int currentAmount = this.getAmountAsInt(index); + int extracted = Math.min(amount, currentAmount); + + if (extracted > 0) { + Util.cast(this).getSnapshotJournals().get(index).updateSnapshots(transaction); + this.set(index, resource, currentAmount - extracted); + return extracted; + } + } + + return 0; + } + }; + private final PollableItemHandler input = new PollableItemHandler(8) { + @Override + protected int getEmptyOrSmallerSlot(ItemResource resource) { + int slot = -1; + int countInSlot = Integer.MAX_VALUE; + for (int i = 7; i >= 0; i--) { + ItemResource resourceIn = this.getResource(i); + if (resourceIn.isEmpty()) { + slot = i; + continue; + } + if (!resourceIn.equals(resource)) continue; + if (countInSlot != Integer.MAX_VALUE) return -1; + int amountIn = this.getAmountAsInt(i); + if (amountIn < this.getCapacityAsIntDirect(i, resourceIn)) { + slot = i; + countInSlot = amountIn; + } else { + return -1; + } + } + return slot; + } + + @Override + protected void onContentsChanged(int index, ItemStack previousContents) { + FishTankBlockEntity.this.setChanged(); + FishTankBlockEntity.this.refreshIgnited(); + FishTankBlockEntity.this.sendUpdate(); + } + }; + private final ItemStacksResourceHandler output = new ItemStacksResourceHandler(8) { + private boolean autoOutputting = false; + + @Override + public boolean isValid(int index, ItemResource resource) { + boolean hasSame = false; + int sameIndex = -1; + for (int i = 0; i < this.size(); i++) { + if (!this.getResource(i).equals(resource)) { + continue; + } + + if (hasSame) { + return false; + } else { + hasSame = true; + sameIndex = i; + } + } + if (!hasSame) return this.getResource(index).isEmpty(); + return sameIndex == index; + } + + @Override + public long getCapacityAsLong(int index, ItemResource resource) { + ItemResource resourceIn = this.getResource(index); + int maxSize = resourceIn.getMaxStackSize(); + if (resourceIn.isEmpty()) { + maxSize = Item.DEFAULT_MAX_STACK_SIZE; + } + return Math.min(super.getCapacityAsLong(index, resource), maxSize); + } + + @Override + protected void onContentsChanged(int index, ItemStack previousContents) { + if (this.autoOutputting) return; + this.checkAutoOutput(index); + FishTankBlockEntity.this.setChanged(); + FishTankBlockEntity.this.refreshIgnited(); + FishTankBlockEntity.this.sendUpdate(); + } + + void checkAutoOutput(int index) { + Level level = FishTankBlockEntity.this.level; + if (level == null || level.isClientSide()) return; + BlockState state = FishTankBlockEntity.this.getBlockState(); + if (!state.getValue(FishTankBlock.OUTLET)) return; + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resourceIn = this.getResource(index); + if (resourceIn.isEmpty()) return; + int extracted = this.extract(index, resourceIn, Integer.MAX_VALUE, transaction); + if (extracted <= 0) return; + Direction outletDir = state.getValue(FishTankBlock.FACING); + + BlockPos pos = FishTankBlockEntity.this.getBlockPos(); + List> targets = ItemHandlerUtil.getTargetItemHandlerList( + pos.relative(outletDir), + null, + level + ); + if (targets == null || targets.isEmpty()) { + FishTankBlockEntity.popResourceFromFace(level, pos, outletDir, resourceIn.toStack(extracted)); + transaction.commit(); + return; + } + int remaining = extracted; + for (ResourceHandler target : targets) { + ItemStack remainingCache = resourceIn.toStack(remaining); + if (ItemHandlerUtil.insertItem(target, remainingCache, true).getCount() <= 0) continue; + remaining -= ItemHandlerUtil.insertItem(target, remainingCache, false).getCount(); + if (remaining == 0) break; + } + this.autoOutputting = true; + this.set(index, resourceIn, remaining); + this.autoOutputting = false; + } + } + }; + private boolean ignited = false; + + public FishTankBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + @Override + public void onLoad() { + super.onLoad(); + this.updateFishState(); + } + + private void sendUpdate() { + if (this.level == null) return; + this.level.sendBlockUpdated( + this.getBlockPos(), + this.getBlockState(), + this.getBlockState(), + Block.UPDATE_CLIENTS + ); + } + + private void sendNeighbourUpdate() { + if (this.level == null) return; + this.level.updateNeighborsAt(this.getBlockPos(), this.getBlockState().getBlock()); + } + + private void updateLightLevel() { + if (this.level == null) { + return; + } + if (this.ignited) { + return; + } + + BlockPos pos = this.getBlockPos(); + AuxiliaryLightManager manager = this.level.getAuxLightManager(pos); + if (manager == null) { + return; + } + manager.setLightAt(pos, this.computeLightLevel()); + } + + private int computeLightLevel() { + FluidStack stack = this.fluidHandler.getStack(); + return (int) Math.ceil(stack.getFluidType().getLightLevel(stack) * this.fluidHandler.getFill()); + } + + @Override + public ItemStacksResourceHandler getItemHandler() { + return this.proxy; + } + + // region 持久化 + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + this.fluidHandler.serialize(output.child("Fluid")); + this.input.serialize(output.child("Inputs")); + this.output.serialize(output.child("Outputs")); + output.putBoolean("ignited", this.ignited); + + ValueOutput.TypedOutputList list = output.list(TAG_TROPICAL_FISH_DATA, CompoundTag.CODEC); + for (CompoundTag fishTag : this.tropicalFishData) { + list.add(fishTag); + } + } + + @Override + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.fluidHandler.deserialize(input.childOrEmpty("Fluid")); + this.input.deserialize(input.childOrEmpty("Inputs")); + this.output.deserialize(input.childOrEmpty("Outputs")); + this.ignited = input.getBooleanOr("ignited", false); + + this.tropicalFishData.clear(); + for (CompoundTag fishTag : input.listOrEmpty(TAG_TROPICAL_FISH_DATA, CompoundTag.CODEC)) { + this.tropicalFishData.add(fishTag); + } + } + // endregion + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + TagValueOutput output = TagValueOutput.createWithContext(new ProblemReporter.Collector(this.problemPath()), registries); + + this.fluidHandler.serialize(output.child("Fluid")); + this.input.serialize(output.child("Inputs")); + this.output.serialize(output.child("Outputs")); + output.putBoolean("ignited", this.ignited); + + ValueOutput.TypedOutputList list = output.list(TAG_TROPICAL_FISH_DATA, CompoundTag.CODEC); + for (CompoundTag fishTag : this.tropicalFishData) { + list.add(fishTag); + } + + return output.buildResult(); + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + public int getSignal() { + return Math.round(15F * this.fluidHandler.getFill()); + } + + // region 玩家交互 + public boolean tryInteractWithTank(Player player, InteractionHand hand, BlockHitResult hitResult) { + if (hand != InteractionHand.MAIN_HAND) return false; + if (this.level == null) return false; + ItemStack inHand = player.getItemInHand(hand); + if (this.interactWithFish(this.level, player, hand, inHand, hitResult)) return true; + if (this.interactWithFluid(this.level, player, hand, inHand)) return true; + return this.interactWithItems(this.level, player, hand, inHand, hitResult.getLocation()); + } + + // region 物品交互 + private boolean interactWithItems(Level level, Player player, InteractionHand hand, ItemStack inHand, Vec3 hitLoc) { + return inHand.isEmpty() + ? this.tryExtractAllItemsFromTank(level, player, hand) + : this.tryInsertHandItemToTank(level, inHand, hitLoc); + } + + private boolean tryExtractAllItemsFromTank(Level level, Player player, InteractionHand hand) { + List stacks = FishTankBlockEntity.extractAllFromTank(this.proxy, TriState.TRUE); + if (stacks.isEmpty()) return false; + if (level.isClientSide()) return true; + + Inventory inventory = player.getInventory(); + ItemStack first = stacks.getFirst(); + // 使误放入的工具类物品能回到手上 + if (first.getMaxStackSize() == 1) { + player.setItemInHand(hand, first); + for (int i = 1; i < stacks.size(); i++) { + inventory.placeItemBackInInventory(stacks.get(i)); + } + return true; + } + + // 物品栏内没有相同物品,拿到手上 + int slot = inventory.getSlotWithRemainingSpace(first); + if (slot == -1) { + player.setItemInHand(hand, first); + for (int i = 1; i < stacks.size(); i++) { + inventory.placeItemBackInInventory(stacks.get(i)); + } + return true; + } + + for (ItemStack stack : stacks) { + inventory.placeItemBackInInventory(stack); + } + return true; + } + + private boolean tryInsertHandItemToTank(Level level, ItemStack inHand, Vec3 hitLoc) { + if (!this.isValidInsertPos(hitLoc)) return false; + if (inHand.is(ModItemTags.DISALLOW_HAND_INSERT_INTO_TANK)) return false; + if (level.isClientSide()) return true; + ItemStack inserted = FishTankBlockEntity.insertItemToTank(this.input, inHand.copy()); + int count = inHand.getCount(); + inHand.setCount(count - inserted.getCount()); + return inserted.getCount() != count; + } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + private boolean isValidInsertPos(Vec3 hitLoc) { + double x = hitLoc.x - this.getBlockPos().getX(); + double y = hitLoc.y - this.getBlockPos().getY(); + double z = hitLoc.z - this.getBlockPos().getZ(); + + // 内外壁 + if (Math.abs(x - 0) < FishTankBlockEntity.EPSILON || Math.abs(x - 1) < FishTankBlockEntity.EPSILON) { + return MathUtil.isInRange(y, 0.624, 1.001); + } + if (Math.abs(z - 0) < FishTankBlockEntity.EPSILON || Math.abs(z - 1) < FishTankBlockEntity.EPSILON) { + return MathUtil.isInRange(y, 0.624, 1.001); + } + if (Math.abs(x - 0.0625) < FishTankBlockEntity.EPSILON || Math.abs(x - 0.9375) < FishTankBlockEntity.EPSILON) { + return MathUtil.isInRange(z, y, 0.0624, 0.0624, 0.9376, 1.001); + } + if (Math.abs(y - 0.0625) < FishTankBlockEntity.EPSILON) { + return MathUtil.isInRange(x, z, 0.0624, 0.0624, 0.9376, 0.9376); + } + if (Math.abs(z - 0.0625) < FishTankBlockEntity.EPSILON || Math.abs(z - 0.9375) < FishTankBlockEntity.EPSILON) { + return MathUtil.isInRange(x, y, 0.0624, 0.0624, 0.9376, 1.001); + } + + // 缸口 + if (Math.abs(x - 0.125) < FishTankBlockEntity.EPSILON || Math.abs(x - 0.875) < FishTankBlockEntity.EPSILON) { + return MathUtil.isInRange(z, y, 0.124, 0.874, 0.876, 1.001); + } + if (Math.abs(y - 0.875) < FishTankBlockEntity.EPSILON) { + return MathUtil.isInRange(x, z, 0.0624, 0.0624, 0.9376, 0.9376) + && !MathUtil.isInRange(x, z, 0.124, 0.124, 0.876, 0.876); + } + if (Math.abs(y - 1) < FishTankBlockEntity.EPSILON) { + return !MathUtil.isInRange(x, z, 0.124, 0.124, 0.876, 0.876); + } + if (Math.abs(z - 0.125) < FishTankBlockEntity.EPSILON || Math.abs(z - 0.875) < FishTankBlockEntity.EPSILON) { + return MathUtil.isInRange(x, y, 0.124, 0.874, 0.876, 1.001); + } + return false; + } + + /// 向鱼缸中放入物品 + /// + /// @param handler 鱼缸物品处理器 + /// @param entity 要放入的物品实体 + public static void insertItemToTank(@Nullable ResourceHandler handler, ItemEntity entity) { + if (!entity.anvilcraft$isAdsorbable()) { + return; + } + ItemStack stack = entity.getItem(); + ItemStack inserted = FishTankBlockEntity.insertItemToTank(handler, stack.copy()); + if (inserted.getCount() == stack.getCount()) { + entity.discard(); + } else { + entity.setItem(inserted); + } + } + + /// 向鱼缸中放入物品 + /// + /// @param handler 鱼缸物品处理器 + /// @param stack 要放入的物品 + /// @return 插入的物品 + public static ItemStack insertItemToTank(@Nullable ResourceHandler handler, ItemStack stack) { + if (handler == null) { + return stack; + } + return ItemHandlerUtil.insertItem(handler, stack, false); + } + + public void tryAutoOutputResults() { + Level level = this.level; + if (level == null || level.isClientSide()) return; + BlockPos pos = this.getBlockPos(); + Direction outletDir = this.getBlockState().getValue(FishTankBlock.FACING); + List> targets = ItemHandlerUtil.getTargetItemHandlerList(pos.relative(outletDir), null, level); + if (targets == null || targets.isEmpty()) { + for (int i = 0; i < 8; i++) { + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = this.output.getResource(i); + if (resource.isEmpty()) continue; + int extracted = this.output.extract(i, resource, Integer.MAX_VALUE, transaction); + if (extracted > 0) { + FishTankBlockEntity.popResourceFromFace(level, pos, outletDir, resource.toStack(extracted)); + } + transaction.commit(); + } + } + this.setChanged(); + this.refreshIgnited(); + this.sendUpdate(); + return; + } + for (ResourceHandler target : targets) { + for (int i = 0; i < 8; i++) { + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = this.output.getResource(i); + if (resource.isEmpty()) continue; + int extracted = this.output.extract(i, resource, Integer.MAX_VALUE, transaction); + if (extracted <= 0) continue; + ItemStack inserted = ItemHandlerUtil.insertItem(target, resource.toStack(extracted), true); + if (inserted.isEmpty()) continue; + inserted = ItemHandlerUtil.insertItem(target, resource.toStack(extracted), false); + if (inserted.isEmpty()) continue; + this.output.insert(i, resource, extracted - inserted.getCount(), transaction); + transaction.commit(); + } + } + } + this.setChanged(); + this.refreshIgnited(); + this.sendUpdate(); + } + + /// 从鱼缸中提取出所有物品 + /// + /// @param handler 鱼缸物品处理器 + /// @param containsIngredient 是否同时提取原料;
+ /// {@link TriState#DEFAULT DEFAULT}为始终提取,
+ /// {@link TriState#TRUE TRUE}为仅在产物为空时提取,
+ /// {@link TriState#FALSE FALSE}为不提取 + /// @return 提取出的所有物品 + public static @Unmodifiable List extractAllFromTank(ResourceHandler handler, TriState containsIngredient) { + List result = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = handler.getResource(i); + if (resource.isEmpty()) continue; + int extracted = handler.extract(i, resource, Integer.MAX_VALUE, transaction); + if (extracted <= 0) continue; + int maxSize = resource.getMaxStackSize(); + if (extracted < maxSize) { + result.add(resource.toStack(extracted)); + transaction.commit(); + continue; + } + for (; extracted > 0; extracted -= maxSize) { + result.add(resource.toStack(Math.min(extracted, maxSize))); + } + transaction.commit(); + } + } + if (!containsIngredient.isFalse() && (containsIngredient.isDefault() || result.isEmpty())) { + for (int i = 8; i < 16; i++) { + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = handler.getResource(i); + if (resource.isEmpty()) continue; + int extracted = handler.extract(i, resource, Integer.MAX_VALUE, transaction); + if (extracted <= 0) continue; + int maxSize = resource.getMaxStackSize(); + if (extracted < maxSize) { + result.add(resource.toStack(extracted)); + transaction.commit(); + continue; + } + for (; extracted > 0; extracted -= maxSize) { + result.add(resource.toStack(Math.min(extracted, maxSize))); + } + transaction.commit(); + } + } + } + return ImmutableList.copyOf(result); + } + + private static void popResourceFromFace(Level level, BlockPos pos, Direction direction, ItemStack stack) { + int stepX = direction.getStepX(); + int stepY = direction.getStepY(); + int stepZ = direction.getStepZ(); + double extra = 0.5 + (double) EntityType.ITEM.getWidth() / 2.0; + double posX = (double) pos.getX() + 0.5 + stepX * extra; + double posY = (double) pos.getY() + 0.5 + stepY * extra; + double posZ = (double) pos.getZ() + 0.5 + stepZ * extra; + Vec3 delta = new Vec3(stepX, stepY, stepZ).multiply(0.25, 0.25, 0.25); + ItemEntity entity = new ItemEntity(level, posX, posY, posZ, stack, delta.x, delta.y, delta.z); + entity.anvilcraft$setIsAdsorbable(false); + level.addFreshEntity(entity); + } + // endregion + + // region 流体交互 + private boolean interactWithFluid(Level level, Player player, InteractionHand hand, ItemStack inHand) { + if (FluidUtil.interactWithFluidHandler(player, hand, this.getBlockPos(), this.fluidHandler)) return true; + if (inHand.is(Items.GLASS_BOTTLE)) { + return this.tryFillEmptyBottle(level, player, hand, inHand); + } + return this.tryDrainFilledBottle(level, player, hand, inHand); + } + + private boolean tryFillEmptyBottle(Level level, Player player, InteractionHand hand, ItemStack inHand) { + FluidStack stack = this.fluidHandler.getStack(); + BlockPos pos = this.getBlockPos(); + if (stack.is(Fluids.WATER)) { + try (Transaction transaction = Transaction.openRoot()) { + int extracted = this.fluidHandler.extract(0, FluidResource.of(stack), 250, transaction); + if (extracted != 250) return false; + if (level.isClientSide()) return true; + transaction.commit(); + } + + ItemStack result = Items.POTION.getDefaultInstance(); + player.setItemInHand(hand, ItemUtils.createFilledResult(inHand, player, result)); + player.awardStat(Stats.USE_CAULDRON); + player.awardStat(Stats.ITEM_USED.get(inHand.getItem())); + level.playSound(null, pos, SoundEvents.BOTTLE_FILL, SoundSource.BLOCKS); + level.gameEvent(null, GameEvent.FLUID_PICKUP, pos); + return true; + } else if (stack.is(ModFluids.EXP_FLUID)) { + try (Transaction transaction = Transaction.openRoot()) { + int extracted = this.fluidHandler.extract(0, FluidResource.of(stack), 250, transaction); + if (extracted != 250) return false; + if (level.isClientSide()) return true; + transaction.commit(); + } + + ItemStack result = Items.EXPERIENCE_BOTTLE.getDefaultInstance(); + player.setItemInHand(hand, ItemUtils.createFilledResult(inHand, player, result)); + player.awardStat(Stats.USE_CAULDRON); + player.awardStat(Stats.ITEM_USED.get(inHand.getItem())); + level.playSound(null, pos, SoundEvents.BOTTLE_FILL, SoundSource.BLOCKS); + level.gameEvent(null, GameEvent.FLUID_PICKUP, pos); + return true; + } + return false; + } + + private boolean tryDrainFilledBottle(Level level, Player player, InteractionHand hand, ItemStack inHand) { + if (inHand.has(DataComponents.POTION_CONTENTS)) { + PotionContents contents = inHand.get(DataComponents.POTION_CONTENTS); + if (Objects.requireNonNull(contents).potion().isEmpty()) return false; + Holder potion = contents.potion().get(); + if (potion == Potions.WATER) { + try (Transaction transaction = Transaction.openRoot()) { + int inserted = this.fluidHandler.insert(0, FluidResource.of(Fluids.WATER), 250, transaction); + if (inserted != 250) return false; + if (level.isClientSide()) return true; + transaction.commit(); + } + + player.setItemInHand(hand, ItemUtils.createFilledResult(inHand, player, Items.GLASS_BOTTLE.getDefaultInstance())); + player.awardStat(Stats.FILL_CAULDRON); + player.awardStat(Stats.ITEM_USED.get(inHand.getItem())); + BlockPos pos = this.getBlockPos(); + level.playSound(null, pos, SoundEvents.BOTTLE_EMPTY, SoundSource.BLOCKS); + level.gameEvent(null, GameEvent.FLUID_PLACE, pos); + return true; + } + } else if (inHand.is(Items.EXPERIENCE_BOTTLE)) { + try (Transaction transaction = Transaction.openRoot()) { + int inserted = this.fluidHandler.insert(0, FluidResource.of(ModFluids.EXP_FLUID), 250, transaction); + if (inserted != 250) return false; + if (level.isClientSide()) return true; + // 50%概率 + if (level.getRandom().nextBoolean()) { + transaction.commit(); + } + } + + player.setItemInHand(hand, ItemUtils.createFilledResult(inHand, player, Items.GLASS_BOTTLE.getDefaultInstance())); + player.awardStat(Stats.FILL_CAULDRON); + player.awardStat(Stats.ITEM_USED.get(inHand.getItem())); + BlockPos pos = this.getBlockPos(); + level.playSound(null, pos, SoundEvents.BOTTLE_EMPTY, SoundSource.BLOCKS); + level.gameEvent(null, GameEvent.FLUID_PLACE, pos); + return true; + } + return false; + } + + public void entityInsideFluidContent(Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + if (level.isClientSide()) return; + ServerLevel serverside = Util.cast(level); + if (!this.fluidContentArea.intersects(entity.getBoundingBox())) return; + + FluidStack stack = this.fluidHandler.getStack(); + if (this.isIgnited()) { + effectApplier.apply(InsideBlockEffectType.FIRE_IGNITE); + } else if (stack.is(Fluids.LAVA)) { + effectApplier.apply(InsideBlockEffectType.LAVA_IGNITE); + } else if (entity.canFluidExtinguish(stack.getFluidType()) && entity.isOnFire()) { + effectApplier.apply(InsideBlockEffectType.EXTINGUISH); + FluidResource resource = FluidResource.of(stack); + try (Transaction transaction = Transaction.openRoot()) { + if (entity.mayInteract(serverside, pos)) { + this.fluidHandler.extract(0, resource, 250, transaction); + } + if (stack.is(ModFluids.POWDER_SNOW)) { + this.fluidHandler.set(resource, this.fluidHandler.getAmountAsInt(0)); + } + transaction.commit(); + } + } else if (stack.is(ModFluids.EXP_FLUID) && this.fluidHandler.isFull()) { + if (!(entity instanceof Player player)) return; + FluidResource resource = FluidResource.of(stack); + int capacity = this.fluidHandler.getCapacityAsInt(0, resource); + try (Transaction transaction = Transaction.openRoot()) { + int extracted = this.fluidHandler.extract(0, resource, capacity, transaction); + if (extracted != capacity) return; + player.giveExperiencePoints(ExpFluidBlock.XP_POINTS); + transaction.commit(); + } + } + } + // endregion + + // region 热带鱼交互 + public boolean interactWithFish(Level level, Player player, InteractionHand hand, ItemStack inHand, BlockHitResult hitResult) { + if (hitResult.getLocation().y - hitResult.getBlockPos().getY() > 5 / 8F) return false; + if (inHand.is(Items.TROPICAL_FISH_BUCKET)) { + if (!this.fluidHandler.getStack().isEmpty() && !this.fluidHandler.getStack().is(Fluids.WATER)) return false; + if (this.isFullOfFish()) return false; + if (level.isClientSide()) return true; + + player.awardStat(Stats.USE_CAULDRON); + player.awardStat(Stats.ITEM_USED.get(inHand.getItem())); + this.tropicalFishData.add(FishTankBlockEntity.bucket2fishData(inHand)); + level.playSound(player, this.getBlockPos(), SoundEvents.BUCKET_FILL_FISH, SoundSource.BLOCKS, 1.0F, 1.0F); + player.setItemInHand(hand, Items.WATER_BUCKET.getDefaultInstance()); + FluidUtil.interactWithFluidHandler(player, hand, this.getBlockPos(), this.fluidHandler); + if (player.hasInfiniteMaterials()) { + player.setItemInHand(hand, inHand); + } + this.updateFishState(); + return true; + } else if (inHand.is(Items.WATER_BUCKET)) { + if (this.isEmptyOfFish()) return false; + if (level.isClientSide()) return true; + + player.awardStat(Stats.USE_CAULDRON); + player.awardStat(Stats.ITEM_USED.get(inHand.getItem())); + CompoundTag fishData = this.tropicalFishData.removeLast(); + level.playSound(player, this.getBlockPos(), SoundEvents.BUCKET_FILL_FISH, SoundSource.BLOCKS, 1.0F, 1.0F); + player.setItemInHand(hand, FishTankBlockEntity.fishData2bucket(fishData)); + this.updateFishState(); + return true; + } else if (inHand.is(Items.BUCKET)) { + if (this.isEmptyOfFish()) return false; + if (!this.fluidHandler.isFull()) return false; + if (level.isClientSide()) return true; + + player.awardStat(Stats.USE_CAULDRON); + player.awardStat(Stats.ITEM_USED.get(inHand.getItem())); + CompoundTag fishData = this.tropicalFishData.removeLast(); + FluidUtil.interactWithFluidHandler(player, hand, this.getBlockPos(), this.fluidHandler); + level.playSound(player, this.getBlockPos(), SoundEvents.BUCKET_FILL_FISH, SoundSource.BLOCKS, 1.0F, 1.0F); + player.setItemInHand(hand, FishTankBlockEntity.fishData2bucket(fishData)); + return true; + } + return false; + } + + public void updateFishState() { + if (this.level == null) return; + + if (this.isEmptyOfFish() && this.getBlockState().getValue(FishTankBlock.TROPICAL)) { + this.level.setBlock(this.getBlockPos(), this.getBlockState().setValue(FishTankBlock.TROPICAL, false), 18); + } else if (!this.isEmptyOfFish() && !getBlockState().getValue(FishTankBlock.TROPICAL)) { + this.level.setBlock(this.getBlockPos(), this.getBlockState().setValue(FishTankBlock.TROPICAL, true), 18); + } + } + + public void dropFish() { + if (this.level == null) return; + for (CompoundTag data : this.tropicalFishData) { + ItemStack bucket = FishTankBlockEntity.fishData2bucket(data); + if (bucket.getItem() instanceof MobBucketItem mobBucket) { + mobBucket.checkExtraContent(null, this.level, bucket, this.getBlockPos()); + } + } + this.tropicalFishData.clear(); + } + + public static CompoundTag bucket2fishData(ItemStack stack) { + CustomData data = stack.get(DataComponents.BUCKET_ENTITY_DATA); + if (data == null) return FishTankBlockEntity.createTropicalFishData(0); + CompoundTag tag = data.copyTag(); + return tag.copy(); + } + + public static ItemStack fishData2bucket(CompoundTag fishData) { + ItemStack stack = new ItemStack(Items.TROPICAL_FISH_BUCKET); + stack.set(DataComponents.BUCKET_ENTITY_DATA, CustomData.of(fishData.copy())); + return stack; + } + + public static CompoundTag createTropicalFishData(int variant) { + CompoundTag entityData = new CompoundTag(); + entityData.putString("id", "minecraft:tropical_fish"); + entityData.putInt("BucketVariantTag", variant); + return entityData; + } + + public boolean isFullOfFish() { + return this.tropicalFishData.size() >= MAX_TROPICAL_FISH; + } + + public boolean isEmptyOfFish() { + return this.tropicalFishData.isEmpty(); + } + // endregion + + // region 燃烧相关 + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + public static boolean canIgnite(FluidStack cur) { + return cur.is(ModFluidTags.IGNITABLE); + } + + public void setIgnited(boolean ignited) { + if (this.ignited == ignited) { + return; + } + this.ignited = ignited; + this.setChanged(); + this.sendUpdate(); + + if (this.level == null) { + return; + } + BlockPos pos = this.getBlockPos(); + AuxiliaryLightManager manager = this.level.getAuxLightManager(pos); + if (manager == null) { + return; + } + manager.setLightAt(pos, ignited ? 15 : this.computeLightLevel()); + } + + public void refreshIgnited() { + if (!FishTankBlockEntity.canIgnite(this.fluidHandler.getStack())) { + this.setIgnited(false); + } + if (this.isIgnited()) { + return; + } + for (int i = 0; i < this.proxy.size(); i++) { + ItemResource resource = this.proxy.getResource(i); + if (resource.is(ModItemTags.FIRE_STARTER)) { + try (Transaction transaction = Transaction.openRoot()) { + this.proxy.extract(i, this.proxy.getResource(i), 1, transaction); + transaction.commit(); + } + this.setIgnited(true); + } else if (resource.is(ModItemTags.UNBROKEN_FIRE_STARTER)) { + this.setIgnited(true); + } + } + } + // endregion + // endregion + + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + ResourceHandler handler = this.getItemHandler(); + for (int slot = 0; slot < handler.size(); slot++) { + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = handler.getResource(slot); + if (resource.isEmpty()) continue; + int extracted = handler.extract(slot, resource, Integer.MAX_VALUE, transaction); + if (extracted > 0) { + Block.popResource(this.level, pos, resource.toStack(extracted)); + } + transaction.commit(); + } + } + this.dropFish(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/FluidTankBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/FluidTankBlockEntity.java index 0b159e1914..dd1d17e4f6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/FluidTankBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/FluidTankBlockEntity.java @@ -1,27 +1,33 @@ package dev.dubhe.anvilcraft.block.entity; +import dev.dubhe.anvilcraft.api.fluid.CapacityModifiableFluidHandler; import dev.dubhe.anvilcraft.api.fluid.IFluidHandlerHolder; +import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.util.ProblemReporter; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.TagValueOutput; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.neoforged.neoforge.fluids.FluidType; -import net.neoforged.neoforge.fluids.FluidUtil; -import net.neoforged.neoforge.fluids.IFluidTank; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.fluids.capability.templates.FluidTank; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.fluid.FluidUtil; public class FluidTankBlockEntity extends BlockEntity implements IFluidHandlerHolder { public static final int CAPACITY = 16 * FluidType.BUCKET_VOLUME; public static final int BIG_CAPACITY = 640 * FluidType.BUCKET_VOLUME; - protected final FluidTank tank = new FluidTank(CAPACITY); + @Getter + protected final CapacityModifiableFluidHandler tank = new CapacityModifiableFluidHandler(1, FluidTankBlockEntity.CAPACITY); protected boolean isBigger = false; public FluidTankBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { @@ -39,34 +45,31 @@ public void onUnformed() { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.putBoolean("bigger", this.isBigger); - CompoundTag tankNbt = tank.writeToNBT(provider, new CompoundTag()); - if (!tankNbt.isEmpty()) { - tag.put("tank", tankNbt); - } + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putBoolean("bigger", this.isBigger); + this.tank.serialize(output); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - this.isBigger = tag.getBoolean("bigger"); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.isBigger = input.getBooleanOr("bigger", false); if (this.isBigger) { this.onFormed(); } else { this.onUnformed(); } - tank.readFromNBT(provider, tag.getCompound("tank")); + this.tank.deserialize(input); } @Override public CompoundTag getUpdateTag(HolderLookup.Provider registries) { CompoundTag tag = super.getUpdateTag(registries); tag.putBoolean("bigger", this.isBigger); - CompoundTag fluidTag = new CompoundTag(); - tank.writeToNBT(registries, fluidTag); - tag.put("tank", fluidTag); + TagValueOutput valueOutput = TagValueOutput.createWithContext(ProblemReporter.DISCARDING, registries); + this.tank.serialize(valueOutput); + tag.store("tank", CompoundTag.CODEC, valueOutput.buildResult()); return tag; } @@ -76,14 +79,11 @@ public Packet getUpdatePacket() { } public boolean onPlayerUse(Player player, InteractionHand hand) { - return FluidUtil.interactWithFluidHandler(player, hand, tank); + return FluidUtil.interactWithFluidHandler(player, hand, worldPosition, this.tank); } - public IFluidTank getTank() { - return tank; - } - - public IFluidHandler getFluidHandler() { - return tank; + @Override + public ResourceHandler getFluidHandler() { + return this.tank; } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/HasMobBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/HasMobBlockEntity.java index 3d529fa2b8..0fae59a9c2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/HasMobBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/HasMobBlockEntity.java @@ -2,68 +2,60 @@ import dev.dubhe.anvilcraft.init.item.ModComponents; import dev.dubhe.anvilcraft.item.property.component.SavedEntity; +import lombok.extern.slf4j.Slf4j; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.Mob; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.attachment.AttachmentType; +import org.jspecify.annotations.Nullable; import java.util.Optional; +import java.util.function.Supplier; +@Slf4j public abstract class HasMobBlockEntity extends BlockEntity { - private CompoundTag entity = null; - private Entity displayEntity = null; + private @Nullable SavedEntity entity = null; + private @Nullable Entity displayEntity = null; protected HasMobBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); } - /** - * 设置实体 - */ + /// 设置实体 public void setEntity(@Nullable Entity entity) { if (entity == null) return; - if (this.entity == null) this.entity = new CompoundTag(); - entity.save(this.entity); - this.entity.remove(Entity.UUID_TAG); - } - - /** - * 设置实体 - */ - public void setEntity(@Nullable CompoundTag entity) { - if (entity == null) return; - this.entity = entity; - this.entity.remove(Entity.UUID_TAG); + this.entity = SavedEntity.fromEntity(entity); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); if (this.entity != null) { - tag.put("entity", this.entity); + output.store("entity", SavedEntity.CODEC, this.entity); } } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - if (tag.contains("entity")) { - this.entity = tag.getCompound("entity"); - if (this.level != null) { - this.getEntity(this.level); - } + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + Optional entity = input.read("entity", SavedEntity.CODEC); + if (entity.isEmpty()) return; + this.entity = entity.get(); + if (this.level != null) { + this.getEntity(this.level); } - super.loadAdditional(tag, provider); } @Override @@ -86,40 +78,44 @@ public Entity getOrCreateDisplayEntity(Level level) { } private void getEntity(Level level) { - if (this.entity == null) return; - Optional> optional = EntityType.by(this.entity); - if (optional.isEmpty()) return; - EntityType type = optional.get(); - Entity entity = type.create(level); + Entity entity; + if (this.entity == null) { + entity = this.createDefaultEntity(level); + this.entity = SavedEntity.fromEntity(entity); + } else { + entity = this.entity.toEntity(level); + } if (entity == null) return; - entity.load(this.entity); entity.setYRot(0); this.displayEntity = entity; this.displayEntity.noPhysics = true; } + protected abstract @Nullable Entity createDefaultEntity(Level level); + @Override - protected void applyImplicitComponents(DataComponentInput componentInput) { - super.applyImplicitComponents(componentInput); - SavedEntity savedEntity = componentInput.get(ModComponents.SAVED_ENTITY); - if (savedEntity == null) return; - this.setEntity(savedEntity.tag()); + protected void applyImplicitComponents(DataComponentGetter components) { + super.applyImplicitComponents(components); + SavedEntity entity = components.get(ModComponents.SAVED_ENTITY); + if (entity == null) return; + this.entity = entity; } @Override protected void collectImplicitComponents(DataComponentMap.Builder components) { super.collectImplicitComponents(components); - if (this.displayEntity == null && this.level != null) { - this.getEntity(this.level); - } - if (!(this.displayEntity instanceof Mob mob)) return; - components.set(ModComponents.SAVED_ENTITY, SavedEntity.fromMob(mob)); + components.set(ModComponents.SAVED_ENTITY, this.entity); } @Override @SuppressWarnings("deprecation") - public void removeComponentsFromTag(CompoundTag tag) { - super.removeComponentsFromTag(tag); - tag.remove("entity"); + public void removeComponentsFromTag(ValueOutput output) { + super.removeComponentsFromTag(output); + output.discard("entity"); + } + + @Override + public @Nullable T removeData(Supplier> type) { + return super.removeData(type); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/HeatCollectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/HeatCollectorBlockEntity.java index 19372f3124..3c77906b53 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/HeatCollectorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/HeatCollectorBlockEntity.java @@ -4,33 +4,31 @@ import dev.dubhe.anvilcraft.api.power.IPowerProducer; import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; -import dev.dubhe.anvilcraft.block.HeatCollectorBlock; +import dev.dubhe.anvilcraft.block.power.generator.HeatCollectorBlock; import dev.dubhe.anvilcraft.util.TriggerUtil; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; +@Getter public class HeatCollectorBlockEntity extends BlockEntity implements IPowerProducer, IHasAffectRange { public static final int MAX_OUTPUT_POWER = 4096; - @Getter private int time = 0; - @Getter @Setter - private PowerGrid grid = null; - @Getter + private @Nullable PowerGrid grid = null; private int outputPower = 0; + @Getter(AccessLevel.NONE) private int inputtingPower = 0; - @Getter private float rotation = 0; - @Getter @Setter private WorkResult result = WorkResult.SUCCESS; @@ -48,27 +46,27 @@ public int getRange() { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("tickCache", this.time); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("tickCache", this.time); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.time = tag.getInt("tickCache"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.time = input.getIntOr("tickCache", 0); } @Override public void gridTick() { - if (!this.isWorking() || level == null || level.isClientSide()) return; + if (!this.isWorking() || this.level == null || this.level.isClientSide()) return; int oldPower = this.outputPower; this.outputPower = this.inputtingPower; if (this.outputPower > 0 && this.getBlockState().getBlock() instanceof HeatCollectorBlock collector) { collector.activate(this.level, this.getBlockPos(), this.getBlockState()); TriggerUtil.heatCollectorOutput(this.level, this.getBlockPos(), this.outputPower); } - if (this.outputPower != oldPower && grid != null) grid.markChanged(); + if (this.outputPower != oldPower && this.grid != null) this.grid.markChanged(); this.inputtingPower = 0; this.time++; } @@ -96,19 +94,17 @@ public void setRemoved() { public void clientTick() { if (!this.isWorking()) return; - rotation += (float) (Math.log(getServerPower() + 1) * 2.5); + this.rotation += (float) (Math.log(getServerPower() + 1) * 2.5); } public boolean isWorking() { return this.result.isWorking(); } - /** - * 向集热器添加热能 - * - * @param num 添加至收集器的热能 - * @return 溢出的热能(即未被添加至该收集器的热能) - */ + /// 向集热器添加热能 + /// + /// @param num 添加至收集器的热能 + /// @return 溢出的热能(即未被添加至该收集器的热能) public int inputtingHeat(int num) { if (!this.isWorking()) return num; int overflow = num - (MAX_OUTPUT_POWER - this.inputtingPower); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/HeaterBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/HeaterBlockEntity.java index 153a11e7b8..2b646fb878 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/HeaterBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/HeaterBlockEntity.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Objects; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/HeliostatsBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/HeliostatsBlockEntity.java index 8292dfd2c8..c945ccdb68 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/HeliostatsBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/HeliostatsBlockEntity.java @@ -6,29 +6,31 @@ import dev.dubhe.anvilcraft.init.ModHeaterInfos; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.network.HeliostatsIrradiationPacket; +import dev.dubhe.anvilcraft.util.Util; import lombok.Getter; import lombok.Setter; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.block.HalfTransparentBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec2; import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.client.network.ClientPacketDistributor; import org.joml.Vector3f; +import org.jspecify.annotations.Nullable; import java.util.Objects; public class HeliostatsBlockEntity extends BlockEntity { @Getter + @Nullable private BlockPos irritatePos; @Getter @@ -51,44 +53,43 @@ public HeliostatsBlockEntity(BlockEntityType type, BlockPos pos, BlockState b } private Vec3 getSurfaceVec3(Vec3 vec31, Vec3 vec32) { - if (vec31.hashCode() + vec32.hashCode() == surfaceVec3Hash) return surfaceVec3; + if (vec31.hashCode() + vec32.hashCode() == this.surfaceVec3Hash) return this.surfaceVec3; if (level == null) return vec31; - if (!level.getBlockState(irritatePos.north()).isAir() - && !level.getBlockState(irritatePos.south()).isAir() - && !level.getBlockState(irritatePos.east()).isAir() - && !level.getBlockState(irritatePos.west()).isAir()) { + if (!level.getBlockState(this.irritatePos.north()).isAir() + && !level.getBlockState(this.irritatePos.south()).isAir() + && !level.getBlockState(this.irritatePos.east()).isAir() + && !level.getBlockState(this.irritatePos.west()).isAir()) { return vec31.add(0, 0, 0); } Vec2 vec2 = new Vec2((float) (vec32.z - vec31.z), (float) (vec32.x - vec31.x)); - if (vec2.x == 0) return vec31.add(vec2.y > 0 ? 0.49f : -0.49f, 0, 0); - if (vec2.y == 0) return vec31.add(0, 0, vec2.x > 0 ? 0.49f : -0.49f); + if (vec2.x == 0) return vec31.add(vec2.y > 0 ? 0.49F : -0.49F, 0, 0); + if (vec2.y == 0) return vec31.add(0, 0, vec2.x > 0 ? 0.49F : -0.49F); float k = vec2.y / vec2.x; - float x = vec2.x > 0 ? 0.49f : -0.49f; - float y = vec2.y > 0 ? 0.49f : -0.49f; + float x = vec2.x > 0 ? 0.49F : -0.49F; + float y = vec2.y > 0 ? 0.49F : -0.49F; if (y / k < 0.5 && y / k > -0.5) { + // noinspection SuspiciousNameCombination return vec31.add(y, 0, y / k); } if (k * x < 0.5 && k * x > -0.5) { return vec31.add(k * x, 0, x); } - surfaceVec3Hash = vec31.hashCode() + vec32.hashCode(); - surfaceVec3 = vec31; + this.surfaceVec3Hash = vec31.hashCode() + vec32.hashCode(); + this.surfaceVec3 = vec31; return vec31; } - /** - * 设置照射坐标 - */ + /// 设置照射坐标 public boolean setIrritatePos(BlockPos pos) { - irritatePos = pos; + this.irritatePos = pos; this.setChanged(); - return validatePos(pos).isWorking(); + return this.validatePos(pos).isWorking(); } private WorkResult validatePos(@Nullable BlockPos irritatePos) { - normalVector3f = new Vector3f(); + this.normalVector3f = new Vector3f(); if (level == null) return WorkResult.UNKNOWN; - if (level.isClientSide && Minecraft.getInstance().player == null) return WorkResult.UNKNOWN; + if (level.isClientSide() && Minecraft.getInstance().player == null) return WorkResult.UNKNOWN; if (irritatePos == null) return WorkResult.UNSPECIFIED_IRRADIATION_BLOCK; if (getBlockPos().getCenter().distanceTo(irritatePos.getCenter()) > 64) { return WorkResult.TOO_FAR; @@ -120,63 +121,59 @@ private WorkResult validatePos(@Nullable BlockPos irritatePos) { return WorkResult.NO_SUN; } Vec3 irritateVec3 = - getSurfaceVec3(irritatePos.getCenter(), getBlockPos().getCenter()); + this.getSurfaceVec3(irritatePos.getCenter(), getBlockPos().getCenter()); BlockHitResult blockHitResult = level.clip(new ClipContext( - getBlockPos().getCenter().add(0f, 1.376f, 0f), - irritateVec3, - ClipContext.Block.COLLIDER, - ClipContext.Fluid.NONE, - level.isClientSide - ? Objects.requireNonNull(Minecraft.getInstance().player) - : AnvilCraftFakePlayers.anvilcraftBlockPlacer.getPlayer()) + getBlockPos().getCenter().add(0F, 1.376F, 0F), + irritateVec3, + ClipContext.Block.COLLIDER, + ClipContext.Fluid.NONE, + level.isClientSide() + ? Objects.requireNonNull(Minecraft.getInstance().player) + : AnvilCraftFakePlayers.anvilcraftBlockPlacer.getPlayer() + ) ); if (!blockHitResult.getBlockPos().equals(irritatePos)) { return WorkResult.OBSCURED; } - double sunAngle = level.getSunAngle(1); - sunAngle = sunAngle <= Math.PI / 2 * 3 ? sunAngle + Math.PI / 2 : sunAngle - Math.PI / 2 * 3; + double sunAngle = Util.getSunAngle(level, this.worldPosition.getBottomCenter()); + sunAngle = sunAngle <= Math.PI / 2 * 3 ? (sunAngle + Math.PI / 2) : (sunAngle - Math.PI / 2 * 3); if (sunAngle > Math.PI) return WorkResult.NO_SUN; Vector3f sunVector3f = new Vector3f((float) Math.cos(sunAngle), (float) Math.sin(sunAngle), 0).normalize(); - irritateVector3f = new Vector3f( + this.irritateVector3f = new Vector3f( (float) (irritateVec3.x - getBlockPos().getX()), (float) (irritateVec3.y - getBlockPos().getY()), (float) (irritateVec3.z - getBlockPos().getZ()) ).normalize(); - normalVector3f = sunVector3f.add(irritateVector3f).div(2); - if (normalVector3f.y < 0) { + this.normalVector3f = sunVector3f.add(this.irritateVector3f).div(2); + if (this.normalVector3f.y < 0) { return WorkResult.NO_ROTATION_ANGLE; } return WorkResult.SUCCESS; } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - if (irritatePos == null) return; - tag.putInt("Ix", irritatePos.getX()); - tag.putInt("Iy", irritatePos.getY()); - tag.putInt("Iz", irritatePos.getZ()); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + if (this.irritatePos != null) { + output.store("irritate_pos", BlockPos.CODEC, this.irritatePos); + } } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - if (!tag.contains("Ix")) return; - int x = tag.getInt("Ix"); - int y = tag.getInt("Iy"); - int z = tag.getInt("Iz"); - irritatePos = new BlockPos(x, y, z); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.irritatePos = input.read("irritate_pos", BlockPos.CODEC).orElse(null); } - /** - * tick - */ + /// tick public void tick() { if (level == null) return; if (level.getGameTime() % (AnvilCraft.CONFIG.heliostatsDetectionInterval + 1) != 0) return; - if (irritatePos == null && level.isClientSide) { - PacketDistributor.sendToServer(new HeliostatsIrradiationPacket(getBlockPos(), irritatePos)); + if (this.irritatePos == null && level.isClientSide()) { + ClientPacketDistributor.sendToServer(new HeliostatsIrradiationPacket(getBlockPos(), this.irritatePos)); } - workResult = validatePos(irritatePos); - if (workResult.isWorking()) { + this.workResult = this.validatePos(this.irritatePos); + if (this.workResult.isWorking()) { HeaterManager.addProducer(getBlockPos(), Objects.requireNonNull(getLevel()), ModHeaterInfos.HELIOSTATS); } else { HeaterManager.removeProducer(getBlockPos(), Objects.requireNonNull(getLevel()), ModHeaterInfos.HELIOSTATS); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/IFilterBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/IFilterBlockEntity.java index b5faf04dce..a8af48be93 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/IFilterBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/IFilterBlockEntity.java @@ -4,101 +4,79 @@ import net.minecraft.core.NonNullList; import net.minecraft.world.item.ItemStack; -/** - * 有过滤的方块实体 - */ +/// 有过滤的方块实体 public interface IFilterBlockEntity { int DEFAULT_SLOT_LIMIT = 64; - /** - * 获取有过滤的物品存储 - * - * @return 有过滤的物品存储 - */ + /// 获取有过滤的物品存储 + /// + /// @return 有过滤的物品存储 FilteredItemStackHandler getFilteredItemStackHandler(); - /** - * 获取是否开启过滤 - * - * @return 是否开启过滤 - */ + /// 获取是否开启过滤 + /// + /// @return 是否开启过滤 default boolean isFilterEnabled() { return this.getFilteredItemStackHandler().isFilterEnabled(); } - /** - * 设置是否开启过滤 - * - * @param enable 是否开启过滤 - */ + /// 设置是否开启过滤 + /// + /// @param enable 是否开启过滤 default void setFilterEnabled(boolean enable) { this.getFilteredItemStackHandler().setFilterEnabled(enable); } - /** - * 获取指定槽位是否禁用 - * - * @param slot 槽位 - */ + /// 获取指定槽位是否禁用 + /// + /// @param slot 槽位 default boolean isSlotDisabled(int slot) { return this.getFilteredItemStackHandler().isSlotDisabled(slot); } - /** - * 设置指定槽位是否禁用 - * - * @param slot 槽位 - * @param disable 是否禁用 - */ + /// 设置指定槽位是否禁用 + /// + /// @param slot 槽位 + /// @param disable 是否禁用 default void setSlotDisabled(int slot, boolean disable) { this.getFilteredItemStackHandler().setSlotDisabled(slot, disable); } - /** - * 获取过滤物品 - * - * @return 过滤物品 - */ + /// 获取过滤物品 + /// + /// @return 过滤物品 default NonNullList getFilteredItems() { return this.getFilteredItemStackHandler().getFilteredItems(); } - /** - * 获取指定槽位的过滤 - * - * @param slot 槽位 - */ + /// 获取指定槽位的过滤 + /// + /// @param slot 槽位 default ItemStack getFilter(int slot) { return this.getFilteredItemStackHandler().getFilter(slot); } - /** - * 设置指定槽位的过滤 - * - * @param slot 槽位 - * @param filter 过滤 - */ + /// 设置指定槽位的过滤 + /// + /// @param slot 槽位 + /// @param filter 过滤 default boolean setFilter(int slot, ItemStack filter) { return this.getFilteredItemStackHandler().setFilter(slot, filter); } - /** - * 获取指定槽位的物品数量上限 - * - * @param slot 槽位 - * @return 物品数量上限 - */ + /// 获取指定槽位的物品数量上限 + /// + /// @param slot 槽位 + /// @return 物品数量上限 default int getSlotLimit(int slot) { return this.getFilteredItemStackHandler().getSlotLimit(slot); } - /** - * 设置指定槽位的物品数量上限 - * - * @param slot 槽位 - * @param limit 物品数量上限 - */ + /// 设置指定槽位的物品数量上限 + /// + /// @param slot 槽位 + /// @param limit 物品数量上限 default void setSlotLimit(int slot, int limit) { this.getFilteredItemStackHandler().setSlotLimit(slot, limit); } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/InductionLightBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/InductionLightBlockEntity.java index 736a946904..88a5c6f9ab 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/InductionLightBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/InductionLightBlockEntity.java @@ -6,7 +6,7 @@ import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; -import dev.dubhe.anvilcraft.block.InductionLightBlock; +import dev.dubhe.anvilcraft.block.power.consumer.InductionLightBlock; import dev.dubhe.anvilcraft.util.AabbUtil; import lombok.AccessLevel; import lombok.Getter; @@ -18,7 +18,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; @Setter @Getter diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/InfiniteCollectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/InfiniteCollectorBlockEntity.java new file mode 100644 index 0000000000..9436b934e8 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/InfiniteCollectorBlockEntity.java @@ -0,0 +1,169 @@ +package dev.dubhe.anvilcraft.block.entity; + +import dev.dubhe.anvilcraft.api.heat.collector.IHeatCollector; +import dev.dubhe.anvilcraft.api.power.IPowerProducer; +import dev.dubhe.anvilcraft.api.power.PowerGrid; +import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; +import dev.dubhe.anvilcraft.block.InfiniteCollectorBlock; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.minecraft.world.phys.AABB; +import org.jspecify.annotations.Nullable; + +public class InfiniteCollectorBlockEntity extends BlockEntity implements IPowerProducer, IHasAffectRange, IHeatCollector { + public static final int BASE_OUTPUT_POWER = 256; + public static final int RANGE = 3; + + @Getter + private int time = 0; + @Getter + @Setter + private PowerGrid grid = null; + @Getter + private int outputPower = 0; + private int inputtingPower = 0; + @Getter + private float rotation = 0; + @Getter + @Setter + private WorkResult result = WorkResult.SUCCESS; + + public InfiniteCollectorBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + } + + @Override + public int getRange() { + return RANGE; + } + + @Override + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("tickCache", this.time); + output.putInt("inputtingPower", this.inputtingPower); + } + + @Override + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.time = input.getIntOr("tickCache", 0); + this.inputtingPower = input.getIntOr("inputtingPower", 0); + } + + @Override + public void gridTick() { + if (!this.isWorking() || level == null || level.isClientSide()) return; + int oldPower = this.outputPower; + this.outputPower = BASE_OUTPUT_POWER + this.inputtingPower; + if (this.outputPower > 0 && this.getBlockState().getBlock() instanceof InfiniteCollectorBlock collector) { + collector.activate(this.level, this.getBlockPos(), this.getBlockState()); + } + if (this.outputPower != oldPower && grid != null) grid.markChanged(); + this.inputtingPower = 0; + this.time++; + } + + @Override + public void onLoad() { + super.onLoad(); + } + + @Override + public void onChunkUnloaded() { + super.onChunkUnloaded(); + } + + @Override + public void setRemoved() { + super.setRemoved(); + } + + public void clientTick() { + if (!this.isWorking()) return; + rotation += (float) (Math.log(getServerPower() + 1) * 0.5); + } + + public boolean isWorking() { + return this.result.isWorking(); + } + + public int inputtingHeat(int num) { + if (!this.isWorking()) return num; + this.inputtingPower += num; + return 0; + } + + public double incomingCharge(double num, BlockPos srcPos) { + if (!this.isWorking()) return num; + this.inputtingPower += (int) Math.floor(num); + return 0; + } + + @Override + public @Nullable Level getCurrentLevel() { + return this.getLevel(); + } + + @Override + public BlockPos getPos() { + return this.getBlockPos(); + } + + @Override + public AABB shape() { + return AABB.ofSize(getBlockPos().getCenter(), RANGE * 2 + 1, RANGE * 2 + 1, RANGE * 2 + 1); + } + + @Override + public BlockPos getCollectorPos() { + return this.getBlockPos(); + } + + @Override + public boolean isCollectorWorking() { + return this.isWorking(); + } + + @Override + public void setCollectorWorking(boolean working) { + this.result = working ? WorkResult.SUCCESS : WorkResult.TOO_CLOSE; + } + + @Override + public int inputHeat(int amount) { + return this.inputtingHeat(amount); + } + + @Override + public int getCollectorRange() { + return this.getRange(); + } + + public enum WorkResult { + SUCCESS(""), + TOO_CLOSE("block.anvilcraft.infinite_collector.placement_too_close_to_another"), + ; + + private final String key; + + WorkResult(String key) { + this.key = key; + } + + public String getTranslateKey() { + return this.key; + } + + public boolean isWorking() { + return this == SUCCESS; + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemCollectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemCollectorBlockEntity.java index 9fae5aacdd..a19ea108ab 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemCollectorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemCollectorBlockEntity.java @@ -1,28 +1,32 @@ package dev.dubhe.anvilcraft.block.entity; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; import dev.dubhe.anvilcraft.api.item.IDiskCloneable; import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; -import dev.dubhe.anvilcraft.block.ItemCollectorBlock; +import dev.dubhe.anvilcraft.block.power.consumer.ItemCollectorBlock; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.inventory.ItemCollectorMenu; +import dev.dubhe.anvilcraft.util.ItemResourceHelper; import dev.dubhe.anvilcraft.util.WatchableCyclingValue; import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; -import net.minecraft.core.RegistryAccess; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ProblemReporter; +import net.minecraft.util.TriState; +import net.minecraft.world.Containers; import net.minecraft.world.MenuProvider; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -33,15 +37,19 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.TagValueOutput; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; -import java.util.ArrayList; -import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.Set; @Getter public class ItemCollectorBlockEntity extends BlockEntity @@ -50,21 +58,22 @@ public class ItemCollectorBlockEntity extends BlockEntity IPowerConsumer, IDiskCloneable, IHasAffectRange, - IItemHandlerHolder { - @Setter - private PowerGrid grid; + IItemResourceHandlerHolder { + + private static final Table> POACHING_COLLECTORS = HashBasedTable.create(); private final WatchableCyclingValue rangeRadius = new WatchableCyclingValue<>( - "rangeRadius", thiz -> this.setChanged(), + "rangeRadius", _ -> this.setChanged(), 1, 2, 4, 8 ); + private final WatchableCyclingValue cooldown = new WatchableCyclingValue<>( "cooldown", thiz -> { - cd = thiz.get(); + this.cd = thiz.get(); this.setChanged(); }, 0, @@ -72,25 +81,23 @@ public class ItemCollectorBlockEntity extends BlockEntity 10, 60 ); - private int cd = cooldown.next(); - public static final Map>> POACHING_COLLECTOR_MAP = new HashMap<>(); - - private boolean changed = false; + @Setter + private PowerGrid grid; + private int cd = this.cooldown.next(); + private int oldCooldown = -1; + private int oldRange = -1; + @Nullable + private AABB boundingBox; + private boolean needFlush = false; private final FilteredItemStackHandler itemHandler = new FilteredItemStackHandler(9) { @Override - public void onContentsChanged(int slot) { - if (level == null || level.isClientSide || changed) return; - changed = true; - Objects.requireNonNull(level.getServer()).execute(() -> { - try { - setChanged(); - flushState(level, getBlockPos()); - } finally { - changed = false; - } - }); + protected void onContentsChanged(int index, ItemStack previousContents) { + if (level == null || level.isClientSide()) return; + flushState(level, getBlockPos()); + level.blockEntityChanged(worldPosition); + ItemCollectorBlockEntity.this.needFlush = true; } }; @@ -131,27 +138,33 @@ public FilteredItemStackHandler getFilteredItemStackHandler() { return this.itemHandler; } + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Containers.dropContents(this.level, pos, this.itemHandler.getStacks()); + } + @Override public Component getDisplayName() { return Component.translatable("screen.anvilcraft.item_collector.title"); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - this.itemHandler.deserializeNBT(provider, tag.getCompound("Inventory")); - this.cooldown.fromIndex(tag.getInt("Cooldown")); - this.rangeRadius.fromIndex(tag.getInt("RangeRadius")); - this.cd = tag.getInt("cd"); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + input.child("Inventory").ifPresent(this.itemHandler::deserialize); + this.cooldown.fromIndex(input.getIntOr("Cooldown", 0)); + this.rangeRadius.fromIndex(input.getIntOr("RangeRadius", 0)); + this.cd = input.getIntOr("cd", 0); } @Override - public void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.put("Inventory", this.itemHandler.serializeNBT(provider)); - tag.putInt("Cooldown", this.cooldown.index()); - tag.putInt("RangeRadius", this.rangeRadius.index()); - tag.putInt("cd", this.cd); + public void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + this.itemHandler.serialize(output.child("Inventory")); + output.putInt("Cooldown", this.cooldown.index()); + output.putInt("RangeRadius", this.rangeRadius.index()); + output.putInt("cd", this.cd); } @Nullable @@ -168,87 +181,36 @@ public Packet getUpdatePacket() { } @Override - public CompoundTag getUpdateTag(HolderLookup.Provider provider) { - CompoundTag tag = new CompoundTag(); - tag.put("Inventory", this.itemHandler.serializeNBT(provider)); - tag.putInt("Cooldown", this.cooldown.index()); - tag.putInt("RangeRadius", this.rangeRadius.index()); - return tag; - } - - public List getPoachingMapPositions(int range) { - List chunkPosList = new ArrayList<>(); - BlockPos center = getBlockPos(); - int d = range * 2 + 1; - int minX = center.getX() - d; - int maxX = center.getX() + d; - int minZ = center.getZ() - d; - int maxZ = center.getZ() + d; - int minChunkX = minX >> 4; - int maxChunkX = maxX >> 4; - int minChunkZ = minZ >> 4; - int maxChunkZ = maxZ >> 4; - for (int cx = minChunkX; cx <= maxChunkX; cx++) { - for (int cz = minChunkZ; cz <= maxChunkZ; cz++) { - chunkPosList.add(new ChunkPos(cx, cz)); - } - } - return chunkPosList; + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + TagValueOutput output = TagValueOutput.createWithContext( + new ProblemReporter.Collector(this.problemPath()), + registries + ); + this.saveAdditional(output); + return output.buildResult(); } - public void updatePoachingMapForThis() { - List chunkPosListMax = getPoachingMapPositions(8); - List chunkPosListReal = getPoachingMapPositions(rangeRadius.get()); - for (ChunkPos chunkPos : chunkPosListMax) { - if (cooldown.get() == 0 && chunkPosListReal.contains(chunkPos)) { - if (!POACHING_COLLECTOR_MAP.containsKey(level)) POACHING_COLLECTOR_MAP.put(level, new HashMap<>()); - if (!POACHING_COLLECTOR_MAP.get(level).containsKey(chunkPos)) { - POACHING_COLLECTOR_MAP.get(level).put(chunkPos, new ArrayList<>()); - } - List list = POACHING_COLLECTOR_MAP.get(level).get(chunkPos); - if (!list.contains(this)) list.add(this); - } else { - if (POACHING_COLLECTOR_MAP.containsKey(level) && POACHING_COLLECTOR_MAP.get(level).containsKey(chunkPos)) { - List list = POACHING_COLLECTOR_MAP.get(level).get(chunkPos); - list.remove(this); - } - } - } - + @Override + public void setRemoved() { + super.setRemoved(); + removePoachingCollector(this); } @Override public void gridTick() { - if (level == null || level.isClientSide) return; - this.updatePoachingMapForThis(); - // 如果保持“截胡模式就不再主动吸取物品”的设定就把下面一行取消注释回来 - // if (cooldown.get() == 0) return; + if (level == null || level.isClientSide()) return; - if (cd > 1) { - cd--; + if (this.cd > 1) { + this.cd--; return; } + if (this.boundingBox == null) return; if (!this.isGridWorking()) return; BlockState state = level.getBlockState(getBlockPos()); if (state.hasProperty(ItemCollectorBlock.POWERED) && state.getValue(ItemCollectorBlock.POWERED)) return; - AABB box = AABB.ofSize( - Vec3.atCenterOf(getBlockPos()), - this.rangeRadius.get() * 2.0 + 1, - this.rangeRadius.get() * 2.0 + 1, - this.rangeRadius.get() * 2.0 + 1 - ); - List itemEntities = level.getEntitiesOfClass(ItemEntity.class, box); + List itemEntities = level.getEntitiesOfClass(ItemEntity.class, this.boundingBox); for (ItemEntity itemEntity : itemEntities) { - ItemStack itemStack = itemEntity.getItem(); - int slotIndex = 0; - while (itemStack != ItemStack.EMPTY && slotIndex < 9) { - itemStack = itemHandler.insertItem(slotIndex++, itemStack, false); - } - if (itemStack != ItemStack.EMPTY) { - itemEntity.setItem(itemStack); - } else { - itemEntity.remove(Entity.RemovalReason.DISCARDED); - } + this.acceptItemEntity(itemEntity); } if (this.cooldown.get() > 0) { this.cd = this.cooldown.get(); @@ -257,41 +219,84 @@ public void gridTick() { } } + public TriState acceptItemEntity(ItemEntity itemEntity) { + if (!this.isGridWorking() || getBlockState().getValue(ItemCollectorBlock.POWERED)) { + return TriState.FALSE; + } + ItemStack itemStack = itemEntity.getItem(); + ItemResource resource = ItemResource.of(itemStack); + boolean inserted = false; + try (Transaction transaction = Transaction.openRoot()) { + int amount; + try (Transaction test = Transaction.open(transaction)) { + amount = this.itemHandler.insert(resource, itemStack.count(), test); + } + if (amount != 0) { + this.itemHandler.insert(resource, amount, transaction); + itemStack.shrink(amount); + transaction.commit(); + inserted = true; + } + } + if (itemStack.isEmpty()) { + itemEntity.discard(); + return TriState.TRUE; + } + itemEntity.setItem(itemStack); + return inserted ? TriState.DEFAULT : TriState.FALSE; + } + public void tick(Level level, BlockPos blockPos) { this.flushState(level, blockPos); + if (this.needFlush) { + this.setChanged(); + this.needFlush = false; + } + if (this.cooldown.get() != this.oldCooldown) { + this.oldCooldown = this.cooldown.get(); + if (this.oldCooldown == 0) { + addPoachingCollector(this); + } else { + removePoachingCollector(this); + } + } + if (this.rangeRadius.get() != this.oldRange || this.boundingBox == null) { + this.boundingBox = AABB.ofSize( + Vec3.atCenterOf(getBlockPos()), + this.rangeRadius.get() * 2.0 + 1, + this.rangeRadius.get() * 2.0 + 1, + this.rangeRadius.get() * 2.0 + 1 + ); + this.oldRange = this.rangeRadius.get(); + } } - /** - * 获取红石信号 - */ + /// 获取红石信号 public int getRedstoneSignal() { int i = 0; - for (int j = 0; j < this.itemHandler.getSlots(); ++j) { - ItemStack itemStack = this.itemHandler.getStackInSlot(j); - if (itemStack.isEmpty() && !this.itemHandler.isSlotDisabled(j)) continue; + for (int j = 0; j < this.itemHandler.size(); ++j) { + if (ItemResourceHelper.isSlotEmpty(this.itemHandler, j) && !this.itemHandler.isSlotDisabled(j)) continue; ++i; } return i; } @Override - public void storeDiskData(CompoundTag tag) { + public void storeDiskData(ValueOutput output) { if (this.level == null) return; - RegistryAccess provider = this.level.registryAccess(); - tag.put("Inventory", this.itemHandler.serializeNBT(provider)); - tag.putInt("Cooldown", this.cooldown.index()); - tag.putInt("RangeRadius", this.rangeRadius.index()); - tag.putInt("cd", this.cd); + this.itemHandler.serialize(output.child("Inventory")); + output.putInt("Cooldown", this.cooldown.index()); + output.putInt("RangeRadius", this.rangeRadius.index()); + output.putInt("cd", this.cd); } @Override - public void applyDiskData(CompoundTag tag) { + public void applyDiskData(ValueInput input) { if (this.level == null) return; - RegistryAccess provider = this.level.registryAccess(); - this.itemHandler.deserializeNBT(provider, tag.getCompound("Inventory")); - this.cooldown.fromIndex(tag.getInt("Cooldown")); - this.rangeRadius.fromIndex(tag.getInt("RangeRadius")); - this.cd = tag.getInt("cd"); + this.itemHandler.deserialize(input.childOrEmpty("Inventory")); + this.cooldown.fromIndex(input.getIntOr("Cooldown", 0)); + this.rangeRadius.fromIndex(input.getIntOr("RangeRadius", 0)); + this.cd = input.getIntOr("cd", 0); this.setChanged(); Vec3 center = this.getPos().getCenter(); MinecraftServer server = level.getServer(); @@ -303,11 +308,74 @@ public void applyDiskData(CompoundTag tag) { @Override public AABB shape() { - return AABB.ofSize( - Vec3.atCenterOf(getBlockPos()), - this.rangeRadius.get() * 2.0 + 1, - this.rangeRadius.get() * 2.0 + 1, - this.rangeRadius.get() * 2.0 + 1 + if (this.boundingBox == null) { + this.boundingBox = AABB.ofSize( + Vec3.atCenterOf(getBlockPos()), + this.rangeRadius.get() * 2.0 + 1, + this.rangeRadius.get() * 2.0 + 1, + this.rangeRadius.get() * 2.0 + 1 + ); + } + return this.boundingBox; + } + + public static void clearPoachingCollectors() { + POACHING_COLLECTORS.clear(); + } + + @SuppressWarnings("DataFlowIssue") + public static Set getOrCreateCollectorList(ItemCollectorBlockEntity blockEntity) { + ChunkPos chunkPos = ChunkPos.containing(blockEntity.worldPosition); + Level level = blockEntity.level; + return getOrCreateCollectorList(level, chunkPos); + } + + public static Set getOrCreateCollectorList(Level level, ChunkPos chunkPos) { + Set collectors = POACHING_COLLECTORS.get( + level, + chunkPos ); + if (collectors == null) { + collectors = new HashSet<>(); + POACHING_COLLECTORS.put( + level, + chunkPos, + collectors + ); + } + return collectors; + } + + public static void addPoachingCollector(ItemCollectorBlockEntity blockEntity) { + getOrCreateCollectorList(blockEntity).add(blockEntity); + } + + public static void removePoachingCollector(ItemCollectorBlockEntity blockEntity) { + getOrCreateCollectorList(blockEntity).remove(blockEntity); + } + + @SuppressWarnings("checkstyle:MissingSwitchDefault") + public static void poachItemEntity(ItemEntity itemEntity) { + ChunkPos currentPos = ChunkPos.containing(itemEntity.blockPosition()); + for (int x = -1; x <= 1; x++) { + for (int z = -1; z <= 1; z++) { + ChunkPos chunkPos = new ChunkPos(currentPos.x() + x, currentPos.z() + z); + Set collectors = POACHING_COLLECTORS.get( + itemEntity.level(), + chunkPos + ); + if (collectors == null) continue; + for (ItemCollectorBlockEntity collector : collectors) { + if (!collector.shape().contains(itemEntity.position())) { + continue; + } + TriState state = collector.acceptItemEntity(itemEntity); + if (state == TriState.TRUE) { + break; + } + } + } + } + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemDetectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemDetectorBlockEntity.java index ab3935b17a..8509886e4f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemDetectorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemDetectorBlockEntity.java @@ -3,13 +3,14 @@ import dev.dubhe.anvilcraft.api.item.IDiskCloneable; import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; -import dev.dubhe.anvilcraft.block.ItemDetectorBlock; +import dev.dubhe.anvilcraft.block.utility.redstone.ItemDetectorBlock; import dev.dubhe.anvilcraft.constant.SharedTextures; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.inventory.ItemDetectorMenu; import dev.dubhe.anvilcraft.inventory.container.FilterOnlyContainer; +import dev.dubhe.anvilcraft.util.ItemResourceHelper; import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -20,7 +21,7 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.MenuProvider; @@ -35,16 +36,17 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.neoforged.neoforge.capabilities.Capabilities; -import net.neoforged.neoforge.items.IItemHandler; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jspecify.annotations.Nullable; import java.util.List; import java.util.Optional; -import static dev.dubhe.anvilcraft.block.ItemDetectorBlock.POWERED; - public class ItemDetectorBlockEntity extends BlockEntity implements MenuProvider, IFilterBlockEntity, IHasAffectRange, IDiskCloneable { @@ -118,22 +120,27 @@ private static int lerpOutput(int matchCount, int targetCount) { } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.setRange(tag.getInt("Range")); - if (tag.contains("FilterMode")) this.filterMode = Mode.valueOf(tag.getString("FilterMode")); - if (tag.contains("Filter")) filter.deserializeNBT(registries, tag.getCompound("Filter")); - if (tag.contains("OutputSignal")) this.outputSignal = tag.getInt("OutputSignal"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.setRange(input.getIntOr("Range", 0)); + if (input.getInt("FilterMode").isPresent()) { + this.filterMode = Mode.valueOf(input.getStringOr("FilterMode", "")); + } + input.child("Filter").ifPresent(this.filter::deserialize); + if (input.getInt("OutputSignal").isPresent()) { + this.outputSignal = input.getIntOr("OutputSignal", 0); + } this.recalcDetectionRange(); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("Range", this.range); - tag.putString("FilterMode", this.filterMode.toString()); - tag.put("Filter", this.filter.serializeNBT(registries)); - tag.putInt("OutputSignal", this.outputSignal); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("Range", this.range); + output.putString("FilterMode", this.filterMode.toString()); + ValueOutput child = output.child("Filter"); + this.filter.serialize(child); + output.putInt("OutputSignal", this.outputSignal); } @Override @@ -147,7 +154,7 @@ public CompoundTag getUpdateTag(HolderLookup.Provider registries) { public void tick() { Level level = this.level; - if (level == null || level.isClientSide) return; + if (level == null || level.isClientSide()) return; if (this.detectionRange == null) { this.recalcDetectionRange(); if (this.detectionRange == null) return; @@ -160,11 +167,11 @@ public void tick() { this.detectionRange, entity -> !entity.getItem().isEmpty() ); - int output = getOutput(itemEntities, level, this.detectionRange); + int output = this.getOutput(itemEntities, level, this.detectionRange); if (output == this.outputSignal) return; this.outputSignal = output; - if (blockState.getValue(POWERED) != (this.outputSignal > 0)) { - blockState = blockState.setValue(POWERED, this.outputSignal > 0); + if (blockState.getValue(ItemDetectorBlock.POWERED) != (this.outputSignal > 0)) { + blockState = blockState.setValue(ItemDetectorBlock.POWERED, this.outputSignal > 0); level.setBlock(pos, blockState, 2); } ModBlocks.ITEM_DETECTOR.get().updateNeighborsInFront(level, pos, blockState); @@ -189,7 +196,7 @@ private int getOutput(List itemEntities, Level level, AABB aabb) { matchCount += itemEntity.getItem().getCount(); } } - for (BlockPos p : blocksInRange) matchCount += scanContainer(level, p, filterItem); + for (BlockPos p : blocksInRange) matchCount += this.scanContainer(level, p, filterItem); int lerpedOutput = lerpOutput(matchCount, targetCount); if (lerpedOutput > 0) { minNonZeroOutput = Math.min(minNonZeroOutput, lerpedOutput); @@ -202,18 +209,18 @@ private int getOutput(List itemEntities, Level level, AABB aabb) { if (!hasFilter) { int totalCount = 0; for (ItemEntity itemEntity : itemEntities) totalCount += itemEntity.getItem().getCount(); - for (BlockPos p : blocksInRange) totalCount += scanContainer(level, p, null); + for (BlockPos p : blocksInRange) totalCount += this.scanContainer(level, p, null); output = lerpOutput(totalCount, 1); } return output; } private int scanContainer(Level level, BlockPos pos, @Nullable Item targetItem) { - IItemHandler handler = level.getCapability(Capabilities.ItemHandler.BLOCK, pos, null); + ResourceHandler handler = level.getCapability(Capabilities.Item.BLOCK, pos, null); if (handler == null) return 0; int count = 0; - for (int i = 0; i < handler.getSlots(); i++) { - ItemStack stack = handler.getStackInSlot(i); + for (int i = 0; i < handler.size(); i++) { + ItemStack stack = ItemResourceHelper.getStackInSlot(handler, i); if (stack.isEmpty()) continue; if (targetItem == null || stack.is(targetItem)) count += stack.getCount(); } @@ -227,11 +234,11 @@ public void setFilterMode(Mode filterMode) { } public void increaseRange() { - this.range = Mth.clamp(range + 1, MIN_RANGE, MAX_RANGE); + this.range = Mth.clamp(this.range + 1, MIN_RANGE, MAX_RANGE); } public void decreaseRange() { - this.range = Mth.clamp(range - 1, MIN_RANGE, MAX_RANGE); + this.range = Mth.clamp(this.range - 1, MIN_RANGE, MAX_RANGE); } public void setRange(int range) { @@ -334,19 +341,21 @@ public Packet getUpdatePacket() { } @Override - public void storeDiskData(CompoundTag data) { + public void storeDiskData(ValueOutput output) { if (this.level == null) return; - data.putInt("Range", this.range); - data.putString("FilterMode", this.filterMode.toString()); - data.put("Filter", this.filter.serializeNBT(this.level.registryAccess())); + output.putInt("Range", this.range); + output.putString("FilterMode", this.filterMode.toString()); + ValueOutput child = output.child("Filter"); + this.filter.serialize(child); } @Override - public void applyDiskData(CompoundTag data) { + public void applyDiskData(ValueInput input) { if (this.level == null) return; - this.setRange(data.getInt("Range")); - this.filterMode = Mode.valueOf(data.getString("FilterMode")); - filter.deserializeNBT(this.level.registryAccess(), data.getCompound("Filter")); + this.setRange(input.getIntOr("Range", 0)); + this.filterMode = Mode.valueOf(input.getStringOr("FilterMode", "")); + ValueInput filter1 = input.childOrEmpty("Filter"); + this.filter.deserialize(filter1); this.recalcDetectionRange(); } @@ -354,9 +363,9 @@ public enum Mode { ANY(SharedTextures.BUTTON_ANY), ALL(SharedTextures.BUTTON_ALL); - public final ResourceLocation buttonTexture; + public final Identifier buttonTexture; - Mode(ResourceLocation buttonTexture) { + Mode(Identifier buttonTexture) { this.buttonTexture = buttonTexture; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/LargeFluidTankBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/LargeFluidTankBlockEntity.java index fcce801bb6..664e3dbb9a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/LargeFluidTankBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/LargeFluidTankBlockEntity.java @@ -1,31 +1,35 @@ package dev.dubhe.anvilcraft.block.entity; import dev.dubhe.anvilcraft.api.fluid.IFluidHandlerHolder; -import dev.dubhe.anvilcraft.api.fluidtank.InfinityFluidTank; -import dev.dubhe.anvilcraft.block.LargeFluidTankBlock; +import dev.dubhe.anvilcraft.api.fluid.InfinityFluidTank; +import dev.dubhe.anvilcraft.block.container.LargeFluidTankBlock; import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; -import dev.dubhe.anvilcraft.init.block.ModBlocks; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.util.ProblemReporter; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.TagValueOutput; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.neoforged.neoforge.fluids.FluidType; -import net.neoforged.neoforge.fluids.FluidUtil; -import net.neoforged.neoforge.fluids.IFluidTank; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.fluid.FluidStacksResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidUtil; public class LargeFluidTankBlockEntity extends BlockEntity implements IFluidHandlerHolder { public static final int CAPACITY = 320 * FluidType.BUCKET_VOLUME; public static final int BIG_CAPACITY = 12800 * FluidType.BUCKET_VOLUME; protected final InfinityFluidTank tank = new InfinityFluidTank(CAPACITY, false); - protected boolean isBigger = false; + protected boolean bigger = false; public LargeFluidTankBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); @@ -39,49 +43,50 @@ public void tick() { } protected void checkInfinity() { - if (this.tank.getCapacity() == LargeFluidTankBlockEntity.BIG_CAPACITY && this.tank.getSpace() <= 0) this.tank.setInfinity(true); + FluidResource resource = this.tank.getResource(0); + int capacity = this.tank.getCapacityAsInt(0, resource); + if (capacity != LargeFluidTankBlockEntity.BIG_CAPACITY) return; + if (capacity - this.tank.getAmountAsInt(0) > 0) return; + this.tank.setInfinity(true); } public void onFormed() { - this.isBigger = true; + this.bigger = true; this.tank.setCapacity(BIG_CAPACITY); } public void onUnformed() { - this.isBigger = false; + this.bigger = false; this.tank.setInfinity(false); this.tank.setCapacity(CAPACITY); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.putBoolean("bigger", this.isBigger); - CompoundTag tankNbt = tank.writeToNBT(provider, new CompoundTag()); - if (!tankNbt.isEmpty()) { - tag.put("tank", tankNbt); - } + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putBoolean("bigger", this.bigger); + this.tank.serialize(output.child("tank")); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - this.isBigger = tag.getBoolean("bigger"); - if (this.isBigger) { + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.tank.deserialize(input.childOrEmpty("tank")); + this.bigger = input.getBooleanOr("bigger", false); + if (this.bigger) { this.onFormed(); } else { this.onUnformed(); } - tank.readFromNBT(provider, tag.getCompound("tank")); } @Override public CompoundTag getUpdateTag(HolderLookup.Provider registries) { CompoundTag tag = super.getUpdateTag(registries); - tag.putBoolean("bigger", this.isBigger); - CompoundTag fluidTag = new CompoundTag(); - tank.writeToNBT(registries, fluidTag); - tag.put("tank", fluidTag); + tag.putBoolean("bigger", this.bigger); + TagValueOutput fluidTag = TagValueOutput.createWithContext(new ProblemReporter.Collector(this.problemPath()), registries); + this.tank.serialize(fluidTag); + tag.put("tank", fluidTag.buildResult()); return tag; } @@ -92,27 +97,14 @@ public Packet getUpdatePacket() { public boolean onPlayerUse(Player player, InteractionHand hand) { this.checkInfinity(); - return FluidUtil.interactWithFluidHandler(player, hand, this.getFluidHandler()); - } - - public IFluidTank getTank() { - return getMainPart().tank; - } - - public IFluidHandler getFluidHandler() { - return getMainPart().tank; + return FluidUtil.interactWithFluidHandler(player, hand, this.getBlockPos(), this.getFluidHandler()); } - public boolean isMainPart() { - LargeFluidTankBlock block = ModBlocks.LARGE_FLUID_TANK.get(); - return block.isMainPart(this.getBlockState()); + public FluidStacksResourceHandler getTank() { + return this.tank; } - public LargeFluidTankBlockEntity getMainPart() { - LargeFluidTankBlock block = ModBlocks.LARGE_FLUID_TANK.get(); - BlockPos mainPartPos = block.getMainPartPos(this.getBlockPos(), this.getBlockState()); - if (this.getLevel() == null) return this; - BlockEntity mainPart = this.getLevel().getBlockEntity(mainPartPos); - return mainPart instanceof LargeFluidTankBlockEntity ? (LargeFluidTankBlockEntity) mainPart : this; + public ResourceHandler getFluidHandler() { + return this.tank; } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/LaserReceiverBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/LaserReceiverBlockEntity.java index 560346cd71..c74f35efb9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/LaserReceiverBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/LaserReceiverBlockEntity.java @@ -2,7 +2,7 @@ import dev.dubhe.anvilcraft.api.power.IPowerProducer; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.LaserReceiverBlock; +import dev.dubhe.anvilcraft.block.laser.LaserReceiverBlock; import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; @@ -10,7 +10,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Set; @@ -29,7 +29,7 @@ public LaserReceiverBlockEntity(BlockEntityType type, BlockPos pos, BlockStat @Override public int getOutputPower() { - return Math.min((int) Math.floor(efficiency), power); + return Math.min((int) Math.floor(this.efficiency), this.power); } @Override @@ -41,18 +41,18 @@ public void tick(Level level) { } else { level.setBlockAndUpdate(getBlockPos(), getBlockState().setValue(LaserReceiverBlock.ACTIVE, false)); } - efficiency = 0; - tempEfficiency = 0; - delay = 0; - power = laserLevel * 15; + this.efficiency = 0; + this.tempEfficiency = 0; + this.delay = 0; + this.power = laserLevel * 15; } if (getBlockState().getValue(LaserReceiverBlock.ACTIVE) && !changed) { - if (efficiency < power) { - delay++; - tempEfficiency += power * 0.005; - if (delay >= 20) { - delay = 0; - efficiency = tempEfficiency; + if (this.efficiency < this.power) { + this.delay++; + this.tempEfficiency += this.power * 0.005; + if (this.delay >= 20) { + this.delay = 0; + this.efficiency = this.tempEfficiency; } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/LoadMonitorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/LoadMonitorBlockEntity.java index 2fee6205a5..3caf127f2f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/LoadMonitorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/LoadMonitorBlockEntity.java @@ -3,20 +3,22 @@ import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.LoadMonitorBlock; +import dev.dubhe.anvilcraft.block.power.LoadMonitorBlock; import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import org.jspecify.annotations.Nullable; public class LoadMonitorBlockEntity extends BlockEntity implements IPowerConsumer { @Getter @Setter + @Nullable private PowerGrid grid; private int cooldown = 0; @@ -26,15 +28,15 @@ public LoadMonitorBlockEntity(BlockEntityType type, BlockPos pos, BlockState } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - tag.putInt("Cooldown", cooldown); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.cooldown = input.getIntOr("Cooldown", 0); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - cooldown = tag.getInt("Cooldown"); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("Cooldown", this.cooldown); } @Override @@ -57,8 +59,8 @@ public int getRedstoneSignal() { } public void tick() { - if (cooldown > 0) { - cooldown--; + if (this.cooldown > 0) { + this.cooldown--; } else { if (getGrid() == null) return; flushState(getLevel(), getBlockPos()); @@ -70,7 +72,7 @@ public void tick() { : 0; BlockState state = getBlockState().setValue(LoadMonitorBlock.LOAD, load); getLevel().setBlockAndUpdate(getBlockPos(), state); - cooldown = AnvilCraft.CONFIG.loadMonitor; + this.cooldown = AnvilCraft.CONFIG.loadMonitor; getLevel().updateNeighbourForOutputSignal(getBlockPos(), state.getBlock()); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/MagneticChuteBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/MagneticChuteBlockEntity.java index 3f13f040d7..1d9fe46014 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/MagneticChuteBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/MagneticChuteBlockEntity.java @@ -1,6 +1,6 @@ package dev.dubhe.anvilcraft.block.entity; -import dev.dubhe.anvilcraft.block.MagneticChuteBlock; +import dev.dubhe.anvilcraft.block.logistics.chute.MagneticChuteBlock; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.inventory.MagneticChuteMenu; @@ -14,9 +14,9 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class MagneticChuteBlockEntity extends BaseChuteBlockEntity { public MagneticChuteBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { @@ -39,7 +39,7 @@ protected boolean isEnabled() { } @Override - protected DirectionProperty getFacingProperty() { + protected EnumProperty getFacingProperty() { return MagneticChuteBlock.FACING; } @@ -50,7 +50,7 @@ protected Direction getOutputDirection() { @Override protected Direction getInputDirection() { - return getOutputDirection().getOpposite(); + return this.getOutputDirection().getOpposite(); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/MineralFountainBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/MineralFountainBlockEntity.java index 91e33c9384..0194a6f510 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/MineralFountainBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/MineralFountainBlockEntity.java @@ -8,13 +8,14 @@ import dev.dubhe.anvilcraft.recipe.mineral.MineralFountainRecipe; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import java.util.Arrays; import java.util.List; @@ -37,27 +38,25 @@ public static MineralFountainBlockEntity createBlockEntity( } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.tickCount = tag.getInt("tickCount"); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.tickCount = input.getIntOr("tickCount", 0); } @Override - public void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - tag.putInt("tickCount", this.tickCount); + public void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("tickCount", this.tickCount); } - /** - * 矿物涌泉tick - */ + /// 矿物涌泉tick public void tick() { if (this.level == null) return; if (this.tickCount > -1) this.tickCount--; if (this.tickCount != 0) return; if (!(this.level instanceof ServerLevel serverLevel)) return; - BlockState aroundState = getAroundBlock(); - if (this.level.getMinBuildHeight() > getBlockPos().getY() || getBlockPos().getY() > this.level.getMinBuildHeight() + 8) { + BlockState aroundState = this.getAroundBlock(); + if (this.level.getMinY() > getBlockPos().getY() || getBlockPos().getY() > this.level.getMinY() + 8) { return; } BlockState aboveState = this.level.getBlockState(getBlockPos().above()); @@ -72,31 +71,31 @@ public void tick() { this.level.setBlockAndUpdate(getBlockPos().above(), ModBlocks.CINERITE.getDefaultState()); } else { MineralFountainRecipe.Input input = new MineralFountainRecipe.Input(aroundState.getBlock(), aboveState.getBlock()); - this.level.getRecipeManager() + RecipeManager recipeManager = serverLevel.getServer().getRecipeManager(); + recipeManager .getRecipeFor(ModRecipeTypes.MINERAL_FOUNTAIN.get(), input, level) .ifPresent(recipe -> { - var chanceList = this.level - .getRecipeManager() - .getAllRecipesFor(ModRecipeTypes.MINERAL_FOUNTAIN_CHANCE.get()) + var chanceList = recipeManager.recipeMap() + .byType(ModRecipeTypes.MINERAL_FOUNTAIN_CHANCE.get()) .stream() .filter(r -> r.value() - .getDimension() - .equals(this.level.dimension().location()) + .dimension() + .equals(this.level.dimension().identifier()) ) - .filter(r -> r.value().getFromBlock().test(this.level, aboveState, null)) + .filter(r -> r.value().fromBlock().test(this.level, aboveState, null)) .toList(); for (var changeRecipe : chanceList) { if (this.level.getRandom().nextDouble() <= changeRecipe.value().getChance(serverLevel)) { this.level.setBlockAndUpdate( getBlockPos().above(), - changeRecipe.value().getToBlock().state() + changeRecipe.value().toBlock().state() ); return; } } level.setBlockAndUpdate( getBlockPos().above(), - recipe.value().getToBlock().state() + recipe.value().toBlock().state() ); }); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/MobAmberBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/MobAmberBlockEntity.java index 98178fd465..5f7934563a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/MobAmberBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/MobAmberBlockEntity.java @@ -1,21 +1,27 @@ package dev.dubhe.anvilcraft.block.entity; import dev.dubhe.anvilcraft.init.block.ModBlocks; -import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySpawnReason; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; +import org.jspecify.annotations.Nullable; public class MobAmberBlockEntity extends HasMobBlockEntity { protected MobAmberBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); } + @Override + protected @Nullable Entity createDefaultEntity(Level level) { + return EntityType.MOOSHROOM.create(level, EntitySpawnReason.SPAWN_ITEM_USE); + } + public static MobAmberBlockEntity createBlockEntity( BlockEntityType type, BlockPos pos, @@ -24,14 +30,14 @@ public static MobAmberBlockEntity createBlockEntity( return new MobAmberBlockEntity(type, pos, blockState); } - @OnlyIn(Dist.CLIENT) - public void clientTick(ClientLevel level, BlockPos blockPos) { + // @OnlyIn(Dist.CLIENT) + public void clientTick(Level level, BlockPos blockPos) { BlockState state = level.getBlockState(blockPos); Entity entity = getOrCreateDisplayEntity(level); if (!state.is(ModBlocks.MOB_AMBER_BLOCK) || !(entity instanceof LivingEntity displayEntity)) return; displayEntity.setPos(blockPos.getCenter()); - setYRot(displayEntity, state.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot()); + this.setYRot(displayEntity, state.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot()); } private void setYRot(LivingEntity displayEntity, float rotY) { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/OverseerBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/OverseerBlockEntity.java index 732302d9fb..a00e519a69 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/OverseerBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/OverseerBlockEntity.java @@ -2,7 +2,7 @@ import dev.dubhe.anvilcraft.api.world.load.LevelLoadManager; import dev.dubhe.anvilcraft.api.world.load.LoadChuckData; -import dev.dubhe.anvilcraft.block.OverseerBlock; +import dev.dubhe.anvilcraft.block.utility.OverseerBlock; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -36,32 +36,30 @@ public static OverseerBlockEntity createBlockEntity( return new OverseerBlockEntity(type, pos, blockState); } - /** - * tick 逻辑 - * - * @param level 世界 - * @param pos 坐标 - * @param state 方块状态 - */ + /// tick 逻辑 + /// + /// @param level 世界 + /// @param pos 坐标 + /// @param state 方块状态 @SuppressWarnings("unused") public void tick(Level level, BlockPos pos, BlockState state) { if (level instanceof ServerLevel serverLevel) { // 如果底座上方不是监督者,直接破坏底座,结束方法 - if (!isBaseValid()) { + if (!this.isBaseValid()) { if (LevelLoadManager.checkRegistered(pos)) { LevelLoadManager.unregister(pos, level); } return; } - int newlevel = checkBaseSupportsLevel(level, pos); + int newlevel = this.checkBaseSupportsLevel(level, pos); boolean newRandomTick = this.waterLoggedBlockCount >= 4; - if (newlevel == oldlevel && newRandomTick == oldRandomTick) { + if (newlevel == this.oldlevel && newRandomTick == this.oldRandomTick) { return; } - if (oldlevel > -1 || LevelLoadManager.checkRegistered(pos)) { + if (this.oldlevel > -1 || LevelLoadManager.checkRegistered(pos)) { LevelLoadManager.unregister(pos, level); - oldlevel = -1; - oldRandomTick = false; + this.oldlevel = -1; + this.oldRandomTick = false; } if (newlevel >= 0) { LevelLoadManager.register( @@ -73,8 +71,8 @@ public void tick(Level level, BlockPos pos, BlockState state) { serverLevel), serverLevel); } - oldlevel = newlevel; - oldRandomTick = newRandomTick; + this.oldlevel = newlevel; + this.oldRandomTick = newRandomTick; } } @@ -101,7 +99,7 @@ private int checkBaseSupportsLevel(Level level, BlockPos selfPos) { int waterLoggedBlockCount = 0; BlockPos.MutableBlockPos pos = selfPos.mutable().move(Direction.DOWN); for (int i = 0; i < 3; i++) { - int baseT = checkBaseAt(level, pos); + int baseT = this.checkBaseAt(level, pos); if (baseT == -1) break; waterLoggedBlockCount += baseT; supportLevel++; @@ -113,12 +111,12 @@ private int checkBaseSupportsLevel(Level level, BlockPos selfPos) { private boolean isBaseValid() { BlockPos thizPos = getBlockPos(); - if (!checkBlocks()) return false; - int supportsLevel = checkBaseSupportsLevel(this.level, thizPos); + if (!this.checkBlocks()) return false; + int supportsLevel = this.checkBaseSupportsLevel(this.level, thizPos); for (int i = 0; i < 3; i++) { BlockPos pos = getBlockPos().relative(Direction.Axis.Y, i); BlockState state = level.getBlockState(pos); - if (level.getBlockState(pos).is(ModBlocks.OVERSEER_BLOCK)) { + if (level.getBlockState(pos).is(ModBlocks.OVERSEER)) { level.setBlock(pos, state.setValue(OverseerBlock.LEVEL, supportsLevel), 2); } } @@ -128,7 +126,7 @@ private boolean isBaseValid() { private boolean checkBlocks() { for (int i = 0; i < 3; i++) { BlockPos pos = getBlockPos().relative(Direction.Axis.Y, i); - if (!level.getBlockState(pos).is(ModBlocks.OVERSEER_BLOCK)) { + if (!level.getBlockState(pos).is(ModBlocks.OVERSEER)) { return false; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/PlasmaJetsBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/PlasmaJetsBlockEntity.java index aa481edeb5..812d21d03c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/PlasmaJetsBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/PlasmaJetsBlockEntity.java @@ -1,28 +1,24 @@ package dev.dubhe.anvilcraft.block.entity; import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.api.chargecollector.ChargeCollectorManager; import dev.dubhe.anvilcraft.api.heat.HeaterManager; -import dev.dubhe.anvilcraft.block.FireCauldronBlock; -import dev.dubhe.anvilcraft.block.HeaterBlock; +import dev.dubhe.anvilcraft.block.power.consumer.HeaterBlock; +import dev.dubhe.anvilcraft.block.special.PlasmaJetsBlock; import dev.dubhe.anvilcraft.init.ModHeaterInfos; import dev.dubhe.anvilcraft.init.ModParticles; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.init.block.ModBlocks; -import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.Tag; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.util.RandomSource; +import net.minecraft.util.TriState; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; @@ -30,20 +26,20 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.neoforge.common.util.TriState; +import org.jspecify.annotations.Nullable; import java.util.Collection; import java.util.HashSet; import java.util.Set; -import java.util.function.BiConsumer; public class PlasmaJetsBlockEntity extends BlockEntity { private static final int MAX_DURATION = 10 * 60 * 20; private final Set tubeWalls = new HashSet<>(); + @Nullable private BlockPos cauldronPos = null; private int duration = 0; @@ -119,13 +115,11 @@ public Pair, Set> getHeatingPoses(Level level) { return new Pair<>(noMagnet, magnet); } - private static final BiConsumer CLIENT_TICK = (entity, level) -> entity.clientTick((ClientLevel) level); - public static void tick(Level level, BlockPos ignored, BlockState ignored1, PlasmaJetsBlockEntity entity) { if (level instanceof ServerLevel serverLevel) { entity.serverTick(serverLevel); - } else if (level.isClientSide) { - CLIENT_TICK.accept(entity, level); + } else if (level.isClientSide()) { + entity.clientTick(level); } } @@ -142,8 +136,8 @@ private void serverTick(ServerLevel level) { this.provideCharge(level); } - @OnlyIn(Dist.CLIENT) - private void clientTick(ClientLevel level) { + // @OnlyIn(Dist.CLIENT) + private void clientTick(Level level) { this.refreshCauldronPos(level); this.summonParticles(level); } @@ -163,12 +157,12 @@ protected void checkTubeWallIntegrity(Level level) { break; } } - boolean cauldronExisting = level.getBlockState(cauldronPos).is(ModBlocks.FIRE_CAULDRON) - || level.getBlockState(cauldronPos).is(ModBlocks.OIL_CAULDRON) - || level.getBlockState(cauldronPos).is(Blocks.CAULDRON); - boolean belowCauldronIsNotHeater = !level.getBlockState(cauldronPos.below(1)) + boolean cauldronExisting = PlasmaJetsBlock.isIgnitedOilCauldron(level, this.cauldronPos) + || level.getBlockState(this.cauldronPos).is(ModBlocks.OIL_CAULDRON) + || level.getBlockState(this.cauldronPos).is(Blocks.CAULDRON); + boolean belowCauldronIsNotHeater = !level.getBlockState(this.cauldronPos.below(1)) .is(ModBlocks.HEATER); - boolean heaterOverload = level.getBlockState(cauldronPos.below(1)) + boolean heaterOverload = level.getBlockState(this.cauldronPos.below(1)) .getOptionalValue(HeaterBlock.OVERLOAD).orElse(true); if (wallBroken || blocked || !cauldronExisting || belowCauldronIsNotHeater || heaterOverload) { level.removeBlockEntity(this.getBlockPos()); @@ -180,11 +174,8 @@ protected void checkTubeWallIntegrity(Level level) { protected void refreshDuration(Level level) { this.duration--; - if (level.getBlockState(cauldronPos).getOptionalValue(FireCauldronBlock.LEVEL).orElse(0) > 0 - && this.duration + MAX_DURATION / 2 < MAX_DURATION - ) { + if (this.duration + MAX_DURATION / 2 < MAX_DURATION && PlasmaJetsBlock.tryConsumeOnce(level, this.cauldronPos)) { this.duration += MAX_DURATION / 2; - FireCauldronBlock.lowerFillLevel(level.getBlockState(cauldronPos), level, cauldronPos); } if (this.duration < 0) { level.removeBlock(this.getBlockPos(), false); @@ -199,9 +190,15 @@ protected void hurtEntities(Level level) { entity -> !entity.fireImmune() ); for (Entity entity : entities) { - entity.igniteForSeconds(15.0f); - if (entity.hurt(entity.damageSources().inFire(), 16.0f)) { - entity.playSound(SoundEvents.GENERIC_BURN, 0.4f, 2.0f + RandomSource.create().nextFloat() * 0.4f); + entity.igniteForSeconds(15.0F); + if (level.isClientSide()) { + if (entity.hurtClient(entity.damageSources().inFire())) { + entity.playSound(SoundEvents.GENERIC_BURN, 0.4F, 2.0F + RandomSource.create().nextFloat() * 0.4F); + } + } else { + if (entity.hurtServer(Util.cast(level), entity.damageSources().inFire(), 16.0F)) { + entity.playSound(SoundEvents.GENERIC_BURN, 0.4F, 2.0F + RandomSource.create().nextFloat() * 0.4F); + } } } } @@ -221,16 +218,19 @@ protected void provideCharge(Level level) { } } - @OnlyIn(Dist.CLIENT) - protected void summonParticles(ClientLevel level) { + // @OnlyIn(Dist.CLIENT) + protected void summonParticles(Level level) { Vec3 start = this.getParticleStartPos(level); Vec3 vector = start.vectorTo(this.getParticleEndPos()); RandomSource random = level.getRandom(); for (int i = 0; i < 5; i++) { level.addParticle( - ModParticles.PLASMA_JETS.get(), + ModParticles.PLASMA_JETS::get, + false, true, - start.x, start.y, start.z, + start.x, + start.y, + start.z, (random.nextIntBetweenInclusive(0, 20) - 10) / 100.0, vector.y * 0.13, (random.nextIntBetweenInclusive(0, 20) - 10) / 100.0 @@ -239,10 +239,9 @@ protected void summonParticles(ClientLevel level) { } protected void refreshCauldronPos(Level level) { - if ( - this.cauldronPos != null + if (this.cauldronPos != null && ( - level.getBlockState(this.cauldronPos).is(ModBlocks.FIRE_CAULDRON) + PlasmaJetsBlock.isIgnitedOilCauldron(level, this.cauldronPos) || level.getBlockState(this.cauldronPos).is(Blocks.CAULDRON) ) ) { @@ -250,7 +249,7 @@ protected void refreshCauldronPos(Level level) { } for (int i = 1; i < 6; i++) { if ( - level.getBlockState(this.getBlockPos().below(i)).is(ModBlocks.FIRE_CAULDRON) + PlasmaJetsBlock.isIgnitedOilCauldron(level, this.getBlockPos().below(i)) || level.getBlockState(this.getBlockPos().below(i)).is(ModBlocks.OIL_CAULDRON) || level.getBlockState(this.getBlockPos().below(i)).is(Blocks.CAULDRON) ) { @@ -275,33 +274,32 @@ public Vec3 getParticleEndPos() { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("duration", this.duration); - ListTag tubeWalls = new ListTag(); + @SuppressWarnings("deprecation") + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("duration", this.duration); + ValueOutput.ValueOutputList tubeWalls = output.childrenList("tube_walls"); for (TubeWallLayer layer : this.tubeWalls) { - tubeWalls.add(TubeWallLayer.CODEC.encode(layer, NbtOps.INSTANCE, new CompoundTag()).getOrThrow()); + tubeWalls.addChild().store(TubeWallLayer.CODEC, layer); } - tag.put("tube_walls", tubeWalls); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.duration = tag.getInt("duration"); - ListTag tubeWalls = tag.getList("tube_walls", Tag.TAG_COMPOUND); - for (Tag tubeWallTag1 : tubeWalls) { - if (!(tubeWallTag1 instanceof CompoundTag tubeWallTag)) { - continue; - } - this.tubeWalls.add(TubeWallLayer.CODEC.decode(NbtOps.INSTANCE, tubeWallTag).getOrThrow().getFirst()); + @SuppressWarnings("deprecation") + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.duration = input.getIntOr("duration", 0); + for (ValueInput wall : input.childrenListOrEmpty("tube_walls")) { + wall.read(TubeWallLayer.CODEC).ifPresent(this.tubeWalls::add); } this.cauldronPos = this.getBlockPos().below(this.tubeWalls.size() + 1); } public record TubeWallLayer(Pair first, Pair second) { - public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( - BlockPos.CODEC.fieldOf("center").forGetter(TubeWallLayer::getCenter) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( + BlockPos.CODEC + .fieldOf("center") + .forGetter(TubeWallLayer::getCenter) ).apply(ins, TubeWallLayer::of)); public static TubeWallLayer of(BlockPos center) { @@ -319,13 +317,11 @@ public boolean isBroken(Level level) { || !level.getBlockState(this.first.getSecond()).isFaceSturdy(level, this.first.getSecond(), Direction.NORTH); } - /** - * 判断该层是否是磁铁层 - * - * @return {@link TriState#DEFAULT default} 说明该层不是磁铁层 - * {@link TriState#TRUE true} 说明 {@link TubeWallLayer#first() 第一对} 是可加热方块 - * {@link TriState#FALSE false} 说明 {@link TubeWallLayer#second() 第二对} 是可加热方块 - */ + /// 判断该层是否是磁铁层 + /// + /// @return {@link TriState#DEFAULT default} 说明该层不是磁铁层 + /// {@link TriState#TRUE true} 说明 {@link TubeWallLayer#first() 第一对} 是可加热方块 + /// {@link TriState#FALSE false} 说明 {@link TubeWallLayer#second() 第二对} 是可加热方块 public TriState isMagnet(Level level) { if ( level.getBlockState(this.second.getFirst()).is(ModBlockTags.MAGNET) diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/PowerConverterBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/PowerConverterBlockEntity.java index 9220734d0d..9562ebbec4 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/PowerConverterBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/PowerConverterBlockEntity.java @@ -1,24 +1,40 @@ package dev.dubhe.anvilcraft.block.entity; import dev.dubhe.anvilcraft.AnvilCraft; -import dev.dubhe.anvilcraft.api.energy.EnergyHelper; import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.BasePowerConverterBlock; +import dev.dubhe.anvilcraft.block.power.converter.BasePowerConverterBlock; +import lombok.Getter; +import lombok.Setter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.transfer.energy.EnergyHandler; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import net.neoforged.neoforge.transfer.transaction.TransactionContext; +import org.jspecify.annotations.Nullable; public class PowerConverterBlockEntity extends BlockEntity implements IPowerConsumer { - private PowerGrid grid = null; + @Getter + @Setter + private @Nullable PowerGrid grid = null; + @Getter private int inputPower; private int cooldown = 0; + int energy = 0; public PowerConverterBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { this(type, pos, blockState, 1); @@ -34,45 +50,101 @@ public static PowerConverterBlockEntity createBlockEntity( return new PowerConverterBlockEntity(type, pos, blockState); } + int getMaxEnergy() { + return this.inputPower * 10000; + } + + public @Nullable EnergyHandler getEnergyStorage(@Nullable Direction side) { + if (side == null) return new PowerConverterEnergyStore(); + if (side == getBlockState().getValue(BasePowerConverterBlock.FACING)) return new PowerConverterEnergyStore(); + return null; + } + @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.putInt("InputPower", inputPower); - tag.putInt("Cooldown", cooldown); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("InputPower", this.inputPower); + output.putInt("Cooldown", this.cooldown); + output.putInt("Energy", this.energy); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - inputPower = tag.getInt("InputPower"); - cooldown = tag.getInt("Cooldown"); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.inputPower = input.getIntOr("InputPower", 0); + this.cooldown = input.getIntOr("Cooldown", 0); + this.energy = input.getIntOr("Energy", 0); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + CompoundTag tag = super.getUpdateTag(registries); + tag.putInt("Energy", this.energy); + tag.putInt("InputPower", this.inputPower); + return tag; + } + + @Override + public @Nullable Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public void onDataPacket(Connection connection, ValueInput input) { + this.loadAdditional(input); + } + + public int getEnergyStored() { + return this.energy; } - /** - * tick - */ + public int getMaxEnergyStored() { + return this.getMaxEnergy(); + } + + /// tick public void tick() { if (this.level != null) { flushState(this.level, getBlockPos()); } - if (cooldown == 0) { - cooldown = AnvilCraft.CONFIG.powerConverter.powerConverterCountdown; + if (this.cooldown == 0) { + this.cooldown = AnvilCraft.CONFIG.powerConverter.powerConverterCountdown; if (getBlockState().getValue(BasePowerConverterBlock.OVERLOAD)) return; - int amountTick = (int) (inputPower - * AnvilCraft.CONFIG.powerConverter.powerConverterEfficiency - * (1 - AnvilCraft.CONFIG.powerConverter.powerConverterLoss) + int amountTick = (int) ( + this.inputPower + * AnvilCraft.CONFIG.powerConverter.powerConverterEfficiency + * (1 - AnvilCraft.CONFIG.powerConverter.powerConverterLoss) ); int amount = amountTick * AnvilCraft.CONFIG.powerConverter.powerConverterCountdown; - Direction face = getBlockState().getValue(BasePowerConverterBlock.FACING); - EnergyHelper.insertEnergy(getLevel(), getBlockPos().relative(face), face.getOpposite(), amount); + this.energy = Math.min(this.energy + amount, this.getMaxEnergy()); + setChanged(); } else { - cooldown--; + this.cooldown--; + } + this.pushEnergy(); + if (this.level != null && level.getGameTime() % 20 == 0) { + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), Block.UPDATE_ALL); } } - @Override - public int getInputPower() { - return inputPower; + private void pushEnergy() { + if (this.level == null || this.energy <= 0) return; + Direction face = getBlockState().getValue(BasePowerConverterBlock.FACING); + EnergyHandler target = level.getCapability( + Capabilities.Energy.BLOCK, + getBlockPos().relative(face), + face.getOpposite() + ); + if (target != null) { + try (Transaction transaction = Transaction.openRoot()) { + int accepted = target.insert(this.energy, transaction); + transaction.commit(); + if (accepted > 0) { + this.energy -= accepted; + setChanged(); + } + } + } } @Override @@ -85,13 +157,32 @@ public BlockPos getPos() { return getBlockPos(); } - @Override - public void setGrid(@Nullable PowerGrid grid) { - this.grid = grid; - } + class PowerConverterEnergyStore implements EnergyHandler { - @Override - public @Nullable PowerGrid getGrid() { - return grid; + @Override + public long getAmountAsLong() { + return PowerConverterBlockEntity.this.energy; + } + + @Override + public long getCapacityAsLong() { + return PowerConverterBlockEntity.this.getMaxEnergy(); + } + + @Override + public int insert(int maxInsert, TransactionContext transaction) { + return 0; + } + + @Override + public int extract(int maxExtract, TransactionContext transaction) { + if (PowerConverterBlockEntity.this.energy <= 0) return 0; + int r = Math.min(PowerConverterBlockEntity.this.energy, maxExtract); + if (r > 0) { + PowerConverterBlockEntity.this.energy -= r; + setChanged(); + } + return r; + } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/PropelPistonBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/PropelPistonBlockEntity.java index f026a87869..9045a3bf55 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/PropelPistonBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/PropelPistonBlockEntity.java @@ -1,12 +1,14 @@ package dev.dubhe.anvilcraft.block.entity; -import dev.dubhe.anvilcraft.block.PropelPiston; +import dev.dubhe.anvilcraft.block.laser.PropelPistonBlock; import dev.dubhe.anvilcraft.init.item.ModComponents; +import dev.dubhe.anvilcraft.item.property.component.StoredEnergy; import dev.dubhe.anvilcraft.network.UpdatePropelPistonStoredEnergyPacket; import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; @@ -18,17 +20,17 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.piston.PistonStructureResolver; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.HashSet; import java.util.List; import java.util.Set; public class PropelPistonBlockEntity extends BaseLaserBlockEntity { - /** - * 储存的能量 单位:kJ - */ + /// 储存的能量 单位:FE @Getter private int storedEnergy = 0; private int delay = 0; @@ -40,23 +42,23 @@ public PropelPistonBlockEntity(BlockEntityType type, BlockPos pos, BlockState @Override public Direction getFacing() { - return getBlockState().getValue(PropelPiston.FACING); + return getBlockState().getValue(PropelPistonBlock.FACING); } public void updateStoredEnergy(Integer energy) { - this.storedEnergy = Math.clamp(energy, 0, 80000); + this.storedEnergy = Math.clamp(energy, 0, 160000000); if (level == null || !(level instanceof ServerLevel serverLevel)) { return; } PacketDistributor.sendToPlayersTrackingChunk( serverLevel, - new ChunkPos(getBlockPos()), - new UpdatePropelPistonStoredEnergyPacket(getBlockPos(), storedEnergy) + ChunkPos.containing(getBlockPos()), + new UpdatePropelPistonStoredEnergyPacket(getBlockPos(), this.storedEnergy) ); } public void addEnergy(int energy) { - updateStoredEnergy(getStoredEnergy() + energy); + this.updateStoredEnergy(getStoredEnergy() + energy); } @Override @@ -67,25 +69,25 @@ protected int getBaseLaserLevel() { public void tick(Level level, BlockPos pos, BlockState state) { updateLaserLevel(calculateLaserLevel()); if (changed) { - delay = 0; - power = laserLevel * 15; + this.delay = 0; + this.power = laserLevel * 15; } if (!changed) { - if (storedEnergy < 80000) { - delay++; - if (delay >= 20) { - delay = 0; - addEnergy(power); + if (this.storedEnergy < 160000000) { + this.delay++; + if (this.delay >= 20) { + this.delay = 0; + this.addEnergy(this.power); } } } if (getStoredEnergy() > 0) { - level.setBlockAndUpdate(pos, state.setValue(PropelPiston.EXHAUSTED, false)); + level.setBlockAndUpdate(pos, state.setValue(PropelPistonBlock.EXHAUSTED, false)); if (!level.getBlockTicks().hasScheduledTick(pos, state.getBlock())) { - checkCanMove(level, pos, state); + this.checkCanMove(level, pos, state); } } else { - level.setBlockAndUpdate(pos, state.setValue(PropelPiston.EXHAUSTED, true).setValue(PropelPiston.MOVING, false)); + level.setBlockAndUpdate(pos, state.setValue(PropelPistonBlock.EXHAUSTED, true).setValue(PropelPistonBlock.MOVING, false)); } super.tick(level); resetState(); @@ -94,31 +96,31 @@ public void tick(Level level, BlockPos pos, BlockState state) { @Override public Set getIgnoreFace() { Set directions = new HashSet<>(List.of(Direction.values())); - directions.remove(getBlockState().getValue(PropelPiston.FACING).getOpposite()); + directions.remove(getBlockState().getValue(PropelPistonBlock.FACING).getOpposite()); return directions; } private void checkCanMove(Level level, BlockPos pos, BlockState state) { - Direction direction = state.getValue(PropelPiston.FACING); - if (state.getValue(PropelPiston.MOVING)) { + Direction direction = state.getValue(PropelPistonBlock.FACING); + if (state.getValue(PropelPistonBlock.MOVING)) { if (new PistonStructureResolver(level, pos, direction, true).resolve()) { - level.blockEvent(pos, state.getBlock(), 0, state.getValue(PropelPiston.FACING).get3DDataValue()); + level.blockEvent(pos, state.getBlock(), 0, state.getValue(PropelPistonBlock.FACING).get3DDataValue()); } else { - level.setBlockAndUpdate(pos, state.setValue(PropelPiston.MOVING, false)); + level.setBlockAndUpdate(pos, state.setValue(PropelPistonBlock.MOVING, false)); } } } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.storedEnergy = tag.getInt("storedEnergy"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.storedEnergy = input.getIntOr("storedEnergy", 0); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("storedEnergy", Math.min(this.storedEnergy, 80000)); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("storedEnergy", Math.min(this.storedEnergy, 160000000)); } @Override @@ -134,13 +136,13 @@ public CompoundTag getUpdateTag(HolderLookup.Provider registries) { } @Override - protected void applyImplicitComponents(DataComponentInput componentInput) { - Integer energy = componentInput.getOrDefault(ModComponents.STORED_ENERGY, 0); + protected void applyImplicitComponents(DataComponentGetter components) { + Integer energy = components.getOrDefault(ModComponents.STORED_ENERGY, StoredEnergy.EMPTY).value(); this.updateStoredEnergy(energy); } @Override protected void collectImplicitComponents(DataComponentMap.Builder components) { - components.set(ModComponents.STORED_ENERGY, this.storedEnergy); + components.set(ModComponents.STORED_ENERGY, new StoredEnergy(this.storedEnergy)); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/PulseGeneratorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/PulseGeneratorBlockEntity.java index e131945adc..0014c0105c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/PulseGeneratorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/PulseGeneratorBlockEntity.java @@ -2,7 +2,7 @@ import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.api.item.IDiskCloneable; -import dev.dubhe.anvilcraft.block.PulseGeneratorBlock; +import dev.dubhe.anvilcraft.block.utility.redstone.PulseGeneratorBlock; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -10,21 +10,20 @@ import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Optional; @@ -53,31 +52,24 @@ public static PulseGeneratorBlockEntity createBlockEntity(BlockEntityType typ } @Override - public void saveToItem(ItemStack stack, HolderLookup.Provider registries) { - CompoundTag data = this.constructDataNbt(); - BlockItem.setBlockEntityData(stack, this.getType(), data); - stack.applyComponents(this.collectComponents()); - } - - @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); CompoundTag data = this.constructDataNbt(); data.putByte("State", this.state.index()); - tag.put("ExtraData", data); + output.store("ExtraData", CompoundTag.CODEC, data); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - CompoundTag data = tag.getCompound("ExtraData"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + CompoundTag data = input.read("ExtraData", CompoundTag.CODEC).orElse(new CompoundTag()); this.readDataNbt(data); // TODO: 删除if-else和else块内的代码 if (data.contains("State")) { - this.state = State.fromIndex(data.getByte("State")); + this.state = State.fromIndex(data.getByteOr("State", (byte) 0)); } else if (data.contains("RemainingWaitingTime") && data.contains("RemainingSignalDuration")) { - int waitingTimeRemaining = data.getInt("RemainingWaitingTime"); - int signalDurationRemaining = data.getInt("RemainingSignalDuration"); + int waitingTimeRemaining = data.getIntOr("RemainingWaitingTime", 0); + int signalDurationRemaining = data.getIntOr("RemainingSignalDuration", 0); if (waitingTimeRemaining != 0) { this.state = State.WAITING; Optional.ofNullable(this.getLevel()) @@ -108,22 +100,22 @@ public CompoundTag constructDataNbt() { } public PulseGeneratorBlockEntity readDataNbt(CompoundTag data) { - this.startMode = Mode.fromIndex(data.getByte("StartMode")); - this.outputInvert = data.getBoolean("OutputMode"); - this.isInputtingSignal = data.getBoolean("Inputting"); - this.waitingTime = data.getInt("WaitingTime"); - this.signalDuration = data.getInt("SignalDuration"); + this.startMode = Mode.fromIndex(data.getByteOr("StartMode", (byte) 0)); + this.outputInvert = data.getBooleanOr("OutputMode", false); + this.isInputtingSignal = data.getBooleanOr("Inputting", false); + this.waitingTime = data.getIntOr("WaitingTime", 0); + this.signalDuration = data.getIntOr("SignalDuration", 0); return this; } @Override - public void storeDiskData(CompoundTag tag) { - tag.put("Data", this.constructDataNbt()); + public void storeDiskData(ValueOutput output) { + output.store("Data", CompoundTag.CODEC, this.constructDataNbt()); } @Override - public void applyDiskData(CompoundTag data) { - this.readDataNbt(data.getCompound("Data")); + public void applyDiskData(ValueInput input) { + this.readDataNbt(input.read("Data", CompoundTag.CODEC).orElse(new CompoundTag())); } @ApiStatus.Internal @@ -199,9 +191,9 @@ public CompoundTag exportMoveData() { } public void applyMoveData(Level level, BlockPos pos, BlockState state, CompoundTag move) { - this.readDataNbt(move.getCompound("Data")); - this.isInputtingSignal = move.getBoolean("Inputting"); - this.state = State.fromIndex(move.getByte("State")); + this.readDataNbt(move.getCompoundOrEmpty("Data")); + this.isInputtingSignal = move.getBooleanOr("Inputting", false); + this.state = State.fromIndex(move.getByteOr("State", (byte) 0)); switch (this.state) { case WAITING -> level.scheduleTick(pos, state.getBlock(), this.getWaitingTime()); case OUTPUTTING -> level.scheduleTick(pos, state.getBlock(), this.getSignalDuration()); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/RemoteTransmissionPoleBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/RemoteTransmissionPoleBlockEntity.java index efee07a9d4..b135ca01d5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/RemoteTransmissionPoleBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/RemoteTransmissionPoleBlockEntity.java @@ -3,7 +3,7 @@ import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.power.PowerComponentType; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.RemoteTransmissionPoleBlock; +import dev.dubhe.anvilcraft.block.power.transmitting.RemoteTransmissionPoleBlock; import dev.dubhe.anvilcraft.block.state.Vertical4PartHalf; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ResentfulAmberBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ResentfulAmberBlockEntity.java index bb7224bd5d..87107213ae 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ResentfulAmberBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ResentfulAmberBlockEntity.java @@ -4,20 +4,25 @@ import net.minecraft.commands.arguments.EntityAnchorArgument; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.ai.targeting.TargetingConditions; +import net.minecraft.world.entity.EntitySpawnReason; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; +import org.jspecify.annotations.Nullable; public class ResentfulAmberBlockEntity extends MobAmberBlockEntity { private ResentfulAmberBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { super(type, pos, blockState); } + @Override + protected @Nullable Entity createDefaultEntity(Level level) { + return EntityType.ZOMBIE.create(level, EntitySpawnReason.SPAWN_ITEM_USE); + } + public static ResentfulAmberBlockEntity createBlockEntity( BlockEntityType type, BlockPos pos, @@ -26,19 +31,17 @@ public static ResentfulAmberBlockEntity createBlockEntity( return new ResentfulAmberBlockEntity(type, pos, blockState); } - @OnlyIn(Dist.CLIENT) - public void clientTick(ClientLevel level, BlockPos blockPos) { + // @OnlyIn(Dist.CLIENT) + public void clientTick(Level level, BlockPos blockPos) { Entity displayEntity = getOrCreateDisplayEntity(level); if (displayEntity == null) return; Vec3 center = blockPos.getCenter(); - Entity nearest = level.getNearestEntity( - Player.class, - TargetingConditions.forNonCombat(), - null, + Player nearest = level.getNearestPlayer( center.x, center.y, center.z, - AABB.ofSize(center, 8, 8, 8) + 8, + false ); if (nearest == null) return; displayEntity.setPos(blockPos.getCenter()); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/RubyLaserBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/RubyLaserBlockEntity.java index d27256e3aa..78a4a1ffee 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/RubyLaserBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/RubyLaserBlockEntity.java @@ -2,7 +2,7 @@ import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.RubyLaserBlock; +import dev.dubhe.anvilcraft.block.laser.RubyLaserBlock; import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; @@ -10,7 +10,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; @Getter @Setter @@ -32,23 +32,23 @@ public static RubyLaserBlockEntity createBlockEntity( @Override protected int getBaseLaserLevel() { - return isSwitchedOn() ? 1 : 0; + return this.isSwitchedOn() ? 1 : 0; } @Override public void tick(Level level) { this.resetState(); - if (getGrid() != null && getBlockState().getValue(RubyLaserBlock.OVERLOAD) == getGrid().isWorking()) { + if (this.getGrid() != null && this.getBlockState().getValue(RubyLaserBlock.OVERLOAD) == this.getGrid().isWorking()) { level.setBlock( - getPos(), - getBlockState().setValue(OVERLOAD, !getGrid().isWorking()), + this.getPos(), + this.getBlockState().setValue(OVERLOAD, !this.getGrid().isWorking()), 2 ); } - if (level.hasNeighborSignal(getBlockPos()) == (getBlockState().getValue(SWITCH) == Switch.ON)) { + if (level.hasNeighborSignal(getBlockPos()) == (this.getBlockState().getValue(SWITCH) == Switch.ON)) { level.setBlock( - getPos(), - getBlockState().setValue( + this.getPos(), + this.getBlockState().setValue( SWITCH, level.hasNeighborSignal(getBlockPos()) ? Switch.OFF @@ -56,15 +56,15 @@ public void tick(Level level) { ), 2); } - if (isSwitchedOn()) { - emitLaser(getFacing()); + if (this.isSwitchedOn()) { + this.emitLaser(this.getFacing()); } else { if (irradiateBlockPos != null && level.getBlockEntity(irradiateBlockPos) instanceof BaseLaserBlockEntity irradiateBlockEntity ) { irradiateBlockEntity.onCancelingIrradiation(this); } - updateIrradiateBlockPos(null); + this.updateIrradiateBlockPos(null); } super.tick(level); } @@ -96,7 +96,7 @@ public int getInputPower() { @Override public float getLaserOffset() { - return 0.489f; + return 0.489F; } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/RubyPrismBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/RubyPrismBlockEntity.java index c297e14a36..f0707aac30 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/RubyPrismBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/RubyPrismBlockEntity.java @@ -1,6 +1,6 @@ package dev.dubhe.anvilcraft.block.entity; -import dev.dubhe.anvilcraft.block.RubyPrismBlock; +import dev.dubhe.anvilcraft.block.laser.RubyPrismBlock; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.Level; @@ -23,11 +23,11 @@ public static RubyPrismBlockEntity createBlockEntity( } public void tick(Level level) { - if (enabled) { - emitLaser(getFacing()); + if (this.enabled) { + emitLaser(this.getFacing()); } if (laserLevel == 0) { - enabled = false; + this.enabled = false; } super.tick(level); resetState(); @@ -40,19 +40,19 @@ protected int getBaseLaserLevel() { @Override public void onCancelingIrradiation(BaseLaserBlockEntity baseLaserBlockEntity) { - enabled = false; + this.enabled = false; super.onCancelingIrradiation(baseLaserBlockEntity); } @Override public void onIrradiated(BaseLaserBlockEntity baseLaserBlockEntity) { - enabled = true; + this.enabled = true; super.onIrradiated(baseLaserBlockEntity); } @Override public int getLaserLevel() { - if (enabled) { + if (this.enabled) { return super.getLaserLevel(); } return 0; @@ -60,7 +60,7 @@ public int getLaserLevel() { @Override public void clientUpdate(BlockPos irradiateBlockPos, int laserLevel) { - enabled = laserLevel > 0; + this.enabled = laserLevel > 0; super.clientUpdate(irradiateBlockPos, laserLevel); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/SimpleChuteBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/SimpleChuteBlockEntity.java index 38df8216cf..952c9820ff 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/SimpleChuteBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/SimpleChuteBlockEntity.java @@ -1,135 +1,143 @@ package dev.dubhe.anvilcraft.block.entity; import dev.dubhe.anvilcraft.AnvilCraft; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; +import dev.dubhe.anvilcraft.api.block.entity.IConvertableBlockEntity; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; -import dev.dubhe.anvilcraft.block.SimpleChuteBlock; +import dev.dubhe.anvilcraft.api.itemhandler.SingleStackResourceHandler; +import dev.dubhe.anvilcraft.block.logistics.chute.SimpleChuteBlock; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.util.AnvilUtil; import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; +import net.minecraft.core.Holder; +import net.minecraft.world.Containers; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.ItemStackHandler; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import java.util.Collections; import java.util.List; import java.util.Objects; -import static dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil.getTargetItemHandlerList; - @Getter -public class SimpleChuteBlockEntity extends BlockEntity implements IItemHandlerHolder { - private final ItemStackHandler itemHandler = new ItemStackHandler(1) { +public class SimpleChuteBlockEntity extends BlockEntity implements IItemResourceHandlerHolder, IConvertableBlockEntity { + private final SingleStackResourceHandler itemHandler = new SingleStackResourceHandler() { @Override - public void onContentsChanged(int slot) { - setChanged(); + protected void onContentChanged(ItemStack stack) { + SimpleChuteBlockEntity.this.setChanged(); + Level level = SimpleChuteBlockEntity.this.level; + if (level == null) return; + level.sendBlockUpdated( + SimpleChuteBlockEntity.this.getBlockPos(), + SimpleChuteBlockEntity.this.getBlockState(), + SimpleChuteBlockEntity.this.getBlockState(), + Block.UPDATE_ALL + ); } }; @Setter private int cooldown = 0; private long tickedGameTime; - public SimpleChuteBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { - super(type, pos, blockState); + public SimpleChuteBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.putInt("Cooldown", cooldown); - tag.put("Inventory", itemHandler.serializeNBT(provider)); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("Cooldown", this.cooldown); + this.itemHandler.serialize(output.child("Inventory")); } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - cooldown = tag.getInt("Cooldown"); - itemHandler.deserializeNBT(provider, tag.getCompound("Inventory")); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.cooldown = input.getIntOr("Cooldown", 0); + this.itemHandler.deserialize(input.childOrEmpty("Inventory")); } - /** - * tick - */ - @SuppressWarnings({"UnreachableCode", "DuplicatedCode"}) + /// tick public void tick() { - if (level == null) return; - if (cooldown > 0) cooldown--; - tickedGameTime = level.getGameTime(); - if (cooldown == 0 && !this.itemHandler.getStackInSlot(0).isEmpty()) { - cooldown = AnvilCraft.CONFIG.chuteMaxCooldown + 1; + if (this.level == null) return; + if (this.cooldown > 0) this.cooldown--; + this.tickedGameTime = this.level.getGameTime(); + if (this.cooldown == 0 && !this.itemHandler.getResource(0).isEmpty()) { + this.cooldown = AnvilCraft.CONFIG.chuteMaxCooldown + 1; } - if (cooldown == 1) { - BlockPos targetPos = getBlockPos().relative(getOutputDirection()); - BlockEntity targetBE = level.getBlockEntity(targetPos); + if (this.cooldown == 1) { + BlockPos targetPos = this.getBlockPos().relative(this.getOutputDirection()); + BlockEntity targetBE = this.level.getBlockEntity(targetPos); boolean isTargetEmpty = false; - if (targetBE != null) isTargetEmpty = isTargetEmpty(targetBE); + if (targetBE != null) isTargetEmpty = this.isTargetEmpty(targetBE); // 尝试向朝向容器输出 - List targetList = getTargetItemHandlerList( + List> targetList = ItemHandlerUtil.getTargetItemHandlerList( targetPos, - getOutputDirection().getOpposite(), - level + this.getOutputDirection().getOpposite(), + this.level ); if (targetList != null && !targetList.isEmpty()) { - for (IItemHandler target : targetList) { - boolean success = ItemHandlerUtil.exportToTarget(getItemHandler(), 64, stack -> true, target); - if (success) { - // 特判溜槽cd7gt - if (isTargetEmpty) setChuteCD(targetBE); - break; - } + for (ResourceHandler target : targetList) { + boolean success = ItemHandlerUtil.exportToTarget(this.getItemHandler(), 64, (_, _) -> true, target); + if (!success) continue; + // 特判溜槽cd7gt + if (isTargetEmpty) this.setChuteCD(targetBE); + break; } } else { - Vec3 center = getBlockPos().relative(getDirection()).getCenter(); - List itemEntities = Objects.requireNonNull(getLevel()) - .getEntitiesOfClass( - ItemEntity.class, - new AABB(getBlockPos().relative(getDirection())), - itemEntity -> !itemEntity.getItem().isEmpty() - ); + Vec3 center = this.getBlockPos().relative(this.getDirection()).getCenter(); + List itemEntities = Objects.requireNonNull(this.getLevel()).getEntitiesOfClass( + ItemEntity.class, + new AABB(this.getBlockPos().relative(this.getDirection())), + itemEntity -> !itemEntity.getItem().isEmpty() + ); AABB aabb = new AABB( center.add(-0.125, -0.125, -0.125), center.add(0.125, 0.125, 0.125) ); - if (getLevel().noCollision(aabb)) { - for (int i = 0; i < this.itemHandler.getSlots(); i++) { - ItemStack stack = this.itemHandler.getStackInSlot(i); - if (stack.isEmpty()) { - continue; - } - int sameItemCount = 0; - for (ItemEntity entity : itemEntities) { - if (entity.getItem().getItem() == stack.getItem()) { - sameItemCount += entity.getItem().getCount(); - } - } - if (sameItemCount < stack.getItem().getMaxStackSize(stack)) { - ItemStack droppedItemStack = stack.copy(); - int droppedItemCount = - Math.min(stack.getCount(), stack.getMaxStackSize() - sameItemCount); - droppedItemStack.setCount(droppedItemCount); - stack.setCount(stack.getCount() - droppedItemCount); - if (stack.getCount() == 0) stack = ItemStack.EMPTY; - ItemEntity itemEntity = new ItemEntity( - getLevel(), center.x, center.y, center.z, droppedItemStack, 0, 0, 0); - itemEntity.setDefaultPickUpDelay(); - getLevel().addFreshEntity(itemEntity); - this.itemHandler.setStackInSlot(i, stack); - break; - } - + if (!this.getLevel().noCollision(aabb)) return; + ItemStack stack = this.itemHandler.getStack(); + if (stack.isEmpty()) return; + int sameItemCount = 0; + for (ItemEntity entity : itemEntities) { + if (entity.getItem().getItem() == stack.getItem()) { + sameItemCount += entity.getItem().getCount(); } } + if (sameItemCount >= stack.getMaxStackSize()) return; + int dropping = Math.min(stack.getCount(), stack.getMaxStackSize() - sameItemCount); + ItemStack remaining = stack.copyWithCount(dropping); + if (remaining.getCount() == 0) remaining = ItemStack.EMPTY; + ItemEntity itemEntity = new ItemEntity( + this.getLevel(), + center.x, + center.y, + center.z, + remaining, + 0, + 0, + 0 + ); + itemEntity.setDefaultPickUpDelay(); + this.getLevel().addFreshEntity(itemEntity); + this.itemHandler.setStack(stack.copyWithCount(stack.getCount() - dropping)); } } - level.updateNeighbourForOutputSignal(getBlockPos(), getBlockState().getBlock()); + this.level.updateNeighbourForOutputSignal(this.getBlockPos(), this.getBlockState().getBlock()); } public boolean isTargetEmpty(BlockEntity blockEntity) { @@ -156,8 +164,8 @@ private void setChuteCD(BlockEntity targetBE) { } private Direction getDirection() { - if (getLevel() == null) return Direction.DOWN; - BlockState state = getLevel().getBlockState(getBlockPos()); + if (this.getLevel() == null) return Direction.DOWN; + BlockState state = this.getLevel().getBlockState(this.getBlockPos()); if (state.getBlock() instanceof SimpleChuteBlock) { return state.getValue(SimpleChuteBlock.FACING); } @@ -165,25 +173,47 @@ private Direction getDirection() { } public int getRedstoneSignal() { - int i = 0; - for (int j = 0; j < itemHandler.getSlots(); ++j) { - ItemStack itemStack = itemHandler.getStackInSlot(j); - if (itemStack.isEmpty()) { - continue; - } - ++i; - } - return i; + return this.itemHandler.getStack().isEmpty() ? 0 : 1; } protected Direction getOutputDirection() { - return getDirection(); + return this.getDirection(); } public boolean isEmpty() { - for (int i = 0; i < itemHandler.getSlots(); i++) { - if (!itemHandler.getStackInSlot(i).isEmpty()) return false; + return this.itemHandler.getStack().isEmpty(); + } + + @Override + public Holder> targetTypeHolder() { + return ModBlockEntities.CHUTE; + } + + @Override + public void convertTo(ChuteBlockEntity newBe) { + SingleStackResourceHandler handler = this.getItemHandler(); + ItemStack stack = handler.getStack(); + if (stack.isEmpty()) { + return; } - return true; + + int count = stack.getCount(); + try (Transaction transaction = Transaction.openRoot()) { + stack.setCount(count - newBe.getItemHandler().insert(ItemResource.of(stack), count, transaction)); + transaction.commit(); + } + + if (stack.isEmpty()) { + return; + } + + AnvilUtil.dropItems(Collections.singletonList(stack), this.level, newBe.getBlockPos().getCenter()); + } + + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Vec3 center = pos.getCenter(); + Containers.dropItemStack(this.level, center.x, center.y, center.z, this.itemHandler.getStack()); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/SpaceOvercompressorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/SpaceOvercompressorBlockEntity.java index c2e5081c97..cd575b0d2c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/SpaceOvercompressorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/SpaceOvercompressorBlockEntity.java @@ -16,7 +16,9 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.items.ItemStackHandler; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler; import java.util.List; @@ -40,18 +42,18 @@ public static SpaceOvercompressorBlockEntity createBlockEntity(BlockEntityType> whiteList = new ArrayList<>(); private int tickCount = 0; + private int flashTimer = 0; + @Getter + private long lastStrikeTime = 0; @Setter @Getter private @Nullable PowerGrid grid; @@ -103,13 +115,11 @@ public BlockPos getPos() { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - if (this.targetEntityUUID != null) { - tag.putUUID("TargetEntityUUID", this.targetEntityUUID); - } + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + if (this.targetEntityUUID != null) output.store("TargetEntityUUID", UUIDUtil.CODEC, this.targetEntityUUID); if (this.targetLightningRod != null) { - tag.putIntArray( + output.putIntArray( "TargetLightningRod", new int[]{ this.targetLightningRod.getX(), @@ -118,38 +128,56 @@ protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { } ); } - int index = 0; - for (Pair entry : this.whiteList) { - tag.putString(entry.first().getId() + "_-_" + index, entry.second()); - index++; + output.putLong("LastStrikeTime", this.lastStrikeTime); + output.putInt("WhiteListSize", this.whiteList.size()); + for (int i = 0; i < this.whiteList.size(); i++) { + Pair entry = this.whiteList.get(i); + output.putString("WhiteListId" + i, entry.first().getId()); + output.putString("WhiteListArg" + i, entry.second()); } } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - if (tag.contains("TargetEntityUUID")) { - this.targetEntityUUID = tag.getUUID("TargetEntityUUID"); - } else { - this.targetEntityUUID = null; - } - if (tag.contains("TargetLightningRod")) { - int[] arr = tag.getIntArray("TargetLightningRod"); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.targetEntityUUID = input.read("TargetEntityUUID", UUIDUtil.CODEC).orElse(null); + if (input.getIntArray("TargetLightningRod").isPresent()) { + int[] arr = input.getIntArray("TargetLightningRod").orElse(new int[0]); this.targetLightningRod = new BlockPos(arr[0], arr[1], arr[2]); } else { this.targetLightningRod = null; } + this.lastStrikeTime = input.getLongOr("LastStrikeTime", 0); this.whiteList.clear(); - for (String key : tag.getAllKeys()) { - if (key.split("_-_").length != 2) continue; - String id = key.split("_-_")[0]; - this.whiteList.add(Pair.of(TeslaFilter.getFilter(id), tag.getString(key))); + int size = input.getIntOr("WhiteListSize", 0); + for (int i = 0; i < size; i++) { + String id = input.getStringOr("WhiteListId" + i, ""); + String arg = input.getStringOr("WhiteListArg" + i, ""); + this.whiteList.add(Pair.of(TeslaFilter.getFilter(id), arg)); } } @Override public CompoundTag getUpdateTag(HolderLookup.Provider registries) { - return this.saveWithoutMetadata(registries); + CompoundTag tag = super.getUpdateTag(registries); + tag.putLong("LastStrikeTime", this.lastStrikeTime); + if (this.targetEntityUUID != null) { + tag.store("TargetEntityUUID", UUIDUtil.CODEC, this.targetEntityUUID); + } + if (this.targetLightningRod != null) { + tag.putIntArray("TargetLightningRod", new int[]{ + this.targetLightningRod.getX(), + this.targetLightningRod.getY(), + this.targetLightningRod.getZ() + }); + } + tag.putInt("WhiteListSize", this.whiteList.size()); + for (int i = 0; i < this.whiteList.size(); i++) { + Pair entry = this.whiteList.get(i); + tag.putString("WhiteListId" + i, entry.first().getId()); + tag.putString("WhiteListArg" + i, entry.second()); + } + return tag; } @Override @@ -157,6 +185,11 @@ public Packet getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); } + @Override + public void onDataPacket(Connection connection, ValueInput input) { + this.loadAdditional(input); + } + public void tick() { if (this.level == null) return; BlockState state = this.level.getBlockState(getBlockPos()); @@ -177,11 +210,21 @@ public void tick() { this.flushState(this.level, getBlockPos().above(2)); this.flushState(this.level, getBlockPos().above(3)); if (this.level.isClientSide()) return; + if (this.flashTimer > 0) { + this.flashTimer--; + if (this.flashTimer == 0) { + this.targetEntity = null; + this.targetEntityUUID = null; + this.targetLightningRod = null; + this.level.sendBlockUpdated(this.getBlockPos(), state, state, 2); + } + } if (state.getValue(TeslaTowerBlock.OVERLOAD) || state.getValue(TeslaTowerBlock.SWITCH) == Switch.OFF) { final boolean hasChanged = this.targetEntity != null || this.targetEntityUUID != null || this.targetLightningRod != null; this.targetEntity = null; this.targetEntityUUID = null; this.targetLightningRod = null; + this.flashTimer = 0; if (hasChanged) { this.setChanged(); this.level.sendBlockUpdated(this.getBlockPos(), state, state, 2); @@ -196,7 +239,7 @@ public void tick() { this.tickCount--; AABB aabb = new AABB(this.getBlockPos().above(3)).expandTowards(8, 8, 8).expandTowards(-8, -8, -8); if (this.targetEntity != null) { - if (!targetEntity.isAlive()) { + if (!this.targetEntity.isAlive()) { this.clearTargetEntity(state); } else { AABB boundingBox = this.targetEntity.getBoundingBox(); @@ -207,6 +250,7 @@ public void tick() { } Optional target = this.level.getEntitiesOfClass(LivingEntity.class, aabb) .stream() + .filter(LivingEntity::isAlive) .filter(it -> this.whiteList.stream().noneMatch(it2 -> it2.left().match(it, it2.right()))) .min((e1, e2) -> new DistanceComparator(getBlockPos().getCenter()).compare(e1.position(), e2.position())); if (target.isPresent()) { @@ -217,13 +261,34 @@ public void tick() { } this.targetEntity = targetEntity; this.targetEntityUUID = targetEntity.getUUID(); + this.lastStrikeTime = this.level.getGameTime(); this.level.sendBlockUpdated(this.getBlockPos(), state, state, 2); - this.targetEntity.hurt(this.level.damageSources().lightningBolt(), 5.0F); + if (this.level instanceof ServerLevel serverLevel) { + LightningBolt lightningBolt = new LightningBolt(EntityType.LIGHTNING_BOLT, serverLevel); + lightningBolt.setPos(targetEntity.position()); + lightningBolt.setDamage(lightningBolt.getDamage() * 2); + if (!EventHooks.onEntityStruckByLightning(targetEntity, lightningBolt)) { + targetEntity.thunderHit(serverLevel, lightningBolt); + } + if (!targetEntity.isAlive() || targetEntity.isRemoved()) { + AABB area = new AABB(targetEntity.blockPosition()).inflate(1.0); + LivingEntity converted = this.level.getEntitiesOfClass(LivingEntity.class, area, + e -> e != targetEntity && e.isAlive()).stream().findFirst().orElse(targetEntity); + this.targetEntity = converted; + this.targetEntityUUID = converted.getUUID(); + this.level.sendBlockUpdated(this.getBlockPos(), state, state, 2); + } + } + this.flashTimer = 5; + this.level.playSound(null, getBlockPos(), ModSoundEvents.TESLA_TOWER_STRIKE.get(), SoundSource.BLOCKS, 1.0f, 1.0f); } else { ArrayList lightningRods = new ArrayList<>(); BlockPos.betweenClosedStream(aabb) .forEach(it -> { - if (this.level.getBlockState(it).is(Blocks.LIGHTNING_ROD)) lightningRods.add(it.above(0)); + BlockState blockState = this.level.getBlockState(it); + if (blockState.is(ModBlockTags.LIGHTNING_RODS)) { + lightningRods.add(it.above(0)); + } }); Optional targetBlock = lightningRods.stream() .min((b1, b2) -> new DistanceComparator(getBlockPos().getCenter()).compare(b1.getCenter(), b2.getCenter())); @@ -235,12 +300,14 @@ public void tick() { return; } this.targetLightningRod = targetLightningRod; + this.lastStrikeTime = this.level.getGameTime(); this.level.sendBlockUpdated(this.getBlockPos(), state, state, 2); - ((LightningRodBlock) Blocks.LIGHTNING_ROD).onLightningStrike( - this.level.getBlockState(targetLightningRod), - this.level, - targetLightningRod - ); + BlockState targetState = this.level.getBlockState(targetLightningRod); + if (targetState.getBlock() instanceof LightningRodBlock rodBlock) { + rodBlock.onLightningStrike(targetState, this.level, targetLightningRod); + } + this.flashTimer = 5; + this.level.playSound(null, getBlockPos(), ModSoundEvents.TESLA_TOWER_STRIKE.get(), SoundSource.BLOCKS, 1.0f, 1.0f); } } @@ -251,11 +318,12 @@ private void clearTargetEntity(BlockState state) { } public void initWhiteList(Player player) { + this.whiteList.add(Pair.of(new IsPlayerFilter(), "")); this.whiteList.add(Pair.of(new IsPlayerIdFilter(), player.getName().getString())); this.whiteList.add(Pair.of(new IsPetFilter(), "")); this.whiteList.add(Pair.of(new HasCustomNameFilter(), "")); - this.whiteList.add(Pair.of(new IsEntityIdFilter(), Component.translatable("entity.minecraft.villager").getString())); - this.whiteList.add(Pair.of(new IsEntityIdFilter(), Component.translatable("entity.minecraft.wandering_trader").getString())); + this.whiteList.add(Pair.of(new IsEntityIdFilter(), "minecraft:villager")); + this.whiteList.add(Pair.of(new IsEntityIdFilter(), "minecraft:wandering_trader")); this.whiteList.add(Pair.of(new IsFriendlyFilter(), "")); this.whiteList.add(Pair.of(new IsOnVehicleFilter(), "")); } @@ -266,6 +334,7 @@ public void addFilter(String id, String arg) { int offsetY = blockState.getValue(TeslaTowerBlock.HALF).getOffsetY(); if (this.level.getBlockEntity(getBlockPos().above(-offsetY)) instanceof TeslaTowerBlockEntity teslaTowerBlockEntity) { teslaTowerBlockEntity.whiteList.add(Pair.of(TeslaFilter.getFilter(id), arg)); + teslaTowerBlockEntity.setChanged(); } } @@ -275,6 +344,7 @@ public void removeFilter(String id, String arg) { int offsetY = blockState.getValue(TeslaTowerBlock.HALF).getOffsetY(); if (this.level.getBlockEntity(getBlockPos().above(-offsetY)) instanceof TeslaTowerBlockEntity teslaTowerBlockEntity) { teslaTowerBlockEntity.whiteList.removeIf(pair -> pair.first().getId().equals(id) && pair.second().equals(arg)); + teslaTowerBlockEntity.setChanged(); } } @@ -285,6 +355,7 @@ public void handleSync(List> filters) { if (this.level.getBlockEntity(getBlockPos().above(-offsetY)) instanceof TeslaTowerBlockEntity teslaTowerBlockEntity) { teslaTowerBlockEntity.whiteList.clear(); teslaTowerBlockEntity.whiteList.addAll(filters); + teslaTowerBlockEntity.setChanged(); } } @@ -315,24 +386,25 @@ public List> getWhiteList() { } @Override - public void storeDiskData(CompoundTag tag) { - ListTag filters = new ListTag(); + public void storeDiskData(ValueOutput output) { + ValueOutput.ValueOutputList filters = output.childrenList("filters"); for (var entry : this.whiteList) { - CompoundTag entryTag = new CompoundTag(); + ValueOutput entryTag = filters.addChild(); entryTag.putString("id", entry.first().getId()); entryTag.putString("arg", entry.right()); - filters.add(entryTag); } - tag.put("Filters", filters); } @Override - public void applyDiskData(CompoundTag data) { + public void applyDiskData(ValueInput input) { + ValueInput.ValueInputList valueInputs = input.childrenListOrEmpty("filters"); ArrayList> filters = new ArrayList<>(); - for (Tag tag : data.getList("Filters", Tag.TAG_COMPOUND)) { - if (!(tag instanceof CompoundTag filter)) continue; - filters.add(Pair.of(TeslaFilter.getFilter(filter.getString("id")), filter.getString("arg"))); - } + valueInputs.forEach(it -> { + Optional id = it.getString("id"); + Optional arg = it.getString("arg"); + if (id.isEmpty() || arg.isEmpty()) return; + filters.add(Pair.of(TeslaFilter.getFilter(id.get()), arg.get())); + }); this.handleSync(filters); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/TransmissionPoleBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/TransmissionPoleBlockEntity.java index 5d89984bee..06f48e3c62 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/TransmissionPoleBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/TransmissionPoleBlockEntity.java @@ -2,7 +2,7 @@ import dev.dubhe.anvilcraft.api.power.PowerComponentType; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.TransmissionPoleBlock; +import dev.dubhe.anvilcraft.block.power.transmitting.TransmissionPoleBlock; import dev.dubhe.anvilcraft.block.state.Vertical3PartHalf; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/VoidEnergyCollectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/VoidEnergyCollectorBlockEntity.java index 770200a4df..55255b85c3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/VoidEnergyCollectorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/VoidEnergyCollectorBlockEntity.java @@ -3,21 +3,21 @@ import dev.dubhe.anvilcraft.api.power.IPowerProducer; import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.api.tooltip.providers.IHasAffectRange; -import dev.dubhe.anvilcraft.block.NegativeMatterBlock; -import dev.dubhe.anvilcraft.block.VoidEnergyCollectorBlock; -import dev.dubhe.anvilcraft.block.VoidMatterBlock; +import dev.dubhe.anvilcraft.block.power.generator.VoidEnergyCollectorBlock; +import dev.dubhe.anvilcraft.block.storage.NegativeMatterBlock; +import dev.dubhe.anvilcraft.block.storage.VoidMatterBlock; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import lombok.Getter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; @@ -30,7 +30,7 @@ public class VoidEnergyCollectorBlockEntity extends BlockEntity implements IPowe // 这是为了防止放下来之后在“发电了”之后,在“衰变空气”之前破坏方块,来稳定白嫖电力 private int decayCooldownCount = 1; private int blockCount = 0; - private PowerGrid grid = null; + private @Nullable PowerGrid grid = null; private int power = 0; @Getter private int time = 0; @@ -79,21 +79,21 @@ public int getOutputPower() { } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.cooldownCount = tag.getInt("cooldownCount"); - this.decayCooldownCount = tag.getInt("decayCooldownCount"); - this.blockCount = tag.getInt("blockCount"); - this.power = tag.getInt("power"); + public void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.cooldownCount = input.getIntOr("cooldownCount", 0); + this.decayCooldownCount = input.getIntOr("decayCooldownCount", 0); + this.blockCount = input.getIntOr("blockCount", 0); + this.power = input.getIntOr("power", 0); } @Override - public void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - tag.putInt("cooldownCount", this.cooldownCount); - tag.putInt("decayCooldownCount", this.decayCooldownCount); - tag.putInt("blockCount", this.blockCount); - tag.putInt("power", this.power); + public void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("cooldownCount", this.cooldownCount); + output.putInt("decayCooldownCount", this.decayCooldownCount); + output.putInt("blockCount", this.blockCount); + output.putInt("power", this.power); } private static int getPowerFromBlockCount(int count) { @@ -112,23 +112,23 @@ public void gridTick() { if (this.cooldownCount-- > 1) return; this.cooldownCount = COOLDOWN; final int oldPower = this.power; - this.blockCount = countBlocksInRange(); + this.blockCount = this.countBlocksInRange(); this.power = getPowerFromBlockCount(this.blockCount); if (this.power > 0 && this.getBlockState().getBlock() instanceof VoidEnergyCollectorBlock voidEnergyCollector) { voidEnergyCollector.activate(this.level, this.getBlockPos(), this.getBlockState()); if (this.decayCooldownCount-- <= 1) { - makeBlocksDecay(); + this.makeBlocksDecay(); this.decayCooldownCount = level.getRandom().nextInt(0, 60); } } - if (power != oldPower && grid != null) grid.markChanged(); + if (this.power != oldPower && this.grid != null) this.grid.markChanged(); this.blockCount = 0; - time++; + this.time++; } public static boolean isOutOfBuildLimits(Level level, BlockPos pos) { - int minHeight = level.getMinBuildHeight(); - int maxHeight = level.getMaxBuildHeight(); + int minHeight = level.getMinY(); + int maxHeight = level.getMaxY(); int y = pos.getY(); return y < minHeight || y >= maxHeight; } @@ -149,13 +149,11 @@ public static boolean isAnotherCollectorNearby(Level level, BlockPos pos) { return false; } - /** - * Counts the number of blocks in 5x5x5 area. - * Also detects whether there is another void energy collector in 9x9x9; - * if there does be another void energy collector, this function returns 125 to disable power generation. - * - * @return count(normal) - count(negative) IF active ELSE 125 - */ + /// Counts the number of blocks in 5x5x5 area. + /// Also detects whether there is another void energy collector in 9x9x9; + /// if there does be another void energy collector, this function returns 125 to disable power generation. + /// + /// @return count(normal) - count(negative) IF active ELSE 125 private int countBlocksInRange() { if (level == null || level.isClientSide()) return 125; int count = 0; @@ -205,8 +203,7 @@ private void makeBlocksDecay() { if (list.isEmpty()) return; int i = random.nextInt(list.size()); BlockPos bp = list.get(i); - BlockState b = level.getBlockState(bp); - level.setBlockAndUpdate(bp, VoidMatterBlock.voidDecay(level, bp, b, random)); + level.setBlockAndUpdate(bp, VoidMatterBlock.voidDecay(level, random)); } @Override @@ -220,6 +217,6 @@ public AABB shape() { } public void clientTick() { - rotation += (float) (Math.log(getServerPower() + 1) * 2.5); + this.rotation += (float) (Math.log(getServerPower() + 1) * 2.5); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/WhiteHoleBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/WhiteHoleBlockEntity.java index 49701b5748..55ed155dc9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/WhiteHoleBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/WhiteHoleBlockEntity.java @@ -19,7 +19,7 @@ public static WhiteHoleBlockEntity createBlockEntity(BlockEntityType type, Bl @Override public void onLoad() { super.onLoad(); - if (this.level != null && !this.level.isClientSide) { + if (this.level != null && !this.level.isClientSide()) { GravityManager.GravitySourceType type = GravityManager.GravitySourceManager.getType(this.getBlockState().getBlock()); if (type != null) { GravityManager.GravitySourceManager.addSource(this.level, this.worldPosition, type); @@ -30,7 +30,7 @@ public void onLoad() { @Override public void setRemoved() { super.setRemoved(); - if (this.level != null && !this.level.isClientSide) { + if (this.level != null && !this.level.isClientSide()) { GravityManager.GravitySourceManager.removeSource(this.level, this.worldPosition); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BaseBatchCraftingBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BaseBatchCraftingBlockEntity.java index 0660299d42..79d5047774 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BaseBatchCraftingBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BaseBatchCraftingBlockEntity.java @@ -1,5 +1,6 @@ package dev.dubhe.anvilcraft.block.entity.batch; +import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.api.IHasDisplayItem; import dev.dubhe.anvilcraft.api.item.IDiskCloneable; import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; @@ -7,11 +8,10 @@ import dev.dubhe.anvilcraft.api.itemhandler.PollableFilteredItemStackHandler; import dev.dubhe.anvilcraft.api.power.IPowerConsumer; import dev.dubhe.anvilcraft.api.power.PowerGrid; -import dev.dubhe.anvilcraft.block.batch.BaseBatchCraftingBlock; import dev.dubhe.anvilcraft.block.entity.BaseMachineBlockEntity; import dev.dubhe.anvilcraft.block.entity.IFilterBlockEntity; +import dev.dubhe.anvilcraft.block.power.batch.BaseBatchCraftingBlock; import it.unimi.dsi.fastutil.ints.IntArrayList; -import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.minecraft.core.BlockPos; @@ -22,41 +22,47 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.capabilities.Capabilities; -import net.neoforged.neoforge.items.IItemHandler; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; import org.joml.Vector3f; +import org.jspecify.annotations.Nullable; import java.util.Comparator; import java.util.List; import java.util.Objects; -@Getter public abstract class BaseBatchCraftingBlockEntity extends BaseMachineBlockEntity implements IFilterBlockEntity, IPowerConsumer, IDiskCloneable, IHasDisplayItem { + @Getter protected final int inputPower = 4; + @Getter @Setter + @Nullable protected PowerGrid grid; - @Getter(AccessLevel.NONE) protected final PollableFilteredItemStackHandler handler = this.constructHandler(); + @Getter protected @Nullable ItemStack displayingStack; - @Getter(AccessLevel.NONE) protected boolean poweredBefore = false; - @Getter(AccessLevel.NONE) protected int cooldown = 0; + @Getter protected final int id; public BaseBatchCraftingBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState, int id) { @@ -71,30 +77,31 @@ public void tick(Level level, BlockPos pos) { BlockState state = level.getBlockState(pos); level.updateNeighbourForOutputSignal(pos, state.getBlock()); boolean powered = state.getValue(BaseBatchCraftingBlock.POWERED); + if (level.isClientSide()) return; this.cooldown = Math.max(0, this.cooldown - 1); - if (powered && !this.poweredBefore && !level.isClientSide && this.cooldown == 0) { - if (this.craft(level)) this.cooldown = this.getCooldownDuration(); + if (powered && !this.poweredBefore && !level.isClientSide() && this.cooldown == 0) { + if (this.craft(Util.cast(level))) this.cooldown = this.getCooldownDuration(); } this.poweredBefore = powered; } protected abstract int getCooldownDuration(); - protected boolean canCraft() { - if (this.grid == null || !this.grid.isWorking()) return false; - if (!this.handler.isFilterEnabled()) return true; - for (int i = 0; i < this.handler.getSlots(); i++) { - if (this.handler.getStackInSlot(i).isEmpty() && !this.handler.getFilter(i).isEmpty()) return false; + protected boolean cantCraft() { + if (this.grid == null || !this.grid.isWorking()) return true; + if (!this.handler.isFilterEnabled()) return false; + for (int i = 0; i < this.handler.size(); i++) { + if (this.handler.getResource(i).isEmpty() && !this.handler.getFilter(i).isEmpty()) return true; } - return true; + return false; } - public abstract boolean craft(Level level); + public abstract boolean craft(ServerLevel level); protected boolean ejectItems(ItemStack result, List craftRemaining, Direction direction) { - IItemHandler cap = Objects.requireNonNull(getLevel()).getCapability( - Capabilities.ItemHandler.BLOCK, - getBlockPos().relative(direction), + ResourceHandler cap = Objects.requireNonNull(this.getLevel()).getCapability( + Capabilities.Item.BLOCK, + this.getBlockPos().relative(direction), direction.getOpposite() ); if (cap != null) { @@ -102,20 +109,20 @@ protected boolean ejectItems(ItemStack result, List craftRemaining, D ItemStack remained = ItemHandlerUtil.insertItem(cap, result, true); if (!remained.isEmpty()) return true; remained = ItemHandlerUtil.insertItem(cap, result, false); - ejectItem(remained); + this.ejectItem(remained); for (ItemStack stack : craftRemaining) { remained = ItemHandlerUtil.insertItem(cap, stack, false); - ejectItem(remained); + this.ejectItem(remained); } } else { // 尝试向世界喷出物品 - Vec3 center = getBlockPos().relative(getDirection()).getCenter(); + Vec3 center = this.getBlockPos().relative(this.getDirection()).getCenter(); AABB aabb = new AABB(center.add(-0.125, -0.125, -0.125), center.add(0.125, 0.125, 0.125)); - if (!getLevel().noCollision(aabb)) return true; + if (!this.getLevel().noCollision(aabb)) return true; - ejectItem(result); + this.ejectItem(result); for (ItemStack stack : craftRemaining) { - ejectItem(stack); + this.ejectItem(stack); } } return false; @@ -151,6 +158,11 @@ private void ejectItemEntity(ItemStack stack) { level.addFreshEntity(itemEntity); } + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + ItemHandlerUtil.dropAllToPos(this.getItemHandler(), this.level, pos.getCenter()); + } + @Nullable @Override public Packet getUpdatePacket() { @@ -163,30 +175,24 @@ public CompoundTag getUpdateTag(HolderLookup.Provider registries) { } @Override - public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - this.handler.deserializeNBT(provider, tag.getCompound("Inventory")); - this.poweredBefore = tag.getBoolean("PoweredBefore"); - this.cooldown = tag.getInt("Cooldown"); - if (!tag.getBoolean("HasDisplayItemStack") || !tag.contains("ResultItemStack")) return; - CompoundTag rawResult = tag.getCompound("ResultItemStack"); - this.displayingStack = rawResult.contains("id") - ? ItemStack.parse(provider, rawResult).orElse(ItemStack.EMPTY) - : ItemStack.EMPTY; + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + this.handler.serialize(output.child("Inventory")); + output.putBoolean("PoweredBefore", this.poweredBefore); + output.putInt("Cooldown", this.cooldown); + boolean displaying = this.displayingStack != null && !this.displayingStack.isEmpty(); + output.putBoolean("HasDisplayItemStack", displaying); + if (displaying) output.store("ResultItemStack", ItemStack.OPTIONAL_CODEC, this.displayingStack); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.put("Inventory", this.handler.serializeNBT(provider)); - tag.putBoolean("PoweredBefore", this.poweredBefore); - tag.putInt("Cooldown", this.cooldown); - boolean displaying = this.displayingStack != null && !this.displayingStack.isEmpty(); - tag.putBoolean("HasDisplayItemStack", displaying); - if (displaying) { - CompoundTag rawResult = (CompoundTag) this.displayingStack.save(provider); - tag.put("ResultItemStack", rawResult); - } + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.handler.deserialize(input.childOrEmpty("Inventory")); + this.poweredBefore = input.getBooleanOr("PoweredBefore", false); + this.cooldown = input.getIntOr("Cooldown", 0); + if (!input.getBooleanOr("HasDisplayItemStack", false)) return; + this.displayingStack = input.read("ResultItemStack", ItemStack.OPTIONAL_CODEC).orElse(ItemStack.EMPTY); } @Override @@ -207,44 +213,41 @@ public void setDirection(Direction direction) { level.setBlockAndUpdate(pos, state.setValue(BaseBatchCraftingBlock.FACING, direction)); } - /** - * 获取红石信号强度 - * - * @return 红石信号强度 - */ + /// 获取红石信号强度 + /// + /// @return 红石信号强度 public int getRedstoneSignal() { int strength = 0; List itemIdxList = new IntArrayList(); - for (int index = 0; index < this.handler.getSlots(); index++) { - ItemStack itemStack = this.handler.getStackInSlot(index); + for (int index = 0; index < this.handler.size(); index++) { if (this.handler.isSlotDisabled(index) && this.handler.getFilter(index).isEmpty()) { // 槽位为未设置过滤的已禁用槽位 strength++; - } else if (!itemStack.isEmpty()) { // 槽位上有物品 + } else if (!this.handler.getResource(index).isEmpty()) { // 槽位上有物品 strength++; itemIdxList.add(index); } } - if (strength < this.handler.getSlots()) return strength; + if (strength < this.handler.size()) return strength; // 找到数量最少的序号 int minIdx = itemIdxList.stream() - .min(Comparator.comparingInt(idx -> this.handler.getStackInSlot(idx).getCount())) + .min(Comparator.comparingInt(this.handler::getAmountAsInt)) .orElse(-1); // 不存在说明全是锁住的格子 -> 15 if (minIdx == -1) return 15; // 考虑这个物品的堆叠上限,计算满堆比例 - ItemStack stack = this.handler.getStackInSlot(minIdx); - int maxStack = stack.getMaxStackSize(); - int count = stack.getCount(); - if (maxStack <= 1) { + ItemResource resource = this.handler.getResource(minIdx); + int count = this.handler.getAmountAsInt(minIdx); + int maxSize = this.handler.getCapacityAsInt(minIdx, resource); + if (maxSize <= 1) { return 15; - } else if (maxStack == 2) { + } else if (maxSize == 2) { return count == 1 ? 9 : 15; } int range = 6; - return count == 1 ? 9 : 9 + ((count - 2) * (range - 1) + (maxStack - 2)) / (maxStack - 2); + return count == 1 ? 9 : 9 + ((count - 2) * (range - 1) + (maxSize - 2)) / (maxSize - 2); } @Override @@ -263,7 +266,7 @@ public FilteredItemStackHandler getFilteredItemStackHandler() { } @Override - public IItemHandler getItemHandler() { + public ResourceHandler getItemHandler() { return this.handler; } @@ -273,16 +276,15 @@ public BlockPos getPos() { } @Override - public void storeDiskData(CompoundTag tag) { - tag.put("Filtering", handler.serializeFiltering()); + public void storeDiskData(ValueOutput output) { + this.handler.serializeFiltering(output.child("Filtering")); } @Override - public void applyDiskData(CompoundTag data) { - handler.deserializeFiltering(data.getCompound("Filtering")); - this.setChanged(); - if (level != null && !level.isClientSide) { - level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 3); + public void applyDiskData(ValueInput input) { + this.handler.deserializeFiltering(input.childOrEmpty("Filtering")); + if (this.level != null && !this.level.isClientSide()) { + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCrafterBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCrafterBlockEntity.java index 675d908245..5daf52ba88 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCrafterBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCrafterBlockEntity.java @@ -1,5 +1,6 @@ package dev.dubhe.anvilcraft.block.entity.batch; +import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.itemhandler.PollableFilteredItemStackHandler; import dev.dubhe.anvilcraft.init.ModMenuTypes; @@ -9,24 +10,29 @@ import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.Container; +import net.minecraft.world.Containers; import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.player.StackedContents; +import net.minecraft.world.entity.player.StackedItemContents; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeType; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ItemUtil; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; import java.util.ArrayDeque; import java.util.Deque; @@ -50,7 +56,7 @@ public BatchCrafterBlockEntity(BlockEntityType type, Bloc protected PollableFilteredItemStackHandler constructHandler() { return new PollableFilteredItemStackHandler(9) { @Override - public void onContentsChanged(int slot) { + protected void onContentsChanged(int index, ItemStack previousContents) { BatchCrafterBlockEntity.this.onContentsChanged(); } }; @@ -62,39 +68,36 @@ protected int getCooldownDuration() { } private void onContentsChanged() { - if (this.level == null) { + if (this.level == null || this.level.isClientSide()) { this.setChanged(); return; } - - RecipeManager manager = this.level.getRecipeManager(); + + ServerLevel level = Util.cast(this.level); + RecipeManager manager = level.recipeAccess(); + CraftingInput input = this.dummyCraftingContainer.asCraftInput(); Optional> recipeOp = manager.getRecipeFor( RecipeType.CRAFTING, - this.dummyCraftingContainer.asCraftInput(), - this.level + input, + level ); - this.updateDisplayItem(recipeOp.map( - recipe -> recipe.value() - .getResultItem(this.level.registryAccess()) - ).orElse(ItemStack.EMPTY)); + this.updateDisplayItem(recipeOp.map(recipe -> recipe.value().assemble(input)).orElse(ItemStack.EMPTY)); - if (!this.level.isClientSide) { - PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket( - this.getDisplayingStack(), - this.getPos() - )); - } + PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket( + this.getDisplayingStack(), + this.getPos() + )); this.setChanged(); } @Override - public boolean craft(Level level) { + public boolean craft(ServerLevel level) { if (this.craftingContainer.isEmpty()) return false; - if (!this.canCraft()) return false; + if (this.cantCraft()) return false; ItemStack result; Optional cacheOp = this.cache.stream() - .filter(recipe -> recipe.test(craftingContainer)) + .filter(recipe -> recipe.test(this.craftingContainer)) .findFirst(); Optional> holderOp; List craftRemaining; @@ -103,10 +106,10 @@ public boolean craft(Level level) { holderOp = crafterCache.getRecipe(); craftRemaining = crafterCache.getRemaining(); } else { - holderOp = level.getRecipeManager() - .getRecipeFor(RecipeType.CRAFTING, this.craftingContainer.asCraftInput(), level); - NonNullList remainingItems = level.getRecipeManager() - .getRemainingItemsFor(RecipeType.CRAFTING, this.craftingContainer.asCraftInput(), level); + CraftingInput input = this.craftingContainer.asCraftInput(); + holderOp = level.recipeAccess().getRecipeFor(RecipeType.CRAFTING, input, level); + NonNullList remainingItems = holderOp.map(recipe -> recipe.value().getRemainingItems(input)) + .orElse(NonNullList.create()); BatchCrafterCache cache = new BatchCrafterCache(this.craftingContainer, holderOp, remainingItems); craftRemaining = remainingItems; this.cache.push(cache); @@ -116,13 +119,13 @@ public boolean craft(Level level) { } if (holderOp.isEmpty()) return false; - result = holderOp.get().value().assemble(this.craftingContainer.asCraftInput(), level.registryAccess()); + result = holderOp.get().value().assemble(this.craftingContainer.asCraftInput()); this.displayingStack = result.copy(); - if (!level.isClientSide) PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket(this.displayingStack, this.getPos())); + if (!level.isClientSide()) PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket(this.displayingStack, this.getPos())); if (!result.isItemEnabled(level.enabledFeatures())) return false; - int times = IntStream.range(0, this.handler.getSlots()) - .mapToObj(this.handler::getStackInSlot) + int times = IntStream.range(0, this.handler.size()) + .mapToObj(i -> ItemUtil.getStack(this.handler, i)) .filter((s -> !s.isEmpty())) .mapToInt(ItemStack::getCount) .min() @@ -135,13 +138,24 @@ public boolean craft(Level level) { .collect(Collectors.toList()); } if (this.ejectItems(result, craftRemaining, this.getDirection())) return false; - for (int i = 0; i < this.handler.getSlots(); i++) { - this.handler.extractItem(i, times, false); + for (int i = 0; i < this.handler.size(); i++) { + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = this.handler.getResource(i); + if (resource.isEmpty()) continue; + this.handler.extract(i, resource, times, transaction); + transaction.commit(); + } } level.updateNeighborsAt(this.getBlockPos(), ModBlocks.BATCH_CRAFTER.get()); return true; } + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Containers.dropContents(this.level, pos, this.getFilteredItemStackHandler().getStacks()); + } + @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { @@ -159,13 +173,11 @@ public static class BatchCrafterCache implements Predicate { @Getter private final NonNullList remaining; - /** - * 合成器缓存 - * - * @param container 容器 - * @param recipe 配方 - * @param remaining 返还物品 - */ + /// 合成器缓存 + /// + /// @param container 容器 + /// @param recipe 配方 + /// @param remaining 返还物品 public BatchCrafterCache( Container container, Optional> recipe, @@ -210,7 +222,7 @@ public List getItems() { @Override public int getContainerSize() { - return BatchCrafterBlockEntity.this.handler.getSlots(); + return BatchCrafterBlockEntity.this.handler.size(); } @Override @@ -220,26 +232,31 @@ public boolean isEmpty() { @Override public ItemStack getItem(int slot) { - return BatchCrafterBlockEntity.this.handler.getStackInSlot(slot); + return ItemUtil.getStack(BatchCrafterBlockEntity.this.handler, slot); } @Override public ItemStack removeItem(int slot, int amount) { - ItemStack stack = BatchCrafterBlockEntity.this.handler.extractItem(slot, amount, false); + ItemStack stack = ItemStack.EMPTY; + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = BatchCrafterBlockEntity.this.handler.getResource(slot); + int extracted = BatchCrafterBlockEntity.this.handler.extract(slot, resource, amount, transaction); + if (extracted > 0) stack = resource.toStack(extracted); + } BatchCrafterBlockEntity.this.setChanged(); return stack; } @Override public ItemStack removeItemNoUpdate(int slot) { - ItemStack stack = BatchCrafterBlockEntity.this.handler.getStackInSlot(slot); - BatchCrafterBlockEntity.this.handler.setStackInSlot(slot, ItemStack.EMPTY); + ItemStack stack = ItemUtil.getStack(BatchCrafterBlockEntity.this.handler, slot); + BatchCrafterBlockEntity.this.handler.set(slot, ItemResource.EMPTY, 0); return stack; } @Override public void setItem(int slot, ItemStack stack) { - BatchCrafterBlockEntity.this.handler.setStackInSlot(slot, stack); + BatchCrafterBlockEntity.this.handler.set(slot, ItemResource.of(stack), stack.getCount()); } @Override @@ -260,7 +277,7 @@ public void clearContent() { } @Override - public void fillStackedContents(StackedContents contents) { + public void fillStackedContents(StackedItemContents contents) { for (int i = 0; i < this.getContainerSize(); i++) { ItemStack itemStack = this.getItem(i); contents.accountSimpleStack(itemStack); @@ -291,7 +308,7 @@ public List getItems() { @Override public int getContainerSize() { - return BatchCrafterBlockEntity.this.handler.getSlots(); + return BatchCrafterBlockEntity.this.handler.size(); } @Override @@ -304,7 +321,7 @@ public boolean isEmpty() { @Override public ItemStack getItem(int slot) { - ItemStack stack = BatchCrafterBlockEntity.this.handler.getStackInSlot(slot); + ItemStack stack = ItemUtil.getStack(BatchCrafterBlockEntity.this.handler, slot); if (stack.isEmpty()) stack = BatchCrafterBlockEntity.this.handler.getFilter(slot); return stack; } @@ -338,7 +355,7 @@ public void clearContent() { } @Override - public void fillStackedContents(StackedContents contents) { + public void fillStackedContents(StackedItemContents contents) { for (int i = 0; i < this.getContainerSize(); i++) { ItemStack itemStack = this.getItem(i); contents.accountSimpleStack(itemStack); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCutterBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCutterBlockEntity.java index e29d18597c..fab9fc37e5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCutterBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCutterBlockEntity.java @@ -7,18 +7,19 @@ import dev.dubhe.anvilcraft.inventory.BatchCutterMenu; import dev.dubhe.anvilcraft.network.BatchCutterSelectPacket; import dev.dubhe.anvilcraft.network.UpdateDisplayItemPacket; +import dev.dubhe.anvilcraft.recipe.sync.RecipesRecord; import lombok.AccessLevel; import lombok.Getter; import net.minecraft.core.BlockPos; -import net.minecraft.core.NonNullList; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.Container; +import net.minecraft.world.Containers; import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeHolder; -import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.item.crafting.SingleRecipeInput; import net.minecraft.world.item.crafting.StonecutterRecipe; @@ -27,7 +28,9 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.item.ItemUtil; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; import java.util.ArrayDeque; import java.util.ArrayList; @@ -52,7 +55,7 @@ public BatchCutterBlockEntity(BlockEntityType type, Block protected PollableFilteredItemStackHandler constructHandler() { return new PollableFilteredItemStackHandler(1) { @Override - public void onContentsChanged(int slot) { + protected void onContentsChanged(int index, ItemStack previousContents) { BatchCutterBlockEntity.this.onContentsChanged(); } }; @@ -65,106 +68,112 @@ protected int getCooldownDuration() { private void onContentsChanged() { if (this.level == null) { - this.setChanged(); return; } - - RecipeManager manager = this.level.getRecipeManager(); - List> recipes = manager.getRecipesFor(RecipeType.STONECUTTING, this.createDummyInput(), this.level); + + SingleRecipeInput input = this.createDummyInput(); + List> recipes = new ArrayList<>(); + for (RecipeHolder holder : RecipesRecord.getRecipes(this.level).byType(RecipeType.STONECUTTING)) { + if (holder.value().matches(input, this.level)) { + recipes.add(holder); + } + } if (recipes.isEmpty()) { this.updateDisplayItem(ItemStack.EMPTY); } else if (this.selecting >= recipes.size()) { this.selecting = 0; - if (!this.level.isClientSide) { - PacketDistributor.sendToAllPlayers(new BatchCutterSelectPacket( - this.selecting, - this.getPos() - )); - } - this.updateDisplayItem(recipes.get(this.selecting).value().getResultItem(this.level.registryAccess())); - } else { - this.updateDisplayItem(recipes.get(this.selecting).value().getResultItem(this.level.registryAccess())); - } - - if (!this.level.isClientSide) { - PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket( - this.getDisplayingStack(), + PacketDistributor.sendToAllPlayers(new BatchCutterSelectPacket( + this.selecting, this.getPos() )); + this.updateDisplayItem(recipes.get(this.selecting).value().assemble(input)); + } else { + this.updateDisplayItem(recipes.get(this.selecting).value().assemble(input)); } + + PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket( + this.getDisplayingStack(), + this.getPos() + )); this.setChanged(); } @Override - public boolean craft(Level level) { + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + super.preRemoveSideEffects(pos, state); + Containers.dropContents(this.level, pos, this.getFilteredItemStackHandler().getStacks()); + } + + @Override + public boolean craft(ServerLevel level) { if (this.handler.isEmpty()) return false; - if (!this.canCraft()) return false; - - BatchCutterCache cache = this.findCache(); + if (this.cantCraft()) return false; + + BatchCutterCache cache = this.findCache(level); List> recipes = cache.getRecipes(); if (recipes.isEmpty()) return false; if (this.selecting >= recipes.size()) { this.selecting = 0; - if (!level.isClientSide) { - PacketDistributor.sendToAllPlayers(new BatchCutterSelectPacket( - this.selecting, - this.getPos() - )); - } + PacketDistributor.sendToAllPlayers(new BatchCutterSelectPacket( + this.selecting, + this.getPos() + )); } - ItemStack result = recipes.get(this.selecting).value().assemble(this.createInput(), level.registryAccess()); + ItemStack result = recipes.get(this.selecting).value().assemble(this.createInput()); this.displayingStack = result.copy(); - if (!level.isClientSide) PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket(this.displayingStack, this.getPos())); + if (!level.isClientSide()) { + PacketDistributor.sendToAllPlayers(new UpdateDisplayItemPacket(this.displayingStack, this.getPos())); + } if (!result.isItemEnabled(level.enabledFeatures())) return false; - int times = IntStream.range(0, this.handler.getSlots()) - .mapToObj(this.handler::getStackInSlot) - .filter((s -> !s.isEmpty())) + int times = IntStream.range(0, this.handler.size()) + .mapToObj(index -> ItemUtil.getStack(this.handler, index)) + .filter(stack -> !stack.isEmpty()) .mapToInt(ItemStack::getCount) .min() .orElse(0); if (times < 1) return false; result.setCount(result.getCount() * times); - List craftRemaining = new ArrayList<>(cache.getRemaining().size()); - for (ItemStack stack : cache.getRemaining()) { - craftRemaining.add(stack.copyWithCount(stack.getCount() * times)); - } - if (this.ejectItems(result, craftRemaining, this.getDirection())) return false; - for (int i = 0; i < this.handler.getSlots(); i++) { - this.handler.extractItem(i, times, false); + if (this.ejectItems(result, List.of(), this.getDirection())) return false; + for (int i = 0; i < this.handler.size(); i++) { + try (Transaction transaction = Transaction.openRoot()) { + this.handler.extract(i, this.handler.getResource(i), times, transaction); + transaction.commit(); + } } level.updateNeighborsAt(this.getBlockPos(), ModBlocks.BATCH_CUTTER.get()); return true; } - private BatchCutterCache findCache() { + private BatchCutterCache findCache(Level level) { Optional cacheOp = this.cache.stream() .filter(recipe -> recipe.test(this.handler)) .findFirst(); if (cacheOp.isPresent()) { return cacheOp.get(); - } else { - SingleRecipeInput input = this.createInput(); - List> recipes = this.level.getRecipeManager() - .getRecipesFor(RecipeType.STONECUTTING, input, this.level); - NonNullList remainingItems = this.level.getRecipeManager() - .getRemainingItemsFor(RecipeType.STONECUTTING, input, this.level); - BatchCutterCache cache = new BatchCutterCache(this.handler, recipes, remainingItems); - this.cache.push(cache); - while (this.cache.size() >= 10) { - this.cache.pop(); + } + SingleRecipeInput input = this.createInput(); + List> recipes = new ArrayList<>(); + for (RecipeHolder holder : RecipesRecord.getRecipes(level).byType(RecipeType.STONECUTTING)) { + if (holder.value().matches(input, level)) { + recipes.add(holder); } - return cache; } + BatchCutterCache cache = new BatchCutterCache(this.handler, recipes); + this.cache.push(cache); + while (this.cache.size() >= 10) { + this.cache.pop(); + } + return cache; } - + public SingleRecipeInput createInput() { - return new SingleRecipeInput(this.handler.getStackInSlot(0)); + return new SingleRecipeInput(ItemUtil.getStack(this.handler, 0)); } public SingleRecipeInput createDummyInput() { - ItemStack stack = this.handler.getStackInSlot(0); + ItemStack stack = ItemUtil.getStack(this.handler, 0); if (stack.isEmpty()) stack = this.handler.getFilter(0); return new SingleRecipeInput(stack); } @@ -178,25 +187,25 @@ public AbstractContainerMenu createMenu(int i, Inventory inventory, Player playe public void setSelecting(int selecting) { this.selecting = selecting; - - List> recipes = this.findCache().getRecipes(); + if (this.level == null) return; + List> recipes = this.findCache(this.level).getRecipes(); if (recipes.isEmpty()) { this.updateDisplayItem(ItemStack.EMPTY); } else if (this.selecting >= recipes.size()) { this.selecting = 0; - if (!this.level.isClientSide) { + if (!this.level.isClientSide()) { PacketDistributor.sendToAllPlayers(new BatchCutterSelectPacket( this.selecting, this.getPos() )); } - this.updateDisplayItem(recipes.get(this.selecting).value().getResultItem(this.level.registryAccess())); + this.updateDisplayItem(recipes.get(this.selecting).value().assemble(this.createDummyInput())); return; } else { - this.updateDisplayItem(recipes.get(this.selecting).value().getResultItem(this.level.registryAccess())); + this.updateDisplayItem(recipes.get(this.selecting).value().assemble(this.createDummyInput())); } - if (!this.level.isClientSide) { + if (!this.level.isClientSide()) { PacketDistributor.sendToAllPlayers(new BatchCutterSelectPacket(this.selecting, this.getPos())); } } @@ -206,35 +215,31 @@ public static class BatchCutterCache implements Predicate> recipes; - private final NonNullList remaining; - - /** - * 合成器缓存 - * - * @param container 容器 - * @param recipes 配方 - * @param remaining 返还物品 - */ + + /// 合成器缓存 + /// + /// @param container 容器 + /// @param recipes 配方 public BatchCutterCache( PollableFilteredItemStackHandler container, - List> recipes, - NonNullList remaining + List> recipes ) { - this.container = new SimpleContainer(container.getSlots()); - for (int i = 0; i < container.getSlots(); i++) { - ItemStack item = container.getStackInSlot(i).copy(); + this.container = new SimpleContainer(container.size()); + for (int i = 0; i < container.size(); i++) { + ItemStack item = ItemUtil.getStack(container, i).copy(); item.setCount(1); this.container.setItem(i, item); } this.recipes = recipes; - this.remaining = remaining; } @Override public boolean test(PollableFilteredItemStackHandler container) { - if (container.getSlots() != this.container.getContainerSize()) return false; + if (container.size() != this.container.getContainerSize()) return false; for (int i = 0; i < this.container.getContainerSize(); i++) { - if (!ItemStack.isSameItemSameComponents(container.getStackInSlot(i), this.container.getItem(i))) return false; + if (!ItemStack.isSameItemSameComponents(ItemUtil.getStack(container, i), this.container.getItem(i))) { + return false; + } } return true; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/package-info.java index c7936dea44..4fbf02ab10 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.entity.batch; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyClass.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyClass.java new file mode 100644 index 0000000000..1847152b92 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyClass.java @@ -0,0 +1,144 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import lombok.Getter; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; +import java.util.Map; + +/** + * Enum of all celestial body classes identifiable from the mass-radius diagram. + * Each constant stores its diagram pixel color (RGB) and classification flags. + */ +public enum CelestialBodyClass { + // === Planetary (no amplifier needed) === + LARGE_MOON(0x999966, false, false, false), + ROCKY_NO_LIQUID(0x669933, false, false, false), + ROCKY_LOW_LIQUID(0x339933, false, false, false), + ROCKY_MED_LIQUID(0x339999, false, false, false), + ROCKY_HIGH_LIQUID(0x33CCCC, false, false, false), + ICE_GIANT(0x336699, false, false, false), + GAS_GIANT(0x666699, false, false, false), + BROWN_DWARF(0x330000, false, false, true), + + // === Main sequence stars === + M_MAIN(0x660000, true, true, false), + K_MAIN(0xCC6600, true, true, false), + G_MAIN(0xCC9933, true, true, false), + F_MAIN(0xCCCC66, true, true, false), + A_MAIN(0xCCCCCC, true, true, false), + B_MAIN(0x66CCCC, true, true, false), + O_MAIN(0x0066CC, true, true, false), + + // === Red giants === + M_GIANT(0x990000, true, false, true), + K_GIANT(0xFF6600, true, false, true), + G_GIANT(0xFFCC00, true, false, true), + F_GIANT(0xFFFF66, true, false, true), + + // === Blue giants === + A_GIANT(0xCCFFCC, true, false, true), + B_GIANT(0x66FFFF, true, false, true), + O_GIANT(0x0099FF, true, false, true), + + // === Red supergiants === + M_SUPERGIANT(0xFF0000, true, false, true), + K_SUPERGIANT(0xFF9900, true, false, true), + G_SUPERGIANT(0xFFCC66, true, false, true), + F_SUPERGIANT(0xFFFF99, true, false, true), + + // === Blue supergiants === + A_SUPERGIANT(0xFFFFFF, true, false, true), + B_SUPERGIANT(0x99FFFF, true, false, true), + O_SUPERGIANT(0x33CCFF, true, false, true), + + // === White dwarf === + WHITE_DWARF(0x666666, true, false, true), + + // === Stellar remnants (special rendering) === + NEUTRON_STAR(0x000001, true, false, false), + BLACK_HOLE(0x000002, true, false, false); + + private final int rgb; + /** + * -- GETTER -- + * Whether this body requires amplifier mode. + */ + @Getter + private final boolean stellar; + /** + * -- GETTER -- + * Main sequence stars — step 2 uses age_temp, step 3 needed. + */ + @Getter + private final boolean mainSequence; + private final boolean step2UsesSp; + + private static final Map BY_RGB = new HashMap<>(); + + static { + for (CelestialBodyClass c : values()) { + BY_RGB.put(c.rgb, c); + } + } + + CelestialBodyClass(int rgb, boolean stellar, boolean mainSequence, boolean step2UsesSp) { + this.rgb = rgb; + this.stellar = stellar; + this.mainSequence = mainSequence; + this.step2UsesSp = step2UsesSp; + } + + public int rgb() { + return rgb; + } + + /** + * Whether step 2 uses age_temp_sp instead of age_temp. + */ + public boolean step2UsesSp() { + return step2UsesSp; + } + + /** + * Whether step 3 (age_radius lookup) is needed. + */ + public boolean needsStep3() { + return stellar || this == BROWN_DWARF; + } + + /** + * Whether this is an extreme compact object (black hole or neutron star) + * that requires a singularity crystal to store. + */ + public boolean isExtreme() { + return this == BLACK_HOLE || this == NEUTRON_STAR; + } + + /** + * Planetary bodies (including brown dwarf, excluding large moon). + */ + public boolean isPlanetary() { + return !stellar; + } + + /** + * Rocky planet types (for step 2 special matching). + */ + public boolean isRockyPlanet() { + return this == ROCKY_NO_LIQUID || this == ROCKY_LOW_LIQUID + || this == ROCKY_MED_LIQUID || this == ROCKY_HIGH_LIQUID; + } + + /** + * The accepted step 2 color for this body class. Rocky planets all use ROCKY_LOW_LIQUID rgb. + */ + public int step2MatchRgb() { + return isRockyPlanet() ? ROCKY_LOW_LIQUID.rgb : rgb; + } + + @Nullable + public static CelestialBodyClass fromRgb(int rgb) { + return BY_RGB.get(rgb); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyData.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyData.java new file mode 100644 index 0000000000..dce96911e6 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyData.java @@ -0,0 +1,74 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.nbt.CompoundTag; + +public sealed interface CelestialBodyData permits RockyPlanetData, GiantPlanetData, StarData, SpecialCelestialBodyData { + + CelestialBodyType type(); + + /** + * The matched body class from the diagram. + */ + CelestialBodyClass bodyClass(); + + RingType ringType(); + + int size(); + + float axialTilt(); + + /** + * Rotation speed level (0-5). + *
    + *
  • 0 = Very Slow
  • + *
  • 1 = Slow
  • + *
  • 2 = Medium
  • + *
  • 3 = Fast
  • + *
  • 4 = Very Fast
  • + *
  • 5 = Super Fast
  • + *
+ */ + int rotationSpeed(); + + int magneticFieldStrength(); + + /** + * Convert rotation speed level to visual rotation multiplier (deg/tick). + */ + static float getVisualRotationSpeed(int level) { + return switch (level) { + case 0 -> 0.1f; + case 1 -> 0.5f; + case 2 -> 1.0f; + case 3 -> 1.5f; + case 4 -> 3.0f; + default -> 100.0f; // 5+ = Super Fast + }; + } + + CompoundTag toTag(); + + static CelestialBodyData fromTag(CompoundTag tag) { + String typeName = tag.getStringOr("bodyType", "rocky_planet"); + CelestialBodyType type = CelestialBodyType.fromName(typeName); + return switch (type) { + case ROCKY_PLANET -> RockyPlanetData.fromTag(tag); + case GIANT_PLANET -> GiantPlanetData.fromTag(tag); + case STAR -> StarData.fromTag(tag); + case SPECIAL -> SpecialCelestialBodyData.fromTag(tag); + }; + } + + static CelestialBodyClass readClass(CompoundTag tag, CelestialBodyType bodyType) { + String className = tag.getStringOr("bodyClass", ""); + if (!className.isEmpty()) { + return CelestialBodyClass.valueOf(className); + } + return switch (bodyType) { + case ROCKY_PLANET -> CelestialBodyClass.ROCKY_NO_LIQUID; + case GIANT_PLANET -> CelestialBodyClass.GAS_GIANT; + case STAR -> CelestialBodyClass.M_MAIN; + case SPECIAL -> CelestialBodyClass.LARGE_MOON; + }; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyMatcher.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyMatcher.java new file mode 100644 index 0000000000..d5d4bff3c5 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyMatcher.java @@ -0,0 +1,540 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import dev.dubhe.anvilcraft.AnvilCraft; +import net.minecraft.util.RandomSource; +import org.jspecify.annotations.Nullable; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.List; + +/** + * Three-step celestial body matching engine using diagram PNGs. + * Each 64×64 diagram maps anvil counts to pixel colors that identify body classes. + * Uses classloader-based loading (works on both server and client). + * + *

+ * In 26.1, {@code NativeImage} became {@code @OnlyIn(Dist.CLIENT)} and is unavailable + * on the server. This class now uses {@link javax.imageio.ImageIO} + {@link BufferedImage} + * which works everywhere. + *

+ * Pixel format difference: {@code BufferedImage.getRGB()} returns ARGB (0xAARRGGBB), + * whereas the old {@code NativeImage.getPixelRGBA()} returned ABGR (0xAABBGGRR). + * The RGB extraction has been updated accordingly. + */ +public final class CelestialBodyMatcher { + + private static final String DIR = "assets/anvilcraft/textures/misc"; + + // Diagram files + private static final String MASS_RADIUS = DIR + "/mass_radius_diagram_pixel.png"; + private static final String AGE_TEMP = DIR + "/age_temp_diagram_pixel.png"; + private static final String AGE_TEMP_SP = DIR + "/age_temp_diagram_pixel_sp.png"; + private static final String AGE_RADIUS = DIR + "/age_radius_diagram_pixel.png"; + private static final String STAR_COLOR_TEMP = "assets/anvilcraft/textures/block/celestial_body/star_color_temperature.png"; + + private static BufferedImage massRadiusImage; + private static BufferedImage ageTempImage; + private static BufferedImage ageTempSpImage; + private static BufferedImage ageRadiusImage; + private static BufferedImage starColorTempImage; + private static boolean loadAttempted = false; + + // Precomputed valid (time,space,mass,energy) combinations + private static BitSet validAmplified; + private static BitSet validNormal; + private static boolean precomputed = false; + + private CelestialBodyMatcher() { + } + + // === Public API === + + /** + * Try to match celestial body from the four anvil counts. + */ + // Diagrams are 64×64 pixels. Anvil counts range 1–64. + // Pixel (1,1) bottom-left → 0-indexed (x=0, y=63). + // Pixel (64,64) top-right → 0-indexed (x=63, y=0). + private static final int DIAG_SIZE = 64; + + @Nullable + public static CelestialBodyData match( + int time, int space, int mass, int energy, boolean isAmplified, RandomSource random + ) { + ensureLoaded(); + + // Step 1: Mass-Radius diagram (mass=x, space=y inverted) + CelestialBodyClass bodyClass = lookupClass(massRadiusImage, toX(mass), toY(space)); + if (bodyClass == null) return null; + + // Stellar bodies require amplifier + if (bodyClass.isStellar() && !isAmplified) return null; + + // Step 2: Temperature-Age diagram (time=x, energy=y inverted) + if (!step2(toX(time), toY(energy), bodyClass)) return null; + + // Step 3: Age-Radius diagram (time=x, space=y inverted, for stellar+brown dwarf) + if (bodyClass.needsStep3() && !step3(toX(time), toY(space), bodyClass)) return null; + + // Generate rendering data + return generateBodyData(bodyClass, time, space, mass, energy, random); + } + + /** + * Maps anvil count (1–64) to 0-indexed diagram x pixel. + */ + public static int toX(int count) { + return Math.clamp(count - 1, 0, DIAG_SIZE - 1); + } + + /** + * Maps anvil count (1–64) to 0-indexed diagram y pixel (inverted: bottom→top). + */ + public static int toY(int count) { + return Math.clamp(DIAG_SIZE - count, 0, DIAG_SIZE - 1); + } + + /** + * Encode a 4-tuple of anvil counts (1–64) into a single int index for the bitset. + */ + private static int encode(int time, int space, int mass, int energy) { + return ((time - 1) << 18) | ((space - 1) << 12) | ((mass - 1) << 6) | (energy - 1); + } + + // === Precomputation of all valid combinations === + + @SuppressWarnings("checkstyle:NeedBraces") + private static void ensurePrecomputed() { + if (precomputed) return; + ensureLoaded(); + precomputed = true; + + if (massRadiusImage == null) return; + + validAmplified = new BitSet(1 << 24); + validNormal = new BitSet(1 << 24); + + for (int mass = 1; mass <= 64; mass++) { + int mx = toX(mass); + for (int space = 1; space <= 64; space++) { + int sy = toY(space); + CelestialBodyClass bodyClass = lookupClass(massRadiusImage, mx, sy); + if (bodyClass == null) continue; + + int massSpaceBase = ((space - 1) << 12) | ((mass - 1) << 6); + + for (int time = 1; time <= 64; time++) { + int tx = toX(time); + + boolean step3Ok = !bodyClass.needsStep3() || step3(tx, sy, bodyClass); + if (!step3Ok) continue; + + int timeBase = ((time - 1) << 18) | massSpaceBase; + + for (int energy = 1; energy <= 64; energy++) { + int ey = toY(energy); + if (step2(tx, ey, bodyClass)) { + int index = timeBase | (energy - 1); + validAmplified.set(index); + if (!bodyClass.isStellar()) { + validNormal.set(index); + } + } + } + } + } + } + } + + /** + * Trigger precomputation early (e.g. when the CFA screen opens) so the first + * tooltip query has no delay. + */ + public static void warmup() { + ensurePrecomputed(); + } + + // === Range query for tooltip === + + /** + * Get the valid range [min, max] for one anvil type given partial counts. + * Count values of 0 mean "unknown / not placed yet". + */ + public static int @Nullable [] getValidRange(int time, int space, int mass, int energy, boolean isAmplified, int targetIndex) { + ensurePrecomputed(); + BitSet bitset = isAmplified ? validAmplified : validNormal; + if (bitset == null) return null; + + int[] counts = {time, space, mass, energy}; + + boolean allUnknown = true; + for (int i = 0; i < 4; i++) { + if (i != targetIndex && counts[i] > 0) { + allUnknown = false; + break; + } + } + if (allUnknown) return new int[] {1, 64}; + + java.util.List unknownIndices = new ArrayList<>(); + for (int i = 0; i < 4; i++) { + if (i != targetIndex && counts[i] <= 0) { + unknownIndices.add(i); + } + } + + int min = 65; + int max = 0; + int[] test = counts.clone(); + + for (int candidate = 1; candidate <= 64; candidate++) { + test[targetIndex] = candidate; + if (anyValid(bitset, test, unknownIndices)) { + if (candidate < min) min = candidate; + max = candidate; + } + } + + if (min > max) return null; + return new int[] {min, max}; + } + + private static boolean anyValid(BitSet bitset, int[] counts, List unknownIndices) { + if (unknownIndices.isEmpty()) { + return bitset.get(encode(counts[0], counts[1], counts[2], counts[3])); + } + return anyValidRecursive(bitset, counts, unknownIndices, 0); + } + + private static boolean anyValidRecursive(BitSet bitset, int[] counts, List unknownIndices, int depth) { + if (depth == unknownIndices.size()) { + return bitset.get(encode(counts[0], counts[1], counts[2], counts[3])); + } + int idx = unknownIndices.get(depth); + for (int val = 1; val <= 64; val++) { + counts[idx] = val; + if (anyValidRecursive(bitset, counts, unknownIndices, depth + 1)) { + return true; + } + } + return false; + } + + // === Diagram loading (classloader-based — works server-side) === + + @SuppressWarnings("checkstyle:NeedBraces") + private static void ensureLoaded() { + if (loadAttempted) return; + loadAttempted = true; + massRadiusImage = loadImage(MASS_RADIUS); + ageTempImage = loadImage(AGE_TEMP); + ageTempSpImage = loadImage(AGE_TEMP_SP); + ageRadiusImage = loadImage(AGE_RADIUS); + } + + private static BufferedImage loadImage(String classpath) { + try (InputStream is = AnvilCraft.class.getClassLoader().getResourceAsStream(classpath)) { + if (is == null) { + AnvilCraft.LOGGER.warn("CelestialBodyMatcher: missing diagram {}", classpath); + return null; + } + return ImageIO.read(is); + } catch (Exception e) { + AnvilCraft.LOGGER.warn("CelestialBodyMatcher: failed to load {}", classpath, e); + return null; + } + } + + @Nullable + private static BufferedImage loadStarColorTemp() { + if (starColorTempImage == null) { + starColorTempImage = loadImage(STAR_COLOR_TEMP); + } + return starColorTempImage; + } + + // === Diagram lookups === + + /** + * Extract RGB from a {@link BufferedImage} pixel. + * {@code BufferedImage.getRGB()} returns ARGB format: {@code 0xAARRGGBB}. + */ + private static int getRgb(BufferedImage image, int x, int y) { + if (image == null) return 0; + int xi = Math.clamp(x, 0, image.getWidth() - 1); + int yi = Math.clamp(y, 0, image.getHeight() - 1); + int argb = image.getRGB(xi, yi); + // BufferedImage: ARGB → extract R,G,B + int r = (argb >> 16) & 0xFF; + int g = (argb >> 8) & 0xFF; + int b = argb & 0xFF; + return (r << 16) | (g << 8) | b; + } + + @Nullable + private static CelestialBodyClass lookupClass(BufferedImage image, int x, int y) { + if (image == null) return null; + int rgb = getRgb(image, x, y); + return CelestialBodyClass.fromRgb(rgb); + } + + // === Step logic === + + private static boolean step2(int time, int energy, CelestialBodyClass bodyClass) { + if (bodyClass.step2UsesSp()) { + return getRgb(ageTempSpImage, time, energy) == bodyClass.rgb(); + } + if (bodyClass.isPlanetary() && bodyClass != CelestialBodyClass.BROWN_DWARF) { + // Planetary: step 2 match color; rocky planets all accept 0x339933 + return getRgb(ageTempImage, time, energy) == bodyClass.step2MatchRgb(); + } + // Main sequence + return getRgb(ageTempImage, time, energy) == bodyClass.rgb(); + } + + private static boolean step3(int time, int space, CelestialBodyClass bodyClass) { + return getRgb(ageRadiusImage, time, space) == bodyClass.rgb(); + } + + // === Body data generation === + + @SuppressWarnings("checkstyle:MethodLength") + private static CelestialBodyData generateBodyData( + CelestialBodyClass bodyClass, int time, int space, int mass, int energy, RandomSource random + ) { + return switch (bodyClass) { + case LARGE_MOON -> generateLargeMoon(space, energy, random); + case ROCKY_NO_LIQUID, ROCKY_LOW_LIQUID, ROCKY_MED_LIQUID, ROCKY_HIGH_LIQUID -> generateRockyPlanet( + bodyClass, energy, space, random); + case ICE_GIANT -> generateGiantPlanet(bodyClass, PressureType.ICE, space, random); + case GAS_GIANT -> generateGiantPlanet(bodyClass, PressureType.GAS, space, random); + case BROWN_DWARF -> generateBrownDwarf(space, energy, random); + default -> generateStar(bodyClass, energy, space, random); + }; + } + + // === Large Moon === + private static CelestialBodyData generateLargeMoon(int space, int energy, RandomSource random) { + int size = sizeForSpace(space); + int mag = random.nextFloat() < 0.5f ? 0 : 1; + Temperature temperature = energyToTemperature(energy); + return new RockyPlanetData( + CelestialBodyClass.LARGE_MOON, + false, LiquidCoverage.NONE, temperature, + RingType.NONE, size, + random.nextInt(16), 0, + randomAxialTilt(random), randomRotationSpeed(random), mag + ); + } + + // === Rocky Planet === + private static CelestialBodyData generateRockyPlanet( + CelestialBodyClass bodyClass, int energy, int space, RandomSource random + ) { + LiquidCoverage liquid = switch (bodyClass) { + case ROCKY_NO_LIQUID -> LiquidCoverage.NONE; + case ROCKY_LOW_LIQUID -> LiquidCoverage.LOW; + case ROCKY_MED_LIQUID -> LiquidCoverage.MEDIUM; + case ROCKY_HIGH_LIQUID -> LiquidCoverage.HIGH; + default -> LiquidCoverage.NONE; + }; + boolean hasAtmosphere = random.nextFloat() < 0.2f; + Temperature temperature = energyToTemperature(energy); + RingType ring = weightedRing(random, 0.97f, 0.02f, 0.01f); + int size = sizeForSpace(space); + int baseRow = random.nextInt(8); + int overlayRow = liquid == LiquidCoverage.NONE ? 0 : 8 + random.nextInt(8); + int mag = weightedMagnetic(random, 0.10f, 0.80f, 0.10f); + + return new RockyPlanetData( + bodyClass, + hasAtmosphere, liquid, temperature, ring, size, + baseRow, overlayRow, + randomAxialTilt(random), randomRotationSpeed(random), mag + ); + } + + // === Brown Dwarf === + private static CelestialBodyData generateBrownDwarf(int space, int energy, RandomSource random) { + int size = sizeForSpace(space); + int baseRow = random.nextInt(16); + int overlayRow; + do { + overlayRow = random.nextInt(16); + } while (overlayRow == baseRow); + int mag = weightedMagnetic(random, 0.01f, 0.49f, 0.50f); + return new GiantPlanetData( + CelestialBodyClass.BROWN_DWARF, + PressureType.GAS, WindSpeed.HIGH, RingType.NONE, size, + baseRow, overlayRow, + randomAxialTilt(random), randomRotationSpeed(random), mag, true + ); + } + + // === Giant Planet === + private static CelestialBodyData generateGiantPlanet( + CelestialBodyClass bodyClass, PressureType pressure, int space, RandomSource random + ) { + RingType ring = weightedRing(random, 0.70f, 0.20f, 0.10f); + int size = sizeForSpace(space); + int baseRow = random.nextInt(16); + int overlayRow; + do { + overlayRow = random.nextInt(16); + } while (overlayRow == baseRow); + WindSpeed wind = random.nextBoolean() ? WindSpeed.HIGH : WindSpeed.VERY_HIGH; + int mag = weightedMagnetic(random, 0.01f, 0.49f, 0.50f); + return new GiantPlanetData( + bodyClass, + pressure, wind, ring, size, + baseRow, overlayRow, + randomAxialTilt(random), randomRotationSpeed(random), mag, false + ); + } + + // === Star === + private static CelestialBodyData generateStar( + CelestialBodyClass bodyClass, int energy, int space, RandomSource random + ) { + int size = sizeForSpace(space); + int[] rgb = getStarColorFromTempDiagram(energy); + int mag = random.nextFloat() < 0.10f ? 5 : 4; + int rotSpeed = bodyClass == CelestialBodyClass.BLACK_HOLE ? 0 : randomRotationSpeed(random); + float axialTilt = 0f; + return new StarData( + bodyClass, + size, rgb[0], rgb[1], rgb[2], + axialTilt, rotSpeed, mag, energy, + null + ); + } + + // === Helpers === + + private static int sizeForSpace(int space) { + return Math.clamp(space, 1, 64); + } + + public static Temperature energyToTemperature(int energy) { + if (energy <= 12) return Temperature.FREEZING; + if (energy <= 15) return Temperature.COLD; + if (energy == 16) return Temperature.MILD; + if (energy <= 22) return Temperature.HOT; + return Temperature.SCORCHED; + } + + private static RingType weightedRing(RandomSource random, float noneChance, float weakChance, float strongChance) { + float f = random.nextFloat(); + if (f < noneChance) return RingType.NONE; + if (f < noneChance + weakChance) return RingType.WEAK; + return RingType.STRONG; + } + + private static int weightedMagnetic(RandomSource random, float p0, float p1, float p2) { + float f = random.nextFloat(); + if (f < p0) return 0; + if (f < p0 + p1) return 1; + return 2; + } + + private static float randomAxialTilt(RandomSource random) { + float raw = random.nextFloat(); + return 90f * raw * raw; + } + + private static int randomRotationSpeed(RandomSource random) { + float f = random.nextFloat(); + if (f < 0.01f) return 0; + if (f < 0.26f) return 1; + if (f < 0.74f) return 2; + if (f < 0.99f) return 3; + if (f < 0.999f) return 4; + return 5; + } + + @SuppressWarnings("checkstyle:NeedBraces") + private static int[] getStarColorFromTempDiagram(int energy) { + BufferedImage img = loadStarColorTemp(); + if (img == null) return new int[] {255, 255, 255}; + int row = toY(energy); + int argb = img.getRGB(0, row); + // BufferedImage ARGB: AARRGGBB + int r = (argb >> 16) & 0xFF; + int g = (argb >> 8) & 0xFF; + int b = argb & 0xFF; + return new int[] {r, g, b}; + } + + // === Public diagram pixel lookups (for UI guide display) === + + public static int getMassRadiusRgb(int mass, int space) { + ensureLoaded(); + return getRgb(massRadiusImage, toX(mass), toY(space)); + } + + public static int getAgeTempRgb(int time, int energy) { + ensureLoaded(); + return getRgb(ageTempImage, toX(time), toY(energy)); + } + + public static int getAgeTempSpRgb(int time, int energy) { + ensureLoaded(); + return getRgb(ageTempSpImage, toX(time), toY(energy)); + } + + public static int getAgeRadiusRgb(int time, int space) { + ensureLoaded(); + return getRgb(ageRadiusImage, toX(time), toY(space)); + } + + // === Pixel scanning for stellar evolution accelerator === + + public static int countPixelsRightInAgeTemp(int x, int y) { + ensureLoaded(); + if (ageTempImage == null) return 0; + int count = 0; + for (int scanX = x + 1; scanX < DIAG_SIZE; scanX++) { + int rgb = getRgb(ageTempImage, scanX, y); + if (rgb == 0x000000) break; + count++; + } + return count; + } + + public static int countPixelsDownInAgeTempSp(int x, int y) { + ensureLoaded(); + if (ageTempSpImage == null) return 0; + int count = 0; + for (int scanY = y + 1; scanY < DIAG_SIZE; scanY++) { + int rgb = getRgb(ageTempSpImage, x, scanY); + if (rgb == 0x000000) break; + count++; + } + return count; + } + + public static int countTotalColoredPixelsInAgeTempSpColumn(int x, int startY) { + ensureLoaded(); + if (ageTempSpImage == null) return 0; + int segmentTop = startY; + for (int scanY = startY - 1; scanY >= 0; scanY--) { + if (getRgb(ageTempSpImage, x, scanY) == 0x000000) break; + segmentTop = scanY; + } + int count = 0; + for (int scanY = segmentTop; scanY < DIAG_SIZE; scanY++) { + int rgb = getRgb(ageTempSpImage, x, scanY); + if (rgb == 0x000000) break; + count++; + } + return count; + } + + public static int[] getStarColor(int energy) { + return getStarColorFromTempDiagram(energy); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyType.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyType.java new file mode 100644 index 0000000000..d4cbe565c1 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialBodyType.java @@ -0,0 +1,31 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.util.StringRepresentable; +import org.jetbrains.annotations.NotNull; + +public enum CelestialBodyType implements StringRepresentable { + ROCKY_PLANET("rocky_planet"), + GIANT_PLANET("giant_planet"), + STAR("star"), + SPECIAL("special"); + + private final String name; + + CelestialBodyType(String name) { + this.name = name; + } + + @Override + public @NotNull String getSerializedName() { + return name; + } + + public static CelestialBodyType fromName(String name) { + for (CelestialBodyType type : values()) { + if (type.name.equals(name)) { + return type; + } + } + return ROCKY_PLANET; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialRefactorOption.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialRefactorOption.java new file mode 100644 index 0000000000..cfef92fe5a --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialRefactorOption.java @@ -0,0 +1,60 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; + +/** + * Represents a possible Celestial Restriction Ring refactoring option. + * Each option turns a ring into a megastructure. + * + * @param ring which ring (R1-R6) to refactor + * @param megastructure the megastructure model name suffix (e.g. "eco_station", "dyson_sphere") + * @param modelLocation the model {@link Identifier} for the megastructure model + * @param displayName translation key for the megastructure display name + * @param material required building material as an ItemStack, or {@link ItemStack#EMPTY} if none + * @param materialCount how many of the material are required + */ +public record CelestialRefactorOption( + int ring, + String megastructure, + Identifier modelLocation, + String displayName, + ItemStack material, + int materialCount +) { + /** + * Create a refactor option that requires no building materials. + */ + public static CelestialRefactorOption noMaterial( + int ring, String megastructure, Identifier modelLocation, String displayName + ) { + return new CelestialRefactorOption( + ring, megastructure, modelLocation, displayName, ItemStack.EMPTY, 0 + ); + } + + /** + * Create a refactor option that requires a building material. + * + * @param ring ring index (1-6) + * @param megastructure megastructure name suffix + * @param modelLocation model identifier + * @param displayName translation key + * @param material the required item + * @param materialCount how many of the item are required + */ + public static CelestialRefactorOption withMaterial( + int ring, String megastructure, Identifier modelLocation, String displayName, + ItemLike material, int materialCount + ) { + return new CelestialRefactorOption( + ring, megastructure, modelLocation, displayName, + new ItemStack(material), materialCount + ); + } + + public boolean needsMaterial() { + return materialCount > 0 && !material.isEmpty(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialRefactorRegistry.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialRefactorRegistry.java new file mode 100644 index 0000000000..3abaeb54a6 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialRefactorRegistry.java @@ -0,0 +1,236 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.init.item.ModItems; +import net.minecraft.resources.Identifier; +import org.jspecify.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Registry that maps celestial bodies to their possible Celestial Restriction Ring refactoring options. + * + *

+ * The innermost ring for each body type: + *

    + *
  • Small rocky planets (size < 26): innermost = R1
  • + *
  • Small giant planets (size < 26): innermost = R2
  • + *
  • Small stars (size < 26): innermost = R4
  • + *
  • Large stars (size >= 26): innermost = R5
  • + *
+ * + *

+ * There are 11 unique megastructures total, distributed across different rings. + * Variant models (e.g. excavator_off, coil_fix) are rendered in-world separately; + * in the UI only the main model is shown. + */ +public final class CelestialRefactorRegistry { + + private CelestialRefactorRegistry() { + } + + /** + * Get the innermost ring index for a given celestial body. + * + *

+ * With amplification, the minimum ring is always 4 (stellar-scale). + */ + public static int getInnermostRing(CelestialBodyData body, boolean amplified) { + boolean isLarge = body.size() >= 48; + int ring = switch (body) { + case StarData ignored -> isLarge ? 5 : 4; + case GiantPlanetData ignored -> 2; + case RockyPlanetData ignored -> 1; + case SpecialCelestialBodyData s -> s.isErrorPlanet() ? 0 : 1; + }; + if (amplified) { + ring = Math.max(ring, 4); + } + return ring; + } + + /** + * Get available refactoring options for a locked celestial body. + * + *

+ * Non-amplified CFA has rings 1-3 → shows ring 1+2 megastructures.
+ * Amplified CFA has rings 3-5 → shows ring 4+5 megastructures. + * + * @param resources the planetary resource set, used to filter options by resource availability; + * may be null (most permissive, all ring-eligible options shown) + */ + public static List getOptions(CelestialBodyData body, boolean amplified, + @Nullable PlanetaryResourceSet resources) { + if (body == null) return Collections.emptyList(); + // Error Planet cannot build megastructures + if (body instanceof SpecialCelestialBodyData s && s.isErrorPlanet()) { + return Collections.emptyList(); + } + int innermostRing = getInnermostRing(body, amplified); + int maxRing = amplified ? 5 : 2; + List options = getOptionsForRing(innermostRing, maxRing); + + // Filter planet_exctractor: rocky/special planet must have liquid + if (!hasLiquid(body)) { + options.removeIf(opt -> "planet_exctractor".equals(opt.megastructure())); + } + + // Filter giant_planet_exctractor: only available for giant planets + if (!(body instanceof GiantPlanetData)) { + options.removeIf(opt -> "giant_planet_exctractor".equals(opt.megastructure())); + } + + // Filter stellar_ring_collider: only available for small stellar bodies (size < 48) + if (!(body instanceof StarData star && star.size() < 48)) { + options.removeIf(opt -> "stellar_ring_collider".equals(opt.megastructure())); + } + + // Filter stellar_evolution_accelerator: not available for stellar remnants + if (body instanceof StarData star + && (star.bodyClass() == CelestialBodyClass.WHITE_DWARF + || star.bodyClass() == CelestialBodyClass.NEUTRON_STAR + || star.bodyClass() == CelestialBodyClass.BLACK_HOLE)) { + options.removeIf(opt -> "stellar_evolution_accelerator".equals(opt.megastructure())); + } + + // Filter magnetar_coil: only available for neutron stars + if (!(body instanceof StarData star && star.bodyClass() == CelestialBodyClass.NEUTRON_STAR)) { + options.removeIf(opt -> "magnetar_coil".equals(opt.megastructure())); + } + + // Filter stellar_evolution_accelerator ring variant by star size: + // Small stars use ring 5 model, large stars use ring 6 model. + if (body instanceof StarData star) { + boolean isLarge = star.size() >= 48; + options.removeIf(opt -> "stellar_evolution_accelerator".equals(opt.megastructure()) + && ((isLarge && opt.ring() == 5) || (!isLarge && opt.ring() == 6))); + } + + // Filter Dyson Sphere: small for small stars, large for large stars + if (body instanceof StarData star) { + boolean isLarge = star.size() >= 48; + options.removeIf(opt -> "dyson_sphere_small".equals(opt.megastructure()) && isLarge); + options.removeIf(opt -> "dyson_sphere_large".equals(opt.megastructure()) && !isLarge); + } + + // Filter penrose_sphere: only available for black holes + if (!(body instanceof StarData star && star.bodyClass() == CelestialBodyClass.BLACK_HOLE)) { + options.removeIf(opt -> "penrose_sphere".equals(opt.megastructure())); + } + + // Filter wormhole_stabilizer: only available for black holes when amplified + if (!(body instanceof StarData star && star.bodyClass() == CelestialBodyClass.BLACK_HOLE && amplified)) { + options.removeIf(opt -> "wormhole_stabilizer".equals(opt.megastructure())); + } + + // Filter matter_decompressor: only available for neutron stars or black holes + if (!(body instanceof StarData star + && (star.bodyClass() == CelestialBodyClass.NEUTRON_STAR + || star.bodyClass() == CelestialBodyClass.BLACK_HOLE))) { + options.removeIf(opt -> "matter_decompressor".equals(opt.megastructure())); + } + + // Filter eco_station: requires biological resources and no low-level civilization + if (resources != null) { + options.removeIf(opt -> "eco_station".equals(opt.megastructure()) + && !isEcoStationEligible(resources)); + // Filter temple: requires low-level civilization + options.removeIf(opt -> "temple".equals(opt.megastructure()) + && !resources.hasCivilization()); + } + + return options; + } + + /** + * Eco station is only eligible when the planet has biological resources + * and does NOT have a low-level civilization. + */ + private static boolean hasLiquid(CelestialBodyData body) { + if (body instanceof RockyPlanetData rocky) return rocky.liquidCoverage() != LiquidCoverage.NONE; + if (body instanceof SpecialCelestialBodyData s) { + LiquidCoverage lc = s.liquidCoverage(); + return lc != null && lc != LiquidCoverage.NONE; + } + return false; + } + + private static boolean isEcoStationEligible(PlanetaryResourceSet resources) { + if (resources.hasCivilization()) return false; + return !resources.getBiologicalItems().isEmpty() + || !resources.getBiologicalFluids().isEmpty(); + } + + /** + * Get available megastructure options for a ring range [innermostRing, maxRing]. + * Inner rings can build any megastructure that outer rings can. + */ + public static List getOptionsForRing(int innermostRing, int maxRing) { + List options = new ArrayList<>(); + String prefix = "screen.anvilcraft.cfa.megastructure."; + + if (innermostRing <= 1 && 1 <= maxRing) { + // Ring 1 megastructures (innermost for small rocky planets) + options.add(CelestialRefactorOption.withMaterial(1, "planet_excavator", + ringModel(1, "excavator"), prefix + "planet_excavator", + ModBlocks.RUBY_PRISM.asItem(), 16)); + options.add(CelestialRefactorOption.withMaterial(1, "planet_exctractor", + ringModel(1, "exctractor"), prefix + "planet_exctractor", + ModBlocks.FLUID_TANK.asItem(), 16)); + options.add(CelestialRefactorOption.withMaterial(1, "eco_station", + ringModel(1, "eco_station"), prefix + "eco_station", + ModBlocks.TEMPERING_GLASS.asItem(), 64)); + options.add(CelestialRefactorOption.withMaterial(1, "temple", + ringModel(1, "temple"), prefix + "temple", + net.minecraft.world.item.Items.GOLD_BLOCK, 64)); + } + if (innermostRing <= 2 && 2 <= maxRing) { + // Ring 2 megastructures (innermost for small giant planets) + options.add(CelestialRefactorOption.withMaterial(2, "giant_planet_exctractor", + ringModel(2, "exctractor"), prefix + "giant_planet_exctractor", + ModBlocks.FLUID_TANK.asItem(), 32)); + } + if (innermostRing <= 4 && 4 <= maxRing) { + // Ring 4 megastructures (innermost for small stars) + options.add(CelestialRefactorOption.withMaterial(4, "stellar_ring_collider", + ringModel(4, "collider"), prefix + "stellar_ring_collider", + ModBlocks.ACCELERATION_RING.asItem(), 16)); + options.add(CelestialRefactorOption.withMaterial(4, "dyson_sphere_small", + ringModel(4, "dyson_sphere"), prefix + "dyson_sphere_small", + ModItems.DYSON_SPHERE_COMPONENT, 16)); + options.add(CelestialRefactorOption.withMaterial(4, "magnetar_coil", + ringModel(4, "coil"), prefix + "magnetar_coil", + ModBlocks.CHARGE_COLLECTOR.asItem(), 4)); + options.add(CelestialRefactorOption.withMaterial(4, "penrose_sphere", + ringModel(4, "penrose_sphere"), prefix + "penrose_sphere", + ModItems.PENROSE_SPHERE_COMPONENT, 8)); + options.add(CelestialRefactorOption.withMaterial(4, "matter_decompressor", + ringModel(4, "matter_decompressor"), prefix + "matter_decompressor", + ModBlocks.SINGULARITY_CRYSTAL.asItem(), 1)); + options.add(CelestialRefactorOption.withMaterial(4, "wormhole_stabilizer", + ringModel(4, "wormhole_stabilizer"), prefix + "wormhole_stabilizer", + ModBlocks.NEGATIVE_MATTER_BLOCK.asItem(), 16)); + options.add(CelestialRefactorOption.withMaterial(5, "stellar_evolution_accelerator", + ringModel(5, "stellar_evolution_accelerator"), prefix + "stellar_evolution_accelerator", + ModBlocks.CORRUPTED_BEACON.asItem(), 8)); + } + if (innermostRing <= 5 && 5 <= maxRing) { + // Ring 5 megastructures (innermost for large stars) + options.add(CelestialRefactorOption.withMaterial(5, "dyson_sphere_large", + ringModel(5, "dyson_sphere"), prefix + "dyson_sphere_large", + ModItems.DYSON_SPHERE_COMPONENT, 32)); + options.add(CelestialRefactorOption.withMaterial(6, "stellar_evolution_accelerator", + ringModel(6, "stellar_evolution_accelerator"), prefix + "stellar_evolution_accelerator", + ModBlocks.CORRUPTED_BEACON.asItem(), 8)); + } + return options; + } + + private static Identifier ringModel(int ring, String megastructure) { + return Identifier.withDefaultNamespace( + "block/celestial_forging_anvil_ring_" + ring + "_" + megastructure + ); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/GiantPlanetData.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/GiantPlanetData.java new file mode 100644 index 0000000000..2e47429a01 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/GiantPlanetData.java @@ -0,0 +1,60 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.nbt.CompoundTag; + +public record GiantPlanetData( + CelestialBodyClass bodyClass, + PressureType pressureType, + WindSpeed windSpeed, + RingType ringType, + int size, + int paletteBaseRow, + int paletteOverlayRow, + float axialTilt, + int rotationSpeed, + int magneticFieldStrength, + boolean brownDwarf +) implements CelestialBodyData { + + @Override + public CelestialBodyType type() { + return CelestialBodyType.GIANT_PLANET; + } + + @Override + public CompoundTag toTag() { + CompoundTag tag = new CompoundTag(); + tag.putString("bodyType", type().getSerializedName()); + tag.putString("bodyClass", bodyClass.name()); + tag.putString("pressureType", pressureType.getSerializedName()); + tag.putString("windSpeed", windSpeed.getSerializedName()); + tag.putString("ringType", ringType.getSerializedName()); + tag.putInt("size", size); + tag.putInt("paletteBaseRow", paletteBaseRow); + tag.putInt("paletteOverlayRow", paletteOverlayRow); + tag.putFloat("axialTilt", axialTilt); + tag.putInt("rotationSpeed", rotationSpeed); + tag.putInt("magneticFieldStrength", magneticFieldStrength); + tag.putBoolean("brownDwarf", brownDwarf); + return tag; + } + + public static GiantPlanetData fromTag(CompoundTag tag) { + CelestialBodyClass cls = CelestialBodyData.readClass(tag, CelestialBodyType.GIANT_PLANET); + int mag = tag.getIntOr("magneticFieldStrength", 0); + boolean bd = tag.getBooleanOr("brownDwarf", false); + return new GiantPlanetData( + cls, + PressureType.fromName(tag.getStringOr("pressureType", "gas")), + WindSpeed.fromName(tag.getStringOr("windSpeed", "high")), + RingType.fromName(tag.getStringOr("ringType", "none")), + tag.getIntOr("size", 0), + tag.getIntOr("paletteBaseRow", 0), + tag.getIntOr("paletteOverlayRow", 0), + tag.getFloatOr("axialTilt", 0f), + tag.getIntOr("rotationSpeed", 0), + mag, + bd + ); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/LiquidCoverage.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/LiquidCoverage.java new file mode 100644 index 0000000000..b3dbf372b6 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/LiquidCoverage.java @@ -0,0 +1,31 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.util.StringRepresentable; +import org.jetbrains.annotations.NotNull; + +public enum LiquidCoverage implements StringRepresentable { + NONE("none"), + LOW("low"), + MEDIUM("medium"), + HIGH("high"); + + private final String name; + + LiquidCoverage(String name) { + this.name = name; + } + + @Override + public @NotNull String getSerializedName() { + return name; + } + + public static LiquidCoverage fromName(String name) { + for (LiquidCoverage value : values()) { + if (value.name.equals(name)) { + return value; + } + } + return NONE; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceGenerator.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceGenerator.java new file mode 100644 index 0000000000..eada7c67cb --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceGenerator.java @@ -0,0 +1,429 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; +import dev.dubhe.anvilcraft.recipe.sync.RecipesRecord; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.TagKey; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySpawnReason; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Generates a {@link PlanetaryResourceSet} for a celestial body by applying + * matching {@link PlanetResourceRecipe} instances and random generation logic. + */ +public final class PlanetResourceGenerator { + + private PlanetResourceGenerator() {} + + @SuppressWarnings("checkstyle:MissingSwitchDefault") + public static PlanetaryResourceSet generate( + CelestialBodyData body, + int ageAnvilCount, + Level level, + long seed + ) { + PlanetaryResourceSet set = new PlanetaryResourceSet(); + RandomSource random = RandomSource.create(seed); + if (!(level instanceof ServerLevel serverLevel)) return set; + + List recipes = new ArrayList<>(); + for (RecipeHolder holder : RecipesRecord.getRecipes(serverLevel).byType(ModRecipeTypes.PLANET_RESOURCE.get())) { + recipes.add(holder.value()); + } + + PlanetResourceInput input = new PlanetResourceInput(body, ageAnvilCount); + + PlanetResourceRecipe mineralRecipe = null; + List fluidRecipes = new ArrayList<>(); + List giantItemRecipes = new ArrayList<>(); + List giantFluidRecipes = new ArrayList<>(); + PlanetResourceRecipe biologicalRecipe = null; + PlanetResourceRecipe offeringRecipe = null; + PlanetResourceRecipe wastelandRecipe = null; + + for (PlanetResourceRecipe recipe : recipes) { + if (!recipe.matches(input, level)) continue; + switch (recipe.category()) { + case MINERAL -> { if (mineralRecipe == null) mineralRecipe = recipe; } + case FLUID -> fluidRecipes.add(recipe); + case GIANT_ITEM -> giantItemRecipes.add(recipe); + case GIANT_FLUID -> giantFluidRecipes.add(recipe); + case BIOLOGICAL -> { if (biologicalRecipe == null) biologicalRecipe = recipe; } + case OFFERING -> { if (offeringRecipe == null) offeringRecipe = recipe; } + case WASTELAND -> { if (wastelandRecipe == null) wastelandRecipe = recipe; } + } + } + + if (body instanceof RockyPlanetData rocky) { + generateMinerals(set, mineralRecipe, level.registryAccess(), random); + generateFluids(set, fluidRecipes, rocky); + + if (isLifeEligible(rocky)) { + int lifeChance = getLifeChance(rocky, biologicalRecipe); + boolean lifeExists = lifeChance > 0 && random.nextInt(100) < lifeChance; + + if (lifeExists) { + boolean hasCivilization = tryCivilization(set, offeringRecipe, rocky, ageAnvilCount, random); + if (hasCivilization) { + set.setHasCivilization(); + } else { + tryBiologicalLifeConfirmed(set, biologicalRecipe, rocky, level, random); + } + } else { + tryWasteland(set, wastelandRecipe, rocky, ageAnvilCount, random); + } + } + } else if (body instanceof GiantPlanetData) { + generateGiantItems(set, giantItemRecipes, random); + generateGiantFluids(set, giantFluidRecipes, random); + } + + return set; + } + + private static void generateMinerals( + PlanetaryResourceSet set, + @Nullable PlanetResourceRecipe recipe, + HolderLookup.Provider registries, + RandomSource random + ) { + if (recipe == null) return; + PlanetResourceRecipe.MineralData md = recipe.mineralData(); + if (md == null) return; + + TagKey sourceTag = TagKey.create(Registries.ITEM, Identifier.parse(md.sourceTag())); + TagKey blacklistTag = TagKey.create(Registries.ITEM, Identifier.parse(md.blacklistTag())); + + Set blacklist = new HashSet<>(); + registries.lookupOrThrow(Registries.ITEM) + .get(blacklistTag) + .ifPresent(entries -> entries.forEach( + holder -> blacklist.add(holder.unwrapKey().orElseThrow().identifier()) + )); + + List candidates = new ArrayList<>(); + registries.lookupOrThrow(Registries.ITEM) + .get(sourceTag) + .ifPresent(entries -> entries.forEach(holder -> { + Identifier id = holder.unwrapKey().orElseThrow().identifier(); + if (!blacklist.contains(id)) { + candidates.add(id); + } + })); + + if (candidates.isEmpty()) return; + Collections.shuffle(candidates, new java.util.Random(random.nextLong())); + + int step = md.step(); + int sum = 0; + for (Identifier candidate : candidates) { + if (sum >= 100) break; + int remaining = 100 - sum; + int maxSteps = remaining / step; + if (maxSteps <= 0) break; + int steps = 1 + random.nextInt(maxSteps); + int weight = steps * step; + if (sum + weight > 100) weight = remaining; + if (weight <= 0) continue; + set.addMineral(new PlanetaryResourceSet.WeightedItemStack(candidate, weight)); + sum += weight; + } + } + + private static void generateFluids(PlanetaryResourceSet set, List recipes, RockyPlanetData rocky) { + boolean isScorched = rocky.temperature() == Temperature.SCORCHED; + for (PlanetResourceRecipe recipe : recipes) { + PlanetResourceRecipe.FluidData fd = recipe.fluidData(); + if (fd != null && !fd.outputFluid().isEmpty()) { + boolean isLava = fd.outputFluid().contains("lava"); + if (isScorched != isLava) continue; + set.addFluid(new PlanetaryResourceSet.WeightedFluidStack( + Identifier.parse(fd.outputFluid()), 100 + )); + } + } + } + + private static void generateGiantItems(PlanetaryResourceSet set, List recipes, RandomSource random) { + for (PlanetResourceRecipe recipe : recipes) { + PlanetResourceRecipe.GiantData gd = recipe.giantData(); + if (gd != null) { + for (PlanetResourceRecipe.WeightedEntry entry : gd.entries()) { + set.addGiantItem(new PlanetaryResourceSet.WeightedItemStack(entry.resourceId(), entry.weight())); + } + } + } + } + + private static void generateGiantFluids(PlanetaryResourceSet set, List recipes, RandomSource random) { + for (PlanetResourceRecipe recipe : recipes) { + PlanetResourceRecipe.GiantData gd = recipe.giantData(); + if (gd != null) { + for (PlanetResourceRecipe.WeightedEntry entry : gd.entries()) { + set.addGiantFluid(new PlanetaryResourceSet.WeightedFluidStack(entry.resourceId(), entry.weight())); + } + } + } + } + + private static boolean isLifeEligible(RockyPlanetData rocky) { + if (rocky.liquidCoverage() == LiquidCoverage.NONE) return false; + if (!rocky.hasAtmosphere()) return false; + if (rocky.temperature() == Temperature.FREEZING) return false; + return rocky.temperature() != Temperature.SCORCHED; + } + + private static int getLifeChance(RockyPlanetData rocky, @Nullable PlanetResourceRecipe biologicalRecipe) { + if (biologicalRecipe != null) { + PlanetResourceRecipe.BiologicalData bd = biologicalRecipe.biologicalData(); + if (bd != null) { + int chance = bd.lifeChances().forTemperature(rocky.temperature()); + if (chance > 0) return chance; + } + } + return switch (rocky.temperature()) { + case COLD, HOT -> 5; + case MILD -> 10; + default -> 0; + }; + } + + private static boolean tryCivilization( + PlanetaryResourceSet set, + @Nullable PlanetResourceRecipe recipe, + RockyPlanetData rocky, + int ageAnvilCount, + RandomSource random + ) { + if (recipe == null) return false; + PlanetResourceRecipe.OfferingData od = recipe.offeringData(); + if (od == null) return false; + if (rocky.liquidCoverage() != LiquidCoverage.MEDIUM) return false; + if (ageAnvilCount < od.ageMin() || ageAnvilCount > od.ageMax()) return false; + if (random.nextInt(100) >= od.civilizationChance()) return false; + + for (PlanetResourceRecipe.WeightedEntry entry : od.entries()) { + Identifier id = entry.resourceId(); + if ("anvilcraft:gem_amulet_random".equals(id.toString())) { + Identifier randomAmulet = pickRandomGemAmulet(random); + if (randomAmulet != null) { + set.addOffering(new PlanetaryResourceSet.WeightedItemStack(randomAmulet, entry.weight())); + } + } else if ("anvilcraft:gem_block_random".equals(id.toString())) { + Identifier randomBlock = pickRandomGemBlock(random); + if (randomBlock != null) { + set.addOffering(new PlanetaryResourceSet.WeightedItemStack(randomBlock, entry.weight())); + } + } else { + set.addOffering(new PlanetaryResourceSet.WeightedItemStack(id, entry.weight())); + } + } + return true; + } + + private static void tryBiologicalLifeConfirmed( + PlanetaryResourceSet set, + @Nullable PlanetResourceRecipe recipe, + RockyPlanetData rocky, + Level level, + RandomSource random + ) { + if (recipe == null) return; + PlanetResourceRecipe.BiologicalData bd = recipe.biologicalData(); + if (bd == null) return; + + boolean isHighCoverage = rocky.liquidCoverage() == LiquidCoverage.HIGH; + + TagKey blacklistTag = TagKey.create(Registries.ITEM, Identifier.parse(bd.dropBlacklistTag())); + Set blacklist = buildItemBlacklist(level.registryAccess(), blacklistTag); + + Map dropFrequencies = new HashMap<>(); + level.registryAccess().lookupOrThrow(Registries.ENTITY_TYPE) + .listElements() + .forEach(holder -> { + EntityType entityType = holder.value(); + var cat = entityType.getCategory(); + boolean matches = isHighCoverage + ? cat == MobCategory.WATER_CREATURE + || cat == MobCategory.WATER_AMBIENT + || cat == MobCategory.UNDERGROUND_WATER_CREATURE + : cat == MobCategory.CREATURE; + if (matches) { + collectEntityDropFrequencies(entityType, level, random, dropFrequencies, blacklist); + } + }); + + if (!dropFrequencies.isEmpty()) { + List> candidates = new ArrayList<>(dropFrequencies.entrySet()); + candidates.removeIf(e -> e.getValue() <= 0); + Collections.shuffle(candidates, new java.util.Random(random.nextLong())); + + final int step = 10; + int sum = 0; + for (Map.Entry candidate : candidates) { + if (sum >= 100) break; + int remaining = 100 - sum; + int maxSteps = remaining / step; + if (maxSteps <= 0) break; + int steps = 1 + random.nextInt(maxSteps); + int weight = steps * step; + if (sum + weight > 100) weight = remaining; + if (weight <= 0) continue; + set.addBiologicalItem(new PlanetaryResourceSet.WeightedItemStack(candidate.getKey(), weight)); + sum += weight; + } + } + + if (rocky.temperature() == Temperature.MILD && !isHighCoverage) { + for (PlanetResourceRecipe.WeightedEntry entry : bd.mildExtraFluids()) { + if (random.nextInt(100) < entry.weight()) { + set.addBiologicalFluid(new PlanetaryResourceSet.WeightedFluidStack(entry.resourceId(), 100)); + } + } + } + } + + private static void tryWasteland( + PlanetaryResourceSet set, + @Nullable PlanetResourceRecipe recipe, + RockyPlanetData rocky, + int ageAnvilCount, + RandomSource random + ) { + if (recipe == null) return; + PlanetResourceRecipe.WastelandData wd = recipe.wastelandData(); + if (wd == null) return; + if (rocky.liquidCoverage() == LiquidCoverage.HIGH) return; + if (ageAnvilCount < wd.ageMin()) return; + if (random.nextInt(100) >= wd.wastelandChance()) return; + + set.setWasteland(); + for (PlanetResourceRecipe.WeightedEntry entry : wd.entries()) { + set.addWastelandItem(new PlanetaryResourceSet.WeightedItemStack(entry.resourceId(), entry.weight())); + } + } + + private static void collectEntityDropFrequencies( + EntityType entityType, + Level level, + RandomSource random, + Map dropFrequencies, + Set blacklist + ) { + if (!(level instanceof ServerLevel serverLevel)) return; + + Entity entity = entityType.create(serverLevel, EntitySpawnReason.COMMAND); + if (!(entity instanceof LivingEntity living)) { + if (entity != null) entity.discard(); + return; + } + + ResourceKey lootTableKey = living.getLootTable().orElse(null); + entity.discard(); + + if (lootTableKey == null) return; + + LootTable lootTable = serverLevel.getServer() + .reloadableRegistries() + .getLootTable(lootTableKey); + + Entity rollEntity = entityType.create(serverLevel, EntitySpawnReason.COMMAND); + if (!(rollEntity instanceof LivingEntity rollLiving)) { + if (rollEntity != null) rollEntity.discard(); + return; + } + + int simulationRolls = 200; + Map counts = new HashMap<>(); + AtomicInteger totalDrops = new AtomicInteger(0); + + for (int i = 0; i < simulationRolls; i++) { + LootParams params = new LootParams.Builder(serverLevel) + .withParameter(LootContextParams.THIS_ENTITY, rollLiving) + .withParameter(LootContextParams.ORIGIN, rollLiving.position()) + .withParameter(LootContextParams.DAMAGE_SOURCE, + rollLiving.damageSources().generic()) + .create(LootContextParamSets.ENTITY); + + lootTable.getRandomItems(params, random.nextLong(), drop -> { + if (drop.isEmpty()) return; + Identifier id = drop.getItem().builtInRegistryHolder().key().identifier(); + if ("minecraft:air".equals(id.toString())) return; + if (blacklist.contains(id)) return; + counts.merge(id, drop.getCount(), Integer::sum); + totalDrops.addAndGet(drop.getCount()); + }); + } + + rollEntity.discard(); + + int total = totalDrops.get(); + if (total > 0) { + for (Map.Entry entry : counts.entrySet()) { + int weight = Math.max(10, (entry.getValue() * 100) / total); + weight = ((weight + 5) / 10) * 10; + dropFrequencies.merge(entry.getKey(), weight, Integer::sum); + } + } + } + + @Nullable + private static Identifier pickRandomGemAmulet(RandomSource random) { + List knownAmulets = List.of( + Identifier.parse("anvilcraft:emerald_amulet"), + Identifier.parse("anvilcraft:topaz_amulet"), + Identifier.parse("anvilcraft:ruby_amulet"), + Identifier.parse("anvilcraft:sapphire_amulet") + ); + return knownAmulets.get(random.nextInt(knownAmulets.size())); + } + + @Nullable + private static Identifier pickRandomGemBlock(RandomSource random) { + List knownBlocks = List.of( + Identifier.parse("minecraft:emerald_block"), + Identifier.parse("anvilcraft:topaz_block"), + Identifier.parse("anvilcraft:ruby_block"), + Identifier.parse("anvilcraft:sapphire_block") + ); + return knownBlocks.get(random.nextInt(knownBlocks.size())); + } + + private static Set buildItemBlacklist( + HolderLookup.Provider registries, + TagKey blacklistTag + ) { + Set blacklist = new HashSet<>(); + registries.lookupOrThrow(Registries.ITEM) + .get(blacklistTag) + .ifPresent(entries -> entries.forEach( + holder -> blacklist.add(holder.unwrapKey().orElseThrow().identifier()) + )); + return blacklist; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceInput.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceInput.java new file mode 100644 index 0000000000..497465c4b2 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceInput.java @@ -0,0 +1,22 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeInput; +import org.jetbrains.annotations.NotNull; + +/** + * Input wrapper for {@link PlanetResourceRecipe#matches}. + * Carries the celestial body data and age anvil count for condition checking. + */ +public record PlanetResourceInput(CelestialBodyData body, int ageAnvilCount) implements RecipeInput { + + @Override + public @NotNull ItemStack getItem(int index) { + return ItemStack.EMPTY; + } + + @Override + public int size() { + return 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceRecipe.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceRecipe.java new file mode 100644 index 0000000000..622260818f --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceRecipe.java @@ -0,0 +1,374 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.PlacementInfo; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeBookCategories; +import net.minecraft.world.item.crafting.RecipeBookCategory; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Optional; + +/** + * Recipe defining what resources a planet produces based on its celestial parameters. + */ +public record PlanetResourceRecipe( + Category category, + Optional mineral, + Optional fluid, + Optional giant, + Optional biological, + Optional offering, + Optional wasteland +) implements Recipe { + + public enum Category { + MINERAL("mineral"), FLUID("fluid"), GIANT_ITEM("giant_item"), GIANT_FLUID("giant_fluid"), BIOLOGICAL("biological"), OFFERING( + "offering"), WASTELAND("wasteland"); + + public static final Codec CODEC = Codec.STRING.xmap(Category::fromName, Category::getSerializedName); + + private final String name; + + Category(String name) { + this.name = name; + } + + public String getSerializedName() { + return name; + } + + public static Category fromName(String name) { + for (Category value : values()) { + if (value.name.equals(name)) return value; + } + throw new IllegalArgumentException("Unknown planet resource category: " + name); + } + } + + public record WeightedEntry(String id, int weight) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + Codec.STRING.fieldOf("id") + .forGetter(WeightedEntry::id), Codec.INT.fieldOf("weight").forGetter(WeightedEntry::weight) + ) + .apply(ins, WeightedEntry::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, + WeightedEntry::id, + ByteBufCodecs.INT, + WeightedEntry::weight, + WeightedEntry::new + ); + + public Identifier resourceId() { + return Identifier.parse(id); + } + } + + public record LifeChances(int cold, int hot, int mild) { + public static final LifeChances DEFAULT = new LifeChances(5, 5, 10); + + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + Codec.INT.optionalFieldOf("cold", 5).forGetter(LifeChances::cold), + Codec.INT.optionalFieldOf("hot", 5).forGetter(LifeChances::hot), + Codec.INT.optionalFieldOf("mild", 10).forGetter(LifeChances::mild) + ).apply(ins, LifeChances::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.INT, + LifeChances::cold, + ByteBufCodecs.INT, + LifeChances::hot, + ByteBufCodecs.INT, + LifeChances::mild, + LifeChances::new + ); + + public int forTemperature(Temperature temp) { + return switch (temp) { + case COLD -> cold; + case HOT -> hot; + case MILD -> mild; + default -> 0; + }; + } + } + + public record MineralData(String sourceTag, String blacklistTag, int step) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + Codec.STRING.optionalFieldOf("source_tag", "c:raw_materials").forGetter(MineralData::sourceTag), + Codec.STRING.optionalFieldOf("blacklist_tag", "anvilcraft:non_planetary_minerals").forGetter(MineralData::blacklistTag), + Codec.INT.optionalFieldOf("step", 10).forGetter(MineralData::step) + ).apply(ins, MineralData::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, + MineralData::sourceTag, + ByteBufCodecs.STRING_UTF8, + MineralData::blacklistTag, + ByteBufCodecs.INT, + MineralData::step, + MineralData::new + ); + } + + public record FluidData(String planetType, String temperature, String liquidMin, String outputFluid) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + Codec.STRING.optionalFieldOf("planet_type", "rocky_planet").forGetter(FluidData::planetType), + Codec.STRING.optionalFieldOf("temperature", "").forGetter(FluidData::temperature), + Codec.STRING.optionalFieldOf("liquid_min", "low").forGetter(FluidData::liquidMin), + Codec.STRING.fieldOf("output_fluid").forGetter(FluidData::outputFluid) + ).apply(ins, FluidData::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, + FluidData::planetType, + ByteBufCodecs.STRING_UTF8, + FluidData::temperature, + ByteBufCodecs.STRING_UTF8, + FluidData::liquidMin, + ByteBufCodecs.STRING_UTF8, + FluidData::outputFluid, + FluidData::new + ); + } + + public record GiantData(List entries, String pressureType) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + WeightedEntry.CODEC.listOf() + .fieldOf("entries") + .forGetter(GiantData::entries), + Codec.STRING.fieldOf("pressure_type").forGetter(GiantData::pressureType) + ).apply(ins, GiantData::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()), + GiantData::entries, + ByteBufCodecs.STRING_UTF8, + GiantData::pressureType, + GiantData::new + ); + } + + public record BiologicalData( + LifeChances lifeChances, String landEntityTag, String aquaticEntityTag, String dropBlacklistTag, List mildExtraFluids + ) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + LifeChances.CODEC.optionalFieldOf("life_chances", LifeChances.DEFAULT).forGetter(BiologicalData::lifeChances), + Codec.STRING.optionalFieldOf("land_entity_tag", "anvilcraft:planetary_land_animals").forGetter(BiologicalData::landEntityTag), + Codec.STRING.optionalFieldOf("aquatic_entity_tag", "anvilcraft:planetary_aquatic_animals") + .forGetter(BiologicalData::aquaticEntityTag), + Codec.STRING.optionalFieldOf("drop_blacklist_tag", "anvilcraft:non_planetary_mob_drops") + .forGetter(BiologicalData::dropBlacklistTag), + WeightedEntry.CODEC.listOf().optionalFieldOf("mild_extra_fluids", List.of()).forGetter(BiologicalData::mildExtraFluids) + ).apply(ins, BiologicalData::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + LifeChances.STREAM_CODEC, + BiologicalData::lifeChances, + ByteBufCodecs.STRING_UTF8, + BiologicalData::landEntityTag, + ByteBufCodecs.STRING_UTF8, + BiologicalData::aquaticEntityTag, + ByteBufCodecs.STRING_UTF8, + BiologicalData::dropBlacklistTag, + WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()), + BiologicalData::mildExtraFluids, + BiologicalData::new + ); + } + + public record OfferingData( + List entries, int civilizationChance, int ageMin, int ageMax + ) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + WeightedEntry.CODEC.listOf().fieldOf("entries").forGetter(OfferingData::entries), + Codec.INT.optionalFieldOf("civilization_chance", 50).forGetter(OfferingData::civilizationChance), + Codec.INT.optionalFieldOf("age_min", 32).forGetter(OfferingData::ageMin), + Codec.INT.optionalFieldOf("age_max", 43).forGetter(OfferingData::ageMax) + ).apply(ins, OfferingData::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()), + OfferingData::entries, + ByteBufCodecs.INT, + OfferingData::civilizationChance, + ByteBufCodecs.INT, + OfferingData::ageMin, + ByteBufCodecs.INT, + OfferingData::ageMax, + OfferingData::new + ); + } + + public record WastelandData( + List entries, int ageMin, int wastelandChance + ) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + WeightedEntry.CODEC.listOf().fieldOf("entries").forGetter(WastelandData::entries), + Codec.INT.optionalFieldOf("age_min", 35).forGetter(WastelandData::ageMin), + Codec.INT.optionalFieldOf("wasteland_chance", 10).forGetter(WastelandData::wastelandChance) + ).apply(ins, WastelandData::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()), + WastelandData::entries, + ByteBufCodecs.INT, + WastelandData::ageMin, + ByteBufCodecs.INT, + WastelandData::wastelandChance, + WastelandData::new + ); + } + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( + Category.CODEC.fieldOf("category").forGetter(PlanetResourceRecipe::category), + MineralData.CODEC.optionalFieldOf("mineral").forGetter(PlanetResourceRecipe::mineral), + FluidData.CODEC.optionalFieldOf("fluid").forGetter(PlanetResourceRecipe::fluid), + GiantData.CODEC.optionalFieldOf("giant").forGetter(PlanetResourceRecipe::giant), + BiologicalData.CODEC.optionalFieldOf("biological").forGetter(PlanetResourceRecipe::biological), + OfferingData.CODEC.optionalFieldOf("offering").forGetter(PlanetResourceRecipe::offering), + WastelandData.CODEC.optionalFieldOf("wasteland").forGetter(PlanetResourceRecipe::wasteland) + ).apply(ins, PlanetResourceRecipe::new)); + + public static final StreamCodec STREAM_CODEC = new StreamCodec<>() { + @Override + public @NotNull PlanetResourceRecipe decode(RegistryFriendlyByteBuf buf) { + Category category = Category.fromName(buf.readUtf()); + Optional mineral = ByteBufCodecs.optional(MineralData.STREAM_CODEC).decode(buf); + Optional fluid = ByteBufCodecs.optional(FluidData.STREAM_CODEC).decode(buf); + Optional giant = ByteBufCodecs.optional(GiantData.STREAM_CODEC).decode(buf); + Optional biological = ByteBufCodecs.optional(BiologicalData.STREAM_CODEC).decode(buf); + Optional offering = ByteBufCodecs.optional(OfferingData.STREAM_CODEC).decode(buf); + Optional wasteland = ByteBufCodecs.optional(WastelandData.STREAM_CODEC).decode(buf); + return new PlanetResourceRecipe(category, mineral, fluid, giant, biological, offering, wasteland); + } + + @Override + public void encode(RegistryFriendlyByteBuf buf, PlanetResourceRecipe recipe) { + buf.writeUtf(recipe.category().getSerializedName()); + ByteBufCodecs.optional(MineralData.STREAM_CODEC).encode(buf, recipe.mineral()); + ByteBufCodecs.optional(FluidData.STREAM_CODEC).encode(buf, recipe.fluid()); + ByteBufCodecs.optional(GiantData.STREAM_CODEC).encode(buf, recipe.giant()); + ByteBufCodecs.optional(BiologicalData.STREAM_CODEC).encode(buf, recipe.biological()); + ByteBufCodecs.optional(OfferingData.STREAM_CODEC).encode(buf, recipe.offering()); + ByteBufCodecs.optional(WastelandData.STREAM_CODEC).encode(buf, recipe.wasteland()); + } + }; + + public static final RecipeSerializer SERIALIZER = new RecipeSerializer<>( + CODEC, STREAM_CODEC + ); + + @Override + public boolean matches(PlanetResourceInput input, @NotNull Level level) { + CelestialBodyData body = input.body(); + return switch (category) { + case MINERAL -> body instanceof RockyPlanetData; + case FLUID -> { + if (!(body instanceof RockyPlanetData rocky)) yield false; + FluidData fd = fluid.orElse(null); + if (fd == null) yield false; + if (!fd.planetType.isEmpty() && !fd.planetType.equals(body.type().getSerializedName())) { + yield false; + } + if (!fd.temperature.isEmpty() && !fd.temperature.equals(rocky.temperature().getSerializedName())) { + yield false; + } + if (!fd.liquidMin.isEmpty()) { + LiquidCoverage min = LiquidCoverage.fromName(fd.liquidMin); + if (rocky.liquidCoverage().ordinal() < min.ordinal()) yield false; + } + yield rocky.liquidCoverage() != LiquidCoverage.NONE; + } + case GIANT_ITEM, GIANT_FLUID -> { + if (!(body instanceof GiantPlanetData giantBody)) yield false; + GiantData gd = this.giant().orElse(null); + if (gd == null) yield false; + yield gd.pressureType.isEmpty() || gd.pressureType.equals(giantBody.pressureType().getSerializedName()); + } + case BIOLOGICAL -> body instanceof RockyPlanetData; + case OFFERING -> body instanceof RockyPlanetData; + case WASTELAND -> body instanceof RockyPlanetData; + }; + } + + @Deprecated + @Override + public @NotNull ItemStack assemble(@NotNull PlanetResourceInput input) { + return Items.AIR.getDefaultInstance(); + } + + @Override + public @NotNull RecipeType getType() { + return ModRecipeTypes.PLANET_RESOURCE.get(); + } + + @Override + public PlacementInfo placementInfo() { + return PlacementInfo.NOT_PLACEABLE; + } + + @Override + public RecipeBookCategory recipeBookCategory() { + return RecipeBookCategories.CRAFTING_MISC; + } + + @Override + public @NotNull RecipeSerializer getSerializer() { + return SERIALIZER; + } + + @Override + public boolean isSpecial() { + return true; + } + + @Override + public boolean showNotification() { + return false; + } + + @Override + public @NotNull String group() { + return "planet_resource"; + } + + public MineralData mineralData() { + return mineral.orElse(null); + } + + public FluidData fluidData() { + return fluid.orElse(null); + } + + public GiantData giantData() { + return giant.orElse(null); + } + + public BiologicalData biologicalData() { + return biological.orElse(null); + } + + public OfferingData offeringData() { + return offering.orElse(null); + } + + public WastelandData wastelandData() { + return wasteland.orElse(null); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetaryResourceSet.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetaryResourceSet.java new file mode 100644 index 0000000000..b92220ef72 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetaryResourceSet.java @@ -0,0 +1,235 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import lombok.Getter; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.Identifier; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Container for all resources generated for a celestial body. + * Stored alongside {@link CelestialBodyData} in the block entity NBT. + */ +public class PlanetaryResourceSet { + + /** + * A weighted item entry — item identifier with its percentage weight. + */ + public record WeightedItemStack(Identifier itemId, int weight) { + public CompoundTag toTag() { + CompoundTag tag = new CompoundTag(); + tag.putString("id", itemId.toString()); + tag.putInt("weight", weight); + return tag; + } + + public static WeightedItemStack fromTag(CompoundTag tag) { + Identifier id = Identifier.parse(tag.getStringOr("id", "minecraft:air")); + int weight = tag.getIntOr("weight", 0); + return new WeightedItemStack(id, weight); + } + } + + /** + * A weighted fluid entry — fluid identifier with its percentage weight. + */ + public record WeightedFluidStack(Identifier fluidId, int weight) { + public CompoundTag toTag() { + CompoundTag tag = new CompoundTag(); + tag.putString("id", fluidId.toString()); + tag.putInt("weight", weight); + return tag; + } + + public static WeightedFluidStack fromTag(CompoundTag tag) { + Identifier id = Identifier.parse(tag.getStringOr("id", "minecraft:air")); + int weight = tag.getIntOr("weight", 0); + return new WeightedFluidStack(id, weight); + } + } + + // === Fields === + + private final List minerals = new ArrayList<>(); + private final List fluids = new ArrayList<>(); + private final List giantItems = new ArrayList<>(); + private final List giantFluids = new ArrayList<>(); + private final List biologicalItems = new ArrayList<>(); + private final List biologicalFluids = new ArrayList<>(); + private final List offerings = new ArrayList<>(); + private final List wastelandItems = new ArrayList<>(); + private boolean hasCivilization = false; + @Getter + private boolean isWasteland = false; + + // === Getters === + + public List getMinerals() { + return Collections.unmodifiableList(minerals); + } + + public List getFluids() { + return Collections.unmodifiableList(fluids); + } + + public List getGiantItems() { + return Collections.unmodifiableList(giantItems); + } + + public List getGiantFluids() { + return Collections.unmodifiableList(giantFluids); + } + + public List getBiologicalItems() { + return Collections.unmodifiableList(biologicalItems); + } + + public List getBiologicalFluids() { + return Collections.unmodifiableList(biologicalFluids); + } + + public List getOfferings() { + return Collections.unmodifiableList(offerings); + } + + public List getWastelandItems() { + return Collections.unmodifiableList(wastelandItems); + } + + public boolean hasCivilization() { + return hasCivilization; + } + + public boolean isEmpty() { + return minerals.isEmpty() + && fluids.isEmpty() + && giantItems.isEmpty() + && giantFluids.isEmpty() + && biologicalItems.isEmpty() + && biologicalFluids.isEmpty() + && offerings.isEmpty() + && wastelandItems.isEmpty(); + } + + // === Mutators (package-private, for PlanetResourceGenerator) === + + void addMineral(WeightedItemStack entry) { + minerals.add(entry); + } + + void addFluid(WeightedFluidStack entry) { + fluids.add(entry); + } + + void addGiantItem(WeightedItemStack entry) { + giantItems.add(entry); + } + + void addGiantFluid(WeightedFluidStack entry) { + giantFluids.add(entry); + } + + void addBiologicalItem(WeightedItemStack entry) { + biologicalItems.add(entry); + } + + void addBiologicalFluid(WeightedFluidStack entry) { + biologicalFluids.add(entry); + } + + void addOffering(WeightedItemStack entry) { + offerings.add(entry); + } + + void addWastelandItem(WeightedItemStack entry) { + wastelandItems.add(entry); + } + + void setHasCivilization() { + this.hasCivilization = true; + } + + void setWasteland() { + isWasteland = true; + } + + // === NBT Serialization === + + public CompoundTag toTag() { + CompoundTag tag = new CompoundTag(); + if (!minerals.isEmpty()) { + tag.put("minerals", writeItemList(minerals)); + } + if (!fluids.isEmpty()) { + tag.put("fluids", writeFluidList(fluids)); + } + if (!giantItems.isEmpty()) { + tag.put("giantItems", writeItemList(giantItems)); + } + if (!giantFluids.isEmpty()) { + tag.put("giantFluids", writeFluidList(giantFluids)); + } + if (!biologicalItems.isEmpty()) { + tag.put("biologicalItems", writeItemList(biologicalItems)); + } + if (!biologicalFluids.isEmpty()) { + tag.put("biologicalFluids", writeFluidList(biologicalFluids)); + } + if (!offerings.isEmpty()) { + tag.put("offerings", writeItemList(offerings)); + } + if (!wastelandItems.isEmpty()) { + tag.put("wastelandItems", writeItemList(wastelandItems)); + } + tag.putBoolean("hasCivilization", hasCivilization); + tag.putBoolean("isWasteland", isWasteland); + return tag; + } + + public static PlanetaryResourceSet fromTag(CompoundTag tag) { + PlanetaryResourceSet set = new PlanetaryResourceSet(); + tag.getList("minerals").ifPresent(listTag -> readItemList(listTag, set.minerals)); + tag.getList("fluids").ifPresent(listTag -> readFluidList(listTag, set.fluids)); + tag.getList("giantItems").ifPresent(listTag -> readItemList(listTag, set.giantItems)); + tag.getList("giantFluids").ifPresent(listTag -> readFluidList(listTag, set.giantFluids)); + tag.getList("biologicalItems").ifPresent(listTag -> readItemList(listTag, set.biologicalItems)); + tag.getList("biologicalFluids").ifPresent(listTag -> readFluidList(listTag, set.biologicalFluids)); + tag.getList("offerings").ifPresent(listTag -> readItemList(listTag, set.offerings)); + tag.getList("wastelandItems").ifPresent(listTag -> readItemList(listTag, set.wastelandItems)); + set.hasCivilization = tag.getBooleanOr("hasCivilization", false); + set.isWasteland = tag.getBooleanOr("isWasteland", false); + return set; + } + + private static ListTag writeItemList(List list) { + ListTag listTag = new ListTag(); + for (WeightedItemStack entry : list) { + listTag.add(entry.toTag()); + } + return listTag; + } + + private static ListTag writeFluidList(List list) { + ListTag listTag = new ListTag(); + for (WeightedFluidStack entry : list) { + listTag.add(entry.toTag()); + } + return listTag; + } + + private static void readItemList(ListTag listTag, List target) { + for (Tag t : listTag) { + target.add(WeightedItemStack.fromTag((CompoundTag) t)); + } + } + + private static void readFluidList(ListTag listTag, List target) { + for (Tag t : listTag) { + target.add(WeightedFluidStack.fromTag((CompoundTag) t)); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PressureType.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PressureType.java new file mode 100644 index 0000000000..2a611d3e2c --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PressureType.java @@ -0,0 +1,29 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.util.StringRepresentable; +import org.jetbrains.annotations.NotNull; + +public enum PressureType implements StringRepresentable { + GAS("gas"), + ICE("ice"); + + private final String name; + + PressureType(String name) { + this.name = name; + } + + @Override + public @NotNull String getSerializedName() { + return name; + } + + public static PressureType fromName(String name) { + for (PressureType value : values()) { + if (value.name.equals(name)) { + return value; + } + } + return GAS; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/RingType.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/RingType.java new file mode 100644 index 0000000000..f16a5eaf3a --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/RingType.java @@ -0,0 +1,30 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.util.StringRepresentable; +import org.jetbrains.annotations.NotNull; + +public enum RingType implements StringRepresentable { + NONE("none"), + WEAK("weak"), + STRONG("strong"); + + private final String name; + + RingType(String name) { + this.name = name; + } + + @Override + public @NotNull String getSerializedName() { + return name; + } + + public static RingType fromName(String name) { + for (RingType value : values()) { + if (value.name.equals(name)) { + return value; + } + } + return NONE; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/RockyPlanetData.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/RockyPlanetData.java new file mode 100644 index 0000000000..1339665538 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/RockyPlanetData.java @@ -0,0 +1,59 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.nbt.CompoundTag; + +public record RockyPlanetData( + CelestialBodyClass bodyClass, + boolean hasAtmosphere, + LiquidCoverage liquidCoverage, + Temperature temperature, + RingType ringType, + int size, + int paletteBaseRow, + int paletteOverlayRow, + float axialTilt, + int rotationSpeed, + int magneticFieldStrength +) implements CelestialBodyData { + + @Override + public CelestialBodyType type() { + return CelestialBodyType.ROCKY_PLANET; + } + + @Override + public CompoundTag toTag() { + CompoundTag tag = new CompoundTag(); + tag.putString("bodyType", type().getSerializedName()); + tag.putString("bodyClass", bodyClass.name()); + tag.putBoolean("hasAtmosphere", hasAtmosphere); + tag.putString("liquidCoverage", liquidCoverage.getSerializedName()); + tag.putString("temperature", temperature.getSerializedName()); + tag.putString("ringType", ringType.getSerializedName()); + tag.putInt("size", size); + tag.putInt("paletteBaseRow", paletteBaseRow); + tag.putInt("paletteOverlayRow", paletteOverlayRow); + tag.putFloat("axialTilt", axialTilt); + tag.putInt("rotationSpeed", rotationSpeed); + tag.putInt("magneticFieldStrength", magneticFieldStrength); + return tag; + } + + public static RockyPlanetData fromTag(CompoundTag tag) { + CelestialBodyClass cls = CelestialBodyData.readClass(tag, CelestialBodyType.ROCKY_PLANET); + int mag = tag.getIntOr("magneticFieldStrength", 0); + return new RockyPlanetData( + cls, + tag.getBooleanOr("hasAtmosphere", false), + LiquidCoverage.fromName(tag.getStringOr("liquidCoverage", "none")), + Temperature.fromName(tag.getStringOr("temperature", "mild")), + RingType.fromName(tag.getStringOr("ringType", "none")), + tag.getIntOr("size", 0), + tag.getIntOr("paletteBaseRow", 0), + tag.getIntOr("paletteOverlayRow", 0), + tag.getFloatOr("axialTilt", 0f), + tag.getIntOr("rotationSpeed", 0), + mag + ); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyData.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyData.java new file mode 100644 index 0000000000..d3a224ce56 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyData.java @@ -0,0 +1,124 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import dev.dubhe.anvilcraft.AnvilCraft; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.Identifier; +import org.jetbrains.annotations.Nullable; + +/** + * Celestial body data for hidden (special) bodies discovered via seed items. + * These bodies bypass the normal three-step diagram matching and texture baking + * pipeline — they use fixed model textures directly. + * + *

+ * All properties are cached at creation time from a + * {@link SpecialCelestialBodyRecipe}, so no recipe-manager lookup is needed + * during rendering or NBT deserialization. + *

+ */ +@SuppressWarnings("checkstyle:MissingJavadocMethod") +public record SpecialCelestialBodyData( + String recipeId, + String name, + int size, + float axialTilt, + int rotationSpeed, + int magneticFieldStrength, + @Nullable Temperature temperature, + boolean hasAtmosphere, + @Nullable LiquidCoverage liquidCoverage, + boolean isErrorPlanet, + boolean needsCustomModel, + String textureName +) implements CelestialBodyData { + + /** + * Create from a recipe and its resource location ID. + */ + public static SpecialCelestialBodyData fromRecipe(SpecialCelestialBodyRecipe recipe, String recipeId) { + return new SpecialCelestialBodyData( + recipeId, + recipe.name(), + recipe.space(), + recipe.axialTilt(), + recipe.rotationSpeed(), + recipe.magneticFieldStrength(), + recipe.temperature(), + recipe.hasAtmosphere(), + recipe.getLiquidCoverage(), + recipe.isErrorPlanet(), + recipe.needsCustomModel(), + recipe.textureName() + ); + } + + @Override + public CelestialBodyType type() { + return CelestialBodyType.SPECIAL; + } + + @Override + public CelestialBodyClass bodyClass() { + return CelestialBodyClass.LARGE_MOON; + } + + @Override + public RingType ringType() { + return RingType.NONE; + } + + /** + * Get the model resource identifier for this special body. + */ + public Identifier getModelLocation() { + return AnvilCraft.of("block/celestial_body/" + textureName); + } + + @Override + public CompoundTag toTag() { + CompoundTag tag = new CompoundTag(); + tag.putString("bodyType", CelestialBodyType.SPECIAL.getSerializedName()); + tag.putString("recipeId", recipeId); + tag.putString("name", name); + tag.putInt("size", size); + tag.putFloat("axialTilt", axialTilt); + tag.putInt("rotationSpeed", rotationSpeed); + tag.putInt("magneticFieldStrength", magneticFieldStrength); + tag.putBoolean("hasAtmosphere", hasAtmosphere); + tag.putBoolean("isErrorPlanet", isErrorPlanet); + tag.putBoolean("needsCustomModel", needsCustomModel); + tag.putString("textureName", textureName); + if (temperature != null) { + tag.putString("temperature", temperature.getSerializedName()); + } + if (liquidCoverage != null) { + tag.putString("liquidCoverage", liquidCoverage.getSerializedName()); + } + return tag; + } + + /** + * Deserialize a SpecialCelestialBodyData from NBT. + */ + public static SpecialCelestialBodyData fromTag(CompoundTag tag) { + String recipeId = tag.getStringOr("recipeId", ""); + String name = tag.getStringOr("name", ""); + int size = tag.getIntOr("size", 0); + float axialTilt = tag.getFloatOr("axialTilt", 0f); + int rotationSpeed = tag.getIntOr("rotationSpeed", 0); + int magneticFieldStrength = tag.getIntOr("magneticFieldStrength", 0); + boolean hasAtmosphere = tag.getBooleanOr("hasAtmosphere", false); + boolean isErrorPlanet = tag.getBooleanOr("isErrorPlanet", false); + boolean needsCustomModel = tag.getBooleanOr("needsCustomModel", false); + String textureName = tag.getStringOr("textureName", ""); + String tempStr = tag.getStringOr("temperature", ""); + Temperature temperature = !tempStr.isEmpty() ? Temperature.fromName(tempStr) : null; + String lcStr = tag.getStringOr("liquidCoverage", ""); + LiquidCoverage liquidCoverage = !lcStr.isEmpty() ? LiquidCoverage.fromName(lcStr) : null; + return new SpecialCelestialBodyData( + recipeId, name, size, axialTilt, rotationSpeed, magneticFieldStrength, + temperature, hasAtmosphere, liquidCoverage, + isErrorPlanet, needsCustomModel, textureName + ); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyInput.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyInput.java new file mode 100644 index 0000000000..6d8136009a --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyInput.java @@ -0,0 +1,22 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeInput; +import org.jetbrains.annotations.NotNull; + +/** + * Input wrapper for {@link SpecialCelestialBodyRecipe#matches}. + * Carries no actual items — matching is done externally via anvil counts and seed item. + */ +public record SpecialCelestialBodyInput() implements RecipeInput { + + @Override + public @NotNull ItemStack getItem(int index) { + return ItemStack.EMPTY; + } + + @Override + public int size() { + return 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyRecipe.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyRecipe.java new file mode 100644 index 0000000000..6be77b8dfa --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/SpecialCelestialBodyRecipe.java @@ -0,0 +1,325 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; +import io.netty.buffer.ByteBuf; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.PlacementInfo; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeBookCategories; +import net.minecraft.world.item.crafting.RecipeBookCategory; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.Optional; +import java.util.Random; + +/** + * Recipe defining a hidden (special) celestial body discoverable via seed items + * in the Celestial Forging Anvil. + */ +@SuppressWarnings("checkstyle:LineLength") +public record SpecialCelestialBodyRecipe( + String name, + String textureName, + boolean needsCustomModel, + int time, + int space, + int mass, + int energy, + boolean hasAtmosphere, + Optional liquidCoverage, + int magneticFieldStrength, + int rotationSpeed, + float axialTilt, + List seedItems, + List minerals, + List fluids, + List biologicalItems, + List offerings, + List templeBlessings, + List templePunishments +) implements Recipe { + + public record WeightedEntry(String id, int weight) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + Codec.STRING.fieldOf("id").forGetter(WeightedEntry::id), + Codec.INT.fieldOf("weight").forGetter(WeightedEntry::weight) + ).apply(ins, WeightedEntry::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, + WeightedEntry::id, + ByteBufCodecs.INT, + WeightedEntry::weight, + WeightedEntry::new + ); + + public Identifier resourceId() { + return Identifier.parse(id); + } + } + + public record DemandEntry(String id, int count) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + Codec.STRING.fieldOf("id").forGetter(DemandEntry::id), + Codec.INT.fieldOf("count").forGetter(DemandEntry::count) + ).apply(ins, DemandEntry::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, + DemandEntry::id, + ByteBufCodecs.INT, + DemandEntry::count, + DemandEntry::new + ); + } + + private static final Codec LIQUID_COVERAGE_CODEC = + Codec.STRING.xmap(LiquidCoverage::fromName, LiquidCoverage::getSerializedName); + + private static final StreamCodec LIQUID_COVERAGE_STREAM = + ByteBufCodecs.STRING_UTF8.map(LiquidCoverage::fromName, LiquidCoverage::getSerializedName); + + private record ResourceFields( + List minerals, + List fluids, + List biologicalItems, + List offerings, + List templeBlessings, + List templePunishments + ) { + static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + WeightedEntry.CODEC.listOf().optionalFieldOf("minerals", List.of()).forGetter(ResourceFields::minerals), + WeightedEntry.CODEC.listOf().optionalFieldOf("fluids", List.of()).forGetter(ResourceFields::fluids), + WeightedEntry.CODEC.listOf().optionalFieldOf("biological_items", List.of()).forGetter(ResourceFields::biologicalItems), + WeightedEntry.CODEC.listOf().optionalFieldOf("offerings", List.of()).forGetter(ResourceFields::offerings), + DemandEntry.CODEC.listOf().optionalFieldOf("temple_blessings", List.of()).forGetter(ResourceFields::templeBlessings), + DemandEntry.CODEC.listOf().optionalFieldOf("temple_punishments", List.of()).forGetter(ResourceFields::templePunishments) + ).apply(ins, ResourceFields::new)); + } + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( + Codec.STRING.fieldOf("name").forGetter(SpecialCelestialBodyRecipe::name), + Codec.INT.fieldOf("time").forGetter(SpecialCelestialBodyRecipe::time), + Codec.INT.fieldOf("space").forGetter(SpecialCelestialBodyRecipe::space), + Codec.INT.fieldOf("mass").forGetter(SpecialCelestialBodyRecipe::mass), + Codec.INT.fieldOf("energy").forGetter(SpecialCelestialBodyRecipe::energy), + Codec.STRING.fieldOf("texture").forGetter(SpecialCelestialBodyRecipe::textureName), + Codec.BOOL.fieldOf("has_atmosphere").forGetter(SpecialCelestialBodyRecipe::hasAtmosphere), + LIQUID_COVERAGE_CODEC.optionalFieldOf("liquid_coverage").forGetter(SpecialCelestialBodyRecipe::liquidCoverage), + Codec.INT.fieldOf("magnetic_field").forGetter(SpecialCelestialBodyRecipe::magneticFieldStrength), + Codec.INT.fieldOf("rotation_speed").forGetter(SpecialCelestialBodyRecipe::rotationSpeed), + Codec.FLOAT.fieldOf("axial_tilt").forGetter(SpecialCelestialBodyRecipe::axialTilt), + Identifier.CODEC.listOf().fieldOf("seed_items").forGetter(SpecialCelestialBodyRecipe::seedItems), + Codec.BOOL.optionalFieldOf("needs_custom_model", false).forGetter(SpecialCelestialBodyRecipe::needsCustomModel), + ResourceFields.CODEC.fieldOf("resources").forGetter( + r -> new ResourceFields(r.minerals, r.fluids, r.biologicalItems, + r.offerings, r.templeBlessings, r.templePunishments) + ) + ).apply(ins, SpecialCelestialBodyRecipe::fromCodec)); + + @SuppressWarnings("unused") + private static SpecialCelestialBodyRecipe fromCodec( + String name, int time, int space, int mass, int energy, + String texture, boolean hasAtmosphere, + Optional liquidCoverage, int magneticField, int rotationSpeed, float axialTilt, + List seedItems, boolean needsCustomModel, + ResourceFields res + ) { + return new SpecialCelestialBodyRecipe( + name, texture, needsCustomModel, + time, space, mass, energy, + hasAtmosphere, liquidCoverage, + magneticField, rotationSpeed, axialTilt, + seedItems, + res.minerals, res.fluids, res.biologicalItems, + res.offerings, res.templeBlessings, res.templePunishments + ); + } + + public static final StreamCodec STREAM_CODEC = new StreamCodec<>() { + @Override + public @NotNull SpecialCelestialBodyRecipe decode(RegistryFriendlyByteBuf buf) { + String name = buf.readUtf(); + int time = buf.readInt(); + int space = buf.readInt(); + int mass = buf.readInt(); + int energy = buf.readInt(); + String textureName = buf.readUtf(); + boolean hasAtmosphere = buf.readBoolean(); + Optional liquidCoverage = ByteBufCodecs.optional(LIQUID_COVERAGE_STREAM).decode(buf); + int magneticFieldStrength = buf.readInt(); + int rotationSpeed = buf.readInt(); + float axialTilt = buf.readFloat(); + List seedItems = Identifier.STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buf); + boolean needsCustomModel = buf.readBoolean(); + List minerals = WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buf); + List fluids = WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buf); + List biologicalItems = WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buf); + List offerings = WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buf); + List templeBlessings = DemandEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buf); + List templePunishments = DemandEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buf); + return new SpecialCelestialBodyRecipe( + name, textureName, needsCustomModel, + time, space, mass, energy, + hasAtmosphere, liquidCoverage, + magneticFieldStrength, rotationSpeed, axialTilt, + seedItems, + minerals, fluids, biologicalItems, + offerings, templeBlessings, templePunishments + ); + } + + @Override + public void encode(RegistryFriendlyByteBuf buf, SpecialCelestialBodyRecipe r) { + buf.writeUtf(r.name()); + buf.writeInt(r.time()); + buf.writeInt(r.space()); + buf.writeInt(r.mass()); + buf.writeInt(r.energy()); + buf.writeUtf(r.textureName()); + buf.writeBoolean(r.hasAtmosphere()); + ByteBufCodecs.optional(LIQUID_COVERAGE_STREAM).encode(buf, r.liquidCoverage()); + buf.writeInt(r.magneticFieldStrength()); + buf.writeInt(r.rotationSpeed()); + buf.writeFloat(r.axialTilt()); + Identifier.STREAM_CODEC.apply(ByteBufCodecs.list()).encode(buf, r.seedItems()); + buf.writeBoolean(r.needsCustomModel()); + WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).encode(buf, r.minerals()); + WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).encode(buf, r.fluids()); + WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).encode(buf, r.biologicalItems()); + WeightedEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).encode(buf, r.offerings()); + DemandEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).encode(buf, r.templeBlessings()); + DemandEntry.STREAM_CODEC.apply(ByteBufCodecs.list()).encode(buf, r.templePunishments()); + } + }; + + public static final RecipeSerializer SERIALIZER = new RecipeSerializer<>( + CODEC, STREAM_CODEC + ); + + @NotNull + public Temperature temperature() { + return energyToTemperature(energy); + } + + private static Temperature energyToTemperature(int energy) { + if (energy <= 12) return Temperature.FREEZING; + if (energy <= 15) return Temperature.COLD; + if (energy == 16) return Temperature.MILD; + if (energy <= 22) return Temperature.HOT; + return Temperature.SCORCHED; + } + + public boolean isErrorPlanet() { + return name.equals("error_planet"); + } + + public boolean hasCivilization() { + return !offerings.isEmpty(); + } + + public Item getEffectiveSeedItem(long worldSeed) { + if (seedItems.isEmpty()) return Items.AIR; + if (seedItems.size() == 1) { + return resolveItem(seedItems.getFirst()); + } + Random random = new Random(worldSeed * 31L + name.hashCode() * 7919L); + return resolveItem(seedItems.get(random.nextInt(seedItems.size()))); + } + + public boolean isEffectiveSeedItem(Item consumedItem, long worldSeed) { + Item effective = getEffectiveSeedItem(worldSeed); + return consumedItem == effective; + } + + public PlanetaryResourceSet generateResources() { + PlanetaryResourceSet r = new PlanetaryResourceSet(); + for (WeightedEntry entry : minerals) { + r.addMineral(new PlanetaryResourceSet.WeightedItemStack(entry.resourceId(), entry.weight())); + } + for (WeightedEntry entry : fluids) { + r.addFluid(new PlanetaryResourceSet.WeightedFluidStack(entry.resourceId(), entry.weight())); + } + for (WeightedEntry entry : biologicalItems) { + r.addBiologicalItem(new PlanetaryResourceSet.WeightedItemStack(entry.resourceId(), entry.weight())); + } + for (WeightedEntry entry : offerings) { + r.addOffering(new PlanetaryResourceSet.WeightedItemStack(entry.resourceId(), entry.weight())); + } + if (hasCivilization()) { + r.setHasCivilization(); + } + return r; + } + + @Nullable + public LiquidCoverage getLiquidCoverage() { + return liquidCoverage.orElse(null); + } + + @Override + public boolean matches(@NotNull SpecialCelestialBodyInput input, @NotNull Level level) { + return true; + } + + @Deprecated + @Override + public @NotNull ItemStack assemble(@NotNull SpecialCelestialBodyInput input) { + return Items.AIR.getDefaultInstance(); + } + + @Override + public @NotNull RecipeType getType() { + return ModRecipeTypes.SPECIAL_CELESTIAL_BODY.get(); + } + + @Override + public PlacementInfo placementInfo() { + return PlacementInfo.NOT_PLACEABLE; + } + + @Override + public RecipeBookCategory recipeBookCategory() { + return RecipeBookCategories.CRAFTING_MISC; + } + + @Override + public @NotNull RecipeSerializer getSerializer() { + return SERIALIZER; + } + + @Override + public boolean isSpecial() { + return true; + } + + @Override + public boolean showNotification() { + return false; + } + + @Override + public @NotNull String group() { + return "special_celestial_body"; + } + + private static Item resolveItem(Identifier id) { + return BuiltInRegistries.ITEM.get(id).map(Holder.Reference::value).orElse(Items.AIR); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/StarData.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/StarData.java new file mode 100644 index 0000000000..fe691db138 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/StarData.java @@ -0,0 +1,79 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.core.UUIDUtil; +import net.minecraft.nbt.CompoundTag; +import org.jetbrains.annotations.Nullable; + +import java.util.UUID; + +public record StarData( + CelestialBodyClass bodyClass, + int size, + int colorR, + int colorG, + int colorB, + float axialTilt, + int rotationSpeed, + int magneticFieldStrength, + int energy, + @Nullable UUID bodyUuid +) implements CelestialBodyData { + + @Override + public CelestialBodyType type() { + return CelestialBodyType.STAR; + } + + @Override + public RingType ringType() { + return RingType.NONE; + } + + /** + * Create a copy with a new body UUID, preserving all other fields. + */ + public StarData withBodyUuid(UUID uuid) { + return new StarData(bodyClass, size, colorR, colorG, colorB, axialTilt, rotationSpeed, magneticFieldStrength, energy, uuid); + } + + /** + * Derive a reproducible UUID from the bodySeed. The same bodySeed always + * produces the same UUID, which enables singularity crystal copies to share + * the wormhole identity of the original discovery. + */ + public static UUID uuidFromBodySeed(long bodySeed) { + return new UUID(bodySeed, bodySeed); + } + + @Override + public CompoundTag toTag() { + CompoundTag tag = new CompoundTag(); + tag.putString("bodyType", type().getSerializedName()); + tag.putString("bodyClass", bodyClass.name()); + tag.putInt("size", size); + tag.putInt("colorR", colorR); + tag.putInt("colorG", colorG); + tag.putInt("colorB", colorB); + tag.putFloat("axialTilt", axialTilt); + tag.putInt("rotationSpeed", rotationSpeed); + tag.putInt("magneticFieldStrength", magneticFieldStrength); + tag.putInt("energy", energy); + if (bodyUuid != null) { + tag.store("bodyUuid", UUIDUtil.CODEC, bodyUuid); + } + return tag; + } + + public static StarData fromTag(CompoundTag tag) { + CelestialBodyClass cls = CelestialBodyData.readClass(tag, CelestialBodyType.STAR); + int size = tag.getIntOr("size", 0); + int r = tag.getIntOr("colorR", 0); + int g = tag.getIntOr("colorG", 0); + int b = tag.getIntOr("colorB", 0); + int mag = tag.getIntOr("magneticFieldStrength", 0); + int energy = tag.getIntOr("energy", 0); + int rotSpeed = tag.getIntOr("rotationSpeed", 0); + UUID uuid = tag.read("bodyUuid", UUIDUtil.CODEC).orElse(null); + return new StarData(cls, size, r, g, b, tag.getFloatOr("axialTilt", 0f), rotSpeed, mag, energy, uuid); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/Temperature.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/Temperature.java new file mode 100644 index 0000000000..54a5ab3c05 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/Temperature.java @@ -0,0 +1,32 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.util.StringRepresentable; +import org.jetbrains.annotations.NotNull; + +public enum Temperature implements StringRepresentable { + FREEZING("freezing"), + COLD("cold"), + MILD("mild"), + HOT("hot"), + SCORCHED("scorched"); + + private final String name; + + Temperature(String name) { + this.name = name; + } + + @Override + public @NotNull String getSerializedName() { + return name; + } + + public static Temperature fromName(String name) { + for (Temperature value : values()) { + if (value.name.equals(name)) { + return value; + } + } + return MILD; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/TempleDemandInput.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/TempleDemandInput.java new file mode 100644 index 0000000000..810f7a9230 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/TempleDemandInput.java @@ -0,0 +1,20 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeInput; +import org.jetbrains.annotations.NotNull; + +/** + * Input wrapper for {@link TempleDemandRecipe#matches}. + */ +public record TempleDemandInput(TempleDemandRecipe.Category category) implements RecipeInput { + @Override + public @NotNull ItemStack getItem(int index) { + return ItemStack.EMPTY; + } + + @Override + public int size() { + return 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/TempleDemandRecipe.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/TempleDemandRecipe.java new file mode 100644 index 0000000000..d0491030cd --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/TempleDemandRecipe.java @@ -0,0 +1,141 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.PlacementInfo; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeBookCategories; +import net.minecraft.world.item.crafting.RecipeBookCategory; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +/** + * Recipe defining temple demand entries for the Temple megastructure. + */ +public record TempleDemandRecipe( + Category category, + List entries +) implements Recipe { + + public enum Category { + BLESSING("blessing"), + PUNISHMENT("punishment"); + + public static final Codec CODEC = Codec.STRING.xmap( + Category::fromName, + Category::getSerializedName + ); + + private final String name; + + Category(String name) { + this.name = name; + } + + public String getSerializedName() { + return name; + } + + public static Category fromName(String name) { + for (Category value : values()) { + if (value.name.equals(name)) return value; + } + throw new IllegalArgumentException("Unknown temple demand category: " + name); + } + } + + public record Entry(String itemId, int count) { + public static final Codec CODEC = RecordCodecBuilder.create(ins -> ins.group( + Codec.STRING.fieldOf("id").forGetter(Entry::itemId), + Codec.INT.fieldOf("count").forGetter(Entry::count) + ).apply(ins, Entry::new)); + + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, Entry::itemId, + ByteBufCodecs.INT, Entry::count, + Entry::new + ); + + public Identifier itemResource() { + return Identifier.parse(itemId); + } + } + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(ins -> ins.group( + Category.CODEC.fieldOf("category").forGetter(TempleDemandRecipe::category), + Entry.CODEC.listOf().fieldOf("entries").forGetter(TempleDemandRecipe::entries) + ).apply(ins, TempleDemandRecipe::new)); + + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.STRING_UTF8.map( + Category::fromName, + Category::getSerializedName + ), TempleDemandRecipe::category, + Entry.STREAM_CODEC.apply(ByteBufCodecs.list()), TempleDemandRecipe::entries, + TempleDemandRecipe::new + ); + + public static final RecipeSerializer SERIALIZER = new RecipeSerializer<>( + CODEC, STREAM_CODEC + ); + + @Override + public boolean matches(TempleDemandInput input, @NotNull Level level) { + return this.category == input.category(); + } + + @Deprecated + @Override + public @NotNull ItemStack assemble(@NotNull TempleDemandInput input) { + return Items.AIR.getDefaultInstance(); + } + + @Override + public @NotNull RecipeType getType() { + return ModRecipeTypes.TEMPLE_DEMAND.get(); + } + + @Override + public PlacementInfo placementInfo() { + return PlacementInfo.NOT_PLACEABLE; + } + + @Override + public RecipeBookCategory recipeBookCategory() { + return RecipeBookCategories.CRAFTING_MISC; + } + + @Override + public @NotNull RecipeSerializer getSerializer() { + return SERIALIZER; + } + + @Override + public boolean isSpecial() { + return true; + } + + @Override + public boolean showNotification() { + return false; + } + + @Override + public @NotNull String group() { + return "temple_demand"; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/WindSpeed.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/WindSpeed.java new file mode 100644 index 0000000000..d9275a1ceb --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/WindSpeed.java @@ -0,0 +1,29 @@ +package dev.dubhe.anvilcraft.block.entity.celestial; + +import net.minecraft.util.StringRepresentable; +import org.jetbrains.annotations.NotNull; + +public enum WindSpeed implements StringRepresentable { + HIGH("high"), + VERY_HIGH("very_high"); + + private final String name; + + WindSpeed(String name) { + this.name = name; + } + + @Override + public @NotNull String getSerializedName() { + return name; + } + + public static WindSpeed fromName(String name) { + for (WindSpeed value : values()) { + if (value.name.equals(name)) { + return value; + } + } + return HIGH; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/container/HyperdimensionStorageStationBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/container/HyperdimensionStorageStationBlockEntity.java new file mode 100644 index 0000000000..83b6e94adf --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/container/HyperdimensionStorageStationBlockEntity.java @@ -0,0 +1,12 @@ +package dev.dubhe.anvilcraft.block.entity.container; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public class HyperdimensionStorageStationBlockEntity extends BlockEntity { + public HyperdimensionStorageStationBlockEntity(BlockEntityType type, BlockPos worldPosition, BlockState blockState) { + super(type, worldPosition, blockState); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/container/LargeCrateBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/container/LargeCrateBlockEntity.java new file mode 100644 index 0000000000..d356a4d400 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/container/LargeCrateBlockEntity.java @@ -0,0 +1,12 @@ +package dev.dubhe.anvilcraft.block.entity.container; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public class LargeCrateBlockEntity extends BlockEntity { + public LargeCrateBlockEntity(BlockEntityType type, BlockPos worldPosition, BlockState blockState) { + super(type, worldPosition, blockState); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ShulkerContainerBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/container/ShulkerContainerBlockEntity.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/entity/ShulkerContainerBlockEntity.java rename to src/main/java/dev/dubhe/anvilcraft/block/entity/container/ShulkerContainerBlockEntity.java index cdfa3d1f54..ae2f256735 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ShulkerContainerBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/container/ShulkerContainerBlockEntity.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.entity; +package dev.dubhe.anvilcraft.block.entity.container; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/heatable/HeatableBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/heatable/HeatableBlockEntity.java index 53270dead8..43672d9417 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/heatable/HeatableBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/heatable/HeatableBlockEntity.java @@ -6,14 +6,14 @@ import dev.dubhe.anvilcraft.network.HeatableSyncPacket; import lombok.Getter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.neoforged.neoforge.network.PacketDistributor; import java.util.Optional; @@ -27,9 +27,7 @@ protected HeatableBlockEntity(BlockEntityType type, BlockPos pos, BlockState super(type, pos, blockState); } - /** - * 增加1秒 - */ + /// 增加1秒 public void addDuration(int second) { this.addDurationInTick(second * 20); } @@ -43,7 +41,7 @@ public void setDuration(int duration) { this.setChanged(); if (this.level == null || this.level.getGameTime() % 10 != 0) return; if (this.level instanceof ServerLevel serverLevel) { - PacketDistributor.sendToPlayersTrackingChunk(serverLevel, new ChunkPos(this.getBlockPos()), + PacketDistributor.sendToPlayersTrackingChunk(serverLevel, ChunkPos.containing(this.getBlockPos()), new HeatableSyncPacket(this.getBlockPos(), duration)); } } @@ -55,15 +53,15 @@ public int getSignal() { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("duration", this.duration); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("duration", this.duration); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.duration = tag.getInt("duration"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.duration = input.getIntOr("duration", 0); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/heatable/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/heatable/package-info.java index e359dc5da4..cda017808a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/heatable/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/heatable/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.entity.heatable; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/AcceleratorHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/AcceleratorHandler.java new file mode 100644 index 0000000000..f3a3bd59bc --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/AcceleratorHandler.java @@ -0,0 +1,365 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialBodyClass; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialBodyMatcher; +import dev.dubhe.anvilcraft.block.entity.celestial.StarData; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; + +public class AcceleratorHandler extends BaseMegastructureHandler { + + @Getter + private int stage = 0; + @Getter + private int ticksRemaining = 0; + @Getter + private int ticksTotal = 0; + private int originalMass = 0; + private int originalEnergy = 0; + private int originalSize = 0; + private boolean dysonDestroyed = false; + private long dysonDestroyTick = -1; + @Setter @Getter + private int supernovaFlashTicks = 0; + @Setter @Getter + private int collapseAnimTicks = 0; + + @Override + public String name() { + return "stellar_evolution_accelerator"; + } + + public boolean isActive() { + return stage >= 1 && stage <= 4; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + if (!be.isAmplifierPresent()) return; + if (stage < 1 || stage > 4) return; + + switch (stage) { + case 1 -> tickStage1(be); + case 2 -> tickStage2(be); + case 3 -> tickStage3(be); + case 4 -> tickStage4(be); + default -> {} + } + } + + @Override + public void onBuild(CelestialForgingAnvilBlockEntity be) { + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + + CelestialBodyClass cls = star.bodyClass(); + int ageX = CelestialBodyMatcher.toX(be.getAgeAnvilCount()); + int energyY = CelestialBodyMatcher.toY(star.energy()); + + this.originalMass = be.getStellarMass(); + this.originalEnergy = star.energy(); + this.originalSize = star.size(); + this.dysonDestroyed = false; + this.dysonDestroyTick = -1; + + if (cls.isMainSequence()) { + int pixelsRight = CelestialBodyMatcher.countPixelsRightInAgeTemp(ageX, energyY); + this.stage = 1; + this.ticksRemaining = pixelsRight * 2400; + this.ticksTotal = ticksRemaining; + } else { + initGiantPhase(be, ageX, energyY); + } + + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + private void initGiantPhase(CelestialForgingAnvilBlockEntity be, int ageX, int energyY) { + int pixelsDown = CelestialBodyMatcher.countPixelsDownInAgeTempSp(ageX, energyY); + int totalPixels = CelestialBodyMatcher.countTotalColoredPixelsInAgeTempSpColumn(ageX, energyY); + if (totalPixels <= 0) totalPixels = 1; + float fraction = (float) pixelsDown / totalPixels; + this.stage = 2; + this.ticksRemaining = Math.max((int) (fraction * 2400), 1); + this.ticksTotal = ticksRemaining; + + if (isDysonSphereBuilt(be) && ticksRemaining > 20) { + long startTick = be.getLevel().getGameTime(); + long range = ticksRemaining / 2; + if (range > 0) { + this.dysonDestroyTick = startTick + be.getLevel().getRandom().nextInt((int) range); + } + } + + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + private boolean isDysonSphereBuilt(CelestialForgingAnvilBlockEntity be) { + if (be.getActiveMegastructureIndex() < 0) return false; + var option = be.getActiveMegastructureOption(); + if (option == null) return false; + String name = option.megastructure(); + return "dyson_sphere_small".equals(name) || "dyson_sphere_large".equals(name); + } + + private void tickStage1(CelestialForgingAnvilBlockEntity be) { + ticksRemaining--; + if (ticksRemaining % 20 == 0) syncToClient(be); + if (ticksRemaining <= 0) { + if (be.getCelestialBodyData() instanceof StarData star && star.bodyClass() == CelestialBodyClass.M_MAIN) { + transitionToStage4(be); + } else { + transitionToStage2(be); + } + } + } + + private void tickStage2(CelestialForgingAnvilBlockEntity be) { + ticksRemaining--; + updateGiantPhaseVisuals(be); + if (ticksRemaining % 20 == 0) syncToClient(be); + if (!dysonDestroyed && dysonDestroyTick >= 0 && be.getLevel().getGameTime() >= dysonDestroyTick) { + destroyDysonSphere(be); + } + if (ticksRemaining <= 0) { + transitionToStage3(be); + } + } + + private void tickStage3(CelestialForgingAnvilBlockEntity be) { + if (collapseAnimTicks > 0) { + collapseAnimTicks--; + ticksRemaining--; + updateCollapseColor(be); + if (collapseAnimTicks == 5) { + be.getLevel().explode(null, + be.getBlockPos().getX() + 0.5, be.getBlockPos().getY() + 4.0, be.getBlockPos().getZ() + 0.5, + 6.0f, Level.ExplosionInteraction.BLOCK); + } + if (collapseAnimTicks > 0) syncToClient(be); + } else { + triggerSupernova(be); + } + } + + private void tickStage4(CelestialForgingAnvilBlockEntity be) { + ticksRemaining--; + if (ticksRemaining <= 0) completeMStarEvolution(be); + } + + private void transitionToStage2(CelestialForgingAnvilBlockEntity be) { + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + int ageX = CelestialBodyMatcher.toX(be.getAgeAnvilCount()); + int energyY = CelestialBodyMatcher.toY(star.energy()); + initGiantPhase(be, ageX, energyY); + } + + private void transitionToStage3(CelestialForgingAnvilBlockEntity be) { + this.stage = 3; + this.collapseAnimTicks = 10; + this.ticksRemaining = 10; + this.ticksTotal = 10; + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + private void transitionToStage4(CelestialForgingAnvilBlockEntity be) { + this.stage = 4; + this.ticksRemaining = 2400; + this.ticksTotal = 2400; + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + private void triggerSupernova(CelestialForgingAnvilBlockEntity be) { + createRemnant(be); + be.getMegastructureManager().clearAllMegastructures(be); + this.supernovaFlashTicks = 10; + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + private void createRemnant(CelestialForgingAnvilBlockEntity be) { + int mass = originalMass; + if (mass < 55) createWhiteDwarfRemnant(be); + else if (mass <= 58) createNeutronStarRemnant(be); + else createBlackHoleRemnant(be); + finishAccelerator(); + } + + private void completeMStarEvolution(CelestialForgingAnvilBlockEntity be) { + createWhiteDwarfRemnant(be); + finishAccelerator(); + } + + private void createWhiteDwarfRemnant(CelestialForgingAnvilBlockEntity be) { + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + int wdMassAnvil = originalMass <= 30 ? 48 : originalMass <= 42 ? 49 : 50; + int wdSpaceAnvil = originalMass <= 30 ? 11 : originalMass <= 42 ? 10 : 9; + int wdEnergy = 47; + int[] rgb = CelestialBodyMatcher.getStarColor(wdEnergy); + int newMag = Math.min(star.magneticFieldStrength() + 1, 5); + int newRotation = Math.min(star.rotationSpeed() + 1, 5); + be.setAgeAnvilCount(be.getAgeAnvilCount() + 1); + be.setStellarMass(wdMassAnvil); + be.setCelestialBodyData(new StarData(CelestialBodyClass.WHITE_DWARF, wdSpaceAnvil, + rgb[0], rgb[1], rgb[2], star.axialTilt(), newRotation, newMag, wdEnergy, star.bodyUuid())); + be.setPlanetaryResourceSet(null); + } + + private void createNeutronStarRemnant(CelestialForgingAnvilBlockEntity be) { + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + int neutronMass = originalMass <= 55 ? 50 : originalMass <= 56 ? 51 : 52; + int newMag = Math.min(star.magneticFieldStrength() + 2, 6); + int newRotation = Math.min(star.rotationSpeed() + 2, 5); + be.setAgeAnvilCount(be.getAgeAnvilCount() + 1); + be.setStellarMass(neutronMass); + be.setCelestialBodyData(new StarData(CelestialBodyClass.NEUTRON_STAR, 1, + 255, 255, 255, star.axialTilt(), newRotation, newMag, 64, star.bodyUuid())); + be.setPlanetaryResourceSet(null); + } + + private void createBlackHoleRemnant(CelestialForgingAnvilBlockEntity be) { + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + int bhMass = Math.clamp(53 + (originalMass - 59), 53, 59); + int newMag = Math.min(star.magneticFieldStrength() + 2, 6); + be.setAgeAnvilCount(be.getAgeAnvilCount() + 1); + be.setStellarMass(bhMass); + be.setCelestialBodyData(new StarData(CelestialBodyClass.BLACK_HOLE, 1, + 0, 0, 0, star.axialTilt(), 1, newMag, 64, star.bodyUuid())); + be.setPlanetaryResourceSet(null); + } + + private void finishAccelerator() { + this.stage = 0; + this.ticksRemaining = 0; + this.ticksTotal = 0; + this.dysonDestroyed = false; + this.dysonDestroyTick = -1; + } + + private void destroyDysonSphere(CelestialForgingAnvilBlockEntity be) { + if (dysonDestroyed) return; + dysonDestroyed = true; + be.getMegastructureManager().clearMegastructure(be); + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + private void syncToClient(CelestialForgingAnvilBlockEntity be) { + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + private void updateGiantPhaseVisuals(CelestialForgingAnvilBlockEntity be) { + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + if (be.getLevel().getGameTime() % 20 != 0) return; + float progress = ticksTotal > 0 ? (float) ticksRemaining / ticksTotal : 0f; + float t = 1.0f - progress; + int newSize = originalSize + Math.round((64 - originalSize) * t); + newSize = Math.clamp(newSize, 1, 64); + float floatEnergy = Math.clamp(originalEnergy + (38 - originalEnergy) * t, 38, 64); + int[] rgb = getBlendedStarColor(floatEnergy); + be.setCelestialBodyData(new StarData(star.bodyClass(), newSize, + rgb[0], rgb[1], rgb[2], star.axialTilt(), star.rotationSpeed(), star.magneticFieldStrength(), star.energy(), star.bodyUuid())); + } + + private void updateCollapseColor(CelestialForgingAnvilBlockEntity be) { + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + int collapseEnergy = switch (collapseAnimTicks) { + case 10 -> 38; case 9 -> 40; case 8 -> 42; case 7 -> 44; case 6 -> 46; + case 5 -> 48; case 4 -> 50; case 3 -> 53; case 2 -> 56; case 1 -> 59; default -> 62; + }; + int[] rgb = CelestialBodyMatcher.getStarColor(collapseEnergy); + float startScale = visualScale(star.size()); + float endScale = visualScale(9); + float progress = Math.clamp((10.0f - collapseAnimTicks) / 9.0f, 0.0f, 1.0f); + float targetScale = startScale + (endScale - startScale) * progress; + int collapseSize = Math.max(9, sizeForVisualScale(targetScale)); + be.setCelestialBodyData(new StarData(star.bodyClass(), collapseSize, + rgb[0], rgb[1], rgb[2], star.axialTilt(), star.rotationSpeed(), star.magneticFieldStrength(), star.energy(), star.bodyUuid())); + } + + private static float visualScale(int size) { + if (size <= 20) return 1.5f * (0.2f + (size - 1) * 0.8f / 19f); + else { float t2 = (size - 20) / 44f; return 1.5f * (1.0f + t2 * t2 * 1.63f); } + } + + private static int sizeForVisualScale(float scale) { + if (scale >= 1.5f) { float t2 = (float) Math.sqrt((scale / 1.5f - 1.0f) / 1.63f); return Math.round(20f + 44f * t2); } + else return Math.round(1f + (scale / 1.5f - 0.2f) * 19f / 0.8f); + } + + private static int[] getBlendedStarColor(float energy) { + int low = (int) Math.floor(energy); + int high = Math.min(low + 1, 64); + float frac = energy - low; + int[] rgbLow = CelestialBodyMatcher.getStarColor(low); + int[] rgbHigh = CelestialBodyMatcher.getStarColor(high); + return new int[]{ + Math.round(rgbLow[0] + (rgbHigh[0] - rgbLow[0]) * frac), + Math.round(rgbLow[1] + (rgbHigh[1] - rgbLow[1]) * frac), + Math.round(rgbLow[2] + (rgbHigh[2] - rgbLow[2]) * frac) + }; + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + this.stage = 0; + this.ticksRemaining = 0; + this.ticksTotal = 0; + this.dysonDestroyed = false; + this.dysonDestroyTick = -1; + this.collapseAnimTicks = 0; + } + + @Override + public void saveAdditional(ValueOutput output) { + output.putInt("acceleratorStage", stage); + output.putInt("acceleratorTicksRemaining", ticksRemaining); + output.putInt("acceleratorTicksTotal", ticksTotal); + output.putInt("acceleratorOriginalMass", originalMass); + output.putInt("acceleratorOriginalEnergy", originalEnergy); + output.putInt("acceleratorOriginalSize", originalSize); + output.putBoolean("acceleratorDysonDestroyed", dysonDestroyed); + output.putLong("acceleratorDysonDestroyTick", dysonDestroyTick); + } + + @Override + public void loadAdditional(ValueInput input) { + this.stage = input.getIntOr("acceleratorStage", 0); + this.ticksRemaining = input.getIntOr("acceleratorTicksRemaining", 0); + this.ticksTotal = input.getIntOr("acceleratorTicksTotal", 0); + this.originalMass = input.getIntOr("acceleratorOriginalMass", 0); + this.originalEnergy = input.getIntOr("acceleratorOriginalEnergy", 0); + this.originalSize = input.getIntOr("acceleratorOriginalSize", 0); + this.dysonDestroyed = input.getBooleanOr("acceleratorDysonDestroyed", false); + this.dysonDestroyTick = input.getLongOr("acceleratorDysonDestroyTick", -1); + } + + @Override + public void writeUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + tag.putInt("acceleratorStage", stage); + tag.putInt("acceleratorTicksRemaining", ticksRemaining); + tag.putInt("acceleratorTicksTotal", ticksTotal); + tag.putInt("supernovaFlashTicks", supernovaFlashTicks); + tag.putInt("collapseAnimTicks", collapseAnimTicks); + } + + @Override + public void readUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + this.stage = tag.getIntOr("acceleratorStage", 0); + this.ticksRemaining = tag.getIntOr("acceleratorTicksRemaining", 0); + this.ticksTotal = tag.getIntOr("acceleratorTicksTotal", 0); + this.supernovaFlashTicks = tag.getIntOr("supernovaFlashTicks", 0); + this.collapseAnimTicks = tag.getIntOr("collapseAnimTicks", 0); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/BaseMegastructureHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/BaseMegastructureHandler.java new file mode 100644 index 0000000000..69d534f82f --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/BaseMegastructureHandler.java @@ -0,0 +1,210 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilFluidInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLaserInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLogisticsInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CfaInterfaceScanner; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; + +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +/** + * Base class for CFA megastructure handlers. + * Provides utility methods for scanning adjacent interfaces and item/fluid manipulation. + */ +public abstract class BaseMegastructureHandler implements IMegastructureHandler { + + // === NBT defaults (most handlers don't persist data) === + + @Override + public void saveAdditional(ValueOutput output) { + } + + @Override + public void loadAdditional(ValueInput input) { + } + + @Override + public void writeUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + } + + @Override + public void readUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + } + + @Override + public void onBuild(CelestialForgingAnvilBlockEntity be) { + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + } + + // === Interface scanning === + + protected List findLaserInterfaces( + CelestialForgingAnvilBlockEntity be + ) { + return CfaInterfaceScanner.findLaserInterfaces(be.getLevel(), be.getBlockPos()); + } + + protected List> findLogisticsInterfaces(CelestialForgingAnvilBlockEntity be) { + return CfaInterfaceScanner.findLogisticsInterfaces(be.getLevel(), be.getBlockPos()); + } + + protected List findFluidInterfaces( + CelestialForgingAnvilBlockEntity be + ) { + return CfaInterfaceScanner.findFluidInterfaces(be.getLevel(), be.getBlockPos()); + } + + protected void scanAdjacentBlocks(Consumer consumer, CelestialForgingAnvilBlockEntity be) { + CfaInterfaceScanner.scanAdjacentBlocks(be.getBlockPos(), be.getLevel(), consumer); + } + + // === Item manipulation (26.1 ResourceHandler API) === + + /** + * Insert a stack into a {@link ResourceHandler}, spreading across available slots. + * Uses {@link Transaction} — the entire insert commits at once. + */ + protected static ItemStack insertIntoHandler(ResourceHandler handler, ItemStack stack) { + ItemStack remainder = stack.copy(); + try (Transaction tx = Transaction.openRoot()) { + for (int slot = 0; slot < handler.size() && !remainder.isEmpty(); slot++) { + int inserted = handler.insert(slot, ItemResource.of(remainder), remainder.getCount(), tx); + if (inserted > 0) { + remainder.shrink(inserted); + } + } + tx.commit(); + } + return remainder; + } + + /** + * Read an ItemStack from a slot of a {@link ResourceHandler}. + * {@code getStackFrom} is protected, so we use {@code getResource + getAmountAsInt + toStack}. + */ + protected static ItemStack getStackFromHandler(ResourceHandler handler, int slot) { + ItemResource resource = handler.getResource(slot); + if (resource.isEmpty()) return ItemStack.EMPTY; + return resource.toStack(handler.getAmountAsInt(slot)); + } + + /** + * Extract from a specific slot without simulation — committed immediately. + */ + protected static ItemStack extractFromHandler(ResourceHandler handler, int slot, int amount) { + ItemResource resource = handler.getResource(slot); + if (resource.isEmpty()) return ItemStack.EMPTY; + int toExtract = Math.min(amount, handler.getAmountAsInt(slot)); + try (Transaction tx = Transaction.openRoot()) { + int extracted = handler.extract(slot, resource, toExtract, tx); + if (extracted > 0) { + tx.commit(); + return resource.toStack(extracted); + } + } + return ItemStack.EMPTY; + } + + /** + * Insert fluid into a tank slot. + */ + protected static int insertFluid(ResourceHandler tank, int slot, FluidStack stack) { + try (Transaction tx = Transaction.openRoot()) { + int inserted = tank.insert(slot, FluidResource.of(stack), stack.getAmount(), tx); + if (inserted > 0) tx.commit(); + return inserted; + } + } + + /** + * Extract fluid from a tank slot. + */ + protected static void drainFluid(ResourceHandler tank, int slot, FluidStack stack) { + try (Transaction tx = Transaction.openRoot()) { + tank.extract(slot, FluidResource.of(stack), stack.getAmount(), tx); + tx.commit(); + } + } + + /** + * Read a FluidStack from a tank slot. + */ + protected static FluidStack getFluidFromTank(ResourceHandler tank, int slot) { + FluidResource resource = tank.getResource(slot); + if (resource.isEmpty()) return FluidStack.EMPTY; + return resource.toStack((int) tank.getAmountAsLong(slot)); + } + + protected static void dropItemOnGround(ItemStack stack, Level level, BlockPos pos) { + if (level == null || stack.isEmpty()) return; + net.minecraft.world.entity.item.ItemEntity entity = new net.minecraft.world.entity.item.ItemEntity( + level, + pos.getX() + 0.5, + pos.getY() + 1, + pos.getZ() + 0.5, + stack + ); + level.addFreshEntity(entity); + } + + // === Laser helpers === + + protected int countValidLasers(CelestialForgingAnvilBlockEntity be, int threshold) { + List lasers = findLaserInterfaces(be); + int count = 0; + for (CelestialForgingAnvilLaserInterfaceBlockEntity laser : lasers) { + if (laser.getReceivedLaserLevel() >= threshold) { + count++; + } + } + return count; + } + + protected Map getLaserInterfacesMap( + CelestialForgingAnvilBlockEntity be + ) { + return CfaInterfaceScanner.getInterfacesMap( + CelestialForgingAnvilLaserInterfaceBlockEntity.class, + be.getLevel(), + be.getBlockPos() + ); + } + + protected Map getLogisticsInterfacesMap( + CelestialForgingAnvilBlockEntity be + ) { + return CfaInterfaceScanner.getInterfacesMap( + CelestialForgingAnvilLogisticsInterfaceBlockEntity.class, + be.getLevel(), + be.getBlockPos() + ); + } + + protected Map getFluidInterfacesMap( + CelestialForgingAnvilBlockEntity be + ) { + return CfaInterfaceScanner.getInterfacesMap( + CelestialForgingAnvilFluidInterfaceBlockEntity.class, + be.getLevel(), + be.getBlockPos() + ); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ColliderHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ColliderHandler.java new file mode 100644 index 0000000000..03c8750d29 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ColliderHandler.java @@ -0,0 +1,363 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.anvilcraft.lib.v2.util.predicate.ChanceItemStack; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLogisticsInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.StarData; +import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; +import dev.dubhe.anvilcraft.recipe.anvil.collision.AnvilCollisionCraftRecipe; +import dev.dubhe.anvilcraft.recipe.sync.RecipesRecord; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; + +import java.util.ArrayList; +import java.util.List; + +public class ColliderHandler extends BaseMegastructureHandler { + private static final int COOLDOWN_TICKS = 10; + private static final int MAX_COLLISIONS = 16; + + private int cooldown = 0; + private int cycleRemaining = 0; + private ItemStack reservedAnvil = ItemStack.EMPTY; + private ItemStack reservedHitBlock = ItemStack.EMPTY; + private int activeSpeed = 0; + private final List targetItems = new ArrayList<>(); + private int logisticsRoundRobin = 0; + + @Override + public String name() { + return "stellar_ring_collider"; + } + + @Override + public int getInputPower(CelestialForgingAnvilBlockEntity be) { + return 4000; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) return; + if (be.getPlanetaryResourceSet() == null) return; + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + if (star.size() >= 48) return; + + boolean starMissing = !be.isAmplifierPresent(); + boolean isProcessing = cycleRemaining > 0 && !be.isPowerInsufficient(); + + if (be.getLevel().getGameTime() % 20 == 0) { + refreshColliderTargetItems(be); + } + + if (starMissing) { + if (cycleRemaining > 0 || !reservedAnvil.isEmpty() || !reservedHitBlock.isEmpty()) { + outputColliderReservedItems(be); + resetColliderState(be); + } + broadcastColliderState(be, false, true); + return; + } + + broadcastColliderState(be, isProcessing, false); + + if (be.isPowerInsufficient()) { + outputColliderReservedItems(be); + resetColliderState(be); + return; + } + + if (cooldown > 0) { + cooldown--; + return; + } + + if (cycleRemaining > 0) { + cycleRemaining--; + if (cycleRemaining == 0) { + completeColliderCycle(be); + cooldown = COOLDOWN_TICKS; + } + return; + } + + tryStartColliderCycle(be); + } + + private void broadcastColliderState(CelestialForgingAnvilBlockEntity be, boolean processing, boolean starMissing) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + scanAdjacentBlocks((checkPos) -> { + var blockEntity = be.getLevel().getBlockEntity(checkPos); + if (blockEntity instanceof CelestialForgingAnvilLogisticsInterfaceBlockEntity logiBe) { + logiBe.setColliderProcessing(processing); + logiBe.setColliderStarMissing(starMissing); + logiBe.setChanged(); + } + }, be); + } + + private void broadcastColliderTargets(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + scanAdjacentBlocks((checkPos) -> { + var blockEntity = be.getLevel().getBlockEntity(checkPos); + if (blockEntity instanceof CelestialForgingAnvilLogisticsInterfaceBlockEntity logiBe) { + logiBe.setColliderTargetItems(new ArrayList<>(targetItems)); + logiBe.setChanged(); + } + }, be); + } + + private void refreshColliderTargetItems(CelestialForgingAnvilBlockEntity be) { + targetItems.clear(); + if (be.getLevel() == null) return; + var recipes = RecipesRecord.getRecipes(be.getLevel()).byType(ModRecipeTypes.ANVIL_COLLISION_CRAFT.get()); + for (var holder : recipes) { + AnvilCollisionCraftRecipe recipe = holder.value(); + if (recipe.outputItems().isEmpty()) continue; + var hitPred = recipe.hitBlock(); + if (hitPred.getStatesCache().isEmpty()) continue; + for (var state : hitPred.getStatesCache()) { + ItemStack item = new ItemStack(state.getBlock().asItem(), 1); + boolean has = false; + for (ItemStack existing : targetItems) { + if (ItemStack.isSameItemSameComponents(existing, item)) { + has = true; + break; + } + } + if (!has) targetItems.add(item); + } + } + broadcastColliderTargets(be); + } + + private record CLogisticsRef(ResourceHandler handler, BlockPos pos) {} + private record CLocatedStack(int li, int slot, ItemStack stack, Block block) {} + + private void tryStartColliderCycle(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || !(be.getCelestialBodyData() instanceof StarData star)) return; + int mass = be.getStellarMass(); + int mag = star.magneticFieldStrength(); + int denominator = mass * mag + 10; + if (denominator <= 0) return; + + var recipes = RecipesRecord.getRecipes(be.getLevel()).byType(ModRecipeTypes.ANVIL_COLLISION_CRAFT.get()); + + List logistics = new ArrayList<>(); + scanAdjacentBlocks((checkPos) -> { + var blockEntity = be.getLevel().getBlockEntity(checkPos); + if (blockEntity instanceof CelestialForgingAnvilLogisticsInterfaceBlockEntity logiBe) { + logistics.add(new CLogisticsRef(logiBe.getItemHandler(), checkPos.immutable())); + } + }, be); + if (logistics.isEmpty()) return; + + List anvilStacks = new ArrayList<>(); + List hitStacks = new ArrayList<>(); + + for (int li = 0; li < logistics.size(); li++) { + ResourceHandler handler = logistics.get(li).handler; + for (int slot = 0; slot < handler.size(); slot++) { + ItemStack stack = getStackFromHandler(handler, slot); + if (stack.isEmpty()) continue; + Block block = Block.byItem(stack.getItem()); + if (block == Blocks.AIR) continue; + for (var holder : recipes) { + AnvilCollisionCraftRecipe recipe = holder.value(); + if (recipe.outputItems().isEmpty()) continue; + if (recipe.anvil().test(be.getLevel(), block.defaultBlockState(), null)) { + anvilStacks.add(new CLocatedStack(li, slot, stack, block)); + break; + } + } + for (var holder : recipes) { + AnvilCollisionCraftRecipe recipe = holder.value(); + if (recipe.outputItems().isEmpty()) continue; + if (recipe.hitBlock().test(be.getLevel(), block.defaultBlockState(), null)) { + hitStacks.add(new CLocatedStack(li, slot, stack, block)); + break; + } + } + } + } + + AnvilCollisionCraftRecipe bestRecipe = null; + int bestSpeed = Integer.MIN_VALUE; + CLocatedStack bestAnvil = null; + CLocatedStack bestHit = null; + + for (CLocatedStack anvil : anvilStacks) { + for (CLocatedStack hit : hitStacks) { + if (anvil.li == hit.li && anvil.slot == hit.slot) continue; + for (var holder : recipes) { + AnvilCollisionCraftRecipe recipe = holder.value(); + if (recipe.outputItems().isEmpty()) continue; + if (recipe.speed() <= bestSpeed) continue; + if (recipe.anvil().test(be.getLevel(), anvil.block.defaultBlockState(), null) + && recipe.hitBlock().test(be.getLevel(), hit.block.defaultBlockState(), null)) { + bestSpeed = recipe.speed(); + bestRecipe = recipe; + bestAnvil = anvil; + bestHit = hit; + } + } + } + } + + if (bestRecipe == null || bestAnvil == null || bestHit == null) return; + + int t = (1000 * bestRecipe.speed() + denominator - 1) / denominator; + if (t <= 0) t = 1; + + int anvilToTake = Math.min(bestAnvil.stack.getCount(), MAX_COLLISIONS); + int hitToTake = Math.min(bestHit.stack.getCount(), MAX_COLLISIONS); + + CLogisticsRef anvilSrc = logistics.get(bestAnvil.li); + CLogisticsRef hitSrc = logistics.get(bestHit.li); + + reservedAnvil = extractFromHandler(anvilSrc.handler, bestAnvil.slot, anvilToTake); + reservedHitBlock = extractFromHandler(hitSrc.handler, bestHit.slot, hitToTake); + + activeSpeed = bestRecipe.speed(); + cycleRemaining = t; + cooldown = 0; + + markLogisticsProcessing(be, anvilSrc.pos, true); + if (!hitSrc.pos.equals(anvilSrc.pos)) { + markLogisticsProcessing(be, hitSrc.pos, true); + } + broadcastColliderTargets(be); + broadcastColliderState(be, true, false); + + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + private void markLogisticsProcessing(CelestialForgingAnvilBlockEntity be, BlockPos pos, boolean processing) { + if (be.getLevel() == null || pos == null) return; + var blockEntity = be.getLevel().getBlockEntity(pos); + if (blockEntity instanceof CelestialForgingAnvilLogisticsInterfaceBlockEntity logiBe) { + logiBe.setColliderTargetItems(new ArrayList<>(targetItems)); + logiBe.setColliderProcessing(processing); + logiBe.setChanged(); + } + } + + private void completeColliderCycle(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null) return; + List> logistics = findLogisticsInterfaces(be); + + var recipes = RecipesRecord.getRecipes(be.getLevel()).byType(ModRecipeTypes.ANVIL_COLLISION_CRAFT.get()); + + AnvilCollisionCraftRecipe activeRecipe = null; + for (var holder : recipes) { + AnvilCollisionCraftRecipe recipe = holder.value(); + if (recipe.outputItems().isEmpty()) continue; + if (recipe.speed() != activeSpeed) continue; + Block anvilBlock = Block.byItem(reservedAnvil.getItem()); + Block hitBlock = Block.byItem(reservedHitBlock.getItem()); + if (anvilBlock != Blocks.AIR && hitBlock != Blocks.AIR + && recipe.anvil().test(be.getLevel(), anvilBlock.defaultBlockState(), null) + && recipe.hitBlock().test(be.getLevel(), hitBlock.defaultBlockState(), null)) { + activeRecipe = recipe; + break; + } + } + + int anvilReserved = reservedAnvil.getCount(); + int hitReserved = reservedHitBlock.getCount(); + boolean consumeAnvil = activeRecipe != null && activeRecipe.consume(); + int collisionCount = consumeAnvil ? Math.min(anvilReserved, hitReserved) : hitReserved; + + int hitRemaining = hitReserved - collisionCount; + if (hitRemaining > 0) { + ItemStack hitReturn = reservedHitBlock.copyWithCount(hitRemaining); + returnToLogistics(logistics, hitReturn); + } + + if (consumeAnvil) { + int anvilRemaining = anvilReserved - collisionCount; + if (anvilRemaining > 0) { + returnToLogistics(logistics, reservedAnvil.copyWithCount(anvilRemaining)); + } + } else { + if (!reservedAnvil.isEmpty()) { + returnToLogistics(logistics, reservedAnvil.copy()); + } + } + + if (activeRecipe != null && be.getLevel() instanceof ServerLevel serverLevel && collisionCount > 0) { + for (ChanceItemStack chanceStack : activeRecipe.outputItems()) { + for (int c = 0; c < collisionCount; c++) { + ItemStackTemplate template = chanceStack.stack(); + ItemStack output = new ItemStack(template.item(), template.count()); + if (output.isEmpty()) continue; + for (ResourceHandler handler : logistics) { + ItemStack remainder = insertIntoHandler(handler, output); + if (remainder.getCount() < output.getCount()) { + break; + } + } + } + } + } + + broadcastColliderState(be, false, false); + resetColliderState(be); + } + + private void returnToLogistics(List> logistics, ItemStack stack) { + if (logistics.isEmpty()) { + // Can't drop to ground without level reference; discard + return; + } + int startIdx = logisticsRoundRobin % logistics.size(); + for (int attempt = 0; attempt < logistics.size(); attempt++) { + int idx = (startIdx + attempt) % logistics.size(); + ItemStack remainder = insertIntoHandler(logistics.get(idx), stack); + if (remainder.getCount() < stack.getCount()) { + logisticsRoundRobin = (idx + 1) % logistics.size(); + if (remainder.isEmpty()) return; + stack = remainder; + } + } + } + + private void outputColliderReservedItems(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null) return; + List> logistics = findLogisticsInterfaces(be); + + if (!reservedAnvil.isEmpty() && !logistics.isEmpty()) { + returnToLogistics(logistics, reservedAnvil.copy()); + } + if (!reservedHitBlock.isEmpty() && !logistics.isEmpty()) { + returnToLogistics(logistics, reservedHitBlock.copy()); + } + + resetColliderState(be); + } + + private void resetColliderState(CelestialForgingAnvilBlockEntity be) { + cooldown = 0; + cycleRemaining = 0; + reservedAnvil = ItemStack.EMPTY; + reservedHitBlock = ItemStack.EMPTY; + activeSpeed = 0; + broadcastColliderState(be, false, false); + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + outputColliderReservedItems(be); + resetColliderState(be); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/DysonSphereHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/DysonSphereHandler.java new file mode 100644 index 0000000000..e1ce2927e6 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/DysonSphereHandler.java @@ -0,0 +1,56 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.api.power.PowerComponentType; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.StarData; + +public class DysonSphereHandler extends BaseMegastructureHandler { + + private int cachedGridConsumption = 0; + private final String name; + + public DysonSphereHandler(String name) { + this.name = name; + } + + @Override + public String name() { + return name; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + // Passive + } + + @Override + public int getOutputPower(CelestialForgingAnvilBlockEntity be) { + if (!be.isAmplifierPresent()) return 0; + if (!(be.getCelestialBodyData() instanceof StarData star)) return 0; + if (be.isAcceleratorActive() && be.getAcceleratorStage() == 1) { + return Math.max(cachedGridConsumption * 2, cachedGridConsumption + 1); + } + int e = star.energy(); + int r = star.size(); + if (e > 0 && r > 0) { + int powerMW = (e * r * r) / 800; + return powerMW * 1000; + } + return 0; + } + + @Override + public PowerComponentType getComponentType() { + return PowerComponentType.PRODUCER; + } + + @Override + public void gridTick(CelestialForgingAnvilBlockEntity be) { + if (be.getGrid() != null + && be.isAcceleratorActive() + && be.getAcceleratorStage() == 1 + && be.getActiveMegastructureIndex() >= 0) { + this.cachedGridConsumption = be.getGrid().getConsume(); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/EcoStationHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/EcoStationHandler.java new file mode 100644 index 0000000000..721624fe3a --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/EcoStationHandler.java @@ -0,0 +1,107 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilFluidInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetaryResourceSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.material.Fluids; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; + +import java.util.List; + +public class EcoStationHandler extends BaseMegastructureHandler { + private static final int FLUID_PER_TICK = 250; + private int logisticsRoundRobin = 0; + + @Override + public String name() { + return "eco_station"; + } + + @Override + public int getInputPower(CelestialForgingAnvilBlockEntity be) { + return 1000; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) return; + if (be.getPlanetaryResourceSet() == null) return; + if (be.getPlanetaryResourceSet().hasCivilization()) return; + List bioItems = be.getPlanetaryResourceSet().getBiologicalItems(); + List bioFluids = be.getPlanetaryResourceSet().getBiologicalFluids(); + if (bioItems.isEmpty() && bioFluids.isEmpty()) return; + if (be.isPowerInsufficient()) return; + + int itemWeight = bioItems.stream().mapToInt(PlanetaryResourceSet.WeightedItemStack::weight).sum(); + int fluidWeight = bioFluids.stream().mapToInt(PlanetaryResourceSet.WeightedFluidStack::weight).sum(); + int totalWeight = itemWeight + fluidWeight; + if (totalWeight <= 0) return; + + int roll = be.getLevel().getRandom().nextInt(totalWeight); + int cumulative = 0; + + for (PlanetaryResourceSet.WeightedItemStack item : bioItems) { + cumulative += item.weight(); + if (roll < cumulative) { + ItemLike itemLike = BuiltInRegistries.ITEM.get(item.itemId()) + .map(h -> (ItemLike) h.value()).orElse(Items.AIR); + if (itemLike.asItem() != Items.AIR) { + ItemStack output = new ItemStack(itemLike, 1); + List> logistics = findLogisticsInterfaces(be); + if (!logistics.isEmpty()) { + int startIdx = logisticsRoundRobin % logistics.size(); + for (int attempt = 0; attempt < logistics.size(); attempt++) { + int idx = (startIdx + attempt) % logistics.size(); + ItemStack remainder = insertIntoHandler(logistics.get(idx), output); + if (remainder.getCount() < output.getCount()) { + logisticsRoundRobin = (idx + 1) % logistics.size(); + return; + } + } + } + } + return; + } + } + + for (PlanetaryResourceSet.WeightedFluidStack fluid : bioFluids) { + cumulative += fluid.weight(); + if (roll < cumulative) { + var fluidHolder = BuiltInRegistries.FLUID.get(fluid.fluidId()); + if (fluidHolder.isPresent()) { + var fluidType = fluidHolder.get().value(); + if (fluidType != Fluids.EMPTY) { + FluidStack output = new FluidStack(fluidType, FLUID_PER_TICK); + if (!output.isEmpty()) { + List fluidIfs = findFluidInterfaces(be); + for (CelestialForgingAnvilFluidInterfaceBlockEntity fluidIf : fluidIfs) { + ResourceHandler tank = fluidIf.getFluidHandler(); + try (Transaction tx = Transaction.openRoot()) { + int filled = tank.insert(FluidResource.of(output), output.getAmount(), tx); + if (filled > 0) { tx.commit(); return; } + } + } + } + } + return; + } + } + } + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + this.logisticsRoundRobin = 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ExcavatorHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ExcavatorHandler.java new file mode 100644 index 0000000000..4a45c60c17 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ExcavatorHandler.java @@ -0,0 +1,116 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetaryResourceSet; +import lombok.Getter; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; + +import java.util.ArrayList; +import java.util.List; + +public class ExcavatorHandler extends BaseMegastructureHandler { + private static final int LASER_THRESHOLD = 16; + private static final int MAX_LASERS = 4; + + @Getter + private boolean laserActive = false; + private int logisticsRoundRobin = 0; + + @Override + public String name() { + return "planet_excavator"; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) { + laserActive = false; + return; + } + if (be.getPlanetaryResourceSet() == null) return; + + int laserCount = countValidLasersLocal(be); + boolean hasValidLaser = laserCount > 0; + if (laserActive != hasValidLaser) { + laserActive = hasValidLaser; + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + if (!hasValidLaser) return; + int efficiency = Math.min(laserCount, MAX_LASERS); + + List miningPool = new ArrayList<>(); + miningPool.addAll(be.getPlanetaryResourceSet().getMinerals()); + miningPool.addAll(be.getPlanetaryResourceSet().getWastelandItems()); + if (miningPool.isEmpty()) return; + + int totalWeight = miningPool.stream().mapToInt(PlanetaryResourceSet.WeightedItemStack::weight).sum(); + if (totalWeight <= 0) return; + + int roll = be.getLevel().getRandom().nextInt(totalWeight); + int cumulative = 0; + Identifier chosenItem = null; + for (PlanetaryResourceSet.WeightedItemStack mineral : miningPool) { + cumulative += mineral.weight(); + if (roll < cumulative) { + chosenItem = mineral.itemId(); + break; + } + } + if (chosenItem == null) chosenItem = miningPool.getFirst().itemId(); + + ItemLike item = BuiltInRegistries.ITEM.get(chosenItem) + .map(h -> (net.minecraft.world.level.ItemLike) h.value()).orElse(Items.AIR); + if (item.asItem() == Items.AIR) return; + ItemStack output = new ItemStack(item, efficiency); + + List> logistics = findLogisticsInterfaces(be); + if (logistics.isEmpty()) return; + + int startIdx = logisticsRoundRobin % logistics.size(); + for (int attempt = 0; attempt < logistics.size(); attempt++) { + int idx = (startIdx + attempt) % logistics.size(); + ResourceHandler handler = logistics.get(idx); + ItemStack remainder = insertIntoHandler(handler, output); + if (remainder.getCount() < output.getCount()) { + logisticsRoundRobin = (idx + 1) % logistics.size(); + return; + } + } + } + + private int countValidLasersLocal(CelestialForgingAnvilBlockEntity be) { + return (int) dev.dubhe.anvilcraft.block.entity.CfaInterfaceScanner.findLaserInterfaces(be.getLevel(), be.getBlockPos()) + .stream() + .filter(l -> l.getReceivedLaserLevel() >= LASER_THRESHOLD) + .count(); + } + + @Override + public void saveAdditional(ValueOutput output) { + output.putBoolean("excavatorLaserActive", laserActive); + } + + @Override + public void loadAdditional(ValueInput input) { + this.laserActive = input.getBooleanOr("excavatorLaserActive", false); + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + this.laserActive = false; + this.logisticsRoundRobin = 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ExtractorHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ExtractorHandler.java new file mode 100644 index 0000000000..ed019ed064 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/ExtractorHandler.java @@ -0,0 +1,68 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilFluidInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetaryResourceSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.world.level.material.Fluids; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; + +import java.util.List; + +public class ExtractorHandler extends BaseMegastructureHandler { + private static final int FLUID_PER_TICK = 250; + + @Override + public String name() { + return "planet_exctractor"; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) return; + if (be.getPlanetaryResourceSet() == null) return; + + List fluids = be.getPlanetaryResourceSet().getFluids(); + if (fluids.isEmpty()) return; + + List fluidInterfaces = findFluidInterfaces(be); + if (fluidInterfaces.isEmpty()) return; + + int totalWeight = fluids.stream().mapToInt(PlanetaryResourceSet.WeightedFluidStack::weight).sum(); + if (totalWeight <= 0) return; + + for (CelestialForgingAnvilFluidInterfaceBlockEntity fluidInterface : fluidInterfaces) { + int roll = be.getLevel().getRandom().nextInt(totalWeight); + int cumulative = 0; + Identifier chosenFluid = null; + for (PlanetaryResourceSet.WeightedFluidStack fluid : fluids) { + cumulative += fluid.weight(); + if (roll < cumulative) { + chosenFluid = fluid.fluidId(); + break; + } + } + if (chosenFluid == null) chosenFluid = fluids.getFirst().fluidId(); + + var fluidHolder = BuiltInRegistries.FLUID.get(chosenFluid); + if (fluidHolder.isEmpty()) continue; + var fluid = fluidHolder.get().value(); + if (fluid == Fluids.EMPTY) continue; + FluidStack output = new FluidStack(fluid, FLUID_PER_TICK); + if (output.isEmpty()) continue; + + ResourceHandler tank = fluidInterface.getFluidHandler(); + try (Transaction tx = Transaction.openRoot()) { + int filled = tank.insert(FluidResource.of(output), output.getAmount(), tx); + if (filled > 0) tx.commit(); + } + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/GiantExtractorHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/GiantExtractorHandler.java new file mode 100644 index 0000000000..b7c0e0460a --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/GiantExtractorHandler.java @@ -0,0 +1,117 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilFluidInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetaryResourceSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.material.Fluids; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; + +import java.util.List; + +public class GiantExtractorHandler extends BaseMegastructureHandler { + private static final int FLUID_PER_TICK = 250; + private int logisticsRoundRobin = 0; + + @Override + public String name() { + return "giant_planet_exctractor"; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) return; + if (be.getPlanetaryResourceSet() == null) return; + + List giantFluids = be.getPlanetaryResourceSet().getGiantFluids(); + List giantItems = be.getPlanetaryResourceSet().getGiantItems(); + + List fluidInterfaces = findFluidInterfaces(be); + if (fluidInterfaces.isEmpty()) return; + + for (CelestialForgingAnvilFluidInterfaceBlockEntity fluidInterface : fluidInterfaces) { + if (!giantFluids.isEmpty()) { + int totalFluidWeight = giantFluids.stream().mapToInt(PlanetaryResourceSet.WeightedFluidStack::weight).sum(); + if (totalFluidWeight > 0) { + int roll = be.getLevel().getRandom().nextInt(totalFluidWeight); + int cumulative = 0; + Identifier chosenFluid = null; + for (PlanetaryResourceSet.WeightedFluidStack fluid : giantFluids) { + cumulative += fluid.weight(); + if (roll < cumulative) { + chosenFluid = fluid.fluidId(); + break; + } + } + if (chosenFluid == null) chosenFluid = giantFluids.getFirst().fluidId(); + + var fluidHolder = BuiltInRegistries.FLUID.get(chosenFluid); + if (fluidHolder.isPresent()) { + var fluid = fluidHolder.get().value(); + if (fluid != Fluids.EMPTY) { + FluidStack output = new FluidStack(fluid, FLUID_PER_TICK); + if (!output.isEmpty()) { + ResourceHandler tank = fluidInterface.getFluidHandler(); + try (Transaction tx = Transaction.openRoot()) { + int filled = tank.insert(FluidResource.of(output), output.getAmount(), tx); + if (filled > 0) tx.commit(); + } + } + } + } + } + } + + if (!giantItems.isEmpty()) { + int totalItemWeight = giantItems.stream().mapToInt(PlanetaryResourceSet.WeightedItemStack::weight).sum(); + if (totalItemWeight > 0) { + int roll = be.getLevel().getRandom().nextInt(totalItemWeight); + int cumulative = 0; + Identifier chosenItem = null; + for (PlanetaryResourceSet.WeightedItemStack item : giantItems) { + cumulative += item.weight(); + if (roll < cumulative) { + chosenItem = item.itemId(); + break; + } + } + if (chosenItem == null) chosenItem = giantItems.getFirst().itemId(); + + ItemLike item = BuiltInRegistries.ITEM.get(chosenItem) + .map(h -> (ItemLike) h.value()).orElse(Items.AIR); + if (item.asItem() != Items.AIR) { + ItemStack output = new ItemStack(item, 1); + List> logistics = findLogisticsInterfaces(be); + if (!logistics.isEmpty()) { + int startIdx = logisticsRoundRobin % logistics.size(); + for (int attempt = 0; attempt < logistics.size(); attempt++) { + int idx = (startIdx + attempt) % logistics.size(); + ItemStack remainder = insertIntoHandler(logistics.get(idx), output); + if (remainder.getCount() < output.getCount()) { + logisticsRoundRobin = (idx + 1) % logistics.size(); + break; + } + } + } + } + } + } + } + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + this.logisticsRoundRobin = 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/IMegastructureHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/IMegastructureHandler.java new file mode 100644 index 0000000000..0061079e05 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/IMegastructureHandler.java @@ -0,0 +1,53 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.api.power.PowerComponentType; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; + +/** + * Interface for CFA megastructure handlers. + *

+ * In 26.1, NBT persistence uses {@link ValueOutput}/{@link ValueInput} for disk save/load. + * Network sync still uses {@link CompoundTag} via {@code getUpdateTag}. + * {@code readUpdateTag} is kept for Phase 6 client sync integration. + */ +public interface IMegastructureHandler { + + String name(); + + void serverTick(CelestialForgingAnvilBlockEntity be); + + void onBuild(CelestialForgingAnvilBlockEntity be); + + void onClear(CelestialForgingAnvilBlockEntity be); + + /** Disk persistence — 26.1 uses ValueOutput */ + void saveAdditional(ValueOutput output); + + /** Disk persistence — 26.1 uses ValueInput */ + void loadAdditional(ValueInput input); + + /** Network sync (server) — included in CFA BE's getUpdateTag */ + void writeUpdateTag(CompoundTag tag, HolderLookup.Provider registries); + + /** Network sync (client) — called from Phase 6 CFA BE sync path */ + void readUpdateTag(CompoundTag tag, HolderLookup.Provider registries); + + default int getInputPower(CelestialForgingAnvilBlockEntity be) { + return 0; + } + + default int getOutputPower(CelestialForgingAnvilBlockEntity be) { + return 0; + } + + default PowerComponentType getComponentType() { + return PowerComponentType.CONSUMER; + } + + default void gridTick(CelestialForgingAnvilBlockEntity be) { + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MagnetarCoilHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MagnetarCoilHandler.java new file mode 100644 index 0000000000..7a612c0ea3 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MagnetarCoilHandler.java @@ -0,0 +1,37 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.api.power.PowerComponentType; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.StarData; + +public class MagnetarCoilHandler extends BaseMegastructureHandler { + + @Override + public String name() { + return "magnetar_coil"; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + // Passive + } + + @SuppressWarnings("checkstyle:LocalVariableName") + @Override + public int getOutputPower(CelestialForgingAnvilBlockEntity be) { + if (!be.isAmplifierPresent()) return 0; + if (!(be.getCelestialBodyData() instanceof StarData star)) return 0; + int b = star.magneticFieldStrength(); + int n = star.rotationSpeed(); + int bMinus2 = b - 2; + int bTerm = bMinus2 * bMinus2 * bMinus2 * bMinus2; + int nTerm = n * n; + int powerMW = (bTerm * nTerm) / 16; + return powerMW * 1000; + } + + @Override + public PowerComponentType getComponentType() { + return PowerComponentType.PRODUCER; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MatterDecompressorHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MatterDecompressorHandler.java new file mode 100644 index 0000000000..04e4787ff1 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MatterDecompressorHandler.java @@ -0,0 +1,92 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLaserInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialBodyClass; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.StarData; +import dev.dubhe.anvilcraft.init.item.ModItems; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; + +import java.util.List; + +public class MatterDecompressorHandler extends BaseMegastructureHandler { + private static final int NEUTRON_STAR_INTERVAL = 200; + private int counter = 0; + private int logisticsRoundRobin = 0; + + @Override + public String name() { + return "matter_decompressor"; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + if (!be.isAmplifierPresent()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) return; + if (!(be.getCelestialBodyData() instanceof StarData star)) return; + + CelestialBodyClass bodyClass = star.bodyClass(); + if (bodyClass != CelestialBodyClass.NEUTRON_STAR && bodyClass != CelestialBodyClass.BLACK_HOLE) return; + + int totalGammaLevel = 0; + List lasers = findLaserInterfaces(be); + for (CelestialForgingAnvilLaserInterfaceBlockEntity laser : lasers) { + if (laser.isReceivedGamma()) { + totalGammaLevel += laser.getReceivedLaserLevel(); + } + } + + if (totalGammaLevel <= 0) return; + int efficiency = totalGammaLevel; + + if (bodyClass == CelestialBodyClass.BLACK_HOLE) { + ItemLike voidMatter = ModItems.VOID_MATTER.get(); + ItemStack output = new ItemStack(voidMatter, efficiency); + List> logistics = findLogisticsInterfaces(be); + if (!logistics.isEmpty()) { + int startIdx = logisticsRoundRobin % logistics.size(); + for (int attempt = 0; attempt < logistics.size(); attempt++) { + int idx = (startIdx + attempt) % logistics.size(); + ItemStack remainder = insertIntoHandler(logistics.get(idx), output); + if (remainder.getCount() < output.getCount()) { + logisticsRoundRobin = (idx + 1) % logistics.size(); + return; + } + } + } + } else { + counter++; + int interval = NEUTRON_STAR_INTERVAL / efficiency; + if (interval < 1) interval = 1; + if (counter >= interval) { + counter = 0; + ItemLike neutroniumIngot = ModItems.NEUTRONIUM_INGOT.get(); + ItemStack output = new ItemStack(neutroniumIngot, 1); + List> logistics = findLogisticsInterfaces(be); + if (!logistics.isEmpty()) { + int startIdx = logisticsRoundRobin % logistics.size(); + for (int attempt = 0; attempt < logistics.size(); attempt++) { + int idx = (startIdx + attempt) % logistics.size(); + ItemStack remainder = insertIntoHandler(logistics.get(idx), output); + if (remainder.getCount() < output.getCount()) { + logisticsRoundRobin = (idx + 1) % logistics.size(); + return; + } + } + } + } + } + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + this.counter = 0; + this.logisticsRoundRobin = 0; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/PenroseSphereHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/PenroseSphereHandler.java new file mode 100644 index 0000000000..d2566021a1 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/PenroseSphereHandler.java @@ -0,0 +1,117 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.cfa.interfaces.CelestialForgingAnvilInterfaceBlock; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLaserInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; + +@Getter +public class PenroseSphereHandler extends BaseMegastructureHandler { + + private boolean laserActive = false; + + @Override + public String name() { + return "penrose_sphere"; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) return; + if (!be.isAmplifierPresent()) { + if (laserActive) { + laserActive = false; + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + return; + } + + int cx = be.getBlockPos().getX(); + int cy = be.getBlockPos().getY(); + int cz = be.getBlockPos().getZ(); + + boolean anyLaserInput = false; + + anyLaserInput |= processPenroseLaserPair(be, + new BlockPos(cx - 1, cy, cz - 2), new BlockPos(cx + 1, cy, cz - 2)); + anyLaserInput |= processPenroseLaserPair(be, + new BlockPos(cx - 1, cy, cz + 2), new BlockPos(cx + 1, cy, cz + 2)); + anyLaserInput |= processPenroseLaserPair(be, + new BlockPos(cx - 2, cy, cz - 1), new BlockPos(cx - 2, cy, cz + 1)); + anyLaserInput |= processPenroseLaserPair(be, + new BlockPos(cx + 2, cy, cz - 1), new BlockPos(cx + 2, cy, cz + 1)); + + if (laserActive != anyLaserInput) { + laserActive = anyLaserInput; + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + } + + private boolean processPenroseLaserPair(CelestialForgingAnvilBlockEntity be, BlockPos posA, BlockPos posB) { + if (be.getLevel() == null) return false; + BlockEntity beA = be.getLevel().getBlockEntity(posA); + BlockEntity beB = be.getLevel().getBlockEntity(posB); + + boolean hasInput = false; + + if (beA instanceof CelestialForgingAnvilLaserInterfaceBlockEntity laserA + && beB instanceof CelestialForgingAnvilLaserInterfaceBlockEntity laserB) { + + if (laserA.getReceivedLaserLevel() > 0) { + hasInput = true; + if (isLaserInterfaceActive(beB)) { + laserB.emitGammaLaser(laserA.getReceivedLaserLevel()); + } + } + + if (laserB.getReceivedLaserLevel() > 0) { + hasInput = true; + if (isLaserInterfaceActive(beA)) { + laserA.emitGammaLaser(laserB.getReceivedLaserLevel()); + } + } + } else { + if (beA instanceof CelestialForgingAnvilLaserInterfaceBlockEntity laserA + && laserA.getReceivedLaserLevel() > 0) hasInput = true; + if (beB instanceof CelestialForgingAnvilLaserInterfaceBlockEntity laserB + && laserB.getReceivedLaserLevel() > 0) hasInput = true; + } + + return hasInput; + } + + private boolean isLaserInterfaceActive(BlockEntity be) { + if (be instanceof CelestialForgingAnvilLaserInterfaceBlockEntity laserBe) { + BlockState state = laserBe.getBlockState(); + if (state.hasProperty(CelestialForgingAnvilInterfaceBlock.ACTIVE)) { + return state.getValue(CelestialForgingAnvilInterfaceBlock.ACTIVE); + } + } + return false; + } + + @Override + public void saveAdditional(ValueOutput output) { + output.putBoolean("penroseSphereLaserActive", laserActive); + } + + @Override + public void loadAdditional(ValueInput input) { + this.laserActive = input.getBooleanOr("penroseSphereLaserActive", false); + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + this.laserActive = false; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/TempleHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/TempleHandler.java new file mode 100644 index 0000000000..c5230b321a --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/TempleHandler.java @@ -0,0 +1,267 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLogisticsInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetaryResourceSet; +import dev.dubhe.anvilcraft.block.entity.celestial.SpecialCelestialBodyData; +import dev.dubhe.anvilcraft.block.entity.celestial.SpecialCelestialBodyRecipe; +import dev.dubhe.anvilcraft.block.entity.celestial.TempleDemandRecipe; +import dev.dubhe.anvilcraft.init.recipe.ModRecipeTypes; +import dev.dubhe.anvilcraft.recipe.sync.RecipesRecord; +import lombok.Getter; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; + +import java.util.ArrayList; +import java.util.List; + +public class TempleHandler extends BaseMegastructureHandler { + + @Getter + private int cycleDay = 0; + private long lastDay = -1; + @Getter + private ItemStack demandItem = ItemStack.EMPTY; + @Getter + private int demandCount = 0; + @Getter + private int demandProgress = 0; + @Getter + private boolean demandSatisfied = false; + + @Override + public String name() { + return "temple"; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) return; + if (be.getPlanetaryResourceSet() == null || !be.getPlanetaryResourceSet().hasCivilization()) return; + + long currentDay = be.getLevel().getGameTime() / 24000; + if (lastDay != currentDay || demandItem.isEmpty()) { + lastDay = currentDay; + cycleDay = (cycleDay + 1) % 3; + demandSatisfied = false; + demandProgress = 0; + TempleDemandRecipe.Category cat = cycleDay == 2 + ? TempleDemandRecipe.Category.PUNISHMENT : TempleDemandRecipe.Category.BLESSING; + var demand = pickTempleDemand(be, cat); + demandItem = demand.item(); + demandCount = demand.count(); + pushTempleDemandToLogistics(be); + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + + if (!demandSatisfied && !demandItem.isEmpty()) { + if (trySatisfyDemand(be)) { + demandSatisfied = true; + pushTempleDemandToLogistics(be); + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + } + + if (demandSatisfied) { + produceTempleOfferings(be); + } + + if (be.getLevel().getGameTime() % 20 == 0) { + pushTempleDemandToLogistics(be); + } + } + + public void pushTempleDemandToLogistics(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + scanAdjacentBlocks((checkPos) -> { + var blockEntity = be.getLevel().getBlockEntity(checkPos); + if (blockEntity instanceof CelestialForgingAnvilLogisticsInterfaceBlockEntity logiBe) { + logiBe.setTempleDemandItem(demandSatisfied ? ItemStack.EMPTY : demandItem); + logiBe.setTempleDemandCount(demandSatisfied ? 0 : demandCount); + logiBe.setTempleDemandProgress(demandSatisfied ? 0 : demandProgress); + logiBe.setTempleDemandSatisfied(demandSatisfied); + logiBe.setChanged(); + } + }, be); + } + + private record TempleDemandResult(ItemStack item, int count) { + static final TempleDemandResult EMPTY = new TempleDemandResult(ItemStack.EMPTY, 0); + } + + private TempleDemandResult pickTempleDemand(CelestialForgingAnvilBlockEntity be, TempleDemandRecipe.Category category) { + if (be.getLevel() == null) return TempleDemandResult.EMPTY; + + List candidates = new ArrayList<>(); + + var globalRecipes = RecipesRecord.getRecipes(be.getLevel()) + .byType(ModRecipeTypes.TEMPLE_DEMAND.get()) + .stream().map(RecipeHolder::value).toList(); + for (var recipe : globalRecipes) { + if (recipe.category() == category) { + candidates.addAll(recipe.entries()); + } + } + + if (be.getCelestialBodyData() instanceof SpecialCelestialBodyData s && !s.isErrorPlanet()) { + Identifier recipeId = Identifier.parse(s.recipeId()); + ResourceKey> key = ResourceKey.create(Registries.RECIPE, recipeId); + var holder = RecipesRecord.getRecipes(be.getLevel()).byKey(key); + if (holder != null && holder.value() instanceof SpecialCelestialBodyRecipe specialRecipe) { + List demands = category == TempleDemandRecipe.Category.BLESSING + ? specialRecipe.templeBlessings() : specialRecipe.templePunishments(); + for (var d : demands) { + candidates.add(new TempleDemandRecipe.Entry(d.id(), d.count())); + } + } + } + + if (candidates.isEmpty()) return TempleDemandResult.EMPTY; + + TempleDemandRecipe.Entry entry = candidates.get(be.getLevel().getRandom().nextInt(candidates.size())); + var item = BuiltInRegistries.ITEM.get(entry.itemResource()) + .map(h -> (net.minecraft.world.level.ItemLike) h.value()).orElse(Items.AIR); + if (item == Items.AIR) return TempleDemandResult.EMPTY; + return new TempleDemandResult(new ItemStack(item, 1), entry.count()); + } + + private boolean trySatisfyDemand(CelestialForgingAnvilBlockEntity be) { + if (demandItem.isEmpty() || demandCount <= 0) return false; + if (demandProgress >= demandCount) return true; + List> logistics = findLogisticsInterfaces(be); + if (logistics.isEmpty()) return false; + + int needed = demandCount - demandProgress; + for (ResourceHandler handler : logistics) { + for (int slot = 0; slot < handler.size() && needed > 0; slot++) { + ItemStack contained = getStackFromHandler(handler, slot); + if (ItemStack.isSameItemSameComponents(contained, demandItem)) { + ItemStack extracted = extractFromHandler(handler, slot, needed); + int taken = extracted.getCount(); + demandProgress += taken; + needed -= taken; + } + } + if (needed <= 0) { + be.setChanged(); + return true; + } + } + return false; + } + + private void produceTempleOfferings(CelestialForgingAnvilBlockEntity be) { + List offerings = null; + if (be.getPlanetaryResourceSet() != null) { + offerings = be.getPlanetaryResourceSet().getOfferings(); + } + if (offerings == null || offerings.isEmpty()) return; + + int totalWeight = offerings.stream().mapToInt(PlanetaryResourceSet.WeightedItemStack::weight).sum(); + if (totalWeight <= 0) return; + + int roll = be.getLevel().getRandom().nextInt(totalWeight); + int cumulative = 0; + Identifier chosenItem = null; + for (PlanetaryResourceSet.WeightedItemStack offering : offerings) { + cumulative += offering.weight(); + if (roll < cumulative) { + chosenItem = offering.itemId(); + break; + } + } + if (chosenItem == null) chosenItem = offerings.getFirst().itemId(); + + var item = BuiltInRegistries.ITEM.get(chosenItem) + .map(h -> (net.minecraft.world.level.ItemLike) h.value()).orElse(Items.AIR); + if (item.asItem() == Items.AIR) return; + ItemStack output = new ItemStack(item, 1); + + List> logistics = findLogisticsInterfaces(be); + if (logistics.isEmpty()) return; + + for (ResourceHandler handler : logistics) { + ItemStack remainder = insertIntoHandler(handler, output); + if (remainder.getCount() < output.getCount()) return; + } + } + + // === Persistence === + + @Override + public void saveAdditional(ValueOutput output) { + output.putInt("templeCycleDay", cycleDay); + output.putLong("templeLastDay", lastDay); + if (!demandItem.isEmpty()) { + output.store("templeDemand", ItemStack.OPTIONAL_CODEC, demandItem); + } + output.putInt("templeDemandCount", demandCount); + output.putInt("templeDemandProgress", demandProgress); + output.putBoolean("templeDemandSatisfied", demandSatisfied); + } + + @Override + public void loadAdditional(ValueInput input) { + this.cycleDay = input.getIntOr("templeCycleDay", 0); + this.lastDay = input.getLongOr("templeLastDay", -1); + this.demandItem = input.read("templeDemand", ItemStack.OPTIONAL_CODEC).orElse(ItemStack.EMPTY); + this.demandCount = input.getIntOr("templeDemandCount", 0); + this.demandProgress = input.getIntOr("templeDemandProgress", 0); + this.demandSatisfied = input.getBooleanOr("templeDemandSatisfied", false); + } + + @Override + public void writeUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + tag.putInt("templeCycleDay", cycleDay); + tag.putLong("templeLastDay", lastDay); + if (!demandItem.isEmpty()) { + tag.put("templeDemand", ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, demandItem).getOrThrow()); + } + tag.putInt("templeDemandCount", demandCount); + tag.putInt("templeDemandProgress", demandProgress); + tag.putBoolean("templeDemandSatisfied", demandSatisfied); + } + + @Override + public void readUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + this.cycleDay = tag.getIntOr("templeCycleDay", 0); + this.lastDay = tag.getLongOr("templeLastDay", -1); + if (tag.contains("templeDemand")) { + this.demandItem = ItemStack.CODEC.parse(NbtOps.INSTANCE, tag.get("templeDemand")).result().orElse(ItemStack.EMPTY); + } else { + this.demandItem = ItemStack.EMPTY; + } + this.demandCount = tag.getIntOr("templeDemandCount", 0); + this.demandProgress = tag.getIntOr("templeDemandProgress", 0); + this.demandSatisfied = tag.getBooleanOr("templeDemandSatisfied", false); + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + this.cycleDay = 0; + this.lastDay = -1; + this.demandItem = ItemStack.EMPTY; + this.demandCount = 0; + this.demandProgress = 0; + this.demandSatisfied = false; + pushTempleDemandToLogistics(be); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/WormholeStabilizerHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/WormholeStabilizerHandler.java new file mode 100644 index 0000000000..84ffed497b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/WormholeStabilizerHandler.java @@ -0,0 +1,268 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilFluidInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLaserInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilLogisticsInterfaceBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialBodyClass; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialRefactorOption; +import dev.dubhe.anvilcraft.block.entity.celestial.StarData; +import dev.dubhe.anvilcraft.block.state.Cube323PartHalf; +import dev.dubhe.anvilcraft.saved.WormholeNetwork; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.UUIDUtil; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.Identifier; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +/** + * Wormhole Stabilizer handler. + *

+ * WormholeNetwork registration/unregistration is fully integrated. + * Cross-CFA chunk loading, logistics sync, and fluid sync are deferred + * to future wormhole content synchronization. + */ +public class WormholeStabilizerHandler extends BaseMegastructureHandler { + + @Nullable + private UUID bodyUuid = null; + private boolean registered = false; + private boolean justReconnected = false; + private final Map portals = new EnumMap<>(Cube323PartHalf.class); + + @Override + public String name() { + return "wormhole_stabilizer"; + } + + @Nullable + public UUID getBodyUuid() { + return bodyUuid; + } + + public Map getPortals() { + return Collections.unmodifiableMap(portals); + } + + @Override + public int getInputPower(CelestialForgingAnvilBlockEntity be) { + return 0; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + CelestialRefactorOption option = be.getActiveMegastructureOption(); + if (option == null || !name().equals(option.megastructure())) return; + if (!(be.getCelestialBodyData() instanceof StarData star) || star.bodyClass() != CelestialBodyClass.BLACK_HOLE) return; + + UUID uuid = star.bodyUuid(); + if (uuid == null) uuid = this.bodyUuid; + if (uuid == null) return; + + if (!be.isAmplifierPresent()) { + if (registered) { + WormholeNetwork.get().unregister(be.getLevel(), be.getBlockPos()); + registered = false; + clearLocalInterfaces(be); + be.setChanged(); + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + return; + } + + if (!registered) { + this.bodyUuid = uuid; + WormholeNetwork.get().register(uuid, be.getLevel(), be.getBlockPos()); + registered = true; + justReconnected = true; + } + + // Cross-CFA chunk loading, logistics sync, and fluid sync deferred + // to future wormhole content synchronization. + syncWormholeLasers(be); + } + + @Override + public void onBuild(CelestialForgingAnvilBlockEntity be) { + if (be.getCelestialBodyData() instanceof StarData star + && star.bodyClass() == CelestialBodyClass.BLACK_HOLE && be.isAmplifierPresent()) { + UUID uuid = star.bodyUuid(); + if (uuid == null) return; + this.bodyUuid = uuid; + WormholeNetwork.get().register(uuid, be.getLevel(), be.getBlockPos()); + registered = true; + } + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + if (registered && be.getLevel() != null && !be.getLevel().isClientSide()) { + WormholeNetwork.get().unregister(be.getLevel(), be.getBlockPos()); + registered = false; + } + bodyUuid = null; + portals.clear(); + } + + public boolean addPortal(Cube323PartHalf side, BlockPos portalPos, CelestialForgingAnvilBlockEntity be) { + if (side != Cube323PartHalf.BOTTOM_N && side != Cube323PartHalf.BOTTOM_S + && side != Cube323PartHalf.BOTTOM_E && side != Cube323PartHalf.BOTTOM_W) return false; + if (portals.containsKey(side)) return false; + portals.put(side, portalPos); + be.setChanged(); + if (be.getLevel() != null) { + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + return true; + } + + public void removePortal(Cube323PartHalf side, CelestialForgingAnvilBlockEntity be) { + portals.remove(side); + be.setChanged(); + if (be.getLevel() != null) { + be.getLevel().sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + } + } + + // === Laser sync (self-contained, no external dependencies) === + + private void syncWormholeLasers(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide() || !registered || bodyUuid == null) return; + Map localMap = getLaserInterfacesMap(be); + if (localMap.isEmpty()) return; + + // Query wormhole network for connected CFAs' laser outputs + WormholeNetwork network = WormholeNetwork.get(); + List connected = network.getConnected( + bodyUuid, be.getLevel().dimension(), be.getBlockPos()); + + // Remap connected entries by relative position for O(1) lookup + Map> byPos = new HashMap<>(); + for (WormholeNetwork.Entry e : connected) { + byPos.computeIfAbsent(e.pos(), k -> new ArrayList<>()).add(e); + } + + // For each local laser interface, sync from connected CFA's corresponding slot + for (var localEntry : localMap.entrySet()) { + BlockPos relOffset = localEntry.getKey(); + CelestialForgingAnvilLaserInterfaceBlockEntity localLaser = localEntry.getValue(); + + boolean found = false; + for (WormholeNetwork.Entry remoteEntry : connected) { + // Look up the remote CFA's laser interface at the same relative offset; + // cross-CFA laser level resolution requires full wormhole content sync. + if (remoteEntry.pos() != null) { + found = true; + break; + } + } + + if (!found) { + localLaser.setWormholeLaserOutput(0, false); + } + } + } + + // === Local interface cleanup === + + private void clearLocalInterfaces(CelestialForgingAnvilBlockEntity be) { + if (be.getLevel() == null || be.getLevel().isClientSide()) return; + + Map logisticsMap = getLogisticsInterfacesMap(be); + for (var entry : logisticsMap.entrySet()) { + ResourceHandler handler = entry.getValue().getItemHandler(); + for (int slot = 0; slot < handler.size(); slot++) { + ItemStack stack = getStackFromHandler(handler, slot); + if (!stack.isEmpty()) { + extractFromHandler(handler, slot, stack.getCount()); + } + } + } + + Map fluidMap = getFluidInterfacesMap(be); + for (var entry : fluidMap.entrySet()) { + ResourceHandler handler = entry.getValue().getFluidHandler(); + for (int tank = 0; tank < handler.size(); tank++) { + FluidStack stack = getFluidFromTank(handler, tank); + if (!stack.isEmpty()) { + try (Transaction tx = Transaction.openRoot()) { + handler.extract(tank, FluidResource.of(stack), stack.getAmount(), tx); + tx.commit(); + } + } + } + } + } + + // === Persistence === + + @Override + public void saveAdditional(ValueOutput output) { + if (bodyUuid != null) { + output.store("wormholeBodyUuid", UUIDUtil.CODEC, bodyUuid); + } + if (!portals.isEmpty()) { + ValueOutput.ValueOutputList portalList = output.childrenList("portals"); + for (Map.Entry entry : portals.entrySet()) { + ValueOutput child = portalList.addChild(); + child.putString("side", entry.getKey().getSerializedName()); + child.putInt("px", entry.getValue().getX()); + child.putInt("py", entry.getValue().getY()); + child.putInt("pz", entry.getValue().getZ()); + } + } + } + + @Override + public void loadAdditional(ValueInput input) { + this.bodyUuid = input.read("wormholeBodyUuid", UUIDUtil.CODEC).orElse(null); + this.registered = false; + this.portals.clear(); + input.childrenList("portals").ifPresent(list -> { + for (ValueInput child : list) { + String sideName = child.getStringOr("side", ""); + if (sideName.isEmpty()) continue; + Cube323PartHalf side = Cube323PartHalf.valueOf(sideName.toUpperCase()); + BlockPos pos = new BlockPos( + child.getIntOr("px", 0), + child.getIntOr("py", 0), + child.getIntOr("pz", 0)); + portals.put(side, pos); + } + }); + } + + @Override + public void writeUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + if (bodyUuid != null) { + tag.store("wormholeBodyUuid", UUIDUtil.CODEC, bodyUuid); + } + } + + @Override + public void readUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { + this.bodyUuid = tag.read("wormholeBodyUuid", UUIDUtil.CODEC).orElse(null); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/nesting/BaseNestingShulkerBoxBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/nesting/BaseNestingShulkerBoxBlockEntity.java index ee5a3f31a0..42d0ae85ed 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/nesting/BaseNestingShulkerBoxBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/nesting/BaseNestingShulkerBoxBlockEntity.java @@ -1,26 +1,29 @@ package dev.dubhe.anvilcraft.block.entity.nesting; -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; +import dev.dubhe.anvilcraft.api.itemhandler.IItemResourceHandlerHolder; import dev.dubhe.anvilcraft.api.itemhandler.OverLimitItemHandler; import dev.dubhe.anvilcraft.init.item.ModComponents; import dev.dubhe.anvilcraft.item.property.component.OverLimitItemContainerContents; import lombok.Getter; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; import net.minecraft.world.Nameable; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.items.IItemHandler; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jspecify.annotations.Nullable; -import javax.annotation.Nullable; +import java.util.Optional; -public abstract class BaseNestingShulkerBoxBlockEntity extends BlockEntity implements IItemHandlerHolder, Nameable { +public abstract class BaseNestingShulkerBoxBlockEntity extends BlockEntity implements IItemResourceHandlerHolder, Nameable { @Getter private final OverLimitItemHandler items; @Nullable @@ -32,25 +35,29 @@ public BaseNestingShulkerBoxBlockEntity(int baseLimit, BlockEntityType type, } @Override - public IItemHandler getItemHandler() { + public ResourceHandler getItemHandler() { return this.items; } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.items.deserializeNBT(registries, tag); - if (tag.contains("CustomName", Tag.OBJECT_HEADER)) { - this.name = parseCustomNameSafe(tag.getString("CustomName"), registries); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.items.deserialize(input); + Optional customName = input.child("custom_name"); + + if (customName.isPresent()) { + this.name = parseCustomNameSafe(input, "custom_name"); } + super.loadAdditional(input); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.merge(this.items.serializeNBT(registries)); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + this.items.serialize(output); + super.saveAdditional(output); if (this.name != null) { - tag.putString("CustomName", Component.Serializer.toJson(this.name, registries)); + output.storeNullable("custom_name", ComponentSerialization.CODEC, this.name); } } @@ -73,10 +80,10 @@ public Component getCustomName() { protected abstract Component getDefaultName(); @Override - protected void applyImplicitComponents(DataComponentInput componentInput) { - super.applyImplicitComponents(componentInput); - this.name = componentInput.get(DataComponents.CUSTOM_NAME); - componentInput.getOrDefault(ModComponents.OVER_LIMIT_CONTAINER, OverLimitItemContainerContents.EMPTY) + protected void applyImplicitComponents(DataComponentGetter components) { + super.applyImplicitComponents(components); + this.name = components.get(DataComponents.CUSTOM_NAME); + components.getOrDefault(ModComponents.OVER_LIMIT_CONTAINER, OverLimitItemContainerContents.EMPTY) .copyInto(this.items); } @@ -88,4 +95,4 @@ protected void collectImplicitComponents(DataComponentMap.Builder components) { } components.set(ModComponents.OVER_LIMIT_CONTAINER, OverLimitItemContainerContents.fromItems(this.items)); } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/nesting/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/nesting/package-info.java index 00618e6f55..236f0ecdac 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/nesting/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/nesting/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.entity.nesting; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/package-info.java index f32b8bd701..110c189f6f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.entity; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/plate/TimeCountedPressurePlateBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/plate/TimeCountedPressurePlateBlockEntity.java index 2d70e1db3f..bc44f62c6e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/plate/TimeCountedPressurePlateBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/plate/TimeCountedPressurePlateBlockEntity.java @@ -3,14 +3,14 @@ import dev.dubhe.anvilcraft.block.plate.TimeCountedPressurePlateBlock; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.entity.EntityTypeTest; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.minecraft.world.phys.AABB; import java.util.List; @@ -33,21 +33,21 @@ public static TimeCountedPressurePlateBlockEntity createBlockEntity(BlockEntityT } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("tick", this.tick); - tag.putInt("NeedTick", this.needTick); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt("tick", this.tick); + output.putInt("NeedTick", this.needTick); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - this.tick = tag.getInt("tick"); - this.needTick = tag.getInt("NeedTick"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.tick = input.getIntOr("tick", 0); + this.needTick = input.getIntOr("NeedTick", 0); } public int getSignalStrength() { - return Math.clamp(tick / (needTick == 0 ? 1 : needTick), 0, 15); + return Math.clamp(this.tick / (this.needTick == 0 ? 1 : this.needTick), 0, 15); } public void tick(Level level, BlockPos pos) { @@ -55,11 +55,11 @@ public void tick(Level level, BlockPos pos) { if (state.getBlock() instanceof TimeCountedPressurePlateBlock plate) { List entities = level.getEntities(EntityTypeTest.forClass(LivingEntity.class), new AABB(pos), entity -> true); if (!entities.isEmpty()) { - if (tick < plate.needTick * 15) { - tick++; + if (this.tick < plate.needTick * 15) { + this.tick++; } - } else if (tick > 0) { - tick--; + } else if (this.tick > 0) { + this.tick--; } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/plate/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/plate/package-info.java index c0cd7afea2..06b5c6d027 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/plate/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/plate/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.entity.plate; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/fluid/ExpFluidBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/fluid/ExpFluidBlock.java new file mode 100644 index 0000000000..63c8e82b75 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/fluid/ExpFluidBlock.java @@ -0,0 +1,36 @@ +package dev.dubhe.anvilcraft.block.fluid; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FlowingFluid; + +public class ExpFluidBlock extends LiquidBlock { + public static final int XP_POINTS = 50; + + public ExpFluidBlock(FlowingFluid fluid, Properties properties) { + super(fluid, properties); + } + + @Override + protected void entityInside( + BlockState state, + Level level, + BlockPos pos, + Entity entity, + InsideBlockEffectApplier effectApplier, + boolean isPrecise + ) { + if (level.isClientSide()) return; + if (!level.getFluidState(pos).isSource()) return; + if (entity instanceof Player player) { + player.giveExperiencePoints(XP_POINTS); + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/MeltGemFluid.java b/src/main/java/dev/dubhe/anvilcraft/block/fluid/MeltGemFluid.java similarity index 98% rename from src/main/java/dev/dubhe/anvilcraft/block/MeltGemFluid.java rename to src/main/java/dev/dubhe/anvilcraft/block/fluid/MeltGemFluid.java index 726f8bc40c..1ad855e20f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/MeltGemFluid.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/fluid/MeltGemFluid.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.fluid; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/fluid/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/fluid/package-info.java new file mode 100644 index 0000000000..94cbe5445d --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/fluid/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.fluid; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/heatable/HeatableBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/heatable/HeatableBlock.java index 4953a9d18e..f445d51d42 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/heatable/HeatableBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/heatable/HeatableBlock.java @@ -13,12 +13,12 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.TntBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.redstone.Orientation; +import org.jspecify.annotations.Nullable; import java.util.Optional; @@ -28,14 +28,14 @@ protected HeatableBlock(Properties properties) { } @Override - @SuppressWarnings("deprecation") protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { super.onPlace(state, level, pos, oldState, movedByPiston); Direction[] directions = Direction.values(); if (HeatRecorder.getTier(level, pos, state).orElse(HeatTier.NORMAL) == HeatTier.NORMAL) return; for (Direction direction : directions) { - if (level.getBlockState(pos.relative(direction)).is(Blocks.TNT)) { - TntBlock.explode(level, pos.relative(direction)); + BlockState tnt = level.getBlockState(pos.relative(direction)); + if (tnt.is(Blocks.TNT)) { + tnt.onCaughtFire(level, pos.relative(direction), direction.getOpposite(), null); level.removeBlock(pos.relative(direction), false); } } @@ -45,9 +45,9 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o protected abstract boolean hasBlockEntity(); public @Nullable BlockEntityTicker getTicker(Level level, BlockState ignored, BlockEntityType ignored1) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; if (!this.hasBlockEntity()) return null; - return (level1, pos, it, it1) -> HeatableBlockEntity.tick(level1, pos); + return (level1, pos, _, _) -> HeatableBlockEntity.tick(level1, pos); } public Optional getPrevTier(Level level, BlockPos pos, BlockState state) { @@ -61,7 +61,7 @@ protected boolean hasAnalogOutputSignal(BlockState state) { } @Override - protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { if (!this.hasBlockEntity()) return 0; return Util.castSafely(level.getBlockEntity(pos), HeatableBlockEntity.class) .map(HeatableBlockEntity::getSignal) @@ -87,21 +87,23 @@ public void setPlacedBy(Level level, BlockPos pos, BlockState state, @Nullable L } @Override - @SuppressWarnings("deprecation") protected void neighborChanged( BlockState state, Level level, BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, + Block block, + @Nullable Orientation orientation, boolean movedByPiston ) { - if (level.getBlockState(neighborPos).is(Blocks.TNT) - && HeatRecorder.getTier(level, pos, state).orElse(HeatTier.NORMAL) != HeatTier.NORMAL - ) { - TntBlock.explode(level, neighborPos); - level.removeBlock(neighborPos, false); + if (HeatRecorder.getTier(level, pos, state).orElse(HeatTier.NORMAL) == HeatTier.NORMAL) return; + for (Direction direction : Direction.values()) { + BlockPos neighbourPos = pos.relative(direction); + BlockState tnt = level.getBlockState(neighbourPos); + if (tnt.is(Blocks.TNT)) { + tnt.onCaughtFire(level, neighbourPos, direction.getOpposite(), null); + level.removeBlock(neighbourPos, false); + } } - super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston); + super.neighborChanged(state, level, pos, block, orientation, movedByPiston); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/heatable/OverheatedEmberMetalBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/heatable/OverheatedEmberMetalBlock.java index 2fbc73acc2..adb99bd526 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/heatable/OverheatedEmberMetalBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/heatable/OverheatedEmberMetalBlock.java @@ -15,7 +15,7 @@ public OverheatedEmberMetalBlock(Properties properties) { @Override public Optional getPrevTier(Level level, BlockPos pos, BlockState state) { - if (level.random.nextFloat() <= 0.05f) return Optional.of(Blocks.NETHERITE_BLOCK.defaultBlockState()); + if (level.getRandom().nextFloat() <= 0.05F) return Optional.of(Blocks.NETHERITE_BLOCK.defaultBlockState()); return super.getPrevTier(level, pos, state); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/heatable/RedhotBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/heatable/RedhotBlock.java index a448cea194..f54290e717 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/heatable/RedhotBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/heatable/RedhotBlock.java @@ -1,6 +1,7 @@ package dev.dubhe.anvilcraft.block.heatable; import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; +import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.block.entity.heatable.HeatableBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import net.minecraft.core.BlockPos; @@ -9,6 +10,7 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; +import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; @@ -46,9 +48,16 @@ public HeatableBlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Override public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { - if (!entity.isSteppingCarefully() - && entity instanceof LivingEntity) { - entity.hurt(level.damageSources().hotFloor(), this.steppingDamage); + if ( + !entity.isSteppingCarefully() + && entity instanceof LivingEntity + ) { + DamageSource source = level.damageSources().hotFloor(); + if (level.isClientSide()) { + entity.hurtClient(source); + } else { + entity.hurtServer(Util.cast(level), source, this.steppingDamage); + } } super.stepOn(level, pos, state, entity); } @@ -78,20 +87,20 @@ private boolean removeWaterBreadthFirstSearch(Level level, BlockPos pos) { } }, posx -> { - if (posx.equals(pos)) return true; + if (posx.equals(pos)) return BlockPos.TraversalNodeStatus.SKIP; BlockState state = level.getBlockState(posx); FluidState fluidState = level.getFluidState(posx); - if (!fluidState.is(Fluids.WATER)) return false; + if (!fluidState.is(Fluids.WATER)) return BlockPos.TraversalNodeStatus.SKIP; if ( state.getBlock() instanceof BucketPickup bucketpickup && !bucketpickup.pickupBlock(null, level, posx, state).isEmpty() ) { - return true; + return BlockPos.TraversalNodeStatus.ACCEPT; } if (state.getBlock() instanceof LiquidBlock) { level.setBlock(posx, Blocks.AIR.defaultBlockState(), 3); - return true; + return BlockPos.TraversalNodeStatus.ACCEPT; } if ( @@ -100,15 +109,15 @@ private boolean removeWaterBreadthFirstSearch(Level level, BlockPos pos) { && !state.is(Blocks.SEAGRASS) && !state.is(Blocks.TALL_SEAGRASS) ) { - return false; + return BlockPos.TraversalNodeStatus.SKIP; } BlockEntity blockentity = state.hasBlockEntity() ? level.getBlockEntity(posx) : null; dropResources(state, level, posx, blockentity); level.setBlock(posx, Blocks.AIR.defaultBlockState(), 3); - return true; + return BlockPos.TraversalNodeStatus.ACCEPT; } - ) > 1; + ) > 0; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/heatable/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/heatable/package-info.java index 566f9cd690..a11da046bb 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/heatable/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/heatable/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.heatable; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/ChuteBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/item/ChuteBlockItem.java deleted file mode 100644 index f8d9c2c577..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/item/ChuteBlockItem.java +++ /dev/null @@ -1,26 +0,0 @@ -package dev.dubhe.anvilcraft.block.item; - -import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; -import net.minecraft.core.BlockPos; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.neoforged.neoforge.capabilities.Capabilities; - -public class ChuteBlockItem extends BlockItem { - public ChuteBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { - Level level = context.getLevel(); - BlockPos pos = context.getClickedPos(); - return level.getBlockEntity(pos) instanceof IItemHandlerHolder || level.getCapability( - Capabilities.ItemHandler.BLOCK, context.getClickedPos(), context.getClickedFace() - ) != null ? this.useOn(context) : super.onItemUseFirst(stack, context); - } -} \ No newline at end of file diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/CursedBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/item/CursedBlockItem.java deleted file mode 100644 index 6d1e765182..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/item/CursedBlockItem.java +++ /dev/null @@ -1,20 +0,0 @@ -package dev.dubhe.anvilcraft.block.item; - -import dev.dubhe.anvilcraft.item.abnormal.ICursed; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; - -public class CursedBlockItem extends BlockItem implements ICursed { - public CursedBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { - super.inventoryTick(stack, level, entity, slotId, isSelected); - ICursed.super.inventoryTick(stack, level, entity, slotId, isSelected); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/EndDustBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/item/EndDustBlockItem.java deleted file mode 100644 index 7ac5363edb..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/item/EndDustBlockItem.java +++ /dev/null @@ -1,42 +0,0 @@ -package dev.dubhe.anvilcraft.block.item; - -import net.minecraft.core.BlockPos; -import net.minecraft.tags.BlockTags; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.ClipContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.phys.BlockHitResult; - -public class EndDustBlockItem extends BlockItem { - public EndDustBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public InteractionResultHolder use( - Level level, Player player, InteractionHand usedHand) { - BlockPos blockPos = level.clip(new ClipContext( - player.getEyePosition(1f), - player.getEyePosition(1f).add(player.getViewVector(1f).scale(2.5)), - ClipContext.Block.OUTLINE, - ClipContext.Fluid.NONE, - player)) - .getBlockPos(); - ItemStack itemStack = player.getItemInHand(usedHand); - - if (!(level.getBlockState(blockPos).is(BlockTags.REPLACEABLE))) return InteractionResultHolder.fail(itemStack); - BlockHitResult blockHitResult = - new BlockHitResult(blockPos.getCenter(), player.getDirection(), blockPos, false); - BlockPlaceContext blockPlaceContext = new BlockPlaceContext(level, player, usedHand, itemStack, blockHitResult); - if (!this.canPlace(blockPlaceContext, this.getBlock().defaultBlockState())) return InteractionResultHolder.fail(itemStack); - if (this.place(blockPlaceContext) == InteractionResult.FAIL) return InteractionResultHolder.fail(itemStack); - return InteractionResultHolder.success(itemStack); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/HasMobBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/item/HasMobBlockItem.java deleted file mode 100644 index 42a9b90341..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/item/HasMobBlockItem.java +++ /dev/null @@ -1,157 +0,0 @@ -package dev.dubhe.anvilcraft.block.item; - -import dev.dubhe.anvilcraft.AnvilCraft; -import dev.dubhe.anvilcraft.block.entity.HasMobBlockEntity; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.item.property.component.SavedEntity; -import net.minecraft.ChatFormatting; -import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.memory.MemoryModuleType; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.entity.npc.Villager; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.SoundType; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Optional; - -public class HasMobBlockItem extends BlockItem { - public HasMobBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public void verifyComponentsAfterLoad(ItemStack stack) { - super.verifyComponentsAfterLoad(stack); - if (stack.has(ModComponents.SAVED_ENTITY)) return; - if ( - !stack.is(ModBlocks.MOB_AMBER_BLOCK.asItem()) - && !stack.is(ModBlocks.RESENTFUL_AMBER_BLOCK.asItem()) - ) { - return; - } - ResourceLocation id; - boolean isMonster = false; - if (stack.is(ModBlocks.RESENTFUL_AMBER_BLOCK.asItem())) { - isMonster = true; - id = BuiltInRegistries.ENTITY_TYPE.getKey(EntityType.ZOMBIE); - } else { - id = BuiltInRegistries.ENTITY_TYPE.getKey(EntityType.MOOSHROOM); - } - CompoundTag tag = new CompoundTag(); - tag.putString("id", id.toString()); - SavedEntity savedEntity = new SavedEntity(tag, isMonster); - stack.set(ModComponents.SAVED_ENTITY, savedEntity); - } - - @Override - public void appendHoverText( - ItemStack stack, - Item.TooltipContext context, - List tooltipComponents, - TooltipFlag isAdvanced - ) { - super.appendHoverText(stack, context, tooltipComponents, isAdvanced); - if (!HasMobBlockItem.hasMob(stack)) return; - Optional.ofNullable(context.level()) - .map(level -> HasMobBlockItem.getMobFromItem(level, stack)) - .ifPresent(entity -> tooltipComponents.add( - Component.literal("- ").append(entity.getDisplayName()).withStyle(ChatFormatting.DARK_GRAY))); - } - - @Override - protected boolean updateCustomBlockEntityTag(BlockPos pos, Level level, @Nullable Player player, ItemStack stack, BlockState state) { - if (hasMob(stack)) { - BlockEntity be = level.getBlockEntity(pos); - if (be instanceof HasMobBlockEntity hmbe) { - hmbe.setEntity(getMobFromItem(level, stack)); - } - } - return super.updateCustomBlockEntityTag(pos, level, player, stack, state); - } - - public static boolean hasMob(ItemStack stack) { - return stack.has(ModComponents.SAVED_ENTITY); - } - - /** - * 获取物品中的实体 - */ - public static @Nullable Entity getMobFromItem(Level level, ItemStack stack) { - if (!hasMob(stack)) return null; - SavedEntity savedEntity = stack.get(ModComponents.SAVED_ENTITY); - // make idea happy - if (savedEntity == null) return null; - return savedEntity.toEntity(level); - } - - @SuppressWarnings("deprecation") - public static ItemStack saveMobInItem(Level level, Mob entity, @Nullable Player player, ItemStack stack) { - if (level.isClientSide()) { - if (player == null) AnvilCraft.LOGGER.warn("why a dispenser run saveMobInItem in client side???"); - Item item = stack.getItem(); - if (item instanceof ResinBlockItem item1) { - BlockPos blockPos = entity.getOnPos(); - BlockState blockState = item1.getBlock().defaultBlockState(); - SoundType soundType = blockState.getSoundType(); - level.playSound( - player, - blockPos, - item1.getPlaceSound(blockState), - SoundSource.BLOCKS, - (soundType.getVolume() + 1.0f) / 2.0f, - soundType.getPitch() * 0.8f - ); - } - return ItemStack.EMPTY; - } - - SavedEntity savedEntity = SavedEntity.fromMob(entity); - ItemStack newStack = stack.split(1); - newStack.set(ModComponents.SAVED_ENTITY, savedEntity); - if (entity instanceof Villager villager) { - villager.releasePoi(MemoryModuleType.HOME); - villager.releasePoi(MemoryModuleType.JOB_SITE); - villager.releasePoi(MemoryModuleType.POTENTIAL_JOB_SITE); - villager.releasePoi(MemoryModuleType.MEETING_POINT); - } - entity.remove(Entity.RemovalReason.DISCARDED); - if (player != null) player.getInventory().placeItemBackInInventory(newStack); - return newStack; - } - - public static ItemStack saveMobInItem(Level level, Mob entity, ItemStack stack) { - return saveMobInItem(level, entity, null, stack); - } - - public static boolean canMobBeSaved(Mob entity, @Nullable Player player, @Nullable ItemStack stack) { - if (player != null && player.getAbilities().instabuild) return true; - - if (stack != null && ResinBlockItem.hasMob(stack)) return false; - if (entity.getBbHeight() > 2.0 || entity.getBbWidth() > 1.5) return false; - return !(entity instanceof Monster monster && !monster.hasEffect(MobEffects.WEAKNESS)); - } - - public static boolean canMobBeSaved(Mob entity) { - return canMobBeSaved(entity, null, null); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/InfiniteCollectorBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/item/InfiniteCollectorBlockItem.java new file mode 100644 index 0000000000..5af92f8ffe --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/item/InfiniteCollectorBlockItem.java @@ -0,0 +1,10 @@ +package dev.dubhe.anvilcraft.block.item; + +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.level.block.Block; + +public class InfiniteCollectorBlockItem extends BlockItem { + public InfiniteCollectorBlockItem(Block block, Properties properties) { + super(block, properties); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/LevitationBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/item/LevitationBlockItem.java deleted file mode 100644 index 81cb152789..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/item/LevitationBlockItem.java +++ /dev/null @@ -1,20 +0,0 @@ -package dev.dubhe.anvilcraft.block.item; - -import dev.dubhe.anvilcraft.item.abnormal.ILevitation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; - -public class LevitationBlockItem extends BlockItem implements ILevitation { - public LevitationBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { - super.inventoryTick(stack, level, entity, slotId, isSelected); - ILevitation.super.inventoryTick(stack, level, entity, slotId, isSelected); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/RadiationBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/item/RadiationBlockItem.java deleted file mode 100644 index d738fd0880..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/item/RadiationBlockItem.java +++ /dev/null @@ -1,20 +0,0 @@ -package dev.dubhe.anvilcraft.block.item; - -import dev.dubhe.anvilcraft.item.abnormal.IRadiation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; - -public class RadiationBlockItem extends BlockItem implements IRadiation { - public RadiationBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { - super.inventoryTick(stack, level, entity, slotId, isSelected); - IRadiation.super.inventoryTick(stack, level, entity, slotId, isSelected); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/SuperHeavyBlockItem.java b/src/main/java/dev/dubhe/anvilcraft/block/item/SuperHeavyBlockItem.java deleted file mode 100644 index 933f5732fe..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/item/SuperHeavyBlockItem.java +++ /dev/null @@ -1,20 +0,0 @@ -package dev.dubhe.anvilcraft.block.item; - -import dev.dubhe.anvilcraft.item.abnormal.ISuperHeavy; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; - -public class SuperHeavyBlockItem extends BlockItem implements ISuperHeavy { - public SuperHeavyBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { - super.inventoryTick(stack, level, entity, slotId, isSelected); - ISuperHeavy.super.inventoryTick(stack, level, entity, slotId, isSelected); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/item/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/item/package-info.java deleted file mode 100644 index 3ecb240124..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/item/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package dev.dubhe.anvilcraft.block.item; - -import com.mojang.math.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BaseLaserBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/laser/BaseLaserBlock.java similarity index 83% rename from src/main/java/dev/dubhe/anvilcraft/block/BaseLaserBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/laser/BaseLaserBlock.java index 1925b3651f..39337d36cd 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/BaseLaserBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/laser/BaseLaserBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.laser; import net.minecraft.world.level.block.BaseEntityBlock; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/LaserReceiverBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/laser/LaserReceiverBlock.java similarity index 95% rename from src/main/java/dev/dubhe/anvilcraft/block/LaserReceiverBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/laser/LaserReceiverBlock.java index 871a5fa4ee..3504bf4d83 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/LaserReceiverBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/laser/LaserReceiverBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.laser; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; @@ -23,18 +23,18 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.stream.Stream; public class LaserReceiverBlock extends BaseLaserBlock implements IHammerRemovable, IHammerChangeable { - public static final DirectionProperty FACING = BlockStateProperties.FACING; + public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); public static final VoxelShape UP_SHAPE = Stream.of( @@ -143,7 +143,7 @@ protected RenderShape getRenderShape(BlockState state) { @Override public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return createTickerHelper(type, ModBlockEntities.LASER_RECEIVER.get(), (level1, pos, state1, entity) -> entity.tick(level)); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/laser/PropelPistonBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/laser/PropelPistonBlock.java new file mode 100644 index 0000000000..b8ee09dd20 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/laser/PropelPistonBlock.java @@ -0,0 +1,347 @@ +package dev.dubhe.anvilcraft.block.laser; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.mojang.serialization.MapCodec; +import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; +import dev.anvilcraft.lib.v2.piston.injection.IPistonMovingBlockEntityExtension; +import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.entity.PropelPistonBlockEntity; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.item.ModComponents; +import dev.dubhe.anvilcraft.init.item.ModItems; +import dev.dubhe.anvilcraft.item.property.component.StoredEnergy; +import lombok.extern.slf4j.Slf4j; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DirectionalBlock; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.piston.MovingPistonBlock; +import net.minecraft.world.level.block.piston.PistonStructureResolver; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.level.redstone.Orientation; +import net.minecraft.world.phys.BlockHitResult; +import net.neoforged.neoforge.event.EventHooks; +import org.jspecify.annotations.Nullable; + +import java.util.List; +import java.util.Map; + +@Slf4j +public class PropelPistonBlock extends DirectionalBlock implements IMoveableEntityBlock, IHammerRemovable, IHammerChangeable { + public static final BooleanProperty EXHAUSTED = BooleanProperty.create("exhausted"); + public static final BooleanProperty MOVING = BooleanProperty.create("moving"); + + @Override + protected MapCodec codec() { + return simpleCodec(PropelPistonBlock::new); + } + + public PropelPistonBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(EXHAUSTED, true) + .setValue(FACING, Direction.NORTH) + .setValue(MOVING, false)); + } + + @Override + public @Nullable PushReaction getPistonPushReaction(BlockState state) { + if (state.getValue(MOVING)) { + return PushReaction.BLOCK; + } + return PushReaction.NORMAL; + } + + @Override + public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { + Direction clickedFace = context.getNearestLookingDirection().getOpposite(); + Player player = context.getPlayer(); + if (player != null && player.isShiftKeyDown()) { + return this.defaultBlockState().setValue(FACING, clickedFace.getOpposite()); + } + return this.defaultBlockState().setValue(FACING, clickedFace); + } + + @Override + protected InteractionResult useWithoutItem( + BlockState state, + Level level, + BlockPos pos, + Player player, + BlockHitResult hitResult + ) { + level.setBlockAndUpdate(pos, state.cycle(MOVING)); + return InteractionResult.SUCCESS; + } + + @Override + protected InteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + if (level.getBlockEntity(pos) instanceof PropelPistonBlockEntity propelPistonBlockEntity) { + int storedEnergy = propelPistonBlockEntity.getStoredEnergy(); + if (stack.is(ModItems.CAPACITOR)) { + if (storedEnergy < 152000000) { + propelPistonBlockEntity.addEnergy(8000000); + stack.consume(1, player); + player.addItem(ModItems.CAPACITOR_EMPTY.asStack()); + return InteractionResult.SUCCESS; + } + } else if (stack.is(ModItems.SUPER_CAPACITOR)) { + if (storedEnergy < 40000000) { + propelPistonBlockEntity.updateStoredEnergy(160000000); + stack.consume(1, player); + player.addItem(ModItems.SUPER_CAPACITOR_EMPTY.asStack()); + return InteractionResult.SUCCESS; + } + } + } + level.setBlockAndUpdate(pos, state.cycle(MOVING)); + return super.useItemOn(stack, state, level, pos, player, hand, hitResult); + } + + @Override + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { + if (level.hasNeighborSignal(pos)) { + if (!state.getValue(MOVING)) { + level.setBlockAndUpdate(pos, state.setValue(MOVING, true)); + } + } + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(EXHAUSTED, FACING, MOVING); + } + + @Override + protected BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @SuppressWarnings("deprecation") + @Override + protected BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return ModBlockEntities.PROPEL_PISTON.create(pos, state); + } + + @Override + public @Nullable BlockEntityTicker getTicker( + Level level, + BlockState state, + BlockEntityType type + ) { + if (level.isClientSide()) { + return null; + } + return createTickerHelper( + type, + ModBlockEntities.PROPEL_PISTON.get(), + (level1, blockPos, blockState, blockEntity) -> + blockEntity.tick(level1, blockPos, blockState) + ); + } + + @Override + public void setPlacedBy( + Level level, + BlockPos pos, + BlockState state, + @Nullable LivingEntity placer, + ItemStack stack + ) { + Integer energy = stack.getOrDefault(ModComponents.STORED_ENERGY, StoredEnergy.EMPTY).value(); + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof PropelPistonBlockEntity propelPistonBlockEntity) { + propelPistonBlockEntity.updateStoredEnergy(energy); + } + } + + @Override + protected boolean triggerEvent(BlockState state, Level level, BlockPos pos, int id, int param) { + Direction direction = state.getValue(PropelPistonBlock.FACING); + if (id == 0) { + if (EventHooks.onPistonMovePre(level, pos, direction, true)) { + level.setBlockAndUpdate(pos, state.setValue(MOVING, false)); + return false; + } + if (!this.moveBlocks(level, pos, direction)) { + level.setBlockAndUpdate(pos, state.setValue(MOVING, false)); + return false; + } + level.playSound( + null, + pos, + SoundEvents.PISTON_EXTEND, + SoundSource.BLOCKS, + 0.5F, + level.getRandom().nextFloat() * 0.25F + 0.6F + ); + } + EventHooks.onPistonMovePost(level, pos, direction, (id == 0)); + level.scheduleTick(pos.relative(direction), this, 6); + return true; + } + + @Override + public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { + BlockState state = level.getBlockState(blockPos); + level.setBlockAndUpdate(blockPos, state.cycle(FACING)); + return true; + } + + @Override + public @Nullable Property getChangeableProperty(BlockState blockState) { + return FACING; + } + + private boolean moveBlocks(Level level, BlockPos pos, Direction facing) { + PistonStructureResolver pistonstructureresolver = new PistonStructureResolver(level, pos, facing, true); + if (!pistonstructureresolver.resolve()) { + return false; + } else { + Map map = Maps.newHashMap(); + List list = pistonstructureresolver.getToPush(); + List list1 = Lists.newArrayList(); + list.addFirst(pos); + + if (level.getBlockEntity(pos) instanceof PropelPistonBlockEntity propelPistonBlockEntity) { + propelPistonBlockEntity.addEnergy(-(list.size() * 10000)); + } + + for (BlockPos blockPos1 : list) { + BlockState blockState = level.getBlockState(blockPos1); + list1.add(blockState); + map.put(blockPos1, blockState); + } + + List list2 = pistonstructureresolver.getToDestroy(); + BlockState[] blockStates = new BlockState[list.size() + list2.size()]; + int i = 0; + + for (int j = list2.size() - 1; j >= 0; j--) { + BlockPos blockPos2 = list2.get(j); + BlockState blockState1 = level.getBlockState(blockPos2); + BlockEntity blockentity = blockState1.hasBlockEntity() ? level.getBlockEntity(blockPos2) : null; + dropResources(blockState1, level, blockPos2, blockentity); + blockState1.onDestroyedByPushReaction(level, blockPos2, facing, level.getFluidState(blockPos2)); + if (!blockState1.is(BlockTags.FIRE)) { + level.addDestroyBlockEffect(blockPos2, blockState1); + } + + blockStates[i++] = blockState1; + } + + for (int k = list.size() - 1; k >= 0; k--) { + BlockPos blockPos3 = list.get(k); + final BlockState blockState5 = level.getBlockState(blockPos3); + blockPos3 = blockPos3.relative(facing); + map.remove(blockPos3); + BlockState blockState8 = Blocks.MOVING_PISTON.defaultBlockState().setValue(FACING, facing); + BlockEntity blockEntity = null; + if (!level.isClientSide()) { + BlockPos relative = blockPos3.relative(facing.getOpposite()); + if ( + list1.get(k).getBlock() instanceof IMoveableEntityBlock + && level.getBlockEntity(relative) instanceof BlockEntity be + ) { + blockEntity = be; + level.removeBlockEntity(relative); + } + } + level.setBlock(blockPos3, blockState8, 68); + BlockEntity movingBlockEntity = MovingPistonBlock.newMovingBlockEntity( + blockPos3, + blockState8, + list1.get(k), + facing, + true, + false + ); + if (movingBlockEntity instanceof IPistonMovingBlockEntityExtension entity) { + // noinspection UnstableApiUsage + entity.anvillib$setBlockEntity(blockEntity); + } + level.setBlockEntity(movingBlockEntity); + blockStates[i++] = blockState5; + } + + BlockState blockState3 = Blocks.AIR.defaultBlockState(); + + for (BlockPos blockPos4 : map.keySet()) { + level.setBlock(blockPos4, blockState3, 82); + } + + for (Map.Entry entry : map.entrySet()) { + BlockPos blockPos5 = entry.getKey(); + BlockState blockState2 = entry.getValue(); + blockState2.updateIndirectNeighbourShapes(level, blockPos5, 2); + blockState3.updateNeighbourShapes(level, blockPos5, 2); + blockState3.updateIndirectNeighbourShapes(level, blockPos5, 2); + } + + i = 0; + + for (int l = list2.size() - 1; l >= 0; l--) { + BlockState blockState7 = blockStates[i++]; + BlockPos blockPos6 = list2.get(l); + blockState7.updateIndirectNeighbourShapes(level, blockPos6, 2); + level.updateNeighborsAt(blockPos6, blockState7.getBlock()); + } + + for (int i1 = list.size() - 1; i1 >= 0; i1--) { + level.updateNeighborsAt(list.get(i1), blockStates[i++].getBlock()); + } + + return true; + } + } + + @SuppressWarnings("unchecked") + @Nullable + public static BlockEntityTicker createTickerHelper( + BlockEntityType serverType, BlockEntityType clientType, BlockEntityTicker ticker + ) { + return clientType == serverType ? (BlockEntityTicker) ticker : null; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/RubyLaserBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/laser/RubyLaserBlock.java similarity index 94% rename from src/main/java/dev/dubhe/anvilcraft/block/RubyLaserBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/laser/RubyLaserBlock.java index 8a8129e5f9..4811b57e98 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/RubyLaserBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/laser/RubyLaserBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.laser; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; @@ -24,13 +24,12 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class RubyLaserBlock extends BaseLaserBlock implements IHammerRemovable, HammerRotateBehavior { public static final VoxelShape UP_MODEL = @@ -45,13 +44,11 @@ public class RubyLaserBlock extends BaseLaserBlock implements IHammerRemovable, Shapes.or(Block.box(3, 4, 4, 13, 12, 12), Block.box(0, 5, 5, 3, 11, 11), Block.box(13, 3, 3, 16, 13, 13)); public static final VoxelShape EAST_MODEL = Shapes.or(Block.box(3, 4, 4, 13, 12, 12), Block.box(13, 5, 5, 16, 11, 11), Block.box(0, 3, 3, 3, 13, 13)); - public static final DirectionProperty FACING = DirectionalBlock.FACING; + public static final EnumProperty FACING = DirectionalBlock.FACING; public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; public static final EnumProperty SWITCH = IPowerComponent.SWITCH; - /** - * 方块状态注册 - */ + /// 方块状态注册 public RubyLaserBlock(Properties properties) { super(properties); this.registerDefaultState(this.stateDefinition @@ -112,7 +109,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return createTickerHelper( type, ModBlockEntities.RUBY_LASER.get(), (level1, pos, state1, entity) -> entity.tick(level1)); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/RubyPrismBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/laser/RubyPrismBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/RubyPrismBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/laser/RubyPrismBlock.java index bd8a1ce660..6e8118e89d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/RubyPrismBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/laser/RubyPrismBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.laser; import com.mojang.serialization.MapCodec; import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; @@ -22,12 +22,12 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class RubyPrismBlock extends BaseLaserBlock implements IHammerRemovable, HammerRotateBehavior, IMoveableEntityBlock { public static final VoxelShape UP_MODEL = @@ -42,11 +42,9 @@ public class RubyPrismBlock extends BaseLaserBlock implements IHammerRemovable, Shapes.or(Block.box(12, 0, 0, 16, 16, 16), Block.box(2, 2, 2, 12, 14, 14), Block.box(0, 4, 4, 2, 12, 12)); public static final VoxelShape EAST_MODEL = Shapes.or(Block.box(0, 0, 0, 4, 16, 16), Block.box(4, 2, 2, 14, 14, 14), Block.box(14, 4, 4, 16, 12, 12)); - public static final DirectionProperty FACING = DirectionalBlock.FACING; + public static final EnumProperty FACING = DirectionalBlock.FACING; - /** - * 方块状态注册 - */ + /// 方块状态注册 public RubyPrismBlock(Properties properties) { super(properties); this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.DOWN)); @@ -103,7 +101,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return createTickerHelper( type, ModBlockEntities.RUBY_PRISM.get(), (level1, pos, state1, entity) -> entity.tick(level1)); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/laser/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/laser/package-info.java new file mode 100644 index 0000000000..6320b51815 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/laser/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.laser; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ChuteBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/ChuteBlock.java similarity index 78% rename from src/main/java/dev/dubhe/anvilcraft/block/ChuteBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/ChuteBlock.java index a7db60f0ae..3c3dcd2573 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ChuteBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/ChuteBlock.java @@ -1,12 +1,10 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.logistics.chute; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; import dev.dubhe.anvilcraft.block.entity.ChuteBlockEntity; -import dev.dubhe.anvilcraft.block.entity.SimpleChuteBlockEntity; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -21,7 +19,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; -import net.minecraft.world.Containers; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -29,6 +26,8 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.GameType; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Mirror; @@ -41,22 +40,20 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.items.IItemHandler; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.stream.Stream; public class ChuteBlock extends BetterBaseEntityBlock implements HammerRotateBehavior, IHammerRemovable { - public static final DirectionProperty FACING = BlockStateProperties.FACING_HOPPER; + public static final EnumProperty FACING = BlockStateProperties.FACING_HOPPER; public static final BooleanProperty ENABLED = BlockStateProperties.ENABLED; public static final VoxelShape AABB = @@ -90,11 +87,9 @@ public class ChuteBlock extends BetterBaseEntityBlock implements HammerRotateBeh ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)) .get(); - /** - * 溜槽方块 - * - * @param properties 方块属性 - */ + /// 溜槽方块 + /// + /// @param properties 方块属性 public ChuteBlock(Properties properties) { super(properties); this.registerDefaultState( @@ -145,10 +140,10 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { Direction dir = context.getClickedFace().getOpposite(); if (context.getPlayer() != null && context.getPlayer().isShiftKeyDown()) dir = dir.getOpposite(); Direction facing = dir.getAxis() == Direction.Axis.Y ? Direction.DOWN : dir; - BlockState result = getState(context.getLevel(), context.getClickedPos(), facing); + BlockState result = this.getState(context.getLevel(), context.getClickedPos(), facing); Player player = context.getPlayer(); if (result == null && player != null) { - player.displayClientMessage(Component.translatable("message.anvilcraft.chute.cannot_place"), true); + player.sendOverlayMessage(Component.translatable("message.anvilcraft.chute.cannot_place")); } return result; } @@ -169,29 +164,30 @@ protected void createBlockStateDefinition(StateDefinition.Builder BlockEntityTicker getTicker( return createTickerHelper( type, ModBlockEntities.CHUTE.get(), - (level1, blockPos, blockState, blockEntity) -> blockEntity.tick() + (_, _, _, be) -> be.tick() ); } @@ -235,7 +231,6 @@ public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, Co }; } - @SuppressWarnings({"DuplicatedCode", "UnreachableCode"}) @Override public InteractionResult use( BlockState state, @@ -243,8 +238,9 @@ public InteractionResult use( BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - if (level.isClientSide) { + BlockHitResult hit + ) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } BlockEntity blockEntity = level.getBlockEntity(pos); @@ -279,27 +275,8 @@ public InteractionResult use( } @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (!state.is(newState.getBlock())) { - if (level.getBlockEntity(pos) instanceof ChuteBlockEntity oldEntity) { - IItemHandler oldHandler = oldEntity.getItemHandler(); - if (newState.is(ModBlocks.SIMPLE_CHUTE.get())) { - level.removeBlockEntity(pos); - level.setBlock(pos, newState, 2); - IItemHandler newHandler = null; - if (level.getBlockEntity(pos) instanceof SimpleChuteBlockEntity newEntity) { - newHandler = newEntity.getItemHandler(); - } - ItemHandlerUtil.exportToTarget(oldHandler, 64, stack -> true, newHandler); - } else level.removeBlockEntity(pos); - Vec3 vec3 = oldEntity.getBlockPos().getCenter(); - for (int slot = 0; slot < oldHandler.getSlots(); slot++) { - Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, oldHandler.getStackInSlot(slot)); - } - level.updateNeighbourForOutputSignal(pos, this); - } - } - + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + level.updateNeighbourForOutputSignal(pos, this); } @Override @@ -313,8 +290,8 @@ public boolean hasAnalogOutputSignal(BlockState blockState) { } @Override - public int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos blockPos) { - BlockEntity blockEntity = level.getBlockEntity(blockPos); + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof ChuteBlockEntity chuteBlockEntity) { return chuteBlockEntity.getRedstoneSignal(); } @@ -322,7 +299,7 @@ public int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos bl } @Nullable - BlockState getState(Level level, BlockPos pos, Direction facing) { + BlockState getState(LevelReader level, BlockPos pos, Direction facing) { boolean success = false; boolean tall = false; BlockState result = this.defaultBlockState() diff --git a/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/MagneticChuteBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/MagneticChuteBlock.java new file mode 100644 index 0000000000..bae3ff459b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/MagneticChuteBlock.java @@ -0,0 +1,239 @@ +package dev.dubhe.anvilcraft.block.logistics.chute; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; +import dev.dubhe.anvilcraft.block.entity.MagneticChuteBlockEntity; +import dev.dubhe.anvilcraft.init.ModMenuTypes; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.init.item.ModItems; +import dev.dubhe.anvilcraft.network.MachineEnableFilterPacket; +import dev.dubhe.anvilcraft.network.MachineOutputDirectionPacket; +import dev.dubhe.anvilcraft.network.SlotDisableChangePacket; +import dev.dubhe.anvilcraft.network.SlotFilterChangePacket; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.neoforged.neoforge.network.PacketDistributor; +import org.jspecify.annotations.Nullable; + +public class MagneticChuteBlock extends BetterBaseEntityBlock implements HammerRotateBehavior, IHammerRemovable { + public static final EnumProperty FACING = BlockStateProperties.FACING; + public static final BooleanProperty ENABLED = BlockStateProperties.ENABLED; + + public static final VoxelShape SHAPE_UP = Shapes.or( + Block.box(4, 8, 4, 12, 16, 12), + Block.box(0, 0, 0, 16, 8, 16) + ); + public static final VoxelShape SHAPE_DOWN = Shapes.or( + Block.box(4, 0, 4, 12, 8, 12), + Block.box(0, 8, 0, 16, 16, 16) + ); + public static final VoxelShape SHAPE_W = Shapes.or( + Block.box(0, 4, 4, 8, 12, 12), + Block.box(8, 0, 0, 16, 16, 16) + ); + public static final VoxelShape SHAPE_E = Shapes.or( + Block.box(8, 4, 4, 16, 12, 12), + Block.box(0, 0, 0, 8, 16, 16) + ); + public static final VoxelShape SHAPE_S = Shapes.or( + Block.box(4, 4, 8, 12, 12, 16), + Block.box(0, 0, 0, 16, 16, 8) + ); + public static final VoxelShape SHAPE_N = Shapes.or( + Block.box(4, 4, 0, 12, 12, 8), + Block.box(0, 0, 8, 16, 16, 16) + ); + + /// 溜槽方块 + /// + /// @param properties 方块属性 + public MagneticChuteBlock(Properties properties) { + super(properties); + this.registerDefaultState( + this.stateDefinition.any().setValue(FACING, Direction.DOWN).setValue(ENABLED, true)); + } + + @Override + protected MapCodec codec() { + return simpleCodec(MagneticChuteBlock::new); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext collisionContext) { + return switch (state.getValue(FACING)) { + case NORTH -> SHAPE_N; + case SOUTH -> SHAPE_S; + case WEST -> SHAPE_W; + case EAST -> SHAPE_E; + case DOWN -> SHAPE_DOWN; + case UP -> SHAPE_UP; + }; + } + + @Override + protected boolean isPathfindable(BlockState state, PathComputationType pathComputationType) { + return false; + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new MagneticChuteBlockEntity(ModBlockEntities.MAGNETIC_CHUTE.get(), pos, state); + } + + @Override + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + level.updateNeighbourForOutputSignal(pos, this); + } + + @Override + public boolean hasAnalogOutputSignal(BlockState blockState) { + return true; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof MagneticChuteBlockEntity magneticChuteBlockEntity) { + return magneticChuteBlockEntity.getRedstoneSignal(); + } + return 0; + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Player player = context.getPlayer(); + Direction facing = context.getNearestLookingDirection(); + if (player != null && player.isShiftKeyDown()) facing = facing.getOpposite(); + BlockState neighborState = level.getBlockState(pos.relative(facing)); + boolean cannotPlace = facing == Direction.UP + && (neighborState.is(ModBlocks.SIMPLE_CHUTE) || neighborState.is(ModBlocks.CHUTE)) + && neighborState.getValue(FACING_HOPPER) == Direction.DOWN; + if (cannotPlace) { + if (player != null) player.sendOverlayMessage(Component.translatable("message.anvilcraft.chute.cannot_place")); + return null; + } + return this.defaultBlockState() + .setValue(FACING, facing) + .setValue(ENABLED, !context.getLevel().hasNeighborSignal(context.getClickedPos())); + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return this.rotate(state, mirror.getRotation(state.getValue(FACING))); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING, ENABLED); + } + + @Override + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { + this.checkPoweredState(level, pos, state); + } + + private void checkPoweredState(Level level, BlockPos pos, BlockState state) { + boolean flag = !level.hasNeighborSignal(pos); + if (flag != state.getValue(ENABLED)) { + level.setBlock(pos, state.setValue(ENABLED, flag), 2); + } + } + + @Override + public @Nullable BlockEntityTicker getTicker( + Level level, BlockState state, BlockEntityType blockEntityType) { + if (level.isClientSide()) { + return null; + } + return createTickerHelper( + blockEntityType, + ModBlockEntities.MAGNETIC_CHUTE.get(), + ((_, _, _, be) -> be.tick())); + } + + @Override + public InteractionResult use( + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hit + ) { + if (level.isClientSide()) { + return InteractionResult.SUCCESS; + } + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof MagneticChuteBlockEntity entity) { + if (player.getItemInHand(hand).is(ModItems.DISK.get())) { + return entity.useDisk(level, player, hand, player.getItemInHand(hand), hit); + } + if (player instanceof ServerPlayer serverPlayer) { + if (serverPlayer.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS; + ModMenuTypes.open(serverPlayer, entity, pos); + PacketDistributor.sendToPlayer(serverPlayer, new MachineOutputDirectionPacket(entity.getDirection())); + PacketDistributor.sendToPlayer(serverPlayer, new MachineEnableFilterPacket(entity.isFilterEnabled())); + for (int i = 0; i < entity.getFilteredItems().size(); i++) { + PacketDistributor.sendToPlayer( + serverPlayer, + new SlotDisableChangePacket( + i, entity.getItemHandler().getDisabled().get(i))); + PacketDistributor.sendToPlayer(serverPlayer, new SlotFilterChangePacket(i, entity.getFilter(i))); + } + } + } + return InteractionResult.SUCCESS; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/SimpleChuteBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/SimpleChuteBlock.java new file mode 100644 index 0000000000..f713e87e13 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/SimpleChuteBlock.java @@ -0,0 +1,286 @@ +package dev.dubhe.anvilcraft.block.logistics.chute; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; +import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.entity.SimpleChuteBlockEntity; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.shapes.BooleanOp; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.Nullable; + +public class SimpleChuteBlock + extends BaseEntityBlock + implements SimpleWaterloggedBlock, IHammerChangeable, IHammerRemovable { + public static final EnumProperty FACING = BlockStateProperties.FACING_HOPPER; + public static final BooleanProperty ENABLED = BlockStateProperties.ENABLED; + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + public static final BooleanProperty TALL = BooleanProperty.create("tall"); + + public static final VoxelShape AABB = Block.box(2, 0, 2, 14, 12, 14); + public static final VoxelShape AABB_TALL = Block.box(2, 0, 2, 14, 16, 14); + public static final VoxelShape AABB_N = Block.box(4, 4, 0, 12, 12, 12); + public static final VoxelShape AABB_TALL_N = + Shapes.join(Block.box(4, 4, 0, 12, 12, 12), Block.box(2, 8, 2, 14, 16, 14), BooleanOp.OR); + public static final VoxelShape AABB_E = Block.box(4, 4, 4, 16, 12, 12); + public static final VoxelShape AABB_TALL_E = + Shapes.join(Block.box(4, 4, 4, 16, 12, 12), Block.box(2, 8, 2, 14, 16, 14), BooleanOp.OR); + public static final VoxelShape AABB_S = Block.box(4, 4, 4, 12, 12, 16); + public static final VoxelShape AABB_TALL_S = + Shapes.join(Block.box(4, 4, 4, 12, 12, 16), Block.box(2, 8, 2, 14, 16, 14), BooleanOp.OR); + public static final VoxelShape AABB_W = Block.box(0, 4, 4, 12, 12, 12); + public static final VoxelShape AABB_TALL_W = + Shapes.join(Block.box(0, 4, 4, 12, 12, 12), Block.box(2, 8, 2, 14, 16, 14), BooleanOp.OR); + + public SimpleChuteBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition + .any() + .setValue(FACING, Direction.DOWN) + .setValue(WATERLOGGED, false) + .setValue(ENABLED, true) + .setValue(TALL, false)); + } + + @Override + protected MapCodec codec() { + return simpleCodec(SimpleChuteBlock::new); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new SimpleChuteBlockEntity(ModBlockEntities.SIMPLE_CHUTE.get(), pos, state); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING, WATERLOGGED, ENABLED, TALL); + } + + @Override + protected BlockState updateShape( + BlockState state, + LevelReader level, + ScheduledTickAccess ticks, + BlockPos pos, + Direction directionToNeighbour, + BlockPos neighbourPos, + BlockState neighbourState, + RandomSource random + ) { + if (state.getValue(WATERLOGGED)) ticks.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + if (level.isClientSide()) return state; + BlockState newState = this.getState(level, pos, state.getValue(FACING)); + if (newState != null && newState != state) state = newState; + + state = this.checkPoweredState(level, pos, state); + return state; + } + + private BlockState checkPoweredState(LevelReader level, BlockPos pos, BlockState state) { + boolean flag = !level.hasNeighborSignal(pos); + if (flag == state.getValue(ENABLED)) return state; + return state.setValue(ENABLED, flag); + } + + @Override + public ItemStack getCloneItemStack( + LevelReader level, + BlockPos pos, + BlockState state, + boolean includeData, + Player player + ) { + return new ItemStack(ModBlocks.CHUTE); + } + + @Override + public void tick( + BlockState state, + ServerLevel level, + BlockPos pos, + RandomSource random + ) { + if (!state.getValue(ENABLED) && !level.hasNeighborSignal(pos)) { + level.setBlock(pos, state.cycle(ENABLED), 2); + } + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected void affectNeighborsAfterRemoval( + BlockState state, + ServerLevel level, + BlockPos pos, + boolean movedByPiston + ) { + level.updateNeighbourForOutputSignal(pos, this); + } + + @Nullable + @Override + public BlockEntityTicker getTicker( + Level level, BlockState state, BlockEntityType blockEntityType) { + if (level.isClientSide()) return null; + return createTickerHelper( + blockEntityType, + ModBlockEntities.SIMPLE_CHUTE.get(), + ((_, _, _, be) -> be.tick()) + ); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + Direction facing = state.getValue(FACING); + if (!state.getValue(TALL)) { + return switch (facing) { + case NORTH -> AABB_N; + case EAST -> AABB_E; + case SOUTH -> AABB_S; + case WEST -> AABB_W; + default -> AABB; + }; + } else { + return switch (facing) { + case NORTH -> AABB_TALL_N; + case EAST -> AABB_TALL_E; + case SOUTH -> AABB_TALL_S; + case WEST -> AABB_TALL_W; + default -> AABB_TALL; + }; + } + } + + @Override + protected boolean isPathfindable(BlockState state, PathComputationType pathComputationType) { + return false; + } + + @Override + public boolean hasAnalogOutputSignal(BlockState blockState) { + return true; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof SimpleChuteBlockEntity chuteBlockEntity) { + return chuteBlockEntity.getRedstoneSignal(); + } + return 0; + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); + } + + @Override + public boolean change(Player player, BlockPos pos, Level level, ItemStack anvilHammer) { + HammerRotateBehavior.DEFAULT.change(player, pos, level, anvilHammer); + BlockState state = level.getBlockState(pos); + BlockState facingState = level.getBlockState(pos.relative(state.getValue(FACING))); + if (facingState.is(ModBlocks.CHUTE.get()) || facingState.is(ModBlocks.SIMPLE_CHUTE.get())) { + if (facingState.getValue(FACING).getOpposite() == state.getValue(FACING)) { + return this.change(player, pos, level, anvilHammer); + } + } + return true; + } + + @Override + public @Nullable Property getChangeableProperty(BlockState blockState) { + return FACING; + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @SuppressWarnings("deprecation") + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } + + @Nullable + BlockState getState(LevelReader level, BlockPos pos, Direction facing) { + boolean success = false; + boolean tall = false; + BlockState result = level.getBlockState(pos); + // 遍历六个方向 获取指向自己的溜槽 + for (Direction dir : Direction.values()) { + BlockPos neighborPos = pos.relative(dir); + BlockState neighborState = level.getBlockState(neighborPos); + if (ChuteBlock.isChuteBlock(neighborState)) { + if (ChuteBlock.getFacing(neighborState) == dir.getOpposite()) { + success = true; + if (dir == Direction.UP) { + tall = !neighborState.is(ModBlocks.MAGNETIC_CHUTE.get()); + } + } + + } + } + if (!success) { + result = ModBlocks.CHUTE.getDefaultState() + .setValue(FACING, facing) + .setValue(ENABLED, !level.hasNeighborSignal(pos)); + } else { + result = result.setValue(TALL, tall); + } + return result; + } + + // 防止流体流动时破坏溜槽 + @Override + public boolean canBeReplaced(BlockState state, Fluid fluid) { + return false; + } + + // 防止玩家使用桶放置流体时直接替换掉溜槽 + @Override + public boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + return false; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/package-info.java new file mode 100644 index 0000000000..b6504768f4 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/chute/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.logistics.chute; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/sliding/ActivatorSlidingRailBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/ActivatorSlidingRailBlock.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/sliding/ActivatorSlidingRailBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/ActivatorSlidingRailBlock.java index 20bbfb0e37..ee167cb97c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/sliding/ActivatorSlidingRailBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/ActivatorSlidingRailBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.sliding; +package dev.dubhe.anvilcraft.block.logistics.sliding; import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; @@ -9,6 +9,7 @@ import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; +import net.minecraft.util.TriState; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -28,12 +29,12 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.common.util.TriState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.List; import java.util.Optional; @@ -158,7 +159,7 @@ protected void updatePower(Level level, BlockPos pos, BlockState state, BlockPos BlockState state1 = level.getBlockState(pos1); if (!(state1.getBlock() instanceof ActivatorSlidingRailBlock other)) continue; if (state1.getOptionalValue(FACING).map(Direction::getAxis).filter(axis::equals).isEmpty()) continue; - level.neighborChanged(pos1, other, pos); + level.neighborChanged(pos1, other, Orientation.random(level.getRandom())); } } } @@ -178,27 +179,26 @@ public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, if (MOVING_PISTON_MAP.containsKey(pos)) { MOVING_PISTON_MAP.get(pos).fromPos = neighbor; } else MOVING_PISTON_MAP.put(pos, ppi); - } - @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { - this.updatePower(level, pos, state, fromPos); - Optional beOp = level.getBlockEntity(pos, ModBlockEntities.ACTIVATOR_SLIDING_RAIL.get()); - if (!fromPos.equals(pos.above())) return; - if ( - state.getValue(POWERED) - && !beOp.map(ActivatorSlidingRailBlockEntity::shouldPower).orElse(false) - && !level.getBlockTicks().hasScheduledTick(pos, this) - && !MOVING_PISTON_MAP.containsKey(fromPos) - && block.equals(Blocks.MOVING_PISTON) - && !level.getBlockEntity(pos.above(), BlockEntityType.PISTON).map(PistonMovingBlockEntity::isSourcePiston).orElse(true) - ) { - beOp.ifPresent(ActivatorSlidingRailBlockEntity::startPulse); - level.scheduleTick(pos, this, 3); - this.updateAbove(level, pos); - return; + if (level instanceof Level world) { + this.updatePower(world, pos, state, neighbor); + Optional beOp = world.getBlockEntity(pos, ModBlockEntities.ACTIVATOR_SLIDING_RAIL.get()); + if (!neighbor.equals(pos.above())) return; + if ( + state.getValue(POWERED) + && !beOp.map(ActivatorSlidingRailBlockEntity::shouldPower).orElse(false) + && !world.getBlockTicks().hasScheduledTick(pos, this) + && !MOVING_PISTON_MAP.containsKey(neighbor) + && level.getBlockState(pos).getBlock().equals(Blocks.MOVING_PISTON) + && !level.getBlockEntity(pos.above(), BlockEntityType.PISTON).map(PistonMovingBlockEntity::isSourcePiston).orElse(true) + ) { + beOp.ifPresent(ActivatorSlidingRailBlockEntity::startPulse); + world.scheduleTick(pos, this, 3); + this.updateAbove(world, pos); + return; + } } - super.neighborChanged(state, level, pos, block, fromPos, isMoving); + super.onNeighborChange(state, level, pos, neighbor); } @Override @@ -295,12 +295,12 @@ private void updateAbove(Level level, BlockPos pos) { BlockPos abovePos = pos.above(); BlockState aboveState = level.getBlockState(abovePos); aboveState.onNeighborChange(level, abovePos, pos); - level.neighborChanged(aboveState, abovePos, this, pos, false); + level.neighborChanged(aboveState, abovePos, this, Orientation.random(level.getRandom()), false); if (!aboveState.isRedstoneConductor(level, abovePos)) return; for (Direction dir : UPDATE_SIDES) { BlockPos neighborPos = abovePos.relative(dir); BlockState neighborState = level.getBlockState(neighborPos); - level.neighborChanged(neighborState, neighborPos, aboveState.getBlock(), abovePos, false); + level.neighborChanged(neighborState, neighborPos, aboveState.getBlock(), Orientation.random(level.getRandom()), false); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/sliding/BaseSlidingRailBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/BaseSlidingRailBlock.java similarity index 78% rename from src/main/java/dev/dubhe/anvilcraft/block/sliding/BaseSlidingRailBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/BaseSlidingRailBlock.java index af143bfbed..022f9014d9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/sliding/BaseSlidingRailBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/BaseSlidingRailBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.sliding; +package dev.dubhe.anvilcraft.block.logistics.sliding; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -8,6 +8,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.level.BlockGetter; @@ -21,18 +22,18 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import org.joml.Vector3f; +import org.jspecify.annotations.Nullable; import java.util.Objects; public abstract class BaseSlidingRailBlock extends Block implements ISlidingRail, IHammerRemovable { public BaseSlidingRailBlock(Properties properties) { - super(properties.friction(1.0204082f)); + super(properties.friction(1.0204082F)); } protected BaseSlidingRailBlock(Properties properties, boolean shouldSetFriction) { - super(shouldSetFriction ? properties.friction(1.0204082f) : properties); + super(shouldSetFriction ? properties.friction(1.0204082F) : properties); } @Override @@ -55,15 +56,23 @@ public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, ISlidingRail.whenOnNeighborChange(level, pos, neighbor); } - @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { - if (level.isClientSide) return; - ISlidingRail.whenNeighborChanged(level, self(), pos, fromPos); - } + // @Override + // protected void neighborChanged( + // BlockState state, + // Level level, + // BlockPos pos, + // Block block, + // @Nullable Orientation orientation, + // boolean movedByPiston + // ) { + // super.neighborChanged(state, level, pos, block, orientation, movedByPiston); + // if (level.isClientSide()) return; + // ISlidingRail.whenNeighborChanged(level, this.self(), pos, fromPos); + // } @Override protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - ISlidingRail.whenTick(level, self(), pos); + ISlidingRail.whenTick(level, this.self(), pos); } @Override @@ -92,7 +101,7 @@ public boolean isStickyBlock(BlockState state) { return this.canStickTo(pos, axis, otherPos, otherAxis); } - private boolean canStickTo(BlockPos pos, @Nullable Direction.Axis axis, BlockPos otherPos, @Nullable Direction.Axis otherAxis) { + private boolean canStickTo(BlockPos pos, Direction.@Nullable Axis axis, BlockPos otherPos, Direction.@Nullable Axis otherAxis) { if (axis == Direction.Axis.Y || otherAxis == Direction.Axis.Y) return true; boolean axisIsNotNull = axis != null; if (Objects.equals(otherAxis, axis) && axisIsNotNull) { @@ -108,8 +117,15 @@ private boolean canStickTo(BlockPos pos, @Nullable Direction.Axis axis, BlockPos } @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - if (level.isClientSide) return; + protected void entityInside( + BlockState state, + Level level, + BlockPos pos, + Entity entity, + InsideBlockEffectApplier effectApplier, + boolean isPrecise + ) { + if (level.isClientSide()) return; if (entity instanceof ItemEntity) { AABB railBox = new AABB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); if (railBox.intersects(entity.getBoundingBox())) { @@ -119,7 +135,7 @@ public void entityInside(BlockState state, Level level, BlockPos pos, Entity ent } } if (entity instanceof LivingEntity) { - if (this instanceof PoweredSlidingRailBlock poweredRail) { + if (this instanceof PoweredSlidingRailBlock) { BlockState railState = level.getBlockState(pos); if (railState.getValue(PoweredSlidingRailBlock.POWERED)) { Direction facing = railState.getValue(PoweredSlidingRailBlock.FACING); @@ -129,13 +145,13 @@ public void entityInside(BlockState state, Level level, BlockPos pos, Entity ent Vec3 entityPos = entity.position(); Vector3f acceleration = blockPos.toVector3f() .sub(entityPos.toVector3f()) - .mul(0.15f) - .div(0.98f) + .mul(0.15F) + .div(0.98F) .mul(new Vector3f(1, 0, 1)); - entity.setDeltaMovement(entity.getDeltaMovement().multiply(0.8f, 0.8f, 0.8f).add(new Vec3(acceleration))); + entity.setDeltaMovement(entity.getDeltaMovement().multiply(0.8F, 0.8F, 0.8F).add(new Vec3(acceleration))); } } } - super.entityInside(state, level, pos, entity); + super.entityInside(state, level, pos, entity, effectApplier, isPrecise); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/sliding/DetectorSlidingRailBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/DetectorSlidingRailBlock.java similarity index 96% rename from src/main/java/dev/dubhe/anvilcraft/block/sliding/DetectorSlidingRailBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/DetectorSlidingRailBlock.java index d2ed3ac5f6..7b0b7b61c2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/sliding/DetectorSlidingRailBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/DetectorSlidingRailBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.sliding; +package dev.dubhe.anvilcraft.block.logistics.sliding; import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; @@ -7,7 +7,6 @@ import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.item.ItemEntity; @@ -31,7 +30,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Optional; import java.util.stream.Stream; @@ -121,7 +120,7 @@ protected boolean hasAnalogOutputSignal(BlockState state) { } @Override - protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { return level.getBlockEntity(pos, ModBlockEntities.DETECTOR_SLIDING_RAIL.get()) .map(DetectorSlidingRailBlockEntity::getPower) .orElse(0); @@ -160,8 +159,7 @@ public void onItemEntitySlidingAbove(Level level, BlockPos pos, BlockState state } @Override - public void setData(Level level, BlockPos pos, CompoundTag nbt) { - BlockState state = level.getBlockState(pos); + public void notifyMoved(Level level, BlockPos pos, BlockState state, BlockEntity be) { if (state.getBlock() != this) return; level.setBlock(pos, state.setValue(POWERED, false), Block.UPDATE_ALL); level.getBlockEntity(pos, ModBlockEntities.DETECTOR_SLIDING_RAIL.get()).ifPresent(DetectorSlidingRailBlockEntity::cleanPower); @@ -176,4 +174,4 @@ protected BlockState rotate(BlockState state, Rotation rotation) { protected BlockState mirror(BlockState state, Mirror mirror) { return state.setValue(FACING, mirror.mirror(state.getValue(FACING))); } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/sliding/ISlidingRail.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/ISlidingRail.java similarity index 83% rename from src/main/java/dev/dubhe/anvilcraft/block/sliding/ISlidingRail.java rename to src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/ISlidingRail.java index cbb304d72b..bda9e2a4a3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/sliding/ISlidingRail.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/ISlidingRail.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.sliding; +package dev.dubhe.anvilcraft.block.logistics.sliding; import dev.dubhe.anvilcraft.api.injection.block.IBlockExtension; import dev.dubhe.anvilcraft.api.sliding.SlidingBlockStructureResolver; @@ -30,46 +30,40 @@ public interface ISlidingRail extends IBlockExtension { Map MOVING_PISTON_MAP = new HashMap<>(); - /** - * 当滑动方块经过时每tick调用该方法。 - * - * @param level 滑轨所处的世界 - * @param pos 滑轨方块位置 - * @param state 滑轨方块状态 - * @param entity 滑动方块实体 - */ + /// 当滑动方块经过时每tick调用该方法。 + /// + /// @param level 滑轨所处的世界 + /// @param pos 滑轨方块位置 + /// @param state 滑轨方块状态 + /// @param entity 滑动方块实体 void onSlidingAbove(Level level, BlockPos pos, BlockState state, SlidingBlockEntity entity); Block self(); - /** - * 当滑轨站尝试移动顶部方块到该滑轨顶部时调用该方法。
- * 将在{@link Block#neighborChanged(BlockState, Level, BlockPos, Block, BlockPos, boolean) neighbourChanged()}调用。 - * - * @param level 滑轨站所处的世界 - * @param pos 滑轨方块位置 - * @param state 滑轨方块状态 - * @param top 滑轨站顶部的方块状态 - * @param side 滑轨站相对于滑轨的方向 - * - * @return 将要滑动的方向。若为空,则不滑动。 - */ + /// 当滑轨站尝试移动顶部方块到该滑轨顶部时调用该方法。
+ /// 将在{@link Block#neighborChanged(BlockState, Level, BlockPos, Block, BlockPos, boolean) neighbourChanged()}调用。 + /// + /// @param level 滑轨站所处的世界 + /// @param pos 滑轨方块位置 + /// @param state 滑轨方块状态 + /// @param top 滑轨站顶部的方块状态 + /// @param side 滑轨站相对于滑轨的方向 + /// + /// @return 将要滑动的方向。若为空,则不滑动。 @SuppressWarnings("JavadocReference") default boolean canMoveBlockToTop(LevelReader level, BlockPos pos, BlockState state, BlockState top, Direction side) { return false; } - /** - * 当滑轨站尝试移动顶部滑动方块到该滑轨顶部时调用该方法。
- * 将在{@link ISlidingRail#onSlidingAbove(Level, BlockPos, BlockState, SlidingBlockEntity) onSlidingAbove()}调用。 - * - * @param level 滑轨站所处的世界 - * @param pos 滑轨方块位置 - * @param state 滑轨方块状态 - * @param side 滑轨站相对于滑轨的方向 - * - * @return 将要滑动的方向。若为空,则不滑动。 - */ + /// 当滑轨站尝试移动顶部滑动方块到该滑轨顶部时调用该方法。
+ /// 将在{@link ISlidingRail#onSlidingAbove(Level, BlockPos, BlockState, SlidingBlockEntity) onSlidingAbove()}调用。 + /// + /// @param level 滑轨站所处的世界 + /// @param pos 滑轨方块位置 + /// @param state 滑轨方块状态 + /// @param side 滑轨站相对于滑轨的方向 + /// + /// @return 将要滑动的方向。若为空,则不滑动。 default boolean canMoveSlidingToTop(LevelReader level, BlockPos pos, BlockState state, Direction side) { return false; } @@ -88,7 +82,7 @@ static void whenOnNeighborChange(LevelReader level, BlockPos pos, BlockPos neigh } static void whenNeighborChanged(Level level, Block block, BlockPos pos, BlockPos fromPos) { - if (level.isClientSide) return; + if (level.isClientSide()) return; BlockState blockState = level.getBlockState(fromPos); if (!MOVING_PISTON_MAP.containsKey(pos)) return; if (blockState.is(Blocks.MOVING_PISTON)) return; @@ -186,10 +180,10 @@ static void absorbEntity(BlockPos pos, Entity entity) { Vec3 entityPos = entity.position(); Vector3f acceleration = blockPos.toVector3f() .sub(entityPos.toVector3f()) - .mul(0.45f) - .div(0.98f) + .mul(0.45F) + .div(0.98F) .mul(new Vector3f(1, 0, 1)); - entity.setDeltaMovement(entity.getDeltaMovement().multiply(0.5f, 0.5f, 0.5f).add(new Vec3(acceleration))); + entity.setDeltaMovement(entity.getDeltaMovement().multiply(0.5F, 0.5F, 0.5F).add(new Vec3(acceleration))); } class PistonPushInfo { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/sliding/PoweredSlidingRailBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/PoweredSlidingRailBlock.java similarity index 90% rename from src/main/java/dev/dubhe/anvilcraft/block/sliding/PoweredSlidingRailBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/PoweredSlidingRailBlock.java index b350819b1b..3c24db5d2b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/sliding/PoweredSlidingRailBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/PoweredSlidingRailBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.sliding; +package dev.dubhe.anvilcraft.block.logistics.sliding; import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; import dev.dubhe.anvilcraft.entity.MagnetizedNodeEntity; @@ -24,14 +24,15 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import org.joml.Vector3f; +import org.jspecify.annotations.Nullable; import java.util.List; import java.util.stream.Stream; @@ -148,7 +149,7 @@ public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, private static final int[] UPDATE_POS = new int[] {-1, 1}; - protected boolean updatePower(Level level, BlockPos pos, BlockState state, BlockPos fromPos) { + protected boolean updatePower(Level level, BlockPos pos, BlockState state, @Nullable BlockPos fromPos) { boolean powered = state.getValue(POWERED); boolean shouldPower = this.isPowered(level, pos); if (powered != shouldPower) { @@ -163,7 +164,7 @@ protected boolean updatePower(Level level, BlockPos pos, BlockState state, Block BlockState state1 = level.getBlockState(pos1); if (!(state1.getBlock() instanceof PoweredSlidingRailBlock other)) continue; if (state1.getOptionalValue(FACING).map(Direction::getAxis).filter(axis::equals).isEmpty()) continue; - level.neighborChanged(pos1, other, pos); + // level.neighborChanged(pos1, other, null); } } return powered; @@ -175,22 +176,29 @@ public boolean getWeakChanges(BlockState state, LevelReader level, BlockPos pos) } @Override - public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { - boolean powered = this.updatePower(level, pos, state, fromPos); - pushAbove: - if (powered) { - fromPos = pos.above(); - if (level.isEmptyBlock(fromPos)) break pushAbove; - PistonPushInfo ppi = new PistonPushInfo(fromPos, state.getValue(FACING)); + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { + super.neighborChanged(state, level, pos, block, orientation, movedByPiston); + boolean powered = this.updatePower(level, pos, state, null); + BlockPos above = pos.above(); + if (powered && !level.isEmptyBlock(above)) { + PistonPushInfo ppi = new PistonPushInfo(above, state.getValue(FACING)); ppi.extending = true; if (MOVING_PISTON_MAP.containsKey(pos)) { - MOVING_PISTON_MAP.get(pos).fromPos = fromPos; + MOVING_PISTON_MAP.get(pos).fromPos = above; } else MOVING_PISTON_MAP.put(pos, ppi); } - if (level.isClientSide) return; + if (level.isClientSide()) return; if (!powered) return; - BlockState blockState = level.getBlockState(MOVING_PISTON_MAP.get(pos) instanceof PistonPushInfo info ? info.fromPos : fromPos); if (!MOVING_PISTON_MAP.containsKey(pos)) return; + BlockPos checkPos = MOVING_PISTON_MAP.get(pos) instanceof PistonPushInfo info ? info.fromPos : above; + BlockState blockState = level.getBlockState(checkPos); if (blockState.is(Blocks.MOVING_PISTON) || blockState.isAir()) return; level.scheduleTick(pos, this, 2); } @@ -224,10 +232,10 @@ public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { Vec3 entityPos = entity.position(); Vector3f acceleration = blockPos.toVector3f() .sub(entityPos.toVector3f()) - .mul(0.15f) - .div(0.98f) + .mul(0.15F) + .div(0.98F) .mul(new Vector3f(1, 0, 1)); - entity.setDeltaMovement(entity.getDeltaMovement().multiply(0.8f, 0.8f, 0.8f).add(new Vec3(acceleration))); + entity.setDeltaMovement(entity.getDeltaMovement().multiply(0.8F, 0.8F, 0.8F).add(new Vec3(acceleration))); } } else { if (!isSneakPlayer) { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/SlidingRailBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/SlidingRailBlock.java new file mode 100644 index 0000000000..c1cf08fa5c --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/SlidingRailBlock.java @@ -0,0 +1,183 @@ +package dev.dubhe.anvilcraft.block.logistics.sliding; + +import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; +import dev.dubhe.anvilcraft.entity.SlidingBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.util.RandomSource; +import net.minecraft.util.TriState; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.phys.shapes.BooleanOp; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.Nullable; + +import java.util.stream.Stream; + +public class SlidingRailBlock extends BaseSlidingRailBlock implements IHammerChangeable { + public static final VoxelShape AABB_X = Stream.of( + Block.box(0, 6, 11, 16, 12, 14), + Block.box(0, 0, 0, 16, 6, 16), + Block.box(0, 12, 0, 16, 16, 5), + Block.box(0, 12, 11, 16, 16, 16), + Block.box(0, 6, 2, 16, 12, 5) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + public static final VoxelShape AABB_Z = Stream.of( + Block.box(2, 6, 0, 5, 12, 16), + Block.box(0, 0, 0, 16, 6, 16), + Block.box(11, 12, 0, 16, 16, 16), + Block.box(0, 12, 0, 5, 16, 16), + Block.box(11, 6, 0, 14, 12, 16) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + public static final VoxelShape AABB_Y = Stream.of( + Block.box(0, 0, 0, 16, 6, 16), + Block.box(11, 6, 11, 16, 16, 16), + Block.box(0, 6, 11, 5, 16, 16), + Block.box(0, 6, 0, 5, 16, 5), + Block.box(11, 6, 0, 16, 16, 5) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + public static final EnumProperty AXIS = BlockStateProperties.AXIS; + + public SlidingRailBlock(Properties properties) { + super(properties); + registerDefaultState(getStateDefinition().any().setValue(AXIS, Axis.X)); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Axis axis = context.getHorizontalDirection().getOpposite().getAxis(); + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + if ( + (this.isOtherRailInAxis(level, pos, Axis.X, -1) == TriState.TRUE + || this.isOtherRailInAxis(level, pos, Axis.X, 1) == TriState.TRUE) + && (this.isOtherRailInAxis(level, pos, Axis.Z, -1) == TriState.TRUE + || this.isOtherRailInAxis(level, pos, Axis.Z, 1) == TriState.TRUE) + ) { + axis = Axis.Y; + } + return this.defaultBlockState().setValue(AXIS, axis); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(AXIS); + } + + @Override + protected boolean useShapeForLightOcclusion(BlockState state) { + return true; + } + + @Override + public VoxelShape getShape( + BlockState blockState, + BlockGetter blockGetter, + BlockPos blockPos, + CollisionContext collisionContext + ) { + return switch (blockState.getValue(AXIS)) { + case X -> AABB_X; + case Y -> AABB_Y; + case Z -> AABB_Z; + }; + } + + @Override + protected BlockState updateShape( + BlockState state, + LevelReader level, + ScheduledTickAccess ticks, + BlockPos pos, + Direction directionToNeighbour, + BlockPos neighbourPos, + BlockState neighbourState, + RandomSource random + ) { + BlockState newState = state; + if (this.isOtherRailInAxis(level, pos, Axis.X, -1) == TriState.TRUE + || this.isOtherRailInAxis(level, pos, Axis.X, 1) == TriState.TRUE + ) { + if (state.getValue(AXIS) != Axis.Y + && (this.isOtherRailInAxis(level, pos, Axis.Z, -1) == TriState.TRUE + || this.isOtherRailInAxis(level, pos, Axis.Z, 1) == TriState.TRUE) + ) { + state = state.setValue(AXIS, Axis.Y); + } + if (state.getValue(AXIS) == Axis.Y + && this.isOtherRailInAxis(level, pos, Axis.Z, -1) != TriState.TRUE + && this.isOtherRailInAxis(level, pos, Axis.Z, 1) != TriState.TRUE + ) { + state = state.setValue(AXIS, Axis.X); + } + } else if ( + this.isOtherRailInAxis(level, pos, Axis.Z, -1) == TriState.TRUE + || this.isOtherRailInAxis(level, pos, Axis.Z, 1) == TriState.TRUE + ) { + if (state.getValue(AXIS) == Axis.Y + && this.isOtherRailInAxis(level, pos, Axis.X, -1) != TriState.TRUE + && this.isOtherRailInAxis(level, pos, Axis.X, 1) != TriState.TRUE + ) { + state = state.setValue(AXIS, Axis.Z); + } + } + super.onNeighborChange(state, level, pos, neighbourPos); + return newState; + } + + private TriState isOtherRailInAxis(LevelReader level, BlockPos pos, Axis axis, int relative) { + BlockState other = level.getBlockState(pos.relative(axis, relative)); + Axis otherAxis; + if (other.getBlock() instanceof SlidingRailBlock) { + otherAxis = other.getValue(AXIS); + } else if (other.getBlock() instanceof PoweredSlidingRailBlock) { + otherAxis = other.getValue(PoweredSlidingRailBlock.FACING).getAxis(); + } else if (other.getBlock() instanceof ActivatorSlidingRailBlock) { + otherAxis = other.getValue(ActivatorSlidingRailBlock.FACING).getAxis(); + } else if (other.getBlock() instanceof DetectorSlidingRailBlock) { + otherAxis = other.getValue(DetectorSlidingRailBlock.FACING).getAxis(); + } else { + return TriState.DEFAULT; + } + return axis == otherAxis || otherAxis == Axis.Y ? TriState.TRUE : TriState.FALSE; + } + + @Override + public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { + BlockState bs = level.getBlockState(blockPos); + level.setBlockAndUpdate(blockPos, bs.cycle(AXIS)); + return true; + } + + @Override + public @Nullable Property getChangeableProperty(BlockState blockState) { + return AXIS; + } + + @Override + public void onSlidingAbove(Level level, BlockPos pos, BlockState state, SlidingBlockEntity entity) { + } + + @Override + protected BlockState rotate(BlockState state, Rotation rotation) { + return RotatedPillarBlock.rotatePillar(state, rotation); + } + +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/sliding/SlidingRailStopBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/SlidingRailStopBlock.java similarity index 87% rename from src/main/java/dev/dubhe/anvilcraft/block/sliding/SlidingRailStopBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/SlidingRailStopBlock.java index 29a0a4db4b..eb1d8c8f02 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/sliding/SlidingRailStopBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/SlidingRailStopBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.sliding; +package dev.dubhe.anvilcraft.block.logistics.sliding; import dev.anvilcraft.lib.v2.util.MathUtil; import dev.anvilcraft.lib.v2.util.Util; @@ -12,6 +12,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -106,19 +107,20 @@ public void onSlidingAbove(Level level, BlockPos pos, BlockState state, SlidingB } @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos fromPos, boolean isMoving) { - super.neighborChanged(state, level, pos, neighborBlock, fromPos, isMoving); - if (level.isEmptyBlock(pos.above())) return; - BlockState topBlock = level.getBlockState(pos.above()); - if (!PistonBaseBlock.isPushable(topBlock, level, pos, null, true, null)) return; - Direction moveTo = MathUtil.getDirection(fromPos, pos); + public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos, BlockPos neighbor) { + super.onNeighborChange(state, level, pos, neighbor); + if (!(level instanceof Level actualLevel)) return; + if (actualLevel.isEmptyBlock(pos.above())) return; + BlockState topBlock = actualLevel.getBlockState(pos.above()); + if (!PistonBaseBlock.isPushable(topBlock, actualLevel, pos, null, true, null)) return; + Direction moveTo = MathUtil.getDirection(neighbor, pos); if (moveTo.getAxis() == Direction.Axis.Y) return; - if (this.canMoveBlockTo(level, pos, topBlock, moveTo)) { - SlidingRailStopBlock.moveBlocksAbove(level, pos, moveTo); - } else if (this.canMoveBlockTo(level, pos, topBlock, moveTo.getCounterClockWise())) { - SlidingRailStopBlock.moveBlocksAbove(level, pos, moveTo.getCounterClockWise()); - } else if (this.canMoveBlockTo(level, pos, topBlock, moveTo.getClockWise())) { - SlidingRailStopBlock.moveBlocksAbove(level, pos, moveTo.getClockWise()); + if (this.canMoveBlockTo(actualLevel, pos, topBlock, moveTo)) { + SlidingRailStopBlock.moveBlocksAbove(actualLevel, pos, moveTo); + } else if (this.canMoveBlockTo(actualLevel, pos, topBlock, moveTo.getCounterClockWise())) { + SlidingRailStopBlock.moveBlocksAbove(actualLevel, pos, moveTo.getCounterClockWise()); + } else if (this.canMoveBlockTo(actualLevel, pos, topBlock, moveTo.getClockWise())) { + SlidingRailStopBlock.moveBlocksAbove(actualLevel, pos, moveTo.getClockWise()); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/package-info.java new file mode 100644 index 0000000000..bcb0aaef07 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/logistics/sliding/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.logistics.sliding; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/multipart/AbstractMultiPartBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/multipart/AbstractMultiPartBlock.java index 664af08dde..65dcf5228d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/multipart/AbstractMultiPartBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/multipart/AbstractMultiPartBlock.java @@ -3,17 +3,19 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; +import net.minecraft.util.RandomSource; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LevelEvent; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public abstract class AbstractMultiPartBlock

> extends Block implements IMultiPartBlockModelHolder { public AbstractMultiPartBlock(Properties properties) { @@ -54,27 +56,30 @@ public void setPlacedBy( } @Override - public BlockState updateShape( + protected BlockState updateShape( BlockState state, - Direction direction, - BlockState neighborState, - LevelAccessor level, + LevelReader level, + ScheduledTickAccess ticks, BlockPos pos, - BlockPos neighborPos) { + Direction directionToNeighbour, + BlockPos neighbourPos, + BlockState neighbourState, + RandomSource random + ) { if (!state.hasProperty(this.getPart())) { - return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + return super.updateShape(state, level, ticks, pos, directionToNeighbour, neighbourPos, neighbourState, random); } - Vec3i neighborOffset = neighborPos.subtract(pos); - for (P part : getParts()) { + Vec3i neighborOffset = neighbourPos.subtract(pos); + for (P part : this.getParts()) { Vec3i offset = this.offsetFrom(state, part); // 更新来源偏移值 if (!offset.equals(neighborOffset)) continue; - if (!neighborState.is(this) - || !neighborState.hasProperty(this.getPart()) - || neighborState.getValue(this.getPart()) != part) { + if (!neighbourState.is(this) + || !neighbourState.hasProperty(this.getPart()) + || neighbourState.getValue(this.getPart()) != part) { return Blocks.AIR.defaultBlockState(); } } - return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + return super.updateShape(state, level, ticks, pos, directionToNeighbour, neighbourPos, neighbourState, random); } @Override @@ -84,7 +89,7 @@ public BlockState playerWillDestroy( BlockState state, Player player ) { - if (!level.isClientSide && player.isCreative()) { + if (!level.isClientSide() && player.isCreative()) { this.preventCreativeDropFromMainPart(level, pos, state, player); } return super.playerWillDestroy(level, pos, state, player); @@ -110,7 +115,7 @@ protected void preventCreativeDropFromMainPart( public void removePartsAndUpdate(Level level, BlockPos pos) { BlockState baseState = level.getBlockState(pos); - for (P part : getParts()) { + for (P part : this.getParts()) { BlockPos bp = pos.offset(this.offsetFrom(baseState, part)); BlockState blockState = level.getBlockState(bp); level.setBlock(bp, blockState.getFluidState().createLegacyBlock(), 3, 0); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/multipart/FlexibleMultiPartBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/multipart/FlexibleMultiPartBlock.java index e9c63f5299..3f00a87b2a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/multipart/FlexibleMultiPartBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/multipart/FlexibleMultiPartBlock.java @@ -1,6 +1,5 @@ package dev.dubhe.anvilcraft.block.multipart; -import dev.anvilcraft.lib.v2.util.Util; import dev.anvilcraft.lib.v2.util.nullness.NonNullFunction; import dev.dubhe.anvilcraft.block.state.IFlexibleMultiPartBlockState; import net.minecraft.core.BlockPos; @@ -8,7 +7,6 @@ import net.minecraft.data.loot.BlockLootSubProvider; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -19,7 +17,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Arrays; import java.util.function.Consumer; @@ -33,7 +31,7 @@ public abstract class FlexibleMultiPartBlock< public FlexibleMultiPartBlock(Properties properties) { super(properties); - this.mainPart = Arrays.stream(getParts()).filter(IFlexibleMultiPartBlockState::isMain).findFirst().orElse(null); + this.mainPart = Arrays.stream(this.getParts()).filter(IFlexibleMultiPartBlockState::isMain).findFirst().orElse(null); } public abstract Property

getPart(); @@ -45,7 +43,7 @@ public FlexibleMultiPartBlock(Properties properties) { public void forEachPart(Level level, BlockPos pos, Consumer function) { BlockState state = level.getBlockState(pos); if (!state.is(this)) return; - for (P part : getParts()) { + for (P part : this.getParts()) { BlockPos partPos = pos.offset(this.offsetFrom(state, part)); if (level.getBlockState(partPos).is(this)) { function.accept(partPos); @@ -57,15 +55,15 @@ public , H extends Comparable> void updateState(Level l BlockState state = level.getBlockState(pos); if (!state.is(this)) return; state = state.setValue(property, value); - for (P part : getParts()) { + for (P part : this.getParts()) { BlockPos partPos = pos.offset(this.offsetFrom(state, part)); - if (level.getBlockState(partPos).is(this)) level.setBlock(partPos, state.setValue(getPart(), part), flag); + if (level.getBlockState(partPos).is(this)) level.setBlock(partPos, state.setValue(this.getPart(), part), flag); } } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(getPart(), getAdditionalProperty()); + builder.add(this.getPart(), this.getAdditionalProperty()); } @Override @@ -94,12 +92,10 @@ public BlockState mapRealModelHolderBlock(Level level, BlockPos blockPos, BlockS return level.getBlockState(this.getMainPartPos(blockPos, original)); } - /** - * 获取多方块战利品表 - * - * @param provider 提供器 - * @param block 方块 - */ + /// 获取多方块战利品表 + /// + /// @param provider 提供器 + /// @param block 方块 public static

& IFlexibleMultiPartBlockState, T extends Property, E extends Comparable> void loot( BlockLootSubProvider provider, FlexibleMultiPartBlock block ) { @@ -116,11 +112,9 @@ public BlockState getPlacementState(BlockPlaceContext context) { return super.getStateForPlacement(context); } - /** - * 是否有足够的空间放下方块 - */ + /// 是否有足够的空间放下方块 public boolean hasEnoughSpace(BlockState originState, BlockPos pos, LevelReader level) { - for (P part : getParts()) { + for (P part : this.getParts()) { BlockPos pos1 = pos.offset(this.offsetFrom(originState, part)); if (level.isOutsideBuildHeight(pos1)) return false; BlockState state = level.getBlockState(pos1); @@ -132,7 +126,7 @@ public boolean hasEnoughSpace(BlockState originState, BlockPos pos, LevelReader } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -141,7 +135,7 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - return Util.interactionResultConverter().apply(this.use(state, level, pos, player, hand, hitResult)); + return this.use(state, level, pos, player, hand, hitResult); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/multipart/MultiPartBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/multipart/MultiPartBlockEntity.java index dd6cf348d7..e225209d37 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/multipart/MultiPartBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/multipart/MultiPartBlockEntity.java @@ -4,15 +4,15 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public interface MultiPartBlockEntity

, T extends AbstractMultiPartBlock

> extends EntityBlock { T getMultiBlock(); @Override default @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - if (getMultiBlock().isMainPart(state)) { - return createBlockEntity(pos, state); + if (this.getMultiBlock().isMainPart(state)) { + return this.createBlockEntity(pos, state); } return null; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/multipart/SimpleMultiPartBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/multipart/SimpleMultiPartBlock.java index 91d6c352ea..582725364d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/multipart/SimpleMultiPartBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/multipart/SimpleMultiPartBlock.java @@ -1,13 +1,11 @@ package dev.dubhe.anvilcraft.block.multipart; -import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.block.state.ISimpleMultiPartBlockState; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.data.loot.BlockLootSubProvider; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -15,7 +13,7 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public abstract class SimpleMultiPartBlock

& ISimpleMultiPartBlockState

> extends AbstractMultiPartBlock

{ @@ -47,12 +45,10 @@ public BlockPos getMainPartPos(BlockPos pos, BlockState state) { return pos.subtract(this.getOffset(state)).offset(this.getMainPartOffset()); } - /** - * 获取多方块战利品表 - * - * @param provider 提供器 - * @param block 方块 - */ + /// 获取多方块战利品表 + /// + /// @param provider 提供器 + /// @param block 方块 public static & ISimpleMultiPartBlockState> void loot( BlockLootSubProvider provider, SimpleMultiPartBlock block ) { @@ -68,7 +64,7 @@ public static & ISimpleMultiPartBlockState> void loot( @Nullable @Override public final BlockState getStateForPlacement(BlockPlaceContext context) { - if (!hasEnoughSpace(context.getClickedPos(), context.getLevel())) return null; // 判断是否有足够空间放置方块 + if (!this.hasEnoughSpace(context.getClickedPos(), context.getLevel())) return null; // 判断是否有足够空间放置方块 return this.getPlacementState(context); } @@ -77,9 +73,7 @@ public BlockState getPlacementState(BlockPlaceContext context) { return super.getStateForPlacement(context); } - /** - * 是否有足够的空间放下方块 - */ + /// 是否有足够的空间放下方块 public boolean hasEnoughSpace(BlockPos pos, LevelReader level) { for (P part : getParts()) { BlockPos pos1 = pos.offset(part.getOffset()); @@ -93,7 +87,7 @@ public boolean hasEnoughSpace(BlockPos pos, LevelReader level) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -102,7 +96,7 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - return Util.interactionResultConverter().apply(this.use(state, level, pos, player, hand, hitResult)); + return this.use(state, level, pos, player, hand, hitResult); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/multipart/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/multipart/package-info.java index 6ca3d1bc81..920f95e785 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/multipart/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/multipart/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.multipart; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/nesting/NestingShulkerBoxBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/nesting/NestingShulkerBoxBlock.java index 95ceaf97ac..6275fc49df 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/nesting/NestingShulkerBoxBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/nesting/NestingShulkerBoxBlock.java @@ -4,11 +4,9 @@ import dev.dubhe.anvilcraft.block.better.BetterBlock; import dev.dubhe.anvilcraft.block.entity.nesting.NestingShulkerBoxBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.item.property.component.OverLimitItemContainerContents; -import net.minecraft.ChatFormatting; +import dev.dubhe.anvilcraft.util.ItemResourceHelper; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -18,9 +16,7 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; @@ -28,16 +24,16 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.ShulkerBoxBlock; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.neoforged.neoforge.items.IItemHandler; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.ResourceHandlerUtil; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jspecify.annotations.Nullable; import java.util.List; @@ -86,7 +82,7 @@ protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSou public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) { BlockEntity be = level.getBlockEntity(pos); if (be instanceof NestingShulkerBoxBlockEntity nesting) { - if (!level.isClientSide && player.isCreative() && !nesting.getItems().isEmpty()) { + if (!level.isClientSide() && player.isCreative() && !ResourceHandlerUtil.isEmpty(nesting.getItems())) { ItemStack stack = this.asItem().getDefaultInstance(); stack.applyComponents(be.collectComponents()); ItemEntity itemEntity = new ItemEntity( @@ -111,8 +107,8 @@ protected List getDrops(BlockState state, LootParams.Builder params) params = params.withDynamicDrop( ShulkerBoxBlock.CONTENTS, consumer -> { - for (int i = 0; i < box.getItemHandler().getSlots(); i++) { - consumer.accept(box.getItemHandler().getStackInSlot(i)); + for (int i = 0; i < box.getItemHandler().size(); i++) { + consumer.accept(box.getItemHandler().getResource(i).toStack(box.getItemHandler().getAmountAsInt(i))); } } ); @@ -122,34 +118,8 @@ protected List getDrops(BlockState state, LootParams.Builder params) } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (state.is(newState.getBlock())) return; - BlockEntity blockentity = level.getBlockEntity(pos); - super.onRemove(state, level, pos, newState, isMoving); - if (blockentity instanceof ShulkerBoxBlockEntity) { - level.updateNeighbourForOutputSignal(pos, state.getBlock()); - } - } - - @Override - public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltips, TooltipFlag flag) { - super.appendHoverText(stack, context, tooltips, flag); - int validLine = 0; - int nonEmpty = 0; - - for (var stack1 : stack.getOrDefault(ModComponents.OVER_LIMIT_CONTAINER, OverLimitItemContainerContents.EMPTY).nonEmptyItems()) { - nonEmpty++; - if (validLine > 4) continue; - validLine++; - tooltips.add(Component.translatable( - "container.shulkerBox.itemCount", - stack1.getStack().getHoverName(), - stack1.getCount() - )); - } - - if (nonEmpty - validLine <= 0) return; - tooltips.add(Component.translatable("container.shulkerBox.more", nonEmpty - validLine).withStyle(ChatFormatting.ITALIC)); + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); } @Override @@ -162,30 +132,31 @@ protected boolean hasAnalogOutputSignal(BlockState state) { return true; } - /** - * Returns the analog signal this block emits. This is the signal a comparator can read from it. - */ + /// Returns the analog signal this block emits. This is the signal a comparator can read from it. @Override - protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { if (!(level.getBlockEntity(pos) instanceof NestingShulkerBoxBlockEntity be)) return 0; - IItemHandler handler = be.getItemHandler(); + ResourceHandler handler = be.getItemHandler(); float f = 0.0F; - for (int i = 0; i < handler.getSlots(); i++) { - ItemStack stack = handler.getStackInSlot(i); + for (int i = 0; i < handler.size(); i++) { + ItemStack stack = ItemResourceHelper.getStackInSlot(handler, i); if (stack.isEmpty()) continue; - f += (float) stack.getCount() / (float) handler.getSlotLimit(i); + f += (float) stack.getCount() / (float) ItemResourceHelper.getSlotLimit(handler, i); } - f /= (float) handler.getSlots(); + f /= (float) handler.size(); return Mth.lerpDiscrete(f, 0, 15); } @Override - public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { - ItemStack stack = super.getCloneItemStack(state, target, level, pos, player); - level.getBlockEntity(pos, ModBlockEntities.NESTING_SHULKER_BOX.get()) - .ifPresent(be -> be.saveToItem(stack, level.registryAccess())); + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData, Player player) { + ItemStack stack = super.getCloneItemStack(level, pos, state, includeData, player); + if (includeData) { + level.getBlockEntity(pos, ModBlockEntities.NESTING_SHULKER_BOX.get()) + .ifPresent(be -> stack.applyComponents(be.collectComponents())); + } + return stack; } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/nesting/OverNestingShulkerBoxBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/nesting/OverNestingShulkerBoxBlock.java index 0e33e28115..28c6f214be 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/nesting/OverNestingShulkerBoxBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/nesting/OverNestingShulkerBoxBlock.java @@ -4,11 +4,9 @@ import dev.dubhe.anvilcraft.block.better.BetterBlock; import dev.dubhe.anvilcraft.block.entity.nesting.OverNestingShulkerBoxBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.item.property.component.OverLimitItemContainerContents; -import net.minecraft.ChatFormatting; +import dev.dubhe.anvilcraft.util.ItemResourceHelper; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -18,9 +16,7 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; @@ -28,7 +24,6 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.ShulkerBoxBlock; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; @@ -36,9 +31,10 @@ import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.neoforged.neoforge.items.IItemHandler; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.ResourceHandlerUtil; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jspecify.annotations.Nullable; import java.util.List; @@ -113,7 +109,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) { BlockEntity be = level.getBlockEntity(pos); if (be instanceof OverNestingShulkerBoxBlockEntity nesting) { - if (!level.isClientSide && player.isCreative() && !nesting.getItems().isEmpty()) { + if (!level.isClientSide() && player.isCreative() && !ResourceHandlerUtil.isEmpty(nesting.getItems())) { ItemStack stack = this.asItem().getDefaultInstance(); stack.applyComponents(be.collectComponents()); ItemEntity itemEntity = new ItemEntity( @@ -138,8 +134,8 @@ protected List getDrops(BlockState state, LootParams.Builder params) params = params.withDynamicDrop( ShulkerBoxBlock.CONTENTS, consumer -> { - for (int i = 0; i < box.getItemHandler().getSlots(); i++) { - consumer.accept(box.getItemHandler().getStackInSlot(i)); + for (int i = 0; i < box.getItemHandler().size(); i++) { + consumer.accept(box.getItemHandler().getResource(i).toStack(box.getItemHandler().getAmountAsInt(i))); } } ); @@ -149,34 +145,8 @@ protected List getDrops(BlockState state, LootParams.Builder params) } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (state.is(newState.getBlock())) return; - BlockEntity blockentity = level.getBlockEntity(pos); - super.onRemove(state, level, pos, newState, isMoving); - if (blockentity instanceof ShulkerBoxBlockEntity) { - level.updateNeighbourForOutputSignal(pos, state.getBlock()); - } - } - - @Override - public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltips, TooltipFlag flag) { - super.appendHoverText(stack, context, tooltips, flag); - int validLine = 0; - int nonEmpty = 0; - - for (var stack1 : stack.getOrDefault(ModComponents.OVER_LIMIT_CONTAINER, OverLimitItemContainerContents.EMPTY).nonEmptyItems()) { - nonEmpty++; - if (validLine > 4) continue; - validLine++; - tooltips.add(Component.translatable( - "container.shulkerBox.itemCount", - stack1.getStack().getHoverName(), - stack1.getCount() - )); - } - - if (nonEmpty - validLine <= 0) return; - tooltips.add(Component.translatable("container.shulkerBox.more", nonEmpty - validLine).withStyle(ChatFormatting.ITALIC)); + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); } @Override @@ -189,30 +159,30 @@ protected boolean hasAnalogOutputSignal(BlockState state) { return true; } - /** - * Returns the analog signal this block emits. This is the signal a comparator can read from it. - */ + /// Returns the analog signal this block emits. This is the signal a comparator can read from it. @Override - protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { if (!(level.getBlockEntity(pos) instanceof OverNestingShulkerBoxBlockEntity be)) return 0; - IItemHandler handler = be.getItemHandler(); + ResourceHandler handler = be.getItemHandler(); float f = 0.0F; - for (int i = 0; i < handler.getSlots(); i++) { - ItemStack stack = handler.getStackInSlot(i); + for (int i = 0; i < handler.size(); i++) { + ItemStack stack = ItemResourceHelper.getStackInSlot(handler, i); if (stack.isEmpty()) continue; - f += (float) stack.getCount() / (float) handler.getSlotLimit(i); + f += (float) stack.getCount() / (float) ItemResourceHelper.getSlotLimit(handler, i); } - f /= (float) handler.getSlots(); + f /= (float) handler.size(); return Mth.lerpDiscrete(f, 0, 15); } @Override - public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { - ItemStack stack = super.getCloneItemStack(state, target, level, pos, player); - level.getBlockEntity(pos, ModBlockEntities.OVER_NESTING_SHULKER_BOX.get()) - .ifPresent(be -> be.saveToItem(stack, level.registryAccess())); + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData, Player player) { + ItemStack stack = super.getCloneItemStack(level, pos, state, includeData, player); + if (includeData) { + level.getBlockEntity(pos, ModBlockEntities.OVER_NESTING_SHULKER_BOX.get()) + .ifPresent(be -> stack.applyComponents(be.collectComponents())); + } return stack; } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/nesting/SupercriticalNestingShulkerBoxBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/nesting/SupercriticalNestingShulkerBoxBlock.java index 36eb3d3939..0bba000a70 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/nesting/SupercriticalNestingShulkerBoxBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/nesting/SupercriticalNestingShulkerBoxBlock.java @@ -4,11 +4,9 @@ import dev.dubhe.anvilcraft.block.better.BetterBlock; import dev.dubhe.anvilcraft.block.entity.nesting.SupercriticalNestingShulkerBoxBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.item.property.component.OverLimitItemContainerContents; -import net.minecraft.ChatFormatting; +import dev.dubhe.anvilcraft.util.ItemResourceHelper; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -18,9 +16,7 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; @@ -28,7 +24,6 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.ShulkerBoxBlock; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; @@ -36,9 +31,10 @@ import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.neoforged.neoforge.items.IItemHandler; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.ResourceHandlerUtil; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jspecify.annotations.Nullable; import java.util.List; @@ -124,7 +120,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) { BlockEntity be = level.getBlockEntity(pos); if (be instanceof SupercriticalNestingShulkerBoxBlockEntity nesting) { - if (!level.isClientSide && player.isCreative() && !nesting.getItems().isEmpty()) { + if (!level.isClientSide() && player.isCreative() && !ResourceHandlerUtil.isEmpty(nesting.getItems())) { ItemStack stack = this.asItem().getDefaultInstance(); stack.applyComponents(be.collectComponents()); ItemEntity itemEntity = new ItemEntity( @@ -149,8 +145,8 @@ protected List getDrops(BlockState state, LootParams.Builder params) params = params.withDynamicDrop( ShulkerBoxBlock.CONTENTS, consumer -> { - for (int i = 0; i < box.getItemHandler().getSlots(); i++) { - consumer.accept(box.getItemHandler().getStackInSlot(i)); + for (int i = 0; i < box.getItemHandler().size(); i++) { + consumer.accept(box.getItemHandler().getResource(i).toStack(box.getItemHandler().getAmountAsInt(i))); } } ); @@ -160,34 +156,8 @@ protected List getDrops(BlockState state, LootParams.Builder params) } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (state.is(newState.getBlock())) return; - BlockEntity blockentity = level.getBlockEntity(pos); - super.onRemove(state, level, pos, newState, isMoving); - if (blockentity instanceof ShulkerBoxBlockEntity) { - level.updateNeighbourForOutputSignal(pos, state.getBlock()); - } - } - - @Override - public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltips, TooltipFlag flag) { - super.appendHoverText(stack, context, tooltips, flag); - int validLine = 0; - int nonEmpty = 0; - - for (var stack1 : stack.getOrDefault(ModComponents.OVER_LIMIT_CONTAINER, OverLimitItemContainerContents.EMPTY).nonEmptyItems()) { - nonEmpty++; - if (validLine > 4) continue; - validLine++; - tooltips.add(Component.translatable( - "container.shulkerBox.itemCount", - stack1.getStack().getHoverName(), - stack1.getCount() - )); - } - - if (nonEmpty - validLine <= 0) return; - tooltips.add(Component.translatable("container.shulkerBox.more", nonEmpty - validLine).withStyle(ChatFormatting.ITALIC)); + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); } @Override @@ -200,30 +170,30 @@ protected boolean hasAnalogOutputSignal(BlockState state) { return true; } - /** - * Returns the analog signal this block emits. This is the signal a comparator can read from it. - */ + /// Returns the analog signal this block emits. This is the signal a comparator can read from it. @Override - protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { if (!(level.getBlockEntity(pos) instanceof SupercriticalNestingShulkerBoxBlockEntity be)) return 0; - IItemHandler handler = be.getItemHandler(); + ResourceHandler handler = be.getItemHandler(); float f = 0.0F; - for (int i = 0; i < handler.getSlots(); i++) { - ItemStack stack = handler.getStackInSlot(i); + for (int i = 0; i < handler.size(); i++) { + ItemStack stack = ItemResourceHelper.getStackInSlot(handler, i); if (stack.isEmpty()) continue; - f += (float) stack.getCount() / (float) handler.getSlotLimit(i); + f += (float) stack.getCount() / (float) ItemResourceHelper.getSlotLimit(handler, i); } - f /= (float) handler.getSlots(); + f /= (float) handler.size(); return Mth.lerpDiscrete(f, 0, 15); } @Override - public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { - ItemStack stack = super.getCloneItemStack(state, target, level, pos, player); - level.getBlockEntity(pos, ModBlockEntities.SUPERCRITICAL_NESTING_SHULKER_BOX.get()) - .ifPresent(be -> be.saveToItem(stack, level.registryAccess())); + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData, Player player) { + ItemStack stack = super.getCloneItemStack(level, pos, state, includeData, player); + if (includeData) { + level.getBlockEntity(pos, ModBlockEntities.SUPERCRITICAL_NESTING_SHULKER_BOX.get()) + .ifPresent(be -> stack.applyComponents(be.collectComponents())); + } return stack; } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/nesting/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/nesting/package-info.java index bc4ac558bf..bbdaa3b26b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/nesting/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/nesting/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.nesting; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/package-info.java deleted file mode 100644 index c0532f7d10..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.block; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/plate/HealthPercentPressurePlateBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/plate/HealthPercentPressurePlateBlock.java index 39b9f83a24..ceedbaf6c7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/plate/HealthPercentPressurePlateBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/plate/HealthPercentPressurePlateBlock.java @@ -9,11 +9,11 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntitySelector; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.boss.EnderDragonPart; +import net.minecraft.world.entity.boss.enderdragon.EnderDragonPart; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.phys.AABB; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Set; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/plate/PlayerHungerPressurePlateBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/plate/PlayerHungerPressurePlateBlock.java index 3b6d9e3531..aefbfbd64a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/plate/PlayerHungerPressurePlateBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/plate/PlayerHungerPressurePlateBlock.java @@ -22,7 +22,7 @@ protected Set> getEntityClasses() { } @Override - protected int getSignalStrength(Level level, net.minecraft.world.phys.AABB box, Set> entityClasses) { + protected int getSignalStrength(Level level, AABB box, Set> entityClasses) { return (int) Math.clamp(getMaxHungerPercent(level, box) * 15, 0, 15); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/plate/PlayerInventoryPressurePlateBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/plate/PlayerInventoryPressurePlateBlock.java index f7f30b1258..d5a7b2c772 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/plate/PlayerInventoryPressurePlateBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/plate/PlayerInventoryPressurePlateBlock.java @@ -23,7 +23,7 @@ protected Set> getEntityClasses() { } @Override - protected int getSignalStrength(Level level, net.minecraft.world.phys.AABB box, Set> entityClasses) { + protected int getSignalStrength(Level level, AABB box, Set> entityClasses) { return (int) Math.clamp(getInventoryOccupiedCapacityMaxPercent(level, box) * 15, 0, 15); } @@ -37,7 +37,7 @@ protected static float getInventoryOccupiedCapacityMaxPercent(Level level, AABB Inventory inventory = player.getInventory(); int occupiedSlots = 0; - for (ItemStack stack : inventory.items) { + for (ItemStack stack : inventory.getNonEquipmentItems()) { if (!stack.isEmpty()) { occupiedSlots++; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/plate/PowerLevelPressurePlateBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/plate/PowerLevelPressurePlateBlock.java index ddb43c5fd3..2bf96186aa 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/plate/PowerLevelPressurePlateBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/plate/PowerLevelPressurePlateBlock.java @@ -9,6 +9,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.InsideBlockEffectApplier; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BasePressurePlateBlock; @@ -20,7 +21,7 @@ import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.AABB; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.HashSet; import java.util.Set; @@ -53,8 +54,15 @@ protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSou } @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - if (!level.isClientSide) { + protected void entityInside( + BlockState state, + Level level, + BlockPos pos, + Entity entity, + InsideBlockEffectApplier effectApplier, + boolean isPrecise + ) { + if (!level.isClientSide()) { int i = this.getSignalForState(state); if (i == 0) { this.checkPressed(entity, level, pos, state, i); @@ -72,8 +80,8 @@ protected void checkPressed(@Nullable Entity entity, Level level, BlockPos pos, boolean isActivating = currentSignal > 0; boolean needActivate = expectedSignal > 0; - updateSignal(level, pos, state, currentSignal, expectedSignal); - sendEvent(entity, level, pos, needActivate, isActivating); + this.updateSignal(level, pos, state, currentSignal, expectedSignal); + this.sendEvent(entity, level, pos, needActivate, isActivating); if (needActivate) { level.scheduleTick(new BlockPos(pos), this, this.getPressedTime()); @@ -82,7 +90,7 @@ protected void checkPressed(@Nullable Entity entity, Level level, BlockPos pos, @Override protected int getSignalStrength(Level level, BlockPos pos) { - return getSignalStrength(level, TOUCH_AABB.move(pos), getEntityClasses()); + return this.getSignalStrength(level, TOUCH_AABB.move(pos), this.getEntityClasses()); } protected int getSignalStrength(Level level, AABB box, Set> entityClasses) { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/plate/TimeCountedPressurePlateBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/plate/TimeCountedPressurePlateBlock.java index d314466deb..454d8aa68a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/plate/TimeCountedPressurePlateBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/plate/TimeCountedPressurePlateBlock.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.IntegerProperty; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class TimeCountedPressurePlateBlock extends PressurePlateBlock implements EntityBlock { public final int needTick; @@ -50,7 +50,7 @@ protected BlockState setSignalForState(BlockState state, int signal) { @Override public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new TimeCountedPressurePlateBlockEntity(pos, state, needTick); + return new TimeCountedPressurePlateBlockEntity(pos, state, this.needTick); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/plate/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/plate/package-info.java index 63c29548ef..3cf50ad705 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/plate/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/plate/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.plate; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeliostatsBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/HeliostatsBlock.java similarity index 97% rename from src/main/java/dev/dubhe/anvilcraft/block/HeliostatsBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/HeliostatsBlock.java index 44723d209b..890241f410 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeliostatsBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/HeliostatsBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -18,7 +18,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.stream.Stream; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/LoadMonitorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/LoadMonitorBlock.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/LoadMonitorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/LoadMonitorBlock.java index cb5aa1d9fc..44657f015a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/LoadMonitorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/LoadMonitorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -24,7 +24,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.stream.Stream; @@ -53,22 +53,22 @@ protected void createBlockStateDefinition(StateDefinition.Builder chargeNums = ANVIL_TYPES.get(entity.blockState.getBlock()); @@ -72,7 +70,7 @@ public void onHitByAnvil(FallingBlockEntity entity, float fallDistance, Level le int distance = (int) Math.min(chargeNums.size() - 1, fallDistance); int chargeNum = chargeNums.get(distance); ChargeCollectorManager.charge(chargeNum, level, blockPos); - pressureConduction(level, blockPos, chargeNum / 2); + this.pressureConduction(level, blockPos, chargeNum / 2); TriggerUtil.anvilHitPiezoelectricCrystal(level, blockPos); level.scheduleTick(blockPos, this, 4); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/batch/BaseBatchCraftingBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/batch/BaseBatchCraftingBlock.java new file mode 100644 index 0000000000..000418022d --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/batch/BaseBatchCraftingBlock.java @@ -0,0 +1,228 @@ +package dev.dubhe.anvilcraft.block.power.batch; + +import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.api.item.IDiskCloneable; +import dev.dubhe.anvilcraft.api.power.IPowerComponent; +import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; +import dev.dubhe.anvilcraft.block.entity.batch.BatchCrafterBlockEntity; +import dev.dubhe.anvilcraft.init.item.ModItems; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.DirectionalBlock; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.redstone.Orientation; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Unmodifiable; +import org.jspecify.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public abstract class BaseBatchCraftingBlock extends BetterBaseEntityBlock implements HammerRotateBehavior, IHammerRemovable { + public static final EnumProperty FACING = DirectionalBlock.FACING; + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; + + protected BaseBatchCraftingBlock(Properties properties) { + super(properties); + this.registerDefaultState( + this.stateDefinition + .any() + .setValue(POWERED, false) + .setValue(OVERLOAD, true) + .setValue(FACING, Direction.NORTH) + ); + } + + @Override + public boolean hasAnalogOutputSignal(BlockState state) { + return true; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof BatchCrafterBlockEntity crafterBlockEntity) { + return crafterBlockEntity.getRedstoneSignal(); + } + return 0; + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + if (level.isClientSide()) return InteractionResult.SUCCESS; + + BlockEntity be = level.getBlockEntity(pos); + ItemStack stack = player.getItemInHand(hand); + if (be instanceof IDiskCloneable cloneable && stack.is(ModItems.DISK.get())) { + return cloneable.useDisk(level, player, hand, stack, hit); + } + + return this.playerUse(level, pos, state, be, player, hand, hit); + } + + /// 当玩家交互此方块时调用 + /// + /// @param level 方块所在的世界 + /// @param pos 方块所在的位置 + /// @param state 方块的状态 + /// @param be 方块的方块实体 + /// @param player 交互该方块的玩家 + /// @param hand 玩家交互该方块的手 + /// @param hit 玩家视线与方块的碰撞计算结果 + /// @return 此次交互的结果 + protected abstract InteractionResult playerUse( + Level level, + BlockPos pos, + BlockState state, + @Nullable BlockEntity be, + Player player, + InteractionHand hand, + BlockHitResult hit + ); + + public abstract Item getToastSymbol(); + + // @Override + // protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + // if (state.is(newState.getBlock())) return; + // if (level.getBlockEntity(pos) instanceof IItemHandlerHolder holder) { + // Vec3 vec3 = pos.getCenter(); + // ResourceHandler handler = holder.getItemHandler(); + // for (int slot = 0; slot < handler.getSlots(); slot++) { + // Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, handler.getStackInSlot(slot)); + // } + // ItemHandlerUtil.dropAllToPos(); + // level.updateNeighbourForOutputSignal(pos, this); + // } + // super.onRemove(state, level, pos, newState, movedByPiston); + // } + + @Override + public boolean useShapeForLightOcclusion(BlockState state) { + return true; + } + + @Override + public VoxelShape getVisualShape( + BlockState state, + BlockGetter level, + BlockPos pos, + CollisionContext context + ) { + return Shapes.empty(); + } + + @Override + public float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { + return 1.0F; + } + + @Override + protected boolean propagatesSkylightDown(BlockState state) { + return true; + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + @Nullable + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction dir = context.getNearestLookingDirection().getOpposite(); + if (context.getPlayer() != null && context.getPlayer().isShiftKeyDown()) dir = dir.getOpposite(); + return this.defaultBlockState() + .setValue(FACING, dir) + .setValue(POWERED, context.getLevel().hasNeighborSignal(context.getClickedPos())) + .setValue(OVERLOAD, true); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(POWERED).add(OVERLOAD).add(FACING); + } + + @Override + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { + if (level.isClientSide()) return; + level.setBlock(pos, state.setValue(POWERED, level.hasNeighborSignal(pos)), 2); + } + + @Override + public void tick( + BlockState state, + ServerLevel level, + BlockPos pos, + RandomSource random + ) { + if (state.getValue(POWERED) && !level.hasNeighborSignal(pos)) { + level.setBlock(pos, state.cycle(POWERED), 2); + } + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return this.rotate(state, mirror.getRotation(state.getValue(FACING))); + } + + public static BlockState copy(BlockState from, BlockState to) { + if ( + !(from.getBlock() instanceof BaseBatchCraftingBlock) + || !(to.getBlock() instanceof BaseBatchCraftingBlock) + ) { + return to; + } + return to + .setValue(POWERED, from.getValue(POWERED)) + .setValue(OVERLOAD, from.getValue(OVERLOAD)) + .setValue(FACING, from.getValue(FACING)); + } + + private static final List> BATCH_CRAFTING_BLOCK_GETTERS = new ArrayList<>(); + + public static void registerBatchCrafting(Supplier getter) { + BaseBatchCraftingBlock.BATCH_CRAFTING_BLOCK_GETTERS.add(getter); + } + + public static @Unmodifiable List> getBatchCraftingBlockGetters() { + return BaseBatchCraftingBlock.BATCH_CRAFTING_BLOCK_GETTERS; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/batch/BatchCrafterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/batch/BatchCrafterBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/batch/BatchCrafterBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/batch/BatchCrafterBlock.java index 05f32a3bf0..f5ed9aa600 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/batch/BatchCrafterBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/batch/BatchCrafterBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.batch; +package dev.dubhe.anvilcraft.block.power.batch; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.block.entity.batch.BatchCrafterBlockEntity; @@ -25,7 +25,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class BatchCrafterBlock extends BaseBatchCraftingBlock { public BatchCrafterBlock(Properties properties) { @@ -63,7 +63,7 @@ protected InteractionResult playerUse( ); PacketDistributor.sendToPlayer(serverPlayer, new SlotFilterChangePacket(i, entity.getFilter(i))); } - return InteractionResult.SUCCESS_NO_ITEM_USED; + return InteractionResult.SUCCESS; } @Nullable @@ -75,11 +75,11 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Nullable @Override public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return BaseEntityBlock.createTickerHelper( type, ModBlockEntities.BATCH_CRAFTER.get(), - (level1, pos, blockState, blockEntity) -> blockEntity.tick(level1, pos) + (level1, pos, _, be) -> be.tick(level1, pos) ); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/batch/BatchCutterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/batch/BatchCutterBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/batch/BatchCutterBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/batch/BatchCutterBlock.java index ae22df0e47..5925b26b89 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/batch/BatchCutterBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/batch/BatchCutterBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block.batch; +package dev.dubhe.anvilcraft.block.power.batch; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.block.entity.batch.BatchCutterBlockEntity; @@ -25,7 +25,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class BatchCutterBlock extends BaseBatchCraftingBlock { public BatchCutterBlock(Properties properties) { @@ -63,7 +63,7 @@ protected InteractionResult playerUse( ); PacketDistributor.sendToPlayer(serverPlayer, new SlotFilterChangePacket(i, entity.getFilter(i))); } - return InteractionResult.SUCCESS_NO_ITEM_USED; + return InteractionResult.SUCCESS; } @Nullable @@ -75,11 +75,11 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Nullable @Override public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return BaseEntityBlock.createTickerHelper( type, ModBlockEntities.BATCH_CUTTER.get(), - (level1, pos, blockState, blockEntity) -> blockEntity.tick(level1, pos) + (level1, pos, _, be) -> be.tick(level1, pos) ); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/batch/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/power/batch/package-info.java new file mode 100644 index 0000000000..cc2d7fe512 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/batch/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.power.batch; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/DischargerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/DischargerBlock.java new file mode 100644 index 0000000000..a479626ee7 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/DischargerBlock.java @@ -0,0 +1,62 @@ +package dev.dubhe.anvilcraft.block.power.consumer; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.block.entity.DischargerBlockEntity; +import dev.dubhe.anvilcraft.block.power.generator.ChargerBlock; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.util.IStateListener; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import org.jspecify.annotations.Nullable; + +public class DischargerBlock extends ChargerBlock { + + public DischargerBlock(Properties properties) { + super(properties); + } + + @Override + protected MapCodec codec() { + return simpleCodec(DischargerBlock::new); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new DischargerBlockEntity(ModBlockEntities.DISCHARGER.get(), pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker( + Level level, + BlockState state, + BlockEntityType type + ) { + if (level.isClientSide()) return null; + return createTickerHelper( + type, + ModBlockEntities.DISCHARGER.get(), + (level1, blockPos, _, be) -> be.tick(level1, blockPos) + ); + } + + @SuppressWarnings("unchecked") + @Override + public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { + level.setBlock(blockPos, ModBlocks.CHARGER.getDefaultState(), 2); + if (level.getBlockEntity(blockPos) instanceof IStateListener listener) { + IStateListener self = (IStateListener) listener; + self.notifyStateChanged(true); + } + return true; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeaterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/HeaterBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/HeaterBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/consumer/HeaterBlock.java index 61abc886d2..4a5232768d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeaterBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/HeaterBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.consumer; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -6,6 +6,7 @@ import dev.dubhe.anvilcraft.block.entity.HeaterBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.init.entity.ModDamageTypes; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; @@ -25,7 +26,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class HeaterBlock extends BaseEntityBlock implements IHammerRemovable { public static final VoxelShape SHAPE = Shapes.or(Block.box(0, 2, 0, 16, 16, 16), Block.box(1, 0, 1, 15, 2, 15)); @@ -67,7 +68,7 @@ public RenderShape getRenderShape(BlockState state) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return createTickerHelper( type, ModBlockEntities.HEATER.get(), (level1, pos, state1, entity) -> entity.tick(level1, pos)); } @@ -78,7 +79,7 @@ public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { && !state.getValue(OVERLOAD) && !entity.isSteppingCarefully() && entity instanceof LivingEntity) { - entity.hurt(level.damageSources().hotFloor(), 4.0F); + entity.hurt(ModDamageTypes.heaterBurn(level), 4.0F); } super.stepOn(level, pos, state, entity); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/InductionLightBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/InductionLightBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/InductionLightBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/consumer/InductionLightBlock.java index cf23e1f396..88e0129d60 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/InductionLightBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/InductionLightBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.consumer; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.BlockPlaceAssist; @@ -13,12 +13,10 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.tags.ItemTags; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -40,10 +38,11 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class InductionLightBlock extends BetterBaseEntityBlock implements IHammerRemovable, SimpleWaterloggedBlock { public static final VoxelShape SHAPE_X = Block.box(0, 6, 6, 16, 10, 10); @@ -153,7 +152,7 @@ public InteractionResult use( BlockHitResult hit ) { ItemStack itemInHand = player.getItemInHand(hand); - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; if (itemInHand.is(ModBlocks.INDUCTION_LIGHT.asItem())) { return BlockPlaceAssist.tryPlace( state, level, pos, player, hand, hit, @@ -169,10 +168,8 @@ public InteractionResult use( return InteractionResult.SUCCESS; } else if (itemInHand.is(ItemTags.AXES)) { level.setBlockAndUpdate(pos, state.setValue(COLOR, LightColor.PRIMARY)); - itemInHand.hurtAndBreak(1, (ServerLevel) level, (ServerPlayer) player, - item -> player.onEquippedItemBroken(item, LivingEntity.getSlotForHand(hand)) - ); - return InteractionResult.CONSUME_PARTIAL; + itemInHand.hurtAndBreak(1, player, hand); + return InteractionResult.SUCCESS; } else if (itemInHand.is(ModItems.VOID_MATTER.asItem())) { level.setBlockAndUpdate(pos, state.setValue(COLOR, LightColor.DARK)); return InteractionResult.SUCCESS; @@ -183,7 +180,7 @@ public InteractionResult use( @Override @Nullable public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) { + if (level.isClientSide()) { return null; } return createTickerHelper( @@ -194,15 +191,15 @@ public BlockEntityTicker getTicker(Level level, Block } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston ) { - if (level.isClientSide) return; + if (level.isClientSide()) return; if (state.getValue(WATERLOGGED)) level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); if (state.getValue(OVERLOAD)) return; level.setBlock(pos, state.setValue(POWERED, level.hasNeighborSignal(pos)), 2); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ItemCollectorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/ItemCollectorBlock.java similarity index 79% rename from src/main/java/dev/dubhe/anvilcraft/block/ItemCollectorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/consumer/ItemCollectorBlock.java index 2faa024d4a..a35c339d9e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ItemCollectorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/ItemCollectorBlock.java @@ -1,8 +1,7 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.consumer; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; import dev.dubhe.anvilcraft.api.power.IPowerComponent; import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; import dev.dubhe.anvilcraft.block.entity.ItemCollectorBlockEntity; @@ -12,7 +11,9 @@ import dev.dubhe.anvilcraft.network.MachineEnableFilterPacket; import dev.dubhe.anvilcraft.network.SlotDisableChangePacket; import dev.dubhe.anvilcraft.network.SlotFilterChangePacket; +import dev.dubhe.anvilcraft.util.ItemResourceHelper; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; @@ -34,22 +35,21 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jspecify.annotations.Nullable; import java.util.List; -import static dev.dubhe.anvilcraft.block.entity.ItemCollectorBlockEntity.POACHING_COLLECTOR_MAP; - public class ItemCollectorBlock extends BetterBaseEntityBlock implements IHammerRemovable { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; - /** - * 物品收集器 - */ + /// 物品收集器 public ItemCollectorBlock(Properties properties) { super(properties); this.registerDefaultState( @@ -76,34 +76,21 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { } @Override - public void onRemove( + protected void affectNeighborsAfterRemoval( BlockState state, - Level level, + ServerLevel level, BlockPos pos, - BlockState newState, boolean movedByPiston ) { - if (state.is(newState.getBlock())) return; + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); if (level.getBlockEntity(pos) instanceof ItemCollectorBlockEntity entity) { - - List chunkPosList = entity.getPoachingMapPositions(8); - for (ChunkPos chunkPos : chunkPosList) { - if (POACHING_COLLECTOR_MAP.containsKey(level) && POACHING_COLLECTOR_MAP.get(level).containsKey(chunkPos)) { - List list = POACHING_COLLECTOR_MAP.get(level).get(chunkPos); - list.remove(entity); - } - } - entity.setRemoved(); - Vec3 vec3 = entity.getBlockPos().getCenter(); - FilteredItemStackHandler depository = entity.getItemHandler(); - for (int slot = 0; slot < depository.getSlots(); slot++) { - Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, depository.getStackInSlot(slot)); + ResourceHandler depository = entity.getItemHandler(); + for (int slot = 0; slot < depository.size(); slot++) { + Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, ItemResourceHelper.getStackInSlot(depository, slot)); } - level.updateNeighbourForOutputSignal(pos, this); } - super.onRemove(state, level, pos, newState, movedByPiston); } @Nullable @@ -113,11 +100,14 @@ public BlockEntityTicker getTicker( BlockState state, BlockEntityType type ) { - if (level.isClientSide) { + if (level.isClientSide()) { return null; } return createTickerHelper( - type, ModBlockEntities.ITEM_COLLECTOR.get(), (level1, blockPos, blockState, blockEntity) -> blockEntity.tick(level1, blockPos)); + type, + ModBlockEntities.ITEM_COLLECTOR.get(), + (level1, blockPos, _, blockEntity) -> blockEntity.tick(level1, blockPos) + ); } @Override @@ -142,7 +132,7 @@ public InteractionResult use( Player player, InteractionHand hand, BlockHitResult hit) { - if (level.isClientSide) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } BlockEntity blockEntity = level.getBlockEntity(pos); @@ -167,14 +157,14 @@ public InteractionResult use( } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston) { - if (level.isClientSide) { + if (level.isClientSide()) { return; } level.setBlock(pos, state.setValue(POWERED, level.hasNeighborSignal(pos)), 2); @@ -193,7 +183,7 @@ public RenderShape getRenderShape(BlockState state) { } @Override - public int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos blockPos) { + protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos blockPos, Direction direction) { BlockEntity blockEntity = level.getBlockEntity(blockPos); if (blockEntity instanceof ItemCollectorBlockEntity itemCollectorBlockEntity) { return itemCollectorBlockEntity.getRedstoneSignal(); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/TeslaTowerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/TeslaTowerBlock.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/block/TeslaTowerBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/consumer/TeslaTowerBlock.java index 6a87672106..24212c9871 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/TeslaTowerBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/TeslaTowerBlock.java @@ -1,6 +1,5 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.consumer; -import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.api.IHasMultiBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.api.power.IPowerComponent; @@ -17,7 +16,6 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -35,13 +33,14 @@ import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class TeslaTowerBlock extends SimpleMultiPartBlock @@ -123,8 +122,8 @@ public BlockState placedState(Vertical4PartHalf part, BlockState state) { @Override public BlockState playerWillDestroy( Level level, BlockPos pos, BlockState state, Player player) { - if (level.isClientSide) return state; - onRemove(level, pos, state); + if (level.isClientSide()) return state; + this.onRemove(level, pos, state); super.playerWillDestroy(level, pos, state, player); return state; } @@ -143,21 +142,21 @@ public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return (level1, pos, state1, entity) -> { if (entity instanceof TeslaTowerBlockEntity entity1) entity1.tick(); }; } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston) { - if (level.isClientSide) { + if (level.isClientSide()) { return; } if (state.getValue(HALF) != Vertical4PartHalf.BOTTOM) return; @@ -196,7 +195,7 @@ protected InteractionResult useWithoutItem( Player player, BlockHitResult hitResult ) { - if (level.isClientSide) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } if (state.is(this)) { @@ -213,7 +212,7 @@ protected InteractionResult useWithoutItem( } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -222,13 +221,12 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - if (level.isClientSide) return ItemInteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; if (player instanceof ServerPlayer serverPlayer) { if (level.getBlockEntity(pos) instanceof TeslaTowerBlockEntity be && player.getItemInHand(hand).is(ModItems.DISK)) { - return Util.interactionResultConverter() - .apply(be.useDisk(level, serverPlayer, hand, serverPlayer.getItemInHand(hand), hitResult)); + return be.useDisk(level, serverPlayer, hand, serverPlayer.getItemInHand(hand), hitResult); } } - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); + return InteractionResult.TRY_WITH_EMPTY_HAND; } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/package-info.java new file mode 100644 index 0000000000..1e36a885ae --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.power.consumer; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BasePowerConverterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/BasePowerConverterBlock.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/block/BasePowerConverterBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/converter/BasePowerConverterBlock.java index cec32634d5..078a8eaa66 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/BasePowerConverterBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/BasePowerConverterBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.converter; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.api.power.IPowerComponent; @@ -21,21 +21,19 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public abstract class BasePowerConverterBlock extends BetterBaseEntityBlock implements IHammerRemovable { private final int inputPower; - public static final DirectionProperty FACING = BlockStateProperties.FACING; + public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; - /** - * 基本电源转换器模块 - */ + /// 基本电源转换器模块 public BasePowerConverterBlock(Properties properties, int inputPower) { super(properties); registerDefaultState( @@ -92,7 +90,7 @@ public RenderShape getRenderShape(BlockState state) { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new PowerConverterBlockEntity(ModBlockEntities.POWER_CONVERTER.get(), pos, state, inputPower); + return new PowerConverterBlockEntity(ModBlockEntities.POWER_CONVERTER.get(), pos, state, this.inputPower); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/PowerConverterBigBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterBigBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/PowerConverterBigBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterBigBlock.java index c286d7bdd9..7d33c77bec 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/PowerConverterBigBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterBigBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.converter; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -18,8 +18,10 @@ public class PowerConverterBigBlock extends BasePowerConverterBlock implements I public static final VoxelShape SHAPE_SOUTH = Block.box(5, 5, 8, 11, 11, 16); public static final VoxelShape SHAPE_WEST = Block.box(0, 5, 5, 8, 11, 11); + public static final int INPUT_TIME = 256; + public PowerConverterBigBlock(Properties properties) { - super(properties, 36); + super(properties, INPUT_TIME); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/PowerConverterMiddleBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterMiddleBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/PowerConverterMiddleBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterMiddleBlock.java index 0884c0614c..389feebdc3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/PowerConverterMiddleBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterMiddleBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.converter; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -18,8 +18,10 @@ public class PowerConverterMiddleBlock extends BasePowerConverterBlock implement public static final VoxelShape SHAPE_SOUTH = Block.box(6, 6, 8, 10, 10, 16); public static final VoxelShape SHAPE_WEST = Block.box(0, 6, 6, 8, 10, 10); + public static final int INPUT_TIME = 16; + public PowerConverterMiddleBlock(Properties properties) { - super(properties, 6); + super(properties, INPUT_TIME); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/PowerConverterSmallBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterSmallBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/PowerConverterSmallBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterSmallBlock.java index b0c3b27055..4535b0a6b3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/PowerConverterSmallBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/PowerConverterSmallBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.converter; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -18,8 +18,10 @@ public class PowerConverterSmallBlock extends BasePowerConverterBlock implements public static final VoxelShape SHAPE_SOUTH = Block.box(7, 7, 8, 9, 9, 16); public static final VoxelShape SHAPE_WEST = Block.box(0, 7, 7, 8, 9, 9); + public static final int INPUT_TIME = 1; + public PowerConverterSmallBlock(Properties properties) { - super(properties, 1); + super(properties, INPUT_TIME); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/converter/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/package-info.java new file mode 100644 index 0000000000..5817327cdd --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/converter/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.power.converter; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ChargeCollectorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/ChargeCollectorBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/ChargeCollectorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/generator/ChargeCollectorBlock.java index c2094b756e..12ad2e6a85 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ChargeCollectorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/ChargeCollectorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.generator; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -23,7 +23,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class ChargeCollectorBlock extends BetterBaseEntityBlock implements IHammerRemovable { public static VoxelShape SHAPE = Shapes.or( @@ -88,9 +88,9 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - super.onRemove(state, level, pos, newState, movedByPiston); - if (!state.is(newState.getBlock()) && state.getValue(POWERED)) { + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); + if (state.getValue(POWERED)) { this.updateNeighbours(level, pos); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/generator/ChargerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/ChargerBlock.java new file mode 100644 index 0000000000..cb55fde353 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/ChargerBlock.java @@ -0,0 +1,227 @@ +package dev.dubhe.anvilcraft.block.power.generator; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler; +import dev.dubhe.anvilcraft.api.power.IPowerComponent; +import dev.dubhe.anvilcraft.block.entity.ChargerBlockEntity; +import dev.dubhe.anvilcraft.block.entity.DischargerBlockEntity; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.util.IStateListener; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.redstone.Orientation; +import net.minecraft.world.phys.BlockHitResult; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; + +public class ChargerBlock extends BaseEntityBlock implements IHammerRemovable, IHammerChangeable { + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; + + public ChargerBlock(Properties properties) { + super(properties); + registerDefaultState(getStateDefinition().any().setValue(POWERED, false).setValue(OVERLOAD, true)); + } + + @Override + protected MapCodec codec() { + return simpleCodec(ChargerBlock::new); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return defaultBlockState().setValue(POWERED, false).setValue(OVERLOAD, true); + } + + @Nullable + @Override + public BlockEntityTicker getTicker( + Level level, + BlockState state, + BlockEntityType type + ) { + if (level.isClientSide()) { + return null; + } + return createTickerHelper( + type, + ModBlockEntities.CHARGER.get(), + (level1, blockPos, _, be) -> be.tick(level1, blockPos) + ); + } + + @Override + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { + if (level.isClientSide()) return; + level.setBlock(pos, state.setValue(POWERED, level.hasNeighborSignal(pos)), 2); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new ChargerBlockEntity(ModBlockEntities.CHARGER.get(), pos, state); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(POWERED).add(OVERLOAD); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + level.updateNeighbourForOutputSignal(pos, this); + } + + @Override + public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (state.getValue(POWERED) && !level.hasNeighborSignal(pos)) { + level.setBlock(pos, state.cycle(POWERED), 2); + } + } + + @SuppressWarnings("unchecked") + @Override + public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { + level.setBlock(blockPos, ModBlocks.DISCHARGER.getDefaultState(), 2); + if (level.getBlockEntity(blockPos) instanceof IStateListener listener) { + IStateListener self = (IStateListener) listener; + self.notifyStateChanged(false); + } + return true; + } + + @Override + public @Nullable Property getChangeableProperty(BlockState blockState) { + return null; + } + + @Override + protected boolean hasAnalogOutputSignal(BlockState state) { + return true; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof ChargerBlockEntity charger) return charger.getAnalogRedstoneSignal(); + if (blockEntity instanceof DischargerBlockEntity discharger) return discharger.getAnalogRedstoneSignal(); + return 0; + } + + @Override + protected InteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hit + ) { + if (level.isClientSide()) return InteractionResult.SUCCESS; + + BlockEntity be = level.getBlockEntity(pos); + if (!(be instanceof ChargerBlockEntity) && !(be instanceof DischargerBlockEntity)) { + return InteractionResult.PASS; + } + FilteredItemStackHandler handler = be instanceof ChargerBlockEntity charger + ? charger.getFilteredItemStackHandler() + : ((DischargerBlockEntity) be).getFilteredItemStackHandler(); + + if (stack.isEmpty()) { + return tryExtract(player, level, pos, handler, be); + } + + if (!handler.getStacks().get(0).isEmpty()) return InteractionResult.PASS; + + ItemResource resource = ItemResource.of(stack); + if (be instanceof ChargerBlockEntity charger && !charger.containsValidItem(resource)) return InteractionResult.PASS; + if (be instanceof DischargerBlockEntity discharger && !discharger.containsValidItem(resource)) return InteractionResult.PASS; + + try (Transaction tx = Transaction.openRoot()) { + int inserted = handler.insert(0, resource, 1, tx); + if (inserted == 0) return InteractionResult.PASS; + tx.commit(); + stack.shrink(inserted); + return InteractionResult.CONSUME; + } + } + + @Override + protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hit) { + if (level.isClientSide()) return InteractionResult.SUCCESS; + + BlockEntity be = level.getBlockEntity(pos); + if (!(be instanceof ChargerBlockEntity) && !(be instanceof DischargerBlockEntity)) { + return InteractionResult.PASS; + } + FilteredItemStackHandler handler = be instanceof ChargerBlockEntity charger + ? charger.getFilteredItemStackHandler() + : ((DischargerBlockEntity) be).getFilteredItemStackHandler(); + + return tryExtract(player, level, pos, handler, be); + } + + private static InteractionResult tryExtract( + Player player, Level level, BlockPos pos, FilteredItemStackHandler handler, BlockEntity be) { + for (int slot : new int[]{2, 1, 0}) { + ItemStack stack = handler.getStacks().get(slot); + if (stack.isEmpty()) continue; + try (Transaction tx = Transaction.openRoot()) { + final ItemResource resourceIn = handler.getResource(slot); + int count = handler.getAmountAsInt(slot); + if (count <= 0) continue; + handler.set(slot, ItemResource.EMPTY, 0); + tx.commit(); + // 只有从加工槽(slot 1)取物才中断加工,从输出槽取成品不影响加工 + if (slot == 1) { + if (be instanceof ChargerBlockEntity charger) charger.stopProcessing(); + if (be instanceof DischargerBlockEntity discharger) discharger.stopProcessing(); + } + player.getInventory().placeItemBackInInventory(resourceIn.toStack(count)); + level.playSound(null, pos, SoundEvents.ITEM_PICKUP, + SoundSource.PLAYERS, .2F, 1F + level.getRandom().nextFloat()); + return InteractionResult.SUCCESS; + } + } + return InteractionResult.PASS; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/CreativeGeneratorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/CreativeGeneratorBlock.java similarity index 95% rename from src/main/java/dev/dubhe/anvilcraft/block/CreativeGeneratorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/generator/CreativeGeneratorBlock.java index 38750df623..0d8aec219b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/CreativeGeneratorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/CreativeGeneratorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.generator; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -25,7 +25,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class CreativeGeneratorBlock extends BetterBaseEntityBlock implements IHammerRemovable { public static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 4, 16); @@ -40,7 +40,6 @@ protected MapCodec codec() { } @Override - @SuppressWarnings({"UnreachableCode"}) public InteractionResult use( BlockState state, Level level, @@ -49,7 +48,7 @@ public InteractionResult use( InteractionHand hand, BlockHitResult hit ) { - if (level.isClientSide) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } if (level.getBlockEntity(pos) instanceof CreativeGeneratorBlockEntity entity diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HeatCollectorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/HeatCollectorBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/HeatCollectorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/generator/HeatCollectorBlock.java index 59980d3059..ed0fb067ee 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HeatCollectorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/HeatCollectorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.generator; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -23,7 +23,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class HeatCollectorBlock extends BaseEntityBlock implements IHammerRemovable { public static final VoxelShape SHAPE = Shapes.or(Block.box(0, 0, 0, 16, 4, 16)); @@ -94,9 +94,9 @@ private void updateNeighbours(Level level, BlockPos pos) { } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - super.onRemove(state, level, pos, newState, movedByPiston); - if (!state.is(newState.getBlock()) && state.getValue(POWERED)) { + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); + if (state.getValue(POWERED)) { this.updateNeighbours(level, pos); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/VoidEnergyCollectorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/VoidEnergyCollectorBlock.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/block/VoidEnergyCollectorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/generator/VoidEnergyCollectorBlock.java index b6bafccc8d..33509d7d21 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/VoidEnergyCollectorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/VoidEnergyCollectorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.generator; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -26,7 +26,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Optional; @@ -83,9 +83,9 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - super.onRemove(state, level, pos, newState, movedByPiston); - if (!state.is(newState.getBlock()) && state.getValue(POWERED)) { + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); + if (state.getValue(POWERED)) { this.updateNeighbours(level, pos); } } @@ -93,9 +93,9 @@ protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState @Override public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { if (VoidEnergyCollectorBlockEntity.isAnotherCollectorNearby(context.getLevel(), context.getClickedPos())) { - Optional.ofNullable(context.getPlayer()).ifPresent(player -> player.displayClientMessage( + Optional.ofNullable(context.getPlayer()).ifPresent(player -> player.sendOverlayMessage( Component.translatable("block.anvilcraft.void_energy_collector.placement_too_close_to_another") - .withStyle(ChatFormatting.RED), true)); + .withStyle(ChatFormatting.RED))); } return super.getStateForPlacement(context); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/generator/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/package-info.java new file mode 100644 index 0000000000..4ac9035ee7 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.power.generator; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/power/package-info.java new file mode 100644 index 0000000000..dc434efbe4 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.power; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/AccelerationRingBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/ring/AccelerationRingBlock.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/block/AccelerationRingBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/ring/AccelerationRingBlock.java index 86e30ecb25..7c50f3de77 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/AccelerationRingBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/ring/AccelerationRingBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.ring; import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -26,21 +26,21 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Arrays; -public class AccelerationRingBlock extends FlexibleMultiPartBlock +public class AccelerationRingBlock extends FlexibleMultiPartBlock, Direction> implements MultiPartBlockEntity, IHammerRemovable, IHammerChangeable { public static final EnumProperty HALF = EnumProperty.create("half", DirectionCube3x3PartHalf.class); - public static final DirectionProperty FACING = BlockStateProperties.FACING; + public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; public static final EnumProperty SWITCH = IPowerComponent.SWITCH; @@ -65,7 +65,7 @@ public DirectionCube3x3PartHalf[] getParts() { } @Override - public DirectionProperty getAdditionalProperty() { + public EnumProperty getAdditionalProperty() { return FACING; } @@ -91,15 +91,15 @@ public BlockState placedState(DirectionCube3x3PartHalf part, BlockState state) { } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, + Block block, + @Nullable Orientation orientation, boolean movedByPiston ) { - boolean isSignal = Arrays.stream(getParts()) + boolean isSignal = Arrays.stream(this.getParts()) .anyMatch(it -> level.hasNeighborSignal( pos.subtract(state.getValue(this.getPart()).getOffset()) .offset(it.getOffset()) @@ -140,7 +140,7 @@ protected VoxelShape getInteractionShape(BlockState state, BlockGetter level, Bl } @Override - protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + protected boolean propagatesSkylightDown(BlockState state) { return true; } @@ -173,7 +173,7 @@ protected float getShadeBrightness(BlockState state, BlockGetter getter, BlockPo @Override public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { - this.change(blockPos, level, (state) -> state.cycle(FACING)); + this.change(blockPos, level, state -> state.cycle(FACING)); return true; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/DeflectionRingBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/ring/DeflectionRingBlock.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/block/DeflectionRingBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/ring/DeflectionRingBlock.java index 011cf6d89d..a1747c3290 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/DeflectionRingBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/ring/DeflectionRingBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.ring; import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -27,20 +27,20 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Arrays; -public class DeflectionRingBlock extends FlexibleMultiPartBlock +public class DeflectionRingBlock extends FlexibleMultiPartBlock, Direction> implements MultiPartBlockEntity, IHammerRemovable, IHammerChangeable { public static final EnumProperty HALF = EnumProperty.create("half", DirectionCube3x3PartHalf.class); - public static final DirectionProperty FACING = BlockStateProperties.FACING; + public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD; public static final EnumProperty SWITCH = IPowerComponent.SWITCH; @@ -65,7 +65,7 @@ public DirectionCube3x3PartHalf[] getParts() { } @Override - public DirectionProperty getAdditionalProperty() { + public EnumProperty getAdditionalProperty() { return FACING; } @@ -90,17 +90,17 @@ public BlockState placedState(DirectionCube3x3PartHalf part, BlockState state) { } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston ) { - boolean isSignal = Arrays.stream(getParts()) + boolean isSignal = Arrays.stream(this.getParts()) .anyMatch(it -> level.hasNeighborSignal( - pos.subtract(state.getValue(getPart()).getOffset()).offset(it.getOffset()) + pos.subtract(state.getValue(this.getPart()).getOffset()).offset(it.getOffset()) )); if (isSignal && state.getValue(SWITCH) == IPowerComponent.Switch.ON) { updateState(level, pos, SWITCH, IPowerComponent.Switch.OFF, 3); @@ -160,7 +160,7 @@ protected boolean hasAnalogOutputSignal(BlockState state) { } @Override - protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos pos, Direction direction) { if (!(blockState.getBlock() instanceof AbstractMultiPartBlock abstractMultiPartBlock)) return 0; BlockPos blockPos = abstractMultiPartBlock.getMainPartPos(pos, blockState); if (!(level.getBlockEntity(blockPos) instanceof DeflectionRingBlockEntity blockEntity)) return 0; @@ -175,7 +175,7 @@ protected float getShadeBrightness(BlockState state, BlockGetter getter, BlockPo @Override public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { - this.change(blockPos, level, (state) -> state.cycle(FACING)); + this.change(blockPos, level, state -> state.cycle(FACING)); return true; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/ring/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/power/ring/package-info.java new file mode 100644 index 0000000000..2ada09f2d5 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/ring/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.power.ring; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/RemoteTransmissionPoleBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/RemoteTransmissionPoleBlock.java similarity index 94% rename from src/main/java/dev/dubhe/anvilcraft/block/RemoteTransmissionPoleBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/RemoteTransmissionPoleBlock.java index 130acc3644..80ec3d8a88 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/RemoteTransmissionPoleBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/RemoteTransmissionPoleBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.transmitting; import dev.dubhe.anvilcraft.api.IHasMultiBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -24,10 +24,11 @@ import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class RemoteTransmissionPoleBlock extends SimpleMultiPartBlock @@ -111,8 +112,8 @@ public BlockState placedState(Vertical4PartHalf part, BlockState state) { @Override public BlockState playerWillDestroy( Level level, BlockPos pos, BlockState state, Player player) { - if (level.isClientSide) return state; - onRemove(level, pos, state); + if (level.isClientSide()) return state; + this.onRemove(level, pos, state); super.playerWillDestroy(level, pos, state, player); return state; } @@ -127,7 +128,7 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return (level1, pos, state1, entity) -> { if (entity instanceof RemoteTransmissionPoleBlockEntity be) be.tick(level1, pos); }; @@ -135,14 +136,14 @@ public BlockEntityTicker getTicker( @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston) { - if (level.isClientSide) { + if (level.isClientSide()) { return; } if (state.getValue(HALF) != Vertical4PartHalf.BOTTOM) return; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/TransmissionPoleBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/TransmissionPoleBlock.java similarity index 95% rename from src/main/java/dev/dubhe/anvilcraft/block/TransmissionPoleBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/TransmissionPoleBlock.java index 5b79606ab5..f60d0df964 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/TransmissionPoleBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/TransmissionPoleBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.power.transmitting; import dev.dubhe.anvilcraft.api.IHasMultiBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -23,10 +23,11 @@ import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class TransmissionPoleBlock extends SimpleMultiPartBlock implements IHammerRemovable, IHasMultiBlock, EntityBlock { @@ -115,7 +116,7 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return (level1, pos, state1, entity) -> { if (entity instanceof TransmissionPoleBlockEntity be) be.tick(level1, pos); }; @@ -123,14 +124,14 @@ public BlockEntityTicker getTicker( @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston) { - if (level.isClientSide) return; + if (level.isClientSide()) return; if (state.getValue(HALF) != Vertical3PartHalf.BOTTOM) return; BlockPos topPos = pos.above(2); BlockState topState = level.getBlockState(topPos); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/package-info.java new file mode 100644 index 0000000000..84d9e2926f --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/transmitting/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.power.transmitting; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/production/CrabTrapBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/production/CrabTrapBlock.java new file mode 100644 index 0000000000..3274d40422 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/production/CrabTrapBlock.java @@ -0,0 +1,219 @@ +package dev.dubhe.anvilcraft.block.production; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; +import dev.dubhe.anvilcraft.block.entity.CrabTrapBlockEntity; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.loot.ModLootTables; +import dev.dubhe.anvilcraft.util.ItemResourceHelper; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; + +public class CrabTrapBlock extends BetterBaseEntityBlock implements SimpleWaterloggedBlock, IHammerRemovable { + public static final EnumProperty FACING = HorizontalDirectionalBlock.FACING; + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + + public CrabTrapBlock(Properties properties) { + super(properties); + registerDefaultState( + getStateDefinition().any() + .setValue(FACING, Direction.NORTH) + .setValue(WATERLOGGED, false) + ); + } + + @Override + protected MapCodec codec() { + return simpleCodec(CrabTrapBlock::new); + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return this.rotate(state, mirror.getRotation(state.getValue(FACING))); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState() + .setValue(FACING, context.getHorizontalDirection().getOpposite()) + .setValue( + WATERLOGGED, + context.getLevel() + .getFluidState(context.getClickedPos()) + .getType() + == Fluids.WATER); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + builder.add(WATERLOGGED); + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return state.getValue(WATERLOGGED); + } + + @Override + public void randomTick( + BlockState state, + ServerLevel level, + BlockPos pos, + RandomSource random) { + int times = 0; + for (Direction face : Direction.values()) { + if (level.getFluidState(pos.relative(face)).is(Fluids.WATER)) times++; + } + + if (times >= 3) { + // 获取战利品并放入 block entity + this.tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_COMMON); + this.tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_RIVER); + this.tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_OCEAN); + this.tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_WARM_OCEAN); + this.tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_SWAMP); + this.tryInsertLoot(state, level, pos, ModLootTables.CRAB_TRAP_JUNGLE); + } + } + + @Override + public InteractionResult use( + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hit + ) { + if (!level.isClientSide()) { + CrabTrapBlockEntity blockEntity = (CrabTrapBlockEntity) level.getBlockEntity(pos); + if (blockEntity != null) { + ResourceHandler itemHandler = blockEntity.getItemHandler(); + for (int i = 0; i < itemHandler.size(); i++) { + ItemResource resource = itemHandler.getResource(i); + if (resource.isEmpty()) continue; + try (Transaction transaction = Transaction.openRoot()) { + int extracted = itemHandler.extract(i, resource, Integer.MAX_VALUE, transaction); + if (extracted <= 0) continue; + Vec3 center = pos.relative(Direction.UP).getCenter(); + ItemStack stack = resource.toStack(extracted); + ItemEntity itemEntity = new ItemEntity(level, center.x(), center.y(), center.z(), stack, 0, 0.2, 0); + itemEntity.setDefaultPickUpDelay(); + level.addFreshEntity(itemEntity); + transaction.commit(); + } + } + blockEntity.setChanged(); + } + } + return InteractionResult.SUCCESS; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new CrabTrapBlockEntity(ModBlockEntities.CRAB_TRAP.get(), pos, state); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected void affectNeighborsAfterRemoval( + BlockState state, + ServerLevel level, + BlockPos pos, + boolean movedByPiston + ) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); + if (level.getBlockEntity(pos) instanceof CrabTrapBlockEntity entity) { + Vec3 vec3 = entity.getBlockPos().getCenter(); + ResourceHandler itemHandler = entity.getItemHandler(); + for (int slot = 0; slot < itemHandler.size(); slot++) { + Containers.dropItemStack(level, vec3.x, vec3.y, vec3.z, ItemResourceHelper.getStackInSlot(itemHandler, slot)); + } + } + } + + private void tryInsertLoot( + BlockState state, + ServerLevel level, + BlockPos pos, + ResourceKey loot + ) { + if (state.hasBlockEntity()) { + LootParams lootParams = new LootParams.Builder(level) + .withParameter(LootContextParams.ORIGIN, pos.getCenter()) + .create(LootContextParamSets.CHEST); + + LootTable lootTable = level.getServer().reloadableRegistries().getLootTable(loot); + ObjectArrayList items = lootTable.getRandomItems(lootParams); + if (items.isEmpty()) return; + CrabTrapBlockEntity blockEntity = (CrabTrapBlockEntity) level.getBlockEntity(pos); + if (blockEntity != null) { + ResourceHandler handler = blockEntity.getItemHandler(); + for (ItemStack item : items) { + ItemResource resource = ItemResource.of(item); + int amount = item.getCount(); + try (Transaction transaction = Transaction.openRoot()) { + handler.insert(resource, amount, transaction); + transaction.commit(); + } + } + blockEntity.setChanged(); + } + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/MineralFountainBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/production/MineralFountainBlock.java similarity index 77% rename from src/main/java/dev/dubhe/anvilcraft/block/MineralFountainBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/production/MineralFountainBlock.java index 64b3058998..4d86357220 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/MineralFountainBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/production/MineralFountainBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.production; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.block.entity.MineralFountainBlockEntity; @@ -6,15 +6,18 @@ import dev.dubhe.anvilcraft.util.TriggerUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class MineralFountainBlock extends BaseEntityBlock { public MineralFountainBlock(Properties properties) { @@ -36,11 +39,11 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType blockEntityType) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; return createTickerHelper( blockEntityType, ModBlockEntities.MINERAL_FOUNTAIN.get(), - (level1, pos, state1, entity) -> entity.tick()); + (_, _, _, entity) -> entity.tick()); } @Override @@ -50,7 +53,7 @@ public RenderShape getRenderShape(BlockState state) { @Override protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { - setTickCount(level, pos); + this.setTickCount(level, pos); if (!oldState.is(state.getBlock())) TriggerUtil.mineralFountainCreate(level, pos); super.onPlace(state, level, pos, oldState, movedByPiston); } @@ -58,14 +61,18 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o @Override protected BlockState updateShape( BlockState state, + LevelReader level, + ScheduledTickAccess ticks, + BlockPos pos, Direction direction, + BlockPos neighborPos, BlockState neighborState, - LevelAccessor level, - BlockPos pos, - BlockPos neighborPos + RandomSource random ) { - setTickCount(level, pos); - return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + if (level instanceof LevelAccessor levelAccessor) { + this.setTickCount(levelAccessor, pos); + } + return super.updateShape(state, level, ticks, pos, direction, neighborPos, neighborState, random); } private void setTickCount(LevelAccessor level, BlockPos pos) { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/production/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/production/package-info.java new file mode 100644 index 0000000000..c7010a9bb2 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/production/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.production; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/sliding/SlidingRailBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/sliding/SlidingRailBlock.java deleted file mode 100644 index 5920eb244b..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/sliding/SlidingRailBlock.java +++ /dev/null @@ -1,168 +0,0 @@ -package dev.dubhe.anvilcraft.block.sliding; - -import dev.dubhe.anvilcraft.api.hammer.IHammerChangeable; -import dev.dubhe.anvilcraft.entity.SlidingBlockEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction.Axis; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.RotatedPillarBlock; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.EnumProperty; -import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.phys.shapes.BooleanOp; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.common.util.TriState; -import org.jetbrains.annotations.Nullable; - -import java.util.stream.Stream; - -public class SlidingRailBlock extends BaseSlidingRailBlock implements IHammerChangeable { - public static final VoxelShape AABB_X = Stream.of( - Block.box(0, 6, 11, 16, 12, 14), - Block.box(0, 0, 0, 16, 6, 16), - Block.box(0, 12, 0, 16, 16, 5), - Block.box(0, 12, 11, 16, 16, 16), - Block.box(0, 6, 2, 16, 12, 5) - ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - public static final VoxelShape AABB_Z = Stream.of( - Block.box(2, 6, 0, 5, 12, 16), - Block.box(0, 0, 0, 16, 6, 16), - Block.box(11, 12, 0, 16, 16, 16), - Block.box(0, 12, 0, 5, 16, 16), - Block.box(11, 6, 0, 14, 12, 16) - ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - public static final VoxelShape AABB_Y = Stream.of( - Block.box(0, 0, 0, 16, 6, 16), - Block.box(11, 6, 11, 16, 16, 16), - Block.box(0, 6, 11, 5, 16, 16), - Block.box(0, 6, 0, 5, 16, 5), - Block.box(11, 6, 0, 16, 16, 5) - ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - public static final EnumProperty AXIS = BlockStateProperties.AXIS; - - public SlidingRailBlock(Properties properties) { - super(properties); - registerDefaultState(getStateDefinition().any().setValue(AXIS, Axis.X)); - } - - @Nullable - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - Axis axis = context.getHorizontalDirection().getOpposite().getAxis(); - Level level = context.getLevel(); - BlockPos pos = context.getClickedPos(); - if ( - (isOtherRailInAxis(level, pos, Axis.X, -1) == TriState.TRUE - || isOtherRailInAxis(level, pos, Axis.X, 1) == TriState.TRUE) - && (isOtherRailInAxis(level, pos, Axis.Z, -1) == TriState.TRUE - || isOtherRailInAxis(level, pos, Axis.Z, 1) == TriState.TRUE) - ) { - axis = Axis.Y; - } - return this.defaultBlockState().setValue(AXIS, axis); - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(AXIS); - } - - @Override - protected boolean useShapeForLightOcclusion(BlockState state) { - return true; - } - - @Override - public VoxelShape getShape( - BlockState blockState, - BlockGetter blockGetter, - BlockPos blockPos, - CollisionContext collisionContext - ) { - return switch (blockState.getValue(AXIS)) { - case X -> AABB_X; - case Y -> AABB_Y; - case Z -> AABB_Z; - }; - } - - @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { - if (isOtherRailInAxis(level, pos, Axis.X, -1) == TriState.TRUE - || isOtherRailInAxis(level, pos, Axis.X, 1) == TriState.TRUE - ) { - if (state.getValue(AXIS) != Axis.Y - && (isOtherRailInAxis(level, pos, Axis.Z, -1) == TriState.TRUE - || isOtherRailInAxis(level, pos, Axis.Z, 1) == TriState.TRUE) - ) { - level.setBlockAndUpdate(pos, state.setValue(AXIS, Axis.Y)); - } - if (state.getValue(AXIS) == Axis.Y - && isOtherRailInAxis(level, pos, Axis.Z, -1) != TriState.TRUE - && isOtherRailInAxis(level, pos, Axis.Z, 1) != TriState.TRUE - ) { - level.setBlockAndUpdate(pos, state.setValue(AXIS, Axis.X)); - } - } else if ( - isOtherRailInAxis(level, pos, Axis.Z, -1) == TriState.TRUE - || isOtherRailInAxis(level, pos, Axis.Z, 1) == TriState.TRUE - ) { - if (state.getValue(AXIS) == Axis.Y - && isOtherRailInAxis(level, pos, Axis.X, -1) != TriState.TRUE - && isOtherRailInAxis(level, pos, Axis.X, 1) != TriState.TRUE - ) { - level.setBlockAndUpdate(pos, state.setValue(AXIS, Axis.Z)); - } - } - super.neighborChanged(state, level, pos, block, fromPos, isMoving); - } - - private TriState isOtherRailInAxis(Level level, BlockPos pos, Axis axis, int relative) { - BlockState other = level.getBlockState(pos.relative(axis, relative)); - Axis otherAxis; - if (other.getBlock() instanceof SlidingRailBlock) { - otherAxis = other.getValue(AXIS); - } else if (other.getBlock() instanceof PoweredSlidingRailBlock) { - otherAxis = other.getValue(PoweredSlidingRailBlock.FACING).getAxis(); - } else if (other.getBlock() instanceof ActivatorSlidingRailBlock) { - otherAxis = other.getValue(ActivatorSlidingRailBlock.FACING).getAxis(); - } else if (other.getBlock() instanceof DetectorSlidingRailBlock) { - otherAxis = other.getValue(DetectorSlidingRailBlock.FACING).getAxis(); - } else { - return TriState.DEFAULT; - } - return axis == otherAxis || otherAxis == Axis.Y ? TriState.TRUE : TriState.FALSE; - } - - @Override - public boolean change(Player player, BlockPos blockPos, Level level, ItemStack anvilHammer) { - BlockState bs = level.getBlockState(blockPos); - level.setBlockAndUpdate(blockPos, bs.cycle(AXIS)); - return true; - } - - @Override - public @Nullable Property getChangeableProperty(BlockState blockState) { - return AXIS; - } - - @Override - public void onSlidingAbove(Level level, BlockPos pos, BlockState state, SlidingBlockEntity entity) { - } - - @Override - protected BlockState rotate(BlockState state, Rotation rotation) { - return RotatedPillarBlock.rotatePillar(state, rotation); - } - -} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/sliding/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/sliding/package-info.java deleted file mode 100644 index eef4848d16..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/block/sliding/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package dev.dubhe.anvilcraft.block.sliding; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BlackHoleBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/special/BlackHoleBlock.java similarity index 81% rename from src/main/java/dev/dubhe/anvilcraft/block/BlackHoleBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/special/BlackHoleBlock.java index 7c290e8201..cb71c6558e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/BlackHoleBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/special/BlackHoleBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.special; import dev.dubhe.anvilcraft.block.entity.BlackHoleBlockEntity; import net.minecraft.core.BlockPos; @@ -10,11 +10,15 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class BlackHoleBlock extends Block implements EntityBlock { public static final VoxelShape MODEL = Block.box(4, 4, 4, 12, 12, 12); + public BlackHoleBlock(Properties properties) { + super(properties.forceSolidOn()); + } + @Override public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext collisionContext) { return MODEL; @@ -25,21 +29,6 @@ public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldS super.onPlace(state, level, pos, oldState, movedByPiston); } - @Override - public void neighborChanged( - BlockState state, - Level level, - BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston - ) { - } - - public BlackHoleBlock(Properties properties) { - super(properties.forceSolidOn()); - } - @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/special/PlasmaJetsBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/special/PlasmaJetsBlock.java new file mode 100644 index 0000000000..ad57930ddb --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/special/PlasmaJetsBlock.java @@ -0,0 +1,90 @@ +package dev.dubhe.anvilcraft.block.special; + +import com.mojang.serialization.MapCodec; +import dev.anvilcraft.lib.v2.recipe.cache.BlockCache; +import dev.dubhe.anvilcraft.api.block.IIgnitableCauldron; +import dev.dubhe.anvilcraft.block.entity.PlasmaJetsBlockEntity; +import dev.dubhe.anvilcraft.block.power.consumer.HeaterBlock; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.init.block.ModFluidTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.Nullable; + +public class PlasmaJetsBlock extends BaseEntityBlock { + public PlasmaJetsBlock(Properties properties) { + super(properties); + } + + @Override + protected MapCodec codec() { + return simpleCodec(PlasmaJetsBlock::new); + } + + public static boolean trySpawn(BlockPos pos, Level level) { + BlockState heater = level.getBlockState(pos.below().below()); + if ( + !PlasmaJetsBlock.isIgnitedOilCauldron(level, pos.below()) + || !heater.is(ModBlocks.HEATER) + || heater.getValue(HeaterBlock.OVERLOAD) + ) { + return false; + } + for (int i = 0; i < 8; i++) { + if (!level.getBlockState(pos.above(i)).isAir()) { + return false; + } + } + for (Direction direction : Direction.values()) { + if (!direction.getAxis().isHorizontal()) { + continue; + } + if (!level.getBlockState(pos.relative(direction)).isFaceSturdy(level, pos.relative(direction), direction.getOpposite())) { + return false; + } + } + level.setBlock(pos, ModBlocks.PLASMA_JETS.getDefaultState(), 3); + return true; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { + return createTickerHelper(type, ModBlockEntities.PLASMA_JETS.get(), PlasmaJetsBlockEntity::tick); + } + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return ModBlockEntities.PLASMA_JETS.create(pos, state); + } + + @SuppressWarnings("deprecation") + public static boolean isIgnitedOilCauldron(Level level, BlockPos pos) { + BlockCache cache = new BlockCache(level); + if (!(cache.getBlockState(pos).getBlock() instanceof IIgnitableCauldron cauldron)) return false; + return cauldron.isIgnited(cache, pos) && cauldron.getFluid(cache, pos).is(ModFluidTags.OIL); + } + + public static boolean tryConsumeOnce(Level level, BlockPos pos) { + BlockCache cache = new BlockCache(level); + if (!(cache.getBlockState(pos).getBlock() instanceof IIgnitableCauldron cauldron)) return false; + if (!cauldron.consumeOnce(cache, pos)) return false; + cache.accept(); + return true; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/WhiteHoleBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/special/WhiteHoleBlock.java similarity index 86% rename from src/main/java/dev/dubhe/anvilcraft/block/WhiteHoleBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/special/WhiteHoleBlock.java index 5f56203162..2851a798b8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/WhiteHoleBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/special/WhiteHoleBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.special; import dev.dubhe.anvilcraft.block.entity.WhiteHoleBlockEntity; import net.minecraft.core.BlockPos; @@ -8,9 +8,10 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class WhiteHoleBlock extends Block implements EntityBlock { public static final VoxelShape MODEL = Block.box(4, 4, 4, 12, 12, 12); @@ -26,12 +27,12 @@ public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldS } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston ) { } @@ -45,4 +46,4 @@ public WhiteHoleBlock(Properties properties) { public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new WhiteHoleBlockEntity(pos, state); } -} \ No newline at end of file +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/special/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/special/package-info.java new file mode 100644 index 0000000000..1bc16d519b --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/special/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.special; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/Color.java b/src/main/java/dev/dubhe/anvilcraft/block/state/Color.java index 6e3d244cbd..575ccde30d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/Color.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/Color.java @@ -4,39 +4,44 @@ import lombok.Getter; import lombok.experimental.Accessors; import net.minecraft.util.StringRepresentable; +import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; @Accessors(fluent = true) public enum Color implements StringRepresentable { - WHITE("white", Items.WHITE_DYE), - LIGHT_GRAY("light_gray", Items.LIGHT_GRAY_DYE), - GRAY("gray", Items.GRAY_DYE), - BLACK("black", Items.BLACK_DYE), - BROWN("brown", Items.BROWN_DYE), - RED("red", Items.RED_DYE), - ORANGE("orange", Items.ORANGE_DYE), - YELLOW("yellow", Items.YELLOW_DYE), - LIME("lime", Items.LIME_DYE), - GREEN("green", Items.GREEN_DYE), - CYAN("cyan", Items.CYAN_DYE), - LIGHT_BLUE("light_blue", Items.LIGHT_BLUE_DYE), - BLUE("blue", Items.BLUE_DYE), - PURPLE("purple", Items.PURPLE_DYE), - MAGENTA("magenta", Items.MAGENTA_DYE), - PINK("pink", Items.PINK_DYE); + WHITE("white", Items.WHITE_DYE, DyeColor.WHITE), + LIGHT_GRAY("light_gray", Items.LIGHT_GRAY_DYE, DyeColor.LIGHT_GRAY), + GRAY("gray", Items.GRAY_DYE, DyeColor.GRAY), + BLACK("black", Items.BLACK_DYE, DyeColor.BLACK), + BROWN("brown", Items.BROWN_DYE, DyeColor.BROWN), + RED("red", Items.RED_DYE, DyeColor.RED), + ORANGE("orange", Items.ORANGE_DYE, DyeColor.ORANGE), + YELLOW("yellow", Items.YELLOW_DYE, DyeColor.YELLOW), + LIME("lime", Items.LIME_DYE, DyeColor.LIME), + GREEN("green", Items.GREEN_DYE, DyeColor.GREEN), + CYAN("cyan", Items.CYAN_DYE, DyeColor.CYAN), + LIGHT_BLUE("light_blue", Items.LIGHT_BLUE_DYE, DyeColor.LIGHT_BLUE), + BLUE("blue", Items.BLUE_DYE, DyeColor.BLUE), + PURPLE("purple", Items.PURPLE_DYE, DyeColor.PURPLE), + MAGENTA("magenta", Items.MAGENTA_DYE, DyeColor.MAGENTA), + PINK("pink", Items.PINK_DYE, DyeColor.PINK); private final String name; @Getter private final Item dyeItem; + @Getter + private final DyeColor color; + public static final Codec CODEC = StringRepresentable.fromValues(Color::values); - Color(String name, Item dyeItem) { + Color(String name, Item dyeItem, DyeColor color) { this.name = name; this.dyeItem = dyeItem; + this.color = color; } public String toString() { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/Cube323PartHalf.java b/src/main/java/dev/dubhe/anvilcraft/block/state/Cube323PartHalf.java index 41f132333e..836242b1e8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/Cube323PartHalf.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/Cube323PartHalf.java @@ -3,7 +3,7 @@ import lombok.Getter; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Arrays; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/Cube3x3PartHalf.java b/src/main/java/dev/dubhe/anvilcraft/block/state/Cube3x3PartHalf.java index 0df24b3088..9241ae8443 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/Cube3x3PartHalf.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/Cube3x3PartHalf.java @@ -3,7 +3,7 @@ import lombok.Getter; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Arrays; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/DirectionCube232PartHalf.java b/src/main/java/dev/dubhe/anvilcraft/block/state/DirectionCube232PartHalf.java index 409780a8df..6008e734e1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/DirectionCube232PartHalf.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/DirectionCube232PartHalf.java @@ -4,7 +4,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Arrays; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/DirectionCube3x3PartHalf.java b/src/main/java/dev/dubhe/anvilcraft/block/state/DirectionCube3x3PartHalf.java index be44a180b8..c208569e49 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/DirectionCube3x3PartHalf.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/DirectionCube3x3PartHalf.java @@ -4,7 +4,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Arrays; @@ -90,17 +90,17 @@ public String getSerializedName() { @Override public int getOffsetX(Direction value) { - return offsetX; + return this.offsetX; } @Override public int getOffsetY(Direction value) { - return offsetY; + return this.offsetY; } @Override public int getOffsetZ(Direction value) { - return offsetZ; + return this.offsetZ; } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/IFlexibleMultiPartBlockState.java b/src/main/java/dev/dubhe/anvilcraft/block/state/IFlexibleMultiPartBlockState.java index 121d81359e..f245c8c4d6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/IFlexibleMultiPartBlockState.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/IFlexibleMultiPartBlockState.java @@ -3,9 +3,7 @@ import net.minecraft.core.Vec3i; import net.minecraft.util.StringRepresentable; -/** - * 多方块方块状态 - */ +/// 多方块方块状态 public interface IFlexibleMultiPartBlockState> extends StringRepresentable, Comparable { int getOffsetX(T value); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/ISimpleMultiPartBlockState.java b/src/main/java/dev/dubhe/anvilcraft/block/state/ISimpleMultiPartBlockState.java index 0c80b563f1..42c91054a6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/ISimpleMultiPartBlockState.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/ISimpleMultiPartBlockState.java @@ -3,9 +3,7 @@ import net.minecraft.core.Vec3i; import net.minecraft.util.StringRepresentable; -/** - * 多方块方块状态 - */ +/// 多方块方块状态 public interface ISimpleMultiPartBlockState extends StringRepresentable, Comparable { int getOffsetX(); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/OpenedCube3x3PartHalf.java b/src/main/java/dev/dubhe/anvilcraft/block/state/OpenedCube3x3PartHalf.java index 9b32a6a5b9..1e2ba5a525 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/OpenedCube3x3PartHalf.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/OpenedCube3x3PartHalf.java @@ -4,7 +4,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Arrays; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/Orientation.java b/src/main/java/dev/dubhe/anvilcraft/block/state/Orientation.java index 2c2b3ba153..59ec71d177 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/Orientation.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/Orientation.java @@ -33,9 +33,7 @@ public String getSerializedName() { return this.name; } - /** - * 获取相反的方向 - */ + /// 获取相反的方向 public Orientation opposite() { return switch (this) { case SOUTH_UP -> Orientation.NORTH_UP; @@ -53,9 +51,7 @@ public Orientation opposite() { }; } - /** - * 获取下一个的方向 - */ + /// 获取下一个的方向 public Orientation next() { return switch (this) { case SOUTH_UP -> Orientation.WEST_UP; @@ -130,10 +126,8 @@ public Orientation rotate(Rotation rotation) { } } - /** - * 朝向上下时翻转水平方向 - * 用于获取放置器假玩家的Orientation - */ + /// 朝向上下时翻转水平方向 + /// 用于获取放置器假玩家的Orientation public Orientation flipHorizontalIfVertical() { return switch (this) { case UP_NORTH, UP_SOUTH, UP_WEST, UP_EAST, DOWN_NORTH, DOWN_SOUTH, DOWN_WEST, DOWN_EAST -> this.rotate(Rotation.CLOCKWISE_180); @@ -172,9 +166,7 @@ public Orientation mirror(Mirror mirror) { } } - /** - * 获取对应的方向 - */ + /// 获取对应的方向 public Direction getDirection() { return switch (this) { case SOUTH_UP -> Direction.SOUTH; @@ -186,9 +178,7 @@ public Direction getDirection() { }; } - /** - * 获取水平旋转 - */ + /// 获取水平旋转 public float getYRotation() { return switch (this) { case WEST_UP, UP_WEST, DOWN_WEST -> 90; @@ -198,9 +188,7 @@ public float getYRotation() { }; } - /** - * 获取垂直旋转 - */ + /// 获取垂直旋转 public float getXRotation() { return switch (this) { case NORTH_UP, SOUTH_UP, WEST_UP, EAST_UP -> 0; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/state/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/state/package-info.java index 00b5f87d86..f55bf37893 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/state/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/state/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.block.state; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/AmberBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/AmberBlock.java similarity index 82% rename from src/main/java/dev/dubhe/anvilcraft/block/AmberBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/AmberBlock.java index 53bce049bc..0b1baa6a33 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/AmberBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/AmberBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import com.mojang.serialization.MapCodec; import net.minecraft.core.Direction; @@ -7,11 +7,11 @@ import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import org.jspecify.annotations.Nullable; public class AmberBlock extends HorizontalDirectionalBlock { - public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final EnumProperty FACING = HorizontalDirectionalBlock.FACING; public AmberBlock(Properties properties) { super(properties); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/storage/EndDustBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/EndDustBlock.java new file mode 100644 index 0000000000..74800107a6 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/EndDustBlock.java @@ -0,0 +1,64 @@ +package dev.dubhe.anvilcraft.block.storage; + +import dev.dubhe.anvilcraft.entity.FloatingBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.redstone.Orientation; +import org.jspecify.annotations.Nullable; + +public class EndDustBlock extends Block { + public EndDustBlock(Properties properties) { + super(properties); + } + + @Override + public void onPlace( + BlockState state, + Level level, + BlockPos pos, + BlockState oldState, + boolean movedByPiston + ) { + level.scheduleTick(pos, this, this.getDelayAfterPlace()); + } + + @Override + public void tick( + BlockState state, + ServerLevel level, + BlockPos pos, + RandomSource random + ) { + if (!level.getFluidState(pos.above()).is(FluidTags.WATER)) return; + if (!FallingBlock.isFree(level.getBlockState(pos.above()))) return; + FloatingBlockEntity._float(level, pos, state); + } + + @Override + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block neighborBlock, + @Nullable Orientation orientation, + boolean movedByPiston + ) { + for (Direction dir : Direction.values()) { + if (level.getFluidState(pos.relative(dir)).is(FluidTags.WATER)) { + level.scheduleTick(pos, this, this.getDelayAfterPlace()); + return; + } + } + } + + protected int getDelayAfterPlace() { + return 2; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FerriteCoreMagnetBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/FerriteCoreMagnetBlock.java similarity index 96% rename from src/main/java/dev/dubhe/anvilcraft/block/FerriteCoreMagnetBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/FerriteCoreMagnetBlock.java index fa0ae8f509..441c89a3b6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FerriteCoreMagnetBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/FerriteCoreMagnetBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import dev.dubhe.anvilcraft.init.block.ModBlocks; import net.minecraft.core.BlockPos; @@ -50,7 +50,7 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockP blockState = blockState.setValue(LIT, level.hasNeighborSignal(pos)); } level.setBlockAndUpdate(pos, blockState); - level.playSound(null, pos, SoundEvents.ITEM_FRAME_REMOVE_ITEM, SoundSource.BLOCKS, 1.0f, 1.0f); + level.playSound(null, pos, SoundEvents.ITEM_FRAME_REMOVE_ITEM, SoundSource.BLOCKS, 1.0F, 1.0F); return InteractionResult.SUCCESS; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FlintBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/FlintBlock.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/FlintBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/FlintBlock.java index 16bf3ea06a..8615638cf7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FlintBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/FlintBlock.java @@ -1,8 +1,10 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; +import dev.dubhe.anvilcraft.block.cauldron.OilCauldronBlock; import dev.dubhe.anvilcraft.init.block.ModBlocks; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.BaseFireBlock; @@ -43,7 +45,7 @@ public static void ignite(LevelAccessor level, BlockPos pos, boolean isFlint) { BlockPos offset = pos.offset(x, y, z); BlockState blockState = level.getBlockState(offset); if (blockState.is(ModBlocks.OIL_CAULDRON)) { - OilCauldronBlock.ignite(level, offset, blockState); + OilCauldronBlock.ignite(level, offset); return; } else if (blockState.getBlock() instanceof CampfireBlock) { if (!blockState.getValue(CampfireBlock.LIT)) { @@ -77,8 +79,8 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - super.onRemove(state, level, pos, newState, movedByPiston); + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); if (movedByPiston) { ignite(level, pos, true); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/storage/GunpowderBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/GunpowderBlock.java new file mode 100644 index 0000000000..e49960b933 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/GunpowderBlock.java @@ -0,0 +1,173 @@ +package dev.dubhe.anvilcraft.block.storage; + +import dev.dubhe.anvilcraft.block.heatable.HeatableBlock; +import dev.dubhe.anvilcraft.block.heatable.NormalBlock; +import dev.dubhe.anvilcraft.item.tool.MultitoolItem; +import dev.dubhe.anvilcraft.item.tool.MultitoolMode; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.stats.Stats; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Explosion; +import net.minecraft.world.level.ExplosionDamageCalculator; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.BlockHitResult; +import org.jspecify.annotations.Nullable; + +import java.util.Optional; + +public class GunpowderBlock extends Block { + public GunpowderBlock(Properties properties) { + super(properties); + } + + public void explosion(Level level, BlockPos pos) { + if (level.isClientSide()) { + return; + } + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 11); + level.explode(null, + null, + new ExplosionDamageCalculator() { + @Override + public Optional getBlockExplosionResistance( + Explosion explosion, + BlockGetter reader, + BlockPos pos, + BlockState state, + FluidState fluid + ) { + return Optional.of(Float.MAX_VALUE); + } + + @Override + public boolean shouldDamageEntity(Explosion explosion, Entity entity) { + return false; + } + }, + pos.getX(), + pos.getY(), + pos.getZ(), + 4.0F, + false, + Level.ExplosionInteraction.BLOCK); + } + + @Override + protected InteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + if ( + stack.is(Items.FLINT_AND_STEEL) + || stack.is(Items.FIRE_CHARGE) + || MultitoolItem.isActingAs(stack, MultitoolMode.FLINT_AND_STEEL) + ) { + this.explosion(level, pos); + Item item = stack.getItem(); + if ( + stack.is(Items.FLINT_AND_STEEL) + || MultitoolItem.isActingAs(stack, MultitoolMode.FLINT_AND_STEEL) + ) { + stack.hurtAndBreak(1, player, hand); + } else { + stack.consume(1, player); + } + player.awardStat(Stats.ITEM_USED.get(item)); + return InteractionResult.SUCCESS; + } + return super.useItemOn(stack, state, level, pos, player, hand, hitResult); + } + + @Override + protected BlockState updateShape( + BlockState state, + LevelReader level, + ScheduledTickAccess ticks, + BlockPos pos, + Direction direction, + BlockPos neighborPos, + BlockState neighborState, + RandomSource random + ) { + if (level instanceof Level actualLevel && !actualLevel.isClientSide()) { + BlockState block = level.getBlockState(pos.relative(direction)); + if (block.getBlock() instanceof BaseFireBlock + || block.is(Blocks.LAVA) + || ((block.getBlock() instanceof HeatableBlock) && !(block.getBlock() instanceof NormalBlock))) { + this.explosion(actualLevel, pos); + } + } + return super.updateShape(state, level, ticks, pos, direction, neighborPos, neighborState, random); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + if (!level.isClientSide()) { + for (Direction direction : Direction.values()) { + BlockState block = level.getBlockState(pos.relative(direction)); + if (block.getBlock() instanceof BaseFireBlock + || block.is(Blocks.LAVA) + || ((block.getBlock() instanceof HeatableBlock) && !(block.getBlock() instanceof NormalBlock))) { + this.explosion(level, pos); + } + } + } + } + + @Override + public boolean onCaughtFire( + BlockState state, + Level level, + BlockPos pos, + @Nullable Direction direction, + @Nullable LivingEntity igniter + ) { + this.explosion(level, pos); + return super.onCaughtFire(state, level, pos, direction, igniter); + } + + @Override + protected void onProjectileHit(Level level, BlockState state, BlockHitResult hit, Projectile projectile) { + if (level.isClientSide()) { + return; + } + BlockPos pos = hit.getBlockPos(); + if (projectile.isOnFire() && projectile.mayInteract((ServerLevel) level, pos)) { + this.explosion(level, pos); + } + } + + @Override + public void wasExploded(ServerLevel level, BlockPos pos, Explosion explosion) { + this.explosion(level, pos); + } + + @Override + public boolean canDropFromExplosion(BlockState state, BlockGetter level, BlockPos pos, Explosion explosion) { + return false; + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HasMobBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/HasMobBlock.java similarity index 90% rename from src/main/java/dev/dubhe/anvilcraft/block/HasMobBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/HasMobBlock.java index a6e2a3a538..0afdf4fa5e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HasMobBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/HasMobBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.RenderShape; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/HollowMagnetBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/HollowMagnetBlock.java similarity index 81% rename from src/main/java/dev/dubhe/anvilcraft/block/HollowMagnetBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/HollowMagnetBlock.java index c45725d718..162920fd43 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/HollowMagnetBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/HollowMagnetBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -8,9 +8,11 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -18,7 +20,8 @@ import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SimpleWaterloggedBlock; import net.minecraft.world.level.block.state.BlockState; @@ -91,34 +94,43 @@ public FluidState getFluidState(BlockState blockState) { } @Override - public BlockState updateShape( + protected BlockState updateShape( BlockState blockState, + LevelReader levelReader, + ScheduledTickAccess ticks, + BlockPos blockPos, Direction direction, + BlockPos blockPos2, BlockState blockState2, - LevelAccessor levelAccessor, - BlockPos blockPos, - BlockPos blockPos2 + RandomSource random ) { if (blockState.getValue(WATERLOGGED)) { - levelAccessor.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelAccessor)); + ticks.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelReader)); } - return super.updateShape(blockState, direction, blockState2, levelAccessor, blockPos, blockPos2); + return super.updateShape(blockState, levelReader, ticks, blockPos, direction, blockPos2, blockState2, random); } @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { - if (level.isClientSide) { + protected void entityInside( + BlockState state, + Level level, + BlockPos pos, + Entity entity, + InsideBlockEffectApplier effectApplier, + boolean isPrecise + ) { + if (level.isClientSide()) { return; } if (state.getValue(LIT)) { return; } - if (entity instanceof ItemEntity itemEntity && !itemEntity.getTags().contains(TAG)) { + if (entity instanceof ItemEntity itemEntity /*&& !itemEntity.getItem().tags().anyMatch(it -> it.equals(TAG))*/) { ItemStack item = itemEntity.getItem(); if (item.is(Items.IRON_INGOT) && item.getCount() == 1) { if (itemEntity.getOwner() instanceof ServerPlayer) { itemEntity.addTag(TAG); - if (level.random.nextDouble() <= 0.005) { + if (level.getRandom().nextDouble() <= 0.005) { itemEntity.setItem(new ItemStack(ModItems.MAGNET_INGOT.get())); } } @@ -127,7 +139,7 @@ protected void entityInside(BlockState state, Level level, BlockPos pos, Entity } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -144,8 +156,8 @@ protected ItemInteractionResult useItemOn( blockState = blockState.setValue(LIT, level.hasNeighborSignal(pos)); } level.setBlockAndUpdate(pos, blockState); - level.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, 1.0f, 1.0f); - return ItemInteractionResult.SUCCESS; + level.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, 1.0F, 1.0F); + return InteractionResult.SUCCESS; } else if (stack.is(ModItems.MAGNET_INGOT)) { stack.consume(1, player); BlockState blockState = ModBlocks.MAGNET_BLOCK.get().defaultBlockState(); @@ -153,8 +165,8 @@ protected ItemInteractionResult useItemOn( blockState = blockState.setValue(LIT, level.hasNeighborSignal(pos)); } level.setBlockAndUpdate(pos, blockState); - level.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, 1.0f, 1.0f); - return ItemInteractionResult.SUCCESS; + level.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, 1.0F, 1.0F); + return InteractionResult.SUCCESS; } } return super.useItemOn(stack, state, level, pos, player, hand, hitResult); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/storage/LevitationPowderBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/LevitationPowderBlock.java new file mode 100644 index 0000000000..2dcb2d17d3 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/LevitationPowderBlock.java @@ -0,0 +1,63 @@ +package dev.dubhe.anvilcraft.block.storage; + +import com.mojang.serialization.MapCodec; +import dev.dubhe.anvilcraft.entity.LevitatingBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Fallable; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.redstone.Orientation; +import org.jspecify.annotations.Nullable; + +public class LevitationPowderBlock extends FallingBlock { + public LevitationPowderBlock(Properties properties) { + super(properties); + } + + @Override + protected MapCodec codec() { + return null; + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + super.tick(state, level, pos, random); + // 和上方重力方块交换位置 + BlockState above = level.getBlockState(pos.above()); + if (above.getBlock() instanceof FallingBlock && !(above.getBlock() instanceof LevitationPowderBlock)) { + if (above.getBlock() instanceof Fallable) { + FallingBlockEntity.fall(level, pos.above(), above); + } + LevitatingBlockEntity.levitate(level, pos, state); + } + } + + @Override + public int getDustColor(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos) { + // color of sand + return 14406560; + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + level.scheduleTick(pos, this, 2); + } + + @Override + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { + level.scheduleTick(pos, this, 2); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/MagnetBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/MagnetBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/MagnetBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/MagnetBlock.java index 4f42ec42d2..4a9c03e191 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/MagnetBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/MagnetBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -25,9 +25,10 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.List; @@ -64,15 +65,15 @@ protected void createBlockStateDefinition(StateDefinition.Builder FACING = BlockStateProperties.HORIZONTAL_FACING; public MobAmberBlock(Properties properties) { super(properties); @@ -45,6 +44,7 @@ protected BlockState rotate(BlockState state, Rotation rot) { } @Override + @SuppressWarnings("deprecation") protected BlockState mirror(BlockState state, Mirror mirror) { return state.rotate(mirror.getRotation(state.getValue(FACING))); } @@ -65,14 +65,17 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Nullable @Override public BlockEntityTicker getTicker( - Level level, BlockState state, BlockEntityType type) { - if (!level.isClientSide) { + Level level, + BlockState state, + BlockEntityType type + ) { + if (!level.isClientSide()) { return null; } return createTickerHelper( type, ModBlockEntities.MOB_AMBER_BLOCK.get(), - (level1, blockPos, blockState, blockEntity) -> blockEntity.clientTick((ClientLevel) level1, blockPos) + (level1, blockPos, _, blockEntity) -> blockEntity.clientTick(level1, blockPos) ); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/NegativeMatterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/NegativeMatterBlock.java similarity index 86% rename from src/main/java/dev/dubhe/anvilcraft/block/NegativeMatterBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/NegativeMatterBlock.java index 449ea141a7..9c857efaa7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/NegativeMatterBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/NegativeMatterBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import dev.dubhe.anvilcraft.api.block.INegativeMatterBlock; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ResentfulAmberBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/ResentfulAmberBlock.java similarity index 78% rename from src/main/java/dev/dubhe/anvilcraft/block/ResentfulAmberBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/ResentfulAmberBlock.java index 1a0826c85a..2e46583acb 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ResentfulAmberBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/ResentfulAmberBlock.java @@ -1,14 +1,13 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import dev.dubhe.anvilcraft.init.block.ModBlockEntities; -import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class ResentfulAmberBlock extends MobAmberBlock { public ResentfulAmberBlock(Properties properties) { @@ -25,13 +24,13 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType type) { - if (!level.isClientSide) { + if (!level.isClientSide()) { return null; } return createTickerHelper( type, ModBlockEntities.RESENTFUL_AMBER_BLOCK.get(), - (level1, blockPos, blockState, blockEntity) -> blockEntity.clientTick((ClientLevel) level1, blockPos) + (level1, blockPos, _, blockEntity) -> blockEntity.clientTick(level1, blockPos) ); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ResinBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/ResinBlock.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/ResinBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/ResinBlock.java index c78552d89a..74ee48ce61 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ResinBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/ResinBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; @@ -23,12 +23,14 @@ public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, f } } - public void updateEntityAfterFallOn(BlockGetter level, Entity entity) { + @Override + public void updateEntityMovementAfterFallOn(BlockGetter level, Entity entity) { if (entity.isSuppressingBounce()) { - super.updateEntityAfterFallOn(level, entity); + super.updateEntityMovementAfterFallOn(level, entity); } else { this.bounceUp(entity); } + } private void bounceUp(Entity entity) { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/RottenFleshBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/RottenFleshBlock.java similarity index 81% rename from src/main/java/dev/dubhe/anvilcraft/block/RottenFleshBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/RottenFleshBlock.java index 0664b7fd5a..416a15b0d6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/RottenFleshBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/RottenFleshBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import net.minecraft.core.BlockPos; import net.minecraft.world.effect.MobEffectInstance; @@ -15,10 +15,10 @@ public RottenFleshBlock(Properties properties) { } @Override - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { - entity.causeFallDamage(fallDistance, 0.2f, level.damageSources().fall()); + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, double fallDistance) { + entity.causeFallDamage(fallDistance, 0.2F, level.damageSources().fall()); if (entity instanceof LivingEntity livingEntity) { - livingEntity.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 30 * 20)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 30 * 20)); } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/SimpleConfinementAnvilonBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/SimpleConfinementAnvilonBlock.java similarity index 88% rename from src/main/java/dev/dubhe/anvilcraft/block/SimpleConfinementAnvilonBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/SimpleConfinementAnvilonBlock.java index dea705cdae..b4cf285ec8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/SimpleConfinementAnvilonBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/SimpleConfinementAnvilonBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/SugarBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/SugarBlock.java similarity index 94% rename from src/main/java/dev/dubhe/anvilcraft/block/SugarBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/SugarBlock.java index 884b125551..a97aeab128 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/SugarBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/SugarBlock.java @@ -1,9 +1,9 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import dev.anvilcraft.lib.v2.registrum.providers.loot.RegistrumBlockLootTables; import dev.dubhe.anvilcraft.api.chargecollector.ChargeCollectorManager; import dev.dubhe.anvilcraft.block.state.FragmentationDegree; -import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.advancements.criterion.StatePropertiesPredicate; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; @@ -20,7 +20,7 @@ import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class SugarBlock extends Block { public static final EnumProperty FRAGMENTATION_DEGREE = EnumProperty.create( @@ -36,7 +36,7 @@ public SugarBlock(Properties properties) { public static void loot(RegistrumBlockLootTables tables, Block block) { tables.add(block, LootTable.lootTable() .withPool(LootPool.lootPool() - .setRolls(ConstantValue.exactly(1.0f)) + .setRolls(ConstantValue.exactly(1.0F)) .add(LootItem.lootTableItem(block) .when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(block) .setProperties(StatePropertiesPredicate.Builder.properties() @@ -50,7 +50,7 @@ public static void loot(RegistrumBlockLootTables tables, Block block) { .setProperties(StatePropertiesPredicate.Builder.properties() .hasProperty(SugarBlock.FRAGMENTATION_DEGREE, FragmentationDegree.TWO)))) .otherwise(tables.applyExplosionCondition(block, LootItem.lootTableItem(Items.SUGAR) - .apply(SetItemCountFunction.setCount(ConstantValue.exactly(9.0f))) + .apply(SetItemCountFunction.setCount(ConstantValue.exactly(9.0F))) .when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(block) .setProperties(StatePropertiesPredicate.Builder.properties() .hasProperty(SugarBlock.FRAGMENTATION_DEGREE, FragmentationDegree.THREE))))) @@ -65,7 +65,7 @@ public void onHit(Level level, BlockPos pos) { @Override protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { double chance = random.nextDouble(); - if (!level.isClientSide) { + if (!level.isClientSide()) { if (state.getValue(FRAGMENTATION_DEGREE) != FragmentationDegree.THREE) { if (chance <= 0.05) { level.setBlockAndUpdate(pos, state.setValue(FRAGMENTATION_DEGREE, state.getValue(FRAGMENTATION_DEGREE).next())); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/TranscendiumBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/TranscendiumBlock.java similarity index 86% rename from src/main/java/dev/dubhe/anvilcraft/block/TranscendiumBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/storage/TranscendiumBlock.java index 2f55024040..04bc9cc009 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/TranscendiumBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/TranscendiumBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.storage; import dev.dubhe.anvilcraft.api.block.ITranscendiumBlock; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/storage/VoidMatterBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/VoidMatterBlock.java new file mode 100644 index 0000000000..1c94bcb0f4 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/VoidMatterBlock.java @@ -0,0 +1,51 @@ +package dev.dubhe.anvilcraft.block.storage; + +import dev.dubhe.anvilcraft.init.block.ModBlockTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; + +public class VoidMatterBlock extends Block { + public static final int VOID_DECAY_THRESHOLD = 5; + + public VoidMatterBlock(Properties properties) { + super(properties.randomTicks()); + } + + public static BlockState voidDecay(Level level, RandomSource random) { + Iterable> tagOrEmpty = level.registryAccess().lookupOrThrow(Registries.BLOCK) + .getTagOrEmpty(ModBlockTags.VOID_DECAY_PRODUCTS); + int count = 0; + Block randomBlock = null; + for (Holder blockHolder : tagOrEmpty) { + count++; + if (random.nextInt(count) == 0) { + randomBlock = blockHolder.value(); + } + } + if (randomBlock == null) return Blocks.AIR.defaultBlockState(); + return randomBlock.defaultBlockState(); + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + long neighborVoidMatterCount = 0L; + for (Direction d : Direction.values()) { + BlockState b = level.getBlockState(pos.relative(d)); + if (b.getBlock() instanceof VoidMatterBlock) { + neighborVoidMatterCount++; + } + } + if (neighborVoidMatterCount >= VOID_DECAY_THRESHOLD) { + level.setBlockAndUpdate(pos, voidDecay(level, random)); + } + } + +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/storage/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/storage/package-info.java new file mode 100644 index 0000000000..5aa083ad9e --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/storage/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.storage; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ActiveSilencerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/ActiveSilencerBlock.java similarity index 76% rename from src/main/java/dev/dubhe/anvilcraft/block/ActiveSilencerBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/ActiveSilencerBlock.java index 448ecd96ac..b3a0c7be38 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ActiveSilencerBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/ActiveSilencerBlock.java @@ -1,7 +1,7 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility; import com.mojang.serialization.MapCodec; -import dev.anvilcraft.lib.v2.util.Util; +import dev.anvilcraft.lib.v2.util.ShapeUtil; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.block.entity.ActiveSilencerBlockEntity; import dev.dubhe.anvilcraft.init.ModMenuTypes; @@ -12,10 +12,10 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.GameType; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BaseEntityBlock; @@ -26,9 +26,13 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.redstone.Orientation; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.network.PacketDistributor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; @@ -66,15 +70,15 @@ protected void neighborChanged( BlockState state, Level level, BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, + Block block, + @Nullable Orientation orientation, boolean movedByPiston ) { level.setBlockAndUpdate(pos, state.setValue(POWERED, level.hasNeighborSignal(pos))); } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -83,22 +87,19 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - if (level.isClientSide) return ItemInteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; if (player instanceof ServerPlayer serverPlayer) { BlockEntity be = level.getBlockEntity(pos); if (be instanceof ActiveSilencerBlockEntity asbe && player.getItemInHand(hand).is(ModItems.DISK.get()) ) { - return Util.interactionResultConverter() - .apply( - asbe.useDisk( - level, - serverPlayer, - hand, - serverPlayer.getItemInHand(hand), - hitResult - ) - ); + return asbe.useDisk( + level, + serverPlayer, + hand, + serverPlayer.getItemInHand(hand), + hitResult + ); } } return super.useItemOn(stack, state, level, pos, player, hand, hitResult); @@ -112,21 +113,35 @@ protected InteractionResult useWithoutItem( Player player, BlockHitResult hitResult ) { - if (level.isClientSide) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } BlockEntity be = level.getBlockEntity(pos); if (be instanceof ActiveSilencerBlockEntity asbe && player instanceof ServerPlayer sp) { if (sp.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS; ModMenuTypes.open(sp, asbe, pos); - PacketDistributor.sendToPlayer(sp, new MutedSoundSyncPacket(new ArrayList<>(asbe.getMutedSound()))); + PacketDistributor.sendToPlayer(sp, new MutedSoundSyncPacket(new ArrayList<>(asbe.getMuting()))); return InteractionResult.SUCCESS; } return InteractionResult.FAIL; } + // Shapes + @Override public RenderShape getRenderShape(BlockState state) { return RenderShape.MODEL; } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return ActiveSilencerBlock.SHAPE; + } + + public static final VoxelShape SHAPE = ShapeUtil.merge( + new AABB(0, 0, 0, 16, 8, 16), + new AABB(6, 8, 0, 10, 12, 16), + new AABB(0, 8, 6, 16, 12, 10), + new AABB(2, 8, 2, 14, 16, 14) + ); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ArrowBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/ArrowBlock.java similarity index 97% rename from src/main/java/dev/dubhe/anvilcraft/block/ArrowBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/ArrowBlock.java index 17938e3528..7a5f3aa28a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ArrowBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/ArrowBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BlockDevourerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/BlockDevourerBlock.java similarity index 84% rename from src/main/java/dev/dubhe/anvilcraft/block/BlockDevourerBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/BlockDevourerBlock.java index c391738d30..038eca4951 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/BlockDevourerBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/BlockDevourerBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility; import com.google.common.collect.Streams; import com.mojang.serialization.MapCodec; @@ -7,6 +7,10 @@ import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; +import dev.dubhe.anvilcraft.block.workstation.TranscendenceAnvilBlock; +import dev.dubhe.anvilcraft.block.workstation.ember.EmberAnvilBlock; +import dev.dubhe.anvilcraft.block.workstation.frost.FrostAnvilBlock; +import dev.dubhe.anvilcraft.block.workstation.royal.RoyalAnvilBlock; import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.util.AnvilUtil; import dev.dubhe.anvilcraft.util.BreakBlockUtil; @@ -35,16 +39,18 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.capabilities.Capabilities; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.ItemHandlerHelper; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.item.ItemUtil; +import org.jspecify.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -57,7 +63,7 @@ public class BlockDevourerBlock extends DirectionalBlock implements HammerRotate public static final VoxelShape EAST_SHAPE = Block.box(0, 0, 0, 8, 16, 16); public static final VoxelShape UP_SHAPE = Block.box(0, 0, 0, 16, 8, 16); public static final VoxelShape DOWN_SHAPE = Block.box(0, 8, 0, 16, 16, 16); - public static final DirectionProperty FACING = BlockStateProperties.FACING; + public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty TRIGGERED = BlockStateProperties.TRIGGERED; public BlockDevourerBlock(Properties properties) { @@ -102,8 +108,8 @@ protected void onPlace( BlockState oldState, boolean movedByPiston ) { - if (!level.isClientSide) { - checkIfTriggered(level, state, pos); + if (!level.isClientSide()) { + this.checkIfTriggered(level, state, pos); } } @@ -122,16 +128,16 @@ public void tick( } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, + Block block, + @Nullable Orientation orientation, boolean movedByPiston ) { - if (!level.isClientSide) { - checkIfTriggered(level, state, pos); + if (!level.isClientSide()) { + this.checkIfTriggered(level, state, pos); } } @@ -141,7 +147,7 @@ private void checkIfTriggered(Level level, BlockState blockState, BlockPos block BlockState changedState = blockState.setValue(TRIGGERED, !bl); level.setBlock(blockPos, changedState, 2); if (!bl) { - devourBlock((ServerLevel) level, blockPos, blockState.getValue(FACING), 1); + this.devourBlock((ServerLevel) level, blockPos, blockState.getValue(FACING), 1); } } } @@ -177,15 +183,13 @@ public void devourBlock(ServerLevel level, BlockPos devourerPos, Direction devou this.devourBlock(level, devourerPos, devourerDirection, range, null); } - /** - * 破坏方块 - * - * @param level 世界 - * @param devourerPos 破坏器坐标 - * @param devourerDirection 破坏方向 - * @param range 破坏半径(正方形) - * @param anvil 砸到方块吞噬器的铁砧 - */ + /// 破坏方块 + /// + /// @param level 世界 + /// @param devourerPos 破坏器坐标 + /// @param devourerDirection 破坏方向 + /// @param range 破坏半径(正方形) + /// @param anvil 砸到方块吞噬器的铁砧 @SuppressWarnings({"unreachable", "unused"}) public void devourBlock( ServerLevel level, @@ -196,7 +200,7 @@ public void devourBlock( ) { BlockPos outputPos = devourerPos.relative(devourerDirection.getOpposite()); BlockPos devourCenterPos = devourerPos.relative(devourerDirection); - final List itemHandlerList = ItemHandlerUtil.getTargetItemHandlerList( + final List> itemHandlerList = ItemHandlerUtil.getTargetItemHandlerList( outputPos, devourerDirection, level @@ -254,18 +258,21 @@ public void devourBlock( } } - /** - * 检查目标位置是否可以破坏 - * - * @param devourBlockState 目标方块 - * */ + /// 检查目标位置是否可以破坏 + /// + /// @param devourBlockState 目标方块 + /// */ public static boolean canDevour(BlockState devourBlockState) { return !devourBlockState.is(ModBlockTags.DEVOUR_BLACKLIST) && devourBlockState.getBlock().defaultDestroyTime() >= 0; } private static void devourSingleBlockInternalLogic( - ServerLevel level, @Nullable Block anvil, BlockPos devourBlockPos, List filteredBlockPosList, - @Nullable List itemHandlerList, Vec3 center + ServerLevel level, + @Nullable Block anvil, + BlockPos devourBlockPos, + List filteredBlockPosList, + @Nullable List> itemHandlerList, + Vec3 center ) { AABB aabb = new AABB(center.add(-0.125, -0.125, -0.125), center.add(0.125, 0.125, 0.125)); final boolean insertEnabled = itemHandlerList != null && !itemHandlerList.isEmpty(); @@ -278,7 +285,7 @@ private static void devourSingleBlockInternalLogic( if ( !(anvil instanceof FrostAnvilBlock) && devourBlockState.is(ModBlockTags.BLOCK_DEVOURER_PROBABILITY_DROPPING) - && level.random.nextDouble() > 0.05 + && level.getRandom().nextDouble() > 0.05 ) { level.destroyBlock(devourBlockPos, false); return; @@ -306,13 +313,13 @@ private static void devourSingleBlockInternalLogic( case TranscendenceAnvilBlock ignore -> BreakBlockUtil.dropFortune5(level, devourBlockPos); case null, default -> BreakBlockUtil.drop(level, devourBlockPos); }; - IItemHandler source = level.getCapability(Capabilities.ItemHandler.BLOCK, devourBlockPos, null); + ResourceHandler source = level.getCapability(Capabilities.Item.BLOCK, devourBlockPos, null); boolean skipContentTransfer = source == null; for (ItemStack itemStack : dropList) { skipContentTransfer |= ItemHandlerUtil.isEmptyContainer(itemStack); if (insertEnabled) { - for (IItemHandler target : itemHandlerList) { - itemStack = ItemHandlerHelper.insertItemStacked(target, itemStack, false); + for (ResourceHandler target : itemHandlerList) { + itemStack = ItemUtil.insertItemReturnRemaining(target, itemStack, false, null); } } if (itemStack.isEmpty() && ItemHandlerUtil.isEmptyContainer(source)) continue; @@ -342,14 +349,12 @@ private static void devourSingleBlockInternalLogic( TriggerUtil.devourerDevourBlock(level, devourBlockPos, devourBlockState.getBlock()); } - /** - * 转移讲台内容 - * - *

虽然溜槽/漏斗无法与讲台交互,但吞噬器这类直接破坏的应该转移走才正常点

- */ + /// 转移讲台内容 + /// + ///

虽然溜槽/漏斗无法与讲台交互,但吞噬器这类直接破坏的应该转移走才正常点

private static void transferLecternContents( ServerLevel level, - @Nullable List itemHandlerList, + @Nullable List> itemHandlerList, Vec3 center, LecternBlockEntity lectern, boolean insertEnabled, @@ -358,8 +363,8 @@ private static void transferLecternContents( ItemStack bookStack = lectern.getBook(); if (insertEnabled) { assert itemHandlerList != null; - for (IItemHandler target : itemHandlerList) { - bookStack = ItemHandlerHelper.insertItem(target, bookStack, false); + for (ResourceHandler target : itemHandlerList) { + bookStack = ItemUtil.insertItemReturnRemaining(target, bookStack, false, null); lectern.setBook(bookStack); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BlockPlacerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/BlockPlacerBlock.java similarity index 85% rename from src/main/java/dev/dubhe/anvilcraft/block/BlockPlacerBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/BlockPlacerBlock.java index 187ea9bf8e..7f05da03d1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/BlockPlacerBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/BlockPlacerBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.entity.fakeplayer.AnvilCraftFakePlayers; @@ -41,8 +41,10 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.items.IItemHandler; -import org.jetbrains.annotations.Nullable; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import net.neoforged.neoforge.transfer.transaction.Transaction; +import org.jspecify.annotations.Nullable; import java.util.EnumSet; import java.util.List; @@ -95,8 +97,8 @@ protected void onPlace(BlockState state, BlockPos pos, BlockState oldState, boolean movedByPiston) { - if (!level.isClientSide) { - checkIfTriggered(level, state, pos); + if (!level.isClientSide()) { + this.checkIfTriggered(level, state, pos); } } @@ -114,15 +116,16 @@ public void tick( } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, - Block neighborBlock, - BlockPos neighborPos, - boolean movedByPiston) { - if (!level.isClientSide) { - checkIfTriggered(level, state, pos); + Block block, + net.minecraft.world.level.redstone.@Nullable Orientation orientation, + boolean movedByPiston + ) { + if (!level.isClientSide()) { + this.checkIfTriggered(level, state, pos); } } @@ -134,7 +137,7 @@ private void checkIfTriggered(Level level, BlockState blockState, BlockPos block if (triggered) { return; } - placeBlock(1, level, blockPos, blockState.getValue(ORIENTATION)); + this.placeBlock(1, level, blockPos, blockState.getValue(ORIENTATION)); } } @@ -214,31 +217,32 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { return defaultBlockState().setValue(ORIENTATION, orientation); } - /** - * 放置方块 - * - * @param distance 放置距离 - * @param level 放置世界 - * @param blockPos 放置位置 - * @param orientation 放置方向 - */ + /// 放置方块 + /// + /// @param distance 放置距离 + /// @param level 放置世界 + /// @param blockPos 放置位置 + /// @param orientation 放置方向 public void placeBlock(int distance, Level level, BlockPos blockPos, Orientation orientation) { // 判断是放置位置是否不能放置方块 Direction direction = orientation.getDirection(); BlockState blockState = level.getBlockState(blockPos.relative(direction, distance)); - if (canNotBePlaced(level, blockState)) { + if (this.canNotBePlaced(level, blockState)) { // 不能放置方块,方法直接结束 return; } BlockPos inputPos = blockPos.relative(direction.getOpposite()); // 获取放置方块类型 ItemStack placeItem = null; - IItemHandler itemHandler = ItemHandlerUtil.getSourceItemHandlerRecursive(this, inputPos, direction, level); + ResourceHandler itemHandler = ItemHandlerUtil.getSourceItemHandlerRecursive(this, inputPos, direction, level); int slot; - for (slot = 0; itemHandler != null && slot < itemHandler.getSlots(); slot++) { - ItemStack blockItemStack = itemHandler.extractItem(slot, 1, true); - if (!blockItemStack.isEmpty() && blockItemStack.getItem() instanceof BlockItem) { - placeItem = blockItemStack; + for (slot = 0; itemHandler != null && slot < itemHandler.size(); slot++) { + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = itemHandler.getResource(slot); + if (resource.isEmpty() || !(resource.getItem() instanceof BlockItem)) continue; + int extracted = itemHandler.extract(slot, resource, 1, transaction); + if (extracted != 1) continue; + placeItem = resource.toStack(1); break; } } @@ -302,20 +306,25 @@ public void placeBlock(int distance, Level level, BlockPos blockPos, Orientation itemEntity.setItem(new ItemStack(Items.BUCKET, count)); } } else { - if (itemHandler.getStackInSlot(slot).is(Items.POWDER_SNOW_BUCKET)) { - itemHandler.insertItem(slot, new ItemStack(Items.BUCKET), false); + try (Transaction transaction = Transaction.openRoot()) { + ItemResource resource = itemHandler.getResource(slot); + int extracted = itemHandler.extract(slot, resource, 1, transaction); + if (extracted <= 0) return; + transaction.commit(); + if (resource.is(Items.POWDER_SNOW_BUCKET)) { + int inserted = itemHandler.insert(slot, ItemResource.of(Items.BUCKET), 1, transaction); + if (inserted <= 0) return; + transaction.commit(); + } } - itemHandler.extractItem(slot, 1, false); } } - /** - * 判断当前位置是否不能放置方块 - * - * @param level 放置世界 - * @param blockState 方块放置器前面方块的方块状态 - * @return 当前位置是否不能放置方块 - */ + /// 判断当前位置是否不能放置方块 + /// + /// @param level 放置世界 + /// @param blockState 方块放置器前面方块的方块状态 + /// @return 当前位置是否不能放置方块 private boolean canNotBePlaced(Level level, BlockState blockState) { if (level instanceof ServerLevel) { // 可替换方块 diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ControllableSandBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/ControllableSandBlock.java similarity index 86% rename from src/main/java/dev/dubhe/anvilcraft/block/ControllableSandBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/ControllableSandBlock.java index d10bcc6c47..ac38a932a6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ControllableSandBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/ControllableSandBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.entity.StandableFallingBlockEntity; @@ -8,6 +8,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.redstone.Orientation; +import org.jspecify.annotations.Nullable; public class ControllableSandBlock extends Block implements IHammerRemovable { public ControllableSandBlock(Properties properties) { @@ -21,7 +23,7 @@ protected void move(BlockState state, Level level, BlockPos pos, RandomSource ra boolean belowIsFree = StandableFallingBlockEntity.isFree(level, pos.below()); if (!aboveIsFree && !belowIsFree) return; if (aboveIsFree && belowIsFree) { - if (random.nextFloat() > 0.5f) aboveIsFree = false; + if (random.nextFloat() > 0.5F) aboveIsFree = false; else belowIsFree = false; } @@ -40,7 +42,7 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o @Override protected void neighborChanged( - BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston + BlockState state, Level level, BlockPos pos, Block neighborBlock, @Nullable Orientation orientation, boolean movedByPiston ) { if (!level.hasNeighborSignal(pos)) return; this.move(state, level, pos, level.getRandom()); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ImpactPileBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/ImpactPileBlock.java similarity index 94% rename from src/main/java/dev/dubhe/anvilcraft/block/ImpactPileBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/ImpactPileBlock.java index 12bf025811..e71492ddf6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ImpactPileBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/ImpactPileBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.init.block.ModBlocks; @@ -45,14 +45,12 @@ public RenderShape getRenderShape(BlockState state) { return RenderShape.MODEL; } - /** - * 冲击 - * - * @param level 世界 - * @param blockPos 位置 - */ + /// 冲击 + /// + /// @param level 世界 + /// @param blockPos 位置 public static void impact(Level level, BlockPos blockPos) { - int minY = level.getMinBuildHeight(); + int minY = level.getMinY(); level.destroyBlock(blockPos, false); level.destroyBlock(blockPos.above(), false); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/MengerSpongeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/MengerSpongeBlock.java similarity index 87% rename from src/main/java/dev/dubhe/anvilcraft/block/MengerSpongeBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/MengerSpongeBlock.java index 0209a8663f..898425f116 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/MengerSpongeBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/MengerSpongeBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -18,10 +18,12 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jspecify.annotations.Nullable; import java.util.stream.Stream; @@ -73,19 +75,19 @@ private boolean removeFluidBreadthFirstSearch(Level level, BlockPos pos) { }, (checkedPos) -> { if (checkedPos.equals(pos)) { - return true; + return BlockPos.TraversalNodeStatus.ACCEPT; } BlockState blockState = level.getBlockState(checkedPos); FluidState fluidState = level.getFluidState(checkedPos); if (!fluidState.is(ModFluidTags.MENGER_SPONGE_CAN_ABSORB)) { - return false; + return BlockPos.TraversalNodeStatus.SKIP; } Block block = blockState.getBlock(); if (block instanceof BucketPickup bucketPickup) { if (!bucketPickup .pickupBlock(null, level, checkedPos, blockState) .isEmpty()) { - return true; + return BlockPos.TraversalNodeStatus.ACCEPT; } } @@ -96,7 +98,7 @@ private boolean removeFluidBreadthFirstSearch(Level level, BlockPos pos) { && !blockState.is(Blocks.KELP_PLANT) && !blockState.is(Blocks.SEAGRASS) && !blockState.is(Blocks.TALL_SEAGRASS)) { - return false; + return BlockPos.TraversalNodeStatus.SKIP; } BlockEntity blockEntity = @@ -104,23 +106,23 @@ private boolean removeFluidBreadthFirstSearch(Level level, BlockPos pos) { dropResources(blockState, level, checkedPos, blockEntity); level.setBlock(checkedPos, Blocks.AIR.defaultBlockState(), 3); } - return true; + return BlockPos.TraversalNodeStatus.ACCEPT; } ) > 1; } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston ) { - if (level.isClientSide) return; + if (level.isClientSide()) return; if (AnvilCraft.CONFIG.cleanFluidAfterUpdateMengerSponge) { - removeFluidBreadthFirstSearch(level, pos); + this.removeFluidBreadthFirstSearch(level, pos); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/OverseerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/OverseerBlock.java similarity index 97% rename from src/main/java/dev/dubhe/anvilcraft/block/OverseerBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/OverseerBlock.java index 1ed424e9b8..1fb0990d4f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/OverseerBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/OverseerBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility; import dev.dubhe.anvilcraft.api.IHasMultiBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -24,7 +24,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class OverseerBlock extends SimpleMultiPartBlock @@ -105,7 +105,7 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Override public BlockEntityTicker getTicker( Level level, BlockState state, BlockEntityType type) { - if (level.isClientSide) return null; + if (level.isClientSide()) return null; if (state.getValue(HALF) != Vertical3PartHalf.BOTTOM) return null; return (level1, pos, state1, entity) -> { if (entity instanceof OverseerBlockEntity be) be.tick(level1, pos, state1); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/utility/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/package-info.java new file mode 100644 index 0000000000..be8944e321 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.utility; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/AdvancedComparatorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/AdvancedComparatorBlock.java similarity index 87% rename from src/main/java/dev/dubhe/anvilcraft/block/AdvancedComparatorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/AdvancedComparatorBlock.java index de9735bea5..bc6c1f9a67 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/AdvancedComparatorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/AdvancedComparatorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility.redstone; import com.mojang.serialization.MapCodec; import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; @@ -11,14 +11,12 @@ import dev.dubhe.anvilcraft.init.item.ModItems; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.entity.player.Player; @@ -38,12 +36,14 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.redstone.ExperimentalRedstoneUtils; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.event.EventHooks; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.EnumSet; import java.util.List; @@ -107,7 +107,14 @@ protected int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direc } @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { level.scheduleTick(pos, this, getDelay()); } @@ -133,19 +140,20 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (!state.is(newState.getBlock())) { - super.onRemove(state, level, pos, newState, false); + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + if (!state.is(level.getBlockState(pos).getBlock())) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); } Direction facing = state.getValue(FACING); BlockPos front = pos.relative(facing.getOpposite()); if (EventHooks.onNeighborNotify(level, pos, level.getBlockState(pos), EnumSet.of(facing.getOpposite()), false).isCanceled()) return; - level.neighborChanged(front, this, pos); - level.updateNeighborsAtExceptFromFacing(front, this, facing); + Orientation orientation = ExperimentalRedstoneUtils.initialOrientation(level, facing.getOpposite(), null); + level.neighborChanged(front, this, orientation); + level.updateNeighborsAtExceptFromFacing(front, this, facing, orientation); } public void update(Level level, BlockPos pos, BlockState state) { - if (level.isClientSide) return; + if (level.isClientSide()) return; BlockEntity blockentity = level.getBlockEntity(pos); if (!(blockentity instanceof AdvancedComparatorBlockEntity comparator)) return; Mode mode = comparator.getCompareMode(); @@ -180,13 +188,13 @@ public static int getInputSignal(Level level, BlockPos pos, BlockState state) { BlockState blockstate = level.getBlockState(blockpos); int i = level.getSignal(blockpos, direction); if (blockstate.hasAnalogOutputSignal()) { - i = blockstate.getAnalogOutputSignal(level, blockpos); + i = blockstate.getAnalogOutputSignal(level, blockpos, direction); } else if (i < 15 && blockstate.isRedstoneConductor(level, blockpos)) { blockpos = blockpos.relative(direction); blockstate = level.getBlockState(blockpos); ItemFrame itemframe = getItemFrame(level, direction, blockpos); int j = Integer.MIN_VALUE; - if (blockstate.hasAnalogOutputSignal()) j = Math.max(j, blockstate.getAnalogOutputSignal(level, blockpos)); + if (blockstate.hasAnalogOutputSignal()) j = Math.max(j, blockstate.getAnalogOutputSignal(level, blockpos, direction)); if (itemframe != null) j = Math.max(j, itemframe.getAnalogOutput()); if (j != Integer.MIN_VALUE) { i = j; @@ -207,7 +215,7 @@ private static ItemFrame getItemFrame(Level level, Direction facing, BlockPos po pos.getY() + 1, pos.getZ() + 1 ), - (frame) -> frame != null && frame.getDirection() == facing + frame -> frame.getDirection() == facing ); if (!list.isEmpty()) return list.getFirst(); return null; @@ -224,7 +232,7 @@ public static int getAlternateSignal(SignalGetter level, BlockPos pos, BlockStat @Override protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { Optional optional = level.getBlockEntity(pos, ModBlockEntities.ADVANCED_COMPARATOR.get()); - if (level.isClientSide || optional.isEmpty()) return; + if (level.isClientSide() || optional.isEmpty()) return; AdvancedComparatorBlockEntity blockEntity = optional.get(); blockEntity.updateInputtingSignal(level, pos, state); this.updateBlockAndNeighbours(level, pos, state, blockEntity); @@ -243,8 +251,9 @@ protected void updateBlockAndNeighbours(Level level, BlockPos pos, BlockState st .setValue(AdvancedComparatorBlock.INPUT, inputtingSignal > 0) .setValue(AdvancedComparatorBlock.POWER, inputtingSignal) .setValue(AdvancedComparatorBlock.MODE, mode)); - level.neighborChanged(neighbourPos, state.getBlock(), pos); - level.updateNeighborsAtExceptFromFacing(neighbourPos, state.getBlock(), direction.getOpposite()); + Orientation orientation = ExperimentalRedstoneUtils.initialOrientation(level, direction, null); + level.neighborChanged(neighbourPos, state.getBlock(), orientation); + level.updateNeighborsAtExceptFromFacing(neighbourPos, state.getBlock(), direction.getOpposite(), orientation); } @Override @@ -264,7 +273,7 @@ protected InteractionResult useWithoutItem( Player player, BlockHitResult hitResult ) { - if (level.isClientSide) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } BlockEntity be = level.getBlockEntity(pos); @@ -280,7 +289,7 @@ protected InteractionResult useWithoutItem( } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -289,26 +298,17 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - if (level.isClientSide) return ItemInteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; if (player instanceof ServerPlayer serverPlayer) { if (level.getBlockEntity(pos) instanceof AdvancedComparatorBlockEntity be && player.getItemInHand(hand).is(ModItems.DISK)) { - return Util.interactionResultConverter() - .apply(be.useDisk(level, serverPlayer, hand, serverPlayer.getItemInHand(hand), hitResult)); + return be.useDisk(level, serverPlayer, hand, serverPlayer.getItemInHand(hand), hitResult); } } return super.useItemOn(stack, state, level, pos, player, hand, hitResult); } @Override - public CompoundTag clearData(Level level, BlockPos pos) { - return level.getBlockEntity(pos, ModBlockEntities.ADVANCED_COMPARATOR.get()) - .map(AdvancedComparatorBlockEntity::exportMoveData) - .orElseGet(CompoundTag::new); - } - - @Override - public void setData(Level level, BlockPos pos, CompoundTag tag) { - level.getBlockEntity(pos, ModBlockEntities.ADVANCED_COMPARATOR.get()) - .ifPresent(be -> be.applyMoveData(level, pos, level.getBlockState(pos), tag)); + public void notifyMoved(Level level, BlockPos pos, BlockState state, BlockEntity be) { + Util.cast(be).notifyMoved(); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/BlockComparatorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/BlockComparatorBlock.java similarity index 75% rename from src/main/java/dev/dubhe/anvilcraft/block/BlockComparatorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/BlockComparatorBlock.java index 1c983b508c..150675f1ac 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/BlockComparatorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/BlockComparatorBlock.java @@ -1,8 +1,9 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility.redstone; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -13,25 +14,29 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.ExperimentalRedstoneUtils; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class BlockComparatorBlock extends HorizontalDirectionalBlock implements HammerRotateBehavior, IHammerRemovable { public static final MapCodec CODEC = simpleCodec(BlockComparatorBlock::new); - public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final EnumProperty FACING = HorizontalDirectionalBlock.FACING; public static final BooleanProperty PRECISE = BooleanProperty.create("precise"); public static final BooleanProperty POWERED = BlockStateProperties.POWERED; @@ -85,19 +90,19 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { @Override protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { - if (level.isClientSide || (oldState.is(this) && state.getValue(FACING) == oldState.getValue(FACING))) return; - boolean newPowered = checkBlocks(level, pos, state); + if (level.isClientSide() || (oldState.is(this) && state.getValue(FACING) == oldState.getValue(FACING))) return; + boolean newPowered = this.checkBlocks(level, pos, state); level.setBlock(pos, state.setValue(POWERED, newPowered), 3); this.updateNeighborsInFront(level, pos, state); } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (level.isClientSide || (state.is(newState.getBlock()) && state.getValue(FACING) == newState.getValue(FACING))) return; + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + BlockState newState = level.getBlockState(pos); + if (level.isClientSide() || (state.is(newState.getBlock()) && state.getValue(FACING) == newState.getValue(FACING))) return; if (state.getValue(POWERED)) { this.updateNeighborsInFront(level, pos, state); } - } @Override @@ -106,9 +111,9 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockP return InteractionResult.PASS; } else { BlockState newState = state.cycle(PRECISE); - level.setBlock(pos, newState.setValue(POWERED, checkBlocks(level, pos, newState)), 2); + level.setBlock(pos, newState.setValue(POWERED, this.checkBlocks(level, pos, newState)), 2); this.updateNeighborsInFront(level, pos, state); - return InteractionResult.sidedSuccess(level.isClientSide); + return Util.sidedSuccess(level); } } @@ -120,25 +125,27 @@ private boolean checkBlocks(LevelAccessor level, BlockPos pos, BlockState blockS } @Override - public BlockState updateShape( - BlockState blockState, - Direction direction, - BlockState blockState2, - LevelAccessor level, + protected BlockState updateShape( + BlockState state, + LevelReader level, + ScheduledTickAccess ticks, BlockPos pos, - BlockPos pos2 + Direction directionToNeighbour, + BlockPos neighbourPos, + BlockState neighbourState, + RandomSource random ) { - Direction facing = blockState.getValue(FACING); - if (direction.getAxis() == Direction.Axis.Y || direction.getAxis() == facing.getAxis()) return blockState; - if (!level.isClientSide() && !level.getBlockTicks().hasScheduledTick(pos, this)) { - level.scheduleTick(pos, this, 2); + Direction facing = state.getValue(FACING); + if (directionToNeighbour.getAxis() == Direction.Axis.Y || directionToNeighbour.getAxis() == facing.getAxis()) return state; + if (!level.isClientSide() && !ticks.getBlockTicks().hasScheduledTick(pos, this)) { + ticks.scheduleTick(pos, this, 2); } - return blockState; + return state; } @Override protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - boolean same = checkBlocks(level, pos, state); + boolean same = this.checkBlocks(level, pos, state); if (same != state.getValue(POWERED)) { level.setBlock(pos, state.setValue(POWERED, same), 2); this.updateNeighborsInFront(level, pos, state); @@ -146,10 +153,11 @@ protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSou } protected void updateNeighborsInFront(Level level, BlockPos pos, BlockState state) { - Direction direction = state.getValue(FACING); + Direction direction = state.getValue(FACING).getOpposite(); BlockPos blockpos = pos.relative(direction.getOpposite()); - level.neighborChanged(blockpos, this, pos); - level.updateNeighborsAtExceptFromFacing(blockpos, this, direction); + Orientation orientation = ExperimentalRedstoneUtils.initialOrientation(level, direction, null); + level.neighborChanged(blockpos, this, orientation); + level.updateNeighborsAtExceptFromFacing(blockpos, this, direction, orientation); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ItemDetectorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/ItemDetectorBlock.java similarity index 85% rename from src/main/java/dev/dubhe/anvilcraft/block/ItemDetectorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/ItemDetectorBlock.java index 288d0320fa..d1e9500cae 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ItemDetectorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/ItemDetectorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility.redstone; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; @@ -10,6 +10,7 @@ import dev.dubhe.anvilcraft.init.item.ModItems; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -32,18 +33,18 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.redstone.ExperimentalRedstoneUtils; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.event.EventHooks; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.EnumSet; public class ItemDetectorBlock extends BetterBaseEntityBlock implements EntityBlock, HammerRotateBehavior, IHammerRemovable { - - public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final EnumProperty FACING = HorizontalDirectionalBlock.FACING; public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final MapCodec CODEC = simpleCodec(ItemDetectorBlock::new); public static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 4, 16); @@ -91,7 +92,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { @Override protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { - if (level.isClientSide || (oldState.is(this) && state.getValue(FACING) == oldState.getValue(FACING))) return; + if (level.isClientSide() || (oldState.is(this) && state.getValue(FACING) == oldState.getValue(FACING))) return; if (level.getBlockEntity(pos) instanceof ItemDetectorBlockEntity blockEntity) { blockEntity.recalcDetectionRange(); } @@ -99,11 +100,9 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - super.onRemove(state, level, pos, newState, isMoving); - if (level.isClientSide - || (state.is(newState.getBlock()) && state.getValue(FACING) == newState.getValue(FACING)) - || !state.getValue(POWERED)) { + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); + if (!state.getValue(POWERED)) { return; } this.updateNeighborsInFront(level, pos, state); @@ -116,7 +115,7 @@ public InteractionResult use( Player player, InteractionHand hand, BlockHitResult hit) { - if (level.isClientSide) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } BlockEntity blockEntity = level.getBlockEntity(pos); @@ -138,8 +137,13 @@ public void updateNeighborsInFront(Level level, BlockPos pos, BlockState state) if (EventHooks.onNeighborNotify(level, pos, level.getBlockState(pos), EnumSet.of(direction.getOpposite()), false).isCanceled()) { return; } - level.neighborChanged(blockpos, this, pos); - level.updateNeighborsAtExceptFromFacing(blockpos, this, direction); + level.neighborChanged(blockpos, this, ExperimentalRedstoneUtils.initialOrientation(level, direction.getOpposite(), Direction.UP)); + level.updateNeighborsAtExceptFromFacing( + blockpos, + this, + direction, + ExperimentalRedstoneUtils.initialOrientation(level, direction.getOpposite(), Direction.UP) + ); } @Override @@ -175,7 +179,7 @@ protected int getSignal(BlockState blockState, BlockGetter blockAccess, BlockPos BlockState state, BlockEntityType type ) { - if (level.isClientSide) { + if (level.isClientSide()) { return null; } return createTickerHelper(type, ModBlockEntities.ITEM_DETECTOR.get(), diff --git a/src/main/java/dev/dubhe/anvilcraft/block/PulseGeneratorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/PulseGeneratorBlock.java similarity index 86% rename from src/main/java/dev/dubhe/anvilcraft/block/PulseGeneratorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/PulseGeneratorBlock.java index 14a510cc5b..36f6b52b17 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/PulseGeneratorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/PulseGeneratorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.utility.redstone; import com.mojang.serialization.MapCodec; import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; @@ -11,13 +11,11 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.DustParticleOptions; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -35,12 +33,13 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.ticks.TickPriority; import net.neoforged.neoforge.event.EventHooks; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.EnumSet; import java.util.Optional; @@ -93,7 +92,14 @@ protected int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direc } @Override - protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { + protected void neighborChanged( + BlockState state, + Level level, + BlockPos pos, + Block block, + @Nullable Orientation orientation, + boolean movedByPiston + ) { this.update(level, pos, () -> state); } @@ -115,22 +121,22 @@ protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState o } @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (!state.is(newState.getBlock())) { + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + if (!state.is(level.getBlockState(pos).getBlock())) { if (level instanceof ServerLevel serverLevel) { serverLevel.getBlockTicks().clearArea(new BoundingBox(pos)); } - super.onRemove(state, level, pos, newState, false); + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); } Direction facing = state.getValue(FACING); BlockPos front = pos.relative(facing.getOpposite()); if (EventHooks.onNeighborNotify(level, pos, level.getBlockState(pos), EnumSet.of(facing.getOpposite()), false).isCanceled()) return; - level.neighborChanged(front, this, pos); - level.updateNeighborsAtExceptFromFacing(front, this, facing); + level.neighborChanged(front, this, Orientation.random(level.getRandom())); + level.updateNeighborsAtExceptFromFacing(front, this, facing, Orientation.random(level.getRandom())); } public void update(Level level, BlockPos pos, Supplier stateGetter) { - if (level.isClientSide) return; + if (level.isClientSide()) return; BlockEntity blockentity = level.getBlockEntity(pos); if (!(blockentity instanceof PulseGeneratorBlockEntity generator)) return; @@ -230,8 +236,13 @@ protected void updateBlockAndNeighbours( level.setBlockAndUpdate(pos, newState); // noinspection deprecation generator.setBlockState(newState); - level.neighborChanged(neighbourPos, state.getBlock(), pos); - level.updateNeighborsAtExceptFromFacing(neighbourPos, state.getBlock(), direction.getOpposite()); + level.neighborChanged(neighbourPos, state.getBlock(), Orientation.random(level.getRandom())); + level.updateNeighborsAtExceptFromFacing( + neighbourPos, + state.getBlock(), + direction.getOpposite(), + Orientation.random(level.getRandom()) + ); if (generator.getSignalDuration() == 0) { level.scheduleTick(pos, this, 1, TickPriority.LOW); } @@ -271,14 +282,15 @@ protected InteractionResult useWithoutItem( Player player, BlockHitResult hitResult ) { - if (level.isClientSide) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } BlockEntity be = level.getBlockEntity(pos); if (be instanceof PulseGeneratorBlockEntity blockEntity && player instanceof ServerPlayer sp) { if (sp.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS; sp.openMenu( - blockEntity, buf -> { + blockEntity, + buf -> { buf.writeBlockPos(pos); buf.writeNbt(blockEntity.constructDataNbt()); } @@ -289,7 +301,7 @@ protected InteractionResult useWithoutItem( } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -298,11 +310,10 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - if (level.isClientSide) return ItemInteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; if (player instanceof ServerPlayer serverPlayer) { if (level.getBlockEntity(pos) instanceof PulseGeneratorBlockEntity be && player.getItemInHand(hand).is(ModItems.DISK)) { - return Util.interactionResultConverter() - .apply(be.useDisk(level, serverPlayer, hand, serverPlayer.getItemInHand(hand), hitResult)); + return be.useDisk(level, serverPlayer, hand, serverPlayer.getItemInHand(hand), hitResult); } } return super.useItemOn(stack, state, level, pos, player, hand, hitResult); @@ -324,17 +335,19 @@ public boolean change(Player player, BlockPos blockPos, Level level, ItemStack a } @Override - public CompoundTag clearData(Level level, BlockPos pos) { - CompoundTag[] data = new CompoundTag[1]; - level.getBlockEntity(pos, ModBlockEntities.PULSE_GENERATOR.get()) - .ifPresent(be -> data[0] = be.exportMoveData()); - return data[0]; - } + public void notifyMoved(Level level, BlockPos pos, BlockState state, BlockEntity be1) { + PulseGeneratorBlockEntity be = Util.cast(be1); + switch (be.getState()) { + case WAITING -> level.scheduleTick(pos, state.getBlock(), be.getWaitingTime()); + case OUTPUTTING -> level.scheduleTick(pos, state.getBlock(), be.getSignalDuration()); + default -> { + } + } + level.setBlock(pos, state.setValue(PulseGeneratorBlock.POWERED, be.isOutputting()), 3); - @Override - public void setData(Level level, BlockPos pos, CompoundTag tag) { - level.getBlockEntity(pos, ModBlockEntities.PULSE_GENERATOR.get()) - .ifPresent(be -> be.applyMoveData(level, pos, level.getBlockState(pos), tag)); + this.update(level, pos, () -> state); + + be.setChanged(); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/package-info.java new file mode 100644 index 0000000000..0f221a3073 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.utility.redstone; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/ConfinementChamberBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ConfinementChamberBlock.java similarity index 83% rename from src/main/java/dev/dubhe/anvilcraft/block/ConfinementChamberBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/ConfinementChamberBlock.java index 4eef23c782..f8db3ffe9b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/ConfinementChamberBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ConfinementChamberBlock.java @@ -1,27 +1,27 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.block.entity.ConfinementChamberBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.init.item.ModItems; +import dev.dubhe.anvilcraft.util.ItemResourceHelper; import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.List; @@ -30,7 +30,7 @@ public ConfinementChamberBlock(Properties properties) { super(properties); } - public static final ResourceLocation CONTENTS = ResourceLocation.withDefaultNamespace("contents"); + public static final Identifier CONTENTS = Identifier.withDefaultNamespace("contents"); @Override protected MapCodec codec() { @@ -42,14 +42,9 @@ protected MapCodec codec() { return new ConfinementChamberBlockEntity(blockPos, blockState); } - @Override - protected RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - // Unimplemented for current version /*@Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -66,14 +61,18 @@ protected ItemInteractionResult useItemOn( if (itemStack.is(handItemStack.getItem())) return ItemInteractionResult.FAIL; player.setItemInHand(hand, itemStack.copy()); confinementChamberBlockEntity.getItemHandler().setStackInSlot(0, handItemStack.copy()); - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return dev.dubhe.anvilcraft.util.Util.sidedSuccess(level); }*/ @Override public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) { BlockEntity blockentity = level.getBlockEntity(pos); if (blockentity instanceof ConfinementChamberBlockEntity confinementChamberBlockEntity) { - if (!level.isClientSide && player.isCreative() && !confinementChamberBlockEntity.getItemHandler().getStackInSlot(0).isEmpty()) { + if ( + !level.isClientSide() + && player.isCreative() + && !ItemResourceHelper.isSlotEmpty(confinementChamberBlockEntity.getItemHandler(), 0) + ) { ItemStack itemstack = new ItemStack(ModBlocks.CONFINEMENT_CHAMBER.asItem()); itemstack.applyComponents(blockentity.collectComponents()); ItemEntity itementity = new ItemEntity( @@ -102,7 +101,7 @@ protected List getDrops(BlockState state, LootParams.Builder params) } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -111,11 +110,11 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - if (!level.isClientSide) { + if (!level.isClientSide()) { if (stack.is(ModItems.CHARGED_NEUTRONIUM_INGOT)) { level.setBlockAndUpdate(pos, ModBlocks.CONFINED_NEUTRONIUM_INGOT_BLOCK.getDefaultState()); stack.consume(1, player); - return ItemInteractionResult.SUCCESS; + return InteractionResult.SUCCESS; } } return super.useItemOn(stack, state, level, pos, player, hand, hitResult); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/CorruptedBeaconBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/CorruptedBeaconBlock.java similarity index 97% rename from src/main/java/dev/dubhe/anvilcraft/block/CorruptedBeaconBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/CorruptedBeaconBlock.java index 3a55301d19..d4a0817049 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/CorruptedBeaconBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/CorruptedBeaconBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.block.entity.CorruptedBeaconBlockEntity; @@ -19,7 +19,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Objects; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/CrushingTableBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/CrushingTableBlock.java similarity index 87% rename from src/main/java/dev/dubhe/anvilcraft/block/CrushingTableBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/CrushingTableBlock.java index 1ac2fe5f06..b5535b78b0 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/CrushingTableBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/CrushingTableBlock.java @@ -1,11 +1,13 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SimpleWaterloggedBlock; import net.minecraft.world.level.block.state.BlockState; @@ -86,17 +88,19 @@ public FluidState getFluidState(BlockState blockState) { } @Override - public BlockState updateShape( + protected BlockState updateShape( BlockState blockState, + LevelReader levelReader, + ScheduledTickAccess ticks, + BlockPos blockPos, Direction direction, + BlockPos blockPos2, BlockState blockState2, - LevelAccessor levelAccessor, - BlockPos blockPos, - BlockPos blockPos2 + RandomSource random ) { if (blockState.getValue(WATERLOGGED)) { - levelAccessor.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelAccessor)); + ticks.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelReader)); } - return super.updateShape(blockState, direction, blockState2, levelAccessor, blockPos, blockPos2); + return super.updateShape(blockState, levelReader, ticks, blockPos, direction, blockPos2, blockState2, random); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/workstation/FishTankBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/FishTankBlock.java new file mode 100644 index 0000000000..944e22ecc3 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/FishTankBlock.java @@ -0,0 +1,262 @@ +package dev.dubhe.anvilcraft.block.workstation; + +import com.mojang.serialization.MapCodec; +import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; +import dev.anvilcraft.lib.v2.recipe.cache.BlockCache; +import dev.anvilcraft.lib.v2.util.ShapeUtil; +import dev.anvilcraft.lib.v2.util.Util; +import dev.dubhe.anvilcraft.api.block.IIgnitableCauldron; +import dev.dubhe.anvilcraft.api.hammer.HammerRotateBehavior; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.entity.FishTankBlockEntity; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; +import dev.dubhe.anvilcraft.init.item.ModItemTags; +import dev.dubhe.anvilcraft.util.ModInteractionMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.cauldron.CauldronInteraction; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.common.world.AuxiliaryLightManager; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.item.ItemResource; +import org.jetbrains.annotations.Nullable; + +public class FishTankBlock extends Block implements IMoveableEntityBlock, HammerRotateBehavior, IHammerRemovable, IIgnitableCauldron { + public static final BooleanProperty TROPICAL = BooleanProperty.create("tropical"); + public static final BooleanProperty OUTLET = BooleanProperty.create("outlet"); + public static final EnumProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + + public static final VoxelShape SHAPE = ShapeUtil.cut( + Shapes.block(), + Block.box(2.0, 14.0, 2.0, 14.0, 16.0, 14.0), + Block.box(1.0, 1.0, 1.0, 15.0, 14.0, 15.0) + ); + + public FishTankBlock(Properties properties) { + super(properties); + this.registerDefaultState( + this.stateDefinition.any() + .setValue(FishTankBlock.TROPICAL, false) + .setValue(FishTankBlock.OUTLET, false) + .setValue(FishTankBlock.FACING, Direction.NORTH) + ); + } + + @Override + protected MapCodec codec() { + return Block.simpleCodec(FishTankBlock::new); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FishTankBlock.TROPICAL, FishTankBlock.OUTLET, FishTankBlock.FACING); + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return FishTankBlock.SHAPE; + } + + @Override + protected VoxelShape getInteractionShape(BlockState state, BlockGetter level, BlockPos pos) { + return Shapes.block(); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction facing = context.getHorizontalDirection().getOpposite(); + return this.defaultBlockState().setValue(FishTankBlock.FACING, facing); + } + + @Override + protected boolean hasAnalogOutputSignal(BlockState state) { + return true; + } + + @Override + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + return level.getBlockEntity(pos, ModBlockEntities.FISH_TANK.get()) + .map(FishTankBlockEntity::getSignal) + .orElse(0); + } + + @Override + protected boolean propagatesSkylightDown(BlockState state) { + return false; + } + + @Override + protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { + return 1.0F; + } + + @Override + public boolean hasDynamicLightEmission(BlockState state) { + return true; + } + + @Override + public int getLightEmission(BlockState state, BlockGetter level, BlockPos pos) { + AuxiliaryLightManager manager = level.getAuxLightManager(pos); + if (manager == null) return 0; + return manager.getLightAt(pos); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (level.isClientSide()) return; + if (entity.isOnFire()) { + this.tryIgnite(level, pos); + } + if (!(entity instanceof ItemEntity itemEntity)) return; + if (itemEntity.getItem().is(ModItemTags.FIRE_STARTER)) { + this.tryIgnite(level, pos); + itemEntity.getItem().setCount(itemEntity.getItem().getCount() - 1); + } else if (itemEntity.getItem().is(ModItemTags.UNBROKEN_FIRE_STARTER)) { + this.tryIgnite(level, pos); + } + ResourceHandler items = level.getCapability(Capabilities.Item.BLOCK, pos, null); + FishTankBlockEntity.insertItemToTank(items, itemEntity); + } + + @Override + protected void entityInside( + BlockState state, + Level level, + BlockPos pos, + Entity entity, + InsideBlockEffectApplier effectApplier, + boolean isPrecise + ) { + if (level.isClientSide()) return; + if (entity.isOnFire()) { + this.tryIgnite(level, pos); + } + if (!(entity instanceof ItemEntity itemEntity)) { + level.getBlockEntity(pos, ModBlockEntities.FISH_TANK.get()) + .ifPresent(be -> be.entityInsideFluidContent(level, pos, entity, effectApplier)); + return; + } + if (itemEntity.getItem().is(ModItemTags.FIRE_STARTER)) { + this.tryIgnite(level, pos); + itemEntity.getItem().setCount(itemEntity.getItem().getCount() - 1); + } else if (itemEntity.getItem().is(ModItemTags.UNBROKEN_FIRE_STARTER)) { + this.tryIgnite(level, pos); + } + ResourceHandler items = level.getCapability(Capabilities.Item.BLOCK, pos, null); + FishTankBlockEntity.insertItemToTank(items, itemEntity); + } + + @Override + protected InteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + if (stack.is(ModItemTags.ANVIL_HAMMER) && hitResult.getDirection().getAxis() != Direction.Axis.Y) { + return this.changeOutlet(level, pos, state, player, hitResult); + } + CauldronInteraction interaction = ModInteractionMap.FISH_TANK.get(stack); + if (interaction != CauldronInteraction.DEFAULT) return interaction.interact(state, level, pos, player, hand, stack); + return this.useItemOnTank(stack, state, level, pos, player, hand, hitResult); + } + + public InteractionResult changeOutlet(Level level, BlockPos pos, BlockState state, Player player, BlockHitResult hitResult) { + if (!level.isClientSide()) { + // 水平的四个方向根据被右键的方向转换 + Direction outletDir = hitResult.getDirection(); + boolean hasOutlet = outletDir != state.getValue(FishTankBlock.FACING) || !state.getValue(FishTankBlock.OUTLET); + BlockState newState = state.setValue(FishTankBlock.OUTLET, hasOutlet).setValue(FishTankBlock.FACING, outletDir); + + level.setBlock(pos, newState, Block.UPDATE_CLIENTS); + level.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(newState)); + if (hasOutlet) { + level.getBlockEntity(pos, ModBlockEntities.FISH_TANK.get()) + .ifPresent(FishTankBlockEntity::tryAutoOutputResults); + } + } + level.playSound(player, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, 1.0f, 1.0f); + return InteractionResult.SUCCESS; + } + + public boolean tryIgnite(Level level, BlockPos pos) { + if (!(level.getBlockEntity(pos) instanceof FishTankBlockEntity tank)) return false; + if (!FishTankBlockEntity.canIgnite(tank.getFluidHandler().getStack())) return false; + if (tank.isIgnited()) return false; + tank.setIgnited(true); + return true; + } + + private InteractionResult useItemOnTank( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + InteractionResult result = super.useItemOn(stack, state, level, pos, player, hand, hitResult); + if (result != InteractionResult.TRY_WITH_EMPTY_HAND) return InteractionResult.TRY_WITH_EMPTY_HAND; + if (level.getBlockEntity(pos) instanceof FishTankBlockEntity tank) { + if (tank.tryInteractWithTank(player, hand, hitResult)) { + return dev.dubhe.anvilcraft.util.Util.sidedSuccess(level); + } + } + return InteractionResult.PASS; + } + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return ModBlockEntities.FISH_TANK.create(pos, state); + } + + @Override + public boolean isIgnited(BlockCache cache, BlockPos pos) { + return Util.castSafely(cache.getBlockEntity(pos), FishTankBlockEntity.class) + .map(FishTankBlockEntity::isIgnited) + .orElseThrow(); + } + + @Override + public void setIgnited(BlockCache cache, BlockPos pos, boolean ignited) { + Util.castSafely(cache.getBlockEntity(pos), FishTankBlockEntity.class) + .ifPresent(be -> be.setIgnited(ignited)); + } + + @Override + public Fluid getFluid(BlockCache cache, BlockPos pos) { + return Util.castSafely(cache.getBlockEntity(pos), FishTankBlockEntity.class) + .map(be -> be.getFluidHandler().getStack().getFluid()) + .orElseThrow(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/GiantAnvilBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/GiantAnvilBlock.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/GiantAnvilBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/GiantAnvilBlock.java index ff03918a18..4435b67d20 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/GiantAnvilBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/GiantAnvilBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -8,10 +8,13 @@ import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.api.power.IPowerComponent; import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock; +import dev.dubhe.anvilcraft.block.power.ring.AccelerationRingBlock; +import dev.dubhe.anvilcraft.block.power.ring.DeflectionRingBlock; import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; import dev.dubhe.anvilcraft.block.state.DirectionCube3x3PartHalf; import dev.dubhe.anvilcraft.block.state.GiantAnvilCube; import dev.dubhe.anvilcraft.entity.FallingGiantAnvilEntity; +import dev.dubhe.anvilcraft.init.ModSoundEvents; import dev.dubhe.anvilcraft.init.block.ModBlocks; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -33,7 +36,8 @@ import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Fallable; @@ -53,7 +57,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.common.util.DeferredSoundType; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class GiantAnvilBlock extends SimpleMultiPartBlock implements Fallable, IHammerRemovable { public static final SoundType SOUND_TYPE = new DeferredSoundType( @@ -244,13 +248,11 @@ protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos } @Override - protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + protected boolean propagatesSkylightDown(BlockState state) { return true; } - /** - * 落地 - */ + /// 落地 public void onLand( Level level, BlockPos pos, @@ -273,15 +275,18 @@ public void onLand( .setValue(CUBE, part == Cube3x3PartHalf.MID_CENTER ? GiantAnvilCube.CENTER : GiantAnvilCube.CORNER); level.setBlockAndUpdate(belowPos.offset(part.getOffset()), newState); } - NeoForge.EVENT_BUS.post(new AnvilEvent.GiantOnLand(level, pos, (FallingGiantAnvilEntity) fallingBlock, fallDistance)); - for (int dx = -1; dx <= 1; dx++) { - for (int dz = -1; dz <= 1; dz++) { - BlockPos pos1 = belowPos.offset(new Vec3i(dx, 0, dz)); - NeoForge.EVENT_BUS.post(new AnvilEvent.OnLand(level, pos1, fallingBlock, fallDistance)); + if (level instanceof ServerLevel serverLevel) { + NeoForge.EVENT_BUS.post(new AnvilEvent.GiantOnLand(serverLevel, pos, (FallingGiantAnvilEntity) fallingBlock, fallDistance)); + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + BlockPos pos1 = belowPos.offset(new Vec3i(dx, 0, dz)); + NeoForge.EVENT_BUS.post(new AnvilEvent.OnLand(serverLevel, pos1, fallingBlock, fallDistance)); + } } } - level.playSound(null, belowPos, SoundEvents.ANVIL_LAND, SoundSource.BLOCKS, 0.55f, level.random.nextFloat() * 0.1F + 0.55f); + level.playSound( + null, belowPos, ModSoundEvents.GIANT_ANVIL_LAND.get(), SoundSource.BLOCKS, 0.55F, level.getRandom().nextFloat() * 0.1F + 0.55F); } @Override @@ -312,7 +317,7 @@ public void tick( return; } if (state.getValue(HALF) != Cube3x3PartHalf.BOTTOM_CENTER) return; - for (Cube3x3PartHalf part : getParts()) { + for (Cube3x3PartHalf part : this.getParts()) { if (part.getOffsetY() != 0) continue; if (!FallingBlock.isFree(level.getBlockState(pos.offset(part.getOffset()).below()))) return; } @@ -331,17 +336,18 @@ public void removePartsAndUpdate(Level level, BlockPos pos) { BlockState blockState = level.getBlockState(pos); if (!blockState.is(this)) return; BlockPos bottomCenterPos = this.getMainPartPos(pos, blockState).below(); - for (Cube3x3PartHalf part : getParts()) { + for (Cube3x3PartHalf part : this.getParts()) { BlockPos bp = bottomCenterPos.offset(part.getOffset()); level.setBlock(bp, level.getBlockState(bp).getFluidState().createLegacyBlock(), 3, 0); } UPDATE_OFFSET.forEach((direction, offsetList) -> offsetList.forEach(offset -> { BlockPos updatedPos = bottomCenterPos.offset(offset); BlockPos fromPos = updatedPos.relative(direction); - level.neighborShapeChanged(direction, - level.getBlockState(fromPos), + level.neighborShapeChanged( + direction, updatedPos, fromPos, + level.getBlockState(fromPos), 3, 512 ); @@ -366,18 +372,20 @@ public void onPlace( } @Override - public BlockState updateShape( + protected BlockState updateShape( BlockState state, + LevelReader level, + ScheduledTickAccess ticks, + BlockPos pos, Direction direction, + BlockPos neighborPos, BlockState neighborState, - LevelAccessor level, - BlockPos pos, - BlockPos neighborPos + RandomSource random ) { - if (state.hasProperty(HALF)) { - level.scheduleTick(pos.subtract(state.getValue(HALF).getOffset()), this, this.getDelayAfterPlace()); + if (state.hasProperty(HALF) && level instanceof Level actualLevel) { + actualLevel.scheduleTick(pos.subtract(state.getValue(HALF).getOffset()), this, this.getDelayAfterPlace()); } - return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + return super.updateShape(state, level, ticks, pos, direction, neighborPos, neighborState, random); } protected int getDelayAfterPlace() { @@ -393,7 +401,7 @@ public InteractionResult use( InteractionHand hand, BlockHitResult hit ) { - if (level.isClientSide) { + if (level.isClientSide()) { return InteractionResult.SUCCESS; } else { player.openMenu(state.getMenuProvider(level, pos)); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/JewelCraftingTable.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/JewelCraftingTable.java similarity index 91% rename from src/main/java/dev/dubhe/anvilcraft/block/JewelCraftingTable.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/JewelCraftingTable.java index 903924640d..81b21c0573 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/JewelCraftingTable.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/JewelCraftingTable.java @@ -1,8 +1,9 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.inventory.JewelCraftingMenu; +import dev.dubhe.anvilcraft.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerPlayer; @@ -20,13 +21,13 @@ import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.util.Objects; @@ -37,7 +38,7 @@ public class JewelCraftingTable extends Block implements IHammerRemovable { Block.box(13, 0, 13, 16, 2, 16), Block.box(0, 0, 13, 3, 2, 16), Block.box(0, 2, 0, 16, 12, 16)); - public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final EnumProperty FACING = HorizontalDirectionalBlock.FACING; public JewelCraftingTable(Properties properties) { super(properties); @@ -84,7 +85,7 @@ protected boolean isPathfindable(BlockState state, PathComputationType pathCompu protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { if (level.isClientSide()) return InteractionResult.SUCCESS; ModMenuTypes.open((ServerPlayer) player, Objects.requireNonNull(this.getMenuProvider(state, level, pos))); - return InteractionResult.sidedSuccess(level.isClientSide()); + return Util.sidedSuccess(level); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/NeoforgeBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/NeoforgeBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/NeoforgeBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/NeoforgeBlock.java index 952c7deddf..a03cbd05cc 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/NeoforgeBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/NeoforgeBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import com.mojang.serialization.MapCodec; import dev.dubhe.anvilcraft.inventory.NeoforgeMenu; @@ -12,8 +12,8 @@ import net.minecraft.world.SimpleMenuProvider; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ContainerLevelAccess; @@ -27,17 +27,17 @@ import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class NeoforgeBlock extends FallingBlock { - public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final EnumProperty FACING = HorizontalDirectionalBlock.FACING; private static final VoxelShape BASE = Block.box(2.0, 0.0, 2.0, 14.0, 4.0, 14.0); private static final VoxelShape X_LEG1 = Block.box(4.0, 4.0, 5.0, 12.0, 10.0, 11.0); private static final VoxelShape X_TOP = Block.box(0.0, 10.0, 3.0, 16.0, 16.0, 13.0); @@ -90,7 +90,7 @@ protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, @Override public void falling(FallingBlockEntity entity) { - entity.setHurtsEntities(2.0f, 20); + entity.setHurtsEntities(2.0F, 20); } @Override @@ -114,7 +114,7 @@ public static void damage(Level level, BlockPos pos) { (ServerLevel) level, null, null, pos, - MobSpawnType.SPAWN_EGG, + EntitySpawnReason.SPAWN_ITEM_USE, true, false ) != null) { diff --git a/src/main/java/dev/dubhe/anvilcraft/block/NeutronIrradiatorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/NeutronIrradiatorBlock.java similarity index 89% rename from src/main/java/dev/dubhe/anvilcraft/block/NeutronIrradiatorBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/NeutronIrradiatorBlock.java index 623d4ec01e..4c141472bb 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/NeutronIrradiatorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/NeutronIrradiatorBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.block.entity.NeutronIrradiatorBlockEntity; @@ -9,10 +9,11 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class NeutronIrradiatorBlock extends Block implements IHammerRemovable, EntityBlock { public static VoxelShape MODEL = Shapes.or( @@ -35,12 +36,12 @@ public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldS } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston ) { } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/workstation/SpaceOvercompressorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/SpaceOvercompressorBlock.java new file mode 100644 index 0000000000..6e00036264 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/SpaceOvercompressorBlock.java @@ -0,0 +1,28 @@ +package dev.dubhe.anvilcraft.block.workstation; + +import com.mojang.serialization.MapCodec; +import dev.anvilcraft.lib.v2.piston.IMoveableEntityBlock; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; +import dev.dubhe.anvilcraft.block.entity.SpaceOvercompressorBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jspecify.annotations.Nullable; + +public class SpaceOvercompressorBlock extends BetterBaseEntityBlock implements IHammerRemovable, IMoveableEntityBlock { + public SpaceOvercompressorBlock(Properties properties) { + super(properties); + } + + @Override + protected MapCodec codec() { + return simpleCodec(SpaceOvercompressorBlock::new); + } + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new SpaceOvercompressorBlockEntity(pos, state); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/SpectralAnvilBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/SpectralAnvilBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/SpectralAnvilBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/SpectralAnvilBlock.java index f59dc7faff..66829f7cc2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/SpectralAnvilBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/SpectralAnvilBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.entity.FallingSpectralBlockEntity; @@ -27,17 +27,18 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.redstone.Orientation; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class SpectralAnvilBlock extends Block implements IHammerRemovable { - public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final EnumProperty FACING = HorizontalDirectionalBlock.FACING; public static final BooleanProperty POWERED = BlockStateProperties.POWERED; private static final Component CONTAINER_TITLE = Component.translatable("container.repair"); private static final VoxelShape BASE = Block.box(2.0, 0.0, 2.0, 14.0, 4.0, 14.0); @@ -48,9 +49,7 @@ public class SpectralAnvilBlock extends Block implements IHammerRemovable { private static final VoxelShape X_AXIS_AABB = Shapes.or(BASE, X_LEG1, X_TOP); private static final VoxelShape Z_AXIS_AABB = Shapes.or(BASE, Z_LEG1, Z_TOP); - /** - * 幻灵铁砧 - */ + /// 幻灵铁砧 public SpectralAnvilBlock(Properties properties) { super(properties); this.registerDefaultState( @@ -94,7 +93,7 @@ protected InteractionResult useWithoutItem( Player player, BlockHitResult hitResult ) { - if (p.isClientSide) { + if (p.isClientSide()) { return InteractionResult.SUCCESS; } else { player.openMenu(s.getMenuProvider(p, pos)); @@ -137,12 +136,12 @@ protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSou } @Override - public void neighborChanged( + protected void neighborChanged( BlockState state, Level level, BlockPos pos, Block neighborBlock, - BlockPos neighborPos, + @Nullable Orientation orientation, boolean movedByPiston ) { boolean hasNeighborSignal = MagnetUtil.hasMagnetism(level, pos); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/StampingPlatformBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/StampingPlatformBlock.java similarity index 86% rename from src/main/java/dev/dubhe/anvilcraft/block/StampingPlatformBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/StampingPlatformBlock.java index 904e4ef2da..9f1ba40348 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/StampingPlatformBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/StampingPlatformBlock.java @@ -1,14 +1,16 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import dev.anvilcraft.lib.v2.recipe.util.IRecipeResultOffsetBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; +import net.minecraft.util.RandomSource; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; @@ -17,7 +19,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.pathfinder.PathComputationType; @@ -29,7 +31,7 @@ public class StampingPlatformBlock extends Block implements SimpleWaterloggedBlock, IHammerRemovable, IRecipeResultOffsetBlock { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; - public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + public static final EnumProperty FACING = BlockStateProperties.HORIZONTAL_FACING; private static final VoxelShape REDUCE_AABB = Shapes.or( Block.box(2.0, 12.0, 2.0, 14.0, 16.0, 14.0), Block.box(2.0, 0.0, 2.0, 14.0, 10.0, 14.0), @@ -97,18 +99,20 @@ public FluidState getFluidState(BlockState blockState) { @Override - public BlockState updateShape( + protected BlockState updateShape( BlockState blockState, + LevelReader levelReader, + ScheduledTickAccess ticks, + BlockPos blockPos, Direction direction, + BlockPos blockPos2, BlockState blockState2, - LevelAccessor levelAccessor, - BlockPos blockPos, - BlockPos blockPos2 + RandomSource random ) { if (blockState.getValue(WATERLOGGED)) { - levelAccessor.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelAccessor)); + ticks.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelReader)); } - return super.updateShape(blockState, direction, blockState2, levelAccessor, blockPos, blockPos2); + return super.updateShape(blockState, levelReader, ticks, blockPos, direction, blockPos2, blockState2, random); } @Override @@ -119,7 +123,7 @@ protected boolean isPathfindable(BlockState state, PathComputationType pathCompu @Override public Vec3 getOffset(Level level, BlockPos pos, BlockState state) { if (!(state.getBlock() instanceof StampingPlatformBlock)) return Vec3.ZERO; - Vec3i normal = state.getValue(FACING).getNormal(); + Vec3i normal = state.getValue(FACING).getUnitVec3i(); return new Vec3(normal.getX(), normal.getY(), normal.getZ()).scale(0.7); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/TranscendenceAnvilBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/TranscendenceAnvilBlock.java similarity index 92% rename from src/main/java/dev/dubhe/anvilcraft/block/TranscendenceAnvilBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/TranscendenceAnvilBlock.java index 79391addcc..816941da0b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/TranscendenceAnvilBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/TranscendenceAnvilBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation; import dev.dubhe.anvilcraft.api.block.ITranscendiumBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -27,7 +27,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; @Getter @Setter @@ -54,10 +54,9 @@ public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, Co return Z_AXIS_AABB; } - @SuppressWarnings("UnreachableCode") @Override public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; ModMenuTypes.open((ServerPlayer) player, state.getMenuProvider(level, pos)); player.awardStat(Stats.INTERACT_WITH_ANVIL); return InteractionResult.CONSUME; @@ -73,6 +72,6 @@ public MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) @Override public void falling(FallingBlockEntity entity) { - entity.setHurtsEntities(2.0f, Integer.MAX_VALUE); + entity.setHurtsEntities(2.0F, Integer.MAX_VALUE); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/workstation/TransparentCraftingTableBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/TransparentCraftingTableBlock.java new file mode 100644 index 0000000000..89b7e05d06 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/TransparentCraftingTableBlock.java @@ -0,0 +1,288 @@ +package dev.dubhe.anvilcraft.block.workstation; + +import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.init.ModMenuTypes; +import dev.dubhe.anvilcraft.init.block.ModBlockTags; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.util.RandomSource; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleMenuProvider; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.CraftingMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ScheduledTickAccess; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.TransparentBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.phys.BlockHitResult; + +public class TransparentCraftingTableBlock extends TransparentBlock implements IHammerRemovable { + + public static final EnumProperty TYPE = EnumProperty.create("type", Type.class); + + public TransparentCraftingTableBlock(Properties properties) { + super(properties); + registerDefaultState(stateDefinition.any().setValue(TYPE, Type.SINGLE)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(TYPE); + } + + @Override + protected InteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + if (stack.is(ModBlocks.TRANSPARENT_CRAFTING_TABLE.asItem())) { + return InteractionResult.FAIL; + } + return InteractionResult.PASS; + } + + @Override + protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { + if (level.isClientSide()) return InteractionResult.SUCCESS; + ModMenuTypes.open((ServerPlayer) player, this.getMenuProvider(state, level, pos)); + player.awardStat(Stats.INTERACT_WITH_CRAFTING_TABLE); + return InteractionResult.SUCCESS; + } + + @Override + protected MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) { + return new SimpleMenuProvider( + (id, inventory, player) -> new CraftingMenu(id, inventory, ContainerLevelAccess.create(level, pos)), + Component.translatable("container.crafting") + ); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + if (oldState.is(this)) return; + if (this.tryFormMatrix(level, pos)) { + return; + } + if (state.getValue(TYPE) != Type.SINGLE) level.setBlockAndUpdate(pos, state.setValue(TYPE, Type.SINGLE)); + Direction.Plane.HORIZONTAL.stream() + .map(pos::relative) + .filter(poz -> { + BlockState adjacentState = level.getBlockState(poz); + return adjacentState.is(this) && adjacentState.getValue(TYPE) != Type.SINGLE; + }) + .forEach(poz -> this.deformMatrix(level, poz)); + } + + @Override + protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) { + super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston); + if (state.getValue(TYPE) != Type.SINGLE) { + this.deformMatrix(level, pos); + return; + } + Direction.Plane.HORIZONTAL.stream() + .map(pos::relative) + .forEach(poz -> this.tryFormMatrix(level, poz)); + } + + @Override + protected BlockState updateShape( + BlockState state, + LevelReader level, + ScheduledTickAccess ticks, + BlockPos pos, + Direction direction, + BlockPos neighborPos, + BlockState neighborState, + RandomSource random + ) { + if (!(level instanceof Level actualLevel)) { + return state; + } + if (neighborState.is(this)) return state; + if (this.tryFormMatrix(actualLevel, pos)) { + return state; + } + if (state.getValue(TYPE) != Type.SINGLE && !this.isValidMatrixBlock(neighborState, false)) { + this.deformMatrix(actualLevel, pos); + return state; + } + return state; + } + + /// 以某个方块为起始点,尝试构建一个有透明工作台组成的矩阵。 + /// 若与该方块相连的所有透明工作台不构成一个长方形,构建失败。 + /// + /// @param level 尝试构建矩阵的维度 + /// @param pos 尝试构建矩阵的方块位置 + /// @return 是否成功构建透明工作台矩阵 + private boolean tryFormMatrix(Level level, BlockPos pos) { + if (!this.isValidMatrixBlock(level.getBlockState(pos), false)) return false; + int maxSize = AnvilCraft.CONFIG.transparentCraftingTableMaxMatrixSize; + int x0 = pos.getX(); + int y0 = pos.getY(); + int z0 = pos.getZ(); + BlockPos.MutableBlockPos mpos = pos.mutable(); + // 以放置方块为起始点,向正负x、z轴逐个延申并进行检测,扩充至最大作为矩阵尺寸。 + int minX = x0; + int maxX = x0; + while ((maxX - minX < maxSize) && this.isValidMatrixBlock(level.getBlockState(mpos.set(minX - 1, y0, z0)), false)) { + minX--; + } + while ((maxX - minX < maxSize) && this.isValidMatrixBlock(level.getBlockState(mpos.set(maxX + 1, y0, z0)), false)) { + maxX++; + } + int sizeX = maxX - minX + 1; + if (sizeX < 2 || sizeX > maxSize) return false; + int minZ = z0; + int maxZ = z0; + while ((maxZ - minZ < maxSize) && this.isValidMatrixBlock(level.getBlockState(mpos.set(x0, y0, minZ - 1)), false)) { + minZ--; + } + while ((maxZ - minZ < maxSize) && this.isValidMatrixBlock(level.getBlockState(mpos.set(x0, y0, maxZ + 1)), false)) { + maxZ++; + } + int sizeZ = maxZ - minZ + 1; + if (sizeZ < 2 || sizeZ > maxSize) return false; + // 检测矩阵内所有方块是否匹配 + for (int x = minX; x <= maxX; x++) { + if (x == x0) continue; + for (int z = minZ; z <= maxZ; z++) { + if (z == z0) continue; + if (!this.isValidMatrixBlock(level.getBlockState(mpos.set(x, y0, z)), false)) return false; + } + } + // 向矩阵外圈检测是否有多余的方块 + for (int x = minX; x <= maxX; x++) { + if (this.isValidMatrixBlock(level.getBlockState(mpos.set(x, y0, minZ - 1)), true)) return false; + if (this.isValidMatrixBlock(level.getBlockState(mpos.set(x, y0, maxZ + 1)), true)) return false; + } + for (int z = minZ; z <= maxZ; z++) { + if (this.isValidMatrixBlock(level.getBlockState(mpos.set(minX - 1, y0, z)), true)) return false; + if (this.isValidMatrixBlock(level.getBlockState(mpos.set(maxX + 1, y0, z)), true)) return false; + } + // 将矩阵内的通透工作台转换为连接状态 + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + int indexX = x == maxX ? 2 : (x > minX ? 1 : 0); + int indexZ = z == maxZ ? 2 : (z > minZ ? 1 : 0); + BlockState state = level.getBlockState(mpos.set(x, y0, z)); + if (!state.is(this)) continue; + level.setBlockAndUpdate(mpos, state.setValue(TYPE, Type.LOOKUP[indexX][indexZ])); + } + } + return true; + } + + /// 以某个方块为起始点,尝试移除该方块所属的透明工作台组成的矩阵。 + /// + /// @param level 尝试移除矩阵的维度 + /// @param pos 尝试移除矩阵的方块位置 + private void deformMatrix(Level level, BlockPos pos) { + int x0 = pos.getX(); + int y0 = pos.getY(); + int z0 = pos.getZ(); + BlockPos.MutableBlockPos mpos = pos.mutable(); + + int minX = x0; + int maxX = x0; + while (this.isValidMatrixBlock(level.getBlockState(mpos.set(minX - 1, y0, z0)), false)) { + minX--; + } + while (this.isValidMatrixBlock(level.getBlockState(mpos.set(maxX + 1, y0, z0)), false)) { + maxX++; + } + int minZ = z0; + int maxZ = z0; + while (this.isValidMatrixBlock(level.getBlockState(mpos.set(x0, y0, minZ - 1)), false)) { + minZ--; + } + while (this.isValidMatrixBlock(level.getBlockState(mpos.set(x0, y0, maxZ + 1)), false)) { + maxZ++; + } + + for (int x = minX; x <= maxX; x++) { + for (int z = minZ; z <= maxZ; z++) { + BlockState state = level.getBlockState(mpos.set(x, y0, z)); + if (!state.is(this)) continue; + level.setBlockAndUpdate(mpos, state.setValue(TYPE, Type.SINGLE)); + } + } + } + + /// 判断是否是通透工作台或其它允许参与形成矩阵的方块(目前仅包含空间超压器)。 + /// + /// @param block 需要进行判断的方块 + /// @param isSelfOnly 是否只匹配通透工作台 + /// @return 判断结果 + public boolean isValidMatrixBlock(BlockState block, Boolean isSelfOnly) { + return block.is(this) || (!isSelfOnly && block.is(ModBlockTags.CRAFTING_MATRIX_ELEMENT)); + } + + public enum Type implements StringRepresentable { + SINGLE("single"), + CENTER("center"), + SIDE_NORTH("side_n"), + SIDE_EAST("side_e"), + SIDE_SOUTH("side_s"), + SIDE_WEST("side_w"), + CORNER_NORTH_WEST("corner_nw"), + CORNER_NORTH_EAST("corner_ne"), + CORNER_SOUTH_WEST("corner_sw"), + CORNER_SOUTH_EAST("corner_se"); + + public static final Type[][] LOOKUP = { + { + CORNER_NORTH_WEST, + SIDE_WEST, + CORNER_SOUTH_WEST + }, + { + SIDE_NORTH, + CENTER, + SIDE_SOUTH + }, + { + CORNER_NORTH_EAST, + SIDE_EAST, + CORNER_SOUTH_EAST + } + }; + + final String serializedName; + + Type(String serializedName) { + this.serializedName = serializedName; + } + + @Override + public String getSerializedName() { + return this.serializedName; + } + + @Override + public String toString() { + return this.getSerializedName(); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/block/EmberAnvilBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberAnvilBlock.java similarity index 94% rename from src/main/java/dev/dubhe/anvilcraft/block/EmberAnvilBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberAnvilBlock.java index bd639e18af..e259c591bf 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/EmberAnvilBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberAnvilBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.ember; import dev.dubhe.anvilcraft.api.block.IEmberBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -29,7 +29,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; @Getter @Setter @@ -62,7 +62,6 @@ public VoxelShape getShape( return Z_AXIS_AABB; } - @SuppressWarnings("UnreachableCode") @Override public InteractionResult use( BlockState state, @@ -72,7 +71,7 @@ public InteractionResult use( InteractionHand hand, BlockHitResult hit ) { - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; ModMenuTypes.open((ServerPlayer) player, state.getMenuProvider(level, pos)); player.awardStat(Stats.INTERACT_WITH_ANVIL); return InteractionResult.CONSUME; @@ -88,7 +87,7 @@ public MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) @Override public void falling(FallingBlockEntity entity) { - entity.setHurtsEntities(2.0f, 120); + entity.setHurtsEntities(2.0F, 120); } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/block/EmberGrindstoneBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberGrindstoneBlock.java similarity index 94% rename from src/main/java/dev/dubhe/anvilcraft/block/EmberGrindstoneBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberGrindstoneBlock.java index 0fe782ddbd..c32be39966 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/EmberGrindstoneBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberGrindstoneBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.ember; import dev.dubhe.anvilcraft.api.block.IEmberBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -33,7 +33,6 @@ public EmberGrindstoneBlock(Properties properties) { super(properties); } - @SuppressWarnings("UnreachableCode") public InteractionResult use( BlockState state, Level level, @@ -42,7 +41,7 @@ public InteractionResult use( InteractionHand hand, BlockHitResult hit ) { - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; ModMenuTypes.open((ServerPlayer) player, state.getMenuProvider(level, pos)); player.awardStat(Stats.INTERACT_WITH_GRINDSTONE); return InteractionResult.CONSUME; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/EmberSmithingTableBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberSmithingTableBlock.java similarity index 88% rename from src/main/java/dev/dubhe/anvilcraft/block/EmberSmithingTableBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberSmithingTableBlock.java index ea28c7ccb6..4dafe6b5de 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/EmberSmithingTableBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/EmberSmithingTableBlock.java @@ -1,6 +1,5 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.ember; -import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.api.block.IEmberBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.init.ModMenuTypes; @@ -15,7 +14,6 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.MenuProvider; import net.minecraft.world.SimpleMenuProvider; import net.minecraft.world.entity.player.Player; @@ -40,7 +38,7 @@ public EmberSmithingTableBlock(Properties properties) { } @Override - protected ItemInteractionResult useItemOn( + protected InteractionResult useItemOn( ItemStack stack, BlockState state, Level level, @@ -49,7 +47,7 @@ protected ItemInteractionResult useItemOn( InteractionHand hand, BlockHitResult hitResult ) { - return Util.interactionResultConverter().apply(this.use(state, level, pos, player, hand, hitResult)); + return this.use(state, level, pos, player, hand, hitResult); } @Override @@ -63,7 +61,6 @@ protected InteractionResult useWithoutItem( return this.use(state, level, pos, player, InteractionHand.MAIN_HAND, hitResult); } - @SuppressWarnings("UnreachableCode") public InteractionResult use( BlockState state, Level level, @@ -72,7 +69,7 @@ public InteractionResult use( InteractionHand hand, BlockHitResult hit ) { - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; ModMenuTypes.open((ServerPlayer) player, Objects.requireNonNull(state.getMenuProvider(level, pos))); player.awardStat(Stats.INTERACT_WITH_SMITHING_TABLE); return InteractionResult.CONSUME; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/package-info.java new file mode 100644 index 0000000000..82444c3ed8 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/ember/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.workstation.ember; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FrostAnvilBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostAnvilBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/FrostAnvilBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostAnvilBlock.java index e4b6bfea6a..5216a44891 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FrostAnvilBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostAnvilBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.frost; import dev.dubhe.anvilcraft.api.block.IFrostBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -25,7 +25,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class FrostAnvilBlock extends BetterAnvilBlock implements IHammerRemovable, IFrostBlock { private static final VoxelShape BASE = Block.box(2.0, 0.0, 2.0, 14.0, 4.0, 14.0); @@ -53,7 +53,6 @@ public VoxelShape getShape( return Z_AXIS_AABB; } - @SuppressWarnings("UnreachableCode") @Override public InteractionResult use( BlockState state, @@ -62,7 +61,7 @@ public InteractionResult use( Player player, InteractionHand hand, BlockHitResult hit) { - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; ModMenuTypes.open((ServerPlayer) player, state.getMenuProvider(level, pos)); player.awardStat(Stats.INTERACT_WITH_ANVIL); return InteractionResult.CONSUME; @@ -79,6 +78,6 @@ public MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) @Override public void falling(FallingBlockEntity entity) { - entity.setHurtsEntities(2.0f, 120); + entity.setHurtsEntities(2.0F, 120); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FrostGrindstoneBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostGrindstoneBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/FrostGrindstoneBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostGrindstoneBlock.java index 14b526b058..fe3152d96d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FrostGrindstoneBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostGrindstoneBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.frost; import dev.dubhe.anvilcraft.api.block.IFrostBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; @@ -30,7 +30,6 @@ public FrostGrindstoneBlock(Properties properties) { super(properties); } - @SuppressWarnings("UnreachableCode") public InteractionResult use( BlockState state, Level level, @@ -39,7 +38,7 @@ public InteractionResult use( InteractionHand hand, BlockHitResult hit ) { - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; ModMenuTypes.open((ServerPlayer) player, state.getMenuProvider(level, pos)); player.awardStat(Stats.INTERACT_WITH_GRINDSTONE); return InteractionResult.CONSUME; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/FrostSmithingTableBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostSmithingTableBlock.java similarity index 95% rename from src/main/java/dev/dubhe/anvilcraft/block/FrostSmithingTableBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostSmithingTableBlock.java index 0d9567a9de..c6263640d2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/FrostSmithingTableBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/FrostSmithingTableBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.frost; import dev.dubhe.anvilcraft.api.block.IFrostBlock; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/package-info.java new file mode 100644 index 0000000000..4c320e32d4 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/frost/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.workstation.frost; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/workstation/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/package-info.java new file mode 100644 index 0000000000..93a9c04a0e --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.workstation; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/RoyalAnvilBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalAnvilBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/RoyalAnvilBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalAnvilBlock.java index 350302b33e..3a590c54e2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/RoyalAnvilBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalAnvilBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.royal; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.block.better.BetterAnvilBlock; @@ -24,7 +24,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class RoyalAnvilBlock extends BetterAnvilBlock implements IHammerRemovable { private static final VoxelShape BASE = Block.box(2.0, 0.0, 2.0, 14.0, 4.0, 14.0); @@ -53,7 +53,6 @@ public VoxelShape getShape( return Z_AXIS_AABB; } - @SuppressWarnings("UnreachableCode") @Override public InteractionResult use( BlockState state, @@ -62,7 +61,7 @@ public InteractionResult use( Player player, InteractionHand hand, BlockHitResult hit) { - if (level.isClientSide) return InteractionResult.SUCCESS; + if (level.isClientSide()) return InteractionResult.SUCCESS; ModMenuTypes.open((ServerPlayer) player, state.getMenuProvider(level, pos)); player.awardStat(Stats.INTERACT_WITH_ANVIL); return InteractionResult.CONSUME; @@ -78,6 +77,6 @@ public MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) @Override public void falling(FallingBlockEntity entity) { - entity.setHurtsEntities(2.0f, 80); + entity.setHurtsEntities(2.0F, 80); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/RoyalGrindstoneBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalGrindstoneBlock.java similarity index 93% rename from src/main/java/dev/dubhe/anvilcraft/block/RoyalGrindstoneBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalGrindstoneBlock.java index c43a4caf72..892bb6b182 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/RoyalGrindstoneBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalGrindstoneBlock.java @@ -1,9 +1,10 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.royal; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.block.better.BetterGrindstoneBlock; import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.inventory.RoyalGrindstoneMenu; +import dev.dubhe.anvilcraft.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; @@ -29,7 +30,7 @@ public RoyalGrindstoneBlock(Properties properties) { public InteractionResult use( BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { if (level.isClientSide()) { - return InteractionResult.sidedSuccess(level.isClientSide()); + return Util.sidedSuccess(level); } ModMenuTypes.open((ServerPlayer) player, state.getMenuProvider(level, pos)); player.awardStat(Stats.INTERACT_WITH_GRINDSTONE); @@ -46,4 +47,5 @@ public MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) ), CONTAINER_TITLE); } + } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/RoyalSmithingTableBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalSmithingTableBlock.java similarity index 90% rename from src/main/java/dev/dubhe/anvilcraft/block/RoyalSmithingTableBlock.java rename to src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalSmithingTableBlock.java index d1168dd396..1fb80bd2c1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/RoyalSmithingTableBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/RoyalSmithingTableBlock.java @@ -1,4 +1,4 @@ -package dev.dubhe.anvilcraft.block; +package dev.dubhe.anvilcraft.block.workstation.royal; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; import dev.dubhe.anvilcraft.inventory.RoyalSmithingMenu; @@ -21,7 +21,7 @@ public RoyalSmithingTableBlock(Properties properties) { @Override public MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) { return new SimpleMenuProvider( - (i, inventory, player) -> new RoyalSmithingMenu( + (i, inventory, _) -> new RoyalSmithingMenu( i, inventory, ContainerLevelAccess.create(level, pos) diff --git a/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/package-info.java b/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/package-info.java new file mode 100644 index 0000000000..9810e266b4 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/workstation/royal/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package dev.dubhe.anvilcraft.block.workstation.royal; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/client/AnvilCraftClient.java b/src/main/java/dev/dubhe/anvilcraft/client/AnvilCraftClient.java index 61046cdd45..c7609256ec 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/AnvilCraftClient.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/AnvilCraftClient.java @@ -1,35 +1,39 @@ package dev.dubhe.anvilcraft.client; import dev.anvilcraft.lib.v2.integration.IntegrationHook; +import dev.anvilcraft.lib.v2.rendering.cachedber.renderer.CachedBlockEntityRenderDispatcher; import dev.dubhe.anvilcraft.AnvilCraft; -import dev.dubhe.anvilcraft.client.event.GuiLayerRegistrationEventListener; -import dev.dubhe.anvilcraft.client.init.ModKeyMappings; import dev.dubhe.anvilcraft.client.init.ModModelLayers; -import dev.dubhe.anvilcraft.client.init.ModShaders; -import dev.dubhe.anvilcraft.client.init.ModTooltipComponents; +import dev.dubhe.anvilcraft.client.particle.IonoCraftBackpackExhaustParticle; import dev.dubhe.anvilcraft.client.particle.PlasmaJetsParticle; -import dev.dubhe.anvilcraft.client.renderer.item.decoration.IonoCraftBackpackDecoration; +import dev.dubhe.anvilcraft.client.renderer.laser.CachedLaserBlockEntityRenderer; import dev.dubhe.anvilcraft.client.support.InspectionSupport; import dev.dubhe.anvilcraft.client.support.PillSelectorSupport; import dev.dubhe.anvilcraft.config.AnvilCraftClientConfig; import dev.dubhe.anvilcraft.init.ModParticles; +import dev.dubhe.anvilcraft.init.block.ModBlockEntities; import dev.dubhe.anvilcraft.init.block.ModFluids; import dev.dubhe.anvilcraft.init.item.ModItems; -import net.minecraft.client.model.HumanoidModel; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; +import dev.dubhe.anvilcraft.item.armor.IonoCraftBackpackItem; +import net.minecraft.client.model.Model; +import net.minecraft.client.resources.model.EquipmentClientInfo; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; +import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.ModContainer; +import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.RegisterItemDecorationsEvent; import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; +import org.jspecify.annotations.Nullable; @Mod(value = AnvilCraft.MOD_ID, dist = Dist.CLIENT) +@EventBusSubscriber(modid = AnvilCraft.MOD_ID, value = Dist.CLIENT) public class AnvilCraftClient { public static IEventBus modEventBus = null; public static ModContainer modContainer = null; @@ -39,51 +43,69 @@ public class AnvilCraftClient { public AnvilCraftClient(IEventBus modBus, ModContainer container) { modEventBus = modBus; modContainer = container; - modBus.addListener(GuiLayerRegistrationEventListener::onRegister); - modBus.addListener(ModKeyMappings::register); - modBus.addListener(AnvilCraftClient::registerClientExtensions); - modBus.addListener(AnvilCraftClient::registerCustomItemDecorations); - modBus.addListener(AnvilCraftClient::registerParticleProviders); - modBus.addListener(ModShaders::register); - modBus.addListener(ModModelLayers::register); - modBus.addListener(ModModelLayers::createModel); - modBus.addListener(ModTooltipComponents::register); - modBus.addListener(AnvilCraftClient::clientSetup); InspectionSupport.initializeClient(); } + @SubscribeEvent public static void clientSetup(FMLClientSetupEvent event) { IntegrationHook.setModEventBus(modEventBus); IntegrationHook.setModContainer(modContainer); AnvilCraft.getINTEGRATION_MANAGER().loadAllClientIntegrations(); + event.enqueueWork(() -> { + CachedBlockEntityRenderDispatcher.INSTANCE.registerRenderer( + ModBlockEntities.RUBY_LASER.get(), + new CachedLaserBlockEntityRenderer<>() + ); + CachedBlockEntityRenderDispatcher.INSTANCE.registerRenderer( + ModBlockEntities.RUBY_PRISM.get(), + new CachedLaserBlockEntityRenderer<>() + ); + }); } + @SubscribeEvent public static void registerClientExtensions(RegisterClientExtensionsEvent e) { ModFluids.onRegisterFluidType(e); ItemExtensionImpl itemExtensionInstance = new ItemExtensionImpl(); e.registerItem(itemExtensionInstance, ModItems.IONOCRAFT_BACKPACK); } + @SubscribeEvent public static void registerCustomItemDecorations(RegisterItemDecorationsEvent e) { - e.register(ModItems.IONOCRAFT_BACKPACK, new IonoCraftBackpackDecoration()); + // IonocraftBackpackDecoration has been removed - decoration was migrated to armor renderer } + @SubscribeEvent public static void registerParticleProviders(RegisterParticleProvidersEvent e) { e.registerSpriteSet(ModParticles.PLASMA_JETS.get(), PlasmaJetsParticle.Provider::new); + e.registerSpriteSet(ModParticles.IONOCRAFT_BACKPACK_EXHAUST.get(), IonoCraftBackpackExhaustParticle.Provider::new); } public static class ItemExtensionImpl implements IClientItemExtensions { @Override - public HumanoidModel getHumanoidArmorModel( - LivingEntity livingEntity, - ItemStack itemStack, - EquipmentSlot equipmentSlot, - HumanoidModel original + public Model getHumanoidArmorModel( + ItemStack itemStack, EquipmentClientInfo.LayerType layerType, Model original ) { if (itemStack.is(ModItems.IONOCRAFT_BACKPACK)) { return ModModelLayers.getIonocraftBackpackModel(); } - return IClientItemExtensions.super.getHumanoidArmorModel(livingEntity, itemStack, equipmentSlot, original); + return IClientItemExtensions.super.getHumanoidArmorModel(itemStack, layerType, original); + } + + @Override + public @Nullable Identifier getArmorTexture( + ItemStack itemStack, + EquipmentClientInfo.LayerType type, + EquipmentClientInfo.Layer layer, + Identifier defaultId + ) { + if (itemStack.is(ModItems.IONOCRAFT_BACKPACK)) { + if (IonoCraftBackpackItem.getEnergyStored(itemStack) > 0) { + return IonoCraftBackpackItem.TEXTURE; + } + return IonoCraftBackpackItem.TEXTURE_OFF; + } + return IClientItemExtensions.super.getArmorTexture(itemStack, type, layer, defaultId); } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/ClientBlockEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/ClientBlockEventListener.java index 3b5943b492..dc2135e72e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/ClientBlockEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/ClientBlockEventListener.java @@ -1,18 +1,16 @@ package dev.dubhe.anvilcraft.client.event; +import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; -import dev.dubhe.anvilcraft.client.gui.screen.AnvilHammerScreen; import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.init.item.ModItemTags; -import dev.dubhe.anvilcraft.item.AnvilHammerItem; -import dev.dubhe.anvilcraft.network.HammerUsePacket; +import dev.dubhe.anvilcraft.item.tool.AnvilHammerItem; import dev.dubhe.anvilcraft.util.StateUtil; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; import net.minecraft.tags.BlockTags; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.BlockHitResult; @@ -21,17 +19,12 @@ import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; -import net.neoforged.neoforge.network.PacketDistributor; -import java.util.List; - -@EventBusSubscriber(value = Dist.CLIENT) +@EventBusSubscriber(modid = AnvilCraft.MOD_ID, value = Dist.CLIENT) public class ClientBlockEventListener { - /** - * 侦听右键方块事件 - * - * @param event 右键方块事件 - */ + /// 侦听右键方块事件 + /// + /// @param event 右键方块事件 @SubscribeEvent(priority = EventPriority.HIGH) public static void anvilHammerUse(PlayerInteractEvent.RightClickBlock event) { InteractionHand hand = event.getHand(); @@ -57,33 +50,16 @@ private static boolean clientHandle( InteractionHand hand, BlockHitResult hitVec ) { + Level level = event.getLevel(); Property property = AnvilHammerItem.findModifyableProperty(targetBlockState); - LocalPlayer player = Minecraft.getInstance().player; - if (player == null) return false; - if (property != null) { - if (event.getEntity().isShiftKeyDown()) { - PacketDistributor.sendToServer(new HammerUsePacket(event.getPos(), hand, hitVec)); - return false; - } - if (!event.getEntity().getAbilities().mayBuild) return false; - if (!AnvilHammerItem.ableToUseAnvilHammer(event.getLevel(), event.getPos(), event.getEntity())) return false; - List possibleStates = StateUtil.findPossibleStatesForProperty(targetBlockState, property); - if (!possibleStates.isEmpty()) { - Minecraft.getInstance().setScreen( - new AnvilHammerScreen( - event.getPos(), - targetBlockState, - property, - possibleStates, - hand, - hitVec - ) - ); - } - return true; - } else { - PacketDistributor.sendToServer(new HammerUsePacket(event.getPos(), hand, hitVec)); - } - return false; + return WheelLifecycleEventListener.openHammerWheel( + level.getGameTime(), + level, + event.getPos(), + hand, + property, + () -> StateUtil.findPossibleStatesForProperty(targetBlockState, property), + hitVec + ); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/ClientEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/ClientEventListener.java index 5d80ccdc06..a29d9b5981 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/ClientEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/ClientEventListener.java @@ -1,22 +1,31 @@ package dev.dubhe.anvilcraft.client.event; import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.sound.SoundHelper; import dev.dubhe.anvilcraft.api.thought.ThoughtManager; import dev.dubhe.anvilcraft.client.AnvilCraftClient; +import dev.dubhe.anvilcraft.client.init.ModAtlasIds; import dev.dubhe.anvilcraft.client.init.ModKeyMappings; +import dev.dubhe.anvilcraft.client.init.ModTextureAtlases; import dev.dubhe.anvilcraft.client.support.AmuletSelectorSupport; +import dev.dubhe.anvilcraft.client.support.FilterSelectorSupport; +import dev.dubhe.anvilcraft.client.support.SeismicBounceManager; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.init.item.ModItems; -import dev.dubhe.anvilcraft.item.AnvilHammerItem; +import dev.dubhe.anvilcraft.item.tool.AnvilHammerItem; import dev.dubhe.anvilcraft.network.UsePillBoxPacket; +import dev.dubhe.anvilcraft.recipe.sync.RecipesRecord; import dev.dubhe.anvilcraft.util.BlockHighlightUtil; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.resources.model.sprite.AtlasManager; +import net.minecraft.core.Direction; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; import net.neoforged.api.distmarker.Dist; @@ -26,24 +35,48 @@ import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.client.event.ContainerScreenEvent; import net.neoforged.neoforge.client.event.InputEvent; +import net.neoforged.neoforge.client.event.RegisterTextureAtlasesEvent; import net.neoforged.neoforge.client.event.RenderBlockScreenEffectEvent; -import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.client.event.RenderItemInFrameEvent; import net.neoforged.neoforge.client.event.RenderTooltipEvent; import net.neoforged.neoforge.client.event.ScreenEvent; +import net.neoforged.neoforge.client.event.SubmitCustomGeometryEvent; @EventBusSubscriber(modid = AnvilCraft.MOD_ID, value = Dist.CLIENT) public class ClientEventListener { @SubscribeEvent - public static void blockHighlight(RenderLevelStageEvent event) { - if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_ENTITIES) return; + public static void on(SubmitCustomGeometryEvent event) { if (BlockHighlightUtil.SUBCHUNKS.isEmpty()) return; ClientLevel level = Minecraft.getInstance().level; if (level == null) return; BlockHighlightUtil.render( level, - Minecraft.getInstance().renderBuffers().bufferSource(), + event.getSubmitNodeCollector(), event.getPoseStack(), - event.getCamera() + event.getLevelRenderState().cameraRenderState + ); + } + + @SubscribeEvent + public static void on(RenderItemInFrameEvent event) { + PoseStack poseStack = event.getPoseStack(); + if (!AnvilCraftClient.CONFIG.verticalItemFrame) return; + Direction direction = event.getItemFrameRenderState().direction; + if (direction == Direction.UP) { + poseStack.mulPose(Axis.XP.rotationDegrees(-90.0F)); + } else if (direction == Direction.DOWN) { + poseStack.mulPose(Axis.XP.rotationDegrees(90.0F)); + } + } + + @SubscribeEvent + public static void on(RegisterTextureAtlasesEvent event) { + event.register( + new AtlasManager.AtlasConfig( + ModTextureAtlases.LOCATION_LASER, + ModAtlasIds.LASER, + false + ) ); } @@ -59,6 +92,7 @@ public static void onRenderBlockOverlay(RenderBlockScreenEffectEvent event) { @SubscribeEvent public static void onClientPlayerDisconnect(ClientPlayerNetworkEvent.LoggingOut event) { SoundHelper.INSTANCE.clear(); + RecipesRecord.CLIENTSIDE = null; } @SubscribeEvent @@ -94,6 +128,7 @@ public static void onScreenKeyReleased(ScreenEvent.KeyReleased.Post event) { @SubscribeEvent public static void onClientTick(ClientTickEvent.Post event) { + SeismicBounceManager.getInstance().tick(); long lastThoughtTime = ThoughtManager.getLastThoughtTime(); if (lastThoughtTime < 0) { return; @@ -101,7 +136,7 @@ public static void onClientTick(ClientTickEvent.Post event) { Minecraft minecraft = Minecraft.getInstance(); long curTime = minecraft.gui.getGuiTicks(); long deltaTime = curTime - lastThoughtTime; - if (deltaTime > ThoughtManager.getMAX_SECONDS() * 20) { + if (deltaTime > ThoughtManager.getMaxSeconds() * 20) { ThoughtManager.onPostThought(); } } @@ -120,9 +155,9 @@ public static void onMouseScrolled(ScreenEvent.MouseScrolled.Pre event) { } @SubscribeEvent - public static void renderContainerScreenEvent(ContainerScreenEvent.Render.Background event) { + public static void renderContainerScreenEvent(ContainerScreenEvent.Render.Foreground event) { AbstractContainerScreen screen = event.getContainerScreen(); - Slot slot = screen.getSlotUnderMouse(); + Slot slot = screen.getHoveredSlot(); if (slot != null) { ItemStack item = slot.getItem(); if (item.is(ModItems.PILL_BOX)) { @@ -135,7 +170,7 @@ public static void renderContainerScreenEvent(ContainerScreenEvent.Render.Backgr @SubscribeEvent public static void onRenderTooltip(RenderTooltipEvent.Pre event) { - GuiGraphics guiGraphics = event.getGraphics(); + GuiGraphicsExtractor graphics = event.getGraphics(); int x = event.getX(); int y = event.getY(); @@ -143,12 +178,19 @@ public static void onRenderTooltip(RenderTooltipEvent.Pre event) { if (itemStack.is(ModItems.AMULET_BOX)) { event.setY(y + 13); AmuletSelectorSupport.setCurrentHoveringItemStack(itemStack); - AmuletSelectorSupport.render(guiGraphics, x, y); + AmuletSelectorSupport.render(graphics, x, y); } else if (itemStack.is(ModItems.PILL_BOX)) { event.setY(y + 13); - AnvilCraftClient.pillSelectorSupport.render(guiGraphics, x, y); + AnvilCraftClient.pillSelectorSupport.setPillBox(itemStack); + AnvilCraftClient.pillSelectorSupport.render(graphics, x, y); + } else if (itemStack.is(ModItems.FILTER)) { + event.setY(y + 13); + FilterSelectorSupport.setCurrentFilterStack(itemStack); + FilterSelectorSupport.render(graphics, x, y); } else { AmuletSelectorSupport.setCurrentHoveringItemStack(ItemStack.EMPTY); + AnvilCraftClient.pillSelectorSupport.setPillBox(ItemStack.EMPTY); + FilterSelectorSupport.setCurrentFilterStack(ItemStack.EMPTY); } } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/GuiLayerRegistrationEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/GuiLayerRegistrationEventListener.java index 7a89464e89..c5d00af0e0 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/GuiLayerRegistrationEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/GuiLayerRegistrationEventListener.java @@ -4,10 +4,10 @@ import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.tooltip.HudTooltipManager; import dev.dubhe.anvilcraft.client.hud.IonoCraftBackpackHUD; -import dev.dubhe.anvilcraft.item.AnvilHammerItem; +import dev.dubhe.anvilcraft.item.tool.AnvilHammerItem; import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.core.BlockPos; import net.minecraft.tags.BlockTags; import net.minecraft.world.InteractionHand; @@ -16,12 +16,17 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; +@EventBusSubscriber(modid = AnvilCraft.MOD_ID, value = Dist.CLIENT) public class GuiLayerRegistrationEventListener { + @SubscribeEvent public static void onRegister(RegisterGuiLayersEvent event) { - event.registerAboveAll(AnvilCraft.of("power"), (guiGraphics, deltaTracker) -> { + event.registerAboveAll(AnvilCraft.of("power"), (graphics, deltaTracker) -> { Minecraft minecraft = Minecraft.getInstance(); if (minecraft.options.hideGui) return; float partialTick = deltaTracker.getGameTimeDeltaPartialTick( @@ -37,7 +42,7 @@ public static void onRegister(RegisterGuiLayersEvent event) { ItemStack handItem = mainHandItem.isEmpty() ? offHandItem : mainHandItem; if (!handItem.isEmpty()) { HudTooltipManager.INSTANCE.renderHandItemHudTooltip( - guiGraphics, + graphics, handItem, partialTick, screenWidth, @@ -57,10 +62,17 @@ public static void onRegister(RegisterGuiLayersEvent event) { BlockState s = minecraft.level.getBlockState(blockPos); if (s.is(BlockTags.AIR)) return; HudTooltipManager.INSTANCE.renderTooltip( - guiGraphics, minecraft.level, blockPos, s, partialTick, screenWidth, screenHeight); + graphics, + minecraft.level, + blockPos, + s, + partialTick, + screenWidth, + screenHeight + ); return; } - HudTooltipManager.INSTANCE.renderTooltip(guiGraphics, e, partialTick, screenWidth, screenHeight); + HudTooltipManager.INSTANCE.renderTooltip(graphics, e, partialTick, screenWidth, screenHeight); } }); @@ -68,8 +80,8 @@ public static void onRegister(RegisterGuiLayersEvent event) { event.registerAboveAll(AnvilCraft.of("ionocraft_backpack"), IonoCraftBackpackHUD::render); } - public static void render(GuiGraphics guiGraphics, DeltaTracker deltaTracker) { - // PoseStack poseStack = guiGraphics.pose(); + public static void render(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) { + // PoseStack poseStack = graphics.pose(); // Matrix4f matrix4f = poseStack.last().pose(); // Tesselator tesselator = Tesselator.getInstance(); // BufferBuilder bufferBuilder = tesselator.begin( @@ -85,13 +97,13 @@ public static void render(GuiGraphics guiGraphics, DeltaTracker deltaTracker) { // RenderSystem.setShader(ModShaders::getRingShader); // ModShaders.getRingShader() // .safeGetUniform("Center") - // .set(10f * guiScale, 10f * guiScale); + // .set(10F * guiScale, 10F * guiScale); // ModShaders.getRingShader() // .safeGetUniform("FramebufferSize") // .set((float)window.getWidth(),(float) window.getHeight()); // ModShaders.getRingShader() // .safeGetUniform("Radius") - // .set(10f * guiScale); + // .set(10F * guiScale); // RenderSystem.setShaderColor(1, 1, 1, 1); // BufferUploader.drawWithShader(bufferBuilder.build()); } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/HammerEffectRenderEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/HammerEffectRenderEventListener.java index 873be85b78..e076767c00 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/HammerEffectRenderEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/HammerEffectRenderEventListener.java @@ -1,40 +1,45 @@ package dev.dubhe.anvilcraft.client.event; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.datafixers.util.Pair; +import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.hammer.IHasHammerEffect; +import dev.dubhe.anvilcraft.mixin.accessor.LevelRendererAccessor; import lombok.extern.slf4j.Slf4j; -import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.ModelBlockRenderer; +import net.minecraft.client.renderer.block.BlockModelRenderState; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; +import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.state.level.LevelRenderState; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.util.RandomSource; +import net.minecraft.util.context.ContextKey; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.client.event.ExtractLevelRenderStateEvent; +import net.neoforged.neoforge.client.event.SubmitCustomGeometryEvent; +import net.neoforged.neoforge.client.model.standalone.StandaloneModelKey; +import org.joml.Matrix4f; @Slf4j @EventBusSubscriber(Dist.CLIENT) public class HammerEffectRenderEventListener { - public static final Pair[] DIRECTION_TEXTS; - public static final ModelResourceLocation MODEL = ModelResourceLocation.standalone(AnvilCraft.of("block/axis")); + public static final StandaloneModelKey MODEL = new StandaloneModelKey<>( + () -> "AnvilCraft: Axis Block Model" + ); + private static final ContextKey HAMMER_STATE = new ContextKey<>(AnvilCraft.of("hammer_state")); static { - Pair[] texts = new Pair[Direction.values().length - 2]; + Pair[] texts = Util.cast(new Pair[Direction.values().length - 2]); int idx = 0; for (int i = 0; i < Direction.values().length; i++) { Direction direction = Direction.values()[i]; @@ -46,51 +51,43 @@ public class HammerEffectRenderEventListener { } @SubscribeEvent - public static void onRender(RenderLevelStageEvent event) { - if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_BLOCK_ENTITIES) return; + public static void onExtract(ExtractLevelRenderStateEvent event) { Minecraft mc = Minecraft.getInstance(); if (!(mc.screen instanceof IHasHammerEffect hasHammerEffect)) return; if (!hasHammerEffect.shouldRender()) return; - BlockPos pos = hasHammerEffect.renderingBlockPos(); + BlockModelRenderState model = new BlockModelRenderState(); BlockState state = hasHammerEffect.renderingBlockState(); - RenderType renderType = hasHammerEffect.renderType(); + mc.getModelManager().getBlockStateModelSet().get(state).collectParts( + mc.level, + hasHammerEffect.renderingBlockPos(), + state, + RandomSource.create(), + model.setupModel(new Matrix4f(), false) + ); + event.getRenderState().setRenderData(HammerEffectRenderEventListener.HAMMER_STATE, model); + } + + + // TODO: use custom render type for colored overlay + @SubscribeEvent + public static void onRender(SubmitCustomGeometryEvent event) { + Minecraft mc = Minecraft.getInstance(); + if (!(mc.screen instanceof IHasHammerEffect hasHammerEffect)) return; + if (!hasHammerEffect.shouldRender()) return; + BlockPos pos = hasHammerEffect.renderingBlockPos(); PoseStack poseStack = event.getPoseStack(); poseStack.pushPose(); - Camera camera = event.getCamera(); - Vec3 cameraPos = camera.getPosition(); + LevelRenderState renderState = event.getLevelRenderState(); + CameraRenderState camera = renderState.cameraRenderState; + Vec3 cameraPos = camera.pos; poseStack.translate( pos.getX() - cameraPos.x - 0.0005, pos.getY() - cameraPos.y - 0.0005, pos.getZ() - cameraPos.z - 0.0005 ); - poseStack.scale(1.001f, 1.001f, 1.001f); - BakedModel model = mc.getBlockRenderer().getBlockModel(state); - ModelBlockRenderer renderer = mc.getBlockRenderer().getModelRenderer(); - MultiBufferSource.BufferSource bufferSource = mc.renderBuffers().bufferSource(); - VertexConsumer vertexConsumer = bufferSource.getBuffer(renderType); - renderer.renderModel( - poseStack.last(), - vertexConsumer, - state, - model, - 1f, - 1f, - 1f, - LightTexture.FULL_BLOCK, - OverlayTexture.NO_OVERLAY - ); - - renderer.renderModel( - poseStack.last(), - vertexConsumer, - state, - mc.getModelManager().getModel(MODEL), - 1f, - 1f, - 1f, - LightTexture.FULL_BRIGHT, - OverlayTexture.NO_OVERLAY - ); + poseStack.scale(1.001F, 1.001F, 1.001F); + BlockModelRenderState model = renderState.getRenderData(HammerEffectRenderEventListener.HAMMER_STATE); + model.submit(poseStack, event.getSubmitNodeCollector(), 1, OverlayTexture.NO_OVERLAY, 0); poseStack.popPose(); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/IonoCraftBackpackClientHandler.java b/src/main/java/dev/dubhe/anvilcraft/client/event/IonoCraftBackpackClientHandler.java new file mode 100644 index 0000000000..4e00ee0a8d --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/IonoCraftBackpackClientHandler.java @@ -0,0 +1,119 @@ +package dev.dubhe.anvilcraft.client.event; + +import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.client.AnvilCraftClient; +import dev.dubhe.anvilcraft.init.ModParticles; +import dev.dubhe.anvilcraft.item.armor.IonoCraftBackpackItem; +import net.minecraft.client.CameraType; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; + +import java.util.Collections; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 飘升机背包客户端处理器 — 负责飞行时的排气粒子效果。 + * 粒子位置跟随玩家身体模型(yBodyRot)旋转,与背包引擎模型实际位置一致。 + */ +@EventBusSubscriber(modid = AnvilCraft.MOD_ID, value = Dist.CLIENT) +public class IonoCraftBackpackClientHandler { + private static final double SIDE_OFFSET = 0.3; + private static final double BACK_OFFSET = 0.45; + private static final double Y_OFFSET = 0.9; + + /** 服务器同步的正在用背包飞行的玩家 entityId 集合 */ + private static final Set SYNCED_FLYING_PLAYERS = Collections.newSetFromMap(new ConcurrentHashMap<>()); + /** 上一个 level 引用,用于检测世界切换/断连并清理飞行集合 */ + private static ClientLevel lastLevel = null; + + /** + * 由 {@code IonoCraftBackpackFlyingPacket} 在客户端调用,记录服务器同步的飞行状态。 + */ + public static void onFlyingSync(int playerId, boolean flying) { + if (flying) { + SYNCED_FLYING_PLAYERS.add(playerId); + } else { + SYNCED_FLYING_PLAYERS.remove(playerId); + } + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null) return; + if (minecraft.isPaused()) return; + if (!AnvilCraftClient.CONFIG.ionoCraftBackpackExhaustParticlesEnabled) return; + + ClientLevel level = minecraft.level; + // 世界切换或重连时清空旧的飞行状态集合,防止内存泄漏 + if (lastLevel != level) { + lastLevel = level; + SYNCED_FLYING_PLAYERS.clear(); + } + LocalPlayer localPlayer = minecraft.player; + boolean firstPerson = minecraft.options.getCameraType() == CameraType.FIRST_PERSON; + + for (Player player : level.players()) { + // 自己的背包:第一人称时不显示粒子 + if (player == localPlayer && firstPerson) continue; + + if (player.isCreative() || player.isSpectator()) continue; + + ItemStack backpack = IonoCraftBackpackItem.getByPlayer(player); + if (backpack.isEmpty()) continue; + + // 本地玩家用精确 abilities;远程玩家用服务器同步的精确状态 + boolean flying = player == localPlayer + ? player.getAbilities().flying + : SYNCED_FLYING_PLAYERS.contains(player.getId()); + if (!flying) continue; + + spawnExhaustParticles(level, player, player.getRandom()); + } + } + + private static void spawnExhaustParticles(ClientLevel level, Player player, RandomSource random) { + float yawRad = (float) Math.toRadians(player.yBodyRot); + double cosYaw = Math.cos(yawRad); + double sinYaw = Math.sin(yawRad); + + double backX = sinYaw; + double backZ = -cosYaw; + + double[][] exhausts = {{SIDE_OFFSET, BACK_OFFSET}, {-SIDE_OFFSET, BACK_OFFSET}}; + + for (double[] exhaust : exhausts) { + double sideComp = exhaust[0]; + double backComp = exhaust[1]; + + double worldX = player.getX() + sideComp * (-cosYaw) + backComp * backX; + double worldZ = player.getZ() + sideComp * (-sinYaw) + backComp * backZ; + double worldY = player.getY() + Y_OFFSET; + + double velX = random.nextGaussian() * 0.02; + double velY = -0.3 - random.nextFloat() * 0.3; + double velZ = random.nextGaussian() * 0.02; + + for (int i = 0; i < 2; i++) { + level.addParticle( + ModParticles.IONOCRAFT_BACKPACK_EXHAUST.get(), + false, + true, + worldX + random.nextGaussian() * 0.08, + worldY + random.nextGaussian() * 0.05, + worldZ + random.nextGaussian() * 0.08, + velX, velY, velZ + ); + } + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/LargeBlockPlacePreviewEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/LargeBlockPlacePreviewEventListener.java index eb72c9d414..087f986bfa 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/LargeBlockPlacePreviewEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/LargeBlockPlacePreviewEventListener.java @@ -1,13 +1,13 @@ package dev.dubhe.anvilcraft.client.event; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import dev.anvilcraft.lib.v2.util.Util; import dev.dubhe.anvilcraft.api.tooltip.TooltipRenderHelper; -import dev.dubhe.anvilcraft.block.item.FlexibleMultiPartBlockItem; -import dev.dubhe.anvilcraft.block.item.SimpleMultiPartBlockItem; import dev.dubhe.anvilcraft.block.multipart.AbstractMultiPartBlock; import dev.dubhe.anvilcraft.block.multipart.FlexibleMultiPartBlock; +import dev.dubhe.anvilcraft.item.block.FlexibleMultiPartBlockItem; +import dev.dubhe.anvilcraft.item.block.SimpleMultiPartBlockItem; import dev.dubhe.anvilcraft.util.SegmentedActuator; import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -15,8 +15,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.rendertype.RenderTypes; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; @@ -34,7 +33,8 @@ import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.RenderHighlightEvent; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.client.event.ExtractBlockOutlineRenderStateEvent; import java.util.List; @@ -54,24 +54,15 @@ public class LargeBlockPlacePreviewEventListener { private static List cachedErrorPosList = new ObjectArrayList<>(); private static final SegmentedActuator animationActuator = new SegmentedActuator( - new SegmentedActuator.Task(20, changeBoundColorRed), - new SegmentedActuator.Task(20, changeBoundColorWhite), - new SegmentedActuator.Task(20, changeBoundColorRed), - new SegmentedActuator.Task(20, changeBoundColorWhite) + new SegmentedActuator.Task(2, changeBoundColorRed), + new SegmentedActuator.Task(2, changeBoundColorWhite), + new SegmentedActuator.Task(2, changeBoundColorRed), + new SegmentedActuator.Task(2, changeBoundColorWhite) ); @SubscribeEvent - public static void renderHighlight(RenderHighlightEvent.Block event) { + public static void on(ClientTickEvent.Pre event) { boundColor = 0xffffffff; - Minecraft mc = Minecraft.getInstance(); - ClientLevel level = mc.level; - LocalPlayer player = mc.player; - if (player == null) { - return; - } - if (level == null) { - return; - } if (failBoundCooldown > 0) { failBoundCooldown--; animationActuator.execute(); @@ -79,54 +70,65 @@ public static void renderHighlight(RenderHighlightEvent.Block event) { if (failBoundErrorCooldown > 0) { failBoundErrorCooldown--; } - PoseStack poseStack = event.getPoseStack(); - Vec3 position = event.getCamera().getPosition(); - MultiBufferSource.BufferSource bufferSource = event.getLevelRenderer().renderBuffers.bufferSource(); - BlockHitResult target = event.getTarget(); - Direction direction = target.getDirection(); - BlockPos pos = target.getBlockPos().relative(direction); - VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderType.lines()); - Inventory inventory = player.getInventory(); - ItemStack item = inventory.getItem(inventory.selected); - if (!(item.getItem() instanceof BlockItem)) { - item = player.getItemInHand(InteractionHand.OFF_HAND); - } - if (item.getItem() instanceof BlockItem blockItem) { - if (blockItem.getBlock() instanceof AbstractMultiPartBlock block) { - validateCanRender(item, blockItem, pos); - // Build the actual placement state from the hit result - BlockPlaceContext context = new BlockPlaceContext(player, player.getUsedItemHand(), item, new BlockHitResult( - event.getTarget().getLocation(), - direction, - target.getBlockPos(), - target.isInside() - )); - BlockState state = getPlacementState(block, blockItem, context); - Pair> pair = getShapeAndErrorPosList(level, block, pos, state); - if (!pair.second().isEmpty()) { - if (blockItem instanceof SimpleMultiPartBlockItem simpleMultiPartBlockItem) { - int distance = simpleMultiPartBlockItem.getMaxOffsetDistance(direction); - pos = pos.relative(direction, distance - 1); - } - if (blockItem instanceof FlexibleMultiPartBlockItem flexibleMultiPartBlockItem) { - int distance = flexibleMultiPartBlockItem.getMaxOffsetDistance(state, direction); - pos = pos.relative(direction, distance - 1); + } + + @SubscribeEvent + public static void renderHighlight(ExtractBlockOutlineRenderStateEvent event) { + + event.addCustomRenderer((_, source, pose, _, _) -> { + Minecraft mc = Minecraft.getInstance(); + ClientLevel level = mc.level; + LocalPlayer player = mc.player; + if (player == null) return false; + if (level == null) return false; + Vec3 position = event.getCamera().position(); + BlockHitResult target = event.getHitResult(); + Direction direction = target.getDirection(); + BlockPos pos = target.getBlockPos().relative(direction); + VertexConsumer consumer = source.getBuffer(RenderTypes.lines()); + Inventory inventory = player.getInventory(); + ItemStack item = inventory.getSelectedItem(); + if (!(item.getItem() instanceof BlockItem)) { + item = player.getItemInHand(InteractionHand.OFF_HAND); + } + if (item.getItem() instanceof BlockItem blockItem) { + if (blockItem.getBlock() instanceof AbstractMultiPartBlock block) { + validateCanRender(item, blockItem, pos); + // Build the actual placement state from the hit result + BlockPlaceContext context = new BlockPlaceContext(player, player.getUsedItemHand(), item, new BlockHitResult( + target.getLocation(), + direction, + target.getBlockPos(), + target.isInside() + )); + BlockState placementState = getPlacementState(block, blockItem, context); + Pair> pair = getShapeAndErrorPosList(level, block, pos, placementState); + if (!pair.second().isEmpty()) { + if (blockItem instanceof SimpleMultiPartBlockItem simpleMultiPartBlockItem) { + int distance = simpleMultiPartBlockItem.getMaxOffsetDistance(direction); + pos = pos.relative(direction, distance - 1); + } + if (blockItem instanceof FlexibleMultiPartBlockItem flexibleMultiPartBlockItem) { + int distance = flexibleMultiPartBlockItem.getMaxOffsetDistance(placementState, direction); + pos = pos.relative(direction, distance - 1); + } + pair = getShapeAndErrorPosList(level, block, pos, placementState); } - pair = getShapeAndErrorPosList(level, block, pos, state); + TooltipRenderHelper.renderOutline( + pose, + consumer, + position.x, + position.y, + position.z, + pos, + pair.first(), + boundColor + ); + renderErrorBound(pose, consumer, event.getCamera()); } - TooltipRenderHelper.renderOutline( - poseStack, - vertexConsumer, - position.x, - position.y, - position.z, - pos, - pair.first(), - boundColor - ); - renderErrorBound(poseStack, vertexConsumer, event.getCamera()); } - } + return false; + }); } private static Pair> getShapeAndErrorPosList( @@ -138,7 +140,7 @@ private static Pair> getShapeAndErrorPosList( VoxelShape combinedShape = Shapes.empty(); List errorBlockPosList = new ObjectArrayList<>(); for (Enum part : block.getParts()) { - BlockPos offset = pos.offset(block.offsetFrom(state, cast(part))); + BlockPos offset = pos.offset(block.offsetFrom(state, Util.cast(part))); BlockState blockState = level.getBlockState(offset); if (!blockState.canBeReplaced() || level.isOutsideBuildHeight(offset)) { errorBlockPosList.add(offset); @@ -172,30 +174,22 @@ private static void validateCanRender( } private static void renderErrorBound(PoseStack poseStack, VertexConsumer vertexConsumer, Camera camera) { - Vec3 position = camera.getPosition(); - if (failBoundErrorCooldown > 0) { - RenderSystem.disableDepthTest(); - RenderSystem.depthMask(false); - for (BlockPos blockPos : cachedErrorPosList) { - TooltipRenderHelper.renderOutline( - poseStack, - vertexConsumer, - position.x, - position.y, - position.z, - blockPos, - Shapes.block(), - 0xffff0000 - ); - } - RenderSystem.depthMask(true); - RenderSystem.enableDepthTest(); + Vec3 position = camera.position(); + if (failBoundErrorCooldown <= 0) { + return; + } + for (BlockPos blockPos : cachedErrorPosList) { + TooltipRenderHelper.renderOutline( + poseStack, + vertexConsumer, + position.x, + position.y, + position.z, + blockPos, + Shapes.block(), + 0xffff0000 + ); } - } - - @SuppressWarnings("unchecked") - private static

> P cast(Enum e) { - return (P) e; } private static BlockState getPlacementState(AbstractMultiPartBlock block, BlockItem blockItem, BlockPlaceContext context) { @@ -210,12 +204,12 @@ private static BlockState getPlacementState(AbstractMultiPartBlock block, Blo } public static void startFailBoundCooldown() { - failBoundCooldown = 80; + failBoundCooldown = 8; animationActuator.reset(); } public static void startFailBoundErrorCooldown(List errorPosList) { - failBoundErrorCooldown = 60; + failBoundErrorCooldown = 6; cachedErrorPosList = new ObjectArrayList<>(errorPosList); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/RecipesReceivedEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/RecipesReceivedEventListener.java new file mode 100644 index 0000000000..9095227817 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/RecipesReceivedEventListener.java @@ -0,0 +1,16 @@ +package dev.dubhe.anvilcraft.client.event; + +import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.recipe.sync.RecipesRecord; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RecipesReceivedEvent; + +@EventBusSubscriber(modid = AnvilCraft.MOD_ID, value = Dist.CLIENT) +public class RecipesReceivedEventListener { + @SubscribeEvent + public static void on(RecipesReceivedEvent event) { + RecipesRecord.CLIENTSIDE = event.getRecipeMap(); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/RegisterAdditionalEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/RegisterAdditionalEventListener.java index 77aff35a27..75f867adad 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/RegisterAdditionalEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/RegisterAdditionalEventListener.java @@ -1,33 +1,96 @@ package dev.dubhe.anvilcraft.client.event; import dev.dubhe.anvilcraft.AnvilCraft; -import net.minecraft.client.resources.model.ModelResourceLocation; +import dev.dubhe.anvilcraft.client.renderer.blockentity.AdvancedComparatorRenderer; +import dev.dubhe.anvilcraft.client.renderer.blockentity.CFARenderer; +import dev.dubhe.anvilcraft.client.renderer.blockentity.ChargeCollectorRenderer; +import dev.dubhe.anvilcraft.client.renderer.blockentity.CreativeGeneratorRenderer; +import dev.dubhe.anvilcraft.client.renderer.blockentity.FeCollectorRenderer; +import dev.dubhe.anvilcraft.client.renderer.blockentity.FishTankRenderer; +import dev.dubhe.anvilcraft.client.renderer.blockentity.HeatCollectorRenderer; +import dev.dubhe.anvilcraft.client.renderer.blockentity.HeliostatsRenderer; +import dev.dubhe.anvilcraft.client.renderer.blockentity.VoidEnergyCollectorRenderer; +import dev.dubhe.anvilcraft.client.renderer.item.CrabClawItemInHandRenderer; +import dev.dubhe.anvilcraft.client.renderer.item.SpectralSlingshotRenderer; +import dev.dubhe.anvilcraft.client.renderer.item.SpectralWeaponLauncherRenderer; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.client.event.ModelEvent; +import net.neoforged.neoforge.client.event.RegisterSpecialModelRendererEvent; +import net.neoforged.neoforge.client.model.standalone.SimpleUnbakedStandaloneModel; @EventBusSubscriber(modid = AnvilCraft.MOD_ID, value = Dist.CLIENT) public class RegisterAdditionalEventListener { - /** - * 注册模型 - */ + /// 注册模型 @SubscribeEvent - public static void registerModels(ModelEvent.RegisterAdditional event) { - event.register(ModelResourceLocation.standalone(AnvilCraft.of("item/crab_claw_holding_block"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("item/crab_claw_holding_item"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/heliostats_head"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/heliostats_head_sunflower"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/creative_generator_cube"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/charge_collector_cube"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/heat_collector_cube"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/void_energy_collector_head"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/laser"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/axis"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/advanced_comparator_indicator"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/celestial_forging_anvil_ring_1"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/celestial_forging_anvil_ring_2"))); - event.register(ModelResourceLocation.standalone(AnvilCraft.of("block/celestial_forging_anvil_ring_3"))); + public static void registerModels(ModelEvent.RegisterStandalone event) { + event.register( + CrabClawItemInHandRenderer.HOLDING_BLOCK, + SimpleUnbakedStandaloneModel.quadCollection(AnvilCraft.of("item/crab_claw_holding_block")) + ); + event.register( + CrabClawItemInHandRenderer.HOLDING_ITEM, + SimpleUnbakedStandaloneModel.quadCollection(AnvilCraft.of("item/crab_claw_holding_item")) + ); + event.register( + HeliostatsRenderer.HEAD, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/heliostats_head")) + ); + event.register( + HeliostatsRenderer.HEAD_SUNFLOWER, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/heliostats_head_sunflower")) + ); + event.register( + CreativeGeneratorRenderer.CUBE, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/creative_generator_cube")) + ); + event.register( + ChargeCollectorRenderer.CUBE, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/charge_collector_cube")) + ); + event.register( + HeatCollectorRenderer.CUBE, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/heat_collector_cube")) + ); + event.register( + VoidEnergyCollectorRenderer.HEAD, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/void_energy_collector_head")) + ); + event.register( + FeCollectorRenderer.MODEL, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/fe_collector_head")) + ); + event.register( + HammerEffectRenderEventListener.MODEL, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/axis")) + ); + event.register( + AdvancedComparatorRenderer.INDICATOR, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/advanced_comparator_indicator")) + ); + event.register( + CFARenderer.RING1, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/celestial_forging_anvil_ring_1")) + ); + event.register( + CFARenderer.RING2, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/celestial_forging_anvil_ring_2")) + ); + event.register( + CFARenderer.RING3, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/celestial_forging_anvil_ring_3")) + ); + event.register( + FishTankRenderer.FIRE, + SimpleUnbakedStandaloneModel.blockStateModel(AnvilCraft.of("block/oil_cauldron_fire4")) + ); + } + + @SubscribeEvent + public static void registerSpecialRenderers(RegisterSpecialModelRendererEvent event) { + event.register(AnvilCraft.of("spectral_slingshot"), SpectralSlingshotRenderer.Unbaked.CODEC); + event.register(AnvilCraft.of("spectral_weapon_launcher"), SpectralWeaponLauncherRenderer.Unbaked.CODEC); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/RenderEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/RenderEventListener.java deleted file mode 100644 index 814af2d50e..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/RenderEventListener.java +++ /dev/null @@ -1,128 +0,0 @@ -package dev.dubhe.anvilcraft.client.event; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import dev.anvilcraft.lib.v2.util.Util; -import dev.dubhe.anvilcraft.api.tooltip.HudTooltipManager; -import dev.dubhe.anvilcraft.api.tooltip.TooltipRenderHelper; -import dev.dubhe.anvilcraft.client.support.InspectionSupport; -import dev.dubhe.anvilcraft.client.support.PowerGridSupport; -import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.item.AnvilHammerItem; -import net.minecraft.client.DeltaTracker; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.RenderLevelStageEvent; - -import java.util.Optional; - -@EventBusSubscriber(value = Dist.CLIENT) -public class RenderEventListener { - - @SubscribeEvent - public static void onRenderInspection(RenderLevelStageEvent event) { - if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_BLOCK_ENTITIES) return; - Vec3 camera = event.getCamera().getPosition(); - PoseStack poseStack = event.getPoseStack(); - DeltaTracker deltaTracker = event.getPartialTick(); - LevelRenderer renderer = event.getLevelRenderer(); - InspectionSupport.INSTANCE.onRenderInspectionAction( - poseStack, - renderer, - camera, - deltaTracker - ); - } - - @SubscribeEvent - public static void onRender(RenderLevelStageEvent event) { - if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_BLOCK_ENTITIES) return; - if (Minecraft.getInstance().options.hideGui) return; - Entity entity = event.getCamera().getEntity(); - PoseStack pose = event.getPoseStack(); - MultiBufferSource.BufferSource bufferSource = - event.getLevelRenderer().renderBuffers.bufferSource(); - - Vec3 vec3 = event.getCamera().getPosition(); - double camX = vec3.x(); - double camY = vec3.y(); - double camZ = vec3.z(); - PowerGridSupport.renderTransmitterLine(pose, bufferSource, vec3); - - if (!(entity instanceof LivingEntity livingEntity)) return; - ItemStack mainHandItem = livingEntity.getItemInHand(InteractionHand.MAIN_HAND); - ItemStack offHandItem = livingEntity.getItemInHand(InteractionHand.OFF_HAND); - ItemStack handItem = mainHandItem.isEmpty() ? offHandItem : mainHandItem; - VertexConsumer vertexConsumer3 = bufferSource.getBuffer(RenderType.lines()); - if (!handItem.isEmpty()) { - HudTooltipManager.INSTANCE.renderHandItemLevelTooltip(handItem, pose, vertexConsumer3, camX, camY, camZ); - } - - if (!(entity instanceof Player player)) return; - Optional hitResult = Util.castSafely(Minecraft.getInstance().hitResult, BlockHitResult.class); - hitResult.ifPresent(hit -> renderDragonRodOutline(pose, hit, vertexConsumer3, camX, camY, camZ, handItem)); - if (!AnvilHammerItem.shouldRenderEffect(player)) return; - PowerGridSupport.render(pose, bufferSource, vec3); - hitResult.ifPresent(hit -> renderAffectRange(pose, hit, vertexConsumer3, camX, camY, camZ)); - } - - private static void renderAffectRange( - PoseStack pose, BlockHitResult hit, VertexConsumer vertexConsumer3, - double camX, double camY, double camZ - ) { - BlockPos blockPos = hit.getBlockPos(); - if (Minecraft.getInstance().level == null) return; - BlockEntity e = Minecraft.getInstance().level.getBlockEntity(blockPos); - if (e == null) return; - HudTooltipManager.INSTANCE.renderAffectRange(e, pose, vertexConsumer3, camX, camY, camZ); - } - - private static void renderDragonRodOutline( - PoseStack pose, BlockHitResult hitResult, VertexConsumer consumer, double camX, double camY, double camZ, ItemStack handItem - ) { - if (handItem.has(ModComponents.DEVOUR_RANGE)) { - int range = handItem.getOrDefault(ModComponents.DEVOUR_RANGE, -1); - if (range == -1) return; - int half = (range - 1) / 2; - - if (hitResult.miss) return; - - BlockPos pos = hitResult.getBlockPos(); - VoxelShape willDevourShape; - switch (hitResult.getDirection()) { - case DOWN, UP -> { - willDevourShape = Shapes.create(0, 0, 0, range, 1, range); - pos = pos.relative(Direction.NORTH, half).relative(Direction.WEST, half); - } - case NORTH, SOUTH -> { - willDevourShape = Shapes.create(0, 0, 0, range, range, 1); - pos = pos.relative(Direction.WEST, half).relative(Direction.DOWN, half); - } - case WEST, EAST -> { - willDevourShape = Shapes.create(0, 0, 0, 1, range, range); - pos = pos.relative(Direction.NORTH, half).relative(Direction.DOWN, half); - } - default -> willDevourShape = Shapes.block(); - } - - TooltipRenderHelper.renderOutline(pose, consumer, camX, camY, camZ, pos, willDevourShape, 0xFFFFFFFE); - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/SeismicBounceRenderEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/SeismicBounceRenderEventListener.java new file mode 100644 index 0000000000..8126467db5 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/SeismicBounceRenderEventListener.java @@ -0,0 +1,68 @@ +package dev.dubhe.anvilcraft.client.event; + +import dev.dubhe.anvilcraft.client.support.SeismicBounceManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.MovingBlockRenderState; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.SubmitCustomGeometryEvent; + +/** + * 震波弹跳渲染 —— 直接获取原版光照管线。 + * + *

+ * 因为 {@code submitMovingBlock} 会把模型里的 quad 按材质层 (SOLID / CUTOUT / TRANSLUCENT) + * 分发到正确的 RenderPipeline,所以同时支持实体方块、裁剪方块以及透明方块。 + */ +@EventBusSubscriber(modid = "anvilcraft", value = Dist.CLIENT) +public class SeismicBounceRenderEventListener { + + @SubscribeEvent + public static void onRender(SubmitCustomGeometryEvent event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.level == null) return; + + double camX = event.getLevelRenderState().cameraRenderState.pos.x(); + double camY = event.getLevelRenderState().cameraRenderState.pos.y(); + double camZ = event.getLevelRenderState().cameraRenderState.pos.z(); + float partialTick = mc.getDeltaTracker().getGameTimeDeltaPartialTick(false); + + var poseStack = event.getPoseStack(); + var nodeCollector = event.getSubmitNodeCollector(); + + for (var entry : SeismicBounceManager.getInstance().getActiveBounces().entrySet()) { + BlockPos pos = entry.getKey(); + var data = entry.getValue(); + + float offsetY = data.getRenderOffsetY(partialTick); + if (Math.abs(offsetY) < 0.001f) continue; + + BlockState state = mc.level.getBlockState(pos); + if (state.isAir() || state.getRenderShape() != RenderShape.MODEL) continue; + + // 构造 MovingBlockRenderState + MovingBlockRenderState renderState = new MovingBlockRenderState(); + renderState.randomSeedPos = pos; + renderState.blockPos = pos; + renderState.blockState = state; + renderState.biome = mc.level.getBiome(pos); + renderState.cardinalLighting = mc.level.cardinalLighting(); + renderState.lightEngine = mc.level.getLightEngine(); + + poseStack.pushPose(); + poseStack.translate(pos.getX() - camX, pos.getY() - camY + offsetY, pos.getZ() - camZ); + poseStack.translate(0.5, 0.5, 0.5); + poseStack.scale(1.0005f, 1.000f, 1.0005f); + poseStack.translate(-0.5, -0.5, -0.5); + + nodeCollector.submitMovingBlock(poseStack, renderState); + + poseStack.popPose(); + } + } + +} diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/SubmitGeometryEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/SubmitGeometryEventListener.java new file mode 100644 index 0000000000..422d15f351 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/SubmitGeometryEventListener.java @@ -0,0 +1,132 @@ +package dev.dubhe.anvilcraft.client.event; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import dev.dubhe.anvilcraft.api.tooltip.HudTooltipManager; +import dev.dubhe.anvilcraft.api.tooltip.TooltipRenderHelper; +import dev.dubhe.anvilcraft.client.support.InspectionSupport; +import dev.dubhe.anvilcraft.client.support.PowerGridSupport; +import dev.dubhe.anvilcraft.init.item.ModComponents; +import dev.dubhe.anvilcraft.item.property.component.DevourRange; +import dev.dubhe.anvilcraft.item.tool.AnvilHammerItem; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.rendertype.RenderTypes; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.SubmitCustomGeometryEvent; + +@EventBusSubscriber(value = Dist.CLIENT) +public class SubmitGeometryEventListener { + + @SubscribeEvent + public static void on(SubmitCustomGeometryEvent event) { + Vec3 camera = event.getLevelRenderState().cameraRenderState.pos; + PoseStack poseStack = event.getPoseStack(); + DeltaTracker deltaTracker = Minecraft.getInstance().getDeltaTracker(); + SubmitNodeCollector nodeCollector = event.getSubmitNodeCollector(); + // Inspection + InspectionSupport.INSTANCE.onRenderInspectionAction( + poseStack, + nodeCollector, + camera, + deltaTracker + ); + + if (Minecraft.getInstance().options.hideGui) return; + if (!(Minecraft.getInstance().getCameraEntity() instanceof Player player)) return; + + double camX = camera.x(); + double camY = camera.y(); + double camZ = camera.z(); + + ItemStack mainHandItem = player.getItemInHand(InteractionHand.MAIN_HAND); + ItemStack offHandItem = player.getItemInHand(InteractionHand.OFF_HAND); + ItemStack handItem = mainHandItem.isEmpty() ? offHandItem : mainHandItem; + + if (!handItem.isEmpty()) { + nodeCollector.submitCustomGeometry(poseStack, RenderTypes.lines(), (pose, buffer) -> { + PoseStack poses = new PoseStack(); + poses.pushPose(); + poses.last().set(pose); + HudTooltipManager.INSTANCE.submitHandItemInWorldTooltip(handItem, poses, buffer, camX, camY, camZ); + poses.popPose(); + }); + } + + HitResult hitResult = Minecraft.getInstance().hitResult; + if (hitResult instanceof BlockHitResult blockHitResult) { + nodeCollector.submitCustomGeometry(poseStack, RenderTypes.lines(), ((pose, buffer) -> { + if (AnvilHammerItem.shouldRenderEffect(player)) { + renderAffectRange(poseStack, blockHitResult, buffer, camX, camY, camZ); + } + renderDragonRodOutline(pose, blockHitResult, buffer, camX, camY, camZ, handItem); + })); + + } + + + submitPowerGridLines(poseStack, nodeCollector, camera); + } + + private static void submitPowerGridLines(PoseStack poseStack, SubmitNodeCollector nodeCollector, Vec3 camera) { + PowerGridSupport.submitPowerGridBounds(poseStack, nodeCollector, camera); + PowerGridSupport.submitEnhancedTransmitterLine(camera); + PowerGridSupport.submitTransmitterLine(poseStack, nodeCollector, camera); + } + + private static void renderAffectRange( + PoseStack pose, BlockHitResult hit, VertexConsumer vertexConsumer3, + double camX, double camY, double camZ + ) { + BlockPos blockPos = hit.getBlockPos(); + if (Minecraft.getInstance().level == null) return; + BlockEntity e = Minecraft.getInstance().level.getBlockEntity(blockPos); + if (e == null) return; + HudTooltipManager.INSTANCE.renderAffectRange(e, pose, vertexConsumer3, camX, camY, camZ); + } + + private static void renderDragonRodOutline( + PoseStack.Pose pose, BlockHitResult hitResult, VertexConsumer consumer, double camX, double camY, double camZ, ItemStack handItem + ) { + if (handItem.has(ModComponents.DEVOUR_RANGE)) { + int range = handItem.getOrDefault(ModComponents.DEVOUR_RANGE, DevourRange.THREE).getRange(); + int half = (range - 1) / 2; + + if (hitResult.miss) return; + + BlockPos pos = hitResult.getBlockPos(); + VoxelShape willDevourShape; + switch (hitResult.getDirection()) { + case DOWN, UP -> { + willDevourShape = Shapes.create(0, 0, 0, range, 1, range); + pos = pos.relative(Direction.NORTH, half).relative(Direction.WEST, half); + } + case NORTH, SOUTH -> { + willDevourShape = Shapes.create(0, 0, 0, range, range, 1); + pos = pos.relative(Direction.WEST, half).relative(Direction.DOWN, half); + } + case WEST, EAST -> { + willDevourShape = Shapes.create(0, 0, 0, 1, range, range); + pos = pos.relative(Direction.NORTH, half).relative(Direction.DOWN, half); + } + default -> willDevourShape = Shapes.block(); + } + + TooltipRenderHelper.renderOutline(pose, consumer, camX, camY, camZ, pos, willDevourShape, 0xFFFFFFFE); + } + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/WheelLifecycleEventListener.java b/src/main/java/dev/dubhe/anvilcraft/client/event/WheelLifecycleEventListener.java index 60b8b04615..40e79ae240 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/WheelLifecycleEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/WheelLifecycleEventListener.java @@ -1,54 +1,78 @@ package dev.dubhe.anvilcraft.client.event; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import dev.anvilcraft.lib.v2.rendering.gui.GuiRenderExtras; +import dev.anvilcraft.lib.v2.util.Util; +import dev.anvilcraft.lib.v2.wheel.api.WheelEntryAction; import dev.anvilcraft.lib.v2.wheel.api.WheelMenuBuilder; import dev.anvilcraft.lib.v2.wheel.api.WheelMenuModel; import dev.anvilcraft.lib.v2.wheel.client.input.WheelScreenController; import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.block.multipart.FlexibleMultiPartBlock; import dev.dubhe.anvilcraft.client.init.ModKeyMappings; import dev.dubhe.anvilcraft.init.item.ModComponents; -import dev.dubhe.anvilcraft.item.MultitoolItem; -import dev.dubhe.anvilcraft.item.ResonatorItem; import dev.dubhe.anvilcraft.item.property.component.MultiphaseRef; +import dev.dubhe.anvilcraft.item.tool.AnvilHammerItem; +import dev.dubhe.anvilcraft.item.tool.MultitoolItem; +import dev.dubhe.anvilcraft.item.tool.MultitoolMode; +import dev.dubhe.anvilcraft.item.tool.ResonateMode; +import dev.dubhe.anvilcraft.item.tool.ResonatorItem; +import dev.dubhe.anvilcraft.network.HammerChangeBlockPacket; +import dev.dubhe.anvilcraft.network.HammerChangeFlexibleMultiPartBlockPacket; +import dev.dubhe.anvilcraft.network.HammerUsePacket; import dev.dubhe.anvilcraft.network.SwitchMultitoolModePacket; import dev.dubhe.anvilcraft.network.SwitchResonateModePacket; import dev.dubhe.anvilcraft.network.multiple.MultiphasePackets; import dev.dubhe.anvilcraft.saved.multiphase.Multiphase; import net.minecraft.client.Minecraft; +import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.core.component.DataComponents; +import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.component.CustomModelData; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec2; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.client.event.InputEvent; -import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.client.network.ClientPacketDistributor; +import org.jspecify.annotations.Nullable; import org.lwjgl.glfw.GLFW; import java.util.Comparator; +import java.util.List; import java.util.Optional; -import javax.annotation.Nullable; +import java.util.function.Supplier; @SuppressWarnings({"OptionalUsedAsFieldOrParameterType", "OptionalAssignedToNull"}) @EventBusSubscriber(modid = AnvilCraft.MOD_ID, value = Dist.CLIENT) public class WheelLifecycleEventListener { private static final WheelScreenController CONTROLLER = new WheelScreenController(); + private static long hammerKeyTime = -1L; + private static boolean hammerKeyWasDown = false; + private static @Nullable Optional hammerWheelCache = null; + private static long multiphaseKeyTime = -1L; private static boolean multiphaseKeyWasDown = false; - private static Optional multiphaseWheelCache = null; + private static @Nullable Optional multiphaseWheelCache = null; private static long resonatorKeyTime = -1L; private static boolean resonatorKeyWasDown = false; - private static Optional resonatorWheelCache = null; + private static @Nullable Optional resonatorWheelCache = null; private static long multitoolKeyTime = -1L; private static boolean multitoolKeyWasDown = false; - private static Optional multitoolWheelCache = null; + private static @Nullable Optional multitoolWheelCache = null; @SubscribeEvent public static void onClientTick(ClientTickEvent.Post event) { @@ -61,6 +85,49 @@ public static void onClientTick(ClientTickEvent.Post event) { WheelLifecycleEventListener.openMultitoolWheel(gameTime); } + public static boolean openHammerWheel( + long gameTime, + Level level, + BlockPos targetPos, + InteractionHand hand, + @Nullable Property property, + Supplier> possibleStatesFac, + BlockHitResult hitVec + ) { + if (WheelLifecycleEventListener.hammerKeyTime <= 0) return false; + if (property == null) { + ClientPacketDistributor.sendToServer(new HammerUsePacket(targetPos, hand, hitVec)); + return false; + } + if (gameTime - WheelLifecycleEventListener.hammerKeyTime <= 4) { + ClientPacketDistributor.sendToServer(new HammerUsePacket(targetPos, hand, hitVec)); + return false; + } + Minecraft client = Minecraft.getInstance(); + LocalPlayer player = client.player; + if (player == null) return false; + if (WheelLifecycleEventListener.hammerWheelCache == null) { + if (player.isShiftKeyDown()) { + ClientPacketDistributor.sendToServer(new HammerUsePacket(targetPos, hand, hitVec)); + return false; + } + if (!player.getAbilities().mayBuild) return false; + if (!AnvilHammerItem.ableToUseAnvilHammer(level, targetPos, player)) return false; + List possibleStates = possibleStatesFac.get(); + if (possibleStates.isEmpty()) return true; + WheelLifecycleEventListener.hammerWheelCache = Optional.ofNullable(WheelLifecycleEventListener.getHammerWheel( + targetPos, + property, + possibleStates, + client.getCameraEntity().getRotationVector() + )); + } + if (WheelLifecycleEventListener.hammerWheelCache.isEmpty()) return false; + CONTROLLER.onHoldKeyPressed(WheelLifecycleEventListener.hammerWheelCache.get()); + WheelLifecycleEventListener.hammerKeyWasDown = true; + return true; + } + private static void openMultiphaseWheel(long gameTime) { if ( WheelLifecycleEventListener.multiphaseKeyTime > 0 @@ -78,7 +145,7 @@ private static void openMultiphaseWheel(long gameTime) { if (!stack.has(ModComponents.MULTIPHASE)) return; MultiphaseRef ref = stack.get(ModComponents.MULTIPHASE); if (ref.isEmpty()) return; - PacketDistributor.sendToServer(new MultiphasePackets.SingleSync(stack.get(ModComponents.MULTIPHASE).id().get())); + ClientPacketDistributor.sendToServer(new MultiphasePackets.SingleSync(stack.get(ModComponents.MULTIPHASE).id().get())); WheelLifecycleEventListener.multiphaseWheelCache = Optional.ofNullable( WheelLifecycleEventListener.getMultiphaseWheel(hand, stack, ref.toMultiphase()) ); @@ -90,55 +157,108 @@ private static void openMultiphaseWheel(long gameTime) { } private static void openResonatorWheel(long gameTime) { - if ( - WheelLifecycleEventListener.resonatorKeyTime > 0 - && gameTime - WheelLifecycleEventListener.resonatorKeyTime > 4 - ) { - if (WheelLifecycleEventListener.resonatorWheelCache == null) { - LocalPlayer player = Minecraft.getInstance().player; - if (player == null) return; - InteractionHand hand = InteractionHand.MAIN_HAND; - ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof ResonatorItem)) { - hand = InteractionHand.OFF_HAND; - stack = player.getOffhandItem(); - } - if (!(stack.getItem() instanceof ResonatorItem)) return; - WheelLifecycleEventListener.resonatorWheelCache = Optional.ofNullable( - WheelLifecycleEventListener.getResonatorWheel(hand, stack) - ); + if (WheelLifecycleEventListener.resonatorKeyTime <= 0) return; + if (WheelLifecycleEventListener.resonatorWheelCache == null) { + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return; + InteractionHand hand = InteractionHand.MAIN_HAND; + ItemStack stack = player.getMainHandItem(); + if (!(stack.getItem() instanceof ResonatorItem)) { + hand = InteractionHand.OFF_HAND; + stack = player.getOffhandItem(); } + if (!(stack.getItem() instanceof ResonatorItem)) return; + WheelLifecycleEventListener.resonatorWheelCache = Optional.ofNullable( + WheelLifecycleEventListener.getResonatorWheel(hand, stack) + ); + } + if (gameTime - WheelLifecycleEventListener.resonatorKeyTime > 4) { if (WheelLifecycleEventListener.resonatorWheelCache.isEmpty()) return; CONTROLLER.onHoldKeyPressed(WheelLifecycleEventListener.resonatorWheelCache.get()); WheelLifecycleEventListener.resonatorKeyWasDown = true; + } else { + if (WheelLifecycleEventListener.resonatorWheelCache.isEmpty()) return; + CONTROLLER.openTap(WheelLifecycleEventListener.resonatorWheelCache.get()); } } private static void openMultitoolWheel(long gameTime) { - if ( - WheelLifecycleEventListener.multitoolKeyTime > 0 - && gameTime - WheelLifecycleEventListener.multitoolKeyTime > 4 - ) { - if (WheelLifecycleEventListener.multitoolWheelCache == null) { - LocalPlayer player = Minecraft.getInstance().player; - if (player == null) return; - InteractionHand hand = InteractionHand.MAIN_HAND; - ItemStack stack = player.getMainHandItem(); - if (!(stack.getItem() instanceof MultitoolItem)) { - hand = InteractionHand.OFF_HAND; - stack = player.getOffhandItem(); - } - if (!(stack.getItem() instanceof MultitoolItem)) return; - WheelLifecycleEventListener.multitoolWheelCache = Optional.ofNullable( - WheelLifecycleEventListener.getMultitoolWheel(hand, stack) - ); + if (WheelLifecycleEventListener.multitoolKeyTime <= 0) return; + if (WheelLifecycleEventListener.multitoolWheelCache == null) { + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return; + InteractionHand hand = InteractionHand.MAIN_HAND; + ItemStack stack = player.getMainHandItem(); + if (!(stack.getItem() instanceof MultitoolItem)) { + hand = InteractionHand.OFF_HAND; + stack = player.getOffhandItem(); } + if (!(stack.getItem() instanceof MultitoolItem)) return; + WheelLifecycleEventListener.multitoolWheelCache = Optional.ofNullable( + WheelLifecycleEventListener.getMultitoolWheel(hand, stack) + ); + } + if (gameTime - WheelLifecycleEventListener.multitoolKeyTime > 4) { if (WheelLifecycleEventListener.multitoolWheelCache.isEmpty()) return; CONTROLLER.onHoldKeyPressed(WheelLifecycleEventListener.multitoolWheelCache.get()); WheelLifecycleEventListener.multitoolKeyWasDown = true; + } else { + if (WheelLifecycleEventListener.multitoolWheelCache.isEmpty()) return; + CONTROLLER.openTap(WheelLifecycleEventListener.multitoolWheelCache.get()); } } + private static @Nullable WheelMenuModel getHammerWheel( + BlockPos targetPos, + Property property, + List possibleStates, + Vec2 camera + ) { + WheelMenuBuilder builder = WheelMenuBuilder.create().slotsPerPage(possibleStates.size()); + possibleStates + .forEach(state -> { + String name = property.getName(Util.cast(state.getValue(property))); + WheelEntryAction action; + if (state.getBlock() instanceof FlexibleMultiPartBlock) { + if (state.hasProperty(BlockStateProperties.FACING)) { + action = _ -> ClientPacketDistributor.sendToServer(new HammerChangeFlexibleMultiPartBlockPacket( + targetPos, + state, + state.getValue(BlockStateProperties.FACING) + )); + } else if (state.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) { + action = _ -> ClientPacketDistributor.sendToServer(new HammerChangeFlexibleMultiPartBlockPacket( + targetPos, + state, + state.getValue(BlockStateProperties.HORIZONTAL_FACING) + )); + } else { + action = _ -> { + }; + } + } else { + action = _ -> ClientPacketDistributor.sendToServer(new HammerChangeBlockPacket( + targetPos, + state + )); + } + builder.action( + name, + Component.literal(name), + (graphics, _, _, _) -> { + PoseStack pose = new PoseStack(); + pose.translate(0.5F, 0.5F, 0.5F); + pose.mulPose(Axis.XP.rotationDegrees(camera.x)); + pose.mulPose(Axis.YP.rotationDegrees(camera.y + 180F)); + pose.translate(-0.5F, -0.5F, -0.5F); + GuiRenderExtras.tessellateBlock(graphics, state, 0, 0, pose); + }, + action + ); + }); + return builder.build(); + } + private static @Nullable WheelMenuModel getMultiphaseWheel(InteractionHand hand, ItemStack holding, Multiphase multiphase) { WheelMenuBuilder builder = WheelMenuBuilder.create().slotsPerPage(multiphase.phases().size()); multiphase.phases().stream() @@ -146,12 +266,12 @@ private static void openMultitoolWheel(long gameTime) { .forEachOrdered(phase -> builder.action( "" + Multiphase.DEFAULT_SUFFIXES.charAt(phase.index()), phase.phaseName(), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); phase.applyToStack(copied); - graphics.renderItem(copied, 2, 2, 9910597); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( + ctx -> ClientPacketDistributor.sendToServer( new MultiphasePackets.ChangePhase(hand, ctx.slotIndex()) ) )); @@ -164,60 +284,60 @@ private static void openMultitoolWheel(long gameTime) { .action( "auto", Component.translatable("screen.anvilcraft.resonator.auto"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(ResonatorItem.AUTO_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.RESONATE_MODE, ResonateMode.AUTO); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( + ctx -> ClientPacketDistributor.sendToServer( new SwitchResonateModePacket(hand, ctx.slotIndex()) ) ) .action( "axe", Component.translatable("screen.anvilcraft.resonator.axe"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(ResonatorItem.AXE_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.RESONATE_MODE, ResonateMode.AXE); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( + ctx -> ClientPacketDistributor.sendToServer( new SwitchResonateModePacket(hand, ctx.slotIndex()) ) ) .action( "shovel", Component.translatable("screen.anvilcraft.resonator.shovel"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(ResonatorItem.SHOVEL_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.RESONATE_MODE, ResonateMode.SHOVEL); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( + ctx -> ClientPacketDistributor.sendToServer( new SwitchResonateModePacket(hand, ctx.slotIndex()) ) ) .action( "hoe", Component.translatable("screen.anvilcraft.resonator.hoe"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(ResonatorItem.HOE_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.RESONATE_MODE, ResonateMode.HOE); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( + ctx -> ClientPacketDistributor.sendToServer( new SwitchResonateModePacket(hand, ctx.slotIndex()) ) ) .action( "pickaxe", Component.translatable("screen.anvilcraft.resonator.pickaxe"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(ResonatorItem.PICKAXE_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.RESONATE_MODE, ResonateMode.PICKAXE); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( + ctx -> ClientPacketDistributor.sendToServer( new SwitchResonateModePacket(hand, ctx.slotIndex()) ) ) @@ -230,109 +350,109 @@ private static void openMultitoolWheel(long gameTime) { .action( "all", Component.translatable("screen.anvilcraft.multitool.all"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.ALL_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.ALL); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .action( "shears", Component.translatable("item.minecraft.shears"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.SHEARS_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.SHEARS); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .action( "flint_and_steel", Component.translatable("item.minecraft.flint_and_steel"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.FLINT_AND_STEEL_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.FLINT_AND_STEEL); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .action( "brush", Component.translatable("item.minecraft.brush"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.BRUSH_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.BRUSH); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .action( "spyglass", Component.translatable("item.minecraft.spyglass"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.SPYGLASS_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.SPYGLASS); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .action( "magnet", Component.translatable("item.anvilcraft.magnet"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.MAGNET_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.MAGNET); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .action( "fishing_rod", Component.translatable("item.minecraft.fishing_rod"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.FISHING_ROD_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.FISHING_ROD); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .action( "carrot_on_a_stick", Component.translatable("item.minecraft.carrot_on_a_stick"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.CARROT_ON_A_STICK_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.CARROT_ON_A_STICK); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .action( "warped_fungus_on_a_stick", Component.translatable("item.minecraft.warped_fungus_on_a_stick"), - (graphics, pose, width, height) -> { + (graphics, _, _, _) -> { ItemStack copied = holding.copy(); - copied.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(MultitoolItem.WARPED_FUNGUS_ON_A_STICK_MODE)); - graphics.renderItem(copied, 2, 2, 9910597); + copied.set(ModComponents.MULTITOOL_MODE, MultitoolMode.WARPED_FUNGUS_ON_A_STICK); + graphics.item(copied, 2, 2, 9910597); }, - ctx -> PacketDistributor.sendToServer( - new SwitchMultitoolModePacket(hand, ctx.slotIndex()) + ctx -> ClientPacketDistributor.sendToServer( + new SwitchMultitoolModePacket(hand, MultitoolMode.values()[ctx.slotIndex()]) ) ) .build(); @@ -342,10 +462,10 @@ private static void openMultitoolWheel(long gameTime) { public static void onKeyInput(InputEvent.Key event) { Minecraft client = Minecraft.getInstance(); if (client.player == null) return; - if (ModKeyMappings.SWITCH_PHASE.get().matches(event.getKey(), event.getScanCode())) { + if (ModKeyMappings.SWITCH_PHASE.get().matches(event.getKeyEvent())) { WheelLifecycleEventListener.processMultiphasePress(client, event.getAction()); } - if (ModKeyMappings.SWITCH_TOOL_MODE.get().matches(event.getKey(), event.getScanCode())) { + if (ModKeyMappings.SWITCH_TOOL_MODE.get().matches(event.getKeyEvent())) { WheelLifecycleEventListener.processResonatorPress(client, event.getAction()); WheelLifecycleEventListener.processMultitoolPress(client, event.getAction()); } @@ -355,22 +475,44 @@ public static void onKeyInput(InputEvent.Key event) { public static void onKeyInput(InputEvent.MouseButton.Post event) { Minecraft client = Minecraft.getInstance(); if (client.player == null) return; - if (ModKeyMappings.SWITCH_PHASE.get().matchesMouse(event.getButton())) { + if (client.options.keyUse.matchesMouse(new MouseButtonEvent(0, 0, event.getMouseButtonInfo()))) { + WheelLifecycleEventListener.processHammerPress(client, event.getAction()); + } + if (ModKeyMappings.SWITCH_PHASE.get().matchesMouse(new MouseButtonEvent(0, 0, event.getMouseButtonInfo()))) { WheelLifecycleEventListener.processMultiphasePress(client, event.getAction()); } - if (ModKeyMappings.SWITCH_TOOL_MODE.get().matchesMouse(event.getButton())) { + if (ModKeyMappings.SWITCH_TOOL_MODE.get().matchesMouse(new MouseButtonEvent(0, 0, event.getMouseButtonInfo()))) { WheelLifecycleEventListener.processResonatorPress(client, event.getAction()); WheelLifecycleEventListener.processMultitoolPress(client, event.getAction()); } } + private static void processHammerPress(Minecraft client, int action) { + if (client.level == null) return; + if (action == GLFW.GLFW_RELEASE) { + if (WheelLifecycleEventListener.hammerKeyWasDown) { + CONTROLLER.onHoldKeyReleased(); + } + WheelLifecycleEventListener.hammerKeyWasDown = false; + WheelLifecycleEventListener.hammerKeyTime = -1L; + WheelLifecycleEventListener.hammerWheelCache = null; + return; + } + if (Minecraft.getInstance().screen != null) return; + if (action == GLFW.GLFW_PRESS) { + if (!WheelLifecycleEventListener.hammerKeyWasDown) { + WheelLifecycleEventListener.hammerKeyTime = client.level.getGameTime(); + } + } + } + private static void processMultiphasePress(Minecraft client, int action) { if (client.level == null) return; if (action == GLFW.GLFW_RELEASE) { if (WheelLifecycleEventListener.multiphaseKeyWasDown) { CONTROLLER.onHoldKeyReleased(); } else { - PacketDistributor.sendToServer(new MultiphasePackets.SwitchPhase()); + ClientPacketDistributor.sendToServer(new MultiphasePackets.SwitchPhase()); } WheelLifecycleEventListener.multiphaseKeyWasDown = false; WheelLifecycleEventListener.multiphaseKeyTime = -1L; diff --git a/src/main/java/dev/dubhe/anvilcraft/client/event/package-info.java b/src/main/java/dev/dubhe/anvilcraft/client/event/package-info.java index b52c27c6f6..5297ce4e9a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/event/package-info.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/event/package-info.java @@ -1,7 +1,4 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@NullMarked package dev.dubhe.anvilcraft.client.event; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/CycleFilterModeButton.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/CycleFilterModeButton.java index 1b8202d4e9..febfadde88 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/CycleFilterModeButton.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/CycleFilterModeButton.java @@ -1,20 +1,20 @@ package dev.dubhe.anvilcraft.client.gui.component; -import com.mojang.blaze3d.systems.RenderSystem; +import dev.dubhe.anvilcraft.block.entity.ItemDetectorBlockEntity.Mode; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.List; import java.util.Locale; -import java.util.Optional; import java.util.function.Supplier; -import static dev.dubhe.anvilcraft.block.entity.ItemDetectorBlockEntity.Mode; - public class CycleFilterModeButton extends Button { private final Supplier filterMode; @@ -28,12 +28,31 @@ public CycleFilterModeButton(int x, int y, OnPress onPress, Supplier filte } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - super.render(guiGraphics, mouseX, mouseY, partialTick); + protected void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) { if (this.isHovered()) { - guiGraphics.renderTooltip( - Minecraft.getInstance().font, List.of(getMessage()), Optional.empty(), mouseX, mouseY); + graphics.tooltip( + Minecraft.getInstance().font, + List.of(ClientTooltipComponent.create(this.getMessage().getVisualOrderText())), + mouseX, + mouseY, + DefaultTooltipPositioner.INSTANCE, + null + ); } + Identifier location = this.filterMode.get().buttonTexture; + this.renderTexture( + graphics, + location, + this.getX(), + this.getY(), + 0, + 0, + 16, + this.width, + this.height, + 16, + 32 + ); } @Override @@ -42,15 +61,9 @@ public Component getMessage() { Component.translatable("screen.anvilcraft.button.filter_mode_" + this.filterMode.get().name().toLowerCase(Locale.ROOT))); } - @Override - public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - ResourceLocation location = this.filterMode.get().buttonTexture; - this.renderTexture(guiGraphics, location, this.getX(), this.getY(), 0, 0, 16, this.width, this.height, 16, 32); - } - public void renderTexture( - GuiGraphics guiGraphics, - ResourceLocation texture, + GuiGraphicsExtractor graphics, + Identifier texture, int x, int y, int puOffset, @@ -65,8 +78,7 @@ public void renderTexture( if (this.isHovered()) { i += textureDifference; } - RenderSystem.enableDepthTest(); - guiGraphics.blit(texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); + graphics.blit(RenderPipelines.GUI_TEXTURED, texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); } public Mode cycle() { diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/EnableFilterButton.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/EnableFilterButton.java index e0e640e961..69f376cc9d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/EnableFilterButton.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/EnableFilterButton.java @@ -1,17 +1,18 @@ package dev.dubhe.anvilcraft.client.gui.component; -import com.mojang.blaze3d.systems.RenderSystem; import dev.dubhe.anvilcraft.constant.SharedTextures; import lombok.Getter; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.List; -import java.util.Optional; import java.util.function.Supplier; @Getter @@ -21,22 +22,27 @@ public class EnableFilterButton extends Button { "screen.anvilcraft.button.record", Component.translatable("screen.anvilcraft.button.off")); public EnableFilterButton(int x, int y, OnPress onPress, Supplier filterEnabled) { - super(x, y, 16, 16, defaultMessage, onPress, (var) -> defaultMessage); + super(x, y, 16, 16, defaultMessage, onPress, var -> defaultMessage); this.filterEnabled = filterEnabled; } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - super.render(guiGraphics, mouseX, mouseY, partialTick); + protected void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) { if (this.isHovered()) { - guiGraphics.renderTooltip( - Minecraft.getInstance().font, List.of(getMessage()), Optional.empty(), mouseX, mouseY); + graphics.tooltip( + Minecraft.getInstance().font, + List.of(ClientTooltipComponent.create(getMessage().getVisualOrderText())), + mouseX, + mouseY, + DefaultTooltipPositioner.INSTANCE, + null + ); } + Identifier location = this.filterEnabled.get() ? SharedTextures.BUTTON_YES : SharedTextures.BUTTON_NO; + this.renderTexture(graphics, location, this.getX(), this.getY(), 0, 0, 16, this.width, this.height, 16, 32); } - /** - * 刷新 - */ + /// 刷新 public void flush() { this.setMessage(Component.translatable( "screen.anvilcraft.button.record", @@ -44,15 +50,9 @@ public void flush() { "screen.anvilcraft.button." + (this.getFilterEnabled().get() ? "on" : "off")))); } - @Override - public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - ResourceLocation location = this.filterEnabled.get() ? SharedTextures.BUTTON_YES : SharedTextures.BUTTON_NO; - this.renderTexture(guiGraphics, location, this.getX(), this.getY(), 0, 0, 16, this.width, this.height, 16, 32); - } - public void renderTexture( - GuiGraphics guiGraphics, - ResourceLocation texture, + GuiGraphicsExtractor graphics, + Identifier texture, int x, int y, int puOffset, @@ -67,8 +67,7 @@ public void renderTexture( if (this.isHovered()) { i += textureDifference; } - RenderSystem.enableDepthTest(); - guiGraphics.blit(texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); + graphics.blit(RenderPipelines.GUI_TEXTURED, texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); } public boolean next() { diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/ItemCollectorButton.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/ItemCollectorButton.java index 3f112496d8..ce69a99c44 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/ItemCollectorButton.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/ItemCollectorButton.java @@ -1,32 +1,30 @@ package dev.dubhe.anvilcraft.client.gui.component; -import com.mojang.blaze3d.systems.RenderSystem; import dev.dubhe.anvilcraft.constant.SharedTextures; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; public class ItemCollectorButton extends Button { - private final ResourceLocation texture; + private final Identifier texture; - /** - * 物品收集器 screen 的加减按钮 - */ + /// 物品收集器 screen 的加减按钮 public ItemCollectorButton(int x, int y, String variant, OnPress onPress) { - super(x, y, 10, 10, Component.literal(""), onPress, (var) -> Component.literal(variant)); - texture = SharedTextures.textureGui("machine/item_collector/button_%s".formatted(variant)); + super(x, y, 10, 10, Component.literal(""), onPress, var -> Component.literal(variant)); + this.texture = SharedTextures.textureGui("machine/item_collector/button_%s".formatted(variant)); } @Override - public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - this.renderTexture(guiGraphics, texture, this.getX(), this.getY(), 0, 0, 10, this.width, this.height, 10, 20); + protected void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) { + this.renderTexture(graphics, this.texture, this.getX(), this.getY(), 0, 0, 10, this.width, this.height, 10, 20); } public void renderTexture( - GuiGraphics guiGraphics, - ResourceLocation texture, + GuiGraphicsExtractor graphics, + Identifier texture, int x, int y, int puOffset, @@ -41,7 +39,6 @@ public void renderTexture( if (this.isHovered()) { i += textureDifference; } - RenderSystem.enableDepthTest(); - guiGraphics.blit(texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); + graphics.blit(RenderPipelines.GUI_TEXTURED, texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/OutputDirectionButton.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/OutputDirectionButton.java index 4190c952eb..5e6b22a24a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/OutputDirectionButton.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/OutputDirectionButton.java @@ -1,18 +1,17 @@ package dev.dubhe.anvilcraft.client.gui.component; -import com.mojang.blaze3d.systems.RenderSystem; import dev.dubhe.anvilcraft.constant.SharedTextures; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import java.util.Optional; public class OutputDirectionButton extends Button { private Direction direction; @@ -21,16 +20,14 @@ public class OutputDirectionButton extends Button { "screen.anvilcraft.button.direction", Component.translatable("screen.anvilcraft.button.direction.up")); public OutputDirectionButton(int x, int y, OnPress onPress, Direction direction) { - super(x, y, 16, 16, DEFAULT_MESSAGE, onPress, (var) -> DEFAULT_MESSAGE); + super(x, y, 16, 16, DEFAULT_MESSAGE, onPress, _ -> DEFAULT_MESSAGE); this.direction = direction; } - /** - * 跳过某个方向 - * - * @param direction 方向 - * @return 方向按钮 - */ + /// 跳过某个方向 + /// + /// @param direction 方向 + /// @return 方向按钮 @SuppressWarnings("UnusedReturnValue") public OutputDirectionButton skip(Direction direction) { this.skip.add(direction); @@ -38,33 +35,15 @@ public OutputDirectionButton skip(Direction direction) { } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - super.render(guiGraphics, mouseX, mouseY, partialTick); + protected void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) { if (this.isHovered()) { - List components = new ArrayList<>() { - { - this.add(getMessage()); - } - }; - guiGraphics.renderTooltip(Minecraft.getInstance().font, components, Optional.empty(), mouseX, mouseY); + graphics.setTooltipForNextFrame( + Collections.singletonList(this.getMessage().getVisualOrderText()), + mouseX, + mouseY + ); } - } - - /** - * 设置方向 - * - * @param direction 方向 - */ - public void setDirection(Direction direction) { - this.direction = direction; - this.setMessage(Component.translatable( - "screen.anvilcraft.button.direction", - Component.translatable("screen.anvilcraft.button.direction." + this.direction.getName()))); - } - - @Override - public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - ResourceLocation location = switch (direction) { + Identifier location = switch (this.direction) { case UP -> SharedTextures.BUTTON_U; case EAST -> SharedTextures.BUTTON_E; case WEST -> SharedTextures.BUTTON_W; @@ -72,12 +51,22 @@ public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float case NORTH -> SharedTextures.BUTTON_N; default -> SharedTextures.BUTTON_D; }; - this.renderTexture(guiGraphics, location, this.getX(), this.getY(), 0, 0, 16, this.width, this.height, 16, 32); + this.renderTexture(graphics, location, this.getX(), this.getY(), 0, 0, 16, this.width, this.height, 16, 32); + } + + /// 设置方向 + /// + /// @param direction 方向 + public void setDirection(Direction direction) { + this.direction = direction; + this.setMessage(Component.translatable( + "screen.anvilcraft.button.direction", + Component.translatable("screen.anvilcraft.button.direction." + this.direction.getName()))); } public void renderTexture( - GuiGraphics guiGraphics, - ResourceLocation texture, + GuiGraphicsExtractor graphics, + Identifier texture, int x, int y, int puOffset, @@ -92,20 +81,17 @@ public void renderTexture( if (this.isHovered()) { i += textureDifference; } - RenderSystem.enableDepthTest(); - guiGraphics.blit(texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); + graphics.blit(RenderPipelines.GUI_TEXTURED, texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); } public Direction next() { return this.next(this.direction); } - /** - * 下一个方向 - * - * @param direction 方向 - * @return 方向 - */ + /// 下一个方向 + /// + /// @param direction 方向 + /// @return 方向 public Direction next(Direction direction) { Direction direction1 = switch (direction) { case UP -> Direction.DOWN; @@ -115,6 +101,6 @@ public Direction next(Direction direction) { case NORTH -> Direction.UP; default -> Direction.EAST; }; - return this.skip.contains(direction1) ? next(direction1) : direction1; + return this.skip.contains(direction1) ? this.next(direction1) : direction1; } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SilencerButton.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SilencerButton.java index e5f2cb8ef6..38b4545d88 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SilencerButton.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SilencerButton.java @@ -1,17 +1,18 @@ package dev.dubhe.anvilcraft.client.gui.component; -import com.mojang.blaze3d.systems.RenderSystem; import dev.dubhe.anvilcraft.client.gui.screen.ActiveSilencerScreen; import dev.dubhe.anvilcraft.constant.SharedTextures; import lombok.Getter; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.ComponentUtils; import net.minecraft.network.chat.Style; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.util.Mth; import java.util.ArrayList; @@ -19,7 +20,7 @@ import java.util.regex.Pattern; public class SilencerButton extends Button { - private final ResourceLocation texture; + private final Identifier texture; @Getter private final int index; @@ -27,9 +28,7 @@ public class SilencerButton extends Button { private final ActiveSilencerScreen parent; private final int variant; - /** - * 主动静音器 screen 的按钮 - */ + /// 主动静音器 screen 的按钮 public SilencerButton( int x, int y, @@ -46,7 +45,7 @@ public SilencerButton( 10, Component.literal(""), onPress, - (var) -> parent.getSoundTextAt(index, variant).copy() + _ -> parent.getSoundTextAt(index, variant).copy() ); this.height = 15; this.width = 112; @@ -57,11 +56,11 @@ public SilencerButton( } @Override - public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + protected void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) { String searchText = this.parent.getFilterText(); - ResourceLocation soundId = this.parent.getSoundIdAt(this.index, this.variant); + Identifier soundId = this.parent.getSoundIdAt(this.index, this.variant); if (soundId == null) return; - this.renderTexture(guiGraphics, this.texture, this.getX(), this.getY(), 0, 0, 15, this.width, this.height, 112, 30); + this.renderTexture(graphics, this.texture, this.getX(), this.getY(), 0, 0, 15, this.width, this.height, 112, 30); Component message; if (searchText.startsWith("#") || searchText.startsWith("~")) { message = this.parent.getSoundTextAt(this.index, this.variant); @@ -73,13 +72,22 @@ public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float ChatFormatting.YELLOW); } this.setMessage(message); - this.renderString(guiGraphics, Minecraft.getInstance().font, 16777215 | Mth.ceil(this.alpha * 255.0F) << 24); + int color = 16777215 | Mth.ceil(this.alpha * 255.0F) << 24; + Font font = Minecraft.getInstance().font; + graphics.centeredText(font, message, this.getX() + this.width / 2, this.getY() + 3, color); if (this.isHovered()) { Component soundIdText = highlighted( - soundId.toString(), searchText.replaceFirst("#", ""), ChatFormatting.GRAY, ChatFormatting.YELLOW); - guiGraphics.renderTooltip( - Minecraft.getInstance().font, - List.of(message.getVisualOrderText(), soundIdText.getVisualOrderText()), + soundId.toString(), + searchText.replaceFirst("#", ""), + ChatFormatting.GRAY, + ChatFormatting.YELLOW + ); + graphics.setTooltipForNextFrame( + this.parent.getFont(), + List.of( + message.getVisualOrderText(), + soundIdText.getVisualOrderText() + ), mouseX, mouseY ); @@ -90,6 +98,7 @@ private static Component highlighted( String original, String hightlighted, ChatFormatting originalFormatting, + @SuppressWarnings("SameParameterValue") ChatFormatting highlightFormatting ) { try { @@ -108,8 +117,8 @@ private static Component highlighted( } public void renderTexture( - GuiGraphics guiGraphics, - ResourceLocation texture, + GuiGraphicsExtractor graphics, + Identifier texture, int x, int y, int puOffset, @@ -124,7 +133,6 @@ public void renderTexture( if (this.isHovered()) { i += textureDifference; } - RenderSystem.enableDepthTest(); - guiGraphics.blit(texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); + graphics.blit(RenderPipelines.GUI_TEXTURED, texture, x, y, puOffset, i, width, height, textureWidth, textureHeight); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/Slider.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/Slider.java deleted file mode 100644 index 4dc89fa95c..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/Slider.java +++ /dev/null @@ -1,208 +0,0 @@ -package dev.dubhe.anvilcraft.client.gui.component; - -import dev.dubhe.anvilcraft.constant.SharedTextures; -import dev.dubhe.anvilcraft.util.Callback; -import lombok.Getter; -import lombok.Setter; -import net.minecraft.Util; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.components.AbstractWidget; -import net.minecraft.client.gui.narration.NarrationElementOutput; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; - -import java.util.function.Function; - -public class Slider extends AbstractWidget { - public static final ResourceLocation SLIDER = SharedTextures.textureGui("misc/slider_like/slider"); - - @Setter - @Getter - private int min; - - @Setter - @Getter - private int max; - - private double proportion; - private final int posX; - private final int posY; - private final int length; - private final Function valueFunction; - private final Function argFunction; - public final Callback callback; - protected final int tooltipMsDelay = 1; - private long hoverOrFocusedStartTime; - private boolean wasHoveredOrFocused; - private boolean scroll = false; - public static boolean scrolling = false; - - /** - * 构建一个Slider - * - * @param x X - * @param y Y - * @param min 最小值 - * @param max 最大值 - * @param length 长度 - * @param callback 更新回调 - */ - public Slider( - int x, - int y, - int min, - int max, - int length, - Function valueFunction, - Function argFunction, - Callback callback - ) { - super(x, y, length, 8, Component.literal("Slider")); - this.posX = x; - this.posY = y; - this.min = min; - this.max = max; - this.length = length; - this.valueFunction = valueFunction; - this.argFunction = argFunction; - this.callback = callback; - } - - public Slider( - int x, - int y, - int min, - int max, - int length, - Callback callback - ) { - this( - x, - y, - min, - max, - length, - i -> Slider.defaultValueFunction(i, min, max), - i -> Slider.defaultArgFunction(i, min, max), - callback - ); - } - - public double getProportion() { - return Math.clamp(this.proportion, 0.0, 1.0); - } - - public void setProportion(double proportion) { - this.proportion = Math.clamp(proportion, 0.0, 1.0); - } - - public static double defaultValueFunction(double proportion, int min, int max) { - return (max - min) * proportion + min; - } - - public static double defaultArgFunction(int value, int min, int max) { - if (value == 0) return Math.clamp(((double) value - min) / (max - min), 0.0, 1.0); - double v = (Math.log(Math.abs(value)) / Math.log(2)) + 1; - return Math.clamp(((value >= 0 ? v : -v) - min) / (max - min), 0.0, 1.0); - } - - public void setValue(int value) { - this.proportion = this.argFunction.apply(value); - } - - public int getValue() { - int v = (int) Math.round(this.valueFunction.apply(this.proportion)); - if (v == 0) return 0; - return v > 0 ? (int) Math.pow(2, Math.abs(v - 1)) : -(int) Math.pow(2, Math.abs(v + 1)); - } - - public int getAddValue(int value) { - if (Math.abs(value) < 4) return 1; - return (int) Math.pow(2, Math.floor(Math.log(Math.abs(value)) / Math.log(2)) - 2); - } - - /** - * 设置 Value 并更新 - */ - public void setValueWithUpdate(int value) { - this.setValue(value); - this.update(); - } - - private void update() { - if (this.callback != null) this.callback.onValueChange(this.getValue()); - } - - @SuppressWarnings("deprecation") - public void onClick(double mouseX, double mouseY) { - super.onClick(mouseX, mouseY); - if (this.isInSlider(mouseX, mouseY)) { - scrolling = true; - return; - } - scrolling = false; - } - - public void onDrag(double mouseX, double mouseY, double dragX, double dragY) { - super.onDrag(mouseX, mouseY, dragX, dragY); - if (scrolling || this.scroll) { - if (scrolling) { - this.scroll = true; - scrolling = false; - } - double offset = (mouseX - 8 - this.posX) / this.length; - this.setProportion(offset); - } - if (this.scroll) this.update(); - } - - public void onReleased() { - if (this.scroll) this.update(); - this.scroll = false; - scrolling = false; - } - - protected boolean isInSlider(double mouseX, double mouseY) { - int offsetX = posX + (int) (length * this.getProportion()); - return mouseX > offsetX && mouseX < offsetX + 16 && mouseY > posY && mouseY < posY + 8; - } - - @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - if (!this.visible) return; - this.isHovered = this.isInSlider(mouseX, mouseY); - this.renderWidget(guiGraphics, mouseX, mouseY, partialTick); - this.updateTooltip(); - } - - @Override - protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - double prop = this.getProportion(); - int offsetX = posX + (int) ((length) * prop); - guiGraphics.blit(SLIDER, offsetX, posY, 0, this.isHovered || this.scroll ? 8 : 0, 16, 8, 16, 16); - } - - @Override - protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) { - } - - private void updateTooltip() { - if (this.getTooltip() == null) return; - boolean bl = this.isHovered - || this.isFocused() - && Minecraft.getInstance().getLastInputType().isKeyboard(); - if (bl != this.wasHoveredOrFocused) { - if (bl) this.hoverOrFocusedStartTime = Util.getMillis(); - this.wasHoveredOrFocused = bl; - } - Screen screen; - if (bl - && Util.getMillis() - this.hoverOrFocusedStartTime > (long) this.tooltipMsDelay - && (screen = Minecraft.getInstance().screen) != null) { - screen.setTooltipForNextRenderPass(this.getTooltip(), DefaultTooltipPositioner.INSTANCE, this.isFocused()); - } - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SliderWidget.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SliderWidget.java new file mode 100644 index 0000000000..cfe1742208 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SliderWidget.java @@ -0,0 +1,177 @@ +package dev.dubhe.anvilcraft.client.gui.component; + +import dev.dubhe.anvilcraft.constant.SharedTextures; +import dev.dubhe.anvilcraft.util.Callback; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.Identifier; + +import java.util.function.Function; + +public class SliderWidget extends AbstractWidget { + public static final Identifier SLIDER = SharedTextures.textureGui("misc/slider_like/slider"); + + @Setter + @Getter + private int min; + + @Setter + @Getter + private int max; + + private double proportion; + private final int posX; + private final int posY; + private final int length; + private final Function valueFunction; + private final Function argFunction; + public final Callback callback; + private boolean scroll = false; + public static boolean scrolling = false; + + /// 构建一个Slider + /// + /// @param x X + /// @param y Y + /// @param min 最小值 + /// @param max 最大值 + /// @param length 长度 + /// @param callback 更新回调 + public SliderWidget( + int x, + int y, + int min, + int max, + int length, + Function valueFunction, + Function argFunction, + Callback callback + ) { + super(x, y, length, 8, Component.literal("Slider")); + this.posX = x; + this.posY = y; + this.min = min; + this.max = max; + this.length = length; + this.valueFunction = valueFunction; + this.argFunction = argFunction; + this.callback = callback; + } + + public SliderWidget( + int x, + int y, + int min, + int max, + int length, + Callback callback + ) { + this( + x, + y, + min, + max, + length, + i -> SliderWidget.defaultValueFunction(i, min, max), + i -> SliderWidget.defaultArgFunction(i, min, max), + callback + ); + } + + public double getProportion() { + return Math.clamp(this.proportion, 0.0, 1.0); + } + + public void setProportion(double proportion) { + this.proportion = Math.clamp(proportion, 0.0, 1.0); + } + + public static double defaultValueFunction(double proportion, int min, int max) { + return (max - min) * proportion + min; + } + + public static double defaultArgFunction(int value, int min, int max) { + if (value == 0) return Math.clamp(((double) value - min) / (max - min), 0.0, 1.0); + double v = (Math.log(Math.abs(value)) / Math.log(2)) + 1; + return Math.clamp(((value >= 0 ? v : -v) - min) / (max - min), 0.0, 1.0); + } + + public void setValue(int value) { + this.proportion = this.argFunction.apply(value); + } + + public int getValue() { + int v = (int) Math.round(this.valueFunction.apply(this.proportion)); + if (v == 0) return 0; + return v > 0 ? (int) Math.pow(2, Math.abs(v - 1)) : -(int) Math.pow(2, Math.abs(v + 1)); + } + + public int getAddValue(int value) { + if (Math.abs(value) < 4) return 1; + return (int) Math.pow(2, Math.floor(Math.log(Math.abs(value)) / Math.log(2)) - 2); + } + + /// 设置 Value 并更新 + public void setValueWithUpdate(int value) { + this.setValue(value); + this.update(); + } + + private void update() { + this.callback.onValueChange(this.getValue()); + } + + @Override + public void onClick(MouseButtonEvent event, boolean doubleClick) { + super.onClick(event, doubleClick); + if (this.isInSlider(event.x(), event.y())) { + scrolling = true; + return; + } + scrolling = false; + } + + @Override + public void onDrag(MouseButtonEvent event, double dx, double dy) { + super.onDrag(event, dx, dy); + if (scrolling || this.scroll) { + if (scrolling) { + this.scroll = true; + scrolling = false; + } + double offset = (event.x() - 8 - this.posX) / this.length; + this.setProportion(offset); + } + if (this.scroll) this.update(); + } + + public void onReleased() { + if (this.scroll) this.update(); + this.scroll = false; + scrolling = false; + } + + protected boolean isInSlider(double mouseX, double mouseY) { + int offsetX = this.posX + (int) (this.length * this.getProportion()); + return mouseX > offsetX && mouseX < offsetX + 16 && mouseY > this.posY && mouseY < this.posY + 8; + } + + @Override + protected void extractWidgetRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) { + if (!this.visible) return; + this.isHovered = this.isInSlider(mouseX, mouseY); + double prop = this.getProportion(); + int offsetX = this.posX + (int) ((this.length) * prop); + graphics.blit(RenderPipelines.GUI_TEXTURED, SLIDER, offsetX, this.posY, 0, this.isHovered || this.scroll ? 8 : 0, 16, 8, 16, 16); + } + + @Override + protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) { + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SwitchableButton.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SwitchableButton.java index dd4a388ab1..9df550738a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SwitchableButton.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/component/SwitchableButton.java @@ -1,129 +1,134 @@ package dev.dubhe.anvilcraft.client.gui.component; -import com.google.common.collect.Collections2; import dev.anvilcraft.lib.v2.util.MathUtil; import lombok.Getter; import lombok.Setter; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.input.MouseButtonInfo; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.ArrayList; -import java.util.Collection; +import java.util.Collections; import java.util.List; -import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.Consumer; public class SwitchableButton extends Button { - public static final Button.OnPress DO_NOTHING = btn -> { - }; - - private final List