neoforge sodium compat
This commit is contained in:
techno-sam
2026-05-14 19:23:21 +02:00
parent f4d0573332
commit c9f13607fc
11 changed files with 85 additions and 14 deletions
@@ -0,0 +1,27 @@
package io.github.slimeistdev.crystalline_sky.neoforge.mixin.client.compat.sodium;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
import io.github.slimeistdev.crystalline_sky.compat.Mods;
import net.caffeinemc.mods.sodium.client.gl.shader.ShaderLoader;
import net.minecraft.resources.ResourceLocation;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import java.io.InputStream;
@ConditionalMixin(mods = Mods.SODIUM)
@Mixin(ShaderLoader.class)
public class ShaderLoaderMixin {
// thank you neoforge for making mods be in separate modules
@SuppressWarnings("NameDoesntMatchTargetClass")
@WrapOperation(method = "getShaderSource", at = @At(value = "INVOKE", target = "Ljava/lang/Class;getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;"))
private static InputStream getShadersInProperContext(Class<?> instance, String name, Operation<InputStream> original, ResourceLocation name$) {
if (name$.getNamespace().equals(CrystallineSky.ID))
return original.call(CrystallineSky.class, name);
return original.call(instance, name);
}
}
@@ -0,0 +1,28 @@
package io.github.slimeistdev.crystalline_sky.neoforge.mixin.client.compat.sodium;
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
import io.github.slimeistdev.crystalline_sky.compat.Mods;
import io.github.slimeistdev.crystalline_sky.neoforge.skybox_model.SkyboxBakedModel;
import io.github.slimeistdev.crystalline_sky.util.SharedRenderVariables;
import net.caffeinemc.mods.sodium.client.render.frapi.render.AbstractBlockRenderContext;
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import java.util.function.Supplier;
@ConditionalMixin(mods = Mods.SODIUM)
@Mixin(SkyboxBakedModel.class)
public class SkyboxBakedModelMixin implements FabricBakedModel {
@Override
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
SharedRenderVariables.pushShadeFullBright();
((AbstractBlockRenderContext) context).bufferDefaultModel((BakedModel) this, state);
SharedRenderVariables.popShadeFullBright();
}
}
@@ -1,6 +1,5 @@
package io.github.slimeistdev.crystalline_sky.neoforge.skybox_model;
import io.github.slimeistdev.crystalline_sky.util.SharedRenderVariables;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
@@ -84,13 +83,8 @@ public class SkyboxBakedModel<T extends BakedModel> extends BakedModelWrapper<T>
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) {
CacheKey key = new CacheKey(state, side);
return quadCache.computeIfAbsent(key, $ -> {
SharedRenderVariables.pushShadeFullBright();
List<BakedQuad> quads = super.getQuads(state, side, rand);
List<BakedQuad> out = process(quads);
SharedRenderVariables.popShadeFullBright();
return out;
return process(quads);
});
}
@@ -10,7 +10,9 @@
"mixins": [
],
"client": [
"client.RenderTypeMixin"
"client.RenderTypeMixin",
"client.compat.sodium.ShaderLoaderMixin",
"client.compat.sodium.SkyboxBakedModelMixin"
],
"server": [
],