@SideOnly(Side.CLIENT)
public void SpawnReplicateParticles(Entity entity, Vector3f p) {
double entityRadius = entity.width;
double entityArea = Math.max(entityRadius * entity.height, 0.3);
double radiusX = entityRadius + random.nextDouble() * 0.2f;
double radiusZ = entityRadius + random.nextDouble() * 0.2f;
double time = Math.min((double) (transportTimer) / (double) (getTransportDelay()), 1);
double gravity = 0.015f;
int age = (int) Math.round(MOMathHelper.easeIn(time, 5, 15, 1));
int count = (int) Math.round(MOMathHelper.easeIn(time, 2, entityArea * 15, 1));
for (int i = 0; i < count; i++) {
float speed = random.nextFloat() * 0.05f + 0.15f;
float height = p.y + 1 + random.nextFloat() * entity.height;
Vector3f origin = new Vector3f(p.x, height, p.z);
Vector3f pos = MOMathHelper.randomSpherePoint(origin.x, origin.y, origin.z, new Vec3d(radiusX, 0, radiusZ), random);
Vector3f dir = Vector3f.cross(Vector3f.sub(origin, pos, null), new Vector3f(0, 1, 0), null);
dir.scale(speed);
ReplicatorParticle replicatorParticle = new ReplicatorParticle(this.world, pos.x, pos.y, pos.z, dir.x, dir.y, dir.z);
replicatorParticle.setCenter(origin.x, origin.y, origin.z);
replicatorParticle.setParticleAge(age);
replicatorParticle.setPointGravityScale(gravity);
Minecraft.getMinecraft().effectRenderer.addEffect(replicatorParticle);
}
}