Fix removal of items from Item Frames. Fixes BUKKIT-5736

This commit is contained in:
feildmaster 2014-08-02 16:03:50 -05:00
parent 594d7cb8c9
commit 971329c42b
2 changed files with 7 additions and 3 deletions

View file

@ -24,7 +24,7 @@ public class EntityItemFrame extends EntityHanging {
} else if (this.getItem() != null) { } else if (this.getItem() != null) {
if (!this.world.isStatic) { if (!this.world.isStatic) {
// CraftBukkit start - fire EntityDamageEvent // CraftBukkit start - fire EntityDamageEvent
if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f) || this.dead) { if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f, false) || this.dead) {
return true; return true;
} }
// CraftBukkit end // CraftBukkit end

View file

@ -564,8 +564,12 @@ public class CraftEventFactory {
return handleEntityDamageEvent(damagee, source, modifiers, modifierFunctions); return handleEntityDamageEvent(damagee, source, modifiers, modifierFunctions);
} }
// Non-Living Entities such as EntityEnderCrystal, EntityItemFrame, and EntityFireball need to call this // Non-Living Entities such as EntityEnderCrystal and EntityFireball need to call this
public static boolean handleNonLivingEntityDamageEvent(Entity entity, DamageSource source, double damage) { public static boolean handleNonLivingEntityDamageEvent(Entity entity, DamageSource source, double damage) {
return handleNonLivingEntityDamageEvent(entity, source, damage, true);
}
public static boolean handleNonLivingEntityDamageEvent(Entity entity, DamageSource source, double damage, boolean cancelOnZeroDamage) {
if (entity instanceof EntityEnderCrystal && !(source instanceof EntityDamageSource)) { if (entity instanceof EntityEnderCrystal && !(source instanceof EntityDamageSource)) {
return false; return false;
} }
@ -580,7 +584,7 @@ public class CraftEventFactory {
if (event == null) { if (event == null) {
return false; return false;
} }
return event.isCancelled() || event.getDamage() == 0; return event.isCancelled() || (cancelOnZeroDamage && event.getDamage() == 0);
} }
public static PlayerLevelChangeEvent callPlayerLevelChangeEvent(Player player, int oldLevel, int newLevel) { public static PlayerLevelChangeEvent callPlayerLevelChangeEvent(Player player, int oldLevel, int newLevel) {