Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Registering to ParticleManager


Zethariel
 Share

Recommended Posts

Hello,

 

Quick question - is there a good way to register a particle to use the vanilla ParticleManager system? What I mean is, is there a way to safely determine an ID that is "free" (not taken by vanilla particle and not taken by any other custom mod particle) ? The Map with the particles is private and there is no way to access it...

I do pony stuff :3

Link to comment
Share on other sites

Creating custom particles like vanilla does is not possible as far as I know. modders have to use the ParticleManager.addEffect(Particle) and spawn the particles with this.

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Link to comment
Share on other sites

8 minutes ago, MCenderdragon said:

Creating custom particles like vanilla does is not possible as far as I know. modders have to use the ParticleManager.addEffect(Particle) and spawn the particles with this.

Actually, you can register them and pass the ID of the registered particle. Also using addEffect is bad practice, as it bypasses the RenderGlobal spawnParticle method (which is what I'll be using) that checks the user's particle settings. The only problem I'm seeing is that there are no checks made if the ID I'm registering is already taken or not.

 

The GlobalRender has a spawnParticle method that takes in an ID, calls that ID's factory if it is allowed to spawn (according to player particle settings) and renders it. I want to use that framework instead of re-inventing the wheel.

Edited by Zethariel

I do pony stuff :3

Link to comment
Share on other sites

Forge has an EnumHelper, if you are using that to add a new Particle Type to the EnumParticleTypes there should be no conflicts if you use .ordinal after the creation of the Enum.

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Link to comment
Share on other sites

1 minute ago, MCenderdragon said:

Forge has an EnumHelper, if you are using that to add a new Particle Type to the EnumParticleTypes there should be no conflicts if you use .ordinal after the creation of the Enum.

The point is missed again. What if some other mod registers a particle in the ParticleManager that is not part of the Enum? How will I reliably know it has been registered and what ID it has? This is my problem. Unless I can solve it, I'll have to copy-paste the relevant parts of RenderGlobal into a separate class, which isn't ideal...

I do pony stuff :3

Link to comment
Share on other sites

Just now, V0idWa1k3r said:

Well, technically there is absolutely nothing stopping you from using reflections on that map field to check if the given key has any value associated with it if you are so insistent on using the ParticleManager...

I just see it as the most optimal way out, without re-creating already implemented frameworks. Is there a more common way to do it correctly?

 

Also, for Reflection to work, I'd need the obfuscated names of the fields. Any idea how to get them?

I do pony stuff :3

Link to comment
Share on other sites

Well you have to rely on other modders, if you want you can use reflection to search in the map for every single entry and use the first free one but well, this is a but over the goal (IMO). Also if another mod is called after your mod and uses the enum, it is most likely he will get the id you use and simply override your particles wihtout even knowing it.

 

Edit: the fields are in the mcp mappings

Edited by MCenderdragon

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Link to comment
Share on other sites

The way I see it implemented usually is either using the ParticleManager.addParticle while checking for user settings for particles(although the last step is mostly ignored) or with custom from-the-ground-up built particle systems.

Obfuscated names should be in your %username%/.gradle/caches/minecraft/de/oceanlabs/mcp/whateveryouareusing... or MCPBot

Link to comment
Share on other sites

2 minutes ago, MCenderdragon said:

Well you have to rely on other modders, if you want you can use reflection to search in the map for every single entry and use the first free one but well, this is a but over the goal (IMO). Also if another mod is called after your mod and uses the enum, it is most likely he will get the id you use and simply override your particles wihtout even knowing it.

 

Edit: the fields are in the mcp mappings

 

 

1 minute ago, V0idWa1k3r said:

The way I see it implemented usually is either using the ParticleManager.addParticle while checking for user settings for particles(although the last step is mostly ignored) or with custom from-the-ground-up built particle systems.

Obfuscated names should be in your %username%/.gradle/caches/minecraft/de/oceanlabs/mcp/whateveryouareusing... or MCPBot

Okay, thanks. Seems there is no way around it - shame, since it means more classes to maintain. Thanks for the answers guys!

I do pony stuff :3

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
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.

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.