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

# Conflicts:
#	src/main/scala/li/cil/oc/server/component/Agent.scala
This commit is contained in:
payonel 2019-11-09 23:15:39 -08:00
commit 552d41060b
3 changed files with 19 additions and 9 deletions

View File

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

View File

@ -309,11 +309,20 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits
entity.captureDrops = true
}
protected def endConsumeDrops(player: Player, entity: Entity) {
entity.captureDrops = false
for (drop <- entity.capturedDrops) {
val stack = drop.getItem
InventoryUtils.addToPlayerInventory(stack, player)
// 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) {
if (!drop.isDead) {
val stack = drop.getItem
InventoryUtils.addToPlayerInventory(stack, player, spawnInWorld = false)
}
}
}
entity.capturedDrops.clear()
}

View File

@ -352,7 +352,7 @@ object InventoryUtils {
/**
* 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 (player.inventory.addItemStackToInventory(stack)) {
player.inventory.markDirty()
@ -360,7 +360,7 @@ object InventoryUtils {
player.openContainer.detectAndSendChanges()
}
}
if (stack.getCount > 0) {
if (stack.getCount > 0 && spawnInWorld) {
player.dropItem(stack, false, false)
}
}