copycats-plus / copycats

All the copycats you've ever wanted, combined into a single mod!
Other
25 stars 8 forks source link

[Bug] Client attempts to classload Indium with Embeddium installed #124

Closed Partonetrain closed 2 months ago

Partonetrain commented 2 months ago

Describe the bug Embeddium natively integrates Sodium with Fabric Rendering API. Copycats+ expects Indium and Sodium and attempts to calll Indium classes even if it's not installed

To Reproduce Steps to reproduce the behavior:

  1. Install Embeddium and Create Copycats+ (on Fabric)
  2. Place copycat stone button (possibly more blocks)
  3. Crash

Expected behavior No crash

Desktop (please complete the following information):

Crashlog:

java.lang.NoClassDefFoundError: link/infra/indium/renderer/mesh/MutableQuadViewImpl
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.defineClassFwd(KnotClassLoader.java:160)
    at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:355)
    at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:218)
    at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:119)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    at com.copycatsplus.copycats.foundation.copycat.model.fabric.IntermediateMutableQuadView.lambda$create$0(IntermediateMutableQuadView.java:25)
    at com.copycatsplus.copycats.compat.Mods.runIfInstalled(Mods.java:84)
    at com.copycatsplus.copycats.foundation.copycat.model.fabric.IntermediateMutableQuadView.create(IntermediateMutableQuadView.java:25)
    at com.copycatsplus.copycats.foundation.copycat.model.fabric.CopycatModelFabric.lambda$emitBlockQuads$3(CopycatModelFabric.java:183)
    at net.fabricmc.fabric.impl.client.indigo.renderer.render.AbstractRenderContext.lambda$new$1(AbstractRenderContext.java:43)
    at net.fabricmc.fabric.impl.client.indigo.renderer.render.AbstractRenderContext.transform(AbstractRenderContext.java:61)
    at net.fabricmc.fabric.impl.client.indigo.renderer.render.AbstractBlockRenderContext.renderQuad(AbstractBlockRenderContext.java:112)
    at net.fabricmc.fabric.impl.client.indigo.renderer.render.AbstractBlockRenderContext$2.emitDirectly(AbstractBlockRenderContext.java:69)
    at net.fabricmc.fabric.impl.client.indigo.renderer.mesh.MutableQuadViewImpl.emit(MutableQuadViewImpl.java:220)
    at net.fabricmc.fabric.impl.client.indigo.renderer.mesh.MutableQuadViewImpl.emit(MutableQuadViewImpl.java:56)
    at net.fabricmc.fabric.impl.renderer.VanillaModelEncoder.emitBlockQuads(VanillaModelEncoder.java:65)
    at net.minecraft.class_1087.emitBlockQuads(class_1087.java:1041)
    at net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel.emitBlockQuads(ForwardingBakedModel.java:51)
    at me.pepperbell.continuity.client.model.EmissiveBakedModel.emitBlockQuads(EmissiveBakedModel.java:64)
    at net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel.emitBlockQuads(ForwardingBakedModel.java:51)
    at me.pepperbell.continuity.client.model.CtmBakedModel.emitBlockQuads(CtmBakedModel.java:46)
    at net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel.emitBlockQuads(ForwardingBakedModel.java:51)
    at me.pepperbell.continuity.client.model.EmissiveBakedModel.emitBlockQuads(EmissiveBakedModel.java:64)
    at com.copycatsplus.copycats.foundation.copycat.model.fabric.CopycatModelFabric.emitBlockQuads(CopycatModelFabric.java:189)
    at net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel.emitBlockQuads(ForwardingBakedModel.java:51)
    at me.pepperbell.continuity.client.model.CtmBakedModel.emitBlockQuads(CtmBakedModel.java:53)
    at net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel.emitBlockQuads(ForwardingBakedModel.java:51)
    at me.pepperbell.continuity.client.model.EmissiveBakedModel.emitBlockQuads(EmissiveBakedModel.java:72)
    at net.fabricmc.fabric.impl.client.indigo.renderer.render.BlockRenderContext.render(BlockRenderContext.java:79)
    at org.embeddedt.embeddium.render.frapi.IndigoBlockRenderContext.renderEmbeddium(IndigoBlockRenderContext.java:156)
    at me.jellysquid.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderer.renderModel(BlockRenderer.java:114)
    at me.jellysquid.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask.execute(ChunkBuilderMeshingTask.java:122)
    at me.jellysquid.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask.execute(ChunkBuilderMeshingTask.java:50)
    at me.jellysquid.mods.sodium.client.render.chunk.compile.executor.ChunkJobTyped.execute(ChunkJobTyped.java:44)
    at me.jellysquid.mods.sodium.client.render.chunk.compile.executor.ChunkBuilder$WorkerRunnable.run(ChunkBuilder.java:221)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: link.infra.indium.renderer.mesh.MutableQuadViewImpl
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:226)
    at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:119)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    ... 39 more
Bennyboy1695 commented 2 months ago

Theres a lot of issues between sodium and create so indium is almost a hard requirement for it to function properly and i believe create actually prompts you to install it

hlysine commented 2 months ago

This is a simple incompatibility where Embeddium registers a stub for Indium without providing Indium classes. We can probably switch back to using FRAPI classes if Embeddium is installed.