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

# Conflicts:
#	src/main/scala/li/cil/oc/common/tileentity/Charger.scala
This commit is contained in:
payonel 2019-08-23 22:14:35 -07:00
commit 1bacda455c

View File

@ -37,6 +37,7 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
create() create()
val connectors = mutable.Set.empty[Chargeable] val connectors = mutable.Set.empty[Chargeable]
val equipment = mutable.Set.empty[ItemStack]
var chargeSpeed = 0.0 var chargeSpeed = 0.0
@ -78,6 +79,14 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
private def chargeStack(stack: ItemStack, charge: Double): Unit = {
if (stack != null && charge > 0) {
val offered = charge + node.changeBuffer(-charge)
val surplus = ItemCharge.charge(stack, offered)
node.changeBuffer(surplus)
}
}
override def updateEntity() { override def updateEntity() {
super.updateEntity() super.updateEntity()
@ -103,11 +112,16 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
val charge = Settings.get.chargeRateTablet * chargeSpeed * Settings.get.tickFrequency val charge = Settings.get.chargeRateTablet * chargeSpeed * Settings.get.tickFrequency
canCharge ||= charge > 0 && node.globalBuffer >= charge * 0.5 canCharge ||= charge > 0 && node.globalBuffer >= charge * 0.5
if (canCharge) { if (canCharge) {
(0 until getSizeInventory).map(getStackInSlot).foreach(stack => if (stack != null) { (0 until getSizeInventory).map(getStackInSlot).foreach(chargeStack(_, charge))
val offered = charge + node.changeBuffer(-charge) }
val surplus = ItemCharge.charge(stack, offered) }
node.changeBuffer(surplus)
}) // Charging of equipment
{
val charge = Settings.get.chargeRateTablet * chargeSpeed * Settings.get.tickFrequency
canCharge ||= charge > 0 && node.globalBuffer >= charge * 0.5
if (canCharge) {
equipment.foreach(chargeStack(_, charge))
} }
} }
@ -233,17 +247,35 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
} }
val players = world.getEntitiesWithinAABB(classOf[EntityPlayer], bounds).collect { val players = world.getEntitiesWithinAABB(classOf[EntityPlayer], bounds).collect {
case player: EntityPlayer if api.Nanomachines.hasController(player) => new PlayerChargeable(player) case player: EntityPlayer => player
}
val chargeablePlayers = players.collect {
case player if api.Nanomachines.hasController(player) => new PlayerChargeable(player)
} }
// Only update list when we have to, keeps pointless block updates to a minimum. // Only update list when we have to, keeps pointless block updates to a minimum.
val newConnectors = robots ++ drones ++ players val newConnectors = robots ++ drones ++ chargeablePlayers
if (connectors.size != newConnectors.length || (connectors.nonEmpty && (connectors -- newConnectors).nonEmpty)) { if (connectors.size != newConnectors.length || (connectors.nonEmpty && (connectors -- newConnectors).nonEmpty)) {
connectors.clear() connectors.clear()
connectors ++= newConnectors connectors ++= newConnectors
world.notifyNeighborsOfStateChange(getPos, getBlockType) world.notifyNeighborsOfStateChange(getPos, getBlockType)
} }
// scan players for chargeable equipment
equipment.clear()
players.foreach {
player => player.inventory.mainInventory.foreach {
stack: ItemStack =>
if (Option(Driver.driverFor(stack, getClass)) match {
case Some(driver) if driver.slot(stack) == Slot.Tablet => true
case _ => ItemCharge.canCharge(stack)
}) {
equipment += stack
}
}
}
} }
trait Chargeable { trait Chargeable {