Jump to content

1.18.1 Mixin ClassCastException on accessor


matezz

Recommended Posts

Hi, I'm trying to get the particle providers of my newly registered particles. Because the method in ParticleEngine is private, I used mixin accessor to get the field of `net.minecraft.client.particle.ParticleEngine#providers`:

@Mixin(ParticleEngine.class)
public interface ParticleEngineMixin {
    @Accessor
    Map<ResourceLocation, ParticleProvider<?>> getProviders();
}

and to register a new particle and get the provider I use:

Minecraft.getInstance().particleEngine.register(particleType, PARTICLE_FACTORIES.get(registryName));
if (((ParticleEngineMixin) Minecraft.getInstance().particleEngine).getProviders().get(registryName) instanceof WNParticleProvider<?> provider) {
    PARTICLE_PROVIDERS.put(registryName, provider);
}

And now, when I launch it in the IDE, everything works fine, particles are registered and I have providers. But when I try to launch the mod in Minecraft after build, it throws me an exception:

net.minecraftforge.fml.ModLoadingException: xxx Mod (xxx) encountered an error during the common_setup event phase
§7java.lang.ClassCastException: class net.minecraft.client.particle.ParticleEngine cannot be cast to class net.matez.xxx.mixin.ParticleEngineMixin (net.minecraft.client.particle.ParticleEngine is in module minecraft@1.18.1 of loader 'TRANSFORMER' @6c5ddccd; net.matez.xxx.mixin.ParticleEngineMixin is in module xxx@3.1_indev_4 of loader 'TRANSFORMER' @6c5ddccd)
	at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:124) ~[javafmllanguage-1.18.1-39.0.66.jar%2356!/:?] {}
	at net.minecraftforge.fml.ModLoader.lambda$postEvent$31(ModLoader.java:298) ~[fmlcore-1.18.1-39.0.66.jar%2355!/:?] {}
	at java.util.HashMap.forEach(HashMap.java:1421) ~[?:?] {}
	at net.minecraftforge.fml.ModList.forEachModContainer(ModList.java:232) ~[fmlcore-1.18.1-39.0.66.jar%2355!/:?] {}
	at net.minecraftforge.fml.ModLoader.postEvent(ModLoader.java:298) ~[fmlcore-1.18.1-39.0.66.jar%2355!/:?] {}
	at net.minecraft.client.Minecraft.<init>(Minecraft.java:507) ~[client-1.18.1-20211210.034407-srg.jar%2354!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
	at net.minecraft.client.main.Main.main(Main.java:169) ~[client-1.18.1-20211210.034407-srg.jar%2354!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {}
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}
	at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {}
	at net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$launchService$0(CommonClientLaunchHandler.java:45) ~[fmlloader-1.18.1-39.0.66.jar%2323!/:?] {}
	at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-9.1.0.jar%235!/:?] {}
	at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-9.1.0.jar%235!/:?] {}
	at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-9.1.0.jar%235!/:?] {}
	at cpw.mods.modlauncher.Launcher.run(Launcher.java:106) [modlauncher-9.1.0.jar%235!/:?] {}
	at cpw.mods.modlauncher.Launcher.main(Launcher.java:77) [modlauncher-9.1.0.jar%235!/:?] {}
	at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-9.1.0.jar%235!/:?] {}
	at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-9.1.0.jar%235!/:?] {}
	at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:149) [bootstraplauncher-1.0.0.jar:?] {}
Caused by: java.lang.ClassCastException: class net.minecraft.client.particle.ParticleEngine cannot be cast to class net.matez.xxx.mixin.ParticleEngineMixin (net.minecraft.client.particle.ParticleEngine is in module minecraft@1.18.1 of loader 'TRANSFORMER' @6c5ddccd; net.matez.xxx.mixin.ParticleEngineMixin is in module xxx@3.1_indev_4 of loader 'TRANSFORMER' @6c5ddccd)
	at net.matez.xxx.common.registry.particles.WNParticles.lambda$registerFactories$0(WNParticles.java:56) ~[xxx-3.1_indev_4.jar%2353!/:3.1_indev_4] {re:classloading}
	at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[?:?] {}
	at net.matez.xxx.common.registry.particles.WNParticles.registerFactories(WNParticles.java:53) ~[xxx-3.1_indev_4.jar%2353!/:3.1_indev_4] {re:classloading}
	at net.matez.xxx.client.registry.setup.WNClientRegistry.registerParticleFactories(WNClientRegistry.java:29) ~[xxx-3.1_indev_4.jar%2353!/:3.1_indev_4] {re:classloading,pl:runtimedistcleaner:A}
	at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:247) ~[eventbus-5.0.3.jar%232!/:?] {}
	at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:239) ~[eventbus-5.0.3.jar%232!/:?] {}
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-5.0.3.jar%232!/:?] {}
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-5.0.3.jar%232!/:?] {}
	at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:120) ~[javafmllanguage-1.18.1-39.0.66.jar%2356!/:?] {}
	... 19 more

which is actually weird, as all the tutorials say that I can cast my target class with a mixin to access @Accessor. Maybe I'm doing something wrong?
 

Mixin config: refmap enabled, mixin added to "client" in config, mixin version `org.spongepowered:mixingradle:0.7-SNAPSHOT`, forge `1.18.1-39.0.63`, annotationProcessor `org.spongepowered:mixin:0.8.5:processor`
I couldn't use AccessTransformers, they didn't work.

Link to comment
Share on other sites

Minecraft supplies provider.create(<spriteset>) on registry, I can't create my own spriteset.

I'm just asking why I can't cast this mixin to the target class - only after build. It could be a different class, not the ParticleEngine one. If one doesn't work, the rest wouldn't work too.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.