Skip to content

Commit 51634e5

Browse files
committed
Release 2.3
1 parent c564788 commit 51634e5

File tree

5 files changed

+126
-19
lines changed

5 files changed

+126
-19
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ yacl_version=3.6.6+1.21.5-fabric
1414
modmenu_version=14.0.0-rc.2
1515

1616
# Mod Properties
17-
mod_version=2.2
17+
mod_version=2.3
1818
maven_group=btw.mixces
1919
archives_base_name=animatium

src/main/java/btw/mixces/animatium/mixins/renderer/MixinLevelRenderer.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,12 @@
2929
import btw.mixces.animatium.util.RenderUtils;
3030
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
3131
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
32-
import com.mojang.blaze3d.buffers.BufferType;
33-
import com.mojang.blaze3d.buffers.BufferUsage;
34-
import com.mojang.blaze3d.buffers.GpuBuffer;
3532
import com.mojang.blaze3d.opengl.GlDevice;
3633
import com.mojang.blaze3d.pipeline.RenderTarget;
3734
import com.mojang.blaze3d.systems.RenderSystem;
3835
import com.mojang.blaze3d.textures.GpuTexture;
3936
import com.mojang.blaze3d.textures.TextureFormat;
40-
import com.mojang.blaze3d.vertex.*;
37+
import com.mojang.blaze3d.vertex.PoseStack;
4138
import net.minecraft.client.Camera;
4239
import net.minecraft.client.Minecraft;
4340
import net.minecraft.client.multiplayer.ClientLevel;
@@ -69,24 +66,16 @@ public abstract class MixinLevelRenderer {
6966
@Nullable
7067
private ClientLevel level;
7168

72-
@Unique
73-
private GpuBuffer animatium$blueVoidBuffer = null;
74-
7569
@Inject(method = "<init>", at = @At("TAIL"))
7670
private void init(Minecraft minecraft, EntityRenderDispatcher entityRenderDispatcher, BlockEntityRenderDispatcher blockEntityRenderDispatcher, RenderBuffers renderBuffers, CallbackInfo ci) {
77-
VertexFormat.Mode mode = VertexFormat.Mode.QUADS;
78-
BufferBuilder builder = Tesselator.getInstance().begin(mode, DefaultVertexFormat.POSITION);
79-
RenderUtils.buildSkyHalf(builder, -16.0F, true);
80-
try (MeshData meshData = builder.buildOrThrow()) {
81-
this.animatium$blueVoidBuffer = RenderSystem.getDevice().createBuffer(() -> "Blue void sky vertex buffer", BufferType.VERTICES, BufferUsage.STATIC_WRITE, meshData.vertexBuffer());
82-
}
71+
RenderUtils.initializeBlueVoidSky();
8372
}
8473

8574
@Inject(method = "method_62215", at = @At("TAIL"))
8675
private void animatium$blueVoidSky(FogParameters fogParameters, DimensionSpecialEffects.SkyType skyType, float tickDelta, DimensionSpecialEffects dimensionSpecialEffects, CallbackInfo ci) {
8776
if (AnimatiumClient.isEnabled() && AnimatiumConfig.instance().blueVoidSky && skyType != DimensionSpecialEffects.SkyType.END && this.level != null && this.minecraft.player != null) {
8877
int skyColor = this.level.getSkyColor(this.minecraft.gameRenderer.getMainCamera().getPosition(), tickDelta);
89-
RenderUtils.renderBlueVoidSky(this.minecraft, this.level, this.animatium$blueVoidBuffer, skyColor, this.minecraft.player.getEyePosition(tickDelta).y - RenderUtils.getLevelHorizonHeight(this.level));
78+
RenderUtils.renderBlueVoidSky(this.minecraft, this.level, skyColor, this.minecraft.player.getEyePosition(tickDelta).y - RenderUtils.getLevelHorizonHeight(this.level));
9079
}
9180
}
9281

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package btw.mixces.animatium.mixins.renderer;
2+
3+
import btw.mixces.animatium.AnimatiumClient;
4+
import btw.mixces.animatium.config.AnimatiumConfig;
5+
import btw.mixces.animatium.util.RenderUtils;
6+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
7+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
8+
import com.mojang.blaze3d.buffers.GpuBuffer;
9+
import com.mojang.blaze3d.pipeline.RenderPipeline;
10+
import com.mojang.blaze3d.systems.RenderPass;
11+
import com.mojang.blaze3d.systems.RenderSystem;
12+
import com.mojang.blaze3d.vertex.VertexFormat;
13+
import net.minecraft.client.renderer.SkyRenderer;
14+
import org.spongepowered.asm.mixin.Mixin;
15+
import org.spongepowered.asm.mixin.Unique;
16+
import org.spongepowered.asm.mixin.injection.At;
17+
import org.spongepowered.asm.mixin.injection.Inject;
18+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
19+
20+
@Mixin(SkyRenderer.class)
21+
public abstract class MixinSkyRenderer {
22+
@Unique
23+
private static GpuBuffer animatium$topSkyBuffer = null;
24+
25+
@Unique
26+
private static RenderSystem.AutoStorageIndexBuffer animatium$skyIndexBuffer;
27+
28+
@Inject(method = "<init>", at = @At("TAIL"))
29+
private void init(CallbackInfo ci) {
30+
animatium$topSkyBuffer = RenderUtils.initializeSky((builder) -> RenderUtils.buildSkyHalf(builder, 16.0F, false));
31+
animatium$skyIndexBuffer = RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS);
32+
}
33+
34+
@WrapOperation(method = "renderSkyDisc", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderPass;setPipeline(Lcom/mojang/blaze3d/pipeline/RenderPipeline;)V"))
35+
private void animatium$planarFogPipeline$skyDisc(RenderPass instance, RenderPipeline renderPipeline, Operation<Void> original) {
36+
RenderPipeline pipeline = renderPipeline;
37+
if (AnimatiumClient.isEnabled() && AnimatiumConfig.instance().planarSkyFog) {
38+
pipeline = AnimatiumClient.LEGACY_SKY_PLANAR_FOG_PIPELINE;
39+
}
40+
41+
original.call(instance, pipeline);
42+
}
43+
44+
@WrapOperation(method = "renderSkyDisc", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderPass;setVertexBuffer(ILcom/mojang/blaze3d/buffers/GpuBuffer;)V", ordinal = 0))
45+
private void animatium$planarFogPipeline$skyDisc$vertexBuffer(RenderPass instance, int index, GpuBuffer gpuBuffer, Operation<Void> original) {
46+
GpuBuffer buffer = gpuBuffer;
47+
if (AnimatiumClient.isEnabled() && AnimatiumConfig.instance().planarSkyFog) {
48+
buffer = animatium$topSkyBuffer;
49+
instance.setIndexBuffer(animatium$skyIndexBuffer.getBuffer(6), animatium$skyIndexBuffer.type());
50+
}
51+
52+
original.call(instance, index, buffer);
53+
}
54+
55+
@WrapOperation(method = "renderDarkDisc", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderPass;setPipeline(Lcom/mojang/blaze3d/pipeline/RenderPipeline;)V"))
56+
private void animatium$planarFogPipeline$darkSkyDisc(RenderPass instance, RenderPipeline renderPipeline, Operation<Void> original) {
57+
RenderPipeline pipeline = renderPipeline;
58+
if (AnimatiumClient.isEnabled() && AnimatiumConfig.instance().planarSkyFog) {
59+
pipeline = AnimatiumClient.LEGACY_SKY_PLANAR_FOG_PIPELINE;
60+
}
61+
62+
original.call(instance, pipeline);
63+
}
64+
65+
@WrapOperation(method = "renderSkyDisc", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderPass;draw(II)V", ordinal = 0))
66+
private void animatium$planarFogPipeline$skyDisc$draw(RenderPass instance, int i, int j, Operation<Void> original) {
67+
if (AnimatiumClient.isEnabled() && AnimatiumConfig.instance().planarSkyFog) {
68+
instance.drawIndexed(i, 1014);
69+
} else {
70+
original.call(instance, i, j);
71+
}
72+
}
73+
74+
@WrapOperation(method = "renderDarkDisc", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderPass;setVertexBuffer(ILcom/mojang/blaze3d/buffers/GpuBuffer;)V", ordinal = 0))
75+
private void animatium$planarFogPipeline$darkSkyDisc$vertexBuffer(RenderPass instance, int index, GpuBuffer gpuBuffer, Operation<Void> original) {
76+
GpuBuffer buffer = gpuBuffer;
77+
if (AnimatiumClient.isEnabled() && AnimatiumConfig.instance().planarSkyFog) {
78+
buffer = RenderUtils.getBlueVoidBuffer();
79+
instance.setIndexBuffer(animatium$skyIndexBuffer.getBuffer(6), animatium$skyIndexBuffer.type());
80+
}
81+
82+
original.call(instance, index, buffer);
83+
}
84+
85+
@WrapOperation(method = "renderDarkDisc", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderPass;draw(II)V", ordinal = 0))
86+
private void animatium$planarFogPipeline$darkSkyDisc$draw(RenderPass instance, int i, int j, Operation<Void> original) {
87+
if (AnimatiumClient.isEnabled() && AnimatiumConfig.instance().planarSkyFog) {
88+
instance.drawIndexed(i, 1014);
89+
} else {
90+
original.call(instance, i, j);
91+
}
92+
}
93+
}

src/main/java/btw/mixces/animatium/util/RenderUtils.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@
2626
import btw.mixces.animatium.AnimatiumClient;
2727
import btw.mixces.animatium.config.AnimatiumConfig;
2828
import btw.mixces.animatium.mixins.accessor.ClientLevelDataAccessor;
29+
import com.mojang.blaze3d.buffers.BufferType;
30+
import com.mojang.blaze3d.buffers.BufferUsage;
2931
import com.mojang.blaze3d.buffers.GpuBuffer;
3032
import com.mojang.blaze3d.systems.RenderPass;
3133
import com.mojang.blaze3d.systems.RenderSystem;
32-
import com.mojang.blaze3d.vertex.VertexConsumer;
33-
import com.mojang.blaze3d.vertex.VertexFormat;
34+
import com.mojang.blaze3d.vertex.*;
3435
import net.minecraft.client.Minecraft;
3536
import net.minecraft.client.gui.GuiGraphics;
3637
import net.minecraft.client.multiplayer.ClientLevel;
@@ -40,6 +41,7 @@
4041

4142
import java.util.OptionalDouble;
4243
import java.util.OptionalInt;
44+
import java.util.function.Consumer;
4345

4446
public final class RenderUtils {
4547
private static float LINE_WIDTH = -1.0F;
@@ -97,6 +99,7 @@ public static void fillRectangle(GuiGraphics context, int startX, int startY, in
9799
context.fill(startX, startY, startX + endX, startY + endY, padding, color);
98100
}
99101

102+
// Sky Stuff
100103
public static void buildSkyHalf(VertexConsumer vertexConsumer, float y, boolean bottom) {
101104
final int width = 64;
102105
for (int k = -384; k <= 384; k += width) {
@@ -118,7 +121,28 @@ public static void buildSkyHalf(VertexConsumer vertexConsumer, float y, boolean
118121
}
119122
}
120123

121-
public static void renderBlueVoidSky(Minecraft minecraft, ClientLevel level, GpuBuffer blueVoidSkyBuffer, int skyColor, double depth) {
124+
private static GpuBuffer animatium$blueVoidBuffer = null;
125+
126+
public static GpuBuffer getBlueVoidBuffer() {
127+
return animatium$blueVoidBuffer;
128+
}
129+
130+
public static void initializeBlueVoidSky() {
131+
animatium$blueVoidBuffer = initializeSky((builder) -> buildSkyHalf(builder, -16.0F, true));
132+
}
133+
134+
public static GpuBuffer initializeSky(Consumer<BufferBuilder> bufferBuilderConsumer) {
135+
VertexFormat.Mode mode = VertexFormat.Mode.QUADS;
136+
BufferBuilder builder = Tesselator.getInstance().begin(mode, DefaultVertexFormat.POSITION);
137+
bufferBuilderConsumer.accept(builder);
138+
try (MeshData meshData = builder.buildOrThrow()) {
139+
return RenderSystem.getDevice().createBuffer(() -> "Static sky vertex buffer", BufferType.VERTICES, BufferUsage.STATIC_WRITE, meshData.vertexBuffer());
140+
} catch (Exception ignored) {
141+
return null;
142+
}
143+
}
144+
145+
public static void renderBlueVoidSky(Minecraft minecraft, ClientLevel level, int skyColor, double depth) {
122146
Vector3f skyColorVec = ARGB.vector3fFromRGB24(skyColor);
123147
if (level.effects().hasGround()) {
124148
RenderSystem.setShaderColor(skyColorVec.x * 0.2F + 0.04F, skyColorVec.y * 0.2F + 0.04F, skyColorVec.z * 0.6F + 0.1F, 1.0F);
@@ -135,7 +159,7 @@ public static void renderBlueVoidSky(Minecraft minecraft, ClientLevel level, Gpu
135159
.createRenderPass(minecraft.getMainRenderTarget().getColorTexture(), OptionalInt.empty(), minecraft.getMainRenderTarget().getDepthTexture(), OptionalDouble.empty())) {
136160
RenderSystem.AutoStorageIndexBuffer autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS);
137161
renderPass.setPipeline(AnimatiumConfig.instance().planarSkyFog ? AnimatiumClient.LEGACY_SKY_PLANAR_FOG_PIPELINE : AnimatiumClient.LEGACY_SKY_PIPELINE);
138-
renderPass.setVertexBuffer(0, blueVoidSkyBuffer);
162+
renderPass.setVertexBuffer(0, animatium$blueVoidBuffer);
139163
renderPass.setIndexBuffer(autoStorageIndexBuffer.getBuffer(6), autoStorageIndexBuffer.type());
140164
renderPass.drawIndexed(0, 1014);
141165
}

src/main/resources/animatium.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"renderer.MixinLevelRenderer",
4040
"renderer.MixinRenderBuffers",
4141
"renderer.MixinRenderStateShard",
42+
"renderer.MixinSkyRenderer",
4243
"renderer.MixinTextureManager",
4344
"renderer.MixinTextureStateShard",
4445
"renderer.MixinVertexConsumer",

0 commit comments

Comments
 (0)