Latest 1.16.4 Version Crashes The Game Upon Loading
FURRTALIAN opened this issue · 11 comments
Mod loader
Forge
Minecraft version
1.16.5
Mod version
SnowRealMagic-1.16.4-2.9.0.jar
Modloader version
Forge: 36.2.39
Modpack info
N/A
If bug:
- Can you reproduce this issue with relevant mods only?
If bug: The latest.log file
Issue description
Using the CurseForge app, I added the mod to my personal modpack. I loaded the launcher and everything went fine until I went to create a world. After I had set the settings I desired, pressed 'Create World', and waited for it to load, my game crashed after it reached 100%, saying "Joining World" before "Saving" then it crashed. The reason I know it's this specific mod version is because I used a different version of this mod and my world did not crash.
Thank you for the mod, I am excited to try it out! but I had a similar issue.
From my crash log this line stood out: org.spongepowered.asm.mixin.transformer.throwables.InvalidMixinException: @Shadow method renderQuadList in snowrealmagic.mixins.json:sodium.BlockRendererMixin was not located in the target class me.jellysquid.mods.sodium.client.render.pipeline.BlockRenderer. Using refmap snowrealmagic.refmap.json
Switching to magnesium is an option but that would lead to loss of support for shaders (via oculus mod).
I'm trying to find a way to fix the issue, I don't really do java programming though so am looking for advice regarding the following observations I made.
Found this code in this mod's blockRendererMixin script
abstract void renderQuadList(IBlockDisplayReader world, BlockState state, BlockPos pos, LightPipeline lighter, Vector3d offset, ChunkModelBuffers buffers, List<BakedQuad> quads, ModelQuadFacing facing);
Found this in Magnesium (matches with abstract method):
private void renderQuadList(BlockAndTintGetter world, BlockState state, BlockPos pos, BlockPos origin, LightPipeline lighter, Vec3 offset,
ChunkModelBuilder buffers, List<BakedQuad> quads, ModelQuadFacing facing) {
ModelQuadColorProvider<BlockState> colorizer = null;
ModelVertexSink vertices = buffers.getVertexSink();
vertices.ensureCapacity(quads.size() * 4);
IndexBufferBuilder indices = buffers.getIndexBufferBuilder(facing);
// This is a very hot allocation, iterate over it manually
// noinspection ForLoopReplaceableByForEach
for (int i = 0, quadsSize = quads.size(); i < quadsSize; i++) {
BakedQuad quad = quads.get(i);
QuadLightData light = this.cachedQuadLightData;
lighter.calculate((ModelQuadView) quad, pos, light, quad.getDirection(), quad.isShade());
if (quad.isTinted() && colorizer == null) {
colorizer = this.blockColors.getColorProvider(state);
}
this.renderQuad(world, state, pos, origin, vertices, indices, offset, colorizer, quad, light, buffers);
}
vertices.flush();
}
And in Rubidium, there seems to have been some changes in the params, most notably the param types.
private void renderQuadList(BlockRenderView world, BlockState state, BlockPos pos, BlockPos origin, LightPipeline lighter, Vec3d offset,
ChunkModelBuilder buffers, List<BakedQuad> quads, Direction cullFace) {
ModelQuadFacing facing = cullFace == null ? ModelQuadFacing.UNASSIGNED : ModelQuadFacing.fromDirection(cullFace);
ColorSampler<BlockState> colorizer = null;
ModelVertexSink vertices = buffers.getVertexSink();
vertices.ensureCapacity(quads.size() * 4);
IndexBufferBuilder indices = buffers.getIndexBufferBuilder(facing);
// This is a very hot allocation, iterate over it manually
// noinspection ForLoopReplaceableByForEach
for (int i = 0, quadsSize = quads.size(); i < quadsSize; i++) {
BakedQuad quad = quads.get(i);
QuadLightData light = this.cachedQuadLightData;
lighter.calculate((ModelQuadView) quad, pos, light, cullFace, quad.getFace(), quad.hasShade());
if (quad.hasColor() && colorizer == null) {
colorizer = this.blockColors.getColorProvider(state);
}
this.renderQuad(world, state, pos, origin, vertices, indices, offset, colorizer, quad, light, buffers);
}
vertices.flush();
}
So as a java noob do I have a shot at fixing it if the fix is mostly copy paste the rubidium versions of the relevant BlockRenderer functions? Or is this error just a symptom of deeper differences between rubidium and magnesium. Would love to help if I could, thanks for reading!
Of the two, Rubidium looks like the fork that is the most active/updated from Sodium. Supporting Rubidium would also allow the mod to work with newer versions of Oculus, which would be great for those who want to use shaders without OptiFine.
Sorry, the codes are too old to maintain. Making it run will require many works. If someone is willing to pay me, I can have a try
If someone is willing to pay me, I can have a try
Hi snowee, how much do you need pls?
To make snow real magic compatible with rubidium instead of magnesium in 1.16.5 forge
@Snownee 爱发电v过去了,看到了吗qwq
@Kasualix I haven't agreed yet, please contact the afdian.net official to refund
This is quite unfortunate, as Rubidium is the major fork that is recommended overall.
Magnesium might work in the case of 1.16.5, but it is known for having erratic mod conflicts elsewhere. Also, the developer of the mod appears to have vanished since the past year and a half. There is zero GitHub activity since late 2021.
https://www.curseforge.com/minecraft/mc-mods/snow-real-magic-potato-edition
my fork, if you don't know
This is quite unfortunate, as Rubidium is the major fork that is recommended overall.
Magnesium might work in the case of 1.16.5, but it is known for having erratic mod conflicts elsewhere. Also, the developer of the mod appears to have vanished since the past year and a half. There is zero GitHub activity since late 2021.