You mean, starting in the center?
Your problem is here:
AxisAlignedBB grid = (new AxisAlignedBB(pos.getX(), pos.getY(), pos.getZ(), (pos.getX() + 3),
(pos.getY() + 3), (pos.getZ() + 3)));
You need to subtract 1 from the first three values and only add 1 to the last three. so the range is -1, 0, 1.
Definitely not an expert but hope i can help. For clarity there are 4 things that are needed
IParticleData, ParticleType<>, Particle & IParticleFactory
These are how they relate:
When you extend ParticleType<>, it must have a class that implements IParticleData.
You need a factory that implements IParticleFactory (I nested it in the Particle class)
That factory will be registered during the ParticleFactoryRegisterEvent
it's explained in the javadocs but during that event you register the factory in Minecraft.getInstance().particles.registerFactory
The IParticleFactory will take a ParticleType<IParticleData> and give back a Particle
The Particle class needs to be client only, you can use @ OnlyIn or use a dist value in the mod bus subscriber for the particle factory.
You can aso take a look at BasicParticleType, it skips the need to have a separate class implementing IParticleData.
Do we really need to register each block in the clientsetupevent that we want to be a transparent block? that seems horribly redundant from just adding a simple method to a base class like bush block or something!
*edit* but after looking at rendertypelookup, it is indeed how vanilla does it! well I guess that's the new rendering engine for you