The bug
In 1.10, Mojang made it such that, if a Skeleton holds a tipped arrow in its offhand, it will shoot that tipped arrow when attacking. This no longer works in 16w32a and 16w32b.
How to reproduce
Use the command:
/summon minecraft:wither_skeleton ~ ~ ~ {HandItems:[{id:"minecraft:bow",Count:1b},{id:"minecraft:tipped_arrow",Count:1b,tag:{CustomPotionEffects:[{Id:18,Duration:100}]}}]}Get shot by it.
→ ❌ Notice that you don't get Weakness.
Code Analysis / Fix
Code analysis and fix by @unknown can be found in this comment.
Linked issues
relates to 2
Comments 12
This bug still exists in 17w16a for wither skeletons and strays, and happens for illusioners as well.
Appears to be fixed in 1.12.1, I summoned a skeleton with the above command and its arrows gave me the Weakness effect.
Nevermind, I mistakenly used a regular skeleton (instead of a stray/wither) to test this. Confirmed for 1.12.1
The following is based on a decompiled version of MC 1.12 using mcp940.
Please link this in the description of the report.
In the method net.minecraft.entity.monster.EntityWitherSkeleton.func_190726_a()
are no checks for effects on arrows.
protected EntityArrow func_190726_a(float p_190726_1_)
{
EntityArrow entityarrow = super.func_190726_a(p_190726_1_);
entityarrow.setFire(100);
return entityarrow;
}This can be easily fixed by replacing the code with, the code from net.minecraft.entity.monster.EntitySkeleton.func_190726_a()
and ofcourse, adding the setFire like this:
protected EntityArrow func_190726_a(float p_190726_1_){
ItemStack itemstack = this.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
if (itemstack.getItem() == Items.SPECTRAL_ARROW){
EntitySpectralArrow entityspectralarrow = new EntitySpectralArrow(this.world, this);
entityspectralarrow.func_190547_a(this, p_190726_1_);
entityspectralarrow.setFire(100);
return entityspectralarrow;
}
else
{
EntityArrow entityarrow = super.func_190726_a(p_190726_1_);
if (itemstack.getItem() == Items.TIPPED_ARROW && entityarrow instanceof EntityTippedArrow) {
((EntityTippedArrow)entityarrow).setPotionEffect(itemstack);
}
entityarrow.setFire(100);
return entityarrow;
}
}Hope this helps 🙂
A bug like this still exists in 1.11.2 but only for strays and wither skeletons - giving a stray tipped arrows in their offhand doesn't cause them to change to shooting that tipped arrow, they remain shooting their normal tipped arrow that inflicts slowness for 30 seconds. Giving a wither skeleton tipped arrows makes them shoot flame arrows that do nothing else.
Normal skeletons still work properly.