The bug
If the gamerule doEntityDrops
is set to false
, it is impossible to empty item frames.
To reproduce
Run
/gamerule doEntityDrops false
Place an item frame
Place an item inside of the frame
Try to punch the item frame in order to take the item out
β β Notice that it plays the "pop" noise, but does not drop the item.
Code analysis
In 1.12.2, items were removed from item frames by the method EntityItemFrame.attackFromEntity(damageSource, amount)
. In 1.13, this is now done in the method EntityItemFrame.dropItemOrSelf(entity, self)
. Since the latter method only runs if doEntityDrops
is true
, the code that removes the item cannot be reached.
Do note this change was likely made while fixing MC-124833.
Still an issue in 18w31a.