From 7d4eaf38c97561cba0f3c881bfb41f6f9111addd Mon Sep 17 00:00:00 2001 From: techno-sam <77073745+techno-sam@users.noreply.github.com> Date: Sat, 4 Apr 2026 17:10:08 +0200 Subject: [PATCH] Porting II --- .../5790708f1bab3bc9da26dbe9791dce16c55e0cb8 | 82 ++++++------ .../6c343772b5bbed02cb8017d08d07aa1ea684e455 | 4 +- .../dcc41341364508cf6e5f757a3f66d54c126e2c9d | 4 +- .../assets/crystalline_sky/items/sky.json | 6 - .../crystalline_sky/items/sky_light.json | 125 ------------------ .../crystalline_sky/items/weeping_sky.json | 6 - .../items/weeping_sky_light.json | 6 - .../models/item/sky_light.json | 98 ++++++++++++++ .../crystalline_sky/CrystallineSkyClient.java | 13 ++ .../CrystallineSkyModelProvider.java | 26 ++++ .../mixin/client/GameRendererMixin.java | 3 +- .../mixin/client/RenderLayerMixin.java | 28 ++-- .../mixin_ducks/client/RenderLayer_Duck.java | 5 + .../client/CrystallineRenderLayers.java | 6 + 14 files changed, 208 insertions(+), 204 deletions(-) delete mode 100644 src/generated/resources/assets/crystalline_sky/items/sky.json delete mode 100644 src/generated/resources/assets/crystalline_sky/items/sky_light.json delete mode 100644 src/generated/resources/assets/crystalline_sky/items/weeping_sky.json delete mode 100644 src/generated/resources/assets/crystalline_sky/items/weeping_sky_light.json create mode 100644 src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/RenderLayer_Duck.java diff --git a/src/generated/resources/.cache/5790708f1bab3bc9da26dbe9791dce16c55e0cb8 b/src/generated/resources/.cache/5790708f1bab3bc9da26dbe9791dce16c55e0cb8 index 8b3479d..7d76adb 100644 --- a/src/generated/resources/.cache/5790708f1bab3bc9da26dbe9791dce16c55e0cb8 +++ b/src/generated/resources/.cache/5790708f1bab3bc9da26dbe9791dce16c55e0cb8 @@ -1,48 +1,44 @@ -// 1.21.8 -999999999-01-01T00:00:00 Crystalline Sky/Model Definitions -e832366c216102270b75085db7a7169881b853b3 assets/crystalline_sky/blockstates/sky.json -ecc125a24d3e2c86d922352d8449f26a4e06d122 assets/crystalline_sky/blockstates/sky_light.json -03e2eb768bc34fbeaabffbff8ed3a2a3044a6db1 assets/crystalline_sky/blockstates/weeping_sky.json -9b3d01168a1cc29b99cf69fe225ad69b0923c9fe assets/crystalline_sky/blockstates/weeping_sky_light.json -c0168359bc7e3978778cee2d000b21c3889c235c assets/crystalline_sky/items/sky.json -c9ebbcbf9d632aeab6bfab2014d7c225f2b290d9 assets/crystalline_sky/items/sky_light.json -2371c7a720a552589983925a24677fd3d1b649b4 assets/crystalline_sky/items/weeping_sky.json -b14b5a0b951ae24fb4b79df59416163b1303d32e assets/crystalline_sky/items/weeping_sky_light.json -6d1e10716c05150e73b2b9e254091125264a7a3d assets/crystalline_sky/models/block/sky.json -3183aeb9fff78d0c65f1ddd0dfb599420573e281 assets/crystalline_sky/models/block/sky_light_00.json -7eaa4c3d4913e0cb117585204dd1dd9e58402b83 assets/crystalline_sky/models/block/sky_light_01.json -59463cef438e58b137e5ce27402acf42a3a0ae87 assets/crystalline_sky/models/block/sky_light_02.json -ee9cb7604922cdb2ad71d021a593ca82f0baf493 assets/crystalline_sky/models/block/sky_light_03.json -317f9881c20b1aaa3902b3999dd1c76d00afbde6 assets/crystalline_sky/models/block/sky_light_04.json -2ce612b8445da92c6cecd07bd5364a25bcfb127f assets/crystalline_sky/models/block/sky_light_05.json -19859c3124196f3788bfbae1ec2bcd4d1e46db2e assets/crystalline_sky/models/block/sky_light_06.json +// 1.21.1 2026-04-04T17:09:36.734955339 Crystalline Sky/Model Definitions fceb0c59b7f6d431200764ccf87596541bacb17f assets/crystalline_sky/models/block/sky_light_07.json -c0d693e4f78ce15c238909130382909abda4c922 assets/crystalline_sky/models/block/sky_light_08.json -ef9e5aca345b59cb4692a7bcfaac539aed6f6889 assets/crystalline_sky/models/block/sky_light_09.json -9c6ba4d90f2c4f2a9beb910c1b32023e49445749 assets/crystalline_sky/models/block/sky_light_10.json -e91808daecfc454b784f5fb27003c58bb0caedce assets/crystalline_sky/models/block/sky_light_11.json -e2c7bebd9eca446bb06fff866ec4d4996917e7e4 assets/crystalline_sky/models/block/sky_light_12.json -0b4015acca6117ea633ae3cdaf3fe40fcab6b628 assets/crystalline_sky/models/block/sky_light_13.json -0ac5351c3a01e0f9e76517452918e12770b3b54b assets/crystalline_sky/models/block/sky_light_14.json -a87d8988452529a1f5af5662ad636223fdd98fec assets/crystalline_sky/models/block/sky_light_15.json -14508173fcca14cb42755d47374c94d3eace42ce assets/crystalline_sky/models/block/weeping_sky.json -508ffb97ee711b53767b9d33659596197f69ee20 assets/crystalline_sky/models/block/weeping_sky_light.json -008a0d0a76a34d8f375fa355452a5d0f93f9af3b assets/crystalline_sky/models/item/sky.json -2fedd8aff557d4e559ffa8166b4e5ac78136046d assets/crystalline_sky/models/item/sky_light.json -9f0d9fe5dfb05bbe18177db5c40e600c5b256858 assets/crystalline_sky/models/item/sky_light_00.json -0e8a96cfb88f4c58679709cc9397b5700878a9c4 assets/crystalline_sky/models/item/sky_light_01.json -ed5894de7afa66f73c72093f2dd7d046cf647070 assets/crystalline_sky/models/item/sky_light_02.json -b29c14f77a08da7a6994cff4c6801d6f04b12ec0 assets/crystalline_sky/models/item/sky_light_03.json -51fa40ff02afcec303e7a18478cbae5375dfb140 assets/crystalline_sky/models/item/sky_light_04.json -42f8b696ba0f511edce656b9055764ed13013221 assets/crystalline_sky/models/item/sky_light_05.json -910c51120a0931851db6b75b337bc21241165c2f assets/crystalline_sky/models/item/sky_light_06.json dff33a68a694de0f3ef177886c002204ffe49a8c assets/crystalline_sky/models/item/sky_light_07.json -89582890605d371d936384a83950af603d2fe495 assets/crystalline_sky/models/item/sky_light_08.json -7115b88da2cc0bfdc68646d034de8d14f181eb01 assets/crystalline_sky/models/item/sky_light_09.json -9c6c61b7f805a614d2d15d8dde390ed068913182 assets/crystalline_sky/models/item/sky_light_10.json -04f1e4eba184b8e7b1669fc61006e3d00e09d164 assets/crystalline_sky/models/item/sky_light_11.json +51fa40ff02afcec303e7a18478cbae5375dfb140 assets/crystalline_sky/models/item/sky_light_04.json +14508173fcca14cb42755d47374c94d3eace42ce assets/crystalline_sky/models/block/weeping_sky.json +317f9881c20b1aaa3902b3999dd1c76d00afbde6 assets/crystalline_sky/models/block/sky_light_04.json +9b3d01168a1cc29b99cf69fe225ad69b0923c9fe assets/crystalline_sky/blockstates/weeping_sky_light.json +a87d8988452529a1f5af5662ad636223fdd98fec assets/crystalline_sky/models/block/sky_light_15.json +0e8a96cfb88f4c58679709cc9397b5700878a9c4 assets/crystalline_sky/models/item/sky_light_01.json +ecc125a24d3e2c86d922352d8449f26a4e06d122 assets/crystalline_sky/blockstates/sky_light.json b8795df31017499b35a5b37a4dfbe555a8242cb0 assets/crystalline_sky/models/item/sky_light_12.json -25f0831f8c64db0e5c08fc968445e329f1e3a91c assets/crystalline_sky/models/item/sky_light_13.json -58349dc5dedb8016fb0bc958fcd4a9ccde13a1cd assets/crystalline_sky/models/item/sky_light_14.json d500e56057c0c2f3c948894694e2826f1726fd9e assets/crystalline_sky/models/item/sky_light_15.json -15c0a47d504ddd41bbecd4ac58c0c8ccd0f37943 assets/crystalline_sky/models/item/weeping_sky.json +0b4015acca6117ea633ae3cdaf3fe40fcab6b628 assets/crystalline_sky/models/block/sky_light_13.json +7115b88da2cc0bfdc68646d034de8d14f181eb01 assets/crystalline_sky/models/item/sky_light_09.json +910c51120a0931851db6b75b337bc21241165c2f assets/crystalline_sky/models/item/sky_light_06.json +59463cef438e58b137e5ce27402acf42a3a0ae87 assets/crystalline_sky/models/block/sky_light_02.json +9c6ba4d90f2c4f2a9beb910c1b32023e49445749 assets/crystalline_sky/models/block/sky_light_10.json +ef5afdbcc8401a27029b6f0a29fa1117761c620d assets/crystalline_sky/models/item/sky_light.json +9f0d9fe5dfb05bbe18177db5c40e600c5b256858 assets/crystalline_sky/models/item/sky_light_00.json +b29c14f77a08da7a6994cff4c6801d6f04b12ec0 assets/crystalline_sky/models/item/sky_light_03.json +19859c3124196f3788bfbae1ec2bcd4d1e46db2e assets/crystalline_sky/models/block/sky_light_06.json +508ffb97ee711b53767b9d33659596197f69ee20 assets/crystalline_sky/models/block/weeping_sky_light.json +ef9e5aca345b59cb4692a7bcfaac539aed6f6889 assets/crystalline_sky/models/block/sky_light_09.json +04f1e4eba184b8e7b1669fc61006e3d00e09d164 assets/crystalline_sky/models/item/sky_light_11.json +0ac5351c3a01e0f9e76517452918e12770b3b54b assets/crystalline_sky/models/block/sky_light_14.json +58349dc5dedb8016fb0bc958fcd4a9ccde13a1cd assets/crystalline_sky/models/item/sky_light_14.json +03e2eb768bc34fbeaabffbff8ed3a2a3044a6db1 assets/crystalline_sky/blockstates/weeping_sky.json be0be7e1d7ce1ccabed01ef09c6499a2a7f2b132 assets/crystalline_sky/models/item/weeping_sky_light.json +e91808daecfc454b784f5fb27003c58bb0caedce assets/crystalline_sky/models/block/sky_light_11.json +3183aeb9fff78d0c65f1ddd0dfb599420573e281 assets/crystalline_sky/models/block/sky_light_00.json +ee9cb7604922cdb2ad71d021a593ca82f0baf493 assets/crystalline_sky/models/block/sky_light_03.json +c0d693e4f78ce15c238909130382909abda4c922 assets/crystalline_sky/models/block/sky_light_08.json +2ce612b8445da92c6cecd07bd5364a25bcfb127f assets/crystalline_sky/models/block/sky_light_05.json +25f0831f8c64db0e5c08fc968445e329f1e3a91c assets/crystalline_sky/models/item/sky_light_13.json +15c0a47d504ddd41bbecd4ac58c0c8ccd0f37943 assets/crystalline_sky/models/item/weeping_sky.json +ed5894de7afa66f73c72093f2dd7d046cf647070 assets/crystalline_sky/models/item/sky_light_02.json +42f8b696ba0f511edce656b9055764ed13013221 assets/crystalline_sky/models/item/sky_light_05.json +9c6c61b7f805a614d2d15d8dde390ed068913182 assets/crystalline_sky/models/item/sky_light_10.json +6d1e10716c05150e73b2b9e254091125264a7a3d assets/crystalline_sky/models/block/sky.json +e2c7bebd9eca446bb06fff866ec4d4996917e7e4 assets/crystalline_sky/models/block/sky_light_12.json +e832366c216102270b75085db7a7169881b853b3 assets/crystalline_sky/blockstates/sky.json +7eaa4c3d4913e0cb117585204dd1dd9e58402b83 assets/crystalline_sky/models/block/sky_light_01.json +89582890605d371d936384a83950af603d2fe495 assets/crystalline_sky/models/item/sky_light_08.json +008a0d0a76a34d8f375fa355452a5d0f93f9af3b assets/crystalline_sky/models/item/sky.json diff --git a/src/generated/resources/.cache/6c343772b5bbed02cb8017d08d07aa1ea684e455 b/src/generated/resources/.cache/6c343772b5bbed02cb8017d08d07aa1ea684e455 index 2255c25..af15c88 100644 --- a/src/generated/resources/.cache/6c343772b5bbed02cb8017d08d07aa1ea684e455 +++ b/src/generated/resources/.cache/6c343772b5bbed02cb8017d08d07aa1ea684e455 @@ -1,3 +1,3 @@ -// 1.21.8 -999999999-01-01T00:00:00 Crystalline Sky/Tags for minecraft:block -1389c0b812f7a6e4d5dd00edac1dc07beb5f9552 data/crystalline_sky/tags/block/sky_light_emitters.json +// 1.21.1 2026-04-04T17:09:36.733906405 Crystalline Sky/Tags for minecraft:block 606477607a09045ff2830cbc036e744d6a728bbd data/minecraft/tags/block/crystal_sound_blocks.json +1389c0b812f7a6e4d5dd00edac1dc07beb5f9552 data/crystalline_sky/tags/block/sky_light_emitters.json diff --git a/src/generated/resources/.cache/dcc41341364508cf6e5f757a3f66d54c126e2c9d b/src/generated/resources/.cache/dcc41341364508cf6e5f757a3f66d54c126e2c9d index 5e21ebe..77e5bcd 100644 --- a/src/generated/resources/.cache/dcc41341364508cf6e5f757a3f66d54c126e2c9d +++ b/src/generated/resources/.cache/dcc41341364508cf6e5f757a3f66d54c126e2c9d @@ -1,3 +1,3 @@ -// 1.21.8 -999999999-01-01T00:00:00 Crystalline Sky/Block Loot Tables -6a9b7a08424cbd3d699dfd3252d432517254aa45 data/crystalline_sky/loot_table/blocks/sky.json +// 1.21.1 2026-04-04T17:09:36.73618123 Crystalline Sky/Block Loot Tables 337de0acfc1b9b86adde0705e342ed1d4b5c9c4e data/crystalline_sky/loot_table/blocks/weeping_sky.json +6a9b7a08424cbd3d699dfd3252d432517254aa45 data/crystalline_sky/loot_table/blocks/sky.json diff --git a/src/generated/resources/assets/crystalline_sky/items/sky.json b/src/generated/resources/assets/crystalline_sky/items/sky.json deleted file mode 100644 index b3ec26f..0000000 --- a/src/generated/resources/assets/crystalline_sky/items/sky.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/crystalline_sky/items/sky_light.json b/src/generated/resources/assets/crystalline_sky/items/sky_light.json deleted file mode 100644 index 9495310..0000000 --- a/src/generated/resources/assets/crystalline_sky/items/sky_light.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "model": { - "type": "minecraft:select", - "block_state_property": "level", - "cases": [ - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_00" - }, - "when": "0" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_01" - }, - "when": "1" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_02" - }, - "when": "2" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_03" - }, - "when": "3" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_04" - }, - "when": "4" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_05" - }, - "when": "5" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_06" - }, - "when": "6" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_07" - }, - "when": "7" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_08" - }, - "when": "8" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_09" - }, - "when": "9" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_10" - }, - "when": "10" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_11" - }, - "when": "11" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_12" - }, - "when": "12" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_13" - }, - "when": "13" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_14" - }, - "when": "14" - }, - { - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light_15" - }, - "when": "15" - } - ], - "fallback": { - "type": "minecraft:model", - "model": "crystalline_sky:item/sky_light" - }, - "property": "minecraft:block_state" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/crystalline_sky/items/weeping_sky.json b/src/generated/resources/assets/crystalline_sky/items/weeping_sky.json deleted file mode 100644 index 959c7bb..0000000 --- a/src/generated/resources/assets/crystalline_sky/items/weeping_sky.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/weeping_sky" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/crystalline_sky/items/weeping_sky_light.json b/src/generated/resources/assets/crystalline_sky/items/weeping_sky_light.json deleted file mode 100644 index 81dde48..0000000 --- a/src/generated/resources/assets/crystalline_sky/items/weeping_sky_light.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "crystalline_sky:item/weeping_sky_light" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/crystalline_sky/models/item/sky_light.json b/src/generated/resources/assets/crystalline_sky/models/item/sky_light.json index ea7699a..06704d3 100644 --- a/src/generated/resources/assets/crystalline_sky/models/item/sky_light.json +++ b/src/generated/resources/assets/crystalline_sky/models/item/sky_light.json @@ -1,5 +1,103 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "crystalline_sky:item/sky_light_00", + "predicate": { + "level": 0.0 + } + }, + { + "model": "crystalline_sky:item/sky_light_01", + "predicate": { + "level": 0.0625 + } + }, + { + "model": "crystalline_sky:item/sky_light_02", + "predicate": { + "level": 0.125 + } + }, + { + "model": "crystalline_sky:item/sky_light_03", + "predicate": { + "level": 0.1875 + } + }, + { + "model": "crystalline_sky:item/sky_light_04", + "predicate": { + "level": 0.25 + } + }, + { + "model": "crystalline_sky:item/sky_light_05", + "predicate": { + "level": 0.3125 + } + }, + { + "model": "crystalline_sky:item/sky_light_06", + "predicate": { + "level": 0.375 + } + }, + { + "model": "crystalline_sky:item/sky_light_07", + "predicate": { + "level": 0.4375 + } + }, + { + "model": "crystalline_sky:item/sky_light_08", + "predicate": { + "level": 0.5 + } + }, + { + "model": "crystalline_sky:item/sky_light_09", + "predicate": { + "level": 0.5625 + } + }, + { + "model": "crystalline_sky:item/sky_light_10", + "predicate": { + "level": 0.625 + } + }, + { + "model": "crystalline_sky:item/sky_light_11", + "predicate": { + "level": 0.6875 + } + }, + { + "model": "crystalline_sky:item/sky_light_12", + "predicate": { + "level": 0.75 + } + }, + { + "model": "crystalline_sky:item/sky_light_13", + "predicate": { + "level": 0.8125 + } + }, + { + "model": "crystalline_sky:item/sky_light_14", + "predicate": { + "level": 0.875 + } + }, + { + "model": "crystalline_sky:item/sky_light_15", + "predicate": { + "level": 0.9375 + } + } + ], "textures": { "layer0": "crystalline_sky:item/sky_light" } diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/CrystallineSkyClient.java b/src/main/java/io/github/slimeistdev/crystalline_sky/CrystallineSkyClient.java index b790e0e..7e1676f 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/CrystallineSkyClient.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/CrystallineSkyClient.java @@ -2,16 +2,22 @@ package io.github.slimeistdev.crystalline_sky; import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.DebugRenderer_Duck; import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; +import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems; import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.block.LightBlock; +import net.minecraft.client.item.ModelPredicateProviderRegistry; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.BlockStateComponent; import net.minecraft.screen.ScreenTexts; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; import org.lwjgl.glfw.GLFW; public class CrystallineSkyClient implements ClientModInitializer { @@ -38,6 +44,13 @@ public class CrystallineSkyClient implements ClientModInitializer { client.inGameHud.getChatHud().addMessage(message); } }); + + ModelPredicateProviderRegistry.register(CrystallineItems.SKY_LIGHT, Identifier.ofVanilla("level"), + (stack, world, entity, seed) -> { + BlockStateComponent blockStateComponent = stack.getOrDefault(DataComponentTypes.BLOCK_STATE, BlockStateComponent.DEFAULT); + Integer integer = blockStateComponent.getValue(LightBlock.LEVEL_15); + return integer != null ? integer / 16.0F : 1.0F; + }); } @SuppressWarnings("SameParameterValue") diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyModelProvider.java b/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyModelProvider.java index 742bdbe..cdbaac6 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyModelProvider.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyModelProvider.java @@ -1,5 +1,7 @@ package io.github.slimeistdev.crystalline_sky.datagen.providers; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; @@ -44,6 +46,7 @@ public class CrystallineSkyModelProvider extends FabricModelProvider { } private void registerSkyLightBlock(BlockStateModelGenerator gen, Block block, Item item) { + gen.excludeFromSimpleItemModelGeneration(block); BlockStateVariantMap.SingleProperty singleProperty = BlockStateVariantMap.create(Properties.LEVEL_15); for (int level = 0; level <= 15; level++) { @@ -62,6 +65,29 @@ public class CrystallineSkyModelProvider extends FabricModelProvider { } // TODO generate root-level item model itself + Models.GENERATED.upload( + ModelIds.getItemModelId(item), + TextureMap.layer0(item), + gen.modelCollector, + (id, textures) -> { + JsonObject base = Models.GENERATED.createJson(id, textures); + var overrides = new JsonArray(); + for (int level = 0; level <= 15; level++) { + JsonObject override = new JsonObject(); + + JsonObject predicate = new JsonObject(); + predicate.addProperty("level", level / 16f); + override.add("predicate", predicate); + + String suffix = String.format(Locale.ROOT, "_%02d", level); + Identifier model = TextureMap.getSubId(item, suffix); + override.addProperty("model", model.toString()); + + overrides.add(override); + } + base.add("overrides", overrides); + return base; + }); gen.blockStateCollector.accept(VariantsBlockStateSupplier.create(block).coordinate(singleProperty)); } diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/GameRendererMixin.java b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/GameRendererMixin.java index 093c7a3..ae43300 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/GameRendererMixin.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/GameRendererMixin.java @@ -17,11 +17,10 @@ import java.util.function.Consumer; @Mixin(GameRenderer.class) public class GameRendererMixin { - @SuppressWarnings("InvalidInjectorMethodSignature") @WrapOperation(method = "loadPrograms", at = @At(value = "INVOKE", target = "Ljava/util/List;add(Ljava/lang/Object;)Z", ordinal = 0)) private >> boolean loadSkyProgram( List instance, - E e, + Object e, Operation original, ResourceFactory factory ) throws IOException { diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/RenderLayerMixin.java b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/RenderLayerMixin.java index 2fa7eed..64191ee 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/RenderLayerMixin.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/RenderLayerMixin.java @@ -1,21 +1,25 @@ package io.github.slimeistdev.crystalline_sky.mixin.client; import com.google.common.collect.ImmutableList; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers; +import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.RenderLayer_Duck; import net.minecraft.client.render.RenderLayer; -import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; @Mixin(RenderLayer.class) -public class RenderLayerMixin { - @WrapOperation(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/RenderLayer;BLOCK_LAYERS:Lcom/google/common/collect/ImmutableList;", opcode = Opcodes.PUTSTATIC)) - private static void addSkyToBlockLayers(ImmutableList value, Operation original) { - original.call(ImmutableList.builder() - .addAll(value) - .add(CrystallineRenderLayers.SKY) - .build()); +public class RenderLayerMixin implements RenderLayer_Duck { + @Shadow + @Final + @Mutable + private static ImmutableList BLOCK_LAYERS; + + @Override + public void crystalline_sky$markAsBlockLayer() { + BLOCK_LAYERS = ImmutableList.builder() + .addAll(BLOCK_LAYERS) + .add((RenderLayer) (Object) this) + .build(); } } diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/RenderLayer_Duck.java b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/RenderLayer_Duck.java new file mode 100644 index 0000000..cbfbc7c --- /dev/null +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/RenderLayer_Duck.java @@ -0,0 +1,5 @@ +package io.github.slimeistdev.crystalline_sky.mixin_ducks.client; + +public interface RenderLayer_Duck { + void crystalline_sky$markAsBlockLayer(); +} diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/registry/client/CrystallineRenderLayers.java b/src/main/java/io/github/slimeistdev/crystalline_sky/registry/client/CrystallineRenderLayers.java index dfe54d7..aec83d5 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/registry/client/CrystallineRenderLayers.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/registry/client/CrystallineRenderLayers.java @@ -1,6 +1,7 @@ package io.github.slimeistdev.crystalline_sky.registry.client; import com.mojang.blaze3d.systems.RenderSystem; +import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.RenderLayer_Duck; import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.WorldRenderer_Duck; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -32,6 +33,11 @@ public class CrystallineRenderLayers { .build(true) ); + static { + //noinspection DataFlowIssue + ((RenderLayer_Duck) SKY).crystalline_sky$markAsBlockLayer(); + } + private static class SkyBufferTexture extends RenderPhase.TextureBase { public SkyBufferTexture() { super(() -> {