diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 1d09c721cc..6460cc6dbf 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -35,17 +35,14 @@ jobs:
cache-read-only: ${{ !endsWith(github.ref_name, '/dev') }}
- name: Build
- # Doesn't actually publish, as no secrets are passed in, just makes sure that publishing works
- run: ./gradlew publish --no-daemon
+ run: ./gradlew build -x test --no-daemon
- name: Capture Build Artifacts
uses: actions/upload-artifact@v4
with:
name: Artifacts
path: |
- common/build/libs/
- fabric/build/libs/
- neoforge/build/libs/
- vanillin/common/build/libs/
- vanillin/fabric/build/libs/
- vanillin/neoforge/build/libs/
+ common/build/libs/*.jar
+ neoforge/build/libs/*.jar
+ vanillin/common/build/libs/*.jar
+ vanillin/neoforge/build/libs/*.jar
diff --git a/.gitignore b/.gitignore
index 15e990e4cf..66019dac7c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,3 +66,9 @@ docs/*.local
.DS_Store
mcmodsrepo
**/src/**/generatedPackageInfos/
+
+# Generated build output and local tooling
+.vscode/
+*.log
+replay_pid*.log
+hs_err_pid*.log
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
index 6eb0970a7d..76bdce60be 100644
--- a/common/build.gradle.kts
+++ b/common/build.gradle.kts
@@ -10,7 +10,7 @@ val lib = sourceSets.create("lib")
val backend = sourceSets.create("backend")
val main = sourceSets.getByName("main")
-loom.accessWidenerPath = project(projects.flywheelFabric.path).file("src/main/resources/flywheel.accesswidener")
+loom.accessWidenerPath = rootProject.file("fabric/src/main/resources/flywheel.accesswidener")
transitiveSourceSets {
compileClasspath = main.compileClasspath
diff --git a/common/src/api/java/dev/engine_room/flywheel/api/visualization/VisualizationManager.java b/common/src/api/java/dev/engine_room/flywheel/api/visualization/VisualizationManager.java
index 9360879816..f99fd96760 100644
--- a/common/src/api/java/dev/engine_room/flywheel/api/visualization/VisualizationManager.java
+++ b/common/src/api/java/dev/engine_room/flywheel/api/visualization/VisualizationManager.java
@@ -1,16 +1,12 @@
package dev.engine_room.flywheel.api.visualization;
-import java.util.SortedSet;
-
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.Nullable;
import dev.engine_room.flywheel.api.backend.RenderContext;
import dev.engine_room.flywheel.api.internal.FlwApiLink;
import dev.engine_room.flywheel.api.visual.Effect;
-import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import net.minecraft.core.Vec3i;
-import net.minecraft.server.level.BlockDestructionProgress;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.entity.BlockEntity;
@@ -70,8 +66,7 @@ interface RenderDispatcher {
* Render crumbling block entities.
*
*
Guaranteed to be called after {@link #onStartLevelRender} and {@link #afterSubmitEntities}
- * @param destructionProgress The destruction progress map from {@link net.minecraft.client.renderer.LevelRenderer LevelRenderer}.
*/
- void beforeSubmitCrumbling(RenderContext ctx, Long2ObjectMap> destructionProgress);
+ void beforeSubmitCrumbling(RenderContext ctx);
}
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/LayoutAttributes.java b/common/src/backend/java/dev/engine_room/flywheel/backend/LayoutAttributes.java
index ca0a71fc4c..6fb0debf17 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/LayoutAttributes.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/LayoutAttributes.java
@@ -80,31 +80,31 @@ private static void array(List out, ArrayElementType array) {
}
}
- private static VertexFormatElement.Type toGlType(IntegerRepr repr) {
+ private static VertexAttribute.Type toGlType(IntegerRepr repr) {
return switch (repr) {
- case BYTE -> VertexFormatElement.Type.BYTE;
- case SHORT -> VertexFormatElement.Type.SHORT;
- case INT -> VertexFormatElement.Type.INT;
+ case BYTE -> VertexAttribute.Type.BYTE;
+ case SHORT -> VertexAttribute.Type.SHORT;
+ case INT -> VertexAttribute.Type.INT;
};
}
- private static VertexFormatElement.Type toGlType(UnsignedIntegerRepr repr) {
+ private static VertexAttribute.Type toGlType(UnsignedIntegerRepr repr) {
return switch (repr) {
- case UNSIGNED_BYTE -> VertexFormatElement.Type.UBYTE;
- case UNSIGNED_SHORT -> VertexFormatElement.Type.USHORT;
- case UNSIGNED_INT -> VertexFormatElement.Type.UINT;
+ case UNSIGNED_BYTE -> VertexAttribute.Type.UBYTE;
+ case UNSIGNED_SHORT -> VertexAttribute.Type.USHORT;
+ case UNSIGNED_INT -> VertexAttribute.Type.UINT;
};
}
- private static VertexFormatElement.Type toGlType(FloatRepr repr) {
+ private static VertexAttribute.Type toGlType(FloatRepr repr) {
return switch (repr) {
- case BYTE, NORMALIZED_BYTE -> VertexFormatElement.Type.BYTE;
- case UNSIGNED_BYTE, NORMALIZED_UNSIGNED_BYTE -> VertexFormatElement.Type.UBYTE;
- case SHORT, NORMALIZED_SHORT -> VertexFormatElement.Type.SHORT;
- case UNSIGNED_SHORT, NORMALIZED_UNSIGNED_SHORT -> VertexFormatElement.Type.USHORT;
- case INT, NORMALIZED_INT -> VertexFormatElement.Type.INT;
- case UNSIGNED_INT, NORMALIZED_UNSIGNED_INT -> VertexFormatElement.Type.UINT;
- case FLOAT -> VertexFormatElement.Type.FLOAT;
+ case BYTE, NORMALIZED_BYTE -> VertexAttribute.Type.BYTE;
+ case UNSIGNED_BYTE, NORMALIZED_UNSIGNED_BYTE -> VertexAttribute.Type.UBYTE;
+ case SHORT, NORMALIZED_SHORT -> VertexAttribute.Type.SHORT;
+ case UNSIGNED_SHORT, NORMALIZED_UNSIGNED_SHORT -> VertexAttribute.Type.USHORT;
+ case INT, NORMALIZED_INT -> VertexAttribute.Type.INT;
+ case UNSIGNED_INT, NORMALIZED_UNSIGNED_INT -> VertexAttribute.Type.UINT;
+ case FLOAT -> VertexAttribute.Type.FLOAT;
};
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/NoiseTextures.java b/common/src/backend/java/dev/engine_room/flywheel/backend/NoiseTextures.java
index 0088c2a54c..c70fb8f1f2 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/NoiseTextures.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/NoiseTextures.java
@@ -4,11 +4,15 @@
import org.jetbrains.annotations.UnknownNullability;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.mojang.blaze3d.opengl.GlConst;
import com.mojang.blaze3d.opengl.GlStateManager;
import com.mojang.blaze3d.opengl.GlTexture;
import com.mojang.blaze3d.platform.NativeImage;
+import dev.engine_room.flywheel.api.Flywheel;
import dev.engine_room.flywheel.backend.gl.GlTextureUnit;
import dev.engine_room.flywheel.lib.util.IdentifierUtil;
import net.minecraft.client.renderer.texture.DynamicTexture;
@@ -16,6 +20,7 @@
import net.minecraft.server.packs.resources.ResourceManager;
public class NoiseTextures {
+ private static final Logger LOGGER = LoggerFactory.getLogger(Flywheel.ID + "/backend/noise");
public static final Identifier NOISE_TEXTURE = IdentifierUtil.id("textures/flywheel/noise/blue.png");
@UnknownNullability
@@ -34,7 +39,7 @@ public static void reload(ResourceManager manager) {
try (var is = optional.get()
.open()) {
- var image = NativeImage.read(NativeImage.Format.LUMINANCE, is);
+ var image = NativeImage.read(NativeImage.Format.RGBA, is);
// TODO 1.21.11: maybe we should not use DynamicTexture here and do gen/upload manually
BLUE_NOISE = new DynamicTexture(() -> "Flywheel Blue Noise", image);
@@ -48,8 +53,8 @@ public static void reload(ResourceManager manager) {
GlStateManager._texParameter(GlConst.GL_TEXTURE_2D, GlConst.GL_TEXTURE_WRAP_T, GlConst.GL_REPEAT);
GlStateManager._bindTexture(0);
- } catch (IOException e) {
-
+ } catch (Throwable t) {
+ LOGGER.error("Failed to load blue noise texture", t);
}
}
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/MaterialRenderState.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/MaterialRenderState.java
index c6556e7b99..fb4e7c44fd 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/MaterialRenderState.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/MaterialRenderState.java
@@ -124,26 +124,26 @@ private static void setupDepthTest(DepthTest depthTest) {
private static void setupTransparency(Transparency transparency) {
switch (transparency) {
case OPAQUE -> {
- GlStateManager._disableBlend();
+ GlStateManager._disableBlend(0);
}
case ADDITIVE -> {
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
GlStateManager._blendFuncSeparate(GlConst.GL_ONE, GlConst.GL_ONE, GlConst.GL_ONE, GlConst.GL_ONE);
}
case LIGHTNING -> {
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
GlStateManager._blendFuncSeparate(GlConst.GL_SRC_ALPHA, GlConst.GL_ONE, GlConst.GL_SRC_ALPHA, GlConst.GL_ONE);
}
case GLINT -> {
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
GlStateManager._blendFuncSeparate(GlConst.GL_SRC_COLOR, GlConst.GL_ONE, GlConst.GL_ZERO, GlConst.GL_ONE);
}
case CRUMBLING -> {
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
GlStateManager._blendFuncSeparate(GlConst.GL_DST_COLOR, GlConst.GL_SRC_COLOR, GlConst.GL_ONE, GlConst.GL_ZERO);
}
case TRANSLUCENT -> {
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
GlStateManager._blendFuncSeparate(GlConst.GL_SRC_ALPHA, GlConst.GL_ONE_MINUS_SRC_ALPHA, GlConst.GL_ONE, GlConst.GL_ONE_MINUS_SRC_ALPHA);
}
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/MeshPool.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/MeshPool.java
index 616e9ed8f0..13b87eec18 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/MeshPool.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/MeshPool.java
@@ -9,7 +9,6 @@
import org.lwjgl.opengl.GL32;
import com.mojang.blaze3d.opengl.GlConst;
-import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.model.Mesh;
import dev.engine_room.flywheel.backend.InternalVertex;
@@ -183,9 +182,9 @@ public boolean isInvalid() {
public void draw(int instanceCount) {
if (instanceCount > 1) {
- GL32.glDrawElementsInstancedBaseVertex(GlConst.toGl(VertexFormat.Mode.TRIANGLES), mesh.indexCount(), GlConst.GL_UNSIGNED_INT, firstIndexByteOffset(), instanceCount, baseVertex);
+ GL32.glDrawElementsInstancedBaseVertex(GlConst.GL_TRIANGLES, mesh.indexCount(), GlConst.GL_UNSIGNED_INT, firstIndexByteOffset(), instanceCount, baseVertex);
} else {
- GL32.glDrawElementsBaseVertex(GlConst.toGl(VertexFormat.Mode.TRIANGLES), mesh.indexCount(), GlConst.GL_UNSIGNED_INT, firstIndexByteOffset(), baseVertex);
+ GL32.glDrawElementsBaseVertex(GlConst.GL_TRIANGLES, mesh.indexCount(), GlConst.GL_UNSIGNED_INT, firstIndexByteOffset(), baseVertex);
}
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/TextureBinder.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/TextureBinder.java
index f42cbf0dde..a43e6e9f5a 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/TextureBinder.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/TextureBinder.java
@@ -1,10 +1,12 @@
package dev.engine_room.flywheel.backend.engine;
import java.util.Collections;
+import java.util.List;
import org.jspecify.annotations.Nullable;
import org.lwjgl.opengl.GL33C;
+import com.mojang.blaze3d.opengl.FrameBufferAttachment;
import com.mojang.blaze3d.opengl.GlConst;
import com.mojang.blaze3d.opengl.GlDevice;
import com.mojang.blaze3d.opengl.GlSampler;
@@ -61,9 +63,10 @@ public static void bindLightAndOverlay() {
public static void bindRenderTarget(RenderTarget target) {
GlTexture colorTexture = (GlTexture) target.getColorTexture();
- int i = colorTexture.getFbo(
+ int i = GlUtil.getGlDevice().frameBufferCache().getFbo(
GlUtil.getGlDevice().directStateAccess(),
- target.getDepthTexture()
+ List.of((FrameBufferAttachment) target.getColorTexture()),
+ (FrameBufferAttachment) target.getDepthTexture()
);
GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, i);
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/DepthPyramid.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/DepthPyramid.java
index 80bd9ab9af..0607d0d8be 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/DepthPyramid.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/DepthPyramid.java
@@ -27,7 +27,7 @@ public DepthPyramid(IndirectPrograms programs) {
public void generate() {
var mainRenderTarget = Minecraft.getInstance()
- .getMainRenderTarget();
+ .gameRenderer.mainRenderTarget();
int width = mip0Size(mainRenderTarget.width);
int height = mip0Size(mainRenderTarget.height);
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/IndirectDrawManager.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/IndirectDrawManager.java
index 075f01f8e3..9f1f1f450f 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/IndirectDrawManager.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/IndirectDrawManager.java
@@ -151,7 +151,7 @@ public void render(LightStorage lightStorage, EnvironmentStorage environmentStor
lightBuffers.bind();
matrixBuffer.bind();
Uniforms.bindAll();
- TextureBinder.bindRenderTarget(Minecraft.getInstance().getMainRenderTarget());
+ TextureBinder.bindRenderTarget(Minecraft.getInstance().gameRenderer.mainRenderTarget());
for (var group : cullingGroups.values()) {
group.submitSolid();
@@ -245,7 +245,7 @@ public void renderCrumbling(List crumblingBlocks) {
// Set up the crumbling program buffers. Nothing changes here between draws.
GlBufferType.DRAW_INDIRECT_BUFFER.bind(crumblingDrawBuffer.handle());
GL30.glBindBufferRange(GL43.GL_SHADER_STORAGE_BUFFER, BufferBindings.DRAW, crumblingDrawBuffer.handle(), 0, IndirectBuffers.DRAW_COMMAND_STRIDE);
- TextureBinder.bindRenderTarget(Minecraft.getInstance().getMainRenderTarget());
+ TextureBinder.bindRenderTarget(Minecraft.getInstance().gameRenderer.mainRenderTarget());
for (var groupEntry : byType.entrySet()) {
var byProgress = groupEntry.getValue();
@@ -292,7 +292,7 @@ public void renderCrumbling(List crumblingBlocks) {
@Override
public void triggerFallback() {
IndirectPrograms.kill();
- Minecraft.getInstance().levelRenderer.allChanged();
+ Minecraft.getInstance().levelRenderer.resetLevelRenderData();
}
@Override
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/OitFramebuffer.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/OitFramebuffer.java
index 1b95d9e999..8280b6de4a 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/OitFramebuffer.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/OitFramebuffer.java
@@ -1,8 +1,11 @@
package dev.engine_room.flywheel.backend.engine.indirect;
+import java.util.List;
+
import org.lwjgl.opengl.GL32;
import org.lwjgl.opengl.GL46;
+import com.mojang.blaze3d.opengl.FrameBufferAttachment;
import com.mojang.blaze3d.opengl.GlConst;
import com.mojang.blaze3d.opengl.GlStateManager;
import com.mojang.blaze3d.opengl.GlTexture;
@@ -50,14 +53,14 @@ public OitFramebuffer(OitPrograms programs) {
public void prepare() {
RenderTarget renderTarget;
- if (Minecraft.useShaderTransparency()) {
- renderTarget = Minecraft.getInstance().levelRenderer.getItemEntityTarget();
+ if (Minecraft.getInstance().options.improvedTransparency().get()) {
+ renderTarget = Minecraft.getInstance().levelRenderer.itemEntityTarget();
renderTarget.copyDepthFrom(Minecraft.getInstance()
- .getMainRenderTarget());
+ .gameRenderer.mainRenderTarget());
} else {
renderTarget = Minecraft.getInstance()
- .getMainRenderTarget();
+ .gameRenderer.mainRenderTarget();
}
maybeResizeFBO(renderTarget.width, renderTarget.height);
@@ -85,11 +88,11 @@ public void depthRange() {
// No depth writes, but we'll still use the depth test.
GlStateManager._depthMask(false);
GlStateManager._colorMask(ColorTargetState.WRITE_ALL);
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
GlStateManager._blendFuncSeparate(GlConst.GL_ONE, GlConst.GL_ONE, GlConst.GL_ONE, GlConst.GL_ONE);
GL32.glBlendEquation(GlConst.GL_MAX);
- float far = Minecraft.getInstance().gameRenderer.getGameRenderState().levelRenderState.cameraRenderState.depthFar;
+ float far = Minecraft.getInstance().gameRenderer.gameRenderState().levelRenderState.cameraRenderState.depthFar;
if (GlCompat.SUPPORTS_DSA) {
GL46.glNamedFramebufferDrawBuffers(fbo, DEPTH_RANGE_DRAW_BUFFERS);
@@ -108,7 +111,7 @@ public void renderTransmittance() {
// No depth writes, but we'll still use the depth test
GlStateManager._depthMask(false);
GlStateManager._colorMask(ColorTargetState.WRITE_ALL);
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
GlStateManager._blendFuncSeparate(GlConst.GL_ONE, GlConst.GL_ONE, GlConst.GL_ONE, GlConst.GL_ONE);
GL32.glBlendEquation(GlConst.GL_FUNC_ADD);
@@ -134,7 +137,7 @@ public void renderDepthFromTransmittance() {
// Only write to depth, not color.
GlStateManager._depthMask(true);
GlStateManager._colorMask(ColorTargetState.WRITE_NONE);
- GlStateManager._disableBlend();
+ GlStateManager._disableBlend(0);
GlStateManager._depthFunc(GlConst.GL_ALWAYS);
if (GlCompat.SUPPORTS_DSA) {
@@ -156,7 +159,7 @@ public void accumulate() {
// No depth writes, but we'll still use the depth test
GlStateManager._depthMask(false);
GlStateManager._colorMask(ColorTargetState.WRITE_ALL);
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
GlStateManager._blendFuncSeparate(GlConst.GL_ONE, GlConst.GL_ONE, GlConst.GL_ONE, GlConst.GL_ONE);
GL32.glBlendEquation(GlConst.GL_FUNC_ADD);
@@ -175,10 +178,10 @@ public void accumulate() {
* Composite the accumulated luminance onto the main framebuffer.
*/
public void composite() {
- if (Minecraft.useShaderTransparency()) {
- bindRenderTarget(Minecraft.getInstance().levelRenderer.getItemEntityTarget());
+ if (Minecraft.getInstance().options.improvedTransparency().get()) {
+ bindRenderTarget(Minecraft.getInstance().levelRenderer.itemEntityTarget());
} else {
- bindRenderTarget(Minecraft.getInstance().getMainRenderTarget());
+ bindRenderTarget(Minecraft.getInstance().gameRenderer.mainRenderTarget());
}
// The composite shader writes out the closest depth to gl_FragDepth.
@@ -187,7 +190,7 @@ public void composite() {
// If Neo gets wavelet OIT we can use their hooks to be correct with everything.
GlStateManager._depthMask(true);
GlStateManager._colorMask(ColorTargetState.WRITE_ALL);
- GlStateManager._enableBlend();
+ GlStateManager._enableBlend(0);
// We rely on the blend func to achieve:
// final color = (1 - transmittance_total) * sum(color_f * alpha_f * transmittance_f) / sum(alpha_f * transmittance_f)
@@ -207,14 +210,15 @@ public void composite() {
drawFullscreenQuad();
- bindRenderTarget(Minecraft.getInstance().getMainRenderTarget());
+ bindRenderTarget(Minecraft.getInstance().gameRenderer.mainRenderTarget());
}
private static void bindRenderTarget(RenderTarget target) {
GlTexture colorTexture = (GlTexture) target.getColorTexture();
- int i = colorTexture.getFbo(
+ int i = GlUtil.getGlDevice().frameBufferCache().getFbo(
GlUtil.getGlDevice().directStateAccess(),
- target.getDepthTexture()
+ List.of((FrameBufferAttachment) target.getColorTexture()),
+ (FrameBufferAttachment) target.getDepthTexture()
);
GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, i);
GlStateManager._viewport(0, 0, colorTexture.getWidth(0), colorTexture.getHeight(0));
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/instancing/InstancedDrawManager.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/instancing/InstancedDrawManager.java
index 8450b2de1f..b081edc124 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/instancing/InstancedDrawManager.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/instancing/InstancedDrawManager.java
@@ -123,7 +123,7 @@ public void render(LightStorage lightStorage, EnvironmentStorage environmentStor
TextureBinder.bindLightAndOverlay();
light.bind();
- TextureBinder.bindRenderTarget(Minecraft.getInstance().getMainRenderTarget());
+ TextureBinder.bindRenderTarget(Minecraft.getInstance().gameRenderer.mainRenderTarget());
submitDraws();
@@ -269,7 +269,7 @@ public void renderCrumbling(List crumblingBlocks) {
vao.bindForDraw();
TextureBinder.bindLightAndOverlay();
- TextureBinder.bindRenderTarget(Minecraft.getInstance().getMainRenderTarget());
+ TextureBinder.bindRenderTarget(Minecraft.getInstance().gameRenderer.mainRenderTarget());
for (var groupEntry : byType.entrySet()) {
var byProgress = groupEntry.getValue();
@@ -306,7 +306,7 @@ public void renderCrumbling(List crumblingBlocks) {
@Override
public void triggerFallback() {
InstancingPrograms.kill();
- Minecraft.getInstance().levelRenderer.allChanged();
+ Minecraft.getInstance().levelRenderer.resetLevelRenderData();
}
@Override
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/FrameUniforms.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/FrameUniforms.java
index 4ae1146c69..0516c50bb3 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/FrameUniforms.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/FrameUniforms.java
@@ -10,7 +10,6 @@
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
import dev.engine_room.flywheel.backend.engine.indirect.DepthPyramid;
import dev.engine_room.flywheel.backend.extension.CameraRenderStateExtension;
-import dev.engine_room.flywheel.backend.mixin.LevelRendererAccessor;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.state.level.CameraRenderState;
@@ -163,7 +162,7 @@ private static long writeCamera(long ptr) {
}
private static long writeTime(long ptr, RenderContext context) {
- int ticks = ((LevelRendererAccessor) context.renderer()).flywheel$getTicks();
+ int ticks = (int) context.levelRenderState().gameTime;
float partialTick = context.partialTick();
float renderTicks = ticks + partialTick;
float renderSeconds = renderTicks / 20f;
@@ -194,7 +193,7 @@ private static long writeCameraIn(long ptr, CameraRenderState cameraRenderState)
private static long writeCullData(long ptr, CameraRenderState cameraRenderState) {
var mc = Minecraft.getInstance();
- var mainRenderTarget = mc.getMainRenderTarget();
+ var mainRenderTarget = mc.gameRenderer.mainRenderTarget();
int pyramidWidth = DepthPyramid.mip0Size(mainRenderTarget.width);
int pyramidHeight = DepthPyramid.mip0Size(mainRenderTarget.height);
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/PlayerUniforms.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/PlayerUniforms.java
index c76dc1934f..eb0f6a8683 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/PlayerUniforms.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/uniform/PlayerUniforms.java
@@ -62,17 +62,14 @@ public static void update(RenderContext context) {
}
private static long writeTeamColor(long ptr, @Nullable PlayerTeam team) {
- if (team != null) {
- Integer color = team.getColor().getColor();
-
- if (color != null) {
- int red = ARGB.red(color);
- int green = ARGB.green(color);
- int blue = ARGB.blue(color);
- return writeVec4(ptr, red / 255f, green / 255f, blue / 255f, 1f);
- } else {
- return writeVec4(ptr, 1f, 1f, 1f, 1f);
- }
+ if (team != null && team.getColor().isPresent()) {
+ int color = team.getColor().get().rgb();
+ int red = ARGB.red(color);
+ int green = ARGB.green(color);
+ int blue = ARGB.blue(color);
+ return writeVec4(ptr, red / 255f, green / 255f, blue / 255f, 1f);
+ } else if (team != null) {
+ return writeVec4(ptr, 1f, 1f, 1f, 1f);
} else {
return writeVec4(ptr, 1f, 1f, 1f, 0f);
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArrayDSA.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArrayDSA.java
index 196ecdb1dc..28ddfc4251 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArrayDSA.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArrayDSA.java
@@ -60,9 +60,9 @@ public void bindAttributes(final int bindingIndex, final int startAttribIndex, L
if (!attribute.equals(attributes[attribIndex])) {
if (attribute instanceof VertexAttribute.Float f) {
- GL45C.glVertexArrayAttribFormat(handle, attribIndex, f.size(), GlConst.toGl(f.type()), f.normalized(), offset);
+ GL45C.glVertexArrayAttribFormat(handle, attribIndex, f.size(), f.type().glType(), f.normalized(), offset);
} else if (attribute instanceof VertexAttribute.Int vi) {
- GL45C.glVertexArrayAttribIFormat(handle, attribIndex, vi.size(), GlConst.toGl(vi.type()), offset);
+ GL45C.glVertexArrayAttribIFormat(handle, attribIndex, vi.size(), vi.type().glType(), offset);
}
attributes[attribIndex] = attribute;
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArrayGL3.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArrayGL3.java
index 5c9d922152..dbc708453c 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArrayGL3.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArrayGL3.java
@@ -112,9 +112,9 @@ private void updateAttribute(int attribIndex) {
int stride = bindingStrides[bindingIndex];
if (attribute instanceof VertexAttribute.Float f) {
- GlStateManager._vertexAttribPointer(attribIndex, f.size(), GlConst.toGl(f.type()), f.normalized(), stride, offset);
+ GlStateManager._vertexAttribPointer(attribIndex, f.size(), f.type().glType(), f.normalized(), stride, offset);
} else if (attribute instanceof VertexAttribute.Int vi) {
- GlStateManager._vertexAttribIPointer(attribIndex, vi.size(), GlConst.toGl(vi.type()), stride, offset);
+ GlStateManager._vertexAttribIPointer(attribIndex, vi.size(), vi.type().glType(), stride, offset);
}
int divisor = bindingDivisors[bindingIndex];
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java
index 9813a7173c..0ff975e3c7 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java
@@ -64,9 +64,9 @@ public void bindAttributes(final int bindingIndex, final int startAttribIndex, L
if (!attribute.equals(attributes[attribIndex])) {
if (attribute instanceof VertexAttribute.Float f) {
- GL43C.glVertexAttribFormat(attribIndex, f.size(), GlConst.toGl(f.type()), f.normalized(), offset);
+ GL43C.glVertexAttribFormat(attribIndex, f.size(), f.type().glType(), f.normalized(), offset);
} else if (attribute instanceof VertexAttribute.Int vi) {
- GL43C.glVertexAttribIFormat(attribIndex, vi.size(), GlConst.toGl(vi.type()), offset);
+ GL43C.glVertexAttribIFormat(attribIndex, vi.size(), vi.type().glType(), offset);
}
attributes[attribIndex] = attribute;
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/VertexAttribute.java b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/VertexAttribute.java
index abb4b31726..ccf5d73f80 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/VertexAttribute.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/gl/array/VertexAttribute.java
@@ -1,31 +1,42 @@
package dev.engine_room.flywheel.backend.gl.array;
-import com.mojang.blaze3d.vertex.VertexFormatElement;
-
public sealed interface VertexAttribute {
int byteWidth();
- /**
- * A bindable attribute in a vertex array.
- *
- * @param type The type of the attribute, e.g. GL_FLOAT.
- * @param size The number of components in the attribute, e.g. 3 for a vec3.
- * @param normalized Whether the data is normalized.
- */
- record Float(VertexFormatElement.Type type, int size, boolean normalized) implements VertexAttribute {
+ public enum Type {
+ BYTE(1, 0x1400),
+ UBYTE(1, 0x1401),
+ SHORT(2, 0x1402),
+ USHORT(2, 0x1403),
+ INT(4, 0x1404),
+ UINT(4, 0x1405),
+ FLOAT(4, 0x1406);
+
+ private final int size;
+ private final int glType;
+
+ Type(int size, int glType) {
+ this.size = size;
+ this.glType = glType;
+ }
+
+ public int size() {
+ return size;
+ }
+
+ public int glType() {
+ return glType;
+ }
+ }
+
+ record Float(Type type, int size, boolean normalized) implements VertexAttribute {
@Override
public int byteWidth() {
return size * type.size();
}
}
- /**
- * A bindable attribute in a vertex array.
- *
- * @param type The type of the attribute, e.g. GL_INT.
- * @param size The number of components in the attribute, e.g. 3 for a vec3.
- */
- record Int(VertexFormatElement.Type type, int size) implements VertexAttribute {
+ record Int(Type type, int size) implements VertexAttribute {
@Override
public int byteWidth() {
return size * type.size();
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/FogRendererMixin.java b/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/FogRendererMixin.java
index b2b9b2440b..d0ddc9aad4 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/FogRendererMixin.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/FogRendererMixin.java
@@ -12,7 +12,7 @@
@Mixin(FogRenderer.class)
abstract class FogRendererMixin {
@Inject(method = "updateBuffer(Lnet/minecraft/client/renderer/fog/FogData;)V", at = @At("HEAD"))
- private static void flywheel$onReturnSetupFog(FogData fog, CallbackInfo ci) {
+ private void flywheel$onReturnSetupFog(FogData fog, CallbackInfo ci) {
FogUniforms.update(fog.color, fog.environmentalStart, fog.environmentalEnd, fog.renderDistanceStart, fog.renderDistanceEnd, fog.skyEnd, fog.cloudEnd);
}
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/LightingMixin.java b/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/LightingMixin.java
index 3919ac6af3..1a9e506d40 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/LightingMixin.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/LightingMixin.java
@@ -1,6 +1,6 @@
package dev.engine_room.flywheel.backend.mixin;
-import org.joml.Vector3f;
+import org.joml.Vector3fc;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -13,8 +13,8 @@
@Mixin(Lighting.class)
abstract class LightingMixin {
- @Inject(method = "updateBuffer(Lcom/mojang/blaze3d/platform/Lighting$Entry;Lorg/joml/Vector3f;Lorg/joml/Vector3f;)V", at = @At("HEAD"))
- private static void flywheel$onHeadUpdateBuffer(Entry entry, Vector3f light0, Vector3f light1, CallbackInfo ci) {
+ @Inject(method = "updateBuffer(Lcom/mojang/blaze3d/platform/Lighting$Entry;Lorg/joml/Vector3fc;Lorg/joml/Vector3fc;)V", at = @At("HEAD"))
+ private void flywheel$onHeadUpdateBuffer(Entry entry, Vector3fc light0, Vector3fc light1, CallbackInfo ci) {
if (entry == Entry.LEVEL) {
LevelUniforms.LIGHT0_DIRECTION.set(light0);
LevelUniforms.LIGHT1_DIRECTION.set(light1);
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/RenderSystemMixin.java b/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/RenderSystemMixin.java
index 9df88f3b25..48735b9337 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/RenderSystemMixin.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/RenderSystemMixin.java
@@ -5,6 +5,7 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import com.mojang.blaze3d.systems.GpuDevice;
import com.mojang.blaze3d.systems.RenderSystem;
import dev.engine_room.flywheel.backend.gl.GlCompat;
@@ -12,7 +13,7 @@
@Mixin(RenderSystem.class)
abstract class RenderSystemMixin {
@Inject(method = "initRenderer", at = @At("RETURN"))
- private static void flywheel$onInitRenderer(CallbackInfo ci) {
+ private static void flywheel$onInitRenderer(GpuDevice device, CallbackInfo ci) {
GlCompat.init();
}
}
diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/light/SkyDataLayerStorageMapAccessor.java b/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/light/SkyDataLayerStorageMapAccessor.java
index b34c0ef31b..1890a38cf3 100644
--- a/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/light/SkyDataLayerStorageMapAccessor.java
+++ b/common/src/backend/java/dev/engine_room/flywheel/backend/mixin/light/SkyDataLayerStorageMapAccessor.java
@@ -5,7 +5,7 @@
import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap;
-@Mixin(targets = "net.minecraft.world.level.lighting.SkyLightSectionStorage.SkyDataLayerStorageMap")
+@Mixin(targets = "net.minecraft.world.level.lighting.SkyLightSectionStorage$SkyDataLayerStorageMap")
public interface SkyDataLayerStorageMapAccessor {
@Accessor("currentLowestY")
int flywheel$currentLowestY();
diff --git a/common/src/backend/resources/flywheel.backend.mixins.json b/common/src/backend/resources/flywheel.backend.mixins.json
index 9dc1ec415e..cc6b5e2398 100644
--- a/common/src/backend/resources/flywheel.backend.mixins.json
+++ b/common/src/backend/resources/flywheel.backend.mixins.json
@@ -12,7 +12,6 @@
"GlStateManagerAccessor",
"GlStateManagerMixin",
"GpuDeviceAccessor",
- "LevelRendererAccessor",
"LightingMixin",
"OptionsMixin",
"RenderSystemMixin",
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/ModelUtil.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/ModelUtil.java
index 7260cad9f0..21ad7bae7c 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/ModelUtil.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/ModelUtil.java
@@ -78,7 +78,7 @@ public static Material getMaterial(ChunkSectionLayer chunkSectionLayer, boolean
@Nullable
public static Material getItemMaterial(RenderType renderType) {
- if (renderType == Sheets.cutoutBlockSheet()) {
+ if (renderType == Sheets.cutoutBlockItemSheet()) {
return Materials.CUTOUT_BLOCK;
}
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
index 00334e84e1..bef875b251 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java
@@ -7,10 +7,10 @@
import org.jspecify.annotations.Nullable;
import com.google.common.collect.ImmutableList;
+import com.mojang.blaze3d.PrimitiveTopology;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.ByteBufferBuilder;
import com.mojang.blaze3d.vertex.VertexConsumer;
-import com.mojang.blaze3d.vertex.VertexFormat.Mode;
import dev.engine_room.flywheel.api.material.Material;
import dev.engine_room.flywheel.api.model.Mesh;
@@ -94,7 +94,7 @@ public BufferBuilder getBuffer(Material material) {
}
ByteBufferBuilder byteBufferBuilder = byteBufferBuilderStack.nextOrCreate();
- BufferBuilder bufferBuilder = new BufferBuilder(byteBufferBuilder, Mode.QUADS, FlywheelVertexFormats.BLOCK_VERTEX_FORMAT);
+ BufferBuilder bufferBuilder = new BufferBuilder(byteBufferBuilder, PrimitiveTopology.QUADS, FlywheelVertexFormats.BLOCK_VERTEX_FORMAT);
// currentIndex == numBufferBuildersPopulated here.
materials[currentIndex] = material;
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/FlywheelVertexFormats.java b/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/FlywheelVertexFormats.java
index 6459664e4a..1715786200 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/FlywheelVertexFormats.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/FlywheelVertexFormats.java
@@ -1,17 +1,16 @@
package dev.engine_room.flywheel.lib.vertex;
+import com.mojang.blaze3d.GpuFormat;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
-import com.mojang.blaze3d.vertex.VertexFormatElement;
public class FlywheelVertexFormats {
/// Basically the same as {@link DefaultVertexFormat#BLOCK} but with the normals included
- public static final VertexFormat BLOCK_VERTEX_FORMAT = VertexFormat.builder()
- .add("Position", VertexFormatElement.POSITION)
- .add("Color",VertexFormatElement.COLOR)
- .add("UV0",VertexFormatElement.UV0)
- .add("UV2",VertexFormatElement.UV2)
- .add("Normal", VertexFormatElement.NORMAL)
- .padding(1)
+ public static final VertexFormat BLOCK_VERTEX_FORMAT = VertexFormat.builder(0)
+ .addAttribute("Position", GpuFormat.RGB32_FLOAT)
+ .addAttribute("Color", GpuFormat.RGBA8_UNORM)
+ .addAttribute("UV0", GpuFormat.RG32_FLOAT)
+ .addAttribute("UV2", GpuFormat.RG16_SINT)
+ .addAttribute("Normal", GpuFormat.RGBA8_SNORM)
.build();
}
diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/visual/AbstractBlockEntityVisual.java b/common/src/lib/java/dev/engine_room/flywheel/lib/visual/AbstractBlockEntityVisual.java
index 1bd92114a4..7fe7c594d2 100644
--- a/common/src/lib/java/dev/engine_room/flywheel/lib/visual/AbstractBlockEntityVisual.java
+++ b/common/src/lib/java/dev/engine_room/flywheel/lib/visual/AbstractBlockEntityVisual.java
@@ -16,9 +16,9 @@
import dev.engine_room.flywheel.lib.instance.FlatLit;
import dev.engine_room.flywheel.lib.math.MoreMath;
import it.unimi.dsi.fastutil.longs.LongSet;
-import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.core.SectionPos;
+import net.minecraft.util.LightCoordsUtil;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
@@ -100,11 +100,11 @@ public boolean doDistanceLimitThisFrame(DynamicVisual.Context context) {
}
protected int computePackedLight() {
- return LevelRenderer.getLightCoords(level, pos);
+ return LightCoordsUtil.getLightCoords(level, pos);
}
protected void relight(BlockPos pos, @Nullable FlatLit... instances) {
- FlatLit.relight(LevelRenderer.getLightCoords(level, pos), instances);
+ FlatLit.relight(LightCoordsUtil.getLightCoords(level, pos), instances);
}
protected void relight(@Nullable FlatLit... instances) {
@@ -112,7 +112,7 @@ protected void relight(@Nullable FlatLit... instances) {
}
protected void relight(BlockPos pos, Iterator<@Nullable FlatLit> instances) {
- FlatLit.relight(LevelRenderer.getLightCoords(level, pos), instances);
+ FlatLit.relight(LightCoordsUtil.getLightCoords(level, pos), instances);
}
protected void relight(Iterator<@Nullable FlatLit> instances) {
@@ -120,7 +120,7 @@ protected void relight(Iterator<@Nullable FlatLit> instances) {
}
protected void relight(BlockPos pos, Iterable<@Nullable FlatLit> instances) {
- FlatLit.relight(LevelRenderer.getLightCoords(level, pos), instances);
+ FlatLit.relight(LightCoordsUtil.getLightCoords(level, pos), instances);
}
protected void relight(Iterable<@Nullable FlatLit> instances) {
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/GameRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/GameRendererMixin.java
index 675a5aedda..7b270dd7aa 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/GameRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/GameRendererMixin.java
@@ -16,14 +16,14 @@
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LevelRenderer;
-import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
import net.minecraft.client.renderer.state.level.CameraRenderState;
@Mixin(GameRenderer.class)
public class GameRendererMixin {
- @WrapOperation(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderLevel(Lcom/mojang/blaze3d/resource/GraphicsResourceAllocator;Lnet/minecraft/client/DeltaTracker;ZLnet/minecraft/client/renderer/state/level/CameraRenderState;Lorg/joml/Matrix4fc;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lorg/joml/Vector4f;ZLnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;)V"))
- private void extractProjectionMatrixNoBob(LevelRenderer instance, GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, ChunkSectionsToRender chunkSectionsToRender, Operation original, @Local(name = "projectionMatrix") Matrix4f projectionMatrix) {
+ @WrapOperation(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;render(Lcom/mojang/blaze3d/resource/GraphicsResourceAllocator;Lnet/minecraft/client/DeltaTracker;ZLnet/minecraft/client/renderer/state/level/CameraRenderState;Lorg/joml/Matrix4fc;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lorg/joml/Vector4f;Z)V"))
+ private void extractProjectionMatrixNoBob(LevelRenderer instance, GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, Operation original, @Local(name = "projectionMatrix") Matrix4f projectionMatrix) {
ScopedValue.where(RenderContextImpl.PROJECTION_MATRIX_NO_BOB, projectionMatrix)
- .run(() -> original.call(instance, resourceAllocator, deltaTracker, renderOutline, cameraState, modelViewMatrix, terrainFog, fogColor, shouldRenderSky, chunkSectionsToRender));
+ .run(() -> original.call(instance, resourceAllocator, deltaTracker, renderOutline, cameraState, modelViewMatrix, terrainFog, fogColor, shouldRenderSky));
}
}
+
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
index 5541c3f82f..62d89e5a62 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/LevelRendererMixin.java
@@ -1,8 +1,5 @@
package dev.engine_room.flywheel.impl.mixin;
-import java.util.Iterator;
-import java.util.SortedSet;
-
import org.joml.Matrix4f;
import org.joml.Matrix4fc;
import org.joml.Vector4f;
@@ -15,40 +12,28 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import com.google.common.collect.Iterators;
-import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.mojang.blaze3d.buffers.GpuBufferSlice;
import com.mojang.blaze3d.resource.GraphicsResourceAllocator;
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
import dev.engine_room.flywheel.impl.FlwImplXplat;
import dev.engine_room.flywheel.impl.event.RenderContextImpl;
-import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
-import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.RenderBuffers;
-import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
+import net.minecraft.client.renderer.SubmitNodeCollector;
import net.minecraft.client.renderer.state.level.CameraRenderState;
+import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.state.level.LevelRenderState;
import net.minecraft.server.level.BlockDestructionProgress;
-import net.minecraft.world.entity.Entity;
@Mixin(value = LevelRenderer.class, priority = 1001) // Higher priority to go after Sodium
abstract class LevelRendererMixin {
- @Shadow
- @Nullable
- private ClientLevel level;
-
@Shadow
@Final
private RenderBuffers renderBuffers;
- @Shadow
- @Final
- private Long2ObjectMap> destructionProgress;
-
@Shadow
@Final
private LevelRenderState levelRenderState;
@@ -57,8 +42,9 @@ abstract class LevelRendererMixin {
@Nullable
private RenderContextImpl flywheel$renderContext;
- @Inject(method = "renderLevel", at = @At("HEAD"))
- private void flywheel$beginRender(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, ChunkSectionsToRender chunkSectionsToRender, CallbackInfo ci) {
+ @Inject(method = "render", at = @At("HEAD"))
+ private void flywheel$beginRender(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci) {
+ ClientLevel level = Minecraft.getInstance().level;
Matrix4f projectionMatrix = RenderContextImpl.PROJECTION_MATRIX_NO_BOB.get();
flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, modelViewMatrix, projectionMatrix, cameraState, levelRenderState, deltaTracker.getGameTimeDeltaPartialTick(false));
@@ -68,21 +54,23 @@ abstract class LevelRendererMixin {
}
}
- @Inject(method = "renderLevel", at = @At("RETURN"))
+ @Inject(method = "render", at = @At("RETURN"))
private void flywheel$endRender(CallbackInfo ci) {
flywheel$renderContext = null;
}
- @Inject(method = "allChanged", at = @At("RETURN"))
+ @Inject(method = "resetLevelRenderData", at = @At("RETURN"))
private void flywheel$reload(CallbackInfo ci) {
+ ClientLevel level = Minecraft.getInstance().level;
if (level != null) {
FlwImplXplat.INSTANCE.dispatchReloadLevelRendererEvent(level);
}
}
- @Inject(method = "lambda$addMainPass$0", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;submitBlockEntities(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/state/level/LevelRenderState;Lnet/minecraft/client/renderer/SubmitNodeStorage;)V"))
+ @Inject(method = "submitFeatures", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;submitBlockEntities(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/state/level/LevelRenderState;Lnet/minecraft/client/renderer/SubmitNodeCollector;)V"))
private void flywheel$beforeBlockEntities(CallbackInfo ci) {
if (flywheel$renderContext != null) {
+ ClientLevel level = Minecraft.getInstance().level;
VisualizationManager manager = VisualizationManager.get(level);
if (manager != null) {
manager.renderDispatcher().afterSubmitEntities(flywheel$renderContext);
@@ -90,19 +78,14 @@ abstract class LevelRendererMixin {
}
}
- @Inject(method = "lambda$addMainPass$0", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;submitBlockDestroyAnimation(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/LevelRenderState;)V"))
+ @Inject(method = "submitFeatures", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;submitBlockDestroyAnimation(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/LevelRenderState;)V"))
private void flywheel$beforeRenderCrumbling(CallbackInfo ci) {
if (flywheel$renderContext != null) {
+ ClientLevel level = Minecraft.getInstance().level;
VisualizationManager manager = VisualizationManager.get(level);
if (manager != null) {
- manager.renderDispatcher().beforeSubmitCrumbling(flywheel$renderContext, destructionProgress);
+ manager.renderDispatcher().beforeSubmitCrumbling(flywheel$renderContext);
}
}
}
-
- @ModifyExpressionValue(method = "extractVisibleEntities", at = @At(value = "INVOKE", target = "Ljava/lang/Iterable;iterator()Ljava/util/Iterator;"))
- private Iterator flywheel$decideNotToRenderEntity(Iterator original) {
- return Iterators.filter(original, entity -> !(VisualizationManager.supportsVisualization(entity.level()) &&
- VisualizationHelper.skipVanillaRender(entity)));
- }
}
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java
index 53f3900962..8ae82136ca 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java
@@ -1,21 +1,30 @@
package dev.engine_room.flywheel.impl.mixin.visualmanage;
+import java.util.Iterator;
+
+import org.jspecify.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import com.google.common.collect.Iterators;
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
+
import dev.engine_room.flywheel.api.visualization.VisualizationManager;
+import dev.engine_room.flywheel.lib.visualization.VisualizationHelper;
import net.minecraft.client.multiplayer.ClientLevel;
-import net.minecraft.client.renderer.LevelRenderer;
+import net.minecraft.client.renderer.extract.LevelExtractor;
import net.minecraft.core.BlockPos;
+import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
-@Mixin(LevelRenderer.class)
+@Mixin(LevelExtractor.class)
abstract class LevelRendererMixin {
@Shadow
+ @Nullable
private ClientLevel level;
/**
@@ -23,6 +32,10 @@ abstract class LevelRendererMixin {
*/
@Inject(method = "setBlockDirty(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/state/BlockState;)V", at = @At("TAIL"))
private void flywheel$checkUpdate(BlockPos pos, BlockState oldState, BlockState newState, CallbackInfo ci) {
+ if (level == null) {
+ return;
+ }
+
VisualizationManager manager = VisualizationManager.get(level);
if (manager == null) {
return;
@@ -42,4 +55,10 @@ abstract class LevelRendererMixin {
blockEntities.queueUpdate(blockEntity);
}
}
+
+ @ModifyExpressionValue(method = "extractVisibleEntities", at = @At(value = "INVOKE", target = "Ljava/lang/Iterable;iterator()Ljava/util/Iterator;"))
+ private Iterator flywheel$decideNotToRenderEntity(Iterator original) {
+ return Iterators.filter(original, entity -> !(VisualizationManager.supportsVisualization(entity.level()) &&
+ VisualizationHelper.skipVanillaRender(entity)));
+ }
}
diff --git a/common/src/main/java/dev/engine_room/flywheel/impl/visualization/VisualizationManagerImpl.java b/common/src/main/java/dev/engine_room/flywheel/impl/visualization/VisualizationManagerImpl.java
index fb9dcd78a2..d3cc124854 100644
--- a/common/src/main/java/dev/engine_room/flywheel/impl/visualization/VisualizationManagerImpl.java
+++ b/common/src/main/java/dev/engine_room/flywheel/impl/visualization/VisualizationManagerImpl.java
@@ -275,30 +275,25 @@ private void render(RenderContext context) {
lateInit().engine.render(context);
}
- private void renderCrumbling(RenderContext context, Long2ObjectMap> destructionProgress) {
- if (destructionProgress.isEmpty()) {
+ private void renderCrumbling(RenderContext context) {
+ var blockBreakingStates = context.levelRenderState().blockBreakingRenderStates;
+ if (blockBreakingStates == null || blockBreakingStates.isEmpty()) {
return;
}
List crumblingBlocks = new ArrayList<>();
- for (var entry : destructionProgress.long2ObjectEntrySet()) {
- var set = entry.getValue();
- if (set == null || set.isEmpty()) {
- // Nothing to do if there's no crumbling.
- continue;
- }
-
- var visual = blockEntities.getStorage()
- .visualAtPos(entry.getLongKey());
+ for (var breakingState : blockBreakingStates) {
+ BlockPos pos = breakingState.blockPos();
+ long longPos = pos.asLong();
+ var visual = blockEntities.getStorage().visualAtPos(longPos);
if (visual == null) {
// The block doesn't have a visual, this is probably the common case.
continue;
}
List instances = new ArrayList<>();
-
visual.collectCrumblingInstances(instance -> {
if (instance != null) {
instances.add(instance);
@@ -310,9 +305,7 @@ private void renderCrumbling(RenderContext context, Long2ObjectMap> destructionProgress) {
- renderCrumbling(ctx, destructionProgress);
+ public void beforeSubmitCrumbling(RenderContext ctx) {
+ renderCrumbling(ctx);
}
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index a632e03f37..89da1f7a65 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,10 +1,10 @@
[versions]
java = "25"
-minecraft = "26.1.2"
+minecraft = "26.2"
# https://neoforged.net
mdg = "2.0.+"
-neoforge = "26.1.2.78"
+neoforge = "26.2.0.88"
# https://fabricmc.net/develop
loom = "1.17.+"
diff --git a/neoforge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockStateModelBufferer.java b/neoforge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockStateModelBufferer.java
index bbce84765e..dcb4cdf6b6 100644
--- a/neoforge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockStateModelBufferer.java
+++ b/neoforge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockStateModelBufferer.java
@@ -54,7 +54,7 @@ public static SimpleModel bufferModel(BlockStateModel model, BlockPos pos, Block
model.collectParts(level, pos, state, random, parts);
Minecraft minecraft = Minecraft.getInstance();
- GameRenderState gameRenderState = minecraft.gameRenderer.getGameRenderState();
+ GameRenderState gameRenderState = minecraft.gameRenderer.gameRenderState();
BlockColors blockColors = minecraft.getBlockColors();
// See ModelBlockRenderer#tesselateBlock
@@ -98,7 +98,7 @@ public static SimpleModel bufferBlocks(Iterator posIterator, BlockAndT
Minecraft minecraft = Minecraft.getInstance();
ModelManager modelManager = minecraft.getModelManager();
- GameRenderState gameRenderState = minecraft.gameRenderer.getGameRenderState();
+ GameRenderState gameRenderState = minecraft.gameRenderer.gameRenderState();
boolean useAo = gameRenderState.optionsRenderState.ambientOcclusion;
BlockColors blockColors = minecraft.getBlockColors();
diff --git a/neoforge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java b/neoforge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
index 73bc4cf363..2af379ed9a 100644
--- a/neoforge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
+++ b/neoforge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java
@@ -43,7 +43,7 @@ public static void registerClientCommands(RegisterClientCommandsEvent event) {
backendValue.set(FlwConfig.DEFAULT_BACKEND_STR);
// Reload renderers so we can report the actual backend.
- Minecraft.getInstance().levelRenderer.allChanged();
+ Minecraft.getInstance().levelRenderer.resetLevelRenderData();
Backend actualBackend = BackendManager.currentBackend();
String actualIdStr = Backend.REGISTRY.getIdOrThrow(actualBackend)
@@ -59,7 +59,7 @@ public static void registerClientCommands(RegisterClientCommandsEvent event) {
backendValue.set(requestedIdStr);
// Reload renderers so we can report the actual backend.
- Minecraft.getInstance().levelRenderer.allChanged();
+ Minecraft.getInstance().levelRenderer.resetLevelRenderData();
Backend actualBackend = BackendManager.currentBackend();
if (actualBackend != requestedBackend) {
@@ -86,14 +86,14 @@ public static void registerClientCommands(RegisterClientCommandsEvent event) {
.executes(context -> {
limitUpdatesValue.set(true);
sendMessage(context.getSource(), Component.translatable("command.flywheel.limit_updates.set.on"));
- Minecraft.getInstance().levelRenderer.allChanged();
+ Minecraft.getInstance().levelRenderer.resetLevelRenderData();
return Command.SINGLE_SUCCESS;
}))
.then(Commands.literal("off")
.executes(context -> {
limitUpdatesValue.set(false);
sendMessage(context.getSource(), Component.translatable("command.flywheel.limit_updates.set.off"));
- Minecraft.getInstance().levelRenderer.allChanged();
+ Minecraft.getInstance().levelRenderer.resetLevelRenderData();
return Command.SINGLE_SUCCESS;
})));
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 7e3dba3272..44a6f35211 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -16,6 +16,7 @@ rootDir.walkTopDown()
.filter { it.isDirectory }
.filter { it != rootDir }
.filter { it.name != "buildSrc" && it.name != "build-logic" }
+ .filter { !it.name.contains("fabric") }
.filter { it.resolve("build.gradle").exists() || it.resolve("build.gradle.kts").exists() }
.forEach {
val relativePath = it.toRelativeString(rootDir)
diff --git a/vanillin/common/src/main/java/dev/engine_room/vanillin/VanillaVisuals.java b/vanillin/common/src/main/java/dev/engine_room/vanillin/VanillaVisuals.java
index fef8a932f5..a867725ed6 100644
--- a/vanillin/common/src/main/java/dev/engine_room/vanillin/VanillaVisuals.java
+++ b/vanillin/common/src/main/java/dev/engine_room/vanillin/VanillaVisuals.java
@@ -24,9 +24,11 @@
import net.minecraft.client.model.geom.ModelLayers;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
+import net.minecraft.world.entity.EntityTypes;
import net.minecraft.world.entity.vehicle.minecart.AbstractMinecart;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
+import net.minecraft.world.level.block.entity.BlockEntityTypes;
public class VanillaVisuals {
public static final Configurator CONFIGURATOR = new Configurator();
@@ -37,25 +39,25 @@ public class VanillaVisuals {
public static final boolean EXPERIMENTAL = VanillinXplat.INSTANCE.isDevelopmentEnvironment();
public static void init() {
- builder(BlockEntityType.CHEST)
+ builder(BlockEntityTypes.CHEST)
.factory(ChestVisual::new)
.apply(STABLE);
- builder(BlockEntityType.ENDER_CHEST)
+ builder(BlockEntityTypes.ENDER_CHEST)
.factory(ChestVisual::new)
.apply(STABLE);
- builder(BlockEntityType.TRAPPED_CHEST)
+ builder(BlockEntityTypes.TRAPPED_CHEST)
.factory(ChestVisual::new)
.apply(STABLE);
- builder(BlockEntityType.BELL)
+ builder(BlockEntityTypes.BELL)
.factory(BellVisual::new)
.apply(STABLE);
- builder(BlockEntityType.SHULKER_BOX)
+ builder(BlockEntityTypes.SHULKER_BOX)
.factory(ShulkerBoxVisual::new)
.apply(STABLE);
- builder(EntityType.BLOCK_DISPLAY).factory(BlockDisplayVisual::new)
+ builder(EntityTypes.BLOCK_DISPLAY).factory(BlockDisplayVisual::new)
.apply(STABLE);
// FIXME 1.21.11: port
@@ -65,20 +67,20 @@ public static void init() {
// .skipVanillaRender(ItemDisplayVisual::shouldVisualize)
// .apply(EXPERIMENTAL);
- minecart(EntityType.CHEST_MINECART, ModelLayers.CHEST_MINECART)
+ minecart(EntityTypes.CHEST_MINECART, ModelLayers.CHEST_MINECART)
.apply(STABLE);
- minecart(EntityType.COMMAND_BLOCK_MINECART, ModelLayers.COMMAND_BLOCK_MINECART)
+ minecart(EntityTypes.COMMAND_BLOCK_MINECART, ModelLayers.COMMAND_BLOCK_MINECART)
.apply(STABLE);
- minecart(EntityType.FURNACE_MINECART, ModelLayers.FURNACE_MINECART)
+ minecart(EntityTypes.FURNACE_MINECART, ModelLayers.FURNACE_MINECART)
.apply(STABLE);
- minecart(EntityType.HOPPER_MINECART, ModelLayers.HOPPER_MINECART)
+ minecart(EntityTypes.HOPPER_MINECART, ModelLayers.HOPPER_MINECART)
.apply(STABLE);
- minecart(EntityType.MINECART, ModelLayers.MINECART)
+ minecart(EntityTypes.MINECART, ModelLayers.MINECART)
.apply(STABLE);
- minecart(EntityType.SPAWNER_MINECART, ModelLayers.SPAWNER_MINECART)
+ minecart(EntityTypes.SPAWNER_MINECART, ModelLayers.SPAWNER_MINECART)
.apply(STABLE);
- composable(EntityType.TNT_MINECART)
+ composable(EntityTypes.TNT_MINECART)
.with(element(VisualElements.SHADOW).configure(new ShadowElement.Config(0.7f, ShadowElement.Config.DEFAULT_STRENGTH))
.build())
.with(element(VisualElements.FIRE).build())
diff --git a/vanillin/common/src/main/java/dev/engine_room/vanillin/visuals/ChestVisual.java b/vanillin/common/src/main/java/dev/engine_room/vanillin/visuals/ChestVisual.java
index 0ac569f78d..6c29d1f9a8 100644
--- a/vanillin/common/src/main/java/dev/engine_room/vanillin/visuals/ChestVisual.java
+++ b/vanillin/common/src/main/java/dev/engine_room/vanillin/visuals/ChestVisual.java
@@ -22,13 +22,13 @@
import it.unimi.dsi.fastutil.longs.LongSet;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelLayers;
-import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.blockentity.ChestRenderer;
import net.minecraft.client.resources.model.sprite.SpriteId;
import net.minecraft.core.BlockPos;
import net.minecraft.core.SectionPos;
import net.minecraft.util.LightCoordsUtil;
+import net.minecraft.util.LightCoordsUtil;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.AbstractChestBlock;
import net.minecraft.world.level.block.Block;
@@ -199,8 +199,8 @@ public LongSet acceptNone() {
private class BrightnessCombiner implements DoubleBlockCombiner.Combiner {
@Override
public Integer acceptDouble(BlockEntity first, BlockEntity second) {
- int firstLight = LevelRenderer.getLightCoords(first.getLevel(), first.getBlockPos());
- int secondLight = LevelRenderer.getLightCoords(second.getLevel(), second.getBlockPos());
+ int firstLight = LightCoordsUtil.getLightCoords(first.getLevel(), first.getBlockPos());
+ int secondLight = LightCoordsUtil.getLightCoords(second.getLevel(), second.getBlockPos());
int firstBlockLight = LightCoordsUtil.block(firstLight);
int secondBlockLight = LightCoordsUtil.block(secondLight);
int firstSkyLight = LightCoordsUtil.sky(firstLight);
@@ -210,12 +210,12 @@ public Integer acceptDouble(BlockEntity first, BlockEntity second) {
@Override
public Integer acceptSingle(BlockEntity single) {
- return LevelRenderer.getLightCoords(single.getLevel(), single.getBlockPos());
+ return LightCoordsUtil.getLightCoords(single.getLevel(), single.getBlockPos());
}
@Override
public Integer acceptNone() {
- return LevelRenderer.getLightCoords(level, pos);
+ return LightCoordsUtil.getLightCoords(level, pos);
}
}
}