From e130a9d47c56ec2e9b19def5b239d92aef12db59 Mon Sep 17 00:00:00 2001 From: techno-sam <77073745+techno-sam@users.noreply.github.com> Date: Sat, 25 Apr 2026 13:27:28 +0200 Subject: [PATCH] Skybox II better fabric model loading, clean up shaders --- .../5790708f1bab3bc9da26dbe9791dce16c55e0cb8 | 4 +- .../6c343772b5bbed02cb8017d08d07aa1ea684e455 | 2 +- .../dcc41341364508cf6e5f757a3f66d54c126e2c9d | 2 +- .../models/block/skybox_test.json | 3 +- .../client/BlockModelDeserializerMixin.java | 42 +++++++++++++++---- .../mixin/client/BlockModelMixin.java | 36 ++++++++++++++++ .../mixin/client/SimpleBakedModelMixin.java | 22 ++++++++++ .../mixin_ducks/client/BlockModel_Duck.java | 6 +++ .../client/SimpleBakedModel_Duck.java | 6 +++ .../crystalline_sky_rendertype_skybox.fsh | 36 +++++++++++----- .../crystalline_sky-common.mixins.json | 2 + .../fabric/CrystallineSkyClientImpl.java | 2 +- .../CrystallineSkyModelProvider.java | 15 ++++++- .../SkyboxBakedModel.java | 23 +--------- .../SkyboxModelLoadingPlugin.java | 16 +++---- 15 files changed, 160 insertions(+), 57 deletions(-) create mode 100644 common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/BlockModelMixin.java create mode 100644 common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/SimpleBakedModelMixin.java create mode 100644 common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/BlockModel_Duck.java create mode 100644 common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/SimpleBakedModel_Duck.java rename fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/{render_tmp => skybox_model}/SkyboxBakedModel.java (80%) rename fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/{render_tmp => skybox_model}/SkyboxModelLoadingPlugin.java (50%) diff --git a/common/src/generated/resources/.cache/5790708f1bab3bc9da26dbe9791dce16c55e0cb8 b/common/src/generated/resources/.cache/5790708f1bab3bc9da26dbe9791dce16c55e0cb8 index aa17019..9c01d95 100644 --- a/common/src/generated/resources/.cache/5790708f1bab3bc9da26dbe9791dce16c55e0cb8 +++ b/common/src/generated/resources/.cache/5790708f1bab3bc9da26dbe9791dce16c55e0cb8 @@ -1,4 +1,4 @@ -// 1.21.1 2026-04-25T02:02:19.160711408 Crystalline Sky/Model Definitions +// 1.21.1 2026-04-25T13:07:32.974736053 Crystalline Sky/Model Definitions e832366c216102270b75085db7a7169881b853b3 assets/crystalline_sky/blockstates/sky.json 0ac5351c3a01e0f9e76517452918e12770b3b54b assets/crystalline_sky/models/block/sky_light_14.json ee9cb7604922cdb2ad71d021a593ca82f0baf493 assets/crystalline_sky/models/block/sky_light_03.json @@ -13,7 +13,7 @@ ef9e5aca345b59cb4692a7bcfaac539aed6f6889 assets/crystalline_sky/models/block/sky ef5afdbcc8401a27029b6f0a29fa1117761c620d assets/crystalline_sky/models/item/sky_light.json 59463cef438e58b137e5ce27402acf42a3a0ae87 assets/crystalline_sky/models/block/sky_light_02.json 2763952a1919802e34f0976b023fc7b486456b91 assets/crystalline_sky/models/item/skybox_test.json -9f63a1dc282986e15f9b22bee0ab0a2eaf4f994d assets/crystalline_sky/models/block/skybox_test.json +e3a94ee688f28874452b8862359916adfdcf223e assets/crystalline_sky/models/block/skybox_test.json c0d693e4f78ce15c238909130382909abda4c922 assets/crystalline_sky/models/block/sky_light_08.json 008a0d0a76a34d8f375fa355452a5d0f93f9af3b assets/crystalline_sky/models/item/sky.json 508ffb97ee711b53767b9d33659596197f69ee20 assets/crystalline_sky/models/block/weeping_sky_light.json diff --git a/common/src/generated/resources/.cache/6c343772b5bbed02cb8017d08d07aa1ea684e455 b/common/src/generated/resources/.cache/6c343772b5bbed02cb8017d08d07aa1ea684e455 index 95d586c..0a86761 100644 --- a/common/src/generated/resources/.cache/6c343772b5bbed02cb8017d08d07aa1ea684e455 +++ b/common/src/generated/resources/.cache/6c343772b5bbed02cb8017d08d07aa1ea684e455 @@ -1,3 +1,3 @@ -// 1.21.1 2026-04-25T02:02:19.159567873 Crystalline Sky/Tags for minecraft:block +// 1.21.1 2026-04-25T13:07:32.974065609 Crystalline Sky/Tags for minecraft:block 1389c0b812f7a6e4d5dd00edac1dc07beb5f9552 data/crystalline_sky/tags/block/sky_light_emitters.json 606477607a09045ff2830cbc036e744d6a728bbd data/minecraft/tags/block/crystal_sound_blocks.json diff --git a/common/src/generated/resources/.cache/dcc41341364508cf6e5f757a3f66d54c126e2c9d b/common/src/generated/resources/.cache/dcc41341364508cf6e5f757a3f66d54c126e2c9d index f3bda29..14acc67 100644 --- a/common/src/generated/resources/.cache/dcc41341364508cf6e5f757a3f66d54c126e2c9d +++ b/common/src/generated/resources/.cache/dcc41341364508cf6e5f757a3f66d54c126e2c9d @@ -1,3 +1,3 @@ -// 1.21.1 2026-04-25T02:02:19.161914767 Crystalline Sky/Block Loot Tables +// 1.21.1 2026-04-25T13:07:32.975380176 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/common/src/generated/resources/assets/crystalline_sky/models/block/skybox_test.json b/common/src/generated/resources/assets/crystalline_sky/models/block/skybox_test.json index 52183fc..f17cad6 100644 --- a/common/src/generated/resources/assets/crystalline_sky/models/block/skybox_test.json +++ b/common/src/generated/resources/assets/crystalline_sky/models/block/skybox_test.json @@ -3,6 +3,7 @@ "crystalline_sky:atlas": "crystalline_sky:textures/atlas/skyboxes.png", "render_type": "crystalline_sky:skybox", "textures": { - "all": "crystalline_sky:crystalline_sky_skybox/skybox_test" + "all": "crystalline_sky:crystalline_sky_skybox/skybox_test", + "particle": "crystalline_sky:block/skybox_test" } } \ No newline at end of file diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/BlockModelDeserializerMixin.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/BlockModelDeserializerMixin.java index 1746866..d05b790 100644 --- a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/BlockModelDeserializerMixin.java +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/BlockModelDeserializerMixin.java @@ -1,22 +1,50 @@ package io.github.slimeistdev.crystalline_sky.mixin.client; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.datafixers.util.Either; +import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.BlockModel_Duck; +import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineAtlases; +import net.minecraft.client.renderer.block.model.BlockElement; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.ItemOverride; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.resources.model.Material; import net.minecraft.resources.ResourceLocation; -import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import java.util.List; +import java.util.Map; + @Mixin(BlockModel.Deserializer.class) public class BlockModelDeserializerMixin { - @WrapOperation(method = "getTextureMap", at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/texture/TextureAtlas;LOCATION_BLOCKS:Lnet/minecraft/resources/ResourceLocation;", opcode = Opcodes.GETSTATIC)) - private ResourceLocation modifyAtlas(Operation original, JsonObject json) { - if (json.has("crystalline_sky:atlas")) { - return ResourceLocation.parse(json.get("crystalline_sky:atlas").getAsString()); - } else { - return original.call(); + @WrapOperation(method = "getTextureMap", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/block/model/BlockModel$Deserializer;parseTextureLocationOrReference(Lnet/minecraft/resources/ResourceLocation;Ljava/lang/String;)Lcom/mojang/datafixers/util/Either;")) + private Either modifyAtlas(ResourceLocation location, String name, + Operation> original, JsonObject json, + @Local(name = "entry") Map.Entry entry) { + if (!entry.getKey().equals("particle") && json.has("crystalline_sky:atlas")) { + location = ResourceLocation.parse(json.get("crystalline_sky:atlas").getAsString()); } + + return original.call(location, name); + } + + @WrapOperation(method = "deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/client/renderer/block/model/BlockModel;", at = @At(value = "NEW", target = "(Lnet/minecraft/resources/ResourceLocation;Ljava/util/List;Ljava/util/Map;Ljava/lang/Boolean;Lnet/minecraft/client/renderer/block/model/BlockModel$GuiLight;Lnet/minecraft/client/renderer/block/model/ItemTransforms;Ljava/util/List;)Lnet/minecraft/client/renderer/block/model/BlockModel;")) + private BlockModel markSkybox(ResourceLocation parentLocation, List elements, + Map> textureMap, Boolean hasAmbientOcclusion, + BlockModel.GuiLight guiLight, ItemTransforms transforms, List overrides, + Operation original, JsonElement json) { + BlockModel model = original.call(parentLocation, elements, textureMap, hasAmbientOcclusion, guiLight, transforms, overrides); + JsonObject jsonObject = json.getAsJsonObject(); + if (jsonObject.has("crystalline_sky:atlas") && + ResourceLocation.parse(jsonObject.get("crystalline_sky:atlas").getAsString()) + .equals(CrystallineAtlases.SKYBOXES.texture)) { + ((BlockModel_Duck) model).crystalline_sky$setSkybox(); + } + return model; } } diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/BlockModelMixin.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/BlockModelMixin.java new file mode 100644 index 0000000..20ac4cc --- /dev/null +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/BlockModelMixin.java @@ -0,0 +1,36 @@ +package io.github.slimeistdev.crystalline_sky.mixin.client; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.BlockModel_Duck; +import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.SimpleBakedModel_Duck; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.SimpleBakedModel; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(BlockModel.class) +public class BlockModelMixin implements BlockModel_Duck { + @Unique + private boolean crystalline_sky$is_skybox = false; + + @Override + public boolean crystalline_sky$isSkybox() { + return crystalline_sky$is_skybox; + } + + @Override + public void crystalline_sky$setSkybox() { + crystalline_sky$is_skybox = true; + } + + @WrapOperation(method = "bake(Lnet/minecraft/client/resources/model/ModelBaker;Lnet/minecraft/client/renderer/block/model/BlockModel;Ljava/util/function/Function;Lnet/minecraft/client/resources/model/ModelState;Z)Lnet/minecraft/client/resources/model/BakedModel;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/model/SimpleBakedModel$Builder;build()Lnet/minecraft/client/resources/model/BakedModel;")) + private BakedModel transferSkybox(SimpleBakedModel.Builder instance, Operation original) { + BakedModel out = original.call(instance); + if (crystalline_sky$isSkybox() && out instanceof SimpleBakedModel_Duck duck) + duck.crystalline_sky$setSkybox(); + return out; + } +} diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/SimpleBakedModelMixin.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/SimpleBakedModelMixin.java new file mode 100644 index 0000000..f81759f --- /dev/null +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/SimpleBakedModelMixin.java @@ -0,0 +1,22 @@ +package io.github.slimeistdev.crystalline_sky.mixin.client; + +import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.SimpleBakedModel_Duck; +import net.minecraft.client.resources.model.SimpleBakedModel; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(SimpleBakedModel.class) +public class SimpleBakedModelMixin implements SimpleBakedModel_Duck { + @Unique + private boolean crystalline_sky$is_skybox = false; + + @Override + public boolean crystalline_sky$isSkybox() { + return crystalline_sky$is_skybox; + } + + @Override + public void crystalline_sky$setSkybox() { + crystalline_sky$is_skybox = true; + } +} diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/BlockModel_Duck.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/BlockModel_Duck.java new file mode 100644 index 0000000..32cc159 --- /dev/null +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/BlockModel_Duck.java @@ -0,0 +1,6 @@ +package io.github.slimeistdev.crystalline_sky.mixin_ducks.client; + +public interface BlockModel_Duck { + boolean crystalline_sky$isSkybox(); + void crystalline_sky$setSkybox(); +} diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/SimpleBakedModel_Duck.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/SimpleBakedModel_Duck.java new file mode 100644 index 0000000..b6bead4 --- /dev/null +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin_ducks/client/SimpleBakedModel_Duck.java @@ -0,0 +1,6 @@ +package io.github.slimeistdev.crystalline_sky.mixin_ducks.client; + +public interface SimpleBakedModel_Duck { + boolean crystalline_sky$isSkybox(); + void crystalline_sky$setSkybox(); +} diff --git a/common/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_skybox.fsh b/common/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_skybox.fsh index 595ef43..be7cb24 100644 --- a/common/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_skybox.fsh +++ b/common/src/main/resources/assets/minecraft/shaders/core/crystalline_sky_rendertype_skybox.fsh @@ -10,7 +10,6 @@ uniform float FogEnd; uniform vec4 FogColor; in float vertexDistance; -//in vec4 texProj0; in vec2 uv0; in vec2 uv1; in vec3 vPos; @@ -25,6 +24,8 @@ out vec4 fragColor; #define SCALE 1 #endif +#define FACE_DBG 0 + const mat4x4 bayerMatrix4x4 = mat4x4( 0.0, 8.0, 2.0, 10.0, 12.0, 4.0, 14.0, 6.0, @@ -44,37 +45,52 @@ void main() { vec3 dir = normalize(vPos); vec3 dabs = abs(dir); float dmax = max(dabs.x, max(dabs.y, dabs.z)); - vec3 col; + bool positive; +#if FACE_DBG + vec3 col; +#else vec2 uv; vec2 section; +#endif + if (dabs.x == dmax) { - col = vec3(1.0, 0.0, 0.0); positive = dir.x > 0; +#if FACE_DBG + col = vec3(1.0, 0.0, 0.0); +#else uv = positive ? -dir.zy : vec2(dir.z, -dir.y); section = vec2(positive ? 2.0 : 0.0, 1.0); +#endif } else if (dabs.y == dmax) { - col = vec3(0.0, 1.0, 0.0); positive = dir.y > 0; +#if FACE_DBG + col = vec3(0.0, 1.0, 0.0); +#else uv = positive ? dir.xz : vec2(dir.x, -dir.z); section = vec2(positive ? 1.0 : 2.0, 0.0); +#endif } else { - col = vec3(0.0, 0.0, 1.0); positive = dir.z > 0; +#if FACE_DBG + col = vec3(0.0, 0.0, 1.0); +#else uv = positive ? vec2(dir.x, -dir.y) : -dir.xy; section = vec2(positive ? 1.0 : 3.0, 1.0); +#endif } +#if FACE_DBG + col *= positive ? 1.0 : 0.5; + vec4 color = vec4(col, 1.0) * vec4(ColorModulator.rgb, 1.0); +#else uv = (uv / dmax + 1.0) / 2.0; uv = clamp(uv, vec2(0.0), vec2(1.0)); uv = (uv + section) / vec2(4.0, 2.0); - col *= positive ? 1.0 : 0.5; - //col = vec3(uv, 0.0); - vec2 uvR = uv0 + uv * (uv1 - uv0); - - //vec4 color = vec4(col, 1.0) * vec4(ColorModulator.rgb, 1.0); vec4 color = texture(Sampler0, uvR) * vec4(ColorModulator.rgb, 1.0); +#endif + fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor); } diff --git a/common/src/main/resources/crystalline_sky-common.mixins.json b/common/src/main/resources/crystalline_sky-common.mixins.json index c313f45..5d9fb99 100644 --- a/common/src/main/resources/crystalline_sky-common.mixins.json +++ b/common/src/main/resources/crystalline_sky-common.mixins.json @@ -17,12 +17,14 @@ ], "client": [ "client.BlockModelDeserializerMixin", + "client.BlockModelMixin", "client.ClientLevelMixin", "client.DebugRendererMixin", "client.GameRendererMixin", "client.LevelRenderer_NoSodium_Mixin", "client.LevelRendererMixin", "client.RenderTargetMixin", + "client.SimpleBakedModelMixin", "client.compat.sodium.DefaultMaterialsMixin", "client.compat.sodium.DefaultTerrainRenderPassesMixin", "client.compat.sodium.ShaderChunkRendererMixin", diff --git a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/CrystallineSkyClientImpl.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/CrystallineSkyClientImpl.java index 92e5d16..7554104 100644 --- a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/CrystallineSkyClientImpl.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/CrystallineSkyClientImpl.java @@ -2,7 +2,7 @@ package io.github.slimeistdev.crystalline_sky.fabric; import io.github.slimeistdev.crystalline_sky.CrystallineSkyClient; import io.github.slimeistdev.crystalline_sky.fabric.events.RegisterMaterialAtlasesEvent; -import io.github.slimeistdev.crystalline_sky.fabric.render_tmp.SkyboxModelLoadingPlugin; +import io.github.slimeistdev.crystalline_sky.fabric.skybox_model.SkyboxModelLoadingPlugin; import io.github.slimeistdev.crystalline_sky.multiloader.fabric.ItemGroupRegistrationEventImpl; import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineAtlases; diff --git a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyModelProvider.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyModelProvider.java index 075f96a..0f93ae5 100644 --- a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyModelProvider.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyModelProvider.java @@ -16,8 +16,10 @@ import net.minecraft.data.models.blockstates.PropertyDispatch; import net.minecraft.data.models.blockstates.Variant; import net.minecraft.data.models.blockstates.VariantProperties; import net.minecraft.data.models.model.ModelLocationUtils; +import net.minecraft.data.models.model.ModelTemplate; import net.minecraft.data.models.model.ModelTemplates; import net.minecraft.data.models.model.TextureMapping; +import net.minecraft.data.models.model.TextureSlot; import net.minecraft.data.models.model.TexturedModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; @@ -25,7 +27,9 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import java.util.Locale; +import java.util.Optional; +import static net.minecraft.data.models.model.TextureMapping.getBlockTexture; import static net.minecraft.data.models.model.TexturedModel.createDefault; @SuppressWarnings("SameParameterValue") @@ -35,9 +39,16 @@ public class CrystallineSkyModelProvider extends FabricModelProvider { return resourceLocation.withPrefix("crystalline_sky_skybox/"); } + private static ModelTemplate create(String blockModelLocation, TextureSlot... requiredSlots) { + return new ModelTemplate(Optional.of(ResourceLocation.withDefaultNamespace("block/" + blockModelLocation)), Optional.empty(), requiredSlots); + } + + private static final ModelTemplate CUBE_ALL_PARTICLE = create("cube_all", TextureSlot.ALL, TextureSlot.PARTICLE); + private static final TexturedModel.Provider SKYBOX_CUBE = createDefault( - block -> TextureMapping.cube(getSkyboxBlockTexture(block)), - ModelTemplates.CUBE_ALL + block -> TextureMapping.cube(getSkyboxBlockTexture(block)) + .put(TextureSlot.PARTICLE, getBlockTexture(block)), + CUBE_ALL_PARTICLE ); public CrystallineSkyModelProvider(FabricDataOutput output) { diff --git a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/render_tmp/SkyboxBakedModel.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/skybox_model/SkyboxBakedModel.java similarity index 80% rename from fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/render_tmp/SkyboxBakedModel.java rename to fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/skybox_model/SkyboxBakedModel.java index 41bcd26..01945f1 100644 --- a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/render_tmp/SkyboxBakedModel.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/skybox_model/SkyboxBakedModel.java @@ -1,4 +1,4 @@ -package io.github.slimeistdev.crystalline_sky.fabric.render_tmp; +package io.github.slimeistdev.crystalline_sky.fabric.skybox_model; import net.fabricmc.fabric.api.renderer.v1.Renderer; import net.fabricmc.fabric.api.renderer.v1.RendererAccess; @@ -61,25 +61,6 @@ public class SkyboxBakedModel extends ForwardingBakedModel { // copied from net.fabricmc.fabric.impl.renderer.VanillaModelEncoder.emitBlockQuads @Override public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier randomSupplier, RenderContext context) { - /*TextureAtlasSprite sprite = getParticleIcon(); - float u0 = sprite.getU0(); - float v0 = sprite.getV0(); - int u1 = (int) (sprite.getU1() * 0xffff); - int v1 = (int) (sprite.getV1() * 0xffff); - - int color = (u1 << 16) | v1; - var emitter = context.getEmitter() - .square(Direction.UP, 0, 0, 1, 1, 0) - .material(FULLBRIGHT_MATERIAL); - for (int i = 0; i < 4; i++) { - emitter - .color(i, color) - .lightmap(i, LightTexture.FULL_BRIGHT) - .normal(i, 0, 1, 0) - .uv(i, u0, v0); - } - emitter.emit();*/ - QuadEmitter emitter = context.getEmitter(); for (int i = 0; i <= ModelHelper.NULL_FACE_ID; i++) { @@ -93,7 +74,7 @@ public class SkyboxBakedModel extends ForwardingBakedModel { final List quads = getQuads(state, cullFace, randomSupplier.get()); for (final BakedQuad q : quads) { - emitter.fromVanilla(q, FULL_BRIGHT_MATERIAL, cullFace); // fixme view bobbing breaks projection, use TextureMatrix to pass a view projection matrix along :) + emitter.fromVanilla(q, FULL_BRIGHT_MATERIAL, cullFace); TextureAtlasSprite sprite = q.getSprite(); float u0 = sprite.getU0(); float v0 = sprite.getV0(); diff --git a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/render_tmp/SkyboxModelLoadingPlugin.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/skybox_model/SkyboxModelLoadingPlugin.java similarity index 50% rename from fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/render_tmp/SkyboxModelLoadingPlugin.java rename to fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/skybox_model/SkyboxModelLoadingPlugin.java index 2afe44b..d4fe141 100644 --- a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/render_tmp/SkyboxModelLoadingPlugin.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/skybox_model/SkyboxModelLoadingPlugin.java @@ -1,8 +1,7 @@ -package io.github.slimeistdev.crystalline_sky.fabric.render_tmp; +package io.github.slimeistdev.crystalline_sky.fabric.skybox_model; -import io.github.slimeistdev.crystalline_sky.CrystallineSky; +import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.SimpleBakedModel_Duck; import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; -import net.minecraft.resources.ResourceLocation; public class SkyboxModelLoadingPlugin implements ModelLoadingPlugin { private SkyboxModelLoadingPlugin() {} @@ -10,15 +9,10 @@ public class SkyboxModelLoadingPlugin implements ModelLoadingPlugin { @Override public void onInitializeModelLoader(Context pluginContext) { pluginContext.modifyModelAfterBake().register((model, ctx) -> { - if (model == null) return null; + if (model instanceof SimpleBakedModel_Duck duck && duck.crystalline_sky$isSkybox()) + return new SkyboxBakedModel(model); - ResourceLocation id = ctx.resourceId(); - if (id == null) { - id = ctx.topLevelId().id(); - } - if (!id.equals(CrystallineSky.id("block/skybox_test"))) return model; - - return new SkyboxBakedModel(model); + return model; }); }