Snow! Real Magic! ⛄ (NeoForge)

Snow! Real Magic! ⛄ (NeoForge)

40M Downloads

Latest 1.16.4 Version Crashes The Game Upon Loading

FURRTALIAN opened this issue · 11 comments

commented

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

https://mclo.gs/aVEg1O0

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.

commented

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!

crash-2022-09-24_20.03.24-client.txt

commented

Can you use Magnesium instead of Rubidium?

commented

unfortunately i can only support one of them

commented

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.

commented

fine. will do in the next week

commented

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

commented

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

commented

@Snownee 爱发电v过去了,看到了吗qwq

commented

@Kasualix I haven't agreed yet, please contact the afdian.net official to refund

commented

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.

commented

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.