diff --git a/.github/ISSUE_TEMPLATE/01-sounds-bug.yml b/.github/ISSUE_TEMPLATE/01-sounds-bug.yml index 88035b8..dea3a8f 100644 --- a/.github/ISSUE_TEMPLATE/01-sounds-bug.yml +++ b/.github/ISSUE_TEMPLATE/01-sounds-bug.yml @@ -52,7 +52,6 @@ body: label: Minecraft version description: Which Minecraft version were you using when the problem happened? options: - - "26.1.2" - "26.3" validations: required: true diff --git a/.github/ISSUE_TEMPLATE/02-sounds-feature.yml b/.github/ISSUE_TEMPLATE/02-sounds-feature.yml index 8bb4d64..e29e25a 100644 --- a/.github/ISSUE_TEMPLATE/02-sounds-feature.yml +++ b/.github/ISSUE_TEMPLATE/02-sounds-feature.yml @@ -53,7 +53,6 @@ body: label: Minecraft version description: Select a version only if your request is specific to it. options: - - "26.1.2" - "26.3" validations: required: false diff --git a/.github/ISSUE_TEMPLATE/03-mru-bug.yml b/.github/ISSUE_TEMPLATE/03-mru-bug.yml index 83ae44f..f5e45e1 100644 --- a/.github/ISSUE_TEMPLATE/03-mru-bug.yml +++ b/.github/ISSUE_TEMPLATE/03-mru-bug.yml @@ -52,7 +52,7 @@ body: label: Minecraft version description: Which Minecraft version were you using when the problem happened? options: - - "26.1.2" + - "26.2" - "26.3" validations: required: true diff --git a/.github/ISSUE_TEMPLATE/04-mru-feature.yml b/.github/ISSUE_TEMPLATE/04-mru-feature.yml index 79cd105..1042c9f 100644 --- a/.github/ISSUE_TEMPLATE/04-mru-feature.yml +++ b/.github/ISSUE_TEMPLATE/04-mru-feature.yml @@ -53,7 +53,7 @@ body: label: Minecraft version description: Select a version only if your request is specific to it. options: - - "26.1.2" + - "26.2" - "26.3" validations: required: false diff --git a/.github/ISSUE_TEMPLATE/05-shields-bug.yml b/.github/ISSUE_TEMPLATE/05-shields-bug.yml index 5407caf..aa148a4 100644 --- a/.github/ISSUE_TEMPLATE/05-shields-bug.yml +++ b/.github/ISSUE_TEMPLATE/05-shields-bug.yml @@ -53,6 +53,7 @@ body: description: Which Minecraft version were you using when the problem happened? options: - "26.1.2" + - "26.2" - "26.3" validations: required: true diff --git a/.github/ISSUE_TEMPLATE/05-shields-feature.yml b/.github/ISSUE_TEMPLATE/05-shields-feature.yml index 3a8a19b..e4dac59 100644 --- a/.github/ISSUE_TEMPLATE/05-shields-feature.yml +++ b/.github/ISSUE_TEMPLATE/05-shields-feature.yml @@ -54,6 +54,7 @@ body: description: Select a version only if your request is specific to it. options: - "26.1.2" + - "26.2" - "26.3" validations: required: false diff --git a/.github/ISSUE_TEMPLATE/06-fog-bug.yml b/.github/ISSUE_TEMPLATE/06-fog-bug.yml index 297bc82..0189e53 100644 --- a/.github/ISSUE_TEMPLATE/06-fog-bug.yml +++ b/.github/ISSUE_TEMPLATE/06-fog-bug.yml @@ -52,7 +52,7 @@ body: label: Minecraft version description: Which Minecraft version were you using when the problem happened? options: - - "26.1.2" + - "26.2" - "26.3" validations: required: true diff --git a/.github/ISSUE_TEMPLATE/07-fog-feature.yml b/.github/ISSUE_TEMPLATE/07-fog-feature.yml index 79c7512..7be0b36 100644 --- a/.github/ISSUE_TEMPLATE/07-fog-feature.yml +++ b/.github/ISSUE_TEMPLATE/07-fog-feature.yml @@ -53,7 +53,7 @@ body: label: Minecraft version description: Select a version only if your request is specific to it. options: - - "26.1.2" + - "26.2" - "26.3" validations: required: false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8f58db..3d0fb85 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,3 +29,24 @@ jobs: path: build/artifacts/ if-no-files-found: error retention-days: 30 + + datagen: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-java@v6 + with: + distribution: temurin + java-version: '25' + - uses: gradle/actions/setup-gradle@v6 + with: + cache-read-only: ${{ github.event_name == 'pull_request' }} + - name: Run data generation + run: bash ./gradlew --no-daemon --build-cache runDatagenAll + - name: Check generated resources are up to date + run: | + if [ -n "$(git status --porcelain -- '*/src/generated')" ]; then + git status --short -- '*/src/generated' + echo '::error::Generated resources are out of date. Run ./gradlew runDatagenAll and commit the result.' + exit 1 + fi diff --git a/build-logic/src/main/kotlin/imb11.fabric-mod.gradle.kts b/build-logic/src/main/kotlin/imb11.fabric-mod.gradle.kts index 7243909..969870a 100644 --- a/build-logic/src/main/kotlin/imb11.fabric-mod.gradle.kts +++ b/build-logic/src/main/kotlin/imb11.fabric-mod.gradle.kts @@ -33,6 +33,21 @@ loom { } } +if (metadata.optional("mod.datagen").toBoolean()) { + // Generated data is shared by both loaders of a Minecraft version, see imb11.mod + fabricApi { + configureDataGeneration { + outputDirectory = requireNotNull(project.parent).file("src/generated/$targetMinecraftVersion") + addToResources = false + client = true + } + } + + loom.runs.named("datagen") { + configName = "${metadata.required("mod.name")} - $targetMinecraftVersion - Fabric - Data Generation" + } +} + tasks.named("processResources") { exclude("META-INF/neoforge.mods.toml", "META-INF/mods.toml", "META-INF/accesstransformer.cfg", "interfaces.json") } diff --git a/build-logic/src/main/kotlin/imb11.mod.gradle.kts b/build-logic/src/main/kotlin/imb11.mod.gradle.kts index 11964a4..1dc7b51 100644 --- a/build-logic/src/main/kotlin/imb11.mod.gradle.kts +++ b/build-logic/src/main/kotlin/imb11.mod.gradle.kts @@ -98,17 +98,20 @@ val resourceProperties = mapOf( tasks.named("processResources") { dependsOn("stonecutterGenerate") inputs.properties(resourceProperties) + exclude(".cache/**") filesMatching(listOf("fabric.mod.json", "META-INF/neoforge.mods.toml")) { expand(resourceProperties) } } -tasks.named("sourcesJar") { +tasks.named("sourcesJar") { dependsOn("stonecutterGenerate") + exclude(".cache/**") } +// Fabric datagen output for this Minecraft version, shared by both loaders sourceSets.named("main") { - resources.srcDir("src/main/generated") + resources.srcDir(moduleDirectory.dir("src/generated/$minecraftVersion")) } jsonlang { diff --git a/build-logic/src/main/kotlin/imb11.root.gradle.kts b/build-logic/src/main/kotlin/imb11.root.gradle.kts index 9408f45..831d5f4 100644 --- a/build-logic/src/main/kotlin/imb11.root.gradle.kts +++ b/build-logic/src/main/kotlin/imb11.root.gradle.kts @@ -49,6 +49,21 @@ targetProjects.forEach { node -> } } +// Data generation only runs on Fabric; NeoForge reads the same per-version output +val datagenTasks = modProjects + .filter { readModMetadata(it.layout.projectDirectory).optional("mod.datagen").toBoolean() } + .map { mod -> + mod.tasks.register("runDatagen") { + group = "fabric" + dependsOn(mod.childProjects.values.filter { it.name.endsWith("-fabric") }.map { "${it.path}:runDatagen" }) + } + } + +tasks.register("runDatagenAll") { + group = "fabric" + dependsOn(datagenTasks) +} + tasks.register("publishAllMods") { group = "publishing" dependsOn(buildAll) diff --git a/fog/build.fabric.gradle.kts b/fog/build.fabric.gradle.kts index 6551949..89c03b6 100644 --- a/fog/build.fabric.gradle.kts +++ b/fog/build.fabric.gradle.kts @@ -24,7 +24,7 @@ dependencies { implementation(mcLibrary("yacl-fabric")) implementation(mcLibrary("modmenu")) compileOnly(mcLibrary("iris-fabric")) - if (minecraftVersion == "26.1.2" || minecraftVersion == "26.2") { + if (minecraftVersion == "26.2") { compileOnly(mcLibrary("polytone-fabric")) add(polytoneLibraries.name, mcLibrary("polytone-fabric")) compileOnly(files(provider { @@ -40,16 +40,3 @@ loom { } } } - -fabricApi { - configureDataGeneration { - outputDirectory = project.parent!!.file("src/main/generated") - addToResources = false - client = true - } -} - -loom.runs.named("datagen") { - configName = "Fog - ${project.minecraftVersion} - Fabric - Data Generation" - runDir(rootProject.file("run/fog/${project.minecraftVersion}/fabric/datagen").relativeTo(project.projectDir).invariantSeparatorsPath) -} diff --git a/fog/build.neoforge.gradle.kts b/fog/build.neoforge.gradle.kts index 596410c..566e159 100644 --- a/fog/build.neoforge.gradle.kts +++ b/fog/build.neoforge.gradle.kts @@ -23,7 +23,7 @@ dependencies { implementation(project(mruProject.path)) implementation(mcLibrary("yacl-neoforge")) compileOnly(mcLibrary("iris-neoforge")) - if (minecraftVersion == "26.1.2" || minecraftVersion == "26.2") { + if (minecraftVersion == "26.2") { compileOnly(mcLibrary("polytone-neoforge")) add(polytoneLibraries.name, mcLibrary("polytone-neoforge")) compileOnly(files(provider { diff --git a/fog/mod.properties b/fog/mod.properties index d46a7f4..6cc39f0 100644 --- a/fog/mod.properties +++ b/fog/mod.properties @@ -6,6 +6,7 @@ mod.version=1.12.0 mod.group=dev.imb11.fog mod.required=mru mod.environment=client +mod.datagen=true publish.modrinth=WuGVWUF2 publish.curseforge=815438 publish.dependencies.fabric=fabric-api,yacl,mru diff --git a/fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_aquatic_icy.json b/fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_aquatic_icy.json similarity index 100% rename from fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_aquatic_icy.json rename to fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_aquatic_icy.json diff --git a/fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_badlands.json b/fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_badlands.json similarity index 100% rename from fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_badlands.json rename to fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_badlands.json diff --git a/fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_beach.json b/fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_beach.json similarity index 100% rename from fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_beach.json rename to fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_beach.json diff --git a/fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_desert.json b/fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_desert.json similarity index 100% rename from fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_desert.json rename to fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_desert.json diff --git a/fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_end.json b/fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_end.json similarity index 100% rename from fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_end.json rename to fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_end.json diff --git a/fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_jungle.json b/fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_jungle.json similarity index 100% rename from fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_jungle.json rename to fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_jungle.json diff --git a/fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_snowy.json b/fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_snowy.json similarity index 100% rename from fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_snowy.json rename to fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_snowy.json diff --git a/fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_swamp.json b/fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_swamp.json similarity index 100% rename from fog/src/main/generated/assets/c/fog_definitions/tag/biome/is_swamp.json rename to fog/src/generated/26.2/assets/c/fog_definitions/tag/biome/is_swamp.json diff --git a/fog/src/main/generated/assets/minecraft/fog_definitions/biome/basalt_deltas.json b/fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/basalt_deltas.json similarity index 100% rename from fog/src/main/generated/assets/minecraft/fog_definitions/biome/basalt_deltas.json rename to fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/basalt_deltas.json diff --git a/fog/src/main/generated/assets/minecraft/fog_definitions/biome/crimson_forest.json b/fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/crimson_forest.json similarity index 100% rename from fog/src/main/generated/assets/minecraft/fog_definitions/biome/crimson_forest.json rename to fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/crimson_forest.json diff --git a/fog/src/main/generated/assets/minecraft/fog_definitions/biome/nether_wastes.json b/fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/nether_wastes.json similarity index 100% rename from fog/src/main/generated/assets/minecraft/fog_definitions/biome/nether_wastes.json rename to fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/nether_wastes.json diff --git a/fog/src/main/generated/assets/minecraft/fog_definitions/biome/soul_sand_valley.json b/fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/soul_sand_valley.json similarity index 100% rename from fog/src/main/generated/assets/minecraft/fog_definitions/biome/soul_sand_valley.json rename to fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/soul_sand_valley.json diff --git a/fog/src/main/generated/assets/minecraft/fog_definitions/biome/sparse_jungle.json b/fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/sparse_jungle.json similarity index 100% rename from fog/src/main/generated/assets/minecraft/fog_definitions/biome/sparse_jungle.json rename to fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/sparse_jungle.json diff --git a/fog/src/main/generated/assets/minecraft/fog_definitions/biome/warped_forest.json b/fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/warped_forest.json similarity index 100% rename from fog/src/main/generated/assets/minecraft/fog_definitions/biome/warped_forest.json rename to fog/src/generated/26.2/assets/minecraft/fog_definitions/biome/warped_forest.json diff --git a/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_aquatic_icy.json b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_aquatic_icy.json new file mode 100644 index 0000000..f3dca22 --- /dev/null +++ b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_aquatic_icy.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#BDDBE1", + "night": "#526C72" + }, + "end_multiplier": 1.0, + "start_multiplier": 1.0 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_badlands.json b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_badlands.json new file mode 100644 index 0000000..cbfba6e --- /dev/null +++ b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_badlands.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#BCA199", + "night": "#140c07" + }, + "end_multiplier": 1.0, + "start_multiplier": 1.0 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_beach.json b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_beach.json new file mode 100644 index 0000000..ce93ca3 --- /dev/null +++ b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_beach.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#CBCABD", + "night": "#11110e" + }, + "end_multiplier": 1.0, + "start_multiplier": 1.0 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_desert.json b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_desert.json new file mode 100644 index 0000000..0369a4b --- /dev/null +++ b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_desert.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#D1C8AB", + "night": "#827D6A" + }, + "end_multiplier": 1.0, + "start_multiplier": 1.0 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_end.json b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_end.json new file mode 100644 index 0000000..022e03e --- /dev/null +++ b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_end.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#291d26", + "night": "#291d26" + }, + "end_multiplier": 0.5, + "start_multiplier": 0.5 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_jungle.json b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_jungle.json new file mode 100644 index 0000000..23867aa --- /dev/null +++ b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_jungle.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#5B9071", + "night": "#171E23" + }, + "end_multiplier": 0.35, + "start_multiplier": 0.15 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_snowy.json b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_snowy.json new file mode 100644 index 0000000..8ff7761 --- /dev/null +++ b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_snowy.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#DFEBF4", + "night": "#687782" + }, + "end_multiplier": 1.0, + "start_multiplier": 1.0 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_swamp.json b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_swamp.json new file mode 100644 index 0000000..008b8c8 --- /dev/null +++ b/fog/src/generated/26.3/assets/c/fog_definitions/tag/biome/is_swamp.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#BDC8C2", + "night": "#5A6459" + }, + "end_multiplier": 1.0, + "start_multiplier": 1.0 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/basalt_deltas.json b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/basalt_deltas.json new file mode 100644 index 0000000..21d4bf8 --- /dev/null +++ b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/basalt_deltas.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#36292B", + "night": "#36292B" + }, + "end_multiplier": 0.01, + "start_multiplier": 0.8 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/crimson_forest.json b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/crimson_forest.json new file mode 100644 index 0000000..eae3810 --- /dev/null +++ b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/crimson_forest.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#700f18", + "night": "#700f18" + }, + "end_multiplier": 0.01, + "start_multiplier": 0.8 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/nether_wastes.json b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/nether_wastes.json new file mode 100644 index 0000000..d242f17 --- /dev/null +++ b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/nether_wastes.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#330808", + "night": "#330808" + }, + "end_multiplier": 0.01, + "start_multiplier": 1.0 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/soul_sand_valley.json b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/soul_sand_valley.json new file mode 100644 index 0000000..8dc9dce --- /dev/null +++ b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/soul_sand_valley.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#005157", + "night": "#005157" + }, + "end_multiplier": 0.01, + "start_multiplier": 1.0 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/sparse_jungle.json b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/sparse_jungle.json new file mode 100644 index 0000000..720de2f --- /dev/null +++ b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/sparse_jungle.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#7EBAA2", + "night": "#1A2122" + }, + "end_multiplier": 1.0, + "start_multiplier": 0.75 +} \ No newline at end of file diff --git a/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/warped_forest.json b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/warped_forest.json new file mode 100644 index 0000000..dec357c --- /dev/null +++ b/fog/src/generated/26.3/assets/minecraft/fog_definitions/biome/warped_forest.json @@ -0,0 +1,8 @@ +{ + "colors": { + "day": "#0f4c4c", + "night": "#0f4c4c" + }, + "end_multiplier": 0.01, + "start_multiplier": 0.8 +} \ No newline at end of file diff --git a/fog/src/main/generated/.cache/479d532b8ab79818d0335395e7c3c8b4e15a0c44 b/fog/src/main/generated/.cache/479d532b8ab79818d0335395e7c3c8b4e15a0c44 deleted file mode 100644 index 16ce8b1..0000000 --- a/fog/src/main/generated/.cache/479d532b8ab79818d0335395e7c3c8b4e15a0c44 +++ /dev/null @@ -1,15 +0,0 @@ -// 1.21.1 2024-10-19T17:06:20.6411437 Fog/Custom Fog Definition:fog -ed7a26be0cdc64db4e2714898fec43817761c00b assets\minecraft\fog_definitions\biome\crimson_forest.json -01930365bb419a96ae82b2e45b99af5d94b8df5c assets\c\fog_definitions\tag\biome\is_beach.json -61268868389f80ddd2fc175dab578a5a6d3775dd assets\c\fog_definitions\tag\biome\is_aquatic_icy.json -efa18c3764d4d5d57a4ca2f3dabd69d188148a19 assets\minecraft\fog_definitions\biome\soul_sand_valley.json -66dbd1cc3283d1f6a3f9f8c789e67baabc193059 assets\c\fog_definitions\tag\biome\is_snowy.json -081f23017dccbbbbf86d0fed5183724dd3b2fae7 assets\minecraft\fog_definitions\biome\basalt_deltas.json -4057cc9fe572b9cf63a07711d50ab18b01d92d72 assets\c\fog_definitions\tag\biome\is_badlands.json -d18991fdc8b5c612a3ae1b45144585860b1bf064 assets\minecraft\fog_definitions\biome\nether_wastes.json -6ab53206f31ea26518ebf301389f655c2846e67e assets\c\fog_definitions\tag\biome\is_desert.json -024071636ecdb7f6288625a11a90b2d75d65c917 assets\minecraft\fog_definitions\biome\sparse_jungle.json -4a095b16c1146432aee0cd907ceb87d33c031738 assets\c\fog_definitions\tag\biome\is_end.json -5e48288dad15e0c0bfd3db7ada891bc50cdbc5a2 assets\c\fog_definitions\tag\biome\is_jungle.json -450e4e8e01a0af4128b371ad342d4a0d7bd9e560 assets\c\fog_definitions\tag\biome\is_swamp.json -e21ca1bacda76f8e67c3a79262c54bb45b0f70ce assets\minecraft\fog_definitions\biome\warped_forest.json diff --git a/fog/src/main/java/dev/imb11/fog/api/FogColors.java b/fog/src/main/java/dev/imb11/fog/api/FogColors.java index 7d0a756..f174e4f 100644 --- a/fog/src/main/java/dev/imb11/fog/api/FogColors.java +++ b/fog/src/main/java/dev/imb11/fog/api/FogColors.java @@ -21,7 +21,7 @@ public class FogColors { return new FogColors("#b9d2fd", "#000000"); } - var camera = Minecraft.getInstance().gameRenderer.getMainCamera(); + var camera = Minecraft.getInstance().gameRenderer.mainCamera(); var color = world.environmentAttributes().getValue(EnvironmentAttributes.FOG_COLOR, camera.position()); Vec3 dayColor = new Color(color).asVec3d(); return new FogColors(Color.from(dayColor).asHex(), Color.from(dayColor.scale(0.2D)).asHex()); diff --git a/fog/src/main/java/dev/imb11/fog/client/FogManager.java b/fog/src/main/java/dev/imb11/fog/client/FogManager.java index 075f582..cac980a 100644 --- a/fog/src/main/java/dev/imb11/fog/client/FogManager.java +++ b/fog/src/main/java/dev/imb11/fog/client/FogManager.java @@ -186,7 +186,7 @@ public void onEndTick(@NotNull ClientLevel clientWorld) { } @NotNull Color newMoonColor = Color.from(FogConfig.getInstance().newMoonColor); - float blendFactor = switch (world.environmentAttributes().getValue(EnvironmentAttributes.MOON_PHASE, Minecraft.getInstance().gameRenderer.getMainCamera().position()).index()) { + float blendFactor = switch (world.environmentAttributes().getValue(EnvironmentAttributes.MOON_PHASE, Minecraft.getInstance().gameRenderer.mainCamera().position()).index()) { case 0 -> 0.0f; case 1, 7 -> 0.25f; case 2, 6 -> 0.5f; @@ -262,7 +262,7 @@ private float[] blendFogColorWithSunriseSunsetColors(@NotNull Minecraft client, return new float[]{red, green, blue}; } - var probe = client.gameRenderer.getMainCamera().attributeProbe(); + var probe = client.gameRenderer.mainCamera().attributeProbe(); var sunsetColor = probe.getValue(EnvironmentAttributes.SUNRISE_SUNSET_COLOR, tickDelta); //? if <26.3 { float alpha = ARGB.alphaFloat(sunsetColor); diff --git a/fog/src/main/java/dev/imb11/fog/client/compat/polytone/PolytoneCompat.java b/fog/src/main/java/dev/imb11/fog/client/compat/polytone/PolytoneCompat.java index b2dc096..a2b3e67 100644 --- a/fog/src/main/java/dev/imb11/fog/client/compat/polytone/PolytoneCompat.java +++ b/fog/src/main/java/dev/imb11/fog/client/compat/polytone/PolytoneCompat.java @@ -31,7 +31,7 @@ public static boolean shouldUsePolytone() { return null; } - var camera = client.gameRenderer.getMainCamera(); + var camera = client.gameRenderer.mainCamera(); var position = camera.position(); var biome = level.getBiomeManager().getNoiseBiomeAtPosition(position.x, position.y, position.z).value(); var effects = Polytone.BIOME_MODIFIERS.modifiersByBiome().get(biome); diff --git a/fog/src/main/java/dev/imb11/fog/client/util/FogKeybinds.java b/fog/src/main/java/dev/imb11/fog/client/util/FogKeybinds.java index 08fdd75..a4cf532 100644 --- a/fog/src/main/java/dev/imb11/fog/client/util/FogKeybinds.java +++ b/fog/src/main/java/dev/imb11/fog/client/util/FogKeybinds.java @@ -37,7 +37,7 @@ public static void tickKeyMapping() { FogConfig.save(); - Minecraft.getInstance().gui.getChat().addClientSystemMessage(Component.literal("§b§7[§rFog§b§7]§r ").append( + Minecraft.getInstance().gui.hud.getChat().addClientSystemMessage(Component.literal("§b§7[§rFog§b§7]§r ").append( Component.translatable("fog.command.toggle." + (config.enableMod ? "enabled" : "disabled")).withStyle(ChatFormatting.GOLD))); } } diff --git a/fog/src/main/java/dev/imb11/fog/client/util/math/EnvironmentCalculations.java b/fog/src/main/java/dev/imb11/fog/client/util/math/EnvironmentCalculations.java index 4e26566..cc34ac9 100644 --- a/fog/src/main/java/dev/imb11/fog/client/util/math/EnvironmentCalculations.java +++ b/fog/src/main/java/dev/imb11/fog/client/util/math/EnvironmentCalculations.java @@ -53,7 +53,7 @@ public static FogManager.FogSettings fixElytraColor(FogManager.FogSettings input float percentageCutoff = Mth.clamp(distancePastCutoff / 25f, 0, 1); Vec3 skyColour; - skyColour = new Color(client.gameRenderer.getMainCamera().attributeProbe().getValue(EnvironmentAttributes.SKY_COLOR, tickDelta)).asVec3d(); + skyColour = new Color(client.gameRenderer.mainCamera().attributeProbe().getValue(EnvironmentAttributes.SKY_COLOR, tickDelta)).asVec3d(); // Lerp between the fog color and the sky color fogColorR = (float) Mth.lerp(percentageCutoff, fogColorR, skyColour.x); diff --git a/fog/src/main/java/dev/imb11/fog/client/util/world/ClientWorldUtil.java b/fog/src/main/java/dev/imb11/fog/client/util/world/ClientWorldUtil.java index f33fb27..e40e4ae 100644 --- a/fog/src/main/java/dev/imb11/fog/client/util/world/ClientWorldUtil.java +++ b/fog/src/main/java/dev/imb11/fog/client/util/world/ClientWorldUtil.java @@ -10,6 +10,6 @@ public class ClientWorldUtil { public static boolean isFogDenseAtPosition(@NotNull ClientLevel level, @NotNull BlockPos position) { return level.environmentAttributes().getValue(EnvironmentAttributes.FOG_END_DISTANCE, Vec3.atCenterOf(position)) <= 96.0F - || Minecraft.getInstance().gui.getBossOverlay().shouldCreateWorldFog(); + || Minecraft.getInstance().gui.hud.getBossOverlay().shouldCreateWorldFog(); } } diff --git a/glass/build.fabric.gradle.kts b/glass/build.fabric.gradle.kts index a2e046c..26c25ab 100644 --- a/glass/build.fabric.gradle.kts +++ b/glass/build.fabric.gradle.kts @@ -12,16 +12,3 @@ dependencies { "localRuntime"(mcLibrary("sodium-fabric")) } } - -fabricApi { - configureDataGeneration { - outputDirectory = project.parent!!.file("src/main/generated") - addToResources = false - client = true - } -} - -loom.runs.named("datagen") { - configName = "${modMetadata.required("mod.name")} - ${project.minecraftVersion} - Fabric - Data Generation" - runDir(rootProject.file("run/${modMetadata.id}/${project.minecraftVersion}/fabric/datagen").relativeTo(project.projectDir).invariantSeparatorsPath) -} diff --git a/glass/build.neoforge.gradle.kts b/glass/build.neoforge.gradle.kts index 138ce32..46f1396 100644 --- a/glass/build.neoforge.gradle.kts +++ b/glass/build.neoforge.gradle.kts @@ -6,7 +6,6 @@ neoForge { accessTransformers.from(project.parent!!.file("src/main/resources/META-INF/accesstransformer.cfg")) } -// The NeoForge Sodium jar is a jar-in-jar wrapper; compile against the nested mod jar. val sodiumDistribution = configurations.create("sodiumDistribution") { isCanBeConsumed = false isTransitive = false diff --git a/glass/mod.properties b/glass/mod.properties index c129305..daf55ad 100644 --- a/glass/mod.properties +++ b/glass/mod.properties @@ -4,6 +4,7 @@ mod.description=General Laymans' Aesthetic Spying Screen, remastered for modern mod.license=All-Rights-Reserved mod.version=1.0.0-beta mod.group=dev.imb11.glass +mod.datagen=true publish.modrinth=5TABPEIf publish.curseforge=1090535 publish.dependencies.fabric=fabric-api diff --git a/glass/src/main/generated/assets/glass/blockstates/powerable_glass.json b/glass/src/generated/26.2/assets/glass/blockstates/powerable_glass.json similarity index 100% rename from glass/src/main/generated/assets/glass/blockstates/powerable_glass.json rename to glass/src/generated/26.2/assets/glass/blockstates/powerable_glass.json diff --git a/glass/src/main/generated/assets/glass/blockstates/projector.json b/glass/src/generated/26.2/assets/glass/blockstates/projector.json similarity index 100% rename from glass/src/main/generated/assets/glass/blockstates/projector.json rename to glass/src/generated/26.2/assets/glass/blockstates/projector.json diff --git a/glass/src/main/generated/assets/glass/blockstates/redstone_infused_sand.json b/glass/src/generated/26.2/assets/glass/blockstates/redstone_infused_sand.json similarity index 100% rename from glass/src/main/generated/assets/glass/blockstates/redstone_infused_sand.json rename to glass/src/generated/26.2/assets/glass/blockstates/redstone_infused_sand.json diff --git a/glass/src/main/generated/assets/glass/blockstates/terminal.json b/glass/src/generated/26.2/assets/glass/blockstates/terminal.json similarity index 100% rename from glass/src/main/generated/assets/glass/blockstates/terminal.json rename to glass/src/generated/26.2/assets/glass/blockstates/terminal.json diff --git a/glass/src/main/generated/assets/glass/items/powerable_glass.json b/glass/src/generated/26.2/assets/glass/items/powerable_glass.json similarity index 53% rename from glass/src/main/generated/assets/glass/items/powerable_glass.json rename to glass/src/generated/26.2/assets/glass/items/powerable_glass.json index 3abc822..9ebbe81 100644 --- a/glass/src/main/generated/assets/glass/items/powerable_glass.json +++ b/glass/src/generated/26.2/assets/glass/items/powerable_glass.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "glass:item/powerable_glass" + "model": "glass:block/powerable_glass" } -} +} \ No newline at end of file diff --git a/glass/src/main/generated/assets/glass/items/projector.json b/glass/src/generated/26.2/assets/glass/items/projector.json similarity index 97% rename from glass/src/main/generated/assets/glass/items/projector.json rename to glass/src/generated/26.2/assets/glass/items/projector.json index 7f8cc8b..a2fcb88 100644 --- a/glass/src/main/generated/assets/glass/items/projector.json +++ b/glass/src/generated/26.2/assets/glass/items/projector.json @@ -3,4 +3,4 @@ "type": "minecraft:model", "model": "glass:item/projector" } -} +} \ No newline at end of file diff --git a/glass/src/main/generated/assets/glass/items/redstone_infused_sand.json b/glass/src/generated/26.2/assets/glass/items/redstone_infused_sand.json similarity index 50% rename from glass/src/main/generated/assets/glass/items/redstone_infused_sand.json rename to glass/src/generated/26.2/assets/glass/items/redstone_infused_sand.json index 9620da4..a65c67e 100644 --- a/glass/src/main/generated/assets/glass/items/redstone_infused_sand.json +++ b/glass/src/generated/26.2/assets/glass/items/redstone_infused_sand.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "glass:item/redstone_infused_sand" + "model": "glass:block/redstone_infused_sand" } -} +} \ No newline at end of file diff --git a/glass/src/main/generated/assets/glass/items/terminal.json b/glass/src/generated/26.2/assets/glass/items/terminal.json similarity index 57% rename from glass/src/main/generated/assets/glass/items/terminal.json rename to glass/src/generated/26.2/assets/glass/items/terminal.json index 4b322e7..3ea3ace 100644 --- a/glass/src/main/generated/assets/glass/items/terminal.json +++ b/glass/src/generated/26.2/assets/glass/items/terminal.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "glass:item/terminal" + "model": "glass:block/terminal" } -} +} \ No newline at end of file diff --git a/glass/src/main/generated/assets/glass/lang/en_us.json b/glass/src/generated/26.2/assets/glass/lang/en_us.json similarity index 100% rename from glass/src/main/generated/assets/glass/lang/en_us.json rename to glass/src/generated/26.2/assets/glass/lang/en_us.json diff --git a/glass/src/main/generated/assets/glass/models/block/powerable_glass.json b/glass/src/generated/26.2/assets/glass/models/block/powerable_glass.json similarity index 100% rename from glass/src/main/generated/assets/glass/models/block/powerable_glass.json rename to glass/src/generated/26.2/assets/glass/models/block/powerable_glass.json diff --git a/glass/src/main/generated/assets/glass/models/block/projector.json b/glass/src/generated/26.2/assets/glass/models/block/projector.json similarity index 100% rename from glass/src/main/generated/assets/glass/models/block/projector.json rename to glass/src/generated/26.2/assets/glass/models/block/projector.json diff --git a/glass/src/main/generated/assets/glass/models/block/redstone_infused_sand.json b/glass/src/generated/26.2/assets/glass/models/block/redstone_infused_sand.json similarity index 100% rename from glass/src/main/generated/assets/glass/models/block/redstone_infused_sand.json rename to glass/src/generated/26.2/assets/glass/models/block/redstone_infused_sand.json diff --git a/glass/src/main/generated/assets/glass/models/block/terminal.json b/glass/src/generated/26.2/assets/glass/models/block/terminal.json similarity index 100% rename from glass/src/main/generated/assets/glass/models/block/terminal.json rename to glass/src/generated/26.2/assets/glass/models/block/terminal.json diff --git a/glass/src/main/generated/assets/glass/models/block/terminal_projecting.json b/glass/src/generated/26.2/assets/glass/models/block/terminal_projecting.json similarity index 100% rename from glass/src/main/generated/assets/glass/models/block/terminal_projecting.json rename to glass/src/generated/26.2/assets/glass/models/block/terminal_projecting.json diff --git a/glass/src/main/generated/data/c/tags/block/glass_blocks.json b/glass/src/generated/26.2/data/c/tags/block/glass_blocks.json similarity index 100% rename from glass/src/main/generated/data/c/tags/block/glass_blocks.json rename to glass/src/generated/26.2/data/c/tags/block/glass_blocks.json diff --git a/glass/src/main/generated/data/glass/advancement/recipes/building_blocks/powerable_glass.json b/glass/src/generated/26.2/data/glass/advancement/recipes/building_blocks/powerable_glass.json similarity index 100% rename from glass/src/main/generated/data/glass/advancement/recipes/building_blocks/powerable_glass.json rename to glass/src/generated/26.2/data/glass/advancement/recipes/building_blocks/powerable_glass.json diff --git a/glass/src/main/generated/data/glass/advancement/recipes/building_blocks/redstone_infused_sand.json b/glass/src/generated/26.2/data/glass/advancement/recipes/building_blocks/redstone_infused_sand.json similarity index 100% rename from glass/src/main/generated/data/glass/advancement/recipes/building_blocks/redstone_infused_sand.json rename to glass/src/generated/26.2/data/glass/advancement/recipes/building_blocks/redstone_infused_sand.json diff --git a/glass/src/main/generated/data/glass/advancement/recipes/redstone/projector.json b/glass/src/generated/26.2/data/glass/advancement/recipes/redstone/projector.json similarity index 100% rename from glass/src/main/generated/data/glass/advancement/recipes/redstone/projector.json rename to glass/src/generated/26.2/data/glass/advancement/recipes/redstone/projector.json diff --git a/glass/src/main/generated/data/glass/advancement/recipes/redstone/terminal.json b/glass/src/generated/26.2/data/glass/advancement/recipes/redstone/terminal.json similarity index 100% rename from glass/src/main/generated/data/glass/advancement/recipes/redstone/terminal.json rename to glass/src/generated/26.2/data/glass/advancement/recipes/redstone/terminal.json diff --git a/glass/src/main/generated/data/glass/loot_table/blocks/powerable_glass.json b/glass/src/generated/26.2/data/glass/loot_table/blocks/powerable_glass.json similarity index 95% rename from glass/src/main/generated/data/glass/loot_table/blocks/powerable_glass.json rename to glass/src/generated/26.2/data/glass/loot_table/blocks/powerable_glass.json index 006a5e7..ab6f04b 100644 --- a/glass/src/main/generated/data/glass/loot_table/blocks/powerable_glass.json +++ b/glass/src/generated/26.2/data/glass/loot_table/blocks/powerable_glass.json @@ -2,7 +2,6 @@ "type": "minecraft:block", "pools": [ { - "bonus_rolls": 0.0, "conditions": [ { "condition": "minecraft:match_tool", diff --git a/glass/src/main/generated/data/glass/loot_table/blocks/projector.json b/glass/src/generated/26.2/data/glass/loot_table/blocks/projector.json similarity index 92% rename from glass/src/main/generated/data/glass/loot_table/blocks/projector.json rename to glass/src/generated/26.2/data/glass/loot_table/blocks/projector.json index e308223..5d4b9ce 100644 --- a/glass/src/main/generated/data/glass/loot_table/blocks/projector.json +++ b/glass/src/generated/26.2/data/glass/loot_table/blocks/projector.json @@ -2,7 +2,6 @@ "type": "minecraft:block", "pools": [ { - "bonus_rolls": 0.0, "conditions": [ { "condition": "minecraft:survives_explosion" diff --git a/glass/src/main/generated/data/glass/loot_table/blocks/redstone_infused_sand.json b/glass/src/generated/26.2/data/glass/loot_table/blocks/redstone_infused_sand.json similarity index 92% rename from glass/src/main/generated/data/glass/loot_table/blocks/redstone_infused_sand.json rename to glass/src/generated/26.2/data/glass/loot_table/blocks/redstone_infused_sand.json index 7042ab6..4864040 100644 --- a/glass/src/main/generated/data/glass/loot_table/blocks/redstone_infused_sand.json +++ b/glass/src/generated/26.2/data/glass/loot_table/blocks/redstone_infused_sand.json @@ -2,7 +2,6 @@ "type": "minecraft:block", "pools": [ { - "bonus_rolls": 0.0, "conditions": [ { "condition": "minecraft:survives_explosion" diff --git a/glass/src/main/generated/data/glass/loot_table/blocks/terminal.json b/glass/src/generated/26.2/data/glass/loot_table/blocks/terminal.json similarity index 92% rename from glass/src/main/generated/data/glass/loot_table/blocks/terminal.json rename to glass/src/generated/26.2/data/glass/loot_table/blocks/terminal.json index 4454216..7c201eb 100644 --- a/glass/src/main/generated/data/glass/loot_table/blocks/terminal.json +++ b/glass/src/generated/26.2/data/glass/loot_table/blocks/terminal.json @@ -2,7 +2,6 @@ "type": "minecraft:block", "pools": [ { - "bonus_rolls": 0.0, "conditions": [ { "condition": "minecraft:survives_explosion" diff --git a/glass/src/main/generated/data/glass/recipe/powerable_glass.json b/glass/src/generated/26.2/data/glass/recipe/powerable_glass.json similarity index 88% rename from glass/src/main/generated/data/glass/recipe/powerable_glass.json rename to glass/src/generated/26.2/data/glass/recipe/powerable_glass.json index 0dc6a3d..40da8b6 100644 --- a/glass/src/main/generated/data/glass/recipe/powerable_glass.json +++ b/glass/src/generated/26.2/data/glass/recipe/powerable_glass.json @@ -1,10 +1,9 @@ { "type": "minecraft:smelting", "category": "blocks", - "cookingtime": 200, "experience": 0.1, "ingredient": "glass:redstone_infused_sand", "result": { "id": "glass:powerable_glass" } -} +} \ No newline at end of file diff --git a/glass/src/main/generated/data/glass/recipe/projector.json b/glass/src/generated/26.2/data/glass/recipe/projector.json similarity index 94% rename from glass/src/main/generated/data/glass/recipe/projector.json rename to glass/src/generated/26.2/data/glass/recipe/projector.json index 8fb9f3c..259711b 100644 --- a/glass/src/main/generated/data/glass/recipe/projector.json +++ b/glass/src/generated/26.2/data/glass/recipe/projector.json @@ -13,7 +13,6 @@ "OOO" ], "result": { - "count": 1, "id": "glass:projector" } -} +} \ No newline at end of file diff --git a/glass/src/main/generated/data/glass/recipe/redstone_infused_sand.json b/glass/src/generated/26.2/data/glass/recipe/redstone_infused_sand.json similarity index 91% rename from glass/src/main/generated/data/glass/recipe/redstone_infused_sand.json rename to glass/src/generated/26.2/data/glass/recipe/redstone_infused_sand.json index d977713..62e8e52 100644 --- a/glass/src/main/generated/data/glass/recipe/redstone_infused_sand.json +++ b/glass/src/generated/26.2/data/glass/recipe/redstone_infused_sand.json @@ -6,7 +6,6 @@ "minecraft:sand" ], "result": { - "count": 1, "id": "glass:redstone_infused_sand" } -} +} \ No newline at end of file diff --git a/glass/src/main/generated/data/glass/recipe/terminal.json b/glass/src/generated/26.2/data/glass/recipe/terminal.json similarity index 93% rename from glass/src/main/generated/data/glass/recipe/terminal.json rename to glass/src/generated/26.2/data/glass/recipe/terminal.json index dbbdfad..871addd 100644 --- a/glass/src/main/generated/data/glass/recipe/terminal.json +++ b/glass/src/generated/26.2/data/glass/recipe/terminal.json @@ -12,7 +12,6 @@ "OOO" ], "result": { - "count": 1, "id": "glass:terminal" } -} +} \ No newline at end of file diff --git a/glass/src/main/generated/data/minecraft/tags/block/mineable/pickaxe.json b/glass/src/generated/26.2/data/minecraft/tags/block/mineable/pickaxe.json similarity index 100% rename from glass/src/main/generated/data/minecraft/tags/block/mineable/pickaxe.json rename to glass/src/generated/26.2/data/minecraft/tags/block/mineable/pickaxe.json diff --git a/glass/src/main/generated/data/minecraft/tags/block/mineable/shovel.json b/glass/src/generated/26.2/data/minecraft/tags/block/mineable/shovel.json similarity index 100% rename from glass/src/main/generated/data/minecraft/tags/block/mineable/shovel.json rename to glass/src/generated/26.2/data/minecraft/tags/block/mineable/shovel.json diff --git a/glass/src/main/generated/data/minecraft/tags/block/needs_diamond_tool.json b/glass/src/generated/26.2/data/minecraft/tags/block/needs_diamond_tool.json similarity index 100% rename from glass/src/main/generated/data/minecraft/tags/block/needs_diamond_tool.json rename to glass/src/generated/26.2/data/minecraft/tags/block/needs_diamond_tool.json diff --git a/glass/src/main/generated/assets/glass/models/item/powerable_glass.json b/glass/src/main/generated/assets/glass/models/item/powerable_glass.json deleted file mode 100644 index 1269038..0000000 --- a/glass/src/main/generated/assets/glass/models/item/powerable_glass.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "glass:block/powerable_glass" -} \ No newline at end of file diff --git a/glass/src/main/generated/assets/glass/models/item/redstone_infused_sand.json b/glass/src/main/generated/assets/glass/models/item/redstone_infused_sand.json deleted file mode 100644 index 1a62bb9..0000000 --- a/glass/src/main/generated/assets/glass/models/item/redstone_infused_sand.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "glass:block/redstone_infused_sand" -} \ No newline at end of file diff --git a/glass/src/main/generated/assets/glass/models/item/terminal.json b/glass/src/main/generated/assets/glass/models/item/terminal.json deleted file mode 100644 index 9c66a6d..0000000 --- a/glass/src/main/generated/assets/glass/models/item/terminal.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "glass:block/terminal" -} \ No newline at end of file diff --git a/glass/src/main/java/dev/imb11/client/GlassClient.java b/glass/src/main/java/dev/imb11/client/GlassClient.java index 5dedd89..848e755 100644 --- a/glass/src/main/java/dev/imb11/client/GlassClient.java +++ b/glass/src/main/java/dev/imb11/client/GlassClient.java @@ -76,7 +76,7 @@ private static void trackLevel(Minecraft minecraft) { if (currentLevel == null) { ProjectionRenderManager.reset(); } else { - ProjectorBlockEntityRenderer.onMainRendererRebuilt(minecraft.levelRenderer); + ProjectorBlockEntityRenderer.onMainRendererRebuilt(); ProjectionRenderManager.onClientLevelChanged(currentLevel); } RemoteSceneClientManager.onMainLevelChanged(currentLevel); diff --git a/glass/src/main/java/dev/imb11/client/gui/ChannelScreen.java b/glass/src/main/java/dev/imb11/client/gui/ChannelScreen.java index 6f26133..f596a53 100644 --- a/glass/src/main/java/dev/imb11/client/gui/ChannelScreen.java +++ b/glass/src/main/java/dev/imb11/client/gui/ChannelScreen.java @@ -282,8 +282,6 @@ public void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouse boolean ready = preview != null && selected.source() != null && selected.source().equals(preview.source()) && ProjectionRenderManager.isReady(preview); if (ready) { - // Terrain writes texture * tint alpha into the feed, so tinted blocks (leaves, grass) aren't opaque there. - // Blit without blending so the panel doesn't show through; v runs 1 -> 0 to flip the render target. graphics.blit(RenderPipelines.GUI_OPAQUE_TEXTURED_BACKGROUND, preview.textureLocation(), detailX + 1, previewTop + 1, 0.0F, 1.0F, detailWidth - 2, previewBottom - previewTop - 2, 1, -1, 1, 1); } else { diff --git a/glass/src/main/java/dev/imb11/client/remote/ProjectionChunkStorage.java b/glass/src/main/java/dev/imb11/client/remote/ProjectionChunkStorage.java index 2f803f2..3aec894 100644 --- a/glass/src/main/java/dev/imb11/client/remote/ProjectionChunkStorage.java +++ b/glass/src/main/java/dev/imb11/client/remote/ProjectionChunkStorage.java @@ -9,6 +9,7 @@ import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.status.ChunkStatus; import java.util.Map; @@ -65,6 +66,7 @@ public void release(ClientLevel level, ChunkPos pos) { if (entry.chunk != null) { level.unload(entry.chunk); clearLight(level, pos); + markUnloaded(entry.chunk); } } @@ -82,6 +84,7 @@ public LevelChunk replace(ClientLevel level, int x, int z, FriendlyByteBuf data, } entry.vanilla |= vanilla; entry.chunk.replaceWithPacketData(data, heightmaps, blockEntities); + markLoaded(entry.chunk); level.onChunkLoaded(new ChunkPos(x, z)); return entry.chunk; } @@ -96,6 +99,7 @@ public boolean dropVanilla(ClientLevel level, ChunkPos pos) { chunks.remove(pos.pack()); if (entry.chunk != null) { level.unload(entry.chunk); + markUnloaded(entry.chunk); } } return true; @@ -108,12 +112,41 @@ public boolean protectFromUnload(LevelChunk chunk) { } if (entry.references > 0) { entry.vanilla = false; + markLoaded(chunk); return true; } chunks.remove(chunk.getPos().pack()); return false; } + private void markLoaded(LevelChunk chunk) { + long chunkNode = chunk.getPos().pack(); + cache.removedLoadedChunks().remove(chunkNode); + cache.addedLoadedChunks().add(chunkNode); + LevelChunkSection[] sections = chunk.getSections(); + for (int index = 0; index < sections.length; index++) { + long sectionNode = SectionPos.asLong(chunk.getPos().x(), chunk.getSectionYFromSectionIndex(index), chunk.getPos().z()); + if (sections[index].hasOnlyAir()) { + cache.removedEmptySections().remove(sectionNode); + cache.addedEmptySections().add(sectionNode); + } else { + cache.addedEmptySections().remove(sectionNode); + cache.removedEmptySections().add(sectionNode); + } + } + } + + private void markUnloaded(LevelChunk chunk) { + long chunkNode = chunk.getPos().pack(); + cache.addedLoadedChunks().remove(chunkNode); + cache.removedLoadedChunks().add(chunkNode); + for (int index = 0; index < chunk.getSections().length; index++) { + long sectionNode = SectionPos.asLong(chunk.getPos().x(), chunk.getSectionYFromSectionIndex(index), chunk.getPos().z()); + cache.addedEmptySections().remove(sectionNode); + cache.removedEmptySections().add(sectionNode); + } + } + private static void clearLight(ClientLevel level, ChunkPos pos) { var light = level.getLightEngine(); light.setLightEnabled(pos, false); diff --git a/glass/src/main/java/dev/imb11/client/remote/RemoteClientScene.java b/glass/src/main/java/dev/imb11/client/remote/RemoteClientScene.java index 333752c..c4966e1 100644 --- a/glass/src/main/java/dev/imb11/client/remote/RemoteClientScene.java +++ b/glass/src/main/java/dev/imb11/client/remote/RemoteClientScene.java @@ -3,9 +3,7 @@ import com.mojang.logging.LogUtils; import dev.imb11.client.renderer.projection.ProjectionRenderContext; import dev.imb11.debug.RemoteSceneDiagnostics; -import dev.imb11.client.renderer.projection.RenderResources; import dev.imb11.client.renderer.projection.ProjectionSections; -import dev.imb11.mixins.LevelRendererBufferAccessor; import dev.imb11.sync.ProjectionSource; import dev.imb11.sync.remote.RemoteSubscriptionId; import dev.imb11.sync.remote.RemoteWorldState; @@ -19,7 +17,6 @@ import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.renderer.LevelRenderer; import dev.imb11.client.renderer.projection.ProjectionLightmap; -import net.minecraft.client.renderer.RenderBuffers; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.SectionPos; @@ -65,8 +62,6 @@ final class RemoteClientScene implements AutoCloseable { private final boolean flat; private final long seedHash; private final ClientLevel.ClientLevelData levelData; - private final RenderBuffers sinkRenderBuffers; - private final RemoteSceneSinkRenderer sinkRenderer; private final ClientLevel level; private final ClientChunkCache chunkCache; private final LevelLightEngine lightEngine; @@ -90,8 +85,6 @@ private RemoteClientScene( boolean flat, long seedHash, ClientLevel.ClientLevelData levelData, - RenderBuffers sinkRenderBuffers, - RemoteSceneSinkRenderer sinkRenderer, ClientLevel level, ProjectionLightmap lightTexture, RemoteWorldState state @@ -104,8 +97,6 @@ private RemoteClientScene( this.flat = flat; this.seedHash = seedHash; this.levelData = levelData; - this.sinkRenderBuffers = sinkRenderBuffers; - this.sinkRenderer = sinkRenderer; this.level = level; this.mainWorld = level == minecraft.level; this.chunkCache = level.getChunkSource(); @@ -122,14 +113,12 @@ static RemoteClientScene create(Minecraft minecraft, S2CRemoteSubscriptionPacket .getOrThrow(packet.dimensionType()); if (minecraft.level != null && minecraft.level.dimension().equals(packet.subscription().source().dimension())) { return new RemoteClientScene(packet.subscription().source(), minecraft, packet.dimensionType(), - packet.hardcore(), packet.debug(), packet.flat(), packet.seedHash(), null, null, null, + packet.hardcore(), packet.debug(), packet.flat(), packet.seedHash(), null, minecraft.level, new ProjectionLightmap(), packet.state()); } - RenderBuffers renderBuffers = new RenderBuffers(1); - RemoteSceneSinkRenderer renderer = null; + RemoteSceneSinkExtractor extractor = new RemoteSceneSinkExtractor(minecraft); ProjectionLightmap lightTexture = null; try { - renderer = new RemoteSceneSinkRenderer(minecraft, renderBuffers); ClientLevel.ClientLevelData levelData = new ClientLevel.ClientLevelData(packet.difficulty(), packet.hardcore(), packet.flat()); ClientLevel level = new RemoteSceneLevel( connection, @@ -137,7 +126,7 @@ static RemoteClientScene create(Minecraft minecraft, S2CRemoteSubscriptionPacket packet.subscription().source().dimension(), dimensionType, STORAGE_VIEW_DISTANCE, - renderer, + extractor, packet.debug(), packet.seedHash(), packet.seaLevel() @@ -155,13 +144,11 @@ static RemoteClientScene create(Minecraft minecraft, S2CRemoteSubscriptionPacket packet.flat(), packet.seedHash(), levelData, - renderBuffers, - renderer, level, lightTexture, packet.state() ); - renderer.bind(scene); + extractor.bind(scene); scene.applyWorldState(packet.state()); ProjectionRenderContext.registerRemoteLightUpdates(scene.chunkCache, scene::onLightUpdate); return scene; @@ -170,11 +157,6 @@ static RemoteClientScene create(Minecraft minecraft, S2CRemoteSubscriptionPacket ProjectionLightmap failedProjectionLightmap = lightTexture; cleanupCreation("light texture", () -> closeProjectionLightmap(minecraft, failedProjectionLightmap)); } - if (renderer != null) { - RemoteSceneSinkRenderer failedRenderer = renderer; - cleanupCreation("sink renderer", failedRenderer::close); - } - cleanupCreation("render buffers", () -> closeRenderBuffers(renderBuffers)); throw exception; } } @@ -434,7 +416,7 @@ void releaseSubscription(RemoteSubscriptionId subscription) { } } - void dirtyBlock(BlockPos pos, BlockState oldState, BlockState newState) { + void dirtyBlock(BlockPos pos) { if (!applying && !closed) { dirtyBlocks(pos.getX(), pos.getY(), pos.getZ(), pos.getX(), pos.getY(), pos.getZ()); } @@ -471,12 +453,6 @@ void dirtySection(int sectionX, int sectionY, int sectionZ) { } } - void chunkLoaded(ChunkPos pos) { - if (!applying && !closed) { - notifyOwnersChunk(pos); - } - } - private void applyLightLayers(ChunkPos pos, ClientboundLightUpdatePacketData light) { int sectionCount = lightEngine.getLightSectionCount(); BitSet skyMask = light.getSkyYMask(); @@ -551,7 +527,6 @@ private void notifyOwnersChunk(ChunkPos pos) { } private void notifyRendererChunk(LevelRenderer renderer, ChunkPos pos) { - renderer.onChunkReadyToRender(pos); queueDirtyChunk(renderer, pos, true); } @@ -619,7 +594,7 @@ private Set ownerRenderers(ChunkPos pos) { } private static boolean rendererActive(LevelRenderer renderer) { - return ((LevelRendererBufferAccessor) renderer).glass$getViewArea() != null; + return renderer.viewArea() != null; } @Override @@ -651,8 +626,6 @@ public void close() { } cleanup("tint caches", level::clearTintCaches); cleanup("light texture", () -> closeProjectionLightmap(minecraft, lightTexture)); - cleanup("sink renderer", sinkRenderer::close); - cleanup("render buffers", () -> closeRenderBuffers(sinkRenderBuffers)); } private void resetOwnersChunk(ChunkPos pos) { @@ -680,9 +653,4 @@ private static void cleanupCreation(String resource, Runnable operation) { LOGGER.warn("Failed to close incomplete remote scene {}", resource, exception); } } - - private static void closeRenderBuffers(RenderBuffers renderBuffers) { - RenderResources.closeBufferBuilders(renderBuffers); - RenderResources.closeAvailablePoolBuffers(renderBuffers.sectionBufferPool()); - } } diff --git a/glass/src/main/java/dev/imb11/client/remote/RemoteSceneEntities.java b/glass/src/main/java/dev/imb11/client/remote/RemoteSceneEntities.java index 451d271..2d10eff 100644 --- a/glass/src/main/java/dev/imb11/client/remote/RemoteSceneEntities.java +++ b/glass/src/main/java/dev/imb11/client/remote/RemoteSceneEntities.java @@ -12,7 +12,7 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EntityTypes; import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.PositionMoveRotation; import net.minecraft.world.entity.Leashable; @@ -58,7 +58,7 @@ void apply(RemoteSubscriptionId subscription, List new LinkedHashSet<>()).add(subscription) && level.getEntity(id) == null) { Entity entity; - if (spawn.getType() == EntityType.PLAYER) { + if (spawn.getType() == EntityTypes.PLAYER) { PlayerInfo info = Minecraft.getInstance().getConnection().getPlayerInfo(spawn.getUUID()); entity = new RemotePlayer(level, info == null ? new GameProfile(spawn.getUUID(), "Player") : info.getProfile()); } else { diff --git a/glass/src/main/java/dev/imb11/client/remote/RemoteSceneLevel.java b/glass/src/main/java/dev/imb11/client/remote/RemoteSceneLevel.java index 0c9990f..fc3efb1 100644 --- a/glass/src/main/java/dev/imb11/client/remote/RemoteSceneLevel.java +++ b/glass/src/main/java/dev/imb11/client/remote/RemoteSceneLevel.java @@ -2,7 +2,7 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.extract.LevelExtractor; import net.minecraft.core.Holder; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.resources.ResourceKey; @@ -18,8 +18,8 @@ final class RemoteSceneLevel extends ClientLevel { RemoteSceneLevel(ClientPacketListener connection, ClientLevelData data, ResourceKey dimension, Holder type, int viewDistance, - LevelRenderer renderer, boolean debug, long seed, int seaLevel) { - super(connection, data, dimension, type, viewDistance, 0, renderer, debug, seed, seaLevel); + LevelExtractor extractor, boolean debug, long seed, int seaLevel) { + super(connection, data, dimension, type, viewDistance, 0, extractor, debug, seed, seaLevel); } void tickVisualBlockEntities() { diff --git a/glass/src/main/java/dev/imb11/client/remote/RemoteSceneSinkRenderer.java b/glass/src/main/java/dev/imb11/client/remote/RemoteSceneSinkExtractor.java similarity index 55% rename from glass/src/main/java/dev/imb11/client/remote/RemoteSceneSinkRenderer.java rename to glass/src/main/java/dev/imb11/client/remote/RemoteSceneSinkExtractor.java index 63b2aa5..ae70dff 100644 --- a/glass/src/main/java/dev/imb11/client/remote/RemoteSceneSinkRenderer.java +++ b/glass/src/main/java/dev/imb11/client/remote/RemoteSceneSinkExtractor.java @@ -1,23 +1,16 @@ package dev.imb11.client.remote; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.RenderBuffers; +import net.minecraft.client.renderer.extract.LevelExtractor; +import net.minecraft.client.renderer.state.level.LevelRenderState; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.block.state.BlockState; -final class RemoteSceneSinkRenderer extends LevelRenderer { +final class RemoteSceneSinkExtractor extends LevelExtractor { private RemoteClientScene scene; - RemoteSceneSinkRenderer(Minecraft minecraft, RenderBuffers renderBuffers) { - super( - minecraft, - minecraft.getEntityRenderDispatcher(), - minecraft.getBlockEntityRenderDispatcher(), - renderBuffers, minecraft.gameRenderer.getGameRenderState(), minecraft.gameRenderer.getFeatureRenderDispatcher() - ); + RemoteSceneSinkExtractor(Minecraft minecraft) { + super(minecraft, new LevelRenderState(), minecraft.levelRenderer); } void bind(RemoteClientScene scene) { @@ -25,9 +18,9 @@ void bind(RemoteClientScene scene) { } @Override - public void blockChanged(BlockGetter level, BlockPos pos, BlockState oldState, BlockState newState, int flags) { + public void blockChanged(BlockPos pos, int flags) { if (scene != null) { - scene.dirtyBlock(pos, oldState, newState); + scene.dirtyBlock(pos); } } @@ -41,7 +34,7 @@ public void setBlocksDirty(int minX, int minY, int minZ, int maxX, int maxY, int @Override public void setBlockDirty(BlockPos pos, BlockState oldState, BlockState newState) { if (scene != null) { - scene.dirtyBlock(pos, oldState, newState); + scene.dirtyBlock(pos); } } @@ -53,16 +46,23 @@ public void setSectionDirtyWithNeighbors(int sectionX, int sectionY, int section } @Override - public void setSectionDirty(int sectionX, int sectionY, int sectionZ) { + public void setSectionRangeDirty(int minSectionX, int minSectionY, int minSectionZ, + int maxSectionX, int maxSectionY, int maxSectionZ) { if (scene != null) { - scene.dirtySection(sectionX, sectionY, sectionZ); + for (int x = minSectionX; x <= maxSectionX; x++) { + for (int y = minSectionY; y <= maxSectionY; y++) { + for (int z = minSectionZ; z <= maxSectionZ; z++) { + scene.dirtySection(x, y, z); + } + } + } } } @Override - public void onChunkReadyToRender(ChunkPos pos) { + public void setSectionDirty(int sectionX, int sectionY, int sectionZ) { if (scene != null) { - scene.chunkLoaded(pos); + scene.dirtySection(sectionX, sectionY, sectionZ); } } } diff --git a/glass/src/main/java/dev/imb11/client/renderer/block/ProjectorBlockEntityRenderer.java b/glass/src/main/java/dev/imb11/client/renderer/block/ProjectorBlockEntityRenderer.java index f27e3d2..3fbc144 100644 --- a/glass/src/main/java/dev/imb11/client/renderer/block/ProjectorBlockEntityRenderer.java +++ b/glass/src/main/java/dev/imb11/client/renderer/block/ProjectorBlockEntityRenderer.java @@ -4,7 +4,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.PrimitiveTopology; +import net.minecraft.client.renderer.BindGroupLayouts; import com.mojang.math.Axis; import dev.imb11.blocks.ProjectorBlock; import dev.imb11.debug.ProjectorActivationTrace; @@ -18,8 +19,6 @@ import dev.imb11.sync.remote.RemoteSceneServerManager; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -40,12 +39,12 @@ public final class ProjectorBlockEntityRenderer { .withLocation(Identifier.fromNamespaceAndPath("glass", "projector_lens")) .withVertexShader(Identifier.fromNamespaceAndPath("glass", "core/projector_lens")) .withFragmentShader(Identifier.fromNamespaceAndPath("glass", "core/projector_lens")) - .withVertexFormat(DefaultVertexFormat.POSITION_TEX, VertexFormat.Mode.QUADS) - .withUniform("DynamicTransforms", com.mojang.blaze3d.shaders.UniformType.UNIFORM_BUFFER) - .withUniform("Projection", com.mojang.blaze3d.shaders.UniformType.UNIFORM_BUFFER) - .withUniform("Globals", com.mojang.blaze3d.shaders.UniformType.UNIFORM_BUFFER) - .withSampler("Sampler0") - .withDepthStencilState(new com.mojang.blaze3d.pipeline.DepthStencilState(com.mojang.blaze3d.platform.CompareOp.LESS_THAN_OR_EQUAL, false)) + .withVertexBinding(0, DefaultVertexFormat.POSITION_TEX) + .withPrimitiveTopology(PrimitiveTopology.QUADS) + .withBindGroupLayout(BindGroupLayouts.MATRICES_PROJECTION) + .withBindGroupLayout(BindGroupLayouts.GLOBALS) + .withBindGroupLayout(BindGroupLayouts.SAMPLER0) + .withDepthStencilState(new com.mojang.blaze3d.pipeline.DepthStencilState(com.mojang.blaze3d.platform.CompareOp.GREATER_THAN_OR_EQUAL, false)) .withColorTargetState(new com.mojang.blaze3d.pipeline.ColorTargetState(com.mojang.blaze3d.pipeline.BlendFunction.TRANSLUCENT)) .withCull(false).build(); private static final long LOADING_FADE_NANOS = 500_000_000L; @@ -67,7 +66,7 @@ public static void renderAll(Matrix4f modelView) { if (projectors == null) { return; } - Vec3 camera = minecraft.gameRenderer.getMainCamera().position(); + Vec3 camera = minecraft.gameRenderer.mainCamera().position(); for (ProjectorBlockEntity projector : List.copyOf(projectors.values())) { if (projector.isRemoved() || distanceToSqr(renderBounds(projector, projector.getProjectionSurface()), camera) > VIEW_DISTANCE_SQUARED) { continue; @@ -102,7 +101,7 @@ public static void unregisterLoaded(ClientLevel level, ProjectorBlockEntity enti } } - public static void onMainRendererRebuilt(LevelRenderer renderer) { + public static void onMainRendererRebuilt() { clearFrustum(); } @@ -117,7 +116,7 @@ public static void prepareNearby(Minecraft minecraft) { if (projectors == null || minecraft.player == null) { return; } - Vec3 viewer = minecraft.gameRenderer.getMainCamera().position(); + Vec3 viewer = minecraft.gameRenderer.mainCamera().position(); List nearby = new ArrayList<>(); for (ProjectorBlockEntity projector : projectors.values()) { projector.setClientProjectionReady(false); @@ -252,7 +251,7 @@ private static void renderReadyGlint(ProjectorBlockEntity entity, PoseStack matr matrices.mulPose(Axis.XP.rotationDegrees(-90.0F)); } matrices.translate(-0.5D, -0.5D, -0.5D); - var vertices = com.mojang.blaze3d.vertex.Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + var vertices = dev.imb11.client.renderer.projection.ProjectionMesh.begin(DefaultVertexFormat.POSITION_TEX); Matrix4f pose = matrices.last().pose(); float min = 6.0F / 16.0F; float max = 10.0F / 16.0F; @@ -296,10 +295,10 @@ private static double distanceToSqr(AABB bounds, Vec3 position) { private static Frustum currentFrustum(ClientLevel level, long frame) { if (frustum == null || frustumLevel != level || frustumFrame != frame) { Minecraft minecraft = Minecraft.getInstance(); - Vec3 cameraPosition = minecraft.gameRenderer.getMainCamera().position(); + Vec3 cameraPosition = minecraft.gameRenderer.mainCamera().position(); frustum = new Frustum( - minecraft.gameRenderer.getGameRenderState().levelRenderState.cameraRenderState.viewRotationMatrix, - minecraft.gameRenderer.getGameRenderState().levelRenderState.cameraRenderState.projectionMatrix + minecraft.gameRenderer.gameRenderState().levelRenderState.cameraRenderState.viewRotationMatrix, + new Matrix4f(minecraft.gameRenderer.gameRenderState().levelRenderState.cameraRenderState.projectionMatrix) ); frustum.prepare(cameraPosition.x, cameraPosition.y, cameraPosition.z); frustumLevel = level; diff --git a/glass/src/main/java/dev/imb11/client/renderer/projection/PortalSide.java b/glass/src/main/java/dev/imb11/client/renderer/projection/PortalSide.java index eacf7bf..6a9911d 100644 --- a/glass/src/main/java/dev/imb11/client/renderer/projection/PortalSide.java +++ b/glass/src/main/java/dev/imb11/client/renderer/projection/PortalSide.java @@ -44,7 +44,7 @@ void update(Vec3 viewer, long frame) { } return; } - if (side == 0.0D) { + if (side == 0.0D || !view.bounds().contains(viewer)) { side = classify(view, viewer); lastViewerPosition = viewer; return; diff --git a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionLevelRenderer.java b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionLevelRenderer.java index fa4fe45..49acd06 100644 --- a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionLevelRenderer.java +++ b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionLevelRenderer.java @@ -6,12 +6,14 @@ import dev.imb11.mixins.LevelRendererBufferAccessor; import net.minecraft.client.Minecraft; import net.minecraft.client.DeltaTracker; +import net.minecraft.client.SectionUpdateTracker; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.RenderBuffers; -import net.minecraft.client.renderer.SubmitNodeStorage; import net.minecraft.client.renderer.ProjectionMatrixBuffer; import net.minecraft.client.renderer.ViewArea; +import net.minecraft.client.renderer.chunk.RenderRegionCache; import net.minecraft.client.renderer.chunk.SectionCompiler; import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; import net.minecraft.client.renderer.feature.FeatureRenderDispatcher; @@ -22,130 +24,156 @@ import net.minecraft.world.level.ChunkPos; import org.joml.Matrix4f; -import com.mojang.blaze3d.buffers.GpuBuffer; -import com.mojang.blaze3d.buffers.GpuBufferSlice; import com.mojang.blaze3d.framegraph.FrameGraphBuilder; -import com.mojang.blaze3d.systems.RenderPass; -import com.mojang.blaze3d.textures.GpuTextureView; -import com.mojang.blaze3d.vertex.VertexFormat; import dev.imb11.mixins.ProjectionRendererAccessor; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.client.Camera; import net.minecraft.client.CloudStatus; -import net.minecraft.client.renderer.DynamicUniforms; import net.minecraft.client.renderer.GlobalSettingsUniform; +import net.minecraft.client.renderer.LevelTargetBundle; import net.minecraft.client.renderer.SkyRenderer; -import net.minecraft.client.renderer.chunk.ChunkSectionLayer; -import net.minecraft.client.renderer.chunk.ChunkSectionsToRender; -import net.minecraft.client.renderer.chunk.SectionMesh; +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.state.level.BlockBreakingRenderState; import net.minecraft.client.renderer.state.level.LevelRenderState; -import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.BlockDestructionProgress; import net.minecraft.util.ARGB; import net.minecraft.util.profiling.Profiler; +import net.minecraft.world.attribute.EnvironmentAttributes; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector4f; + +import com.mojang.blaze3d.IndexType; +import com.mojang.blaze3d.buffers.GpuBuffer; +import com.mojang.blaze3d.buffers.GpuBufferSlice; +import com.mojang.blaze3d.systems.RenderPass; +import com.mojang.blaze3d.textures.GpuTextureView; +import com.mojang.blaze3d.vertex.VertexFormat; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import net.minecraft.client.renderer.DynamicUniforms; +import net.minecraft.client.renderer.chunk.ChunkSectionLayer; +import net.minecraft.client.renderer.chunk.ChunkSectionsToRender; +import net.minecraft.client.renderer.chunk.SectionMesh; +import net.minecraft.client.renderer.texture.TextureAtlas; import org.joml.Matrix4fc; + import java.util.ArrayList; import java.util.EnumMap; import java.util.List; +import java.util.Locale; +import java.util.SortedSet; public class ProjectionLevelRenderer extends LevelRenderer { private final Minecraft minecraft; private final RenderBuffers buffers; private final int renderDistance; - private final GameRenderState state; + private final GameRenderState state = new GameRenderState(); private final FeatureRenderDispatcher features; private final FogRenderer fog = new FogRenderer(); private final ProjectionMatrixBuffer projectionBuffer = new ProjectionMatrixBuffer("GLASS projection"); + private final ProjectionMatrixBuffer skyProjectionBuffer = new ProjectionMatrixBuffer("GLASS sky projection"); private final GlobalSettingsUniform globals = new GlobalSettingsUniform(); private ClientLevel projectionLevel; private SectionRenderDispatcher dispatcher; + private SectionUpdateTracker sectionUpdates; private ChunkPos gridCenter; public ProjectionLevelRenderer(Minecraft minecraft, RenderBuffers buffers, int renderDistance) { - this(minecraft, buffers, renderDistance, new GameRenderState()); - } - - private ProjectionLevelRenderer(Minecraft minecraft, RenderBuffers buffers, int renderDistance, GameRenderState state) { - this(minecraft, buffers, renderDistance, state, new FeatureRenderDispatcher(new SubmitNodeStorage(), - minecraft.getModelManager(), buffers.bufferSource(), minecraft.getAtlasManager(), - buffers.outlineBufferSource(), buffers.crumblingBufferSource(), minecraft.font, state)); - } - - private ProjectionLevelRenderer(Minecraft minecraft, RenderBuffers buffers, int renderDistance, - GameRenderState state, FeatureRenderDispatcher features) { - super(minecraft, minecraft.getEntityRenderDispatcher(), minecraft.getBlockEntityRenderDispatcher(), buffers, state, features); + super(minecraft.getEntityRenderDispatcher(), minecraft.getBlockEntityRenderDispatcher(), minecraft.getModelManager(), + minecraft.getTextureManager(), minecraft.getAtlasManager(), minecraft.getShaderManager(), minecraft.gameRenderer, 1, 1); this.minecraft = minecraft; this.buffers = buffers; this.renderDistance = renderDistance; - this.state = state; - this.features = features; - ((ProjectionRendererAccessor) this).glass$skyRenderer(new SkyRenderer(minecraft.getTextureManager(), minecraft.getAtlasManager())); + this.features = new FeatureRenderDispatcher(buffers, minecraft.getModelManager(), minecraft.getAtlasManager(), minecraft.font, state); + ProjectionRendererAccessor access = (ProjectionRendererAccessor) this; + access.glass$renderBuffers(buffers); + access.glass$featureRenderDispatcher(features); + access.glass$levelRenderState(state.levelRenderState); + access.glass$optionsRenderState(state.optionsRenderState); + access.glass$skyRenderer(new SkyRenderer(minecraft.getTextureManager(), minecraft.getAtlasManager(), new ProjectionSkyTarget())); } - @Override public void setLevel(ClientLevel level) { - LevelRendererBufferAccessor accessor = (LevelRendererBufferAccessor) this; - ViewArea area = accessor.glass$getViewArea(); - if (area != null) { - area.releaseAllBuffers(); - accessor.glass$setViewArea(null); - } - if (dispatcher != null) { - dispatcher.dispose(); - dispatcher = null; - accessor.glass$setSectionRenderDispatcher(null); - } - accessor.glass$getVisibleSections().clear(); + resetLevelRenderData(); + dispatcher = null; + sectionUpdates = null; projectionLevel = level; - accessor.glass$setLevel(level); gridCenter = null; if (level != null) { allChanged(); } } - @Override public void allChanged() { if (projectionLevel == null) { return; } LevelRendererBufferAccessor accessor = (LevelRendererBufferAccessor) this; - if (accessor.glass$getViewArea() != null) { - accessor.glass$getViewArea().releaseAllBuffers(); + if (viewArea() != null) { + viewArea().releaseAllBuffers(); } + projectionLevel.clearTintCaches(); var models = minecraft.getModelManager(); SectionCompiler compiler = new SectionCompiler(minecraft.options.ambientOcclusion().get(), minecraft.options.cutoutLeaves().get(), models.getBlockStateModelSet(), models.getFluidStateModelSet(), - minecraft.getBlockColors(), minecraft.getBlockEntityRenderDispatcher()); + minecraft.getBlockColors()); if (dispatcher == null) { - dispatcher = new SectionRenderDispatcher(projectionLevel, this, Util.backgroundExecutor(), buffers, compiler); + dispatcher = new SectionRenderDispatcher(Util.backgroundExecutor(), buffers, compiler, section -> { + }); accessor.glass$setSectionRenderDispatcher(dispatcher); } else { dispatcher.clearCompileQueue(); - dispatcher.setLevel(projectionLevel, compiler); + dispatcher.setCompiler(compiler); } - accessor.glass$getVisibleSections().clear(); - accessor.glass$setViewArea(new ViewArea(dispatcher, projectionLevel, renderDistance, this)); + clearVisibleSections(); + accessor.glass$setViewArea(new ViewArea(dispatcher, projectionLevel.getMinY(), projectionLevel.getMaxY(), + projectionLevel.getMinSectionY(), projectionLevel.getMaxSectionY(), renderDistance, sectionOcclusionGraph())); + sectionUpdates = new SectionUpdateTracker(projectionLevel, renderDistance); gridCenter = null; } public void prepareCamera(ProjectionCamera camera) { ChunkPos center = camera.gridCenter(); if (!center.equals(gridCenter)) { - ((LevelRendererBufferAccessor) this).glass$getViewArea().repositionCamera( - SectionPos.of(center.x(), SectionPos.blockToSectionCoord(camera.position().y), center.z())); + SectionPos cameraSection = SectionPos.of(center.x(), SectionPos.blockToSectionCoord(camera.position().y), center.z()); + viewArea().repositionCamera(cameraSection); + sectionUpdates.repositionCamera(cameraSection); gridCenter = center; } dispatcher.setCameraPosition(camera.position()); } - public void renderScene(ProjectionCamera camera, Matrix4f projection, DeltaTracker deltaTracker) { + public void setSectionDirty(int sectionX, int sectionY, int sectionZ) { + if (sectionUpdates != null) { + sectionUpdates.setDirty(sectionX, sectionY, sectionZ, false); + } + } + + public boolean isSectionDirty(SectionRenderDispatcher.RenderSection section) { + SectionUpdateTracker.SectionDirtyState dirtyState = sectionUpdates == null ? null : sectionUpdates.getDirtyState(section.getSectionNode()); + return dirtyState != null && dirtyState.isDirty(); + } + + public boolean hasAllNeighbors(SectionRenderDispatcher.RenderSection section) { + return sectionUpdates != null && sectionUpdates.hasAllNeighbors(projectionLevel, section.getSectionNode()); + } + + public void compileSection(SectionRenderDispatcher.RenderSection section, RenderRegionCache regions) { + SectionUpdateTracker.SectionDirtyState dirtyState = sectionUpdates.getDirtyState(section.getSectionNode()); + if (dirtyState != null) { + dirtyState.setNotDirty(); + } + section.compileAsync(regions.createRegion(projectionLevel, section.getSectionNode())); + } + + public void renderScene(ProjectionCamera camera, Matrix4f projection, Matrix4f skyProjection, DeltaTracker deltaTracker) { var savedProjection = RenderSystem.getProjectionMatrixBuffer(); var savedFog = RenderSystem.getShaderFog(); var savedGlobals = RenderSystem.getGlobalSettingsUniform(); var options = state.optionsRenderState; - var mainOptions = minecraft.gameRenderer.getGameRenderState().optionsRenderState; + var mainOptions = minecraft.gameRenderer.gameRenderState().optionsRenderState; options.cloudStatus = mainOptions.cloudStatus; options.cloudRange = mainOptions.cloudRange; options.renderDistance = renderDistance; @@ -159,60 +187,151 @@ public void renderScene(ProjectionCamera camera, Matrix4f projection, DeltaTrack options.glintStrength = mainOptions.glintStrength; options.textBackgroundOpacity = mainOptions.textBackgroundOpacity; options.backgroundForChatOnly = mainOptions.backgroundForChatOnly; + options.fov = mainOptions.fov; var cameraState = state.levelRenderState.cameraRenderState; float partialTick = deltaTracker.getGameTimeDeltaPartialTick(false); camera.extractRenderState(cameraState, partialTick); cameraState.projectionMatrix.set(projection); cameraState.viewRotationMatrix.set(camera.getViewRotationMatrix(new Matrix4f())); - cameraState.cullFrustum = camera.getCullFrustum(); + cameraState.cullFrustum.set(camera.getCullFrustum()); cameraState.initialized = true; cameraState.depthFar = renderDistance * 64.0F; cameraState.fogData = fog.setupFog(camera, renderDistance, deltaTracker, 0.0F, projectionLevel); state.levelRenderState.reset(); try { extractLevel(deltaTracker, camera, partialTick); - state.levelRenderState.particlesRenderState.reset(); fog.updateBuffer(cameraState.fogData); - RenderSystem.setProjectionMatrix(projectionBuffer.getBuffer(projection), ProjectionType.PERSPECTIVE); - var target = minecraft.getMainRenderTarget(); + GpuBufferSlice sceneProjection = projectionBuffer.getBuffer(projection); + GpuBufferSlice unclippedProjection = skyProjectionBuffer.getBuffer(skyProjection); + RenderSystem.setProjectionMatrix(sceneProjection, ProjectionType.PERSPECTIVE); + var target = minecraft.gameRenderer.mainRenderTarget(); globals.update(target.width, target.height, mainOptions.glintStrength, projectionLevel.getGameTime(), deltaTracker, 0, camera.position(), false); - renderProjectionLevel(deltaTracker); + renderProjectionLevel(deltaTracker, sceneProjection, unclippedProjection); } finally { - features.clearSubmitNodes(); - features.endFrame(); + buffers.endFrame(); endFrame(); fog.endFrame(); RenderSystem.setProjectionMatrix(savedProjection, ProjectionType.PERSPECTIVE); RenderSystem.setShaderFog(savedFog); RenderSystem.setGlobalSettingsUniform(savedGlobals); - minecraft.getEntityRenderDispatcher().prepare(minecraft.gameRenderer.getMainCamera(), minecraft.crosshairPickEntity); - minecraft.getBlockEntityRenderDispatcher().prepare(minecraft.gameRenderer.getMainCamera().position()); + Camera mainCamera = minecraft.gameRenderer.mainCamera(); + entityRenderDispatcher().prepare(mainCamera, minecraft.crosshairPickEntity); + blockEntityRenderDispatcher().prepare(mainCamera.position()); + } + } + + private void extractLevel(DeltaTracker deltaTracker, ProjectionCamera camera, float partialTick) { + var levelState = state.levelRenderState; + Vec3 cameraPos = camera.position(); + Frustum cullFrustum = camera.getCullFrustum(); + blockEntityRenderDispatcher().prepare(cameraPos); + entityRenderDispatcher().prepare(camera, minecraft.crosshairPickEntity); + levelState.gameTime = projectionLevel.getGameTime(); + extractProjectionEntities(camera, cullFrustum, deltaTracker, levelState); + extractProjectionBlockEntities(partialTick, levelState); + extractBlockDestroyAnimation(cameraPos, levelState); + weatherEffectRenderer().extractRenderState(projectionLevel, partialTick, cameraPos, levelState.weatherRenderState); + SkyRenderer sky = skyRenderer(); + if (sky != null) { + sky.extractRenderState(projectionLevel, partialTick, camera, levelState.skyRenderState); + } + worldBorderRenderer().extract(projectionLevel.getWorldBorder(), partialTick, cameraPos, renderDistance * 16, + levelState.worldBorderRenderState); + levelState.cloudColor = camera.attributeProbe().getValue(EnvironmentAttributes.CLOUD_COLOR, partialTick); + if (ARGB.alpha(levelState.cloudColor) > 0) { + levelState.cloudHeight = camera.attributeProbe().getValue(EnvironmentAttributes.CLOUD_HEIGHT, partialTick); + } + } + + private void extractProjectionEntities(Camera camera, Frustum frustum, DeltaTracker deltaTracker, LevelRenderState levelState) { + Vec3 cameraPos = camera.position(); + var tickRateManager = projectionLevel.tickRateManager(); + for (Entity entity : projectionLevel.entitiesForRendering()) { + if (!entityRenderDispatcher().shouldRender(entity, frustum, cameraPos.x, cameraPos.y, cameraPos.z)) { + continue; + } + BlockPos blockPos = entity.blockPosition(); + if (!projectionLevel.isOutsideBuildHeight(blockPos.getY()) && !isSectionCompiledAndVisible(blockPos)) { + continue; + } + if (entity == camera.entity() && !camera.isDetached() + && !(camera.entity() instanceof LivingEntity living && living.isSleeping())) { + continue; + } + if (entity instanceof LocalPlayer && camera.entity() != entity) { + continue; + } + if (entity.tickCount == 0) { + entity.xOld = entity.getX(); + entity.yOld = entity.getY(); + entity.zOld = entity.getZ(); + } + float partialEntity = deltaTracker.getGameTimeDeltaPartialTick(!tickRateManager.isEntityFrozen(entity)); + levelState.entityRenderStates.add(entityRenderDispatcher().extractEntity(entity, partialEntity)); + } + levelState.lastEntityRenderStateCount = levelState.entityRenderStates.size(); + } + + private void extractProjectionBlockEntities(float partialTick, LevelRenderState levelState) { + var dispatcher = blockEntityRenderDispatcher(); + var hidden = ProjectionRenderContext.hiddenTerrainBlock(); + for (var section : visibleSections()) { + for (BlockEntity entity : section.getSectionMesh().getRenderableBlockEntities()) { + if (!entity.getBlockPos().equals(hidden)) { + var entityState = dispatcher.tryExtractRenderState(entity, partialTick, null, false); + if (entityState != null) { + levelState.blockEntityRenderStates.add(entityState); + } + } + } + } + for (BlockEntity entity : projectionLevel.getGloballyRenderedBlockEntities()) { + if (!entity.isRemoved() && !entity.getBlockPos().equals(hidden)) { + var entityState = dispatcher.tryExtractRenderState(entity, partialTick, null, true); + if (entityState != null) { + levelState.blockEntityRenderStates.add(entityState); + } + } } } - private void renderProjectionLevel(DeltaTracker delta) { + private void extractBlockDestroyAnimation(Vec3 cameraPos, LevelRenderState levelState) { + for (var entry : projectionLevel.destructionProgress().long2ObjectEntrySet()) { + BlockPos pos = BlockPos.of(entry.getLongKey()); + SortedSet progresses = entry.getValue(); + if (pos.distToCenterSqr(cameraPos.x, cameraPos.y, cameraPos.z) <= 1024.0 && progresses != null && !progresses.isEmpty()) { + levelState.blockBreakingRenderStates.add(new BlockBreakingRenderState(pos, projectionLevel.getBlockState(pos), + progresses.last().getProgress())); + } + } + } + + private void renderProjectionLevel(DeltaTracker delta, GpuBufferSlice sceneProjection, GpuBufferSlice skyProjection) { var access = (ProjectionRendererAccessor) this; var targets = access.glass$targets(); var levelState = state.levelRenderState; var camera = levelState.cameraRenderState; var terrainFog = fog.getBuffer(FogRenderer.FogMode.WORLD); - levelState.gameTime = projectionLevel.getGameTime(); var modelView = RenderSystem.getModelViewStack(); modelView.pushMatrix(); modelView.mul(camera.viewRotationMatrix); + access.glass$submitFeatures(levelState, access.glass$submitNodeStorage(), false); + FeatureRenderDispatcher.PreparedFrame featureFrame = features.prepareFrame(access.glass$submitNodeStorage()); try { var frame = new FrameGraphBuilder(); - var target = minecraft.getMainRenderTarget(); + var target = minecraft.gameRenderer.mainRenderTarget(); targets.main = frame.importExternal("main", target); var clear = frame.addPass("clear"); targets.main = clear.readsAndWrites(targets.main); clear.executes(() -> RenderSystem.getDevice().createCommandEncoder().clearColorAndDepthTextures( - target.getColorTexture(), ARGB.colorFromFloat(1.0F, camera.fogData.color.x, camera.fogData.color.y, - camera.fogData.color.z), target.getDepthTexture(), 1.0)); + target.getColorTexture(), new Vector4f(camera.fogData.color.x, camera.fogData.color.y, + camera.fogData.color.z, 1.0F), target.getDepthTexture(), 0.0)); + useProjection(frame, targets, "glass_sky_projection", skyProjection); access.glass$skyPass(frame, camera, terrainFog); - access.glass$mainPass(frame, camera.cullFrustum, camera.viewRotationMatrix, terrainFog, false, - levelState, delta, Profiler.get(), levelState.chunkSectionsToRender); + useProjection(frame, targets, "glass_scene_projection", sceneProjection); + access.glass$mainPass(frame, featureFrame, terrainFog, levelState, Profiler.get(), + prepareChunkRenders(camera.viewRotationMatrix)); if (state.optionsRenderState.cloudStatus != CloudStatus.OFF && ARGB.alpha(levelState.cloudColor) > 0) { access.glass$cloudsPass(frame, state.optionsRenderState.cloudStatus, camera.pos, levelState.gameTime, delta.getGameTimeDeltaPartialTick(false), levelState.cloudColor, levelState.cloudHeight, @@ -222,45 +341,101 @@ private void renderProjectionLevel(DeltaTracker delta) { frame.execute(GraphicsResourceAllocator.UNPOOLED); } finally { targets.clear(); + featureFrame.close(); modelView.popMatrix(); levelState.reset(); } } - public void extractProjectionBlockEntities(float partialTick, LevelRenderState levelState) { - var dispatcher = minecraft.getBlockEntityRenderDispatcher(); - var hidden = ProjectionRenderContext.hiddenTerrainBlock(); - for (var section : ((LevelRendererBufferAccessor) this).glass$getVisibleSections()) { - for (BlockEntity entity : section.getSectionMesh().getRenderableBlockEntities()) { - if (!entity.getBlockPos().equals(hidden)) { - var entityState = dispatcher.tryExtractRenderState(entity, partialTick, null); - if (entityState != null) { - levelState.blockEntityRenderStates.add(entityState); - } - } - } + private static void useProjection(FrameGraphBuilder frame, LevelTargetBundle targets, String name, GpuBufferSlice projection) { + var pass = frame.addPass(name); + targets.main = pass.readsAndWrites(targets.main); + pass.executes(() -> RenderSystem.setProjectionMatrix(projection, ProjectionType.PERSPECTIVE)); + } + + @Override + public ChunkSectionsToRender prepareChunkRenders(Matrix4fc modelViewMatrix) { + EnumMap>>> drawGroups = new EnumMap<>(ChunkSectionLayer.class); + int largestIndexCount = 0; + for (ChunkSectionLayer layer : ChunkSectionLayer.values()) { + drawGroups.put(layer, new Int2ObjectOpenHashMap<>()); } - for (BlockEntity entity : projectionLevel.getGloballyRenderedBlockEntities()) { - if (!entity.isRemoved() && !entity.getBlockPos().equals(hidden)) { - var entityState = dispatcher.tryExtractRenderState(entity, partialTick, null); - if (entityState != null) { - levelState.blockEntityRenderStates.add(entityState); + List sectionInfos = new ArrayList<>(); + GpuTextureView blockAtlas = minecraft.getTextureManager().getTexture(TextureAtlas.LOCATION_BLOCKS).getTextureView(); + int textureAtlasWidth = blockAtlas.getWidth(0); + int textureAtlasHeight = blockAtlas.getHeight(0); + if (dispatcher != null) { + dispatcher.lock(); + try { + long now = Util.getMillis(); + for (SectionRenderDispatcher.RenderSection section : visibleSections()) { + SectionMesh sectionMesh = section.getSectionMesh(); + BlockPos renderOffset = section.getRenderOrigin(); + int uboIndex = -1; + for (ChunkSectionLayer layer : ChunkSectionLayer.values()) { + SectionMesh.SectionDraw draw = sectionMesh.getSectionDraw(layer); + SectionRenderDispatcher.RenderSectionBufferSlice slice = dispatcher.getRenderSectionSlice(sectionMesh, layer); + if (slice == null || draw == null || draw.hasCustomIndexBuffer() && slice.indexBuffer() == null) { + continue; + } + if (uboIndex == -1) { + uboIndex = sectionInfos.size(); + sectionInfos.add(new DynamicUniforms.ChunkSectionInfo(new Matrix4f(modelViewMatrix), renderOffset.getX(), + renderOffset.getY(), renderOffset.getZ(), section.getVisibility(now), textureAtlasWidth, textureAtlasHeight)); + } + int combinedHash = 173; + VertexFormat vertexFormat = layer.pipeline().getVertexFormatBinding(0); + GpuBuffer vertexBuffer = slice.vertexBuffer(); + if (layer != ChunkSectionLayer.TRANSLUCENT) { + combinedHash = 31 * combinedHash + vertexBuffer.hashCode(); + } + int firstIndex = 0; + GpuBuffer indexBuffer = null; + IndexType indexType = null; + if (!draw.hasCustomIndexBuffer()) { + largestIndexCount = Math.max(largestIndexCount, draw.indexCount()); + } else { + indexBuffer = slice.indexBuffer(); + indexType = draw.indexType(); + if (layer != ChunkSectionLayer.TRANSLUCENT) { + combinedHash = 31 * combinedHash + indexBuffer.hashCode(); + combinedHash = 31 * combinedHash + indexType.hashCode(); + } + firstIndex = (int) (slice.indexBufferOffset() / indexType.bytes); + } + int finalUboIndex = uboIndex; + int baseVertex = (int) (slice.vertexBufferOffset() / vertexFormat.getVertexSize()); + drawGroups.get(layer).computeIfAbsent(combinedHash, ignored -> new ArrayList<>()).add(new RenderPass.Draw<>( + 0, vertexBuffer, indexBuffer, indexType, firstIndex, draw.indexCount(), baseVertex, + (sectionUbos, uploader) -> uploader.upload("ChunkSection", sectionUbos[finalUboIndex]))); + } } + } finally { + dispatcher.unlock(); } } + GpuBufferSlice[] chunkSectionInfos = RenderSystem.getDynamicUniforms().writeChunkSections(sectionInfos.toArray(new DynamicUniforms.ChunkSectionInfo[0])); + return new ChunkSectionsToRender(blockAtlas, drawGroups, largestIndexCount, chunkSectionInfos); } @Override - public void tick(Camera camera) { - ((ProjectionRendererAccessor) this).glass$ticks((int) projectionLevel.getGameTime()); - } - - @Override - public void addRecentlyCompiledSection(SectionRenderDispatcher.RenderSection section) { + public boolean hasRenderedAllSections() { + return dispatcher == null || dispatcher.isQueueEmpty(); } - @Override - public void onChunkReadyToRender(ChunkPos pos) { + public String sectionStatistics() { + ViewArea area = viewArea(); + if (area == null) { + return null; + } + int rendered = 0; + for (var section : visibleSections()) { + if (section.getSectionMesh().hasRenderableLayers()) { + rendered++; + } + } + return String.format(Locale.ROOT, "C: %d/%d D: %d, %s", rendered, area.size(), renderDistance, + dispatcher == null ? "null" : dispatcher.getStats()); } @Override @@ -270,15 +445,6 @@ public boolean isSectionCompiledAndVisible(BlockPos pos) { return section != null && section.getSectionMesh() != net.minecraft.client.renderer.chunk.CompiledSectionMesh.UNCOMPILED; } - @Override - public void needsUpdate() { - } - - @Override - public SectionRenderDispatcher getSectionRenderDispatcher() { - return dispatcher; - } - @Override public void close() { setLevel(null); @@ -286,110 +452,7 @@ public void close() { features.close(); fog.close(); projectionBuffer.close(); + skyProjectionBuffer.close(); globals.close(); } - @Override - public ChunkSectionsToRender prepareChunkRenders(final Matrix4fc modelViewMatrix) { - var iterator = ((LevelRendererBufferAccessor) this).glass$getVisibleSections().listIterator(0); - EnumMap>>> drawGroups = new EnumMap<>(ChunkSectionLayer.class); - int largestIndexCount = 0; - - for (ChunkSectionLayer layer : ChunkSectionLayer.values()) { - drawGroups.put(layer, new Int2ObjectOpenHashMap()); - } - - List sectionInfos = new ArrayList<>(); - GpuTextureView blockAtlas = this.minecraft.getTextureManager().getTexture(TextureAtlas.LOCATION_BLOCKS).getTextureView(); - int textureAtlasWidth = blockAtlas.getWidth(0); - int textureAtlasHeight = blockAtlas.getHeight(0); - if (dispatcher != null) { - dispatcher.lock(); - - try { - try (var ignored = Profiler.get().zone("Upload Global Buffers")) { - dispatcher.uploadGlobalGeomBuffersToGPU(); - } - - while (iterator.hasNext()) { - SectionRenderDispatcher.RenderSection section = (SectionRenderDispatcher.RenderSection)iterator.next(); - SectionMesh sectionMesh = section.getSectionMesh(); - BlockPos renderOffset = section.getRenderOrigin(); - long now = Util.getMillis(); - int uboIndex = -1; - - for (ChunkSectionLayer layer : ChunkSectionLayer.values()) { - SectionMesh.SectionDraw draw = sectionMesh.getSectionDraw(layer); - SectionRenderDispatcher.RenderSectionBufferSlice slice = dispatcher.getRenderSectionSlice(sectionMesh, layer); - if (slice != null && draw != null && (!draw.hasCustomIndexBuffer() || slice.indexBuffer() != null)) { - if (uboIndex == -1) { - uboIndex = sectionInfos.size(); - sectionInfos.add( - new DynamicUniforms.ChunkSectionInfo( - new Matrix4f(modelViewMatrix), - renderOffset.getX(), - renderOffset.getY(), - renderOffset.getZ(), - section.getVisibility(now), - textureAtlasWidth, - textureAtlasHeight - ) - ); - } - - int combinedHash = 173; - VertexFormat vertexFormat = layer.pipeline().getVertexFormat(); - GpuBuffer vertexBuffer = slice.vertexBuffer(); - if (layer != ChunkSectionLayer.TRANSLUCENT) { - combinedHash = 31 * combinedHash + vertexBuffer.hashCode(); - } - - int firstIndex = 0; - GpuBuffer indexBuffer; - VertexFormat.IndexType indexType; - if (!draw.hasCustomIndexBuffer()) { - if (draw.indexCount() > largestIndexCount) { - largestIndexCount = draw.indexCount(); - } - - indexBuffer = null; - indexType = null; - } else { - indexBuffer = slice.indexBuffer(); - indexType = draw.indexType(); - if (layer != ChunkSectionLayer.TRANSLUCENT) { - combinedHash = 31 * combinedHash + indexBuffer.hashCode(); - combinedHash = 31 * combinedHash + indexType.hashCode(); - } - - firstIndex = (int)(slice.indexBufferOffset() / indexType.bytes); - } - - int finalUboIndex = uboIndex; - int baseVertex = (int)(slice.vertexBufferOffset() / vertexFormat.getVertexSize()); - List> draws = (List>)drawGroups.get(layer) - .computeIfAbsent(combinedHash, var0 -> new ArrayList()); - draws.add( - new RenderPass.Draw<>( - 0, - vertexBuffer, - indexBuffer, - indexType, - firstIndex, - draw.indexCount(), - baseVertex, - (sectionUbos, uploader) -> uploader.upload("ChunkSection", sectionUbos[finalUboIndex]) - ) - ); - } - } - } - } finally { - dispatcher.unlock(); - } - } - - GpuBufferSlice[] chunkSectionInfos = RenderSystem.getDynamicUniforms().writeChunkSections(sectionInfos.toArray(new DynamicUniforms.ChunkSectionInfo[0])); - return new ChunkSectionsToRender(blockAtlas, drawGroups, largestIndexCount, chunkSectionInfos); - } - } diff --git a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionMesh.java b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionMesh.java index c7f5ae4..01e6c4c 100644 --- a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionMesh.java +++ b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionMesh.java @@ -1,10 +1,13 @@ package dev.imb11.client.renderer.projection; +import com.mojang.blaze3d.PrimitiveTopology; import com.mojang.blaze3d.buffers.GpuBuffer; import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.textures.FilterMode; import com.mojang.blaze3d.textures.GpuTextureView; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.ByteBufferBuilder; import com.mojang.blaze3d.vertex.MeshData; import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.client.Minecraft; @@ -13,13 +16,18 @@ import org.joml.Vector4f; import java.util.Map; +import java.util.Optional; import java.util.OptionalDouble; -import java.util.OptionalInt; public final class ProjectionMesh implements AutoCloseable { + private static final ByteBufferBuilder BUILDER_BUFFER = new ByteBufferBuilder(786432); private final GpuBuffer vertices; private final int indexCount; + public static BufferBuilder begin(VertexFormat format) { + return new BufferBuilder(BUILDER_BUFFER, PrimitiveTopology.QUADS, format); + } + public ProjectionMesh(MeshData mesh) { try (mesh) { vertices = RenderSystem.getDevice().createBuffer(() -> "GLASS mesh", GpuBuffer.USAGE_VERTEX, mesh.vertexBuffer()); @@ -28,12 +36,12 @@ public ProjectionMesh(MeshData mesh) { } public void draw(RenderPipeline pipeline, Matrix4f pose, Map textures, GpuBuffer parameters) { - var target = Minecraft.getInstance().getMainRenderTarget(); - var indices = RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS); + var target = Minecraft.getInstance().gameRenderer.mainRenderTarget(); + var indices = RenderSystem.getSequentialBuffer(PrimitiveTopology.QUADS); var indexBuffer = indices.getBuffer(indexCount); var transforms = RenderSystem.getDynamicUniforms().writeTransform(pose, new Vector4f(1), new Vector3f(), new Matrix4f()); try (var pass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "GLASS projection surface", - target.getColorTextureView(), OptionalInt.empty(), target.getDepthTextureView(), OptionalDouble.empty())) { + target.getColorTextureView(), Optional.empty(), target.getDepthTextureView(), OptionalDouble.empty())) { pass.setPipeline(pipeline); RenderSystem.bindDefaultUniforms(pass); pass.setUniform("DynamicTransforms", transforms); @@ -41,9 +49,9 @@ public void draw(RenderPipeline pipeline, Matrix4f pose, Map pass.bindTexture(name, texture, RenderSystem.getSamplerCache().getClampToEdge(FilterMode.LINEAR))); - pass.setVertexBuffer(0, vertices); + pass.setVertexBuffer(0, vertices.slice()); pass.setIndexBuffer(indexBuffer, indices.type()); - pass.drawIndexed(0, 0, indexCount, 1); + pass.drawIndexed(indexCount, 1, 0, 0, 0); } } diff --git a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionRenderManager.java b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionRenderManager.java index 15961b1..f9947f9 100644 --- a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionRenderManager.java +++ b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionRenderManager.java @@ -1,5 +1,6 @@ package dev.imb11.client.renderer.projection; +import com.mojang.blaze3d.GpuFormat; import com.mojang.blaze3d.pipeline.RenderTarget; import com.mojang.blaze3d.pipeline.TextureTarget; import com.mojang.blaze3d.systems.RenderSystem; @@ -15,7 +16,7 @@ import dev.imb11.client.remote.RemoteSceneHandle; import dev.imb11.blocks.entity.ProjectorBlockEntity; import dev.imb11.client.renderer.block.ProjectorBlockEntityRenderer; -import dev.imb11.mixins.LevelRendererBufferAccessor; +import dev.imb11.mixins.ViewAreaAccessor; import dev.imb11.projection.ProjectionSurface; import dev.imb11.projection.ProjectionChunkRegion; import dev.imb11.sync.ProjectionSource; @@ -57,6 +58,8 @@ import org.joml.Matrix3f; import org.joml.Matrix4f; import org.joml.Quaternionf; +import org.joml.Vector3f; +import org.joml.Vector4f; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -86,6 +89,7 @@ public final class ProjectionRenderManager { private static final long BUILD_PREPARATION_BUDGET_NANOS = TimeUnit.MILLISECONDS.toNanos(2L); private static final long UPLOAD_BUDGET_NANOS = TimeUnit.MILLISECONDS.toNanos(2L); private static final float CAMERA_FACE_OFFSET = 0.5625F; + private static final float PORTAL_CLIP_MIN_DISTANCE = 0.05F; private static final Map FEEDS = new LinkedHashMap<>(); private static final Map TERRAINS = new HashMap<>(); private static final Map PORTAL_SIDES = new HashMap<>(); @@ -122,7 +126,7 @@ public static ProjectionFeed requestFeed( ProjectionView view = ProjectionView.create(currentLevel.dimension(), projectorPos, surface); PortalSide side = portalSide(view); - side.track(view, minecraft.gameRenderer.getMainCamera().position(), frameSequence); + side.track(view, minecraft.gameRenderer.mainCamera().position(), frameSequence); FeedKey key = new FeedKey(source.key(), view.dimension(), view.projectorPos(), false); closeFeeds(other -> !other.key.equals(key) && !other.key.preview() && other.key.projectorDimension().equals(key.projectorDimension()) @@ -237,7 +241,7 @@ public static void alignFeeds(List projectors) { feed.alignment == null ? Long.MAX_VALUE : feed.alignment.createdFrame) .thenComparingLong(feed -> feed.view.projectorPos().asLong())); Set used = Collections.newSetFromMap(new IdentityHashMap<>()); - Vec3 viewer = Minecraft.getInstance().gameRenderer.getMainCamera().position(); + Vec3 viewer = Minecraft.getInstance().gameRenderer.mainCamera().position(); while (!pending.isEmpty()) { ProjectionFeed first = pending.removeFirst(); List connected = new ArrayList<>(); @@ -398,11 +402,7 @@ public static void onClientLevelChanged(@Nullable ClientLevel level) { }); } - public static void onMainRendererRebuilt(LevelRenderer candidate) { - Minecraft minecraft = Minecraft.getInstance(); - if (candidate != minecraft.levelRenderer) { - return; - } + public static void onMainRendererRebuilt() { RenderResources.runOnRenderThread(() -> { for (ProjectionFeed feed : List.copyOf(FEEDS.values())) { disposeFeedResources(feed); @@ -410,11 +410,7 @@ public static void onMainRendererRebuilt(LevelRenderer candidate) { }); } - public static void onMainSectionDirty(LevelRenderer candidate, int sectionX, int sectionY, int sectionZ) { - Minecraft minecraft = Minecraft.getInstance(); - if (candidate != minecraft.levelRenderer) { - return; - } + public static void onMainSectionDirty(int sectionX, int sectionY, int sectionZ) { for (ProjectionFeed feed : List.copyOf(FEEDS.values())) { if (feed.level() == activeLevel && feed.renderer() != null @@ -424,32 +420,14 @@ && sectionInFeedView(feed, sectionX, sectionY, sectionZ)) { } } - public static void onMainChunkLoaded(LevelRenderer candidate, ChunkPos chunkPos) { - Minecraft minecraft = Minecraft.getInstance(); - if (candidate != minecraft.levelRenderer) { - return; - } + public static void onMainChunkLoaded(ChunkPos chunkPos) { for (ProjectionFeed feed : List.copyOf(FEEDS.values())) { if (feed.level() == activeLevel && feed.renderer() != null) { - feed.renderer().onChunkReadyToRender(chunkPos); dirtyChunkSections(feed, chunkPos); } } } - public static void onMainRendererTick(LevelRenderer candidate) { - Minecraft minecraft = Minecraft.getInstance(); - if (candidate != minecraft.levelRenderer) { - return; - } - Set ticked = Collections.newSetFromMap(new IdentityHashMap<>()); - for (ProjectionFeed feed : List.copyOf(FEEDS.values())) { - if (feed.renderer() != null && ticked.add(feed.renderer())) { - feed.renderer().tick(feed.camera); - } - } - } - public static void renderBeforeMain(GameRenderer gameRenderer, DeltaTracker deltaTracker) { if (ProjectionRenderContext.isActive()) { return; @@ -459,7 +437,7 @@ public static void renderBeforeMain(GameRenderer gameRenderer, DeltaTracker delt buildPreparationNanos = 0L; uploadNanos = 0L; - Minecraft minecraft = gameRenderer.getMinecraft(); + Minecraft minecraft = Minecraft.getInstance(); ClientLevel currentLevel = minecraft.level; if (currentLevel == null || minecraft.player == null) { if (activeLevel != null || !FEEDS.isEmpty()) { @@ -472,15 +450,15 @@ public static void renderBeforeMain(GameRenderer gameRenderer, DeltaTracker delt } ProjectorBlockEntityRenderer.prepareNearby(minecraft); - if (minecraft.screen instanceof ChannelScreen channelScreen) { + if (minecraft.gui.screen() instanceof ChannelScreen channelScreen) { channelScreen.preparePreview(); } - RenderTarget mainTarget = minecraft.getMainRenderTarget(); + RenderTarget mainTarget = gameRenderer.mainRenderTarget(); float partialTick = deltaTracker.getGameTimeDeltaPartialTick(true); - Camera viewerCamera = gameRenderer.getMainCamera(); + Camera viewerCamera = gameRenderer.mainCamera(); Vec3 viewerPosition = viewerCamera.position(); - Matrix4f mainProjection = new Matrix4f(gameRenderer.getGameRenderState().levelRenderState.cameraRenderState.projectionMatrix); - Matrix4f mainModelView = new Matrix4f(RenderSystem.getModelViewMatrix()); + Matrix4f mainProjection = new Matrix4f(gameRenderer.gameRenderState().levelRenderState.cameraRenderState.projectionMatrix); + Matrix4f mainModelView = RenderSystem.getModelViewMatrixCopy(); boolean initializedFeedThisFrame = false; for (ProjectionFeed feed : List.copyOf(FEEDS.values())) { if (FEEDS.get(feed.key) != feed) { @@ -695,7 +673,7 @@ private static boolean chunkInFeedView(ProjectionFeed feed, int sectionX, int se private static int feedViewDistance(ProjectionFeed feed) { LevelRenderer renderer = feed.renderer(); if (renderer != null) { - ViewArea viewArea = ((LevelRendererBufferAccessor) renderer).glass$getViewArea(); + ViewArea viewArea = renderer.viewArea(); if (viewArea != null) { return viewArea.getViewDistance(); } @@ -769,7 +747,7 @@ private static boolean ensureResources( feed.ready = false; feed.terrainReadyFrames = 0; if (feed.target == null) { - feed.target = new TextureTarget("GLASS feed", portalView.targetWidth(), portalView.targetHeight(), true); + feed.target = new TextureTarget("GLASS feed", portalView.targetWidth(), portalView.targetHeight(), true, GpuFormat.RGBA8_UNORM); } else { resizeTarget(feed, portalView.targetWidth(), portalView.targetHeight()); } @@ -811,13 +789,14 @@ private static void prepareTerrain(ProjectionFeed feed, PortalView portalView) { try (ProjectionRenderContext.Scope ignored = ProjectionRenderContext.enter( feed.renderer(), feed.camera, feed.target, feed.source.pos(), feed.level(), feed.lightTexture() )) { - feed.renderer().prepareCamera(feed.camera); - LevelRendererBufferAccessor accessor = (LevelRendererBufferAccessor) feed.renderer(); - SectionRenderDispatcher dispatcher = feed.renderer().getSectionRenderDispatcher(); + ProjectionLevelRenderer renderer = feed.renderer(); + renderer.prepareCamera(feed.camera); + SectionRenderDispatcher dispatcher = renderer.sectionRenderDispatcher(); uploadTerrain(dispatcher); - List visible = accessor.glass$getVisibleSections(); + Iterable sections = ((ViewAreaAccessor) renderer.viewArea()).glass$getSections(); + List visible = renderer.visibleSections(); visible.clear(); - for (SectionRenderDispatcher.RenderSection section : accessor.glass$getViewArea().sections) { + for (SectionRenderDispatcher.RenderSection section : sections) { BlockPos origin = section.getRenderOrigin(); if (!feed.level().getChunkSource().hasChunk(SectionPos.blockToSectionCoord(origin.getX()), SectionPos.blockToSectionCoord(origin.getZ()))) { continue; @@ -826,12 +805,10 @@ private static void prepareTerrain(ProjectionFeed feed, PortalView portalView) { visible.add(section); } } - // Each schedule() submits exactly one runTask, and a runTask that finds the buffer pool empty - // re-queues its task without resubmitting, stranding it. Never queue more than there are free buffers. if (feed.terrain.lastBuildFrame != frameSequence) { feed.terrain.lastBuildFrame = frameSequence; feed.terrain.scheduledBuilds = 0; - recoverStrandedBuilds(feed.terrain, dispatcher); + recoverStrandedBuilds(feed.terrain, renderer, sections); } int buildSlots = Math.max(0, dispatcher.getFreeBufferCount() - dispatcher.getCompileQueueSize()); buildSlots = Math.min(buildSlots, Math.max(0, feed.compileBufferCount() - feed.terrain.scheduledBuilds)); @@ -847,7 +824,7 @@ private static void prepareTerrain(ProjectionFeed feed, PortalView portalView) { } } if (visibleCompiled && builds.isEmpty() && buildSlots > 0) { - for (SectionRenderDispatcher.RenderSection section : accessor.glass$getViewArea().sections) { + for (SectionRenderDispatcher.RenderSection section : sections) { if (canCompile(feed, section, chunkReadiness)) { builds.add(section); } @@ -861,8 +838,7 @@ private static void prepareTerrain(ProjectionFeed feed, PortalView portalView) { for (int i = 0; i < Math.min(buildSlots, builds.size()) && buildPreparationNanos < BUILD_PREPARATION_BUDGET_NANOS; i++) { SectionRenderDispatcher.RenderSection section = builds.get(i); long started = System.nanoTime(); - section.rebuildSectionAsync(regions); - section.setNotDirty(); + renderer.compileSection(section, regions); buildPreparationNanos += System.nanoTime() - started; feed.terrain.scheduledBuilds++; } @@ -871,12 +847,17 @@ private static void prepareTerrain(ProjectionFeed feed, PortalView portalView) { feed.terrainReadyFrames = terrainReady(feed) ? Math.min(2, feed.terrainReadyFrames + 1) : 0; } - private static void recoverStrandedBuilds(TerrainResources terrain, SectionRenderDispatcher dispatcher) { + private static void recoverStrandedBuilds(TerrainResources terrain, ProjectionLevelRenderer renderer, + Iterable sections) { + SectionRenderDispatcher dispatcher = renderer.sectionRenderDispatcher(); boolean idleWithQueue = dispatcher.getCompileQueueSize() > 0 && dispatcher.getFreeBufferCount() >= terrain.bufferCount; terrain.strandedFrames = idleWithQueue ? terrain.strandedFrames + 1 : 0; if (terrain.strandedFrames >= STRANDED_BUILD_FRAMES) { - // Cancelling marks the sections dirty again, so they are rescheduled on the next frame. dispatcher.clearCompileQueue(); + for (SectionRenderDispatcher.RenderSection section : sections) { + SectionPos pos = SectionPos.of(section.getSectionNode()); + renderer.setSectionDirty(pos.x(), pos.y(), pos.z()); + } terrain.strandedFrames = 0; } } @@ -885,7 +866,7 @@ private static void uploadTerrain(SectionRenderDispatcher dispatcher) { long started = System.nanoTime(); dispatcher.lock(); try { - dispatcher.uploadGlobalGeomBuffersToGPU(); + dispatcher.uploadTerrainBuffersToGpu(); } finally { dispatcher.unlock(); uploadNanos += System.nanoTime() - started; @@ -894,10 +875,11 @@ private static void uploadTerrain(SectionRenderDispatcher dispatcher) { private static boolean canCompile(ProjectionFeed feed, SectionRenderDispatcher.RenderSection section, Map chunkReadiness) { BlockPos origin = section.getRenderOrigin(); - return section.isDirty() + ProjectionLevelRenderer renderer = feed.renderer(); + return renderer.isSectionDirty(section) && chunkReadiness.computeIfAbsent(ChunkPos.pack(SectionPos.blockToSectionCoord(origin.getX()), SectionPos.blockToSectionCoord(origin.getZ())), packed -> chunkReady(feed, ChunkPos.unpack(packed))) - && section.hasAllNeighbors() + && renderer.hasAllNeighbors(section) && feed.level().getLightEngine().lightOnInColumn(SectionPos.getZeroNode(SectionPos.asLong(origin))); } @@ -905,7 +887,7 @@ private static boolean terrainReady(ProjectionFeed feed) { if (!feed.remoteScene.isComplete()) { return false; } - List sections = ((LevelRendererBufferAccessor) feed.renderer()).glass$getVisibleSections(); + List sections = feed.renderer().visibleSections(); if (sections.isEmpty()) { return false; } @@ -925,7 +907,8 @@ private static void renderFeed(Minecraft minecraft, DeltaTracker deltaTracker, P try (ProjectionRenderContext.Scope ignored = ProjectionRenderContext.enter(feed.renderer(), feed.camera, feed.target, feed.source.pos(), feed.level(), feed.lightTexture())) { feed.lightTexture().update(feed.camera, deltaTracker.getGameTimeDeltaPartialTick(false)); - feed.renderer().renderScene(feed.camera, new Matrix4f(portalView.projection()), deltaTracker); + feed.renderer().renderScene(feed.camera, new Matrix4f(portalView.projection()), + new Matrix4f(portalView.skyProjection()), deltaTracker); feed.ready = true; feed.available = true; feed.nextRetryFrame = 0L; @@ -952,8 +935,9 @@ private static PortalView configurePortalCamera( Quaternionf rotation = new Quaternionf().rotationY(yaw) .mul(frameRotation(look.cross(up), up, look.scale(-1))) .rotateX((float) Math.toRadians(-10)); - Matrix4f projection = new Matrix4f().perspective((float) Math.toRadians(85), feed.previewAspect, 0.05F, 1024.0F); - PortalView preview = new PortalView(position, rotation, projection, 512, Math.max(1, (int) (512 / feed.previewAspect))); + Matrix4f projection = new Matrix4f().perspective((float) Math.toRadians(85), feed.previewAspect, 1024.0F, 0.05F, + RenderSystem.getDevice().getDeviceInfo().isZZeroToOne()); + PortalView preview = new PortalView(position, rotation, projection, projection, 512, Math.max(1, (int) (512 / feed.previewAspect))); feed.camera.setPose(position, rotation); feed.camera.setProjection(projection); feed.cameraPosition = position; @@ -995,6 +979,7 @@ private static PortalView configurePortalCamera( PortalView portalView = new PortalView( dynamicPosition, cameraRotation, + clipToPlane(mainProjection, cameraRotation, dynamicPosition, destinationAnchor, destinationLook), mainProjection, targetSize.width(), targetSize.height() @@ -1005,6 +990,33 @@ private static PortalView configurePortalCamera( return portalView; } + private static Matrix4f clipToPlane(Matrix4f projection, Quaternionf cameraRotation, Vec3 cameraPosition, + Vec3 planePoint, Vec3 planeNormal) { + Vector3f normal = new Vector3f((float) planeNormal.x, (float) planeNormal.y, (float) planeNormal.z) + .rotate(new Quaternionf(cameraRotation).conjugate()); + float distance = (float) -planePoint.subtract(cameraPosition).dot(planeNormal); + if (distance > -PORTAL_CLIP_MIN_DISTANCE) { + return projection; + } + Vector4f plane = new Vector4f(normal, distance); + boolean zZeroToOne = RenderSystem.getDevice().getDeviceInfo().isZZeroToOne(); + float farNdc = zZeroToOne ? 0.0F : -1.0F; + Matrix4f inverse = projection.invert(new Matrix4f()); + float maxPlaneDistance = 1.0E-4F; + for (int corner = 0; corner < 4; corner++) { + Vector4f farCorner = inverse.transform(new Vector4f((corner & 1) == 0 ? -1.0F : 1.0F, + (corner & 2) == 0 ? -1.0F : 1.0F, farNdc, 1.0F)); + maxPlaneDistance = Math.max(maxPlaneDistance, plane.dot(farCorner)); + } + float scale = (1.0F - farNdc) / maxPlaneDistance; + Matrix4f clipped = new Matrix4f(projection); + clipped.m02(projection.m03() - scale * plane.x); + clipped.m12(projection.m13() - scale * plane.y); + clipped.m22(projection.m23() - scale * plane.z); + clipped.m32(projection.m33() - scale * plane.w); + return clipped; + } + private static void applyCamera( ProjectionCamera camera, ClientLevel level, @@ -1058,7 +1070,7 @@ private static void markUnavailable(ProjectionFeed feed, RenderTarget mainTarget feed.available = false; if (clear && feed.target != null) { RenderSystem.getDevice().createCommandEncoder().clearColorAndDepthTextures( - feed.target.getColorTexture(), 0xFF000000, feed.target.getDepthTexture(), 1.0); + feed.target.getColorTexture(), new Vector4f(0.0F, 0.0F, 0.0F, 1.0F), feed.target.getDepthTexture(), 0.0); } } @@ -1235,12 +1247,14 @@ private record PortalView( Vec3 cameraPosition, Quaternionf cameraRotation, Matrix4f projection, + Matrix4f skyProjection, int targetWidth, int targetHeight ) { private PortalView { cameraRotation = new Quaternionf(cameraRotation); projection = new Matrix4f(projection); + skyProjection = new Matrix4f(skyProjection); } } diff --git a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSections.java b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSections.java index a7f6581..94d75ef 100644 --- a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSections.java +++ b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSections.java @@ -1,7 +1,5 @@ package dev.imb11.client.renderer.projection; -import dev.imb11.mixins.LevelRendererBufferAccessor; -import dev.imb11.mixins.ViewAreaInvoker; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.world.level.ChunkPos; import net.minecraft.client.multiplayer.ClientLevel; @@ -16,19 +14,18 @@ private ProjectionSections() { } public static @Nullable SectionRenderDispatcher.RenderSection find(LevelRenderer renderer, int x, int y, int z) { - ViewArea area = ((LevelRendererBufferAccessor) renderer).glass$getViewArea(); + ViewArea area = renderer.viewArea(); if (area == null) { return null; } BlockPos origin = SectionPos.of(x, y, z).origin(); - SectionRenderDispatcher.RenderSection section = ((ViewAreaInvoker) area).glass$getRenderSectionAt(origin); + SectionRenderDispatcher.RenderSection section = area.getRenderSectionAt(origin); return section != null && section.getRenderOrigin().equals(origin) ? section : null; } public static void markDirty(LevelRenderer renderer, int x, int y, int z) { - SectionRenderDispatcher.RenderSection section = find(renderer, x, y, z); - if (section != null) { - section.setDirty(false); + if (renderer instanceof ProjectionLevelRenderer projection && find(renderer, x, y, z) != null) { + projection.setSectionDirty(x, y, z); } } @@ -39,18 +36,12 @@ public static void markColumnDirty(LevelRenderer renderer, ClientLevel level, Ch } public static void resetColumn(LevelRenderer renderer, ClientLevel level, ChunkPos chunk) { - boolean reset = false; for (int y = level.getMinSectionY(); y <= level.getMaxSectionY(); y++) { SectionRenderDispatcher.RenderSection section = find(renderer, chunk.x(), y, chunk.z()); if (section != null) { - BlockPos origin = section.getRenderOrigin(); section.reset(); - section.setDirty(false); - reset = true; + markDirty(renderer, chunk.x(), y, chunk.z()); } } - if (reset) { - renderer.needsUpdate(); - } } } diff --git a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSkyTarget.java b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSkyTarget.java new file mode 100644 index 0000000..d847cfd --- /dev/null +++ b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSkyTarget.java @@ -0,0 +1,37 @@ +package dev.imb11.client.renderer.projection; + +import com.mojang.blaze3d.GpuFormat; +import com.mojang.blaze3d.pipeline.RenderTarget; +import com.mojang.blaze3d.textures.GpuTexture; +import com.mojang.blaze3d.textures.GpuTextureView; +import net.minecraft.client.Minecraft; + +final class ProjectionSkyTarget extends RenderTarget { + ProjectionSkyTarget() { + super("GLASS projection sky", true, GpuFormat.RGBA8_UNORM); + } + + private static RenderTarget current() { + return Minecraft.getInstance().gameRenderer.mainRenderTarget(); + } + + @Override + public GpuTexture getColorTexture() { + return current().getColorTexture(); + } + + @Override + public GpuTextureView getColorTextureView() { + return current().getColorTextureView(); + } + + @Override + public GpuTexture getDepthTexture() { + return current().getDepthTexture(); + } + + @Override + public GpuTextureView getDepthTextureView() { + return current().getDepthTextureView(); + } +} diff --git a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSurfaceRenderer.java b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSurfaceRenderer.java index 9e011ac..460f938 100644 --- a/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSurfaceRenderer.java +++ b/glass/src/main/java/dev/imb11/client/renderer/projection/ProjectionSurfaceRenderer.java @@ -4,9 +4,10 @@ import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.PrimitiveTopology; +import com.mojang.blaze3d.pipeline.BindGroupLayout; +import net.minecraft.client.renderer.BindGroupLayouts; import dev.imb11.projection.ProjectionSurface; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; @@ -59,15 +60,16 @@ private static RenderPipeline pipeline(boolean loading) { var builder = RenderPipeline.builder() .withLocation(Identifier.fromNamespaceAndPath("glass", loading ? "projection_loading" : "projection_surface")) .withVertexShader(SHADER_LOCATION).withFragmentShader(SHADER_LOCATION) - .withVertexFormat(DefaultVertexFormat.POSITION_TEX_COLOR, VertexFormat.Mode.QUADS) - .withUniform("DynamicTransforms", UniformType.UNIFORM_BUFFER) - .withUniform("Projection", UniformType.UNIFORM_BUFFER) - .withUniform("SurfaceParameters", UniformType.UNIFORM_BUFFER) - .withDepthStencilState(new DepthStencilState(CompareOp.LESS_THAN_OR_EQUAL, !loading)) + .withVertexBinding(0, DefaultVertexFormat.POSITION_TEX_COLOR) + .withPrimitiveTopology(PrimitiveTopology.QUADS) + .withBindGroupLayout(BindGroupLayouts.MATRICES_PROJECTION) + .withDepthStencilState(new DepthStencilState(CompareOp.GREATER_THAN_OR_EQUAL, !loading)) .withCull(false); + var surfaceLayout = BindGroupLayout.builder().withUniform("SurfaceParameters", UniformType.UNIFORM_BUFFER); for (String sampler : PROJECTION_SAMPLERS) { - builder.withSampler(sampler); + surfaceLayout.withSampler(sampler); } + builder.withBindGroupLayout(surfaceLayout.build()); if (loading) { builder.withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)); } @@ -226,10 +228,7 @@ private static CachedMesh build(BlockPos projectorPos, ProjectionSurface surface if (faceGeometries.isEmpty()) { return new CachedMesh(surface, loading, projectionMask, null); } - BufferBuilder builder = Tesselator.getInstance().begin( - VertexFormat.Mode.QUADS, - DefaultVertexFormat.POSITION_TEX_COLOR - ); + BufferBuilder builder = ProjectionMesh.begin(DefaultVertexFormat.POSITION_TEX_COLOR); for (FaceGeometry geometry : faceGeometries) { emitFace(builder, surface.origin(), geometry, edgeNormals); } diff --git a/glass/src/main/java/dev/imb11/client/renderer/projection/RenderResources.java b/glass/src/main/java/dev/imb11/client/renderer/projection/RenderResources.java index 9d26159..107d270 100644 --- a/glass/src/main/java/dev/imb11/client/renderer/projection/RenderResources.java +++ b/glass/src/main/java/dev/imb11/client/renderer/projection/RenderResources.java @@ -1,20 +1,10 @@ package dev.imb11.client.renderer.projection; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.ByteBufferBuilder; -import dev.imb11.mixins.BufferSourceAccessor; -import dev.imb11.mixins.LevelRendererBufferAccessor; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderBuffers; -import net.minecraft.client.renderer.chunk.ChunkSectionLayer; import net.minecraft.client.renderer.SectionBufferBuilderPack; import net.minecraft.client.renderer.SectionBufferBuilderPool; -import java.util.Collections; -import java.util.IdentityHashMap; -import java.util.Set; - public final class RenderResources { private RenderResources() { } @@ -28,14 +18,8 @@ public static void runOnRenderThread(Runnable operation) { } public static void closeBufferBuilders(RenderBuffers renderBuffers) { - Set builders = Collections.newSetFromMap(new IdentityHashMap<>()); - SectionBufferBuilderPack fixed = renderBuffers.fixedBufferPack(); - for (ChunkSectionLayer renderType : ChunkSectionLayer.values()) { - builders.add(fixed.buffer(renderType)); - } - addBuilders(builders, renderBuffers.bufferSource()); - addBuilders(builders, renderBuffers.crumblingBufferSource()); - builders.forEach(ByteBufferBuilder::close); + renderBuffers.fixedBufferPack().close(); + renderBuffers.stagedVertexBuffer().close(); } public static void closeAvailablePoolBuffers(SectionBufferBuilderPool pool) { @@ -44,10 +28,4 @@ public static void closeAvailablePoolBuffers(SectionBufferBuilderPool pool) { pack.close(); } } - - private static void addBuilders(Set builders, MultiBufferSource.BufferSource source) { - BufferSourceAccessor accessor = (BufferSourceAccessor) source; - builders.add(accessor.glass$getSharedBuffer()); - builders.addAll(accessor.glass$getFixedBuffers().values()); - } } diff --git a/glass/src/main/java/dev/imb11/debug/FeedDiagnostics.java b/glass/src/main/java/dev/imb11/debug/FeedDiagnostics.java index ff47dd0..41bd622 100644 --- a/glass/src/main/java/dev/imb11/debug/FeedDiagnostics.java +++ b/glass/src/main/java/dev/imb11/debug/FeedDiagnostics.java @@ -1,8 +1,7 @@ package dev.imb11.debug; -import dev.imb11.mixins.LevelRendererBufferAccessor; import dev.imb11.sync.ProjectionSource; -import net.minecraft.client.renderer.LevelRenderer; +import dev.imb11.client.renderer.projection.ProjectionLevelRenderer; import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; @@ -47,7 +46,7 @@ public record SectionStats( boolean compileQueueEmpty, String buildQueue ) { - public static SectionStats of(@Nullable LevelRenderer renderer, Predicate chunkReady) { + public static SectionStats of(@Nullable ProjectionLevelRenderer renderer, Predicate chunkReady) { if (renderer == null) { return new SectionStats(0, 0, 0, null, false, false, "none"); } @@ -55,9 +54,9 @@ public static SectionStats of(@Nullable LevelRenderer renderer, Predicate glass$getFixedBuffers(); -} diff --git a/glass/src/main/java/dev/imb11/mixins/ClientPacketListenerMixin.java b/glass/src/main/java/dev/imb11/mixins/ClientPacketListenerMixin.java index 4b4e910..6e0bb5f 100644 --- a/glass/src/main/java/dev/imb11/mixins/ClientPacketListenerMixin.java +++ b/glass/src/main/java/dev/imb11/mixins/ClientPacketListenerMixin.java @@ -1,15 +1,24 @@ package dev.imb11.mixins; import dev.imb11.client.remote.ProjectionChunkStorage; +import dev.imb11.client.renderer.projection.ProjectionRenderManager; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.network.protocol.game.ClientboundForgetLevelChunkPacket; +import net.minecraft.world.level.chunk.LevelChunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientPacketListener.class) abstract class ClientPacketListenerMixin { + @Inject(method = "enableChunkLight", at = @At("TAIL")) + private void glass$mirrorChunkLoaded(LevelChunk chunk, int x, int z, CallbackInfo ci) { + ProjectionRenderManager.onMainChunkLoaded(chunk.getPos()); + } + @Redirect(method = "queueLightRemoval", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;queueLightUpdate(Ljava/lang/Runnable;)V")) private void glass$retainProjectionLight(ClientLevel level, Runnable removal, ClientboundForgetLevelChunkPacket packet) { level.queueLightUpdate(() -> { diff --git a/glass/src/main/java/dev/imb11/mixins/GameRenderStateMixin.java b/glass/src/main/java/dev/imb11/mixins/GameRenderStateMixin.java new file mode 100644 index 0000000..aa58e66 --- /dev/null +++ b/glass/src/main/java/dev/imb11/mixins/GameRenderStateMixin.java @@ -0,0 +1,18 @@ +package dev.imb11.mixins; + +import dev.imb11.client.renderer.projection.ProjectionRenderContext; +import net.minecraft.client.renderer.state.GameRenderState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(GameRenderState.class) +abstract class GameRenderStateMixin { + @Inject(method = "useShaderTransparency", at = @At("HEAD"), cancellable = true) + private void glass$useForwardTransparency(CallbackInfoReturnable callbackInfo) { + if (ProjectionRenderContext.isActive()) { + callbackInfo.setReturnValue(false); + } + } +} diff --git a/glass/src/main/java/dev/imb11/mixins/GameRendererMixin.java b/glass/src/main/java/dev/imb11/mixins/GameRendererMixin.java index 743e64b..a5c9308 100644 --- a/glass/src/main/java/dev/imb11/mixins/GameRendererMixin.java +++ b/glass/src/main/java/dev/imb11/mixins/GameRendererMixin.java @@ -1,5 +1,6 @@ package dev.imb11.mixins; +import com.mojang.blaze3d.pipeline.RenderTarget; import dev.imb11.client.renderer.block.ProjectorBlockEntityRenderer; import dev.imb11.client.renderer.projection.ProjectionRenderContext; import dev.imb11.client.renderer.projection.ProjectionRenderManager; @@ -24,14 +25,22 @@ abstract class GameRendererMixin { } } + @Inject(method = "mainRenderTarget", at = @At("HEAD"), cancellable = true) + private void glass$projectionMainTarget(CallbackInfoReturnable callbackInfo) { + RenderTarget projectionTarget = ProjectionRenderContext.target(); + if (projectionTarget != null) { + callbackInfo.setReturnValue(projectionTarget); + } + } + @Inject(method = "renderLevel", at = @At("HEAD")) private void glass$renderProjectionBeforeMain(DeltaTracker deltaTracker, CallbackInfo callbackInfo) { ProjectionRenderManager.renderBeforeMain((GameRenderer) (Object) this, deltaTracker); } - @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lcom/mojang/blaze3d/resource/GraphicsResourceAllocator;Lnet/minecraft/client/DeltaTracker;ZLnet/minecraft/client/renderer/state/level/CameraRenderState;Lorg/joml/Matrix4fc;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lorg/joml/Vector4f;ZLnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;)V", shift = At.Shift.AFTER)) + @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;render(Lcom/mojang/blaze3d/resource/GraphicsResourceAllocator;Lnet/minecraft/client/DeltaTracker;ZLnet/minecraft/client/renderer/state/level/CameraRenderState;Lorg/joml/Matrix4fc;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lorg/joml/Vector4f;Z)V", shift = At.Shift.AFTER)) private void glass$renderProjectors(DeltaTracker deltaTracker, CallbackInfo callbackInfo) { - var state = ((GameRenderer) (Object) this).getGameRenderState().levelRenderState.cameraRenderState; + var state = ((GameRenderer) (Object) this).gameRenderState().levelRenderState.cameraRenderState; ProjectorBlockEntityRenderer.renderAll(new org.joml.Matrix4f(state.viewRotationMatrix)); } diff --git a/glass/src/main/java/dev/imb11/mixins/LevelExtractorMixin.java b/glass/src/main/java/dev/imb11/mixins/LevelExtractorMixin.java new file mode 100644 index 0000000..1bb797c --- /dev/null +++ b/glass/src/main/java/dev/imb11/mixins/LevelExtractorMixin.java @@ -0,0 +1,44 @@ +package dev.imb11.mixins; + +import dev.imb11.client.GlassClient; +import dev.imb11.client.renderer.block.ProjectorBlockEntityRenderer; +import dev.imb11.client.renderer.projection.ProjectionRenderManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.extract.LevelExtractor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LevelExtractor.class) +abstract class LevelExtractorMixin { + @Inject(method = "allChanged", at = @At("HEAD")) + private void glass$invalidateRenderState(CallbackInfo callbackInfo) { + if ((Object) this == Minecraft.getInstance().levelExtractor) { + GlassClient.invalidateRenderState(); + } + } + + @Inject(method = "extract", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;invalidateCompiledGeometry(Lnet/minecraft/client/multiplayer/ClientLevel;Lnet/minecraft/client/Options;Lnet/minecraft/client/Camera;Lnet/minecraft/client/color/block/BlockColors;)V", shift = At.Shift.AFTER)) + private void glass$mirrorMainRendererRebuild(CallbackInfo callbackInfo) { + if ((Object) this == Minecraft.getInstance().levelExtractor) { + ProjectorBlockEntityRenderer.onMainRendererRebuilt(); + ProjectionRenderManager.onMainRendererRebuilt(); + } + } + + @Inject(method = "setSectionDirty(IIIZ)V", at = @At("TAIL")) + private void glass$mirrorSectionDirty(int sectionX, int sectionY, int sectionZ, boolean playerChanged, + CallbackInfo callbackInfo) { + if ((Object) this == Minecraft.getInstance().levelExtractor) { + ProjectionRenderManager.onMainSectionDirty(sectionX, sectionY, sectionZ); + } + } + + @Inject(method = "onResourceManagerReload", at = @At("HEAD")) + private void glass$reload(CallbackInfo callbackInfo) { + if ((Object) this == Minecraft.getInstance().levelExtractor) { + GlassClient.onResourceReload(); + } + } +} diff --git a/glass/src/main/java/dev/imb11/mixins/LevelRendererBufferAccessor.java b/glass/src/main/java/dev/imb11/mixins/LevelRendererBufferAccessor.java index c4b383f..2a64a8f 100644 --- a/glass/src/main/java/dev/imb11/mixins/LevelRendererBufferAccessor.java +++ b/glass/src/main/java/dev/imb11/mixins/LevelRendererBufferAccessor.java @@ -1,29 +1,16 @@ package dev.imb11.mixins; import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.ViewArea; import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -import net.minecraft.world.level.block.entity.BlockEntity; -import java.util.Set; @Mixin(LevelRenderer.class) public interface LevelRendererBufferAccessor { - @Accessor("viewArea") - ViewArea glass$getViewArea(); - @Accessor("viewArea") void glass$setViewArea(ViewArea viewArea); - @Accessor("level") - void glass$setLevel(ClientLevel level); - - @Accessor("visibleSections") - ObjectArrayList glass$getVisibleSections(); - @Accessor("sectionRenderDispatcher") void glass$setSectionRenderDispatcher(SectionRenderDispatcher dispatcher); } diff --git a/glass/src/main/java/dev/imb11/mixins/LevelRendererMixin.java b/glass/src/main/java/dev/imb11/mixins/LevelRendererMixin.java deleted file mode 100644 index 94ea1e3..0000000 --- a/glass/src/main/java/dev/imb11/mixins/LevelRendererMixin.java +++ /dev/null @@ -1,74 +0,0 @@ -package dev.imb11.mixins; - -import dev.imb11.client.renderer.block.ProjectorBlockEntityRenderer; -import dev.imb11.client.GlassClient; -import dev.imb11.client.renderer.projection.ProjectionRenderContext; -import dev.imb11.client.renderer.projection.ProjectionRenderManager; -import net.minecraft.client.Camera; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(value = LevelRenderer.class, priority = 2000) -abstract class LevelRendererMixin { - @Inject(method = "tick", at = @At("TAIL")) - private void glass$mirrorMainRendererTick(CallbackInfo callbackInfo) { - ProjectionRenderManager.onMainRendererTick((LevelRenderer) (Object) this); - } - - @Inject(method = "allChanged", at = @At("HEAD")) - private void glass$invalidateRenderState(CallbackInfo callbackInfo) { - GlassClient.invalidateRenderState(); - } - - @Inject(method = "allChanged", at = @At("TAIL")) - private void glass$mirrorMainRendererRebuild(CallbackInfo callbackInfo) { - ProjectorBlockEntityRenderer.onMainRendererRebuilt((LevelRenderer) (Object) this); - ProjectionRenderManager.onMainRendererRebuilt((LevelRenderer) (Object) this); - } - - @Inject(method = "setSectionDirty(IIIZ)V", at = @At("TAIL")) - private void glass$mirrorSectionDirty( - int sectionX, - int sectionY, - int sectionZ, - boolean playerChanged, - CallbackInfo callbackInfo - ) { - ProjectionRenderManager.onMainSectionDirty( - (LevelRenderer) (Object) this, - sectionX, - sectionY, - sectionZ - ); - } - - @Inject(method = "onChunkReadyToRender", at = @At("TAIL")) - private void glass$mirrorChunkLoaded(ChunkPos chunkPos, CallbackInfo callbackInfo) { - ProjectionRenderManager.onMainChunkLoaded((LevelRenderer) (Object) this, chunkPos); - } - @Inject(method = "onResourceManagerReload", at = @At("HEAD")) - private void glass$reload(CallbackInfo callbackInfo) { - if ((Object) this == Minecraft.getInstance().levelRenderer) { - GlassClient.onResourceReload(); - } - } - - @Inject(method = "extractVisibleBlockEntities", at = @At("HEAD"), cancellable = true) - private void glass$extractProjectionBlockEntities(Camera camera, float partialTick, - net.minecraft.client.renderer.state.level.LevelRenderState state, CallbackInfo callbackInfo) { - if ((Object) this instanceof dev.imb11.client.renderer.projection.ProjectionLevelRenderer renderer) { - renderer.extractProjectionBlockEntities(partialTick, state); - callbackInfo.cancel(); - } - } -} diff --git a/glass/src/main/java/dev/imb11/mixins/MinecraftMixin.java b/glass/src/main/java/dev/imb11/mixins/MinecraftMixin.java deleted file mode 100644 index 5980aa7..0000000 --- a/glass/src/main/java/dev/imb11/mixins/MinecraftMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package dev.imb11.mixins; - -import com.mojang.blaze3d.pipeline.RenderTarget; -import dev.imb11.client.renderer.projection.ProjectionRenderContext; -import net.minecraft.client.Minecraft; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Minecraft.class) -abstract class MinecraftMixin { - @Inject(method = "getMainRenderTarget", at = @At("HEAD"), cancellable = true) - private void glass$projectionMainTarget(CallbackInfoReturnable callbackInfo) { - RenderTarget projectionTarget = ProjectionRenderContext.target(); - if (projectionTarget != null) { - callbackInfo.setReturnValue(projectionTarget); - } - } - - @Inject(method = "useShaderTransparency", at = @At("HEAD"), cancellable = true) - private static void glass$useForwardTransparency(CallbackInfoReturnable callbackInfo) { - if (ProjectionRenderContext.isActive()) { - callbackInfo.setReturnValue(false); - } - } -} diff --git a/glass/src/main/java/dev/imb11/mixins/ProjectionRendererAccessor.java b/glass/src/main/java/dev/imb11/mixins/ProjectionRendererAccessor.java index 28536fb..4ba923b 100644 --- a/glass/src/main/java/dev/imb11/mixins/ProjectionRendererAccessor.java +++ b/glass/src/main/java/dev/imb11/mixins/ProjectionRendererAccessor.java @@ -3,18 +3,21 @@ import com.mojang.blaze3d.buffers.GpuBufferSlice; import com.mojang.blaze3d.framegraph.FrameGraphBuilder; import net.minecraft.client.CloudStatus; -import net.minecraft.client.DeltaTracker; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelTargetBundle; +import net.minecraft.client.renderer.RenderBuffers; import net.minecraft.client.renderer.SkyRenderer; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.SubmitNodeStorage; import net.minecraft.client.renderer.chunk.ChunkSectionsToRender; -import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.feature.FeatureRenderDispatcher; +import net.minecraft.client.renderer.state.OptionsRenderState; import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.client.renderer.state.level.LevelRenderState; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4fc; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Invoker; @@ -23,19 +26,37 @@ public interface ProjectionRendererAccessor { @Accessor("targets") LevelTargetBundle glass$targets(); + @Accessor("submitNodeStorage") + SubmitNodeStorage glass$submitNodeStorage(); + @Accessor("skyRenderer") void glass$skyRenderer(SkyRenderer renderer); - @Accessor("ticks") - void glass$ticks(int ticks); + @Mutable + @Accessor("renderBuffers") + void glass$renderBuffers(RenderBuffers buffers); + + @Mutable + @Accessor("featureRenderDispatcher") + void glass$featureRenderDispatcher(FeatureRenderDispatcher dispatcher); + + @Mutable + @Accessor("levelRenderState") + void glass$levelRenderState(LevelRenderState state); + + @Mutable + @Accessor("optionsRenderState") + void glass$optionsRenderState(OptionsRenderState state); + + @Invoker("submitFeatures") + void glass$submitFeatures(LevelRenderState state, SubmitNodeCollector collector, boolean outline); @Invoker("addSkyPass") void glass$skyPass(FrameGraphBuilder frame, CameraRenderState camera, GpuBufferSlice fog); @Invoker("addMainPass") - void glass$mainPass(FrameGraphBuilder frame, Frustum frustum, Matrix4fc modelView, GpuBufferSlice fog, - boolean outline, LevelRenderState state, DeltaTracker delta, ProfilerFiller profiler, - ChunkSectionsToRender chunks); + void glass$mainPass(FrameGraphBuilder frame, FeatureRenderDispatcher.PreparedFrame features, GpuBufferSlice fog, + LevelRenderState state, ProfilerFiller profiler, ChunkSectionsToRender chunks); @Invoker("addCloudsPass") void glass$cloudsPass(FrameGraphBuilder frame, CloudStatus status, Vec3 camera, long time, diff --git a/glass/src/main/java/dev/imb11/mixins/ViewAreaAccessor.java b/glass/src/main/java/dev/imb11/mixins/ViewAreaAccessor.java new file mode 100644 index 0000000..f039c75 --- /dev/null +++ b/glass/src/main/java/dev/imb11/mixins/ViewAreaAccessor.java @@ -0,0 +1,13 @@ +package dev.imb11.mixins; + +import net.minecraft.client.RotatingSectionStorage; +import net.minecraft.client.renderer.ViewArea; +import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ViewArea.class) +public interface ViewAreaAccessor { + @Accessor("sections") + RotatingSectionStorage glass$getSections(); +} diff --git a/glass/src/main/java/dev/imb11/mixins/ViewAreaInvoker.java b/glass/src/main/java/dev/imb11/mixins/ViewAreaInvoker.java deleted file mode 100644 index e492e74..0000000 --- a/glass/src/main/java/dev/imb11/mixins/ViewAreaInvoker.java +++ /dev/null @@ -1,13 +0,0 @@ -package dev.imb11.mixins; - -import net.minecraft.client.renderer.ViewArea; -import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; -import net.minecraft.core.BlockPos; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(ViewArea.class) -public interface ViewAreaInvoker { - @Invoker("getRenderSectionAt") - SectionRenderDispatcher.RenderSection glass$getRenderSectionAt(BlockPos pos); -} diff --git a/glass/src/main/java/dev/imb11/mixins/compat/SodiumWorldRendererMixin.java b/glass/src/main/java/dev/imb11/mixins/compat/SodiumWorldRendererMixin.java index 525a665..05a0b85 100644 --- a/glass/src/main/java/dev/imb11/mixins/compat/SodiumWorldRendererMixin.java +++ b/glass/src/main/java/dev/imb11/mixins/compat/SodiumWorldRendererMixin.java @@ -3,7 +3,6 @@ import dev.imb11.client.renderer.projection.ProjectionRenderContext; import dev.imb11.client.renderer.projection.ProjectionRenderManager; import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer; -import net.minecraft.client.Minecraft; import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; @@ -25,7 +24,7 @@ abstract class SodiumWorldRendererMixin { @Inject(method = "scheduleRebuildForChunk", at = @At("TAIL")) private void glass$mirrorSectionRebuild(int x, int y, int z, boolean important, CallbackInfo callbackInfo) { if ((Object) this == SodiumWorldRenderer.instanceNullable()) { - ProjectionRenderManager.onMainSectionDirty(Minecraft.getInstance().levelRenderer, x, y, z); + ProjectionRenderManager.onMainSectionDirty(x, y, z); } } } diff --git a/glass/src/main/resources/META-INF/neoforge.mods.toml b/glass/src/main/resources/META-INF/neoforge.mods.toml index 5b6138d..529fcf0 100644 --- a/glass/src/main/resources/META-INF/neoforge.mods.toml +++ b/glass/src/main/resources/META-INF/neoforge.mods.toml @@ -9,7 +9,7 @@ displayName="${mod_name}" authors="IMB11" credits="Block models and textures by thepigcat" description="${mod_description}" -logoFile="assets/glass/icon.png" +iconFile="assets/glass/icon.png" [[mixins]] config="glass.mixins.json" diff --git a/glass/src/main/resources/glass.mixins.json b/glass/src/main/resources/glass.mixins.json index 2774816..dd673df 100644 --- a/glass/src/main/resources/glass.mixins.json +++ b/glass/src/main/resources/glass.mixins.json @@ -11,19 +11,18 @@ "ServerChunkCacheMixin" ], "client": [ - "BufferSourceAccessor", "ClientChunkCacheMixin", "ClientLevelMixin", "ClientPacketListenerMixin", "compat.SodiumWorldRendererMixin", "GameRendererMixin", "LevelRendererBufferAccessor", - "LevelRendererMixin", - "MinecraftMixin", + "LevelExtractorMixin", + "GameRenderStateMixin", "RenderChunkRegionMixin", "RenderRegionCacheMixin", "TextureAtlasMixin", - "ViewAreaInvoker", + "ViewAreaAccessor", "ProjectionRendererAccessor" ], "injectors": { diff --git a/gradle/minecraft/26.2.versions.toml b/gradle/minecraft/26.2.versions.toml index e2705f2..cb0a20c 100644 --- a/gradle/minecraft/26.2.versions.toml +++ b/gradle/minecraft/26.2.versions.toml @@ -31,10 +31,14 @@ travelers-backpack-neoforge = "26.1.2-11.2.4-neoforge" trinkets = "4.1.0-beta.1+26.2" yacl-fabric = "3.9.6+26.2-fabric" yacl-neoforge = "3.9.7+26.2-neoforge" +sodium-fabric = "mc26.2-0.9.2-fabric" +sodium-neoforge = "mc26.2-0.9.2-neoforge" [libraries] iris-fabric = { module = "maven.modrinth:iris", version.ref = "iris-fabric" } iris-neoforge = { module = "maven.modrinth:iris", version.ref = "iris-neoforge" } +sodium-fabric = { module = "maven.modrinth:sodium", version.ref = "sodium-fabric" } +sodium-neoforge = { module = "maven.modrinth:sodium", version.ref = "sodium-neoforge" } accessories-fabric = { module = "io.wispforest:accessories-neoforge", version.ref = "accessories-fabric" } accessories-neoforge = { module = "io.wispforest:accessories-neoforge", version.ref = "accessories-neoforge" } cca-base = { module = "org.ladysnake.cardinal-components-api:cardinal-components-base", version.ref = "cca" } diff --git a/mru/src/main/java/cc/cassian/mru/client/util/HudUtils.java b/mru/src/main/java/cc/cassian/mru/client/util/HudUtils.java index e96d259..c946ab0 100644 --- a/mru/src/main/java/cc/cassian/mru/client/util/HudUtils.java +++ b/mru/src/main/java/cc/cassian/mru/client/util/HudUtils.java @@ -101,10 +101,10 @@ public static void blitSprite(GuiGraphicsExtractor guiGraphics, Identifier textu */ public static boolean shouldCancelRender(Minecraft mc, boolean enabled, boolean hideFromDebug) { //? if >26.1 { - /*if (mc.gui.hud.isHidden()) - *///?} else { - if (mc.options.hideGui) - //?} + if (mc.gui.hud.isHidden()) + //?} else { + /*if (mc.options.hideGui) + *///?} return true; if (!enabled) return true; if (hideFromDebug) { @@ -127,10 +127,10 @@ public static boolean shouldCancelRender(Minecraft mc, boolean enabled, boolean public static void setScreen(Function screenConstructor) { Minecraft mc = Minecraft.getInstance(); //? if >26.1 { - /*Screen parent = mc.gui.screen(); - *///?} else { - Screen parent = mc.screen; - //?} + Screen parent = mc.gui.screen(); + //?} else { + /*Screen parent = mc.screen; + *///?} HudUtils.setScreen(screenConstructor.apply(parent)); } @@ -140,10 +140,10 @@ public static void setScreen(Function screenConstructor) { public static void setScreen(Screen screen) { Minecraft mc = Minecraft.getInstance(); //? if >26.1 { - /*mc.gui.setScreen(screen); - *///?} else { - mc.setScreen(screen); - //?} + mc.gui.setScreen(screen); + //?} else { + /*mc.setScreen(screen); + *///?} } /** diff --git a/mru/src/main/java/cc/cassian/mru/compat/TrinketsCompat.java b/mru/src/main/java/cc/cassian/mru/compat/TrinketsCompat.java index 5be5854..43175dd 100644 --- a/mru/src/main/java/cc/cassian/mru/compat/TrinketsCompat.java +++ b/mru/src/main/java/cc/cassian/mru/compat/TrinketsCompat.java @@ -10,8 +10,8 @@ import eu.pb4.trinkets.api.TrinketsApi; //?} //? if <26.2 { -import net.minecraft.util.Tuple; -//?} +/*import net.minecraft.util.Tuple; +*///?} import net.minecraft.world.entity.player.Player; import java.util.function.Consumer; diff --git a/mru/src/main/java/cc/cassian/mru/fabric/datagen/MultiversionedBlockTagsProvider.java b/mru/src/main/java/cc/cassian/mru/fabric/datagen/MultiversionedBlockTagsProvider.java index 304fb90..6eff006 100644 --- a/mru/src/main/java/cc/cassian/mru/fabric/datagen/MultiversionedBlockTagsProvider.java +++ b/mru/src/main/java/cc/cassian/mru/fabric/datagen/MultiversionedBlockTagsProvider.java @@ -6,20 +6,20 @@ import cc.cassian.mru.util.ItemLikeEntry; //~ if >=26.2 'cc.cassian.mru.util'->'net.minecraft.references' -import cc.cassian.mru.util.BlockItemId; +import net.minecraft.references.BlockItemId; import cc.cassian.mru.util.Identifiable; //~ if >=26.2 'cc.cassian.mru.util'->'net.minecraft.tags' -import cc.cassian.mru.util.BlockItemTagId; +import net.minecraft.tags.BlockItemTagId; import cc.cassian.mru.util.CommonUtils; import net.fabricmc.fabric.api.datagen.v1.FabricPackOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagsProvider; import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; //? if >=26.2 { -/*import net.minecraft.core.registries.BuiltInRegistries; -*///?} else if >26 { -import net.minecraft.data.tags.TagAppender; - //?} +import net.minecraft.core.registries.BuiltInRegistries; +//?} else if >26 { +/*import net.minecraft.data.tags.TagAppender; + *///?} import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagBuilder; @@ -38,8 +38,8 @@ public MultiversionedBlockTagsProvider(FabricPackOutput output, CompletableFutur public class MultiversionedBlockTagBuilder { //? if >1.21.2 && <26.2 { - private TagAppender valueLookupBuilder; - //?} + /*private TagAppender valueLookupBuilder; + *///?} //? if <1.21.2 { /*private FabricTagsProvider.FabricTagBuilder valueLookupBuilder; *///?} @@ -48,8 +48,8 @@ public class MultiversionedBlockTagBuilder { public MultiversionedBlockTagBuilder(TagKey tag) { //? if >1.21.2 && <26.2 { - this.valueLookupBuilder = valueLookupBuilder(tag); - //?} + /*this.valueLookupBuilder = valueLookupBuilder(tag); + *///?} //? if <1.21.2 { /*this.valueLookupBuilder = getOrCreateTagBuilder(tag); *///?} @@ -59,10 +59,10 @@ public MultiversionedBlockTagBuilder(TagKey tag) { public MultiversionedBlockTagBuilder add(Block block) { //? if >=26.2 { - /*rawBuilder = rawBuilder.addElement(BuiltInRegistries.BLOCK.getKey(block)); - *///?} else { - valueLookupBuilder = valueLookupBuilder.add(block); - //?} + rawBuilder = rawBuilder.addElement(BuiltInRegistries.BLOCK.getKey(block)); + //?} else { + /*valueLookupBuilder = valueLookupBuilder.add(block); + *///?} return this; } @@ -104,12 +104,12 @@ public MultiversionedBlockTagBuilder addOptionalTag(BlockItemTagId blockItemTagI public MultiversionedBlockTagBuilder add(Block... blocks) { //? if >=26.2 { - /*for (Block block : blocks) { + for (Block block : blocks) { rawBuilder = rawBuilder.addElement(BuiltInRegistries.BLOCK.getKey(block)); } - *///?} else { - valueLookupBuilder = valueLookupBuilder.add(blocks); - //?} + //?} else { + /*valueLookupBuilder = valueLookupBuilder.add(blocks); + *///?} return this; } diff --git a/mru/src/main/java/cc/cassian/mru/fabric/datagen/MultiversionedItemTagsProvider.java b/mru/src/main/java/cc/cassian/mru/fabric/datagen/MultiversionedItemTagsProvider.java index f76162f..ca72a48 100644 --- a/mru/src/main/java/cc/cassian/mru/fabric/datagen/MultiversionedItemTagsProvider.java +++ b/mru/src/main/java/cc/cassian/mru/fabric/datagen/MultiversionedItemTagsProvider.java @@ -7,20 +7,20 @@ import cc.cassian.mru.util.ItemLikeEntry; //~ if >=26.2 'cc.cassian.mru.util'->'net.minecraft.references' -import cc.cassian.mru.util.BlockItemId; +import net.minecraft.references.BlockItemId; import cc.cassian.mru.util.Identifiable; //~ if >=26.2 'cc.cassian.mru.util'->'net.minecraft.tags' -import cc.cassian.mru.util.BlockItemTagId; +import net.minecraft.tags.BlockItemTagId; import cc.cassian.mru.util.CommonUtils; import net.fabricmc.fabric.api.datagen.v1.FabricPackOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagsProvider; import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; //? if >=26.2 { -/*import net.minecraft.core.registries.BuiltInRegistries; -*///?} else if >26 { -import net.minecraft.data.tags.TagAppender; -//?} +import net.minecraft.core.registries.BuiltInRegistries; +//?} else if >26 { +/*import net.minecraft.data.tags.TagAppender; +*///?} import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagBuilder; @@ -41,8 +41,8 @@ public MultiversionedItemTagsProvider(FabricPackOutput output, CompletableFuture public class MultiversionedItemTagBuilder { //? if >1.21.2 && <26.2 { - private TagAppender valueLookupBuilder; - //?} + /*private TagAppender valueLookupBuilder; + *///?} //? if <1.21.2 { /*private FabricTagsProvider.FabricTagBuilder valueLookupBuilder; *///?} @@ -51,8 +51,8 @@ public class MultiversionedItemTagBuilder { public MultiversionedItemTagBuilder(TagKey tag) { //? if >1.21.2 && <26.2 { - this.valueLookupBuilder = valueLookupBuilder(tag); - //?} + /*this.valueLookupBuilder = valueLookupBuilder(tag); + *///?} //? if <1.21.2 { /*this.valueLookupBuilder = getOrCreateTagBuilder(tag); *///?} @@ -62,10 +62,10 @@ public MultiversionedItemTagBuilder(TagKey tag) { public MultiversionedItemTagBuilder add(Item item) { //? if >=26.2 { - /*rawBuilder = rawBuilder.addElement(BuiltInRegistries.ITEM.getKey(item)); - *///?} else { - valueLookupBuilder = valueLookupBuilder.add(item); - //?} + rawBuilder = rawBuilder.addElement(BuiltInRegistries.ITEM.getKey(item)); + //?} else { + /*valueLookupBuilder = valueLookupBuilder.add(item); + *///?} return this; } @@ -110,12 +110,12 @@ public MultiversionedItemTagBuilder addOptionalTag(TagKey itemTagKey) { public MultiversionedItemTagBuilder add(Item... items) { //? if >=26.2 { - /*for (Item item : items) { + for (Item item : items) { rawBuilder = rawBuilder.addElement(BuiltInRegistries.ITEM.getKey(item)); } - *///?} else { - valueLookupBuilder = valueLookupBuilder.add(items); - //?} + //?} else { + /*valueLookupBuilder = valueLookupBuilder.add(items); + *///?} return this; } diff --git a/mru/src/main/java/cc/cassian/mru/tags/CommonBlockItemTags.java b/mru/src/main/java/cc/cassian/mru/tags/CommonBlockItemTags.java index 90d7c9a..d8b3af8 100644 --- a/mru/src/main/java/cc/cassian/mru/tags/CommonBlockItemTags.java +++ b/mru/src/main/java/cc/cassian/mru/tags/CommonBlockItemTags.java @@ -19,7 +19,7 @@ import cc.cassian.mru.util.CommonUtils; import net.minecraft.resources.Identifier; //~ if >=26.2 'cc.cassian.mru.util'->'net.minecraft.tags' -import cc.cassian.mru.util.BlockItemTagId; +import net.minecraft.tags.BlockItemTagId; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; diff --git a/mru/src/main/java/cc/cassian/mru/util/BlockItemId.java b/mru/src/main/java/cc/cassian/mru/util/BlockItemId.java index 8634413..9fa66b8 100644 --- a/mru/src/main/java/cc/cassian/mru/util/BlockItemId.java +++ b/mru/src/main/java/cc/cassian/mru/util/BlockItemId.java @@ -1,5 +1,5 @@ //? if <26.2 { -package cc.cassian.mru.util; +/*package cc.cassian.mru.util; import net.minecraft.core.registries.Registries; import net.minecraft.resources.Identifier; @@ -12,4 +12,4 @@ public static BlockItemId create(final Identifier blockId, final Identifier item return new BlockItemId(ResourceKey.create(Registries.BLOCK, blockId), ResourceKey.create(Registries.ITEM, itemId)); } } -//?} \ No newline at end of file +*///?} \ No newline at end of file diff --git a/mru/src/main/java/cc/cassian/mru/util/BlockItemTagId.java b/mru/src/main/java/cc/cassian/mru/util/BlockItemTagId.java index 391dcce..87bac40 100644 --- a/mru/src/main/java/cc/cassian/mru/util/BlockItemTagId.java +++ b/mru/src/main/java/cc/cassian/mru/util/BlockItemTagId.java @@ -1,5 +1,5 @@ //? if <26.2 { -package cc.cassian.mru.util; +/*package cc.cassian.mru.util; import net.minecraft.core.registries.Registries; import net.minecraft.resources.Identifier; @@ -16,4 +16,4 @@ public static BlockItemTagId create(final Identifier id) { return create(id, id); } } -//?} \ No newline at end of file +*///?} \ No newline at end of file diff --git a/mru/src/main/java/cc/cassian/mru/util/CommonRegistry.java b/mru/src/main/java/cc/cassian/mru/util/CommonRegistry.java index 75a2ddc..83790e9 100644 --- a/mru/src/main/java/cc/cassian/mru/util/CommonRegistry.java +++ b/mru/src/main/java/cc/cassian/mru/util/CommonRegistry.java @@ -11,7 +11,7 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; //~ if >=26.2 'cc.cassian.mru.util'->'net.minecraft.references' -import cc.cassian.mru.util.BlockItemId; +import net.minecraft.references.BlockItemId; import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.sounds.SoundEvent; diff --git a/mru/src/main/java/cc/cassian/mru/util/ItemLikeEntry.java b/mru/src/main/java/cc/cassian/mru/util/ItemLikeEntry.java index fa966cb..f4aa361 100644 --- a/mru/src/main/java/cc/cassian/mru/util/ItemLikeEntry.java +++ b/mru/src/main/java/cc/cassian/mru/util/ItemLikeEntry.java @@ -2,7 +2,7 @@ import net.minecraft.core.registries.Registries; //~ if >=26.2 'cc.cassian.mru.util'->'net.minecraft.references' -import cc.cassian.mru.util.BlockItemId; +import net.minecraft.references.BlockItemId; import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.world.item.Item; diff --git a/settings.gradle.kts b/settings.gradle.kts index cb796c3..8369efa 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -18,11 +18,11 @@ plugins { rootProject.name = "JavaEditionMods" val modTargets = mapOf( - "fog" to listOf("26.1.2", "26.2", "26.3"), - "mru" to listOf("26.1.2", "26.2", "26.3"), - "sounds" to listOf("26.1.2", "26.3"), - "shields" to listOf("26.3"), - "glass" to listOf("26.1.2") + "fog" to listOf("26.2", "26.3"), + "mru" to listOf("26.2", "26.3"), + "sounds" to listOf("26.3"), + "shields" to listOf("26.2", "26.3"), + "glass" to listOf("26.2") ) dependencyResolutionManagement { @@ -47,6 +47,6 @@ stonecutter { } } } - vcsVersion.set("26.1.2-fabric") + vcsVersion.set("26.2-fabric") } } diff --git a/shields/build.fabric.gradle.kts b/shields/build.fabric.gradle.kts index 3ad7ad1..1597bae 100644 --- a/shields/build.fabric.gradle.kts +++ b/shields/build.fabric.gradle.kts @@ -20,19 +20,6 @@ loom { } } -fabricApi { - configureDataGeneration { - outputDirectory = project.parent!!.file("src/main/generated") - addToResources = false - client = true - } -} - -loom.runs.named("datagen") { - configName = "${modMetadata.required("mod.name")} - ${project.minecraftVersion} - Fabric - Data Generation" - runDir(rootProject.file("run/${modMetadata.id}/${project.minecraftVersion}/fabric/datagen").relativeTo(project.projectDir).invariantSeparatorsPath) -} - stonecutter { replacements.string { direction = true diff --git a/shields/mod.properties b/shields/mod.properties index b7efed2..20d6749 100644 --- a/shields/mod.properties +++ b/shields/mod.properties @@ -5,6 +5,7 @@ mod.license=ARR mod.version=1.4.3 mod.group=dev.imb11.shields mod.required=mru +mod.datagen=true publish.modrinth=GPVR65Ju publish.curseforge=1169734 publish.dependencies.fabric=fabric-api,mru diff --git a/shields/src/generated/26.2/assets/shields/items/copper_shield.json b/shields/src/generated/26.2/assets/shields/items/copper_shield.json new file mode 100644 index 0000000..e740d1c --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/copper_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/copper_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:copper_shield", + "no_pattern_texture": "shields:copper_shield_base_nopattern", + "texture": "shields:copper_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/copper_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:copper_shield", + "no_pattern_texture": "shields:copper_shield_base_nopattern", + "texture": "shields:copper_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/copper_shield_plating.json b/shields/src/generated/26.2/assets/shields/items/copper_shield_plating.json new file mode 100644 index 0000000..4525d56 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/copper_shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/diamond_shield.json b/shields/src/generated/26.2/assets/shields/items/diamond_shield.json new file mode 100644 index 0000000..688bad4 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/diamond_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/diamond_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:diamond_shield", + "no_pattern_texture": "shields:diamond_shield_base_nopattern", + "texture": "shields:diamond_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/diamond_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:diamond_shield", + "no_pattern_texture": "shields:diamond_shield_base_nopattern", + "texture": "shields:diamond_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/diamond_shield_plating.json b/shields/src/generated/26.2/assets/shields/items/diamond_shield_plating.json new file mode 100644 index 0000000..3d016e0 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/diamond_shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/gold_shield.json b/shields/src/generated/26.2/assets/shields/items/gold_shield.json new file mode 100644 index 0000000..b852b37 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/gold_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/gold_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:gold_shield", + "no_pattern_texture": "shields:gold_shield_base_nopattern", + "texture": "shields:gold_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/gold_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:gold_shield", + "no_pattern_texture": "shields:gold_shield_base_nopattern", + "texture": "shields:gold_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/gold_shield_plating.json b/shields/src/generated/26.2/assets/shields/items/gold_shield_plating.json new file mode 100644 index 0000000..2aca062 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/gold_shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/netherite_shield.json b/shields/src/generated/26.2/assets/shields/items/netherite_shield.json new file mode 100644 index 0000000..927cae5 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/netherite_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/netherite_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:netherite_shield", + "no_pattern_texture": "shields:netherite_shield_base_nopattern", + "texture": "shields:netherite_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/netherite_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:netherite_shield", + "no_pattern_texture": "shields:netherite_shield_base_nopattern", + "texture": "shields:netherite_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/netherite_shield_plating.json b/shields/src/generated/26.2/assets/shields/items/netherite_shield_plating.json new file mode 100644 index 0000000..0298199 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/netherite_shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/plated_copper_shield.json b/shields/src/generated/26.2/assets/shields/items/plated_copper_shield.json new file mode 100644 index 0000000..23cafd7 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/plated_copper_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_copper_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_copper_shield", + "no_pattern_texture": "shields:plated_copper_shield_base_nopattern", + "texture": "shields:plated_copper_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_copper_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_copper_shield", + "no_pattern_texture": "shields:plated_copper_shield_base_nopattern", + "texture": "shields:plated_copper_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/plated_diamond_shield.json b/shields/src/generated/26.2/assets/shields/items/plated_diamond_shield.json new file mode 100644 index 0000000..5eb0fba --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/plated_diamond_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_diamond_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_diamond_shield", + "no_pattern_texture": "shields:plated_diamond_shield_base_nopattern", + "texture": "shields:plated_diamond_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_diamond_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_diamond_shield", + "no_pattern_texture": "shields:plated_diamond_shield_base_nopattern", + "texture": "shields:plated_diamond_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/plated_gold_shield.json b/shields/src/generated/26.2/assets/shields/items/plated_gold_shield.json new file mode 100644 index 0000000..ae8682f --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/plated_gold_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_gold_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_gold_shield", + "no_pattern_texture": "shields:plated_gold_shield_base_nopattern", + "texture": "shields:plated_gold_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_gold_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_gold_shield", + "no_pattern_texture": "shields:plated_gold_shield_base_nopattern", + "texture": "shields:plated_gold_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/plated_netherite_shield.json b/shields/src/generated/26.2/assets/shields/items/plated_netherite_shield.json new file mode 100644 index 0000000..a7c2bd3 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/plated_netherite_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_netherite_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_netherite_shield", + "no_pattern_texture": "shields:plated_netherite_shield_base_nopattern", + "texture": "shields:plated_netherite_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_netherite_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_netherite_shield", + "no_pattern_texture": "shields:plated_netherite_shield_base_nopattern", + "texture": "shields:plated_netherite_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/plated_shield.json b/shields/src/generated/26.2/assets/shields/items/plated_shield.json new file mode 100644 index 0000000..5c2e790 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/plated_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_shield", + "no_pattern_texture": "shields:plated_shield_base_nopattern", + "texture": "shields:plated_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_shield", + "no_pattern_texture": "shields:plated_shield_base_nopattern", + "texture": "shields:plated_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/shield_plating.json b/shields/src/generated/26.2/assets/shields/items/shield_plating.json new file mode 100644 index 0000000..8828188 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/items/shield_repair_kit.json b/shields/src/generated/26.2/assets/shields/items/shield_repair_kit.json new file mode 100644 index 0000000..4debb84 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/items/shield_repair_kit.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/shield_repair_kit" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/lang/en_us.json b/shields/src/generated/26.2/assets/shields/lang/en_us.json new file mode 100644 index 0000000..696fad2 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/lang/en_us.json @@ -0,0 +1,178 @@ +{ + "emi.shields.anvil": "Combine With Anvil", + "enchantment.shields.bracing": "Bracing", + "enchantment.shields.bracing.desc": "Decreases the cooldown when the shield is disabled by an axe attack.", + "enchantment.shields.evokering": "Evokering", + "enchantment.shields.evokering.desc": "Introduces a chance for evoker fangs to spawn underneath attackers when blocking an attack.", + "enchantment.shields.launching": "Launching", + "enchantment.shields.launching.desc": "Gives a chance to launch attackers away when the shield is disabled.", + "enchantment.shields.lifebound": "Lifebound", + "enchantment.shields.lifebound.desc": "Gives a chance to absorb health from the attacker when blocking an attack.", + "enchantment.shields.momentum": "Momentum", + "enchantment.shields.momentum.desc": "Gives a brief speed boost when their shield is disabled.", + "enchantment.shields.momentum.tooltip_speed_for_x_seconds": "%1$ss of Speed III", + "item.shields.copper_shield": "Copper Shield", + "item.shields.copper_shield.black": "Black Copper Shield", + "item.shields.copper_shield.blue": "Blue Copper Shield", + "item.shields.copper_shield.brown": "Brown Copper Shield", + "item.shields.copper_shield.cyan": "Cyan Copper Shield", + "item.shields.copper_shield.gray": "Gray Copper Shield", + "item.shields.copper_shield.green": "Green Copper Shield", + "item.shields.copper_shield.light_blue": "Light Blue Copper Shield", + "item.shields.copper_shield.light_gray": "Light Gray Copper Shield", + "item.shields.copper_shield.lime": "Lime Copper Shield", + "item.shields.copper_shield.magenta": "Magenta Copper Shield", + "item.shields.copper_shield.orange": "Orange Copper Shield", + "item.shields.copper_shield.pink": "Pink Copper Shield", + "item.shields.copper_shield.purple": "Purple Copper Shield", + "item.shields.copper_shield.red": "Red Copper Shield", + "item.shields.copper_shield.white": "White Copper Shield", + "item.shields.copper_shield.yellow": "Yellow Copper Shield", + "item.shields.copper_shield_plating": "Copper Shield Plating", + "item.shields.diamond_shield": "Diamond Shield", + "item.shields.diamond_shield.black": "Black Diamond Shield", + "item.shields.diamond_shield.blue": "Blue Diamond Shield", + "item.shields.diamond_shield.brown": "Brown Diamond Shield", + "item.shields.diamond_shield.cyan": "Cyan Diamond Shield", + "item.shields.diamond_shield.gray": "Gray Diamond Shield", + "item.shields.diamond_shield.green": "Green Diamond Shield", + "item.shields.diamond_shield.light_blue": "Light Blue Diamond Shield", + "item.shields.diamond_shield.light_gray": "Light Gray Diamond Shield", + "item.shields.diamond_shield.lime": "Lime Diamond Shield", + "item.shields.diamond_shield.magenta": "Magenta Diamond Shield", + "item.shields.diamond_shield.orange": "Orange Diamond Shield", + "item.shields.diamond_shield.pink": "Pink Diamond Shield", + "item.shields.diamond_shield.purple": "Purple Diamond Shield", + "item.shields.diamond_shield.red": "Red Diamond Shield", + "item.shields.diamond_shield.white": "White Diamond Shield", + "item.shields.diamond_shield.yellow": "Yellow Diamond Shield", + "item.shields.diamond_shield_plating": "Diamond Shield Plating", + "item.shields.gold_shield": "Gold Shield", + "item.shields.gold_shield.black": "Black Gold Shield", + "item.shields.gold_shield.blue": "Blue Gold Shield", + "item.shields.gold_shield.brown": "Brown Gold Shield", + "item.shields.gold_shield.cyan": "Cyan Gold Shield", + "item.shields.gold_shield.gray": "Gray Gold Shield", + "item.shields.gold_shield.green": "Green Gold Shield", + "item.shields.gold_shield.light_blue": "Light Blue Gold Shield", + "item.shields.gold_shield.light_gray": "Light Gray Gold Shield", + "item.shields.gold_shield.lime": "Lime Gold Shield", + "item.shields.gold_shield.magenta": "Magenta Gold Shield", + "item.shields.gold_shield.orange": "Orange Gold Shield", + "item.shields.gold_shield.pink": "Pink Gold Shield", + "item.shields.gold_shield.purple": "Purple Gold Shield", + "item.shields.gold_shield.red": "Red Gold Shield", + "item.shields.gold_shield.white": "White Gold Shield", + "item.shields.gold_shield.yellow": "Yellow Gold Shield", + "item.shields.gold_shield_plating": "Gold Shield Plating", + "item.shields.netherite_shield": "Netherite Shield", + "item.shields.netherite_shield.black": "Black Netherite Shield", + "item.shields.netherite_shield.blue": "Blue Netherite Shield", + "item.shields.netherite_shield.brown": "Brown Netherite Shield", + "item.shields.netherite_shield.cyan": "Cyan Netherite Shield", + "item.shields.netherite_shield.gray": "Gray Netherite Shield", + "item.shields.netherite_shield.green": "Green Netherite Shield", + "item.shields.netherite_shield.light_blue": "Light Blue Netherite Shield", + "item.shields.netherite_shield.light_gray": "Light Gray Netherite Shield", + "item.shields.netherite_shield.lime": "Lime Netherite Shield", + "item.shields.netherite_shield.magenta": "Magenta Netherite Shield", + "item.shields.netherite_shield.orange": "Orange Netherite Shield", + "item.shields.netherite_shield.pink": "Pink Netherite Shield", + "item.shields.netherite_shield.purple": "Purple Netherite Shield", + "item.shields.netherite_shield.red": "Red Netherite Shield", + "item.shields.netherite_shield.white": "White Netherite Shield", + "item.shields.netherite_shield.yellow": "Yellow Netherite Shield", + "item.shields.netherite_shield_plating": "Netherite Shield Plating", + "item.shields.plated_copper_shield": "Plated Copper Shield", + "item.shields.plated_copper_shield.black": "Black Plated Copper Shield", + "item.shields.plated_copper_shield.blue": "Blue Plated Copper Shield", + "item.shields.plated_copper_shield.brown": "Brown Plated Copper Shield", + "item.shields.plated_copper_shield.cyan": "Cyan Plated Copper Shield", + "item.shields.plated_copper_shield.gray": "Gray Plated Copper Shield", + "item.shields.plated_copper_shield.green": "Green Plated Copper Shield", + "item.shields.plated_copper_shield.light_blue": "Light Blue Plated Copper Shield", + "item.shields.plated_copper_shield.light_gray": "Light Gray Plated Copper Shield", + "item.shields.plated_copper_shield.lime": "Lime Plated Copper Shield", + "item.shields.plated_copper_shield.magenta": "Magenta Plated Copper Shield", + "item.shields.plated_copper_shield.orange": "Orange Plated Copper Shield", + "item.shields.plated_copper_shield.pink": "Pink Plated Copper Shield", + "item.shields.plated_copper_shield.purple": "Purple Plated Copper Shield", + "item.shields.plated_copper_shield.red": "Red Plated Copper Shield", + "item.shields.plated_copper_shield.white": "White Plated Copper Shield", + "item.shields.plated_copper_shield.yellow": "Yellow Plated Copper Shield", + "item.shields.plated_diamond_shield": "Plated Diamond Shield", + "item.shields.plated_diamond_shield.black": "Black Plated Diamond Shield", + "item.shields.plated_diamond_shield.blue": "Blue Plated Diamond Shield", + "item.shields.plated_diamond_shield.brown": "Brown Plated Diamond Shield", + "item.shields.plated_diamond_shield.cyan": "Cyan Plated Diamond Shield", + "item.shields.plated_diamond_shield.gray": "Gray Plated Diamond Shield", + "item.shields.plated_diamond_shield.green": "Green Plated Diamond Shield", + "item.shields.plated_diamond_shield.light_blue": "Light Blue Plated Diamond Shield", + "item.shields.plated_diamond_shield.light_gray": "Light Gray Plated Diamond Shield", + "item.shields.plated_diamond_shield.lime": "Lime Plated Diamond Shield", + "item.shields.plated_diamond_shield.magenta": "Magenta Plated Diamond Shield", + "item.shields.plated_diamond_shield.orange": "Orange Plated Diamond Shield", + "item.shields.plated_diamond_shield.pink": "Pink Plated Diamond Shield", + "item.shields.plated_diamond_shield.purple": "Purple Plated Diamond Shield", + "item.shields.plated_diamond_shield.red": "Red Plated Diamond Shield", + "item.shields.plated_diamond_shield.white": "White Plated Diamond Shield", + "item.shields.plated_diamond_shield.yellow": "Yellow Plated Diamond Shield", + "item.shields.plated_gold_shield": "Plated Gold Shield", + "item.shields.plated_gold_shield.black": "Black Plated Gold Shield", + "item.shields.plated_gold_shield.blue": "Blue Plated Gold Shield", + "item.shields.plated_gold_shield.brown": "Brown Plated Gold Shield", + "item.shields.plated_gold_shield.cyan": "Cyan Plated Gold Shield", + "item.shields.plated_gold_shield.gray": "Gray Plated Gold Shield", + "item.shields.plated_gold_shield.green": "Green Plated Gold Shield", + "item.shields.plated_gold_shield.light_blue": "Light Blue Plated Gold Shield", + "item.shields.plated_gold_shield.light_gray": "Light Gray Plated Gold Shield", + "item.shields.plated_gold_shield.lime": "Lime Plated Gold Shield", + "item.shields.plated_gold_shield.magenta": "Magenta Plated Gold Shield", + "item.shields.plated_gold_shield.orange": "Orange Plated Gold Shield", + "item.shields.plated_gold_shield.pink": "Pink Plated Gold Shield", + "item.shields.plated_gold_shield.purple": "Purple Plated Gold Shield", + "item.shields.plated_gold_shield.red": "Red Plated Gold Shield", + "item.shields.plated_gold_shield.white": "White Plated Gold Shield", + "item.shields.plated_gold_shield.yellow": "Yellow Plated Gold Shield", + "item.shields.plated_netherite_shield": "Plated Netherite Shield", + "item.shields.plated_netherite_shield.black": "Black Plated Netherite Shield", + "item.shields.plated_netherite_shield.blue": "Blue Plated Netherite Shield", + "item.shields.plated_netherite_shield.brown": "Brown Plated Netherite Shield", + "item.shields.plated_netherite_shield.cyan": "Cyan Plated Netherite Shield", + "item.shields.plated_netherite_shield.gray": "Gray Plated Netherite Shield", + "item.shields.plated_netherite_shield.green": "Green Plated Netherite Shield", + "item.shields.plated_netherite_shield.light_blue": "Light Blue Plated Netherite Shield", + "item.shields.plated_netherite_shield.light_gray": "Light Gray Plated Netherite Shield", + "item.shields.plated_netherite_shield.lime": "Lime Plated Netherite Shield", + "item.shields.plated_netherite_shield.magenta": "Magenta Plated Netherite Shield", + "item.shields.plated_netherite_shield.orange": "Orange Plated Netherite Shield", + "item.shields.plated_netherite_shield.pink": "Pink Plated Netherite Shield", + "item.shields.plated_netherite_shield.purple": "Purple Plated Netherite Shield", + "item.shields.plated_netherite_shield.red": "Red Plated Netherite Shield", + "item.shields.plated_netherite_shield.white": "White Plated Netherite Shield", + "item.shields.plated_netherite_shield.yellow": "Yellow Plated Netherite Shield", + "item.shields.plated_shield": "Plated Shield", + "item.shields.plated_shield.black": "Black Plated Shield", + "item.shields.plated_shield.blue": "Blue Plated Shield", + "item.shields.plated_shield.brown": "Brown Plated Shield", + "item.shields.plated_shield.cyan": "Cyan Plated Shield", + "item.shields.plated_shield.gray": "Gray Plated Shield", + "item.shields.plated_shield.green": "Green Plated Shield", + "item.shields.plated_shield.light_blue": "Light Blue Plated Shield", + "item.shields.plated_shield.light_gray": "Light Gray Plated Shield", + "item.shields.plated_shield.lime": "Lime Plated Shield", + "item.shields.plated_shield.magenta": "Magenta Plated Shield", + "item.shields.plated_shield.orange": "Orange Plated Shield", + "item.shields.plated_shield.pink": "Pink Plated Shield", + "item.shields.plated_shield.purple": "Purple Plated Shield", + "item.shields.plated_shield.red": "Red Plated Shield", + "item.shields.plated_shield.white": "White Plated Shield", + "item.shields.plated_shield.yellow": "Yellow Plated Shield", + "item.shields.shield_patch_kit.no_damage": "Your shield isn't damaged enough to use the repair kit!", + "item.shields.shield_plating": "Shield Plating", + "item.shields.shield_repair_kit": "Shield Repair Kit", + "itemGroup.shields.shield_group": "Extra Shields", + "shields.attribute.axe": "When hit by Axe:", + "shields.attribute.seconds": " %ss Cooldown", + "tag.item.shields.shields": "Shields" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/copper_shield.json b/shields/src/generated/26.2/assets/shields/models/item/copper_shield.json new file mode 100644 index 0000000..a027bd2 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/copper_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/copper_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/copper_shield_blocking.json new file mode 100644 index 0000000..ea2bd7f --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/copper_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/copper_shield_plating.json b/shields/src/generated/26.2/assets/shields/models/item/copper_shield_plating.json new file mode 100644 index 0000000..6f38d04 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/copper_shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/diamond_shield.json b/shields/src/generated/26.2/assets/shields/models/item/diamond_shield.json new file mode 100644 index 0000000..134eef9 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/diamond_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/diamond_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/diamond_shield_blocking.json new file mode 100644 index 0000000..3430cba --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/diamond_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/diamond_shield_plating.json b/shields/src/generated/26.2/assets/shields/models/item/diamond_shield_plating.json new file mode 100644 index 0000000..2a6265e --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/diamond_shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/gold_shield.json b/shields/src/generated/26.2/assets/shields/models/item/gold_shield.json new file mode 100644 index 0000000..4484af2 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/gold_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/gold_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/gold_shield_blocking.json new file mode 100644 index 0000000..af45101 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/gold_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/gold_shield_plating.json b/shields/src/generated/26.2/assets/shields/models/item/gold_shield_plating.json new file mode 100644 index 0000000..150b8c2 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/gold_shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/netherite_shield.json b/shields/src/generated/26.2/assets/shields/models/item/netherite_shield.json new file mode 100644 index 0000000..20b3593 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/netherite_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/netherite_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/netherite_shield_blocking.json new file mode 100644 index 0000000..f6050d7 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/netherite_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/netherite_shield_plating.json b/shields/src/generated/26.2/assets/shields/models/item/netherite_shield_plating.json new file mode 100644 index 0000000..bf186f4 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/netherite_shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_copper_shield.json b/shields/src/generated/26.2/assets/shields/models/item/plated_copper_shield.json new file mode 100644 index 0000000..a027bd2 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_copper_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_copper_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/plated_copper_shield_blocking.json new file mode 100644 index 0000000..ea2bd7f --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_copper_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_diamond_shield.json b/shields/src/generated/26.2/assets/shields/models/item/plated_diamond_shield.json new file mode 100644 index 0000000..134eef9 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_diamond_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_diamond_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/plated_diamond_shield_blocking.json new file mode 100644 index 0000000..3430cba --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_diamond_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_gold_shield.json b/shields/src/generated/26.2/assets/shields/models/item/plated_gold_shield.json new file mode 100644 index 0000000..4484af2 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_gold_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_gold_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/plated_gold_shield_blocking.json new file mode 100644 index 0000000..af45101 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_gold_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_netherite_shield.json b/shields/src/generated/26.2/assets/shields/models/item/plated_netherite_shield.json new file mode 100644 index 0000000..20b3593 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_netherite_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_netherite_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/plated_netherite_shield_blocking.json new file mode 100644 index 0000000..f6050d7 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_netherite_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_shield.json b/shields/src/generated/26.2/assets/shields/models/item/plated_shield.json new file mode 100644 index 0000000..f32c238 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/plated_shield_blocking.json b/shields/src/generated/26.2/assets/shields/models/item/plated_shield_blocking.json new file mode 100644 index 0000000..bd0b5dd --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/plated_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/shield_plating.json b/shields/src/generated/26.2/assets/shields/models/item/shield_plating.json new file mode 100644 index 0000000..80a4770 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/assets/shields/models/item/shield_repair_kit.json b/shields/src/generated/26.2/assets/shields/models/item/shield_repair_kit.json new file mode 100644 index 0000000..108f5f6 --- /dev/null +++ b/shields/src/generated/26.2/assets/shields/models/item/shield_repair_kit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/shield_repair_kit" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/c/tags/item/tools/shield.json b/shields/src/generated/26.2/data/c/tags/item/tools/shield.json new file mode 100644 index 0000000..b8ed133 --- /dev/null +++ b/shields/src/generated/26.2/data/c/tags/item/tools/shield.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#shields:shields", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/minecraft/tags/enchantment/in_enchanting_table.json b/shields/src/generated/26.2/data/minecraft/tags/enchantment/in_enchanting_table.json new file mode 100644 index 0000000..9269c1d --- /dev/null +++ b/shields/src/generated/26.2/data/minecraft/tags/enchantment/in_enchanting_table.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "shields:momentum", + "required": false + }, + { + "id": "shields:bracing", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/minecraft/tags/enchantment/non_treasure.json b/shields/src/generated/26.2/data/minecraft/tags/enchantment/non_treasure.json new file mode 100644 index 0000000..9269c1d --- /dev/null +++ b/shields/src/generated/26.2/data/minecraft/tags/enchantment/non_treasure.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "shields:momentum", + "required": false + }, + { + "id": "shields:bracing", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/minecraft/tags/enchantment/treasure.json b/shields/src/generated/26.2/data/minecraft/tags/enchantment/treasure.json new file mode 100644 index 0000000..a922f93 --- /dev/null +++ b/shields/src/generated/26.2/data/minecraft/tags/enchantment/treasure.json @@ -0,0 +1,16 @@ +{ + "values": [ + { + "id": "shields:evokering", + "required": false + }, + { + "id": "shields:launching", + "required": false + }, + { + "id": "shields:lifebound", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/minecraft/tags/item/enchantable/durability.json b/shields/src/generated/26.2/data/minecraft/tags/item/enchantable/durability.json new file mode 100644 index 0000000..b8ed133 --- /dev/null +++ b/shields/src/generated/26.2/data/minecraft/tags/item/enchantable/durability.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#shields:shields", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/copper_shield.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/copper_shield.json new file mode 100644 index 0000000..5546d6e --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/copper_shield.json @@ -0,0 +1,44 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_copper_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:copper_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:copper_shield" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_copper_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:copper_shield" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/copper_shield_plating.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/copper_shield_plating.json new file mode 100644 index 0000000..aa65006 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/copper_shield_plating.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_copper_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:copper_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:copper_shield_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_copper_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:copper_shield_plating" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/diamond_shield.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/diamond_shield.json new file mode 100644 index 0000000..fdfac66 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/diamond_shield.json @@ -0,0 +1,44 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_diamond": { + "conditions": { + "items": [ + { + "items": "minecraft:diamond" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:diamond_shield" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_diamond" + ] + ], + "rewards": { + "recipes": [ + "shields:diamond_shield" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/diamond_shield_plating.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/diamond_shield_plating.json new file mode 100644 index 0000000..8e6bbd2 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/diamond_shield_plating.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_diamond": { + "conditions": { + "items": [ + { + "items": "minecraft:diamond" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:diamond_shield_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_diamond" + ] + ], + "rewards": { + "recipes": [ + "shields:diamond_shield_plating" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/gold_shield.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/gold_shield.json new file mode 100644 index 0000000..4ada10a --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/gold_shield.json @@ -0,0 +1,44 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_gold_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:gold_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:gold_shield" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gold_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:gold_shield" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/gold_shield_plating.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/gold_shield_plating.json new file mode 100644 index 0000000..d1e8be1 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/gold_shield_plating.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_gold_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:gold_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:gold_shield_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gold_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:gold_shield_plating" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/netherite_shield_plating_smithing.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/netherite_shield_plating_smithing.json new file mode 100644 index 0000000..f7c0945 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/netherite_shield_plating_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_netherite_ingot": { + "conditions": { + "items": [ + { + "items": "#minecraft:netherite_tool_materials" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:netherite_shield_plating_smithing" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_netherite_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:netherite_shield_plating_smithing" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/netherite_shield_smithing.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/netherite_shield_smithing.json new file mode 100644 index 0000000..4737f45 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/netherite_shield_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_netherite_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:netherite_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:netherite_shield_smithing" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_netherite_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:netherite_shield_smithing" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/shield_plating.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/shield_plating.json new file mode 100644 index 0000000..1efb2fd --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/shield_plating.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_iron_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:iron_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:shield_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_iron_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:shield_plating" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/advancement/recipes/combat/shield_repair_kit.json b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/shield_repair_kit.json new file mode 100644 index 0000000..4c78f3c --- /dev/null +++ b/shields/src/generated/26.2/data/shields/advancement/recipes/combat/shield_repair_kit.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_iron_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:iron_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "shields:shield_repair_kit" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_iron_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:shield_repair_kit" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/enchantment/bracing.json b/shields/src/generated/26.2/data/shields/enchantment/bracing.json new file mode 100644 index 0000000..e6a8fd8 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/enchantment/bracing.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.bracing" + }, + "exclusive_set": "#shields:bracing_exclusive_set", + "max_cost": { + "base": 25, + "per_level_above_first": 10 + }, + "max_level": 5, + "min_cost": { + "base": 8, + "per_level_above_first": 6 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 10 +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/enchantment/evokering.json b/shields/src/generated/26.2/data/shields/enchantment/evokering.json new file mode 100644 index 0000000..673b4bb --- /dev/null +++ b/shields/src/generated/26.2/data/shields/enchantment/evokering.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.evokering" + }, + "exclusive_set": "#shields:evokering_exclusive_set", + "max_cost": { + "base": 45, + "per_level_above_first": 15 + }, + "max_level": 3, + "min_cost": { + "base": 20, + "per_level_above_first": 10 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 1 +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/enchantment/launching.json b/shields/src/generated/26.2/data/shields/enchantment/launching.json new file mode 100644 index 0000000..2217032 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/enchantment/launching.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.launching" + }, + "exclusive_set": "#shields:launching_exclusive_set", + "max_cost": { + "base": 25, + "per_level_above_first": 10 + }, + "max_level": 3, + "min_cost": { + "base": 10, + "per_level_above_first": 5 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 5 +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/enchantment/lifebound.json b/shields/src/generated/26.2/data/shields/enchantment/lifebound.json new file mode 100644 index 0000000..83665ba --- /dev/null +++ b/shields/src/generated/26.2/data/shields/enchantment/lifebound.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.lifebound" + }, + "exclusive_set": "#shields:lifebound_exclusive_set", + "max_cost": { + "base": 30, + "per_level_above_first": 10 + }, + "max_level": 2, + "min_cost": { + "base": 12, + "per_level_above_first": 7 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 3 +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/enchantment/momentum.json b/shields/src/generated/26.2/data/shields/enchantment/momentum.json new file mode 100644 index 0000000..dcbb891 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/enchantment/momentum.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.momentum" + }, + "exclusive_set": "#shields:momentum_exclusive_set", + "max_cost": { + "base": 20, + "per_level_above_first": 8 + }, + "max_level": 5, + "min_cost": { + "base": 5, + "per_level_above_first": 5 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 12 +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/copper_shield.json b/shields/src/generated/26.2/data/shields/recipe/copper_shield.json new file mode 100644 index 0000000..e013ac8 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/copper_shield.json @@ -0,0 +1,28 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "d": "#minecraft:copper_tool_materials", + "w": "#minecraft:planks" + }, + "pattern": [ + "wdw", + "www", + " w " + ], + "result": { + "id": "shields:copper_shield" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/copper_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/copper_shield_decoration.json new file mode 100644 index 0000000..9d5057c --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/copper_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:copper_shield" + }, + "target": "shields:copper_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/copper_shield_plating.json b/shields/src/generated/26.2/data/shields/recipe/copper_shield_plating.json new file mode 100644 index 0000000..ed8044a --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/copper_shield_plating.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shield_platings", + "key": { + "m": "#minecraft:copper_tool_materials", + "p": "#minecraft:planks" + }, + "pattern": [ + "mpm", + "ppp", + "mpm" + ], + "result": { + "id": "shields:copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/diamond_shield.json b/shields/src/generated/26.2/data/shields/recipe/diamond_shield.json new file mode 100644 index 0000000..61bf0ab --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/diamond_shield.json @@ -0,0 +1,28 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "d": "#minecraft:diamond_tool_materials", + "w": "#minecraft:planks" + }, + "pattern": [ + "wdw", + "www", + " w " + ], + "result": { + "id": "shields:diamond_shield" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/diamond_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/diamond_shield_decoration.json new file mode 100644 index 0000000..2dfc8ca --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/diamond_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:diamond_shield" + }, + "target": "shields:diamond_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/diamond_shield_plating.json b/shields/src/generated/26.2/data/shields/recipe/diamond_shield_plating.json new file mode 100644 index 0000000..81e92ee --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/diamond_shield_plating.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shield_platings", + "key": { + "m": "#minecraft:diamond_tool_materials", + "p": "#minecraft:planks" + }, + "pattern": [ + "mpm", + "ppp", + "mpm" + ], + "result": { + "id": "shields:diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/gold_shield.json b/shields/src/generated/26.2/data/shields/recipe/gold_shield.json new file mode 100644 index 0000000..193b472 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/gold_shield.json @@ -0,0 +1,28 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "d": "#minecraft:gold_tool_materials", + "w": "#minecraft:planks" + }, + "pattern": [ + "wdw", + "www", + " w " + ], + "result": { + "id": "shields:gold_shield" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/gold_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/gold_shield_decoration.json new file mode 100644 index 0000000..b78dd1e --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/gold_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:gold_shield" + }, + "target": "shields:gold_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/gold_shield_plating.json b/shields/src/generated/26.2/data/shields/recipe/gold_shield_plating.json new file mode 100644 index 0000000..abff22c --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/gold_shield_plating.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shield_platings", + "key": { + "m": "#minecraft:gold_tool_materials", + "p": "#minecraft:planks" + }, + "pattern": [ + "mpm", + "ppp", + "mpm" + ], + "result": { + "id": "shields:gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/netherite_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/netherite_shield_decoration.json new file mode 100644 index 0000000..912223b --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/netherite_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:netherite_shield" + }, + "target": "shields:netherite_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/netherite_shield_plating_smithing.json b/shields/src/generated/26.2/data/shields/recipe/netherite_shield_plating_smithing.json new file mode 100644 index 0000000..da3fb19 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/netherite_shield_plating_smithing.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "#minecraft:netherite_tool_materials", + "base": "shields:diamond_shield_plating", + "result": { + "id": "shields:netherite_shield_plating" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/netherite_shield_smithing.json b/shields/src/generated/26.2/data/shields/recipe/netherite_shield_smithing.json new file mode 100644 index 0000000..d3fedb3 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/netherite_shield_smithing.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "minecraft:netherite_ingot", + "base": "shields:diamond_shield", + "result": { + "id": "shields:netherite_shield" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/plated_copper_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/plated_copper_shield_decoration.json new file mode 100644 index 0000000..73b0b52 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/plated_copper_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_copper_shield" + }, + "target": "shields:plated_copper_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/plated_diamond_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/plated_diamond_shield_decoration.json new file mode 100644 index 0000000..1cfb357 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/plated_diamond_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_diamond_shield" + }, + "target": "shields:plated_diamond_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/plated_gold_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/plated_gold_shield_decoration.json new file mode 100644 index 0000000..b26a23c --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/plated_gold_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_gold_shield" + }, + "target": "shields:plated_gold_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/plated_netherite_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/plated_netherite_shield_decoration.json new file mode 100644 index 0000000..d5d70f7 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/plated_netherite_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_netherite_shield" + }, + "target": "shields:plated_netherite_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/plated_shield_decoration.json b/shields/src/generated/26.2/data/shields/recipe/plated_shield_decoration.json new file mode 100644 index 0000000..ee7b483 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/plated_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_shield" + }, + "target": "shields:plated_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/shield_plating.json b/shields/src/generated/26.2/data/shields/recipe/shield_plating.json new file mode 100644 index 0000000..5b2b8d7 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/shield_plating.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shield_platings", + "key": { + "m": "#minecraft:iron_tool_materials", + "p": "#minecraft:planks" + }, + "pattern": [ + "mpm", + "ppp", + "mpm" + ], + "result": { + "id": "shields:shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/recipe/shield_repair_kit.json b/shields/src/generated/26.2/data/shields/recipe/shield_repair_kit.json new file mode 100644 index 0000000..52c8ecc --- /dev/null +++ b/shields/src/generated/26.2/data/shields/recipe/shield_repair_kit.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "i": "minecraft:iron_ingot", + "s": "minecraft:stick" + }, + "pattern": [ + " i ", + "isi", + " i " + ], + "result": { + "id": "shields:shield_repair_kit" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/tags/enchantment/bracing_exclusive_set.json b/shields/src/generated/26.2/data/shields/tags/enchantment/bracing_exclusive_set.json new file mode 100644 index 0000000..6602971 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/tags/enchantment/bracing_exclusive_set.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "shields:momentum", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/tags/enchantment/evokering_exclusive_set.json b/shields/src/generated/26.2/data/shields/tags/enchantment/evokering_exclusive_set.json new file mode 100644 index 0000000..6eb1d45 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/tags/enchantment/evokering_exclusive_set.json @@ -0,0 +1,16 @@ +{ + "values": [ + { + "id": "shields:launching", + "required": false + }, + { + "id": "shields:lifebound", + "required": false + }, + { + "id": "shields:momentum", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/tags/enchantment/launching_exclusive_set.json b/shields/src/generated/26.2/data/shields/tags/enchantment/launching_exclusive_set.json new file mode 100644 index 0000000..ef468d5 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/tags/enchantment/launching_exclusive_set.json @@ -0,0 +1,16 @@ +{ + "values": [ + { + "id": "shields:evokering", + "required": false + }, + { + "id": "shields:momentum", + "required": false + }, + { + "id": "shields:lifebound", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/tags/enchantment/lifebound_exclusive_set.json b/shields/src/generated/26.2/data/shields/tags/enchantment/lifebound_exclusive_set.json new file mode 100644 index 0000000..9466e64 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/tags/enchantment/lifebound_exclusive_set.json @@ -0,0 +1,16 @@ +{ + "values": [ + { + "id": "shields:evokering", + "required": false + }, + { + "id": "shields:launching", + "required": false + }, + { + "id": "shields:momentum", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/tags/enchantment/momentum_exclusive_set.json b/shields/src/generated/26.2/data/shields/tags/enchantment/momentum_exclusive_set.json new file mode 100644 index 0000000..5a14204 --- /dev/null +++ b/shields/src/generated/26.2/data/shields/tags/enchantment/momentum_exclusive_set.json @@ -0,0 +1,20 @@ +{ + "values": [ + { + "id": "shields:lifebound", + "required": false + }, + { + "id": "shields:launching", + "required": false + }, + { + "id": "shields:evokering", + "required": false + }, + { + "id": "shields:bracing", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.2/data/shields/tags/item/shields.json b/shields/src/generated/26.2/data/shields/tags/item/shields.json new file mode 100644 index 0000000..5d7260d --- /dev/null +++ b/shields/src/generated/26.2/data/shields/tags/item/shields.json @@ -0,0 +1,13 @@ +{ + "values": [ + "shields:plated_shield", + "shields:copper_shield", + "shields:plated_copper_shield", + "shields:diamond_shield", + "shields:plated_diamond_shield", + "shields:gold_shield", + "shields:plated_gold_shield", + "shields:netherite_shield", + "shields:plated_netherite_shield" + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/copper_shield.json b/shields/src/generated/26.3/assets/shields/items/copper_shield.json new file mode 100644 index 0000000..e740d1c --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/copper_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/copper_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:copper_shield", + "no_pattern_texture": "shields:copper_shield_base_nopattern", + "texture": "shields:copper_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/copper_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:copper_shield", + "no_pattern_texture": "shields:copper_shield_base_nopattern", + "texture": "shields:copper_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/copper_shield_plating.json b/shields/src/generated/26.3/assets/shields/items/copper_shield_plating.json new file mode 100644 index 0000000..4525d56 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/copper_shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/diamond_shield.json b/shields/src/generated/26.3/assets/shields/items/diamond_shield.json new file mode 100644 index 0000000..688bad4 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/diamond_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/diamond_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:diamond_shield", + "no_pattern_texture": "shields:diamond_shield_base_nopattern", + "texture": "shields:diamond_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/diamond_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:diamond_shield", + "no_pattern_texture": "shields:diamond_shield_base_nopattern", + "texture": "shields:diamond_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/diamond_shield_plating.json b/shields/src/generated/26.3/assets/shields/items/diamond_shield_plating.json new file mode 100644 index 0000000..3d016e0 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/diamond_shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/gold_shield.json b/shields/src/generated/26.3/assets/shields/items/gold_shield.json new file mode 100644 index 0000000..b852b37 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/gold_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/gold_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:gold_shield", + "no_pattern_texture": "shields:gold_shield_base_nopattern", + "texture": "shields:gold_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/gold_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:gold_shield", + "no_pattern_texture": "shields:gold_shield_base_nopattern", + "texture": "shields:gold_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/gold_shield_plating.json b/shields/src/generated/26.3/assets/shields/items/gold_shield_plating.json new file mode 100644 index 0000000..2aca062 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/gold_shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/netherite_shield.json b/shields/src/generated/26.3/assets/shields/items/netherite_shield.json new file mode 100644 index 0000000..927cae5 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/netherite_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/netherite_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:netherite_shield", + "no_pattern_texture": "shields:netherite_shield_base_nopattern", + "texture": "shields:netherite_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/netherite_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:netherite_shield", + "no_pattern_texture": "shields:netherite_shield_base_nopattern", + "texture": "shields:netherite_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/netherite_shield_plating.json b/shields/src/generated/26.3/assets/shields/items/netherite_shield_plating.json new file mode 100644 index 0000000..0298199 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/netherite_shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/plated_copper_shield.json b/shields/src/generated/26.3/assets/shields/items/plated_copper_shield.json new file mode 100644 index 0000000..23cafd7 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/plated_copper_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_copper_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_copper_shield", + "no_pattern_texture": "shields:plated_copper_shield_base_nopattern", + "texture": "shields:plated_copper_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_copper_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_copper_shield", + "no_pattern_texture": "shields:plated_copper_shield_base_nopattern", + "texture": "shields:plated_copper_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/plated_diamond_shield.json b/shields/src/generated/26.3/assets/shields/items/plated_diamond_shield.json new file mode 100644 index 0000000..5eb0fba --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/plated_diamond_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_diamond_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_diamond_shield", + "no_pattern_texture": "shields:plated_diamond_shield_base_nopattern", + "texture": "shields:plated_diamond_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_diamond_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_diamond_shield", + "no_pattern_texture": "shields:plated_diamond_shield_base_nopattern", + "texture": "shields:plated_diamond_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/plated_gold_shield.json b/shields/src/generated/26.3/assets/shields/items/plated_gold_shield.json new file mode 100644 index 0000000..ae8682f --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/plated_gold_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_gold_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_gold_shield", + "no_pattern_texture": "shields:plated_gold_shield_base_nopattern", + "texture": "shields:plated_gold_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_gold_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_gold_shield", + "no_pattern_texture": "shields:plated_gold_shield_base_nopattern", + "texture": "shields:plated_gold_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/plated_netherite_shield.json b/shields/src/generated/26.3/assets/shields/items/plated_netherite_shield.json new file mode 100644 index 0000000..a7c2bd3 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/plated_netherite_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_netherite_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_netherite_shield", + "no_pattern_texture": "shields:plated_netherite_shield_base_nopattern", + "texture": "shields:plated_netherite_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_netherite_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_netherite_shield", + "no_pattern_texture": "shields:plated_netherite_shield_base_nopattern", + "texture": "shields:plated_netherite_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/plated_shield.json b/shields/src/generated/26.3/assets/shields/items/plated_shield.json new file mode 100644 index 0000000..5c2e790 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/plated_shield.json @@ -0,0 +1,50 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "shields:item/plated_shield", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_shield", + "no_pattern_texture": "shields:plated_shield_base_nopattern", + "texture": "shields:plated_shield_base" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "shields:item/plated_shield_blocking", + "model": { + "type": "shields:shields", + "model_layer": "shields:plated_shield", + "no_pattern_texture": "shields:plated_shield_base_nopattern", + "texture": "shields:plated_shield_base" + } + }, + "property": "minecraft:using_item", + "transformation": { + "left_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "right_rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + -1.0, + -1.0 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + } + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/shield_plating.json b/shields/src/generated/26.3/assets/shields/items/shield_plating.json new file mode 100644 index 0000000..8828188 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/shield_plating.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/items/shield_repair_kit.json b/shields/src/generated/26.3/assets/shields/items/shield_repair_kit.json new file mode 100644 index 0000000..4debb84 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/items/shield_repair_kit.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "shields:item/shield_repair_kit" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/lang/en_us.json b/shields/src/generated/26.3/assets/shields/lang/en_us.json new file mode 100644 index 0000000..696fad2 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/lang/en_us.json @@ -0,0 +1,178 @@ +{ + "emi.shields.anvil": "Combine With Anvil", + "enchantment.shields.bracing": "Bracing", + "enchantment.shields.bracing.desc": "Decreases the cooldown when the shield is disabled by an axe attack.", + "enchantment.shields.evokering": "Evokering", + "enchantment.shields.evokering.desc": "Introduces a chance for evoker fangs to spawn underneath attackers when blocking an attack.", + "enchantment.shields.launching": "Launching", + "enchantment.shields.launching.desc": "Gives a chance to launch attackers away when the shield is disabled.", + "enchantment.shields.lifebound": "Lifebound", + "enchantment.shields.lifebound.desc": "Gives a chance to absorb health from the attacker when blocking an attack.", + "enchantment.shields.momentum": "Momentum", + "enchantment.shields.momentum.desc": "Gives a brief speed boost when their shield is disabled.", + "enchantment.shields.momentum.tooltip_speed_for_x_seconds": "%1$ss of Speed III", + "item.shields.copper_shield": "Copper Shield", + "item.shields.copper_shield.black": "Black Copper Shield", + "item.shields.copper_shield.blue": "Blue Copper Shield", + "item.shields.copper_shield.brown": "Brown Copper Shield", + "item.shields.copper_shield.cyan": "Cyan Copper Shield", + "item.shields.copper_shield.gray": "Gray Copper Shield", + "item.shields.copper_shield.green": "Green Copper Shield", + "item.shields.copper_shield.light_blue": "Light Blue Copper Shield", + "item.shields.copper_shield.light_gray": "Light Gray Copper Shield", + "item.shields.copper_shield.lime": "Lime Copper Shield", + "item.shields.copper_shield.magenta": "Magenta Copper Shield", + "item.shields.copper_shield.orange": "Orange Copper Shield", + "item.shields.copper_shield.pink": "Pink Copper Shield", + "item.shields.copper_shield.purple": "Purple Copper Shield", + "item.shields.copper_shield.red": "Red Copper Shield", + "item.shields.copper_shield.white": "White Copper Shield", + "item.shields.copper_shield.yellow": "Yellow Copper Shield", + "item.shields.copper_shield_plating": "Copper Shield Plating", + "item.shields.diamond_shield": "Diamond Shield", + "item.shields.diamond_shield.black": "Black Diamond Shield", + "item.shields.diamond_shield.blue": "Blue Diamond Shield", + "item.shields.diamond_shield.brown": "Brown Diamond Shield", + "item.shields.diamond_shield.cyan": "Cyan Diamond Shield", + "item.shields.diamond_shield.gray": "Gray Diamond Shield", + "item.shields.diamond_shield.green": "Green Diamond Shield", + "item.shields.diamond_shield.light_blue": "Light Blue Diamond Shield", + "item.shields.diamond_shield.light_gray": "Light Gray Diamond Shield", + "item.shields.diamond_shield.lime": "Lime Diamond Shield", + "item.shields.diamond_shield.magenta": "Magenta Diamond Shield", + "item.shields.diamond_shield.orange": "Orange Diamond Shield", + "item.shields.diamond_shield.pink": "Pink Diamond Shield", + "item.shields.diamond_shield.purple": "Purple Diamond Shield", + "item.shields.diamond_shield.red": "Red Diamond Shield", + "item.shields.diamond_shield.white": "White Diamond Shield", + "item.shields.diamond_shield.yellow": "Yellow Diamond Shield", + "item.shields.diamond_shield_plating": "Diamond Shield Plating", + "item.shields.gold_shield": "Gold Shield", + "item.shields.gold_shield.black": "Black Gold Shield", + "item.shields.gold_shield.blue": "Blue Gold Shield", + "item.shields.gold_shield.brown": "Brown Gold Shield", + "item.shields.gold_shield.cyan": "Cyan Gold Shield", + "item.shields.gold_shield.gray": "Gray Gold Shield", + "item.shields.gold_shield.green": "Green Gold Shield", + "item.shields.gold_shield.light_blue": "Light Blue Gold Shield", + "item.shields.gold_shield.light_gray": "Light Gray Gold Shield", + "item.shields.gold_shield.lime": "Lime Gold Shield", + "item.shields.gold_shield.magenta": "Magenta Gold Shield", + "item.shields.gold_shield.orange": "Orange Gold Shield", + "item.shields.gold_shield.pink": "Pink Gold Shield", + "item.shields.gold_shield.purple": "Purple Gold Shield", + "item.shields.gold_shield.red": "Red Gold Shield", + "item.shields.gold_shield.white": "White Gold Shield", + "item.shields.gold_shield.yellow": "Yellow Gold Shield", + "item.shields.gold_shield_plating": "Gold Shield Plating", + "item.shields.netherite_shield": "Netherite Shield", + "item.shields.netherite_shield.black": "Black Netherite Shield", + "item.shields.netherite_shield.blue": "Blue Netherite Shield", + "item.shields.netherite_shield.brown": "Brown Netherite Shield", + "item.shields.netherite_shield.cyan": "Cyan Netherite Shield", + "item.shields.netherite_shield.gray": "Gray Netherite Shield", + "item.shields.netherite_shield.green": "Green Netherite Shield", + "item.shields.netherite_shield.light_blue": "Light Blue Netherite Shield", + "item.shields.netherite_shield.light_gray": "Light Gray Netherite Shield", + "item.shields.netherite_shield.lime": "Lime Netherite Shield", + "item.shields.netherite_shield.magenta": "Magenta Netherite Shield", + "item.shields.netherite_shield.orange": "Orange Netherite Shield", + "item.shields.netherite_shield.pink": "Pink Netherite Shield", + "item.shields.netherite_shield.purple": "Purple Netherite Shield", + "item.shields.netherite_shield.red": "Red Netherite Shield", + "item.shields.netherite_shield.white": "White Netherite Shield", + "item.shields.netherite_shield.yellow": "Yellow Netherite Shield", + "item.shields.netherite_shield_plating": "Netherite Shield Plating", + "item.shields.plated_copper_shield": "Plated Copper Shield", + "item.shields.plated_copper_shield.black": "Black Plated Copper Shield", + "item.shields.plated_copper_shield.blue": "Blue Plated Copper Shield", + "item.shields.plated_copper_shield.brown": "Brown Plated Copper Shield", + "item.shields.plated_copper_shield.cyan": "Cyan Plated Copper Shield", + "item.shields.plated_copper_shield.gray": "Gray Plated Copper Shield", + "item.shields.plated_copper_shield.green": "Green Plated Copper Shield", + "item.shields.plated_copper_shield.light_blue": "Light Blue Plated Copper Shield", + "item.shields.plated_copper_shield.light_gray": "Light Gray Plated Copper Shield", + "item.shields.plated_copper_shield.lime": "Lime Plated Copper Shield", + "item.shields.plated_copper_shield.magenta": "Magenta Plated Copper Shield", + "item.shields.plated_copper_shield.orange": "Orange Plated Copper Shield", + "item.shields.plated_copper_shield.pink": "Pink Plated Copper Shield", + "item.shields.plated_copper_shield.purple": "Purple Plated Copper Shield", + "item.shields.plated_copper_shield.red": "Red Plated Copper Shield", + "item.shields.plated_copper_shield.white": "White Plated Copper Shield", + "item.shields.plated_copper_shield.yellow": "Yellow Plated Copper Shield", + "item.shields.plated_diamond_shield": "Plated Diamond Shield", + "item.shields.plated_diamond_shield.black": "Black Plated Diamond Shield", + "item.shields.plated_diamond_shield.blue": "Blue Plated Diamond Shield", + "item.shields.plated_diamond_shield.brown": "Brown Plated Diamond Shield", + "item.shields.plated_diamond_shield.cyan": "Cyan Plated Diamond Shield", + "item.shields.plated_diamond_shield.gray": "Gray Plated Diamond Shield", + "item.shields.plated_diamond_shield.green": "Green Plated Diamond Shield", + "item.shields.plated_diamond_shield.light_blue": "Light Blue Plated Diamond Shield", + "item.shields.plated_diamond_shield.light_gray": "Light Gray Plated Diamond Shield", + "item.shields.plated_diamond_shield.lime": "Lime Plated Diamond Shield", + "item.shields.plated_diamond_shield.magenta": "Magenta Plated Diamond Shield", + "item.shields.plated_diamond_shield.orange": "Orange Plated Diamond Shield", + "item.shields.plated_diamond_shield.pink": "Pink Plated Diamond Shield", + "item.shields.plated_diamond_shield.purple": "Purple Plated Diamond Shield", + "item.shields.plated_diamond_shield.red": "Red Plated Diamond Shield", + "item.shields.plated_diamond_shield.white": "White Plated Diamond Shield", + "item.shields.plated_diamond_shield.yellow": "Yellow Plated Diamond Shield", + "item.shields.plated_gold_shield": "Plated Gold Shield", + "item.shields.plated_gold_shield.black": "Black Plated Gold Shield", + "item.shields.plated_gold_shield.blue": "Blue Plated Gold Shield", + "item.shields.plated_gold_shield.brown": "Brown Plated Gold Shield", + "item.shields.plated_gold_shield.cyan": "Cyan Plated Gold Shield", + "item.shields.plated_gold_shield.gray": "Gray Plated Gold Shield", + "item.shields.plated_gold_shield.green": "Green Plated Gold Shield", + "item.shields.plated_gold_shield.light_blue": "Light Blue Plated Gold Shield", + "item.shields.plated_gold_shield.light_gray": "Light Gray Plated Gold Shield", + "item.shields.plated_gold_shield.lime": "Lime Plated Gold Shield", + "item.shields.plated_gold_shield.magenta": "Magenta Plated Gold Shield", + "item.shields.plated_gold_shield.orange": "Orange Plated Gold Shield", + "item.shields.plated_gold_shield.pink": "Pink Plated Gold Shield", + "item.shields.plated_gold_shield.purple": "Purple Plated Gold Shield", + "item.shields.plated_gold_shield.red": "Red Plated Gold Shield", + "item.shields.plated_gold_shield.white": "White Plated Gold Shield", + "item.shields.plated_gold_shield.yellow": "Yellow Plated Gold Shield", + "item.shields.plated_netherite_shield": "Plated Netherite Shield", + "item.shields.plated_netherite_shield.black": "Black Plated Netherite Shield", + "item.shields.plated_netherite_shield.blue": "Blue Plated Netherite Shield", + "item.shields.plated_netherite_shield.brown": "Brown Plated Netherite Shield", + "item.shields.plated_netherite_shield.cyan": "Cyan Plated Netherite Shield", + "item.shields.plated_netherite_shield.gray": "Gray Plated Netherite Shield", + "item.shields.plated_netherite_shield.green": "Green Plated Netherite Shield", + "item.shields.plated_netherite_shield.light_blue": "Light Blue Plated Netherite Shield", + "item.shields.plated_netherite_shield.light_gray": "Light Gray Plated Netherite Shield", + "item.shields.plated_netherite_shield.lime": "Lime Plated Netherite Shield", + "item.shields.plated_netherite_shield.magenta": "Magenta Plated Netherite Shield", + "item.shields.plated_netherite_shield.orange": "Orange Plated Netherite Shield", + "item.shields.plated_netherite_shield.pink": "Pink Plated Netherite Shield", + "item.shields.plated_netherite_shield.purple": "Purple Plated Netherite Shield", + "item.shields.plated_netherite_shield.red": "Red Plated Netherite Shield", + "item.shields.plated_netherite_shield.white": "White Plated Netherite Shield", + "item.shields.plated_netherite_shield.yellow": "Yellow Plated Netherite Shield", + "item.shields.plated_shield": "Plated Shield", + "item.shields.plated_shield.black": "Black Plated Shield", + "item.shields.plated_shield.blue": "Blue Plated Shield", + "item.shields.plated_shield.brown": "Brown Plated Shield", + "item.shields.plated_shield.cyan": "Cyan Plated Shield", + "item.shields.plated_shield.gray": "Gray Plated Shield", + "item.shields.plated_shield.green": "Green Plated Shield", + "item.shields.plated_shield.light_blue": "Light Blue Plated Shield", + "item.shields.plated_shield.light_gray": "Light Gray Plated Shield", + "item.shields.plated_shield.lime": "Lime Plated Shield", + "item.shields.plated_shield.magenta": "Magenta Plated Shield", + "item.shields.plated_shield.orange": "Orange Plated Shield", + "item.shields.plated_shield.pink": "Pink Plated Shield", + "item.shields.plated_shield.purple": "Purple Plated Shield", + "item.shields.plated_shield.red": "Red Plated Shield", + "item.shields.plated_shield.white": "White Plated Shield", + "item.shields.plated_shield.yellow": "Yellow Plated Shield", + "item.shields.shield_patch_kit.no_damage": "Your shield isn't damaged enough to use the repair kit!", + "item.shields.shield_plating": "Shield Plating", + "item.shields.shield_repair_kit": "Shield Repair Kit", + "itemGroup.shields.shield_group": "Extra Shields", + "shields.attribute.axe": "When hit by Axe:", + "shields.attribute.seconds": " %ss Cooldown", + "tag.item.shields.shields": "Shields" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/copper_shield.json b/shields/src/generated/26.3/assets/shields/models/item/copper_shield.json new file mode 100644 index 0000000..a027bd2 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/copper_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/copper_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/copper_shield_blocking.json new file mode 100644 index 0000000..ea2bd7f --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/copper_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/copper_shield_plating.json b/shields/src/generated/26.3/assets/shields/models/item/copper_shield_plating.json new file mode 100644 index 0000000..6f38d04 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/copper_shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/diamond_shield.json b/shields/src/generated/26.3/assets/shields/models/item/diamond_shield.json new file mode 100644 index 0000000..134eef9 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/diamond_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/diamond_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/diamond_shield_blocking.json new file mode 100644 index 0000000..3430cba --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/diamond_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/diamond_shield_plating.json b/shields/src/generated/26.3/assets/shields/models/item/diamond_shield_plating.json new file mode 100644 index 0000000..2a6265e --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/diamond_shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/gold_shield.json b/shields/src/generated/26.3/assets/shields/models/item/gold_shield.json new file mode 100644 index 0000000..4484af2 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/gold_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/gold_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/gold_shield_blocking.json new file mode 100644 index 0000000..af45101 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/gold_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/gold_shield_plating.json b/shields/src/generated/26.3/assets/shields/models/item/gold_shield_plating.json new file mode 100644 index 0000000..150b8c2 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/gold_shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/netherite_shield.json b/shields/src/generated/26.3/assets/shields/models/item/netherite_shield.json new file mode 100644 index 0000000..20b3593 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/netherite_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/netherite_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/netherite_shield_blocking.json new file mode 100644 index 0000000..f6050d7 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/netherite_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/netherite_shield_plating.json b/shields/src/generated/26.3/assets/shields/models/item/netherite_shield_plating.json new file mode 100644 index 0000000..bf186f4 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/netherite_shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_copper_shield.json b/shields/src/generated/26.3/assets/shields/models/item/plated_copper_shield.json new file mode 100644 index 0000000..a027bd2 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_copper_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_copper_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/plated_copper_shield_blocking.json new file mode 100644 index 0000000..ea2bd7f --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_copper_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_diamond_shield.json b/shields/src/generated/26.3/assets/shields/models/item/plated_diamond_shield.json new file mode 100644 index 0000000..134eef9 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_diamond_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_diamond_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/plated_diamond_shield_blocking.json new file mode 100644 index 0000000..3430cba --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_diamond_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_gold_shield.json b/shields/src/generated/26.3/assets/shields/models/item/plated_gold_shield.json new file mode 100644 index 0000000..4484af2 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_gold_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_gold_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/plated_gold_shield_blocking.json new file mode 100644 index 0000000..af45101 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_gold_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_netherite_shield.json b/shields/src/generated/26.3/assets/shields/models/item/plated_netherite_shield.json new file mode 100644 index 0000000..20b3593 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_netherite_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_netherite_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/plated_netherite_shield_blocking.json new file mode 100644 index 0000000..f6050d7 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_netherite_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/netherite_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_shield.json b/shields/src/generated/26.3/assets/shields/models/item/plated_shield.json new file mode 100644 index 0000000..f32c238 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield", + "textures": { + "particle": "shields:item/shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/plated_shield_blocking.json b/shields/src/generated/26.3/assets/shields/models/item/plated_shield_blocking.json new file mode 100644 index 0000000..bd0b5dd --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/plated_shield_blocking.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/shield_blocking", + "textures": { + "particle": "shields:item/shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/shield_plating.json b/shields/src/generated/26.3/assets/shields/models/item/shield_plating.json new file mode 100644 index 0000000..80a4770 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/shield_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/assets/shields/models/item/shield_repair_kit.json b/shields/src/generated/26.3/assets/shields/models/item/shield_repair_kit.json new file mode 100644 index 0000000..108f5f6 --- /dev/null +++ b/shields/src/generated/26.3/assets/shields/models/item/shield_repair_kit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "shields:item/shield_repair_kit" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/c/tags/item/tools/shield.json b/shields/src/generated/26.3/data/c/tags/item/tools/shield.json new file mode 100644 index 0000000..b8ed133 --- /dev/null +++ b/shields/src/generated/26.3/data/c/tags/item/tools/shield.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#shields:shields", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/minecraft/tags/enchantment/in_enchanting_table.json b/shields/src/generated/26.3/data/minecraft/tags/enchantment/in_enchanting_table.json new file mode 100644 index 0000000..9269c1d --- /dev/null +++ b/shields/src/generated/26.3/data/minecraft/tags/enchantment/in_enchanting_table.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "shields:momentum", + "required": false + }, + { + "id": "shields:bracing", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/minecraft/tags/enchantment/non_treasure.json b/shields/src/generated/26.3/data/minecraft/tags/enchantment/non_treasure.json new file mode 100644 index 0000000..9269c1d --- /dev/null +++ b/shields/src/generated/26.3/data/minecraft/tags/enchantment/non_treasure.json @@ -0,0 +1,12 @@ +{ + "values": [ + { + "id": "shields:momentum", + "required": false + }, + { + "id": "shields:bracing", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/minecraft/tags/enchantment/treasure.json b/shields/src/generated/26.3/data/minecraft/tags/enchantment/treasure.json new file mode 100644 index 0000000..a922f93 --- /dev/null +++ b/shields/src/generated/26.3/data/minecraft/tags/enchantment/treasure.json @@ -0,0 +1,16 @@ +{ + "values": [ + { + "id": "shields:evokering", + "required": false + }, + { + "id": "shields:launching", + "required": false + }, + { + "id": "shields:lifebound", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/minecraft/tags/item/enchantable/durability.json b/shields/src/generated/26.3/data/minecraft/tags/item/enchantable/durability.json new file mode 100644 index 0000000..b8ed133 --- /dev/null +++ b/shields/src/generated/26.3/data/minecraft/tags/item/enchantable/durability.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#shields:shields", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/copper_shield.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/copper_shield.json new file mode 100644 index 0000000..1bc82c5 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/copper_shield.json @@ -0,0 +1,44 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_copper_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:copper_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:copper_shield" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_copper_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:copper_shield" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/copper_shield_plating.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/copper_shield_plating.json new file mode 100644 index 0000000..fe79b7b --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/copper_shield_plating.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_copper_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:copper_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:copper_shield_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_copper_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:copper_shield_plating" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/diamond_shield.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/diamond_shield.json new file mode 100644 index 0000000..27ae77a --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/diamond_shield.json @@ -0,0 +1,44 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_diamond": { + "conditions": { + "items": [ + { + "items": "minecraft:diamond" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:diamond_shield" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_diamond" + ] + ], + "rewards": { + "recipes": [ + "shields:diamond_shield" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/diamond_shield_plating.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/diamond_shield_plating.json new file mode 100644 index 0000000..7cac465 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/diamond_shield_plating.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_diamond": { + "conditions": { + "items": [ + { + "items": "minecraft:diamond" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:diamond_shield_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_diamond" + ] + ], + "rewards": { + "recipes": [ + "shields:diamond_shield_plating" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/gold_shield.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/gold_shield.json new file mode 100644 index 0000000..9db95c4 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/gold_shield.json @@ -0,0 +1,44 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_gold_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:gold_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:gold_shield" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gold_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:gold_shield" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/gold_shield_plating.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/gold_shield_plating.json new file mode 100644 index 0000000..6901d87 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/gold_shield_plating.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_gold_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:gold_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:gold_shield_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_gold_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:gold_shield_plating" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/netherite_shield_plating_smithing.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/netherite_shield_plating_smithing.json new file mode 100644 index 0000000..4f2985f --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/netherite_shield_plating_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_netherite_ingot": { + "conditions": { + "items": [ + { + "items": "#minecraft:netherite_tool_materials" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:netherite_shield_plating_smithing" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_netherite_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:netherite_shield_plating_smithing" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/netherite_shield_smithing.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/netherite_shield_smithing.json new file mode 100644 index 0000000..185a0f5 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/netherite_shield_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_netherite_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:netherite_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:netherite_shield_smithing" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_netherite_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:netherite_shield_smithing" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/shield_plating.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/shield_plating.json new file mode 100644 index 0000000..010f0e1 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/shield_plating.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_iron_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:iron_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:shield_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_iron_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:shield_plating" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/advancement/recipes/combat/shield_repair_kit.json b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/shield_repair_kit.json new file mode 100644 index 0000000..0f89621 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/advancement/recipes/combat/shield_repair_kit.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_iron_ingot": { + "conditions": { + "items": [ + { + "items": "minecraft:iron_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipes": "shields:shield_repair_kit" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_iron_ingot" + ] + ], + "rewards": { + "recipes": [ + "shields:shield_repair_kit" + ] + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/enchantment/bracing.json b/shields/src/generated/26.3/data/shields/enchantment/bracing.json new file mode 100644 index 0000000..e6a8fd8 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/enchantment/bracing.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.bracing" + }, + "exclusive_set": "#shields:bracing_exclusive_set", + "max_cost": { + "base": 25, + "per_level_above_first": 10 + }, + "max_level": 5, + "min_cost": { + "base": 8, + "per_level_above_first": 6 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 10 +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/enchantment/evokering.json b/shields/src/generated/26.3/data/shields/enchantment/evokering.json new file mode 100644 index 0000000..673b4bb --- /dev/null +++ b/shields/src/generated/26.3/data/shields/enchantment/evokering.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.evokering" + }, + "exclusive_set": "#shields:evokering_exclusive_set", + "max_cost": { + "base": 45, + "per_level_above_first": 15 + }, + "max_level": 3, + "min_cost": { + "base": 20, + "per_level_above_first": 10 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 1 +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/enchantment/launching.json b/shields/src/generated/26.3/data/shields/enchantment/launching.json new file mode 100644 index 0000000..2217032 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/enchantment/launching.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.launching" + }, + "exclusive_set": "#shields:launching_exclusive_set", + "max_cost": { + "base": 25, + "per_level_above_first": 10 + }, + "max_level": 3, + "min_cost": { + "base": 10, + "per_level_above_first": 5 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 5 +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/enchantment/lifebound.json b/shields/src/generated/26.3/data/shields/enchantment/lifebound.json new file mode 100644 index 0000000..83665ba --- /dev/null +++ b/shields/src/generated/26.3/data/shields/enchantment/lifebound.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.lifebound" + }, + "exclusive_set": "#shields:lifebound_exclusive_set", + "max_cost": { + "base": 30, + "per_level_above_first": 10 + }, + "max_level": 2, + "min_cost": { + "base": 12, + "per_level_above_first": 7 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 3 +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/enchantment/momentum.json b/shields/src/generated/26.3/data/shields/enchantment/momentum.json new file mode 100644 index 0000000..dcbb891 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/enchantment/momentum.json @@ -0,0 +1,21 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.shields.momentum" + }, + "exclusive_set": "#shields:momentum_exclusive_set", + "max_cost": { + "base": 20, + "per_level_above_first": 8 + }, + "max_level": 5, + "min_cost": { + "base": 5, + "per_level_above_first": 5 + }, + "slots": [ + "hand" + ], + "supported_items": "#c:tools/shield", + "weight": 12 +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/copper_shield.json b/shields/src/generated/26.3/data/shields/recipe/copper_shield.json new file mode 100644 index 0000000..e013ac8 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/copper_shield.json @@ -0,0 +1,28 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "d": "#minecraft:copper_tool_materials", + "w": "#minecraft:planks" + }, + "pattern": [ + "wdw", + "www", + " w " + ], + "result": { + "id": "shields:copper_shield" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/copper_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/copper_shield_decoration.json new file mode 100644 index 0000000..9d5057c --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/copper_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:copper_shield" + }, + "target": "shields:copper_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/copper_shield_plating.json b/shields/src/generated/26.3/data/shields/recipe/copper_shield_plating.json new file mode 100644 index 0000000..ed8044a --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/copper_shield_plating.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shield_platings", + "key": { + "m": "#minecraft:copper_tool_materials", + "p": "#minecraft:planks" + }, + "pattern": [ + "mpm", + "ppp", + "mpm" + ], + "result": { + "id": "shields:copper_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/diamond_shield.json b/shields/src/generated/26.3/data/shields/recipe/diamond_shield.json new file mode 100644 index 0000000..61bf0ab --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/diamond_shield.json @@ -0,0 +1,28 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "d": "#minecraft:diamond_tool_materials", + "w": "#minecraft:planks" + }, + "pattern": [ + "wdw", + "www", + " w " + ], + "result": { + "id": "shields:diamond_shield" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/diamond_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/diamond_shield_decoration.json new file mode 100644 index 0000000..2dfc8ca --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/diamond_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:diamond_shield" + }, + "target": "shields:diamond_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/diamond_shield_plating.json b/shields/src/generated/26.3/data/shields/recipe/diamond_shield_plating.json new file mode 100644 index 0000000..81e92ee --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/diamond_shield_plating.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shield_platings", + "key": { + "m": "#minecraft:diamond_tool_materials", + "p": "#minecraft:planks" + }, + "pattern": [ + "mpm", + "ppp", + "mpm" + ], + "result": { + "id": "shields:diamond_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/gold_shield.json b/shields/src/generated/26.3/data/shields/recipe/gold_shield.json new file mode 100644 index 0000000..193b472 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/gold_shield.json @@ -0,0 +1,28 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:not", + "value": { + "condition": "fabric:any_mods_loaded", + "values": [ + "shields-mxsv", + "lolmsv" + ] + } + } + ], + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "d": "#minecraft:gold_tool_materials", + "w": "#minecraft:planks" + }, + "pattern": [ + "wdw", + "www", + " w " + ], + "result": { + "id": "shields:gold_shield" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/gold_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/gold_shield_decoration.json new file mode 100644 index 0000000..b78dd1e --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/gold_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:gold_shield" + }, + "target": "shields:gold_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/gold_shield_plating.json b/shields/src/generated/26.3/data/shields/recipe/gold_shield_plating.json new file mode 100644 index 0000000..abff22c --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/gold_shield_plating.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shield_platings", + "key": { + "m": "#minecraft:gold_tool_materials", + "p": "#minecraft:planks" + }, + "pattern": [ + "mpm", + "ppp", + "mpm" + ], + "result": { + "id": "shields:gold_shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/netherite_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/netherite_shield_decoration.json new file mode 100644 index 0000000..912223b --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/netherite_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:netherite_shield" + }, + "target": "shields:netherite_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/netherite_shield_plating_smithing.json b/shields/src/generated/26.3/data/shields/recipe/netherite_shield_plating_smithing.json new file mode 100644 index 0000000..da3fb19 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/netherite_shield_plating_smithing.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "#minecraft:netherite_tool_materials", + "base": "shields:diamond_shield_plating", + "result": { + "id": "shields:netherite_shield_plating" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/netherite_shield_smithing.json b/shields/src/generated/26.3/data/shields/recipe/netherite_shield_smithing.json new file mode 100644 index 0000000..d3fedb3 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/netherite_shield_smithing.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "minecraft:netherite_ingot", + "base": "shields:diamond_shield", + "result": { + "id": "shields:netherite_shield" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/plated_copper_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/plated_copper_shield_decoration.json new file mode 100644 index 0000000..73b0b52 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/plated_copper_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_copper_shield" + }, + "target": "shields:plated_copper_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/plated_diamond_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/plated_diamond_shield_decoration.json new file mode 100644 index 0000000..1cfb357 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/plated_diamond_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_diamond_shield" + }, + "target": "shields:plated_diamond_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/plated_gold_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/plated_gold_shield_decoration.json new file mode 100644 index 0000000..b26a23c --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/plated_gold_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_gold_shield" + }, + "target": "shields:plated_gold_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/plated_netherite_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/plated_netherite_shield_decoration.json new file mode 100644 index 0000000..d5d70f7 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/plated_netherite_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_netherite_shield" + }, + "target": "shields:plated_netherite_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/plated_shield_decoration.json b/shields/src/generated/26.3/data/shields/recipe/plated_shield_decoration.json new file mode 100644 index 0000000..ee7b483 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/plated_shield_decoration.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:crafting_special_shielddecoration", + "banner": "#minecraft:banners", + "result": { + "id": "shields:plated_shield" + }, + "target": "shields:plated_shield" +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/shield_plating.json b/shields/src/generated/26.3/data/shields/recipe/shield_plating.json new file mode 100644 index 0000000..5b2b8d7 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/shield_plating.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shield_platings", + "key": { + "m": "#minecraft:iron_tool_materials", + "p": "#minecraft:planks" + }, + "pattern": [ + "mpm", + "ppp", + "mpm" + ], + "result": { + "id": "shields:shield_plating" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/recipe/shield_repair_kit.json b/shields/src/generated/26.3/data/shields/recipe/shield_repair_kit.json new file mode 100644 index 0000000..52c8ecc --- /dev/null +++ b/shields/src/generated/26.3/data/shields/recipe/shield_repair_kit.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "i": "minecraft:iron_ingot", + "s": "minecraft:stick" + }, + "pattern": [ + " i ", + "isi", + " i " + ], + "result": { + "id": "shields:shield_repair_kit" + } +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/tags/enchantment/bracing_exclusive_set.json b/shields/src/generated/26.3/data/shields/tags/enchantment/bracing_exclusive_set.json new file mode 100644 index 0000000..6602971 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/tags/enchantment/bracing_exclusive_set.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "shields:momentum", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/tags/enchantment/evokering_exclusive_set.json b/shields/src/generated/26.3/data/shields/tags/enchantment/evokering_exclusive_set.json new file mode 100644 index 0000000..6eb1d45 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/tags/enchantment/evokering_exclusive_set.json @@ -0,0 +1,16 @@ +{ + "values": [ + { + "id": "shields:launching", + "required": false + }, + { + "id": "shields:lifebound", + "required": false + }, + { + "id": "shields:momentum", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/tags/enchantment/launching_exclusive_set.json b/shields/src/generated/26.3/data/shields/tags/enchantment/launching_exclusive_set.json new file mode 100644 index 0000000..ef468d5 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/tags/enchantment/launching_exclusive_set.json @@ -0,0 +1,16 @@ +{ + "values": [ + { + "id": "shields:evokering", + "required": false + }, + { + "id": "shields:momentum", + "required": false + }, + { + "id": "shields:lifebound", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/tags/enchantment/lifebound_exclusive_set.json b/shields/src/generated/26.3/data/shields/tags/enchantment/lifebound_exclusive_set.json new file mode 100644 index 0000000..9466e64 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/tags/enchantment/lifebound_exclusive_set.json @@ -0,0 +1,16 @@ +{ + "values": [ + { + "id": "shields:evokering", + "required": false + }, + { + "id": "shields:launching", + "required": false + }, + { + "id": "shields:momentum", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/tags/enchantment/momentum_exclusive_set.json b/shields/src/generated/26.3/data/shields/tags/enchantment/momentum_exclusive_set.json new file mode 100644 index 0000000..5a14204 --- /dev/null +++ b/shields/src/generated/26.3/data/shields/tags/enchantment/momentum_exclusive_set.json @@ -0,0 +1,20 @@ +{ + "values": [ + { + "id": "shields:lifebound", + "required": false + }, + { + "id": "shields:launching", + "required": false + }, + { + "id": "shields:evokering", + "required": false + }, + { + "id": "shields:bracing", + "required": false + } + ] +} \ No newline at end of file diff --git a/shields/src/generated/26.3/data/shields/tags/item/shields.json b/shields/src/generated/26.3/data/shields/tags/item/shields.json new file mode 100644 index 0000000..5d7260d --- /dev/null +++ b/shields/src/generated/26.3/data/shields/tags/item/shields.json @@ -0,0 +1,13 @@ +{ + "values": [ + "shields:plated_shield", + "shields:copper_shield", + "shields:plated_copper_shield", + "shields:diamond_shield", + "shields:plated_diamond_shield", + "shields:gold_shield", + "shields:plated_gold_shield", + "shields:netherite_shield", + "shields:plated_netherite_shield" + ] +} \ No newline at end of file diff --git a/shields/src/main/java/dev/imb11/shields/mixin/LivingEntityMixin.java b/shields/src/main/java/dev/imb11/shields/mixin/LivingEntityMixin.java index b7ada35..a2caa23 100644 --- a/shields/src/main/java/dev/imb11/shields/mixin/LivingEntityMixin.java +++ b/shields/src/main/java/dev/imb11/shields/mixin/LivingEntityMixin.java @@ -42,8 +42,10 @@ private void triggerBlockEvent(ServerLevel level, DamageSource source, float dam cancellable = true ) private void triggerDisabledEvent(ServerLevel level, LivingEntity attacker, + //? if >=26.2 + DamageSource source, float damage, //? if >26.2 - //DamageSource source, float damage, boolean fullyBlocked, + //boolean fullyBlocked, CallbackInfo ci) { LivingEntity self = (LivingEntity) (Object) this; diff --git a/sounds/build.fabric.gradle.kts b/sounds/build.fabric.gradle.kts index 0d4656e..afa69cb 100644 --- a/sounds/build.fabric.gradle.kts +++ b/sounds/build.fabric.gradle.kts @@ -20,19 +20,6 @@ loom { } } -fabricApi { - configureDataGeneration { - outputDirectory = project.parent!!.file("src/main/generated") - addToResources = false - client = true - } -} - -loom.runs.named("datagen") { - configName = "${modMetadata.required("mod.name")} - ${project.minecraftVersion} - Fabric - Data Generation" - runDir(rootProject.file("run/${modMetadata.id}/${project.minecraftVersion}/fabric/datagen").relativeTo(project.projectDir).invariantSeparatorsPath) -} - val legacyPlayerMixin = stonecutter.eval(stonecutter.current.version, "<26.3") tasks.processResources { inputs.property("legacyPlayerMixin", legacyPlayerMixin) diff --git a/sounds/mod.properties b/sounds/mod.properties index fea68fa..a8f8cbf 100644 --- a/sounds/mod.properties +++ b/sounds/mod.properties @@ -5,6 +5,7 @@ mod.license=ARR mod.version=2.6.0 mod.group=dev.imb11.sounds mod.required=mru +mod.datagen=true publish.modrinth=ZouiUX7t publish.curseforge=925889 publish.dependencies.fabric=fabric-api,yacl,mru diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/acacia_leaves.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/acacia_leaves.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/acacia_leaves.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/acacia_leaves.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/acacia_log.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/acacia_log.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/acacia_log.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/acacia_log.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/acacia_object.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/acacia_object.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/acacia_object.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/acacia_object.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/acacia_planks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/acacia_planks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/acacia_planks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/acacia_planks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/barrel.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/barrel.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/barrel.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/barrel.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/beehive.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/beehive.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/beehive.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/beehive.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/birch_leaves.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/birch_leaves.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/birch_leaves.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/birch_leaves.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/birch_log.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/birch_log.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/birch_log.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/birch_log.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/birch_object.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/birch_object.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/birch_object.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/birch_object.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/birch_planks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/birch_planks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/birch_planks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/birch_planks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/bookshelf.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/bookshelf.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/bookshelf.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/bookshelf.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/chest.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/chest.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/chest.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/chest.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/clay.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/clay.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/clay.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/clay.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/clay_bricks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/clay_bricks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/clay_bricks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/clay_bricks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/cobblestone.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/cobblestone.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/cobblestone.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/cobblestone.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/copper_ore.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/copper_ore.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/copper_ore.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/copper_ore.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/dark_prismarine.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/dark_prismarine.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/dark_prismarine.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/dark_prismarine.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/deepslate_copper_ore.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/deepslate_copper_ore.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/deepslate_copper_ore.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/deepslate_copper_ore.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/deepslate_gold_ore.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/deepslate_gold_ore.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/deepslate_gold_ore.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/deepslate_gold_ore.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/deepslate_iron_ore.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/deepslate_iron_ore.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/deepslate_iron_ore.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/deepslate_iron_ore.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/emerald_block.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/emerald_block.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/emerald_block.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/emerald_block.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/end_stone.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/end_stone.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/end_stone.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/end_stone.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/end_stone_bricks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/end_stone_bricks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/end_stone_bricks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/end_stone_bricks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/glass.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/glass.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/glass.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/glass.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/gold.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/gold.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/gold.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/gold.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/gold_ore.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/gold_ore.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/gold_ore.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/gold_ore.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/gravel.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/gravel.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/gravel.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/gravel.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/hay_block.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/hay_block.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/hay_block.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/hay_block.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/ice.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/ice.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/ice.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/ice.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/iron.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/iron.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/iron.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/iron.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/iron_ore.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/iron_ore.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/iron_ore.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/iron_ore.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/jungle_leaves.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/jungle_leaves.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/jungle_leaves.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/jungle_leaves.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/jungle_object.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/jungle_object.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/jungle_object.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/jungle_object.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/jungle_planks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/jungle_planks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/jungle_planks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/jungle_planks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/lapis_block.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/lapis_block.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/lapis_block.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/lapis_block.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/loom.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/loom.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/loom.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/loom.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/magma_block.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/magma_block.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/magma_block.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/magma_block.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/mangrove_leaves.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mangrove_leaves.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/mangrove_leaves.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mangrove_leaves.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/mangrove_log.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mangrove_log.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/mangrove_log.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mangrove_log.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/mangrove_object.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mangrove_object.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/mangrove_object.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mangrove_object.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/mangrove_planks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mangrove_planks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/mangrove_planks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mangrove_planks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/mossy_cobblestone.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mossy_cobblestone.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/mossy_cobblestone.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mossy_cobblestone.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/mossy_stone_bricks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mossy_stone_bricks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/mossy_stone_bricks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/mossy_stone_bricks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/oak_log.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/oak_log.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/oak_log.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/oak_log.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/obsidian.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/obsidian.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/obsidian.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/obsidian.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/packed_ice.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/packed_ice.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/packed_ice.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/packed_ice.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/prismarine.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/prismarine.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/prismarine.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/prismarine.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/quartz.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/quartz.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/quartz.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/quartz.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/raw_gold_block.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/raw_gold_block.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/raw_gold_block.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/raw_gold_block.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/sandstone.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/sandstone.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/sandstone.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/sandstone.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/sheet_metal.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/sheet_metal.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/sheet_metal.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/sheet_metal.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/spruce_leaves.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/spruce_leaves.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/spruce_leaves.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/spruce_leaves.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/spruce_log.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/spruce_log.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/spruce_log.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/spruce_log.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/spruce_object.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/spruce_object.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/spruce_object.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/spruce_object.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/spruce_planks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/spruce_planks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/spruce_planks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/spruce_planks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/stone_bricks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/stone_bricks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/stone_bricks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/stone_bricks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/blocks/terracotta.json b/sounds/src/generated/26.3/assets/minecraft/sounds/blocks/terracotta.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/blocks/terracotta.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/blocks/terracotta.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/acacia_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/acacia_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/acacia_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/acacia_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/anvils.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/anvils.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/anvils.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/anvils.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/bamboo_raft.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/bamboo_raft.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/bamboo_raft.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/bamboo_raft.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/banner_templates.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/banner_templates.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/banner_templates.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/banner_templates.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/birch_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/birch_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/birch_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/birch_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/bones.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/bones.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/bones.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/bones.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/bowl.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/bowl.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/bowl.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/bowl.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/bowl_food.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/bowl_food.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/bowl_food.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/bowl_food.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/bows.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/bows.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/bows.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/bows.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/brewing_items.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/brewing_items.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/brewing_items.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/brewing_items.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/chainmail_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/chainmail_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/chainmail_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/chainmail_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/cherry_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/cherry_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/cherry_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/cherry_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/copper_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/copper_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/copper_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/copper_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/crop_food.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/crop_food.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/crop_food.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/crop_food.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/dark_oak_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/dark_oak_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/dark_oak_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/dark_oak_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/diamond_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/diamond_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/diamond_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/diamond_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/dirty_metals.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/dirty_metals.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/dirty_metals.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/dirty_metals.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/dyes.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/dyes.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/dyes.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/dyes.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/elytra.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/elytra.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/elytra.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/elytra.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/enchanting_books.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/enchanting_books.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/enchanting_books.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/enchanting_books.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/exoskeletal.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/exoskeletal.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/exoskeletal.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/exoskeletal.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/filled_buckets.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/filled_buckets.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/filled_buckets.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/filled_buckets.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/fireworks.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/fireworks.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/fireworks.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/fireworks.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/fishing_rods.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/fishing_rods.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/fishing_rods.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/fishing_rods.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/flint_and_steel.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/flint_and_steel.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/flint_and_steel.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/flint_and_steel.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/golden_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/golden_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/golden_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/golden_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/ingot_metals.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/ingot_metals.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/ingot_metals.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/ingot_metals.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/iron_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/iron_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/iron_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/iron_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/jungle_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/jungle_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/jungle_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/jungle_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/leather_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/leather_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/leather_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/leather_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/mangrove_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/mangrove_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/mangrove_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/mangrove_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/meat_and_fish.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/meat_and_fish.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/meat_and_fish.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/meat_and_fish.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/minecarts.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/minecarts.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/minecarts.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/minecarts.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/netherite_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/netherite_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/netherite_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/netherite_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/oak_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/oak_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/oak_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/oak_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/pale_oak_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/pale_oak_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/pale_oak_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/pale_oak_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/papers.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/papers.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/papers.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/papers.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/sculk.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/sculk.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/sculk.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/sculk.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/shards.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/shards.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/shards.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/shards.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/shiny_metals.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/shiny_metals.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/shiny_metals.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/shiny_metals.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/smithing_templates.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/smithing_templates.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/smithing_templates.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/smithing_templates.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/spawn_eggs.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/spawn_eggs.json similarity index 98% rename from sounds/src/main/generated/assets/minecraft/sounds/items/spawn_eggs.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/spawn_eggs.json index e99e74b..7880fb7 100644 --- a/sounds/src/main/generated/assets/minecraft/sounds/items/spawn_eggs.json +++ b/sounds/src/generated/26.3/assets/minecraft/sounds/items/spawn_eggs.json @@ -69,6 +69,7 @@ "minecraft:squid_spawn_egg", "minecraft:stray_spawn_egg", "minecraft:strider_spawn_egg", + "minecraft:sulfur_cube_spawn_egg", "minecraft:tadpole_spawn_egg", "minecraft:trader_llama_spawn_egg", "minecraft:tropical_fish_spawn_egg", diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/spruce_boat.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/spruce_boat.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/spruce_boat.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/spruce_boat.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/stone_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/stone_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/stone_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/stone_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/trial_keys.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/trial_keys.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/trial_keys.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/trial_keys.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/trident.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/trident.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/trident.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/trident.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/wet_mob_drops.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/wet_mob_drops.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/wet_mob_drops.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/wet_mob_drops.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/wind_charge.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/wind_charge.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/wind_charge.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/wind_charge.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/items/wooden_equipment.json b/sounds/src/generated/26.3/assets/minecraft/sounds/items/wooden_equipment.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/items/wooden_equipment.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/items/wooden_equipment.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/anvil.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/anvil.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/anvil.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/anvil.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/beacon.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/beacon.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/beacon.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/beacon.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/brewing_stand.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/brewing_stand.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/brewing_stand.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/brewing_stand.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/cartography_table.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/cartography_table.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/cartography_table.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/cartography_table.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/crafting.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/crafting.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/crafting.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/crafting.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/enchantment_table.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/enchantment_table.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/enchantment_table.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/enchantment_table.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/furnace.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/furnace.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/furnace.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/furnace.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/grindstone.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/grindstone.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/grindstone.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/grindstone.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/lectern.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/lectern.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/lectern.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/lectern.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/loom.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/loom.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/loom.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/loom.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/redstone_item_movement.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/redstone_item_movement.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/redstone_item_movement.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/redstone_item_movement.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/smithing.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/smithing.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/smithing.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/smithing.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/smoker.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/smoker.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/smoker.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/smoker.json diff --git a/sounds/src/main/generated/assets/minecraft/sounds/screens/stonecutter.json b/sounds/src/generated/26.3/assets/minecraft/sounds/screens/stonecutter.json similarity index 100% rename from sounds/src/main/generated/assets/minecraft/sounds/screens/stonecutter.json rename to sounds/src/generated/26.3/assets/minecraft/sounds/screens/stonecutter.json diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index f079fca..bd1c2f1 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -3,7 +3,7 @@ plugins { id("imb11.root") } -stonecutter active "26.1.2-fabric" +stonecutter active "26.2-fabric" stonecutter parameters { constants.match(node.metadata.project.substringAfterLast('-'), "fabric", "neoforge")