The bug
When a witch is attacked by an undead mob, the witch will throw a splash potion of poison/instant damage. Which has the opposite effect since the target is undead, thus healing it.
How to reproduce
Build a setup as seen
.
Switch to survival and go behind the witch.
When the skeleton has shot the witch, switch to creative (
F3
+N
).
→ ❌ The witch starts to heal the skeleton
Code analysis
The following is based on yarn 1.15.2 Pre-release 2 names.
In the method net.minecraft.entity.mob.WitchEntity.attack()
it just doesn't check for if the mob is undead and to use another potion if so. I write a fix for this issue which hopefully will help to resolve this issue.
Fix for MC-94281
@Override
public void attack(LivingEntity target, float float3) {
boolean flag = target instanceof DrownedEntity || target instanceof PhantomEntity || target instanceof WitherSkeletonEntity || target instanceof SkeletonEntity
|| target instanceof SkeletonHorseEntity|| target instanceof HuskEntity|| target instanceof StrayEntity
|| target instanceof ZombieEntity|| target instanceof ZombieHorseEntity || target instanceof ZombiePigmanEntity
|| target instanceof ZombieVillagerEntity;
//TODO: The entity class HostileEntity exists, does this include all of these above?
if (this.isDrinking()) {
return;
}
Vec3d vec3d4 = ...
double double5 = ...
double double7 = ...
double double9 = ...
float float11 = ...
Potion potion12 = flag ? Potions.HEALING : Potions.HARMING;
if (target instanceof RaiderEntity) {
if (...) {
potion12 = ...
}
else {
potion12 = ...
}
this.setTarget(null);
}
else if (...)) {
potion12 = ...
}
else if (target.getHealth() >= 8.0f && flag ? true : !target.hasStatusEffect(StatusEffects.POISON)) {
potion12 = flag ? Potions.HEALING : Potions.POISON;
}
else if (...) {
potion12 = ...
}
ThrownPotionEntity thrownPotionEntity13 = ...
thrownPotionEntity13.setItemStack(...));
ThrownPotionEntity class_1686 = ...
thrownPotionEntity13.setVelocity(...);
this.world.playSound(...);
this.world.spawnEntity(thrownPotionEntity13);
}
Note: As per MC-93680, healing is used for both potion options as regeneration does not have the opposite effect on undead mobs.
Linked issues
is duplicated by 3
Attachments
Comments 23
that is intende beacause the skeleton is undead damge potions heal him and healing potions damage him
he knows that, but he thinks a witch should throw healing potions (harm undead) instead of harming when fighting undead mobs
Interesting bug. But what if you think that the witch is "helping" the monster to be alive? That would then turn this to WAI.
most likely intended