Skip to content

Commit

Permalink
Merge branch 'multiloader-new' into 1.21.2
Browse files Browse the repository at this point in the history
# Conflicts:
#	common/build.gradle.kts
#	common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinCloudRenderer.java
#	fabric/build.gradle.kts
#	neoforge/build.gradle.kts
  • Loading branch information
IMS212 committed Dec 2, 2024
2 parents f64d26e + 52aa8ba commit a8daee1
Show file tree
Hide file tree
Showing 11 changed files with 145 additions and 41 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ val FABRIC_API_VERSION by extra { "0.107.0+1.21.3" }
val PARCHMENT_VERSION by extra { null }

// https://semver.org/
val MOD_VERSION by extra { "1.8.0-beta.7" }
val MOD_VERSION by extra { "1.8.1" }

allprojects {
apply(plugin = "java")
Expand Down
2 changes: 1 addition & 1 deletion common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ dependencies {

modCompileOnly("net.fabricmc.fabric-api:fabric-renderer-api-v1:3.2.9+1172e897d7")

modImplementation("maven.modrinth", "sodium", "mc1.21.3-0.6.0-fabric")
modImplementation("maven.modrinth", "sodium", "mc1.21.3-0.6.1-fabric")
modCompileOnly("org.antlr:antlr4-runtime:4.13.1")
modCompileOnly("io.github.douira:glsl-transformer:2.0.1")
modCompileOnly("org.anarres:jcpp:1.4.14")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package net.irisshaders.iris.compat.sodium.mixin;

import net.caffeinemc.mods.sodium.client.render.immediate.CloudRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

// TODO: 1.21.2
@Mixin(CloudRenderer.class)
public interface CloudRendererAccessor {
//@Accessor
//static ShaderProgram getCLOUDS_SHADER() {
// throw new IllegalStateException();
//}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.irisshaders.iris.compat.sodium.mixin;

import com.llamalad7.mixinextras.sugar.Local;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.caffeinemc.mods.sodium.api.util.NormI8;
import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter;
Expand All @@ -20,7 +21,6 @@
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

Expand All @@ -41,10 +41,18 @@ public abstract class MixinCloudRenderer {

@Shadow(remap = false)
@Nullable
private CloudRenderer.@Nullable CloudGeometry cachedGeometry;
private CloudRenderer.@Nullable CloudGeometry builtGeometry;

@Unique
private @Nullable CloudRenderer.CloudGeometry cachedGeometryIris;
private static boolean hadShadersOn = false;

// Bitmasks for each cloud face
private static final int FACE_MASK_NEG_Y = 1 << 0;
private static final int FACE_MASK_POS_Y = 1 << 1;
private static final int FACE_MASK_NEG_X = 1 << 2;
private static final int FACE_MASK_POS_X = 1 << 3;
private static final int FACE_MASK_NEG_Z = 1 << 4;
private static final int FACE_MASK_POS_Z = 1 << 5;

@Inject(method = "writeVertex", at = @At("HEAD"), cancellable = true, remap = false)
private static void writeIrisVertex(long buffer, float x, float y, float z, int color, CallbackInfoReturnable<Long> cir) {
Expand All @@ -54,27 +62,57 @@ private static void writeIrisVertex(long buffer, float x, float y, float z, int
}
}

@Inject(method = "emitCellGeometry2D", at = @At("HEAD"), remap = false)
private static void computeNormal2D(VertexBufferWriter writer, int faces, int color, float x, float z, CallbackInfo ci) {
@Inject(method = "emitCellGeometryFlat", at = @At("HEAD"), remap = false)
private static void computeNormal2D(VertexBufferWriter writer, int texel, int x, int z, CallbackInfo ci) {
computedNormal = NORMALS[0];
}

@Inject(method = "emitCellGeometryExterior", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/util/ColorABGR;mulRGB(II)I", ordinal = 0), remap = false)
private static void computeNormal3D(VertexBufferWriter writer, int cellFaces, int cellColor, int cellX, int cellZ, CallbackInfo ci) {
computedNormal = NORMALS[0];
}

@Inject(method = "emitCellGeometry3D", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer$CloudFace;ordinal()I"), remap = false)
private static void computeNormal3D(VertexBufferWriter writer, int visibleFaces, int baseColor, float posX, float posZ, boolean interior, CallbackInfo ci, @Local(ordinal = 4) int face) {
computedNormal = NORMALS[face];
@Inject(method = "emitCellGeometryExterior", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/util/ColorABGR;mulRGB(II)I", ordinal = 1), remap = false)
private static void computeNormal3DUp(VertexBufferWriter writer, int cellFaces, int cellColor, int cellX, int cellZ, CallbackInfo ci) {
computedNormal = NORMALS[1];
}

@Inject(method = "emitCellGeometryExterior", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer;writeVertex(JFFFI)J", ordinal = 8, remap = false), remap = false)
private static void computeNormal3DNegX(VertexBufferWriter writer, int cellFaces, int cellColor, int cellX, int cellZ, CallbackInfo ci) {
computedNormal = NORMALS[2];
}

@Inject(remap = false, method = "emitCellGeometryExterior", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer;writeVertex(JFFFI)J", ordinal = 12, remap = false))
private static void computeNormal3DPosX(VertexBufferWriter writer, int cellFaces, int cellColor, int cellX, int cellZ, CallbackInfo ci) {
computedNormal = NORMALS[3];
}

@ModifyArg(remap = false, method = "emitCellGeometry3D", at = @At(value = "INVOKE", target = "Lorg/lwjgl/system/MemoryStack;nmalloc(I)J"))
@Inject(method = "emitCellGeometryExterior", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer;writeVertex(JFFFI)J", ordinal = 16), remap = false)
private static void computeNormal3DNegZ(VertexBufferWriter writer, int cellFaces, int cellColor, int cellX, int cellZ, CallbackInfo ci) {
computedNormal = NORMALS[4];
}

@Inject(method = "emitCellGeometryExterior", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer;writeVertex(JFFFI)J", ordinal = 20), remap = false)
private static void computeNormal3DPosZ(VertexBufferWriter writer, int cellFaces, int cellColor, int cellX, int cellZ, CallbackInfo ci) {
computedNormal = NORMALS[5];
}

@ModifyArg(remap = false, method = "emitCellGeometryExterior", at = @At(value = "INVOKE", target = "Lorg/lwjgl/system/MemoryStack;nmalloc(I)J"))
private static int allocateNewSize(int size) {
return IrisApi.getInstance().isShaderPackInUse() ? 480 : size;
}

@ModifyArg(remap = false, method = "emitCellGeometryInterior", at = @At(value = "INVOKE", target = "Lorg/lwjgl/system/MemoryStack;nmalloc(I)J"))
private static int allocateNewSizeInt(int size) {
return IrisApi.getInstance().isShaderPackInUse() ? 480 : size;
}

@ModifyArg(method = "rebuildGeometry", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/Tesselator;begin(Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;Lcom/mojang/blaze3d/vertex/VertexFormat;)Lcom/mojang/blaze3d/vertex/BufferBuilder;"), index = 1)
private static VertexFormat rebuild(VertexFormat p_350837_) {
return IrisApi.getInstance().isShaderPackInUse() ? IrisVertexFormats.CLOUDS : p_350837_;
}

@ModifyArg(method = "emitCellGeometry3D", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/vertex/buffer/VertexBufferWriter;push(Lorg/lwjgl/system/MemoryStack;JILcom/mojang/blaze3d/vertex/VertexFormat;)V"), index = 3)
@ModifyArg(method = "emitCellGeometryExterior", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/vertex/buffer/VertexBufferWriter;push(Lorg/lwjgl/system/MemoryStack;JILcom/mojang/blaze3d/vertex/VertexFormat;)V"), index = 3)
private static VertexFormat modifyArgIris(VertexFormat vertexFormatDescription) {
if (IrisApi.getInstance().isShaderPackInUse()) {
return IrisVertexFormats.CLOUDS;
Expand All @@ -83,12 +121,21 @@ private static VertexFormat modifyArgIris(VertexFormat vertexFormatDescription)
}
}

@ModifyArg(remap = false, method = "emitCellGeometry2D", at = @At(value = "INVOKE", target = "Lorg/lwjgl/system/MemoryStack;nmalloc(I)J"))
@ModifyArg(method = "emitCellGeometryInterior", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/vertex/buffer/VertexBufferWriter;push(Lorg/lwjgl/system/MemoryStack;JILcom/mojang/blaze3d/vertex/VertexFormat;)V"), index = 3)
private static VertexFormat modifyArgIrisInt(VertexFormat vertexFormatDescription) {
if (IrisApi.getInstance().isShaderPackInUse()) {
return IrisVertexFormats.CLOUDS;
} else {
return ColorVertex.FORMAT;
}
}

@ModifyArg(remap = false, method = "emitCellGeometryFlat", at = @At(value = "INVOKE", target = "Lorg/lwjgl/system/MemoryStack;nmalloc(I)J"))
private static int allocateNewSize2D(int size) {
return IrisApi.getInstance().isShaderPackInUse() ? 80 : size;
}

@ModifyArg(method = "emitCellGeometry2D", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/vertex/buffer/VertexBufferWriter;push(Lorg/lwjgl/system/MemoryStack;JILcom/mojang/blaze3d/vertex/VertexFormat;)V"), index = 3)
@ModifyArg(method = "emitCellGeometryFlat", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/vertex/buffer/VertexBufferWriter;push(Lorg/lwjgl/system/MemoryStack;JILcom/mojang/blaze3d/vertex/VertexFormat;)V"), index = 3)
private static VertexFormat modifyArgIris2D(VertexFormat vertexFormatDescription) {
if (IrisApi.getInstance().isShaderPackInUse()) {
return IrisVertexFormats.CLOUDS;
Expand All @@ -97,21 +144,15 @@ private static VertexFormat modifyArgIris2D(VertexFormat vertexFormatDescription
}
}

@Redirect(method = "render", at = @At(remap = false, value = "FIELD", target = "Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer;cachedGeometry:Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer$CloudGeometry;", ordinal = 0))
private CloudRenderer.@Nullable CloudGeometry changeGeometry(CloudRenderer instance) {
if (IrisApi.getInstance().isShaderPackInUse()) {
return cachedGeometryIris;
} else {
return cachedGeometry;
}
@WrapOperation(method = "render", at = @At(remap = false, value = "INVOKE", target = "Ljava/util/Objects;equals(Ljava/lang/Object;Ljava/lang/Object;)Z"))
private boolean changeGeometry(Object a, Object b, Operation<Boolean> original) {
return hadShadersOn == Iris.isPackInUseQuick() && original.call(a, b);
}

@Redirect(method = "render", at = @At(remap = false, value = "FIELD", target = "Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer;cachedGeometry:Lnet/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer$CloudGeometry;", ordinal = 1))
private void changeGeometry2(CloudRenderer instance, CloudRenderer.CloudGeometry value) {
if (IrisApi.getInstance().isShaderPackInUse()) {
cachedGeometryIris = value;
} else {
cachedGeometry = value;
}
@Inject(method = "rebuildGeometry", at = @At(remap = false, value = "HEAD"), remap = false)
private static void changeGeometry2(CallbackInfoReturnable<CloudRenderer.CloudGeometry> cir) {
hadShadersOn = IrisApi.getInstance().isShaderPackInUse();
}

// TODO interiors
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@
import org.lwjgl.opengl.GL30C;

public class GlSampler extends GlResource {
public static final GlSampler MIPPED_LINEAR_HW = new GlSampler(true, true, true, true);
public static final GlSampler LINEAR_HW = new GlSampler(true, false, true, true);
public static final GlSampler MIPPED_NEAREST_HW = new GlSampler(false, true, true, true);
public static final GlSampler NEAREST_HW = new GlSampler(false, false, true, true);
public static final GlSampler MIPPED_LINEAR = new GlSampler(true, true, false, false);
public static final GlSampler LINEAR = new GlSampler(true, false, false, false);
public static final GlSampler MIPPED_NEAREST = new GlSampler(false, true, false, false);
public static final GlSampler NEAREST = new GlSampler(false, false, false, false);

public GlSampler(boolean linear, boolean mipmapped, boolean shadow, boolean hardwareShadow) {
super(IrisRenderSystem.genSampler());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import net.irisshaders.iris.mixin.LightTextureAccessor;
import net.irisshaders.iris.pbr.format.TextureFormat;
import net.irisshaders.iris.pbr.format.TextureFormatLoader;
import net.irisshaders.iris.pbr.texture.PBRAtlasTexture;
import net.irisshaders.iris.pbr.texture.PBRTextureHolder;
import net.irisshaders.iris.pbr.texture.PBRTextureManager;
import net.irisshaders.iris.pbr.texture.PBRType;
Expand All @@ -25,6 +26,7 @@
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.AbstractTexture;
import net.minecraft.client.renderer.texture.MissingTextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.resources.ResourceLocation;
import org.apache.commons.io.FilenameUtils;
Expand Down Expand Up @@ -145,6 +147,9 @@ private TextureAccess createCustomTexture(CustomTextureData textureData) throws
// now.
return new TextureWrapper(() -> {
AbstractTexture texture = textureManager.getTexture(textureLocation);
if (texture instanceof TextureAtlas || texture instanceof PBRAtlasTexture) {
texture.setFilter(false, Minecraft.getInstance().options.mipmapLevels().get() > 0);
}
return texture != null ? texture.getId() : MissingTextureAtlasSprite.getTexture().getId();
}, TextureType.TEXTURE_2D);
} else {
Expand All @@ -155,6 +160,9 @@ private TextureAccess createCustomTexture(CustomTextureData textureData) throws
AbstractTexture texture = textureManager.getTexture(textureLocation);

if (texture != null) {
if (texture instanceof TextureAtlas || texture instanceof PBRAtlasTexture) {
texture.setFilter(false, Minecraft.getInstance().options.mipmapLevels().get() > 0);
}
int id = texture.getId();
PBRTextureHolder pbrHolder = PBRTextureManager.INSTANCE.getOrLoadHolder(id);
AbstractTexture pbrTexture = switch (pbrType) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,12 @@ public static boolean addShadowSamplers(SamplerHolder samplers, ShadowRenderTarg

if (waterShadowEnabled) {
usesShadows = true;
samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTexture()::getTextureId, separateHardwareSamplers ? null : (shadowRenderTargets.isHardwareFiltered(0) ? shadowRenderTargets.isLinearFiltered(0) ? SHADOW_SAMPLER_LINEAR : SHADOW_SAMPLER_NEAREST : null), "shadowtex0", "watershadow");
samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTextureNoTranslucents()::getTextureId, separateHardwareSamplers ? null : (shadowRenderTargets.isHardwareFiltered(1) ? shadowRenderTargets.isLinearFiltered(1) ? SHADOW_SAMPLER_LINEAR : SHADOW_SAMPLER_NEAREST : null),
samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTexture()::getTextureId, separateHardwareSamplers ? null : shadowRenderTargets.getSamplerFor(0), "shadowtex0", "watershadow");
samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTextureNoTranslucents()::getTextureId, separateHardwareSamplers ? null : shadowRenderTargets.getSamplerFor(1),
"shadowtex1", "shadow");
} else {
usesShadows = samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTexture()::getTextureId, separateHardwareSamplers ? null : (shadowRenderTargets.isHardwareFiltered(0) ? shadowRenderTargets.isLinearFiltered(0) ? SHADOW_SAMPLER_LINEAR : SHADOW_SAMPLER_NEAREST : null), "shadowtex0", "shadow");
usesShadows |= samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTextureNoTranslucents()::getTextureId, separateHardwareSamplers ? null : (shadowRenderTargets.isHardwareFiltered(1) ? shadowRenderTargets.isLinearFiltered(1) ? SHADOW_SAMPLER_LINEAR : SHADOW_SAMPLER_NEAREST : null), "shadowtex1");
usesShadows = samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTexture()::getTextureId, separateHardwareSamplers ? null : shadowRenderTargets.getSamplerFor(0), "shadowtex0", "shadow");
usesShadows |= samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTextureNoTranslucents()::getTextureId, separateHardwareSamplers ? null : shadowRenderTargets.getSamplerFor(1), "shadowtex1");
}

if (flipped == null) {
Expand All @@ -163,11 +163,11 @@ public static boolean addShadowSamplers(SamplerHolder samplers, ShadowRenderTarg
}

if (shadowRenderTargets.isHardwareFiltered(0) && separateHardwareSamplers) {
samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTexture()::getTextureId, shadowRenderTargets.isLinearFiltered(0) ? SHADOW_SAMPLER_LINEAR : SHADOW_SAMPLER_NEAREST, "shadowtex0HW");
samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTexture()::getTextureId, shadowRenderTargets.getSamplerFor(0), "shadowtex0HW");
}

if (shadowRenderTargets.isHardwareFiltered(1) && separateHardwareSamplers) {
samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTextureNoTranslucents()::getTextureId, shadowRenderTargets.isLinearFiltered(1) ? SHADOW_SAMPLER_LINEAR : SHADOW_SAMPLER_NEAREST, "shadowtex1HW");
samplers.addDynamicSampler(TextureType.TEXTURE_2D, shadowRenderTargets.getDepthTextureNoTranslucents()::getTextureId, shadowRenderTargets.getSamplerFor(1), "shadowtex1HW");
}

return usesShadows;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import net.irisshaders.iris.features.FeatureFlags;
import net.irisshaders.iris.gl.IrisRenderSystem;
import net.irisshaders.iris.gl.framebuffer.GlFramebuffer;
import net.irisshaders.iris.gl.sampler.GlSampler;
import net.irisshaders.iris.gl.texture.DepthBufferFormat;
import net.irisshaders.iris.gl.texture.DepthCopyStrategy;
import net.irisshaders.iris.gl.texture.InternalTextureFormat;
Expand All @@ -30,6 +31,7 @@ public class ShadowRenderTargets {
private final List<GlFramebuffer> ownedFramebuffers;
private final int resolution;
private final boolean[] hardwareFiltered;
private final boolean[] mipped;
private final boolean[] linearFiltered;
private final InternalTextureFormat[] formats;
private final IntList buffersToBeCleared;
Expand All @@ -44,6 +46,7 @@ public ShadowRenderTargets(WorldRenderingPipeline pipeline, int resolution, Pack
formats = new InternalTextureFormat[size];
flipped = new boolean[size];
hardwareFiltered = new boolean[size];
mipped = new boolean[size];
linearFiltered = new boolean[size];
buffersToBeCleared = new IntArrayList();

Expand All @@ -55,6 +58,7 @@ public ShadowRenderTargets(WorldRenderingPipeline pipeline, int resolution, Pack

for (int i = 0; i < shadowDirectives.getDepthSamplingSettings().size(); i++) {
this.hardwareFiltered[i] = shadowDirectives.getDepthSamplingSettings().get(i).getHardwareFiltering();
this.mipped[i] = shadowDirectives.getDepthSamplingSettings().get(i).getMipmap();
this.linearFiltered[i] = !shadowDirectives.getDepthSamplingSettings().get(i).getNearest();
}

Expand Down Expand Up @@ -317,10 +321,6 @@ public boolean isHardwareFiltered(int i) {
return hardwareFiltered[i];
}

public boolean isLinearFiltered(int i) {
return linearFiltered[i];
}

public int getNumColorTextures() {
return targets.length;
}
Expand All @@ -344,4 +344,35 @@ public IntList getBuffersToBeCleared() {
return buffersToBeCleared;
}

public GlSampler getSamplerFor(int i) {
if (hardwareFiltered[i]) {
if (linearFiltered[i]) {
if (mipped[i]) {
return GlSampler.MIPPED_LINEAR_HW;
} else {
return GlSampler.LINEAR_HW;
}
} else {
if (mipped[i]) {
return GlSampler.MIPPED_NEAREST_HW;
} else {
return GlSampler.NEAREST_HW;
}
}
} else {
if (linearFiltered[i]) {
if (mipped[i]) {
return GlSampler.MIPPED_LINEAR;
} else {
return GlSampler.LINEAR;
}
} else {
if (mipped[i]) {
return GlSampler.MIPPED_NEAREST;
} else {
return GlSampler.NEAREST;
}
}
}
}
}
1 change: 1 addition & 0 deletions common/src/main/resources/mixins.iris.compat.sodium.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"plugin": "net.irisshaders.iris.mixin.IrisMixinPlugin",
"compatibilityLevel": "JAVA_8",
"client": [
"CloudRendererAccessor",
"MixinBlockRenderer",
"MixinChunkBuildBuffers",
"MixinChunkMeshBufferBuilder",
Expand Down
Loading

0 comments on commit a8daee1

Please sign in to comment.