Affects Version/s: Minecraft 18w50a
Fix Version/s: Minecraft 19w02a
The entity ID of the small fireball is broken. This first happened in 18w50a, as part of how
MC-138660 was fixed.
First, try a regular fireball:
/summon will produce "Summoned new Fireball" and the first /say will produce the fireball, and the second /say will produce nothing. This makes sense.
Remove the fireball by typing /kill and then shift-clicking the output of /summon to get the UUID.
Next, try a small fireball:
/summon will still produce "Summoned new Fireball", instead of "Summoned new Small Fireball", and both /say commands produce no results, although /say @e[distance=..5] will include the fireball. This is very strange behavior.
Remove the fireball by typing /kill and then shift-clicking the output of /summon to get the UUID. Note that like with /say, type selectors will not remove the fireball; it must be removed using its UUID.
Both the small fireball and the regular fireball have the entity type set to that of the regular fireball in the constructor for their parent class.
fireball is aro, and has an entity type ID of agz.J. small_fireball is art, and has an entity type ID of agz.ap. Both of them extend arl, which in turn extends arg (which is also used by dragon fireball and wither skull). However, arl's constructor always uses agz.J (fireball); it should instead get the entity type from the subclasses (especially since it's an abstract class).
Note that regular fireballs don't come from an item, only small ones (which are used for fire charges in addition to blaze projectiles). So, it isn't strictly necessary to keep the input item, since there is no input item. However, it does allow for some cool things such as this, so it's probably worth preserving: