Added getComparatorInput to redstone component. Closes #1488.

This commit is contained in:
Florian Nücke 2015-10-16 18:54:41 +02:00
parent da10c249c6
commit bdcb86a219
2 changed files with 20 additions and 0 deletions

View File

@ -7,6 +7,9 @@ import li.cil.oc.api.machine.Callback
import li.cil.oc.api.machine.Context
import li.cil.oc.api.network._
import li.cil.oc.common.tileentity.traits.RedstoneAware
import li.cil.oc.util.BlockPosition
import li.cil.oc.util.ExtendedWorld._
import li.cil.oc.util.ExtendedBlock._
import net.minecraftforge.common.util.ForgeDirection
trait RedstoneVanilla extends RedstoneSignaller {
@ -36,6 +39,20 @@ trait RedstoneVanilla extends RedstoneSignaller {
result(redstone.output(side))
}
@Callback(direct = true, doc = """function(side:number):number -- Get the comparator input on the specified side.""")
def getComparatorInput(context: Context, args: Arguments): Array[AnyRef] = {
val side = checkSide(args, 0)
val blockPos = BlockPosition(redstone).offset(side)
if (redstone.world.blockExists(blockPos)) {
val block = redstone.world.getBlock(blockPos)
if (block.hasComparatorInputOverride) {
val comparatorOverride = block.getComparatorInputOverride(blockPos, side.getOpposite)
return result(comparatorOverride)
}
}
result(0)
}
// ----------------------------------------------------------------------- //
override def onMessage(message: Message): Unit = {

View File

@ -1,6 +1,7 @@
package li.cil.oc.util
import net.minecraft.block.Block
import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids.IFluidBlock
import scala.language.implicitConversions
@ -19,6 +20,8 @@ object ExtendedBlock {
def getSelectedBoundingBoxFromPool(position: BlockPosition) = block.getSelectedBoundingBoxFromPool(position.world.get, position.x, position.y, position.z)
def getCollisionBoundingBoxFromPool(position: BlockPosition) = block.getCollisionBoundingBoxFromPool(position.world.get, position.x, position.y, position.z)
def getComparatorInputOverride(position: BlockPosition, side: ForgeDirection) = block.getComparatorInputOverride(position.world.get, position.x, position.y, position.z, side.ordinal())
}
implicit def extendedFluidBlock(block: IFluidBlock): ExtendedFluidBlock = new ExtendedFluidBlock(block)