Jump to content

Recommended Posts

Posted

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.

Posted

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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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