I am making a custom fireball projectile entity. Everything seems to be working except I don't see the projectile in flight - it is not being rendered. It seems to be following the correct flight path and the explosion occurs at the correct time and place, but I don't see the projectile.
@EventBusSubscriber(modid = GearProgression.MOD_ID, bus = EventBusSubscriber.Bus.MOD)
public class ClientModEventSubscriber {
// Directly reference a log4j logger.
private static final Logger LOGGER = LogManager.getLogger();
@SubscribeEvent
public static void onFMLClientSetupEvent(final FMLClientSetupEvent event) {
RenderingRegistry.registerEntityRenderingHandler(RubyFireballEntity.class,
new IRenderFactory<RubyFireballEntity>()
{
@Override
public EntityRenderer<? super RubyFireballEntity> createRenderFor(EntityRendererManager manager)
{
return new SpriteRenderer<RubyFireballEntity>(manager, Minecraft.getInstance().getItemRenderer());
}
});
LOGGER.debug("Registered Renderers");
}
}
public class GearEntityTypes {
public static final DeferredRegister<EntityType<?>> ENTITIES = new DeferredRegister<>(ForgeRegistries.ENTITIES, GearProgression.MOD_ID);
public static final RegistryObject<EntityType<RubyFireballEntity>> RUBY_FIREBALL = ENTITIES.register("ruby_fireball", () -> EntityType.Builder.create(RubyFireballEntity::new, EntityClassification.MISC).size(0.6F, 0.6F).build("ruby_fireball"));
}
public class RubyFireballEntity extends AbstractFireballEntity {
public RubyFireballEntity(EntityType<? extends RubyFireballEntity> type, World worldIn) {
super(type, worldIn);
}
public void shoot(LivingEntity shooter, double accelX, double accelY, double accelZ) {
this.shootingEntity = shooter;
this.setLocationAndAngles(shooter.posX, shooter.posY, shooter.posZ, shooter.rotationYaw, shooter.rotationPitch);
this.setPosition(this.posX, this.posY, this.posZ);
this.setMotion(Vec3d.ZERO);
double d0 = (double)MathHelper.sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ);
this.accelerationX = accelX / d0 * 0.1D;
this.accelerationY = accelY / d0 * 0.1D;
this.accelerationZ = accelZ / d0 * 0.1D;
}
protected void onImpact(RayTraceResult result) {
if (!this.world.isRemote) {
if (result.getType() == RayTraceResult.Type.ENTITY) {
Entity entity = ((EntityRayTraceResult)result).getEntity();
if (!entity.isImmuneToFire()) {
int i = entity.func_223314_ad();
entity.setFire(5);
boolean flag = entity.attackEntityFrom(DamageSource.causeFireballDamage(this, this.shootingEntity), 6.0F);
if (flag) {
this.applyEnchantments(this.shootingEntity, entity);
} else {
entity.func_223308_g(i);
}
}
}
this.world.createExplosion((Entity)null, this.posX, this.posY, this.posZ, 1.0F, false, Explosion.Mode.NONE);
this.remove();
}
}
public boolean canBeCollidedWith() {
return false;
}
public boolean attackEntityFrom(DamageSource source, float amount) {
return false;
}
}