Fixed CraftLivingEntity.damage when the entity is an EntityComplex.

Fixes BUKKIT-589: if you call damage on an instance of EnderDragon, no damage
is done.

Reason for bug: damage calls Entity.damageEntity.  But EntityComplex
overrides damageEntity to do nothing.

Fix: CraftComplexLiving should call EntityComplex.e instead of
Entity.damageEntity.  e is the method that actually does damage to an
instance of EntityComplex.
This commit is contained in:
Sam Wilson 2012-01-23 22:04:18 -08:00 committed by EvilSeph
parent 872dad5540
commit e92bdab57a
2 changed files with 46 additions and 1 deletions

View File

@ -0,0 +1,26 @@
package net.minecraft.server;
public class EntityComplex extends EntityLiving {
protected int t = 100;
public EntityComplex(World world) {
super(world);
}
public int getMaxHealth() {
return this.t;
}
public boolean a(EntityComplexPart entitycomplexpart, DamageSource damagesource, int i) {
return this.damageEntity(damagesource, i);
}
public boolean damageEntity(DamageSource damagesource, int i) {
return false;
}
public boolean e(DamageSource damagesource, int i) { // CraftBukkit - protected -> public
return super.damageEntity(damagesource, i);
}
}

View File

@ -1,9 +1,11 @@
package org.bukkit.craftbukkit.entity; package org.bukkit.craftbukkit.entity;
import net.minecraft.server.DamageSource;
import net.minecraft.server.EntityComplex; import net.minecraft.server.EntityComplex;
import net.minecraft.server.EntityLiving;
import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.ComplexLivingEntity; import org.bukkit.entity.ComplexLivingEntity;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.LivingEntity;
public abstract class CraftComplexLivingEntity extends CraftLivingEntity implements ComplexLivingEntity { public abstract class CraftComplexLivingEntity extends CraftLivingEntity implements ComplexLivingEntity {
public CraftComplexLivingEntity(CraftServer server, EntityComplex entity) { public CraftComplexLivingEntity(CraftServer server, EntityComplex entity) {
@ -19,4 +21,21 @@ public abstract class CraftComplexLivingEntity extends CraftLivingEntity impleme
public String toString() { public String toString() {
return "CraftComplexLivingEntity"; return "CraftComplexLivingEntity";
} }
@Override
public void damage(int amount, org.bukkit.entity.Entity source) {
DamageSource reason = DamageSource.GENERIC;
if (source instanceof HumanEntity) {
reason = DamageSource.playerAttack(((CraftHumanEntity) source).getHandle());
} else if (source instanceof LivingEntity) {
reason = DamageSource.mobAttack(((CraftLivingEntity) source).getHandle());
}
if (entity instanceof EntityComplex) {
((EntityComplex) entity).e(reason, amount);
} else {
entity.damageEntity(reason, amount);
}
}
} }