blob: 39d3d16b4d652238f823b264c9234b3750f98511 [file] [log] [blame] [raw]
package li.cil.oc.integration.util
import java.lang.reflect.Method
import li.cil.oc.common.IMC
import li.cil.oc.util.BlockPosition
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.ItemStack
import scala.collection.mutable
object Wrench {
private val usages = mutable.LinkedHashSet.empty[Method]
private val checks = mutable.LinkedHashSet.empty[Method]
def addUsage(wrench: Method): Unit = usages += wrench
def addCheck(checker: Method): Unit = checks += checker
def isWrench(stack: ItemStack): Boolean = stack != null && checks.exists(IMC.tryInvokeStatic(_, stack)(false))
def holdsApplicableWrench(player: EntityPlayer, position: BlockPosition): Boolean =
player.getHeldItem != null && usages.exists(IMC.tryInvokeStatic(_, player, Int.box(position.x), Int.box(position.y), Int.box(position.z), Boolean.box(false))(false))
def wrenchUsed(player: EntityPlayer, position: BlockPosition): Unit =
if (player.getHeldItem != null) usages.foreach(IMC.tryInvokeStaticVoid(_, player, Int.box(position.x), Int.box(position.y), Int.box(position.z), Boolean.box(true)))
}