blob: a67846c87ca9cf2f49f658db4dcb8336ab541eea [file] [log] [blame] [raw]
package li.cil.oc.integration.util
import java.lang.reflect.Method
import li.cil.oc.common.IMC
import net.minecraft.item.ItemStack
import scala.collection.mutable
object ItemCharge {
private val chargers = mutable.LinkedHashSet.empty[(Method, Method)]
def add(canCharge: Method, charge: Method): Unit = chargers += ((canCharge, charge))
def canCharge(stack: ItemStack): Boolean = stack != null && chargers.exists(charger => IMC.tryInvokeStatic(charger._1, stack)(false))
def charge(stack: ItemStack, amount: Double): Double = {
if (stack != null) chargers.find(charger => IMC.tryInvokeStatic(charger._1, stack)(false)) match {
case Some(charger) => IMC.tryInvokeStatic(charger._2, stack, Double.box(amount), java.lang.Boolean.FALSE)(0.0)
case _ => 0.0
}
else 0.0
}
}