Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package li.cil.oc.integration.minecraft

import li.cil.oc.api.driver.EnvironmentProvider
import li.cil.oc.api.network.ManagedEnvironment
import li.cil.oc.api.prefab.DriverSidedBlockEntity
import net.minecraft.core.{BlockPos, Direction}
import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.entity.{AbstractFurnaceBlockEntity, BlastFurnaceBlockEntity}
import net.minecraft.world.level.block.{Block, Blocks}

object DriverBlastFurnace extends DriverSidedBlockEntity {
override def getBlockEntityClass: Class[_] = classOf[BlastFurnaceBlockEntity]

override def createEnvironment(world: Level, pos: BlockPos, side: Direction): ManagedEnvironment =
new EnvironmentFurnace(world.getBlockEntity(pos).asInstanceOf[AbstractFurnaceBlockEntity], "blast_furnace")

object Provider extends EnvironmentProvider {
override def getEnvironment(stack: ItemStack): Class[_] = {
if (!stack.isEmpty && Block.byItem(stack.getItem) == Blocks.BLAST_FURNACE)
classOf[EnvironmentFurnace]
else null
}
}

}
49 changes: 5 additions & 44 deletions src/main/scala/li/cil/oc/integration/minecraft/DriverFurnace.scala
Original file line number Diff line number Diff line change
@@ -1,63 +1,24 @@
package li.cil.oc.integration.minecraft

import li.cil.oc.api.driver.EnvironmentProvider
import li.cil.oc.api.driver.NamedBlock
import li.cil.oc.api.machine.Arguments
import li.cil.oc.api.machine.Callback
import li.cil.oc.api.machine.Context
import li.cil.oc.api.network.ManagedEnvironment
import li.cil.oc.api.prefab.DriverSidedBlockEntity
import li.cil.oc.integration.ManagedBlockEntityEnvironment
import li.cil.oc.util.ResultWrapper.result
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.Blocks
import net.minecraft.core.{BlockPos, Direction}
import net.minecraft.world.item.ItemStack
import net.minecraft.core.Direction
import net.minecraft.core.BlockPos
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.entity.FurnaceBlockEntity
import net.minecraft.world.level.block.{Block, Blocks}
import net.minecraft.world.level.block.entity.{AbstractFurnaceBlockEntity, FurnaceBlockEntity}

object DriverFurnace extends DriverSidedBlockEntity {
override def getBlockEntityClass: Class[_] = classOf[FurnaceBlockEntity]

override def createEnvironment(world: Level, pos: BlockPos, side: Direction): ManagedEnvironment =
new Environment(world.getBlockEntity(pos).asInstanceOf[FurnaceBlockEntity])

final class Environment(tileEntity: FurnaceBlockEntity) extends ManagedBlockEntityEnvironment[FurnaceBlockEntity](tileEntity, "furnace") with NamedBlock {
override def preferredName = "furnace"

override def priority = 0

@Callback(doc = "function():number -- The number of ticks that the furnace will keep burning from the last consumed fuel.")
def getBurnTime(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.litTime)
}

@Callback(doc = "function():number -- The number of ticks that the currently burning fuel lasts in total.")
def getCurrentItemBurnTime(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.litDuration)
}

@Callback(doc = "function():number -- The number of ticks that the current item has been cooking for.")
def getCookTime(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.cookingProgress)
}

@Callback(doc = "function():number -- The number of ticks that the current item needs to cook.")
def getTotalCookTime(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.cookingTotalTime)
}

@Callback(doc = "function():boolean -- Get whether the furnace is currently active.")
def isBurning(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.litTime > 0)
}
}
new EnvironmentFurnace(world.getBlockEntity(pos).asInstanceOf[AbstractFurnaceBlockEntity], "furnace")

object Provider extends EnvironmentProvider {
override def getEnvironment(stack: ItemStack): Class[_] = {
if (!stack.isEmpty && Block.byItem(stack.getItem) == Blocks.FURNACE)
classOf[Environment]
classOf[EnvironmentFurnace]
else null
}
}
Expand Down
26 changes: 26 additions & 0 deletions src/main/scala/li/cil/oc/integration/minecraft/DriverSmoker.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package li.cil.oc.integration.minecraft

import li.cil.oc.api.driver.EnvironmentProvider
import li.cil.oc.api.network.ManagedEnvironment
import li.cil.oc.api.prefab.DriverSidedBlockEntity
import net.minecraft.core.{BlockPos, Direction}
import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.entity.{AbstractFurnaceBlockEntity, SmokerBlockEntity}
import net.minecraft.world.level.block.{Block, Blocks}

object DriverSmoker extends DriverSidedBlockEntity {
override def getBlockEntityClass: Class[_] = classOf[SmokerBlockEntity]

override def createEnvironment(world: Level, pos: BlockPos, side: Direction): ManagedEnvironment =
new EnvironmentFurnace(world.getBlockEntity(pos).asInstanceOf[AbstractFurnaceBlockEntity], "smoker")

object Provider extends EnvironmentProvider {
override def getEnvironment(stack: ItemStack): Class[_] = {
if (!stack.isEmpty && Block.byItem(stack.getItem) == Blocks.SMOKER)
classOf[EnvironmentFurnace]
else null
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package li.cil.oc.integration.minecraft

import li.cil.oc.api.driver.NamedBlock
import li.cil.oc.api.machine.{Arguments, Callback, Context}
import li.cil.oc.integration.ManagedBlockEntityEnvironment
import li.cil.oc.util.ResultWrapper.result
import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity

final class EnvironmentFurnace(tileEntity: AbstractFurnaceBlockEntity, name: String) extends ManagedBlockEntityEnvironment[AbstractFurnaceBlockEntity](tileEntity, name) with NamedBlock {
override def preferredName: String = name

override def priority = 0

@Callback(doc = "function():number -- The number of ticks that the furnace will keep burning from the last consumed fuel.")
def getBurnTime(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.litTime)
}

@Callback(doc = "function():number -- The number of ticks that the currently burning fuel lasts in total.")
def getCurrentItemBurnTime(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.litDuration)
}

@Callback(doc = "function():number -- The number of ticks that the current item has been cooking for.")
def getCookTime(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.cookingProgress)
}

@Callback(doc = "function():number -- The number of ticks that the current item needs to cook.")
def getTotalCookTime(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.cookingTotalTime)
}

@Callback(doc = "function():boolean -- Get whether the furnace is currently active.")
def isBurning(context: Context, args: Arguments): Array[AnyRef] = {
result(tileEntity.litTime > 0)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ object ModMinecraft extends ModProxy with RedstoneProvider {
Driver.add(DriverBrewingStand)
Driver.add(DriverComparator)
Driver.add(DriverFurnace)
Driver.add(DriverBlastFurnace)
Driver.add(DriverSmoker)
Driver.add(DriverMobSpawner)
Driver.add(DriverNoteBlock)
Driver.add(DriverRecordPlayer)
Expand All @@ -28,6 +30,8 @@ object ModMinecraft extends ModProxy with RedstoneProvider {
Driver.add(DriverBrewingStand.Provider)
Driver.add(DriverComparator.Provider)
Driver.add(DriverFurnace.Provider)
Driver.add(DriverBlastFurnace.Provider)
Driver.add(DriverSmoker.Provider)
Driver.add(DriverMobSpawner.Provider)
Driver.add(DriverNoteBlock.Provider)
Driver.add(DriverRecordPlayer.Provider)
Expand Down
Loading