--- a/net/minecraft/world/entity/decoration/EntityItemFrame.java
+++ b/net/minecraft/world/entity/decoration/EntityItemFrame.java
@@ -91,6 +91,12 @@
 
     @Override
     protected AxisAlignedBB calculateBoundingBox(BlockPosition blockposition, EnumDirection enumdirection) {
+        // CraftBukkit start - break out BB calc into own method
+        return calculateBoundingBoxStatic(blockposition, enumdirection);
+    }
+
+    public static AxisAlignedBB calculateBoundingBoxStatic(BlockPosition blockposition, EnumDirection enumdirection) {
+        // CraftBukkit end
         float f = 0.46875F;
         Vec3D vec3d = Vec3D.atCenterOf(blockposition).relative(enumdirection, -0.46875D);
         EnumDirection.EnumAxis enumdirection_enumaxis = enumdirection.getAxis();
@@ -155,6 +161,11 @@
             if (this.isInvulnerableToBase(damagesource)) {
                 return false;
             } else if (this.shouldDamageDropItem(damagesource)) {
+                // CraftBukkit start - fire EntityDamageEvent
+                if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f, false) || this.isRemoved()) {
+                    return true;
+                }
+                // CraftBukkit end
                 this.dropItem(worldserver, damagesource.getEntity(), false);
                 this.gameEvent(GameEvent.BLOCK_CHANGE, damagesource.getEntity());
                 this.playSound(this.getRemoveItemSound(), 1.0F, 1.0F);
@@ -267,13 +278,19 @@
     }
 
     public void setItem(ItemStack itemstack, boolean flag) {
+        // CraftBukkit start
+        this.setItem(itemstack, flag, true);
+    }
+
+    public void setItem(ItemStack itemstack, boolean flag, boolean playSound) {
+        // CraftBukkit end
         if (!itemstack.isEmpty()) {
             itemstack = itemstack.copyWithCount(1);
         }
 
         this.onItemChanged(itemstack);
         this.getEntityData().set(EntityItemFrame.DATA_ITEM, itemstack);
-        if (!itemstack.isEmpty()) {
+        if (!itemstack.isEmpty() && playSound) { // CraftBukkit
             this.playSound(this.getAddItemSound(), 1.0F, 1.0F);
         }
 
