Shulker Bullet
Registry name
etfuturum:shulker_candy
Audit correction: previously written as
etfuturum.shulkerBullet. The registered name isshulker_candy(the class is stillEntityShulkerBullet). Evidence:core/proxy/CommonProxy.java:261registerEntity(EntityShulkerBullet.class, "shulker_candy", 17, ...)
Basic info
- Health: Not applicable (projectile)
- Armor: None
- Size:
0.3125 × 0.3125(width × height) - Spawn conditions: Spawned by
EntityShulkerwhen attacking a target within range - Drops: None (no death drops)
- Behaviour: Homing projectile fired by shulkers. Travels in the direction the shulker is facing, accelerating toward the target. Applies Levitation on hit.
Homing mechanics
- Initial direction: toward the shulker’s attached face direction
- After initial travel: recalculates direction toward target
targetDeltaadjusts 2.5% per tick (clamped to ±1.0), creating a homing curve- Speed:
0.15units per tick in each axis - Changes direction at step boundaries (every 10–50 ticks randomly)
Movement phases
- Initial (
steps > 0): travels in straight line from shulker face - Homing (
steps == 0, target exists): curves toward target withtargetDeltaadjustment - Dormant (target dead/null): falls with gravity (
motionY -= 0.04)
Collision and hit detection
- Raycasts each tick using
Utils.forwardsRaycast bulletHit()on collision:- If hits block: spawns
largeexplodeparticle, plays hit sound - If hits entity: deals 4.0 indirect mob damage + applies Levitation (10 seconds)
- If hits block: spawns
Levitation effect
Applied via ModPotions.levitation: 10 × 20 = 200 ticks of Levitation I
Destruction
- Dies on any collision (block or entity)
- Dies immediately in Peaceful difficulty
- Attacked by player: spawns 12 crit particles, plays hurt sound, dies
Notes
noClip = true— phases through blocksisBurning() = false— never renders as burning- Brightness: always 1.0 (full bright, no lighting falloff)
getBrightnessForRenderreturns 15728880 (max)canBeCollidedWithreturns true — can be attacked/hit by player- Owner UUID tracked for multiplayer sync; recreated on first tick if null
Configuration gate
- Entity registration:
ConfigEntities.enableShulker, keyenableShulker, default ON (configuration/configs/ConfigEntities.java:61). The bullet is registered in the sameifas the shulker itself, and is unreachable ifenableShulkeris off.