diff --git a/common/src/api/java/net/caffeinemc/mods/sodium/api/texture/SpriteUtil.java b/common/src/api/java/net/caffeinemc/mods/sodium/api/texture/SpriteUtil.java
new file mode 100644
index 0000000000..4f33c26a7f
--- /dev/null
+++ b/common/src/api/java/net/caffeinemc/mods/sodium/api/texture/SpriteUtil.java
@@ -0,0 +1,31 @@
+package net.caffeinemc.mods.sodium.api.texture;
+
+import net.caffeinemc.mods.sodium.api.internal.DependencyInjection;
+import net.minecraft.client.renderer.texture.TextureAtlasSprite;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Utility functions for querying sprite information and updating per-frame information about sprite visibility.
+ */
+@ApiStatus.Experimental
+public interface SpriteUtil {
+ SpriteUtil INSTANCE = DependencyInjection.load(SpriteUtil.class,
+ "net.caffeinemc.mods.sodium.client.render.texture.SpriteUtilImpl");
+
+ /**
+ * Marks the sprite as "active", meaning that it is visible during this frame and should have the animation
+ * state updated. Mods which perform their own rendering without the use of Minecraft's helpers will need to
+ * call this method once every frame, when their sprite is actively being used in rendering.
+ * @param sprite The sprite to mark as active
+ */
+ void markSpriteActive(@NotNull TextureAtlasSprite sprite);
+
+ /**
+ * Returns if the provided sprite has an animation.
+ *
+ * @param sprite The sprite to query an animation for
+ * @return {@code true} if the provided sprite has an animation, otherwise {@code false}
+ */
+ boolean hasAnimation(@NotNull TextureAtlasSprite sprite);
+}
\ No newline at end of file
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/RenderSectionManager.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/RenderSectionManager.java
index a3a2cee13d..949fc0aa5f 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/RenderSectionManager.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/RenderSectionManager.java
@@ -1,6 +1,5 @@
package net.caffeinemc.mods.sodium.client.render.chunk;
-import com.mojang.blaze3d.systems.RenderSystem;
import it.unimi.dsi.fastutil.longs.Long2ReferenceMap;
import it.unimi.dsi.fastutil.longs.Long2ReferenceMaps;
import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap;
@@ -8,6 +7,7 @@
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
import it.unimi.dsi.fastutil.objects.ReferenceSet;
import it.unimi.dsi.fastutil.objects.ReferenceSets;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.client.SodiumClientMod;
import net.caffeinemc.mods.sodium.client.gl.device.CommandList;
import net.caffeinemc.mods.sodium.client.gl.device.RenderDevice;
@@ -15,8 +15,8 @@
import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkSortOutput;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.executor.ChunkBuilder;
-import net.caffeinemc.mods.sodium.client.render.chunk.compile.executor.ChunkJobResult;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.executor.ChunkJobCollector;
+import net.caffeinemc.mods.sodium.client.render.chunk.compile.executor.ChunkJobResult;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderSortingTask;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderTask;
@@ -37,7 +37,6 @@
import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.trigger.CameraMovement;
import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.trigger.SortTriggering;
import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.ChunkMeshFormats;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.client.render.util.RenderAsserts;
import net.caffeinemc.mods.sodium.client.render.viewport.CameraTransform;
import net.caffeinemc.mods.sodium.client.render.viewport.Viewport;
@@ -277,7 +276,7 @@ public void tickVisibleRenders() {
}
for (TextureAtlasSprite sprite : sprites) {
- SpriteUtil.markSpriteActive(sprite);
+ SpriteUtil.INSTANCE.markSpriteActive(sprite);
}
}
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/buffers/BakedChunkModelBuilder.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/buffers/BakedChunkModelBuilder.java
index 36e5aad24d..3c1b798305 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/buffers/BakedChunkModelBuilder.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/buffers/BakedChunkModelBuilder.java
@@ -7,6 +7,7 @@
import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.TranslucentGeometryCollector;
import net.caffeinemc.mods.sodium.client.render.chunk.vertex.builder.ChunkMeshBufferBuilder;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
+import org.jetbrains.annotations.NotNull;
public class BakedChunkModelBuilder implements ChunkModelBuilder {
private final ChunkMeshBufferBuilder[] vertexBuffers;
@@ -24,7 +25,7 @@ public ChunkMeshBufferBuilder getVertexBuffer(ModelQuadFacing facing) {
}
@Override
- public void addSprite(TextureAtlasSprite sprite) {
+ public void addSprite(@NotNull TextureAtlasSprite sprite) {
this.renderData.addSprite(sprite);
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/buffers/ChunkModelBuilder.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/buffers/ChunkModelBuilder.java
index 637d1ce082..3b2f4e44b8 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/buffers/ChunkModelBuilder.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/buffers/ChunkModelBuilder.java
@@ -6,11 +6,12 @@
import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.TranslucentGeometryCollector;
import net.caffeinemc.mods.sodium.client.render.chunk.vertex.builder.ChunkMeshBufferBuilder;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
+import org.jetbrains.annotations.NotNull;
public interface ChunkModelBuilder {
ChunkMeshBufferBuilder getVertexBuffer(ModelQuadFacing facing);
- void addSprite(TextureAtlasSprite sprite);
+ void addSprite(@NotNull TextureAtlasSprite sprite);
/**
* This method should not be used unless absolutely necessary! It exists only for compatibility purposes.
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer.java
index 7b4d71b242..7332196b0c 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer.java
@@ -206,7 +206,9 @@ private void bufferQuad(MutableQuadViewImpl quad, float[] brightnesses, Material
ChunkMeshBufferBuilder vertexBuffer = builder.getVertexBuffer(normalFace);
vertexBuffer.push(vertices, materialBits);
- builder.addSprite(atlasSprite);
+ if (atlasSprite != null) {
+ builder.addSprite(atlasSprite);
+ }
}
private boolean validateQuadUVs(TextureAtlasSprite atlasSprite) {
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/data/BuiltSectionInfo.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/data/BuiltSectionInfo.java
index 25bf883a4d..744e06224d 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/data/BuiltSectionInfo.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/data/BuiltSectionInfo.java
@@ -1,10 +1,10 @@
package net.caffeinemc.mods.sodium.client.render.chunk.data;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionFlags;
import net.caffeinemc.mods.sodium.client.render.chunk.occlusion.VisibilityEncoding;
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
import net.minecraft.client.renderer.chunk.VisibilitySet;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.Direction;
@@ -78,8 +78,8 @@ public void setOcclusionData(VisibilitySet data) {
* before rendering as necessary.
* @param sprite The sprite
*/
- public void addSprite(TextureAtlasSprite sprite) {
- if (SpriteUtil.hasAnimation(sprite)) {
+ public void addSprite(@NotNull TextureAtlasSprite sprite) {
+ if (SpriteUtil.INSTANCE.hasAnimation(sprite)) {
this.animatedSprites.add(sprite);
}
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/ItemRenderContext.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/ItemRenderContext.java
index b80277d2ff..6d2a0ab1a8 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/ItemRenderContext.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/ItemRenderContext.java
@@ -19,12 +19,12 @@
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.MatrixUtil;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.api.util.ColorMixer;
import net.caffeinemc.mods.sodium.client.render.frapi.helper.ColorHelper;
import net.caffeinemc.mods.sodium.client.render.frapi.mesh.EncodingFormat;
import net.caffeinemc.mods.sodium.client.render.frapi.mesh.MutableQuadViewImpl;
import net.caffeinemc.mods.sodium.client.render.texture.SpriteFinderCache;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.mixin.features.render.frapi.ItemRendererAccessor;
import net.fabricmc.fabric.api.renderer.v1.material.BlendMode;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
@@ -193,7 +193,10 @@ private void shadeQuad(MutableQuadViewImpl quad, boolean emissive) {
private void bufferQuad(MutableQuadViewImpl quad, VertexConsumer vertexConsumer) {
QuadEncoder.writeQuadVertices(quad, vertexConsumer, overlay, matPosition, trustedNormals, matNormal);
- SpriteUtil.markSpriteActive(quad.sprite(SpriteFinderCache.forBlockAtlas()));
+ var sprite = quad.sprite(SpriteFinderCache.forBlockAtlas());
+ if (sprite != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(sprite);
+ }
}
/**
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/NonTerrainBlockRenderContext.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/NonTerrainBlockRenderContext.java
index a0220a8776..3e9e938cce 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/NonTerrainBlockRenderContext.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/NonTerrainBlockRenderContext.java
@@ -18,6 +18,7 @@
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.api.util.ColorARGB;
import net.caffeinemc.mods.sodium.api.util.ColorMixer;
import net.caffeinemc.mods.sodium.client.model.light.LightMode;
@@ -25,7 +26,6 @@
import net.caffeinemc.mods.sodium.client.model.light.data.SingleBlockLightDataCache;
import net.caffeinemc.mods.sodium.client.render.frapi.mesh.MutableQuadViewImpl;
import net.caffeinemc.mods.sodium.client.render.texture.SpriteFinderCache;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.client.services.SodiumModelData;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
import net.fabricmc.fabric.api.renderer.v1.material.ShadeMode;
@@ -128,6 +128,9 @@ protected void shadeQuad(MutableQuadViewImpl quad, LightMode lightMode, boolean
private void bufferQuad(MutableQuadViewImpl quad) {
QuadEncoder.writeQuadVertices(quad, vertexConsumer, overlay, matPosition, trustedNormals, matNormal);
- SpriteUtil.markSpriteActive(quad.sprite(SpriteFinderCache.forBlockAtlas()));
+ var sprite = quad.sprite(SpriteFinderCache.forBlockAtlas());
+ if (sprite != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(sprite);
+ }
}
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/texture/SpriteUtil.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/texture/SpriteUtil.java
index 084acc18b5..09e0369b96 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/texture/SpriteUtil.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/texture/SpriteUtil.java
@@ -3,18 +3,22 @@
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import org.jetbrains.annotations.Nullable;
+// Kept for mod compatibility, to be removed in next major release.
+@Deprecated(forRemoval = true)
public class SpriteUtil {
+ @Deprecated(forRemoval = true)
public static void markSpriteActive(@Nullable TextureAtlasSprite sprite) {
- if (sprite == null) {
- // Can happen in some cases, for example if a mod passes a BakedQuad with a null sprite
- // to a VertexConsumer that does not have a texture element.
- return;
+ if (sprite != null) {
+ net.caffeinemc.mods.sodium.api.texture.SpriteUtil.INSTANCE.markSpriteActive(sprite);
}
-
- ((SpriteContentsExtension) sprite.contents()).sodium$setActive(true);
}
- public static boolean hasAnimation(TextureAtlasSprite sprite) {
- return ((SpriteContentsExtension) sprite.contents()).sodium$hasAnimation();
+ @Deprecated(forRemoval = true)
+ public static boolean hasAnimation(@Nullable TextureAtlasSprite sprite) {
+ if (sprite != null) {
+ return net.caffeinemc.mods.sodium.api.texture.SpriteUtil.INSTANCE.hasAnimation(sprite);
+ }
+
+ return false;
}
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/texture/SpriteUtilImpl.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/texture/SpriteUtilImpl.java
new file mode 100644
index 0000000000..2c03d76e06
--- /dev/null
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/texture/SpriteUtilImpl.java
@@ -0,0 +1,23 @@
+package net.caffeinemc.mods.sodium.client.render.texture;
+
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
+import net.minecraft.client.renderer.texture.TextureAtlasSprite;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class SpriteUtilImpl implements SpriteUtil {
+ @Override
+ public void markSpriteActive(@NotNull TextureAtlasSprite sprite) {
+ Objects.requireNonNull(sprite);
+
+ ((SpriteContentsExtension) sprite.contents()).sodium$setActive(true);
+ }
+
+ @Override
+ public boolean hasAnimation(@NotNull TextureAtlasSprite sprite) {
+ Objects.requireNonNull(sprite);
+
+ return ((SpriteContentsExtension) sprite.contents()).sodium$hasAnimation();
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/buffer_builder/intrinsics/BufferBuilderMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/buffer_builder/intrinsics/BufferBuilderMixin.java
index a72f45f5bc..9232a508e5 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/buffer_builder/intrinsics/BufferBuilderMixin.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/buffer_builder/intrinsics/BufferBuilderMixin.java
@@ -3,11 +3,11 @@
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
-import net.caffeinemc.mods.sodium.client.model.quad.ModelQuadView;
-import net.caffeinemc.mods.sodium.client.render.immediate.model.BakedModelEncoder;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.api.util.ColorABGR;
import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter;
+import net.caffeinemc.mods.sodium.client.model.quad.ModelQuadView;
+import net.caffeinemc.mods.sodium.client.render.immediate.model.BakedModelEncoder;
import net.minecraft.client.renderer.block.model.BakedQuad;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@@ -25,7 +25,9 @@ public void putBulkData(PoseStack.Pose matrices, BakedQuad bakedQuad, float r, f
if (!this.fastFormat) {
VertexConsumer.super.putBulkData(matrices, bakedQuad, r, g, b, a, light, overlay);
- SpriteUtil.markSpriteActive(bakedQuad.getSprite());
+ if (bakedQuad.getSprite() != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(bakedQuad.getSprite());
+ }
return;
}
@@ -41,7 +43,9 @@ public void putBulkData(PoseStack.Pose matrices, BakedQuad bakedQuad, float r, f
int color = ColorABGR.pack(r, g, b, a);
BakedModelEncoder.writeQuadVertices(writer, matrices, quad, color, light, overlay, false);
- SpriteUtil.markSpriteActive(quad.getSprite());
+ if (quad.getSprite() != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(quad.getSprite());
+ }
}
@Override
@@ -49,7 +53,9 @@ public void putBulkData(PoseStack.Pose matrices, BakedQuad bakedQuad, float[] br
if (!this.fastFormat) {
VertexConsumer.super.putBulkData(matrices, bakedQuad, brightnessTable, r, g, b, a, light, overlay, colorize);
- SpriteUtil.markSpriteActive(bakedQuad.getSprite());
+ if (bakedQuad.getSprite() != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(bakedQuad.getSprite());
+ }
return;
}
@@ -64,6 +70,8 @@ public void putBulkData(PoseStack.Pose matrices, BakedQuad bakedQuad, float[] br
BakedModelEncoder.writeQuadVertices(writer, matrices, quad, r, g, b, a, brightnessTable, colorize, light, overlay);
- SpriteUtil.markSpriteActive(quad.getSprite());
+ if (quad.getSprite() != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(quad.getSprite());
+ }
}
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/item/ItemRendererMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/item/ItemRendererMixin.java
index 8ea16da500..fc3576589e 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/item/ItemRendererMixin.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/item/ItemRendererMixin.java
@@ -4,11 +4,11 @@
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.api.util.ColorARGB;
import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter;
import net.caffeinemc.mods.sodium.client.model.quad.BakedQuadView;
import net.caffeinemc.mods.sodium.client.render.immediate.model.BakedModelEncoder;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.client.render.vertex.VertexConsumerUtils;
import net.caffeinemc.mods.sodium.client.util.DirectionUtil;
import net.minecraft.client.color.item.ItemColors;
@@ -92,7 +92,9 @@ private void renderBakedItemQuads(PoseStack.Pose matrices, VertexBufferWriter wr
BakedModelEncoder.writeQuadVertices(writer, matrices, quad, color, light, overlay, BakedModelEncoder.shouldMultiplyAlpha());
- SpriteUtil.markSpriteActive(quad.getSprite());
+ if (quad.getSprite() != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(quad.getSprite());
+ }
}
}
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/ModelBlockRendererMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/ModelBlockRendererMixin.java
index 020ee3cb27..4444d4c71c 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/ModelBlockRendererMixin.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/ModelBlockRendererMixin.java
@@ -2,7 +2,7 @@
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.minecraft.client.renderer.block.ModelBlockRenderer;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.core.BlockPos;
@@ -22,6 +22,8 @@ public class ModelBlockRendererMixin {
*/
@Inject(method = "putQuadData", at = @At("HEAD"))
private void preRenderQuad(BlockAndTintGetter level, BlockState state, BlockPos pos, VertexConsumer vertexConsumer, PoseStack.Pose matrices, BakedQuad quad, float brightness0, float brightness1, float brightness2, float brightness3, int light0, int light1, int light2, int light3, int overlay, CallbackInfo ci) {
- SpriteUtil.markSpriteActive(quad.getSprite());
+ if (quad.getSprite() != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(quad.getSprite());
+ }
}
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/TextureAtlasMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/TextureAtlasMixin.java
index d60038f2c4..f23ca8fe4f 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/TextureAtlasMixin.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/TextureAtlasMixin.java
@@ -1,6 +1,6 @@
package net.caffeinemc.mods.sodium.mixin.features.textures.animations.tracking;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import org.spongepowered.asm.mixin.Mixin;
@@ -15,7 +15,7 @@ private void preReturnSprite(CallbackInfoReturnable cir) {
TextureAtlasSprite sprite = cir.getReturnValue();
if (sprite != null) {
- SpriteUtil.markSpriteActive(sprite);
+ SpriteUtil.INSTANCE.markSpriteActive(sprite);
}
}
}
diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/TextureSheetParticleMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/TextureSheetParticleMixin.java
index 6773925be4..a4f162ab15 100644
--- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/TextureSheetParticleMixin.java
+++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/TextureSheetParticleMixin.java
@@ -1,7 +1,7 @@
package net.caffeinemc.mods.sodium.mixin.features.textures.animations.tracking;
import com.mojang.blaze3d.vertex.VertexConsumer;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.particle.SingleQuadParticle;
@@ -28,13 +28,13 @@ protected TextureSheetParticleMixin(ClientLevel level, double x, double y, doubl
@Inject(method = "setSprite(Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;)V", at = @At("RETURN"))
private void afterSetSprite(TextureAtlasSprite sprite, CallbackInfo ci) {
- this.shouldTickSprite = sprite != null && SpriteUtil.hasAnimation(sprite);
+ this.shouldTickSprite = sprite != null && SpriteUtil.INSTANCE.hasAnimation(sprite);
}
@Override
public void render(VertexConsumer vertexConsumer, Camera camera, float tickDelta) {
if (this.shouldTickSprite) {
- SpriteUtil.markSpriteActive(this.sprite);
+ SpriteUtil.INSTANCE.markSpriteActive(this.sprite);
}
super.render(vertexConsumer, camera, tickDelta);
diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java
index 6fbc0d2ecf..636c9974eb 100644
--- a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java
+++ b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java
@@ -2,11 +2,11 @@
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.api.util.ColorABGR;
import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter;
import net.caffeinemc.mods.sodium.client.model.quad.BakedQuadView;
import net.caffeinemc.mods.sodium.client.render.immediate.model.BakedModelEncoder;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.client.render.vertex.VertexConsumerUtils;
import net.caffeinemc.mods.sodium.client.util.DirectionUtil;
import net.minecraft.client.renderer.block.ModelBlockRenderer;
@@ -46,7 +46,9 @@ private static void renderQuads(PoseStack.Pose matrices, VertexBufferWriter writ
BakedModelEncoder.writeQuadVertices(writer, matrices, quad, color, light, overlay, false);
- SpriteUtil.markSpriteActive(quad.getSprite());
+ if (quad.getSprite() != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(quad.getSprite());
+ }
}
}
diff --git a/neoforge/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java b/neoforge/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java
index c87264a58e..c93024b0fd 100644
--- a/neoforge/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java
+++ b/neoforge/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java
@@ -2,11 +2,11 @@
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
+import net.caffeinemc.mods.sodium.api.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.api.util.ColorABGR;
import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter;
import net.caffeinemc.mods.sodium.client.model.quad.BakedQuadView;
import net.caffeinemc.mods.sodium.client.render.immediate.model.BakedModelEncoder;
-import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil;
import net.caffeinemc.mods.sodium.client.render.vertex.VertexConsumerUtils;
import net.caffeinemc.mods.sodium.client.util.DirectionUtil;
import net.minecraft.client.renderer.RenderType;
@@ -48,7 +48,9 @@ private static void renderQuads(PoseStack.Pose matrices, VertexBufferWriter writ
BakedModelEncoder.writeQuadVertices(writer, matrices, quad, color, light, overlay, false);
- SpriteUtil.markSpriteActive(quad.getSprite());
+ if (quad.getSprite() != null) {
+ SpriteUtil.INSTANCE.markSpriteActive(quad.getSprite());
+ }
}
}