Merge branch 'master-MC1.10' into master-MC1.11

# Conflicts:
#	src/main/scala/li/cil/oc/util/InventoryUtils.scala
This commit is contained in:
payonel 2019-11-09 23:08:09 -08:00
commit b3f33c92e8
3 changed files with 19 additions and 9 deletions

View File

@ -183,10 +183,11 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc
private def collectDroppedItems(itemsBefore: Iterable[EntityItem]) { private def collectDroppedItems(itemsBefore: Iterable[EntityItem]) {
val itemsAfter = adjacentItems val itemsAfter = adjacentItems
val itemsDropped = itemsAfter -- itemsBefore val itemsDropped = itemsAfter -- itemsBefore
if (itemsDropped.nonEmpty) {
for (drop <- itemsDropped) { for (drop <- itemsDropped) {
drop.setNoPickupDelay() drop.setNoPickupDelay()
drop.onCollideWithPlayer(this) drop.onCollideWithPlayer(this)
drop.setDead() }
} }
} }

View File

@ -293,11 +293,20 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits
entity.captureDrops = true entity.captureDrops = true
} }
protected def endConsumeDrops(player: Player, entity: Entity) { protected def endConsumeDrops(player: Player, entity: Entity) {
entity.captureDrops = false entity.captureDrops = false
// this inventory size check is a HACK to preserve old behavior that a agent can suck items out
// of the capturedDrops. Ideally, we'd only pick up items off the ground. We could clear the
// capturedDrops when Player.attackTargetEntityWithCurrentItem() is called
// But this felt slightly less hacky, slightly
if (player.inventory.getSizeInventory > 0) {
for (drop <- entity.capturedDrops) { for (drop <- entity.capturedDrops) {
if (!drop.isDead) {
val stack = drop.getEntityItem val stack = drop.getEntityItem
InventoryUtils.addToPlayerInventory(stack, player) InventoryUtils.addToPlayerInventory(stack, player, spawnInWorld = false)
}
}
} }
entity.capturedDrops.clear() entity.capturedDrops.clear()
} }

View File

@ -365,7 +365,7 @@ object InventoryUtils {
/** /**
* Try inserting an item stack into a player inventory. If that fails, drop it into the world. * Try inserting an item stack into a player inventory. If that fails, drop it into the world.
*/ */
def addToPlayerInventory(stack: ItemStack, player: EntityPlayer): Unit = { def addToPlayerInventory(stack: ItemStack, player: EntityPlayer, spawnInWorld: Boolean = true): Unit = {
if (!stack.isEmpty) { if (!stack.isEmpty) {
if (player.inventory.addItemStackToInventory(stack)) { if (player.inventory.addItemStackToInventory(stack)) {
player.inventory.markDirty() player.inventory.markDirty()
@ -373,7 +373,7 @@ object InventoryUtils {
player.openContainer.detectAndSendChanges() player.openContainer.detectAndSendChanges()
} }
} }
if (stack.getCount > 0) { if (stack.getCount > 0 && spawnInWorld) {
player.dropItem(stack, false, false) player.dropItem(stack, false, false)
} }
} }