feat: the start of the aurora!!!

it was pain send help
This commit is contained in:
TheClashFruit 2023-12-26 16:26:56 +01:00
parent 16b3eed261
commit 4ff7ee3f72
Signed by: TheClashFruit
GPG key ID: 09BB24C34C2F3204
5 changed files with 131 additions and 6 deletions

View file

@ -0,0 +1,15 @@
package me.theclashfruit.arctic.mixin;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.world.ClientWorld;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(WorldRenderer.class)
public interface WorldRendererAccessor {
@Accessor("world")
ClientWorld getWorld();
@Accessor("world")
void setWorld(ClientWorld world);
}

View file

@ -0,0 +1,87 @@
package me.theclashfruit.arctic.mixin;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gl.VertexBuffer;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.world.ClientWorld;
import org.jetbrains.annotations.Nullable;
import org.joml.Matrix4f;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(WorldRenderer.class)
public class WorldRendererMixin {
@Nullable
private VertexBuffer auroraBuffer;
@Inject(method = "<init>*", at = @At("TAIL"))
public void WorldRenderer(CallbackInfo ci) {
this.renderAurora();
}
@Unique
private void renderAurora() {
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferBuilder = tessellator.getBuffer();
RenderSystem.setShader(GameRenderer::getPositionProgram);
if (auroraBuffer != null) {
auroraBuffer.close();
}
auroraBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC);
BufferBuilder.BuiltBuffer builtBuffer = renderAurora(bufferBuilder);
auroraBuffer.bind();
auroraBuffer.upload(builtBuffer);
VertexBuffer.unbind();
}
@Unique
private BufferBuilder.BuiltBuffer renderAurora(BufferBuilder buffer) {
buffer.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR);
// TODO: Make an actual thing
float amplitude = 0.5f;
float frequency = 1.5f;
for (int i = 0; i <= 100; i++) {
float x = i * 0.1f;
float y = amplitude * (float) Math.sin(frequency * x);
float z = 5f;
buffer.vertex(x, y, z).color(0, 255, 0, 255).next();
x += 0.1f;
y = amplitude * (float) Math.sin(frequency * x);
buffer.vertex(x, y, z).color(0, 255, 0, 255).next();
}
return buffer.end();
}
@Inject(method = "renderSky(Lnet/minecraft/client/util/math/MatrixStack;Lorg/joml/Matrix4f;FLnet/minecraft/client/render/Camera;ZLjava/lang/Runnable;)V", at = @At("TAIL"))
public void renderSky(MatrixStack matrices, Matrix4f projectionMatrix, float tickDelta, Camera camera, boolean thickFog, Runnable fogCallback, CallbackInfo ci) {
float u = ((WorldRendererAccessor) this).getWorld().method_23787(tickDelta) * (1.0f - ((WorldRendererAccessor) this).getWorld().getRainGradient(tickDelta));
if (u > 0.0f) {
RenderSystem.setShaderColor(u, u, u, u);
BackgroundRenderer.clearFog();
auroraBuffer.bind();
auroraBuffer.draw(matrices.peek().getPositionMatrix(), projectionMatrix, GameRenderer.getPositionProgram());
VertexBuffer.unbind();
fogCallback.run();
}
}
}

View file

@ -0,0 +1,15 @@
{
"required": true,
"minVersion": "0.8",
"package": "me.theclashfruit.arctic.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [
],
"client": [
"WorldRendererAccessor",
"WorldRendererMixin"
],
"injectors": {
"defaultRequire": 1
}
}

View file

@ -0,0 +1,5 @@
{
"textures": [
"minecraft:dirt"
]
}

View file

@ -24,6 +24,15 @@
"me.theclashfruit.arctic.Arctic"
]
},
"mixins": [
"arctic.mixins.json"
],
"depends": {
"fabricloader": ">=${loader_version}",
"fabric": ">=${fabric_version}",
"geckolib": ">=${geckolib_version}",
"minecraft": "${minecraft_version}"
},
"custom": {
"modmenu": {
"links": {
@ -31,11 +40,5 @@
},
"update_checker": true
}
},
"depends": {
"fabricloader": ">=${loader_version}",
"fabric": ">=${fabric_version}",
"geckolib": ">=${geckolib_version}",
"minecraft": "${minecraft_version}"
}
}