diff --git a/src/main/java/li/cil/oc/api/internal/Robot.java b/src/main/java/li/cil/oc/api/internal/Robot.java
index b618deadb..ca5efa25f 100644
--- a/src/main/java/li/cil/oc/api/internal/Robot.java
+++ b/src/main/java/li/cil/oc/api/internal/Robot.java
@@ -3,7 +3,6 @@ package li.cil.oc.api.internal;
import li.cil.oc.api.network.EnvironmentHost;
import li.cil.oc.api.network.Environment;
import net.minecraft.inventory.ISidedInventory;
-import net.minecraftforge.fluids.IFluidHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -29,7 +28,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
*
* This interface is not meant to be implemented, just used.
*/
-public interface Robot extends Agent, Environment, EnvironmentHost, Tiered, ISidedInventory, IFluidHandler {
+public interface Robot extends Agent, Environment, EnvironmentHost, Tiered, ISidedInventory {
/**
* The number of built-in components in this robot.
*/
diff --git a/src/main/scala/li/cil/oc/client/CommandHandler.scala b/src/main/scala/li/cil/oc/client/CommandHandler.scala
index 680186cb7..6ea1bfb83 100644
--- a/src/main/scala/li/cil/oc/client/CommandHandler.scala
+++ b/src/main/scala/li/cil/oc/client/CommandHandler.scala
@@ -12,7 +12,7 @@ object CommandHandler {
}
object SetClipboardCommand extends SimpleCommand("oc_setclipboard") {
- override def getCommandUsage(source: ICommandSender): String = name + " "
+ override def getUsage(source: ICommandSender): String = name + " "
override def execute(server: MinecraftServer, source: ICommandSender, command: Array[String]): Unit = {
if (source.getEntityWorld.isRemote && command != null && command.length > 0) {
diff --git a/src/main/scala/li/cil/oc/client/PacketHandler.scala b/src/main/scala/li/cil/oc/client/PacketHandler.scala
index c5d1aaad0..5ffdfe38c 100644
--- a/src/main/scala/li/cil/oc/client/PacketHandler.scala
+++ b/src/main/scala/li/cil/oc/client/PacketHandler.scala
@@ -146,7 +146,7 @@ object PacketHandler extends CommonPacketHandler {
p.readTileEntity[Colored]() match {
case Some(t) =>
t.setColor(p.readInt())
- t.world.notifyBlockUpdate(t.position)
+ t.getWorld.notifyBlockUpdate(t.position)
case _ => // Invalid packet.
}
diff --git a/src/main/scala/li/cil/oc/common/EventHandler.scala b/src/main/scala/li/cil/oc/common/EventHandler.scala
index f34f0b538..9836418e3 100644
--- a/src/main/scala/li/cil/oc/common/EventHandler.scala
+++ b/src/main/scala/li/cil/oc/common/EventHandler.scala
@@ -109,25 +109,6 @@ object EventHandler {
}
}
- @Optional.Method(modid = Mods.IDs.IndustrialCraft2)
- def scheduleIC2Add(tileEntity: power.IndustrialCraft2Experimental) {
- if (SideTracker.isServer) pendingServer.synchronized {
- pendingServer += (() => if (!tileEntity.addedToIC2PowerGrid && !tileEntity.isInvalid) {
- MinecraftForge.EVENT_BUS.post(new ic2.api.energy.event.EnergyTileLoadEvent(tileEntity.asInstanceOf[ic2.api.energy.tile.IEnergySink]))
- tileEntity.addedToIC2PowerGrid = true
- })
- }
- }
-
- def scheduleWirelessRedstone(rs: server.component.RedstoneWireless) {
- if (SideTracker.isServer) pendingServer.synchronized {
- pendingServer += (() => if (rs.node.network != null) {
- util.WirelessRedstone.addReceiver(rs)
- util.WirelessRedstone.updateOutput(rs)
- })
- }
- }
-
@SubscribeEvent
def onAttachCapabilities(event: AttachCapabilitiesEvent.TileEntity): Unit = {
event.getTileEntity match {
@@ -232,7 +213,7 @@ object EventHandler {
})
// Do update check in local games and for OPs.
val server = FMLCommonHandler.instance.getMinecraftServerInstance
- if (!Mods.VersionChecker.isAvailable && (!server.isDedicatedServer || server.getPlayerList.canSendCommands(player.getGameProfile))) {
+ if (!server.isDedicatedServer || server.getPlayerList.canSendCommands(player.getGameProfile)) {
Future {
UpdateCheck.info onSuccess {
case Some(release) => player.sendMessage(Localization.Chat.InfoNewVersion(release.tag_name))
diff --git a/src/main/scala/li/cil/oc/common/block/Adapter.scala b/src/main/scala/li/cil/oc/common/block/Adapter.scala
index 335da92b7..8f4e66152 100644
--- a/src/main/scala/li/cil/oc/common/block/Adapter.scala
+++ b/src/main/scala/li/cil/oc/common/block/Adapter.scala
@@ -20,7 +20,7 @@ class Adapter extends SimpleBlock with traits.GUI {
// ----------------------------------------------------------------------- //
- override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, neighborBlock: Block): Unit =
+ override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, block: Block, fromPos: BlockPos): Unit =
world.getTileEntity(pos) match {
case adapter: tileentity.Adapter => adapter.neighborChanged()
case _ => // Ignore.
diff --git a/src/main/scala/li/cil/oc/common/block/Assembler.scala b/src/main/scala/li/cil/oc/common/block/Assembler.scala
index 1d11d3c2b..f79f960e2 100644
--- a/src/main/scala/li/cil/oc/common/block/Assembler.scala
+++ b/src/main/scala/li/cil/oc/common/block/Assembler.scala
@@ -3,7 +3,6 @@ package li.cil.oc.common.block
import li.cil.oc.Settings
import li.cil.oc.common.GuiType
import li.cil.oc.common.tileentity
-import li.cil.oc.integration.coloredlights.ModColoredLights
import net.minecraft.block.state.IBlockState
import net.minecraft.util.EnumFacing
import net.minecraft.util.math.BlockPos
@@ -11,8 +10,6 @@ import net.minecraft.world.IBlockAccess
import net.minecraft.world.World
class Assembler extends SimpleBlock with traits.PowerAcceptor with traits.StateAware with traits.GUI {
- ModColoredLights.setLightLevel(this, 0, 3, 5)
-
override def isOpaqueCube(state: IBlockState): Boolean = false
override def isFullCube(state: IBlockState): Boolean = false
diff --git a/src/main/scala/li/cil/oc/common/block/Capacitor.scala b/src/main/scala/li/cil/oc/common/block/Capacitor.scala
index 9b8560f07..54fb043f3 100644
--- a/src/main/scala/li/cil/oc/common/block/Capacitor.scala
+++ b/src/main/scala/li/cil/oc/common/block/Capacitor.scala
@@ -3,15 +3,12 @@ package li.cil.oc.common.block
import java.util.Random
import li.cil.oc.common.tileentity
-import li.cil.oc.integration.coloredlights.ModColoredLights
import net.minecraft.block.Block
import net.minecraft.block.state.IBlockState
import net.minecraft.util.math.BlockPos
import net.minecraft.world.World
class Capacitor extends SimpleBlock {
- ModColoredLights.setLightLevel(this, 5, 5, 5)
-
setTickRandomly(true)
// ----------------------------------------------------------------------- //
@@ -35,7 +32,7 @@ class Capacitor extends SimpleBlock {
override def tickRate(world: World) = 1
- override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, neighborBlock: Block): Unit =
+ override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, block: Block, fromPos: BlockPos): Unit =
world.getTileEntity(pos) match {
case capacitor: tileentity.Capacitor => capacitor.recomputeCapacity()
case _ =>
diff --git a/src/main/scala/li/cil/oc/common/block/Charger.scala b/src/main/scala/li/cil/oc/common/block/Charger.scala
index 8ed9dd590..70e953d01 100644
--- a/src/main/scala/li/cil/oc/common/block/Charger.scala
+++ b/src/main/scala/li/cil/oc/common/block/Charger.scala
@@ -52,11 +52,11 @@ class Charger extends RedstoneAware with traits.PowerAcceptor with traits.StateA
}
else super.localOnBlockActivated(world, pos, player, hand, heldItem, side, hitX, hitY, hitZ)
- override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, neighborBlock: Block): Unit = {
+ override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, block: Block, fromPos: BlockPos): Unit = {
world.getTileEntity(pos) match {
case charger: tileentity.Charger => charger.onNeighborChanged()
case _ =>
}
- super.neighborChanged(state, world, pos, neighborBlock)
+ super.neighborChanged(state, world, pos, block, fromPos)
}
}
diff --git a/src/main/scala/li/cil/oc/common/block/DiskDrive.scala b/src/main/scala/li/cil/oc/common/block/DiskDrive.scala
index 455e1b70c..be0f18a1c 100644
--- a/src/main/scala/li/cil/oc/common/block/DiskDrive.scala
+++ b/src/main/scala/li/cil/oc/common/block/DiskDrive.scala
@@ -23,15 +23,6 @@ class DiskDrive extends SimpleBlock with traits.GUI {
// ----------------------------------------------------------------------- //
- override protected def tooltipTail(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: java.util.List[String], advanced: Boolean) {
- super.tooltipTail(metadata, stack, player, tooltip, advanced)
- if (Mods.ComputerCraft.isAvailable) {
- tooltip.addAll(Tooltip.get(getClass.getSimpleName + ".CC"))
- }
- }
-
- // ----------------------------------------------------------------------- //
-
override def guiType = GuiType.DiskDrive
override def createNewTileEntity(world: World, metadata: Int) = new tileentity.DiskDrive()
diff --git a/src/main/scala/li/cil/oc/common/block/Geolyzer.scala b/src/main/scala/li/cil/oc/common/block/Geolyzer.scala
index 40c76d82c..0f87c555d 100644
--- a/src/main/scala/li/cil/oc/common/block/Geolyzer.scala
+++ b/src/main/scala/li/cil/oc/common/block/Geolyzer.scala
@@ -1,13 +1,8 @@
package li.cil.oc.common.block
import li.cil.oc.common.tileentity
-import li.cil.oc.integration.coloredlights.ModColoredLights
import net.minecraft.world.World
class Geolyzer extends SimpleBlock {
- ModColoredLights.setLightLevel(this, 3, 1, 1)
-
- // ----------------------------------------------------------------------- //
-
override def createNewTileEntity(world: World, metadata: Int) = new tileentity.Geolyzer()
}
diff --git a/src/main/scala/li/cil/oc/common/block/Hologram.scala b/src/main/scala/li/cil/oc/common/block/Hologram.scala
index d3a0f0d34..95c9bd9e7 100644
--- a/src/main/scala/li/cil/oc/common/block/Hologram.scala
+++ b/src/main/scala/li/cil/oc/common/block/Hologram.scala
@@ -2,9 +2,7 @@ package li.cil.oc.common.block
import java.util
-import li.cil.oc.Settings
import li.cil.oc.common.tileentity
-import li.cil.oc.integration.coloredlights.ModColoredLights
import li.cil.oc.util.Rarity
import li.cil.oc.util.Tooltip
import net.minecraft.block.state.IBlockState
@@ -19,10 +17,6 @@ import net.minecraftforge.fml.relauncher.Side
import net.minecraftforge.fml.relauncher.SideOnly
class Hologram(val tier: Int) extends SimpleBlock {
- if (Settings.get.hologramLight) {
- ModColoredLights.setLightLevel(this, 15, 15, 15)
- }
-
val bounds = new AxisAlignedBB(0, 0, 0, 1, 0.5f, 1)
// ----------------------------------------------------------------------- //
diff --git a/src/main/scala/li/cil/oc/common/block/Keyboard.scala b/src/main/scala/li/cil/oc/common/block/Keyboard.scala
index edb283a12..0054c5ba3 100644
--- a/src/main/scala/li/cil/oc/common/block/Keyboard.scala
+++ b/src/main/scala/li/cil/oc/common/block/Keyboard.scala
@@ -92,7 +92,7 @@ class Keyboard extends SimpleBlock(Material.ROCK) {
})
}
- override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, neighborBlock: Block): Unit =
+ override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, block: Block, fromPos: BlockPos): Unit =
world.getTileEntity(pos) match {
case keyboard: tileentity.Keyboard =>
if (!canPlaceBlockOnSide(world, pos, keyboard.facing)) {
diff --git a/src/main/scala/li/cil/oc/common/block/NetSplitter.scala b/src/main/scala/li/cil/oc/common/block/NetSplitter.scala
index 7a7269be6..76ca51eb6 100644
--- a/src/main/scala/li/cil/oc/common/block/NetSplitter.scala
+++ b/src/main/scala/li/cil/oc/common/block/NetSplitter.scala
@@ -35,7 +35,7 @@ class NetSplitter extends RedstoneAware {
// ----------------------------------------------------------------------- //
// NOTE: must not be final for immibis microblocks to work.
- override def onBlockActivated(world: World, pos: BlockPos, state: IBlockState, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
+ override def onBlockActivated(world: World, pos: BlockPos, state: IBlockState, player: EntityPlayer, hand: EnumHand, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
if (Wrench.holdsApplicableWrench(player, pos)) {
val sideToToggle = if (player.isSneaking) side.getOpposite else side
world.getTileEntity(pos) match {
@@ -48,6 +48,6 @@ class NetSplitter extends RedstoneAware {
case _ => false
}
}
- else super.onBlockActivated(world, pos, state, player, hand, heldItem, side, hitX, hitY, hitZ)
+ else super.onBlockActivated(world, pos, state, player, hand, side, hitX, hitY, hitZ)
}
}
diff --git a/src/main/scala/li/cil/oc/common/block/PowerConverter.scala b/src/main/scala/li/cil/oc/common/block/PowerConverter.scala
index c6f4f6bc0..b7f6d6e81 100644
--- a/src/main/scala/li/cil/oc/common/block/PowerConverter.scala
+++ b/src/main/scala/li/cil/oc/common/block/PowerConverter.scala
@@ -24,19 +24,10 @@ class PowerConverter extends SimpleBlock with traits.PowerAcceptor {
override protected def tooltipTail(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
super.tooltipTail(metadata, stack, player, tooltip, advanced)
-
- if (Mods.Factorization.isAvailable) {
- addRatio(tooltip, "Factorization", Settings.get.ratioFactorization)
- }
- if (Mods.IndustrialCraft2.isAvailable || Mods.IndustrialCraft2Classic.isAvailable) {
- addRatio(tooltip, "IndustrialCraft2", Settings.get.ratioIndustrialCraft2)
- }
- if (Mods.Mekanism.isAvailable) {
- addRatio(tooltip, "Mekanism", Settings.get.ratioMekanism)
- }
- if (Mods.CoFHEnergy.isAvailable) {
- addRatio(tooltip, "ThermalExpansion", Settings.get.ratioRedstoneFlux)
- }
+// TODO more generic way of integration modules of power providing mods to provide tooltip lines
+// if (Mods.Factorization.isAvailable) {
+// addRatio(tooltip, "Factorization", Settings.get.ratioFactorization)
+// }
}
private def addExtension(x: Double) =
diff --git a/src/main/scala/li/cil/oc/common/block/PowerDistributor.scala b/src/main/scala/li/cil/oc/common/block/PowerDistributor.scala
index 68359cea2..ab71ceb3a 100644
--- a/src/main/scala/li/cil/oc/common/block/PowerDistributor.scala
+++ b/src/main/scala/li/cil/oc/common/block/PowerDistributor.scala
@@ -1,14 +1,9 @@
package li.cil.oc.common.block
import li.cil.oc.common.tileentity
-import li.cil.oc.integration.coloredlights.ModColoredLights
import net.minecraft.world.World
class PowerDistributor extends SimpleBlock {
- ModColoredLights.setLightLevel(this, 5, 5, 3)
-
- // ----------------------------------------------------------------------- //
-
override def createNewTileEntity(world: World, metadata: Int) = new tileentity.PowerDistributor()
}
diff --git a/src/main/scala/li/cil/oc/common/block/Print.scala b/src/main/scala/li/cil/oc/common/block/Print.scala
index 855d7d351..529bc3b26 100644
--- a/src/main/scala/li/cil/oc/common/block/Print.scala
+++ b/src/main/scala/li/cil/oc/common/block/Print.scala
@@ -90,8 +90,6 @@ class Print(protected implicit val tileTag: ClassTag[tileentity.Print]) extends
case _ => super.getLightOpacity(state, world, pos)
}
- override def isVisuallyOpaque = false
-
override def isFullCube(state: IBlockState): Boolean = false
override def shouldSideBeRendered(state: IBlockState, world: IBlockAccess, pos: BlockPos, side: EnumFacing) = true
@@ -159,10 +157,10 @@ class Print(protected implicit val tileTag: ClassTag[tileentity.Print]) extends
// ----------------------------------------------------------------------- //
- override def onBlockActivated(world: World, pos: BlockPos, state: IBlockState, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
+ override def onBlockActivated(world: World, pos: BlockPos, state: IBlockState, player: EntityPlayer, hand: EnumHand, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
world.getTileEntity(pos) match {
case print: tileentity.Print => print.activate()
- case _ => super.onBlockActivated(world, pos, state, player, hand, heldItem, side, hitX, hitY, hitZ)
+ case _ => super.onBlockActivated(world, pos, state, player, hand, side, hitX, hitY, hitZ)
}
}
@@ -171,7 +169,7 @@ class Print(protected implicit val tileTag: ClassTag[tileentity.Print]) extends
tileEntity.data.load(stack)
tileEntity.updateBounds()
tileEntity.updateRedstone()
- tileEntity.world.checkLight(tileEntity.getPos)
+ tileEntity.getWorld.checkLight(tileEntity.getPos)
}
override protected def doCustomDrops(tileEntity: tileentity.Print, player: EntityPlayer, willHarvest: Boolean): Unit = {
diff --git a/src/main/scala/li/cil/oc/common/block/Redstone.scala b/src/main/scala/li/cil/oc/common/block/Redstone.scala
index 196184410..307c95cc4 100644
--- a/src/main/scala/li/cil/oc/common/block/Redstone.scala
+++ b/src/main/scala/li/cil/oc/common/block/Redstone.scala
@@ -12,15 +12,10 @@ import net.minecraft.world.World
class Redstone extends RedstoneAware {
override protected def tooltipTail(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
super.tooltipTail(metadata, stack, player, tooltip, advanced)
- if (Mods.ProjectRedTransmission.isAvailable) {
- tooltip.addAll(Tooltip.get("RedstoneCard.ProjectRed"))
- }
- if (Mods.RedLogic.isAvailable) {
- tooltip.addAll(Tooltip.get("RedstoneCard.RedLogic"))
- }
- if (Mods.MineFactoryReloaded.isAvailable) {
- tooltip.addAll(Tooltip.get("RedstoneCard.RedNet"))
- }
+ // todo more generic way for redstone mods to provide lines
+// if (Mods.ProjectRedTransmission.isAvailable) {
+// tooltip.addAll(Tooltip.get("RedstoneCard.ProjectRed"))
+// }
}
// ----------------------------------------------------------------------- //
diff --git a/src/main/scala/li/cil/oc/common/block/RedstoneAware.scala b/src/main/scala/li/cil/oc/common/block/RedstoneAware.scala
index a82cc3d49..cf778a7a3 100644
--- a/src/main/scala/li/cil/oc/common/block/RedstoneAware.scala
+++ b/src/main/scala/li/cil/oc/common/block/RedstoneAware.scala
@@ -1,22 +1,14 @@
package li.cil.oc.common.block
import li.cil.oc.common.tileentity
-import li.cil.oc.integration.Mods
import net.minecraft.block.Block
import net.minecraft.block.state.IBlockState
import net.minecraft.util.EnumFacing
import net.minecraft.util.math.BlockPos
import net.minecraft.world.IBlockAccess
import net.minecraft.world.World
-import net.minecraftforge.fml.common.Optional
-/* TODO MFR
-import powercrystals.minefactoryreloaded.api.rednet.IRedNetNetworkContainer
-import powercrystals.minefactoryreloaded.api.rednet.IRedNetOmniNode
-import powercrystals.minefactoryreloaded.api.rednet.connectivity.RedNetConnectionType
-*/
-@Optional.Interface(iface = "powercrystals.minefactoryreloaded.api.rednet.IRedNetOmniNode", modid = Mods.IDs.MineFactoryReloaded)
-abstract class RedstoneAware extends SimpleBlock /* with IRedNetOmniNode TODO MFR */ {
+abstract class RedstoneAware extends SimpleBlock {
override def canProvidePower(state: IBlockState): Boolean = true
override def canConnectRedstone(state: IBlockState, world: IBlockAccess, pos: BlockPos, side: EnumFacing): Boolean =
@@ -36,54 +28,10 @@ abstract class RedstoneAware extends SimpleBlock /* with IRedNetOmniNode TODO MF
// ----------------------------------------------------------------------- //
- override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, neighborBlock: Block): Unit = {
- /* TODO MFR
- if (Mods.MineFactoryReloaded.isAvailable) {
- val position = BlockPosition(x, y, z)
- world.getTileEntity(position) match {
- case t: tileentity.traits.BundledRedstoneAware => for (side <- EnumFacing.values) {
- world.getBlock(position.offset(side)) match {
- case block: IRedNetNetworkContainer =>
- case _ => for (color <- 0 until 16) {
- t.rednetInput(side, color, 0)
- }
- }
- }
- case _ =>
- }
- }
- */
+ override def neighborChanged(state: IBlockState, world: World, pos: BlockPos, block: Block, fromPos: BlockPos): Unit = {
world.getTileEntity(pos) match {
case redstone: tileentity.traits.RedstoneAware => redstone.checkRedstoneInputChanged()
case _ => // Ignore.
}
}
-
- // ----------------------------------------------------------------------- //
-
- /* TODO MFR
- override def getConnectionType(world: World, x: Int, y: Int, z: Int, side: EnumFacing) = RedNetConnectionType.CableAll
-
- override def getOutputValue(world: World, x: Int, y: Int, z: Int, side: EnumFacing, color: Int) =
- world.getTileEntity(x, y, z) match {
- case t: tileentity.traits.BundledRedstoneAware => t.bundledOutput(side, color)
- case _ => 0
- }
-
- override def getOutputValues(world: World, x: Int, y: Int, z: Int, side: EnumFacing) =
- world.getTileEntity(x, y, z) match {
- case t: tileentity.traits.BundledRedstoneAware => t.bundledOutput(side)
- case _ => Array.fill(16)(0)
- }
-
- override def onInputChanged(world: World, x: Int, y: Int, z: Int, side: EnumFacing, inputValue: Int) {}
-
- override def onInputsChanged(world: World, x: Int, y: Int, z: Int, side: EnumFacing, inputValues: Array[Int]) =
- world.getTileEntity(x, y, z) match {
- case t: tileentity.traits.BundledRedstoneAware => for (color <- 0 until 16) {
- t.rednetInput(side, color, inputValues(color))
- }
- case _ =>
- }
- */
}
diff --git a/src/main/scala/li/cil/oc/common/block/Screen.scala b/src/main/scala/li/cil/oc/common/block/Screen.scala
index be4f6e27c..06e39dc94 100644
--- a/src/main/scala/li/cil/oc/common/block/Screen.scala
+++ b/src/main/scala/li/cil/oc/common/block/Screen.scala
@@ -24,15 +24,12 @@ import li.cil.oc.common.GuiType
import li.cil.oc.common.block.property.PropertyRotatable
import li.cil.oc.common.block.property.PropertyTile
import li.cil.oc.common.tileentity
-import li.cil.oc.integration.coloredlights.ModColoredLights
import li.cil.oc.integration.util.Wrench
import li.cil.oc.util.PackedColor
import li.cil.oc.util.Rarity
import li.cil.oc.util.Tooltip
class Screen(val tier: Int) extends RedstoneAware {
- ModColoredLights.setLightLevel(this, 5, 5, 5)
-
override def createBlockState() = new ExtendedBlockState(this, Array(PropertyRotatable.Pitch, PropertyRotatable.Yaw), Array(PropertyTile.Tile))
override def getMetaFromState(state: IBlockState): Int = (state.getValue(PropertyRotatable.Pitch).ordinal() << 2) | state.getValue(PropertyRotatable.Yaw).getHorizontalIndex
diff --git a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala
index 1177b6a39..e583adca0 100644
--- a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala
+++ b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala
@@ -154,8 +154,8 @@ abstract class SimpleBlock(material: Material = Material.IRON) extends BlockCont
// ----------------------------------------------------------------------- //
- // NOTE: must not be final for immibis microblocks to work.
- override def onBlockActivated(world: World, pos: BlockPos, state: IBlockState, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean =
+ override def onBlockActivated(world: World, pos: BlockPos, state: IBlockState, player: EntityPlayer, hand: EnumHand, facing: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
+ val heldItem = player.getHeldItem(hand)
world.getTileEntity(pos) match {
case colored: Colored if Color.isDye(heldItem) =>
colored.setColor(Color.rgbValues(Color.dyeColor(heldItem)))
@@ -164,8 +164,9 @@ abstract class SimpleBlock(material: Material = Material.IRON) extends BlockCont
heldItem.splitStack(1)
}
true
- case _ => localOnBlockActivated(world, pos, player, hand, heldItem, side, hitX, hitY, hitZ)
+ case _ => localOnBlockActivated(world, pos, player, hand, heldItem, facing, hitX, hitY, hitZ)
}
+ }
def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = false
}
diff --git a/src/main/scala/li/cil/oc/common/command/SimpleCommand.scala b/src/main/scala/li/cil/oc/common/command/SimpleCommand.scala
index 95643678d..f36204e0d 100644
--- a/src/main/scala/li/cil/oc/common/command/SimpleCommand.scala
+++ b/src/main/scala/li/cil/oc/common/command/SimpleCommand.scala
@@ -13,9 +13,9 @@ import scala.collection.mutable
abstract class SimpleCommand(val name: String) extends CommandBase {
protected var aliases = mutable.ListBuffer.empty[String]
- override def getCommandName = name
+ override def getName = name
- override def getCommandAliases: util.List[String] = aliases
+ override def getAliases: util.List[String] = aliases
override def checkPermission(server: MinecraftServer, sender: ICommandSender): Boolean = super.checkPermission(server, sender)|| (FMLCommonHandler.instance().getMinecraftServerInstance != null && FMLCommonHandler.instance().getMinecraftServerInstance.isSinglePlayer)
diff --git a/src/main/scala/li/cil/oc/common/container/ComponentSlot.scala b/src/main/scala/li/cil/oc/common/container/ComponentSlot.scala
index 604bc574e..2b4ce39cf 100644
--- a/src/main/scala/li/cil/oc/common/container/ComponentSlot.scala
+++ b/src/main/scala/li/cil/oc/common/container/ComponentSlot.scala
@@ -31,12 +31,12 @@ abstract class ComponentSlot(inventory: IInventory, index: Int, x: Int, y: Int)
override def isItemValid(stack: ItemStack) = inventory.isItemValidForSlot(getSlotIndex, stack)
- override def onTake(player: EntityPlayer, stack: ItemStack) {
- super.onTake(player, stack)
+ override def onTake(player: EntityPlayer, stack: ItemStack) = {
for (slot <- container.inventorySlots) slot match {
case dynamic: ComponentSlot => dynamic.clearIfInvalid(player)
case _ =>
}
+ super.onTake(player, stack)
}
override def putStack(stack: ItemStack): Unit = {
diff --git a/src/main/scala/li/cil/oc/common/entity/Drone.scala b/src/main/scala/li/cil/oc/common/entity/Drone.scala
index 9c5a38c25..e90459367 100644
--- a/src/main/scala/li/cil/oc/common/entity/Drone.scala
+++ b/src/main/scala/li/cil/oc/common/entity/Drone.scala
@@ -64,7 +64,7 @@ object Drone {
// internal.Rotatable is also in internal.Drone, but it wasn't since the start
// so this is to ensure it is implemented here, in the very unlikely case that
// someone decides to ship that specific version of the API.
-class Drone(val world: World) extends Entity(world) with MachineHost with internal.Drone with internal.Rotatable with Analyzable with Context {
+class Drone(world: World) extends Entity(world) with MachineHost with internal.Drone with internal.Rotatable with Analyzable with Context {
// Some basic constants.
val gravity = 0.05f
// low for slow fall (float down)
diff --git a/src/main/scala/li/cil/oc/common/event/BlockChangeHandler.scala b/src/main/scala/li/cil/oc/common/event/BlockChangeHandler.scala
index 3d466abf1..1e52fe253 100644
--- a/src/main/scala/li/cil/oc/common/event/BlockChangeHandler.scala
+++ b/src/main/scala/li/cil/oc/common/event/BlockChangeHandler.scala
@@ -47,6 +47,8 @@ object BlockChangeHandler {
}
}
+ override def spawnParticle(id: Int, ignoreRange: Boolean, p_190570_3_ : Boolean, x: Double, y: Double, z: Double, xSpeed: Double, ySpeed: Double, zSpeed: Double, parameters: Int*): Unit = {}
+
override def playRecord(soundIn: SoundEvent, pos: BlockPos): Unit = {}
override def playEvent(player: EntityPlayer, `type`: Int, blockPosIn: BlockPos, data: Int): Unit = {}
diff --git a/src/main/scala/li/cil/oc/common/init/Items.scala b/src/main/scala/li/cil/oc/common/init/Items.scala
index a3b186efe..d2bfee734 100644
--- a/src/main/scala/li/cil/oc/common/init/Items.scala
+++ b/src/main/scala/li/cil/oc/common/init/Items.scala
@@ -332,7 +332,6 @@ object Items extends ItemAPI {
initUpgrades()
initStorage()
initSpecial()
- initIntegration()
// Register aliases.
for ((k, v) <- aliases) {
@@ -539,15 +538,6 @@ object Items extends ItemAPI {
registerItem(new item.Present(misc), Constants.ItemName.Present)
}
- // Items used for integration with other mods.
- private def initIntegration(): Unit = {
- val integration = newItem(new item.Delegator(), "integration")
-
- // Only register recipes if the related mods are present.
- Recipes.addSubItem(new item.AbstractBusCard(integration), Constants.ItemName.AbstractBusCard, Mods.StargateTech2.isAvailable, "oc:abstractBusCard")
- Recipes.addSubItem(new item.WorldSensorCard(integration), Constants.ItemName.WorldSensorCard, Mods.Galacticraft.isAvailable, "oc:worldSensorCard")
- }
-
private def newItem[T <: Item](item: T, name: String): T = {
item.setUnlocalizedName("oc." + name)
GameRegistry.register(item, new ResourceLocation(Settings.resourceDomain, name))
diff --git a/src/main/scala/li/cil/oc/common/item/AbstractBusCard.scala b/src/main/scala/li/cil/oc/common/item/AbstractBusCard.scala
deleted file mode 100644
index 820ba2267..000000000
--- a/src/main/scala/li/cil/oc/common/item/AbstractBusCard.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package li.cil.oc.common.item
-
-import li.cil.oc.integration.Mods
-
-class AbstractBusCard(val parent: Delegator) extends traits.Delegate with traits.ItemTier {
- showInItemList = Mods.StargateTech2.isAvailable
-}
diff --git a/src/main/scala/li/cil/oc/common/item/RedstoneCard.scala b/src/main/scala/li/cil/oc/common/item/RedstoneCard.scala
index 5810a4b4a..db8c0c34e 100644
--- a/src/main/scala/li/cil/oc/common/item/RedstoneCard.scala
+++ b/src/main/scala/li/cil/oc/common/item/RedstoneCard.scala
@@ -3,8 +3,6 @@ package li.cil.oc.common.item
import java.util
import li.cil.oc.common.Tier
-import li.cil.oc.integration.Mods
-import li.cil.oc.util.Tooltip
import net.minecraft.item.ItemStack
class RedstoneCard(val parent: Delegator, val tier: Int) extends traits.Delegate with traits.ItemTier {
@@ -18,21 +16,10 @@ class RedstoneCard(val parent: Delegator, val tier: Int) extends traits.Delegate
override protected def tooltipExtended(stack: ItemStack, tooltip: util.List[String]) {
super.tooltipExtended(stack, tooltip)
if (tier == Tier.Two) {
- if (Mods.ProjectRedTransmission.isAvailable) {
- tooltip.addAll(Tooltip.get(super.unlocalizedName + ".ProjectRed"))
- }
- if (Mods.RedLogic.isAvailable) {
- tooltip.addAll(Tooltip.get(super.unlocalizedName + ".RedLogic"))
- }
- if (Mods.MineFactoryReloaded.isAvailable) {
- tooltip.addAll(Tooltip.get(super.unlocalizedName + ".RedNet"))
- }
- if (Mods.WirelessRedstoneCBE.isAvailable) {
- tooltip.addAll(Tooltip.get(super.unlocalizedName + ".WirelessCBE"))
- }
- if (Mods.WirelessRedstoneSVE.isAvailable) {
- tooltip.addAll(Tooltip.get(super.unlocalizedName + ".WirelessSV"))
- }
+ // TODO Generic system for redstone integration modules to register in a list of tooltip lines.
+ // if (Mods.MOD_NAME.isAvailable) {
+ // tooltip.addAll(Tooltip.get(super.unlocalizedName + ".MOD_NAME"))
+ // }
}
}
}
diff --git a/src/main/scala/li/cil/oc/common/item/WorldSensorCard.scala b/src/main/scala/li/cil/oc/common/item/WorldSensorCard.scala
deleted file mode 100644
index ac42f58cb..000000000
--- a/src/main/scala/li/cil/oc/common/item/WorldSensorCard.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package li.cil.oc.common.item
-
-import li.cil.oc.integration.Mods
-
-class WorldSensorCard(val parent: Delegator) extends traits.Delegate with traits.ItemTier {
- showInItemList = Mods.Galacticraft.isAvailable
-}
diff --git a/src/main/scala/li/cil/oc/common/item/Wrench.scala b/src/main/scala/li/cil/oc/common/item/Wrench.scala
index 8f7dc80e1..3878b5328 100644
--- a/src/main/scala/li/cil/oc/common/item/Wrench.scala
+++ b/src/main/scala/li/cil/oc/common/item/Wrench.scala
@@ -1,12 +1,7 @@
package li.cil.oc.common.item
import li.cil.oc.api
-import li.cil.oc.common.asm.Injectable
-import li.cil.oc.integration.Mods
import net.minecraft.block.Block
-import net.minecraft.entity.Entity
-import net.minecraft.entity.EntityLivingBase
-import net.minecraft.entity.item.EntityMinecart
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.init.Blocks
import net.minecraft.item.ItemStack
@@ -17,18 +12,6 @@ import net.minecraft.util.math.BlockPos
import net.minecraft.world.IBlockAccess
import net.minecraft.world.World
-@Injectable.InterfaceList(Array(
- new Injectable.Interface(value = "appeng.api.implementations.items.IAEWrench", modid = Mods.IDs.AppliedEnergistics2),
- new Injectable.Interface(value = "buildcraft.api.tools.IToolWrench", modid = Mods.IDs.BuildCraftTools),
- new Injectable.Interface(value = "com.bluepowermod.api.misc.IScrewdriver", modid = Mods.IDs.BluePower),
- new Injectable.Interface(value = "cofh.api.item.IToolHammer", modid = Mods.IDs.CoFHItem),
- new Injectable.Interface(value = "crazypants.enderio.api.tool.ITool", modid = Mods.IDs.EnderIO),
- new Injectable.Interface(value = "mekanism.api.IMekWrench", modid = Mods.IDs.Mekanism),
- new Injectable.Interface(value = "powercrystals.minefactoryreloaded.api.IMFRHammer", modid = Mods.IDs.MineFactoryReloaded),
- new Injectable.Interface(value = "mrtjp.projectred.api.IScrewdriver", modid = Mods.IDs.ProjectRedCore),
- new Injectable.Interface(value = "mods.railcraft.api.core.items.IToolCrowbar", modid = Mods.IDs.Railcraft),
- new Injectable.Interface(value = "ic2.api.item.IBoxable", modid = Mods.IDs.IndustrialCraft2)
-))
class Wrench extends traits.SimpleItem with api.internal.Wrench {
setHarvestLevel("wrench", 1)
setMaxStackSize(1)
@@ -51,80 +34,4 @@ class Wrench extends traits.SimpleItem with api.internal.Wrench {
if (!simulate) player.swingArm(EnumHand.MAIN_HAND)
true
}
-
- // Applied Energistics 2
-
- def canWrench(stack: ItemStack, player: EntityPlayer, pos: BlockPos): Boolean = true
-
- // BluePower
-
- def damage(stack: ItemStack, damage: Int, player: EntityPlayer, simulated: Boolean): Boolean = damage == 0
-
- // BuildCraft
-
- def canWrench(player: EntityPlayer, pos: BlockPos): Boolean = true
-
- def wrenchUsed(player: EntityPlayer, pos: BlockPos): Unit = player.swingArm(EnumHand.MAIN_HAND)
-
- def canWrench(player: EntityPlayer, entity: Entity): Boolean = true
-
- def wrenchUsed(player: EntityPlayer, entity: Entity): Unit = player.swingArm(EnumHand.MAIN_HAND)
-
- // CoFH
-
- def isUsable(stack: ItemStack, player: EntityLivingBase, pos: BlockPos): Boolean = true
-
- def isUsable(stack: ItemStack, player: EntityLivingBase, entity: Entity): Boolean = true
-
- def toolUsed(stack: ItemStack, player: EntityLivingBase, pos: BlockPos): Unit = player.swingArm(EnumHand.MAIN_HAND)
-
- def toolUsed(stack: ItemStack, player: EntityLivingBase, entity: Entity): Unit = player.swingArm(EnumHand.MAIN_HAND)
-
- // Compat for people shipping unofficial CoFH APIs... -.-
-
- def isUsable(stack: ItemStack, player: EntityLivingBase, x: Int, y: Int, z: Int): Boolean = true
-
- def toolUsed(stack: ItemStack, player: EntityLivingBase, x: Int, y: Int, z: Int): Unit = player.swingArm(EnumHand.MAIN_HAND)
-
- // EnderIO
-
- def canUse(stack: ItemStack, player: EntityPlayer, pos: BlockPos): Boolean = true
-
- def used(stack: ItemStack, player: EntityPlayer, pos: BlockPos): Unit = {}
-
- def shouldHideFacades(stack: ItemStack, player: EntityPlayer): Boolean = false
-
- // Mekanism
-
- def canUseWrench(player: EntityPlayer, pos: BlockPos): Boolean = true
-
- def canUseWrench(stack: ItemStack, player: EntityPlayer, pos: BlockPos): Boolean = true
-
- // Project Red
-
- def canUse(entityPlayer: EntityPlayer, itemStack: ItemStack): Boolean = true
-
- // pre v4.7
- def damageScrewdriver(world: World, player: EntityPlayer): Unit = {}
-
- // v4.7+
- def damageScrewdriver(player: EntityPlayer, stack: ItemStack): Unit = {}
-
- // Railcraft
-
- def canWhack(player: EntityPlayer, stack: ItemStack, pos: BlockPos): Boolean = true
-
- def onWhack(player: EntityPlayer, stack: ItemStack, pos: BlockPos): Unit = {}
-
- def canLink(player: EntityPlayer, stack: ItemStack, cart: EntityMinecart): Boolean = false
-
- def onLink(player: EntityPlayer, stack: ItemStack, cart: EntityMinecart): Unit = {}
-
- def canBoost(player: EntityPlayer, stack: ItemStack, cart: EntityMinecart): Boolean = false
-
- def onBoost(player: EntityPlayer, stack: ItemStack, cart: EntityMinecart): Unit = {}
-
- // IndustrialCraft 2
-
- def canBeStoredInToolbox(stack: ItemStack): Boolean = true
}
diff --git a/src/main/scala/li/cil/oc/common/item/traits/Chargeable.scala b/src/main/scala/li/cil/oc/common/item/traits/Chargeable.scala
index bcc5d1a23..1f58aba45 100644
--- a/src/main/scala/li/cil/oc/common/item/traits/Chargeable.scala
+++ b/src/main/scala/li/cil/oc/common/item/traits/Chargeable.scala
@@ -1,90 +1,13 @@
package li.cil.oc.common.item.traits
-import ic2.api.item.IElectricItemManager
-import li.cil.oc.Settings
import li.cil.oc.api
-import li.cil.oc.common.asm.Injectable
-import li.cil.oc.integration.Mods
-import li.cil.oc.integration.ic2.ElectricItemManager
-import li.cil.oc.integration.util.Power
import net.minecraft.item.ItemStack
-import net.minecraftforge.fml.common.Optional
-@Injectable.InterfaceList(Array(
- // new Injectable.Interface(value = "appeng.api.implementations.items.IAEItemPowerStorage", modid = Mods.IDs.AppliedEnergistics2),
- new Injectable.Interface(value = "cofh.api.energy.IEnergyContainerItem", modid = Mods.IDs.CoFHEnergy),
- new Injectable.Interface(value = "ic2.api.item.ISpecialElectricItem", modid = Mods.IDs.IndustrialCraft2),
- new Injectable.Interface(value = "mekanism.api.energy.IEnergizedItem", modid = Mods.IDs.Mekanism)
-))
+// TODO Forge power capabilities.
trait Chargeable extends api.driver.item.Chargeable {
def maxCharge(stack: ItemStack): Double
def getCharge(stack: ItemStack): Double
def setCharge(stack: ItemStack, amount: Double): Unit
-
- // Applied Energistics 2
- /* TODO AE2
- def getAECurrentPower(stack: ItemStack): Double =
- Power.toAE(getCharge(stack))
-
- def getAEMaxPower(stack: ItemStack): Double =
- Power.toAE(maxCharge(stack))
-
- def injectAEPower(stack: ItemStack, value: Double): Double =
- Power.toAE(charge(stack, Power.fromAE(value), false))
-
- def extractAEPower(stack: ItemStack, value: Double): Double =
- value - Power.toAE(charge(stack, Power.fromAE(-value), false))
-
- @Optional.Method(modid = Mods.IDs.AppliedEnergistics2)
- def getPowerFlow(stack: ItemStack): AccessRestriction = AccessRestriction.WRITE
- */
-
- // IndustrialCraft 2
-
- @Optional.Method(modid = Mods.IDs.IndustrialCraft2)
- def getManager(stack: ItemStack): IElectricItemManager = ElectricItemManager
-
- def getMaxCharge(stack: ItemStack): Double = Power.toEU(maxCharge(stack))
-
- def getTransferLimit(stack: ItemStack): Double = Power.toEU(Settings.get.chargeRateTablet)
-
- def getTier(stack: ItemStack): Int = 1
-
- def canProvideEnergy(stack: ItemStack): Boolean = false
-
- // Mekanism
-
- def getEnergy(stack: ItemStack): Double =
- Power.toJoules(getCharge(stack))
-
- def setEnergy(stack: ItemStack, amount: Double): Unit =
- setCharge(stack, Power.fromJoules(amount))
-
- def getMaxEnergy(stack: ItemStack): Double =
- Power.toJoules(maxCharge(stack))
-
- def canSend(stack: ItemStack): Boolean = false
-
- def canReceive(stack: ItemStack): Boolean = true
-
- def isMetadataSpecific(stack: ItemStack): Boolean = false
-
- def getMaxTransfer(stack: ItemStack): Double =
- Power.toJoules(Settings.get.chargeRateTablet)
-
- // Redstone Flux
-
- def getEnergyStored(stack: ItemStack): Int =
- Power.toRF(getCharge(stack))
-
- def getMaxEnergyStored(stack: ItemStack): Int =
- Power.toRF(maxCharge(stack))
-
- def receiveEnergy(stack: ItemStack, maxReceive: Int, simulate: Boolean): Int =
- maxReceive - Power.toRF(charge(stack, Power.fromRF(maxReceive), simulate))
-
- def extractEnergy(stack: ItemStack, maxExtract: Int, simulate: Boolean): Int =
- maxExtract - Power.toRF(charge(stack, Power.fromRF(-maxExtract), simulate))
}
diff --git a/src/main/scala/li/cil/oc/common/recipe/ExtendedRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/ExtendedRecipe.scala
index a6f1d30c6..7957a791c 100644
--- a/src/main/scala/li/cil/oc/common/recipe/ExtendedRecipe.scala
+++ b/src/main/scala/li/cil/oc/common/recipe/ExtendedRecipe.scala
@@ -61,7 +61,6 @@ object ExtendedRecipe {
}
if (api.Items.get(craftedStack) == linkedCard) {
- if (weAreBeingCalledFromAppliedEnergistics2) return disabled.copy()
if (SideTracker.isServer) {
Option(api.Driver.driverFor(craftedStack)).foreach(driver => {
val nbt = driver.dataTag(craftedStack)
@@ -206,8 +205,6 @@ object ExtendedRecipe {
}
}
- private def weAreBeingCalledFromAppliedEnergistics2 = Mods.AppliedEnergistics2.isAvailable && new Exception().getStackTrace.exists(_.getClassName == "appeng.container.implementations.ContainerPatternTerm")
-
private trait ItemDataWrapper {
def components: Array[ItemStack]
diff --git a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala
index 1da6d019b..513ecf8e3 100644
--- a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala
+++ b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala
@@ -6,6 +6,7 @@ import li.cil.oc.integration.util.Wrench
import net.minecraft.inventory.InventoryCrafting
import net.minecraft.item.ItemStack
import net.minecraft.item.crafting.IRecipe
+import net.minecraft.util.NonNullList
import net.minecraft.world.World
class LootDiskCyclingRecipe extends IRecipe {
@@ -34,12 +35,12 @@ class LootDiskCyclingRecipe extends IRecipe {
override def getRecipeOutput: ItemStack = null
- override def getRemainingItems(crafting: InventoryCrafting): Array[ItemStack] = {
- val result = new Array[ItemStack](crafting.getSizeInventory)
+ override def getRemainingItems(crafting: InventoryCrafting): NonNullList[ItemStack] = {
+ val result = NonNullList.withSize[ItemStack](crafting.getSizeInventory, ItemStack.EMPTY)
for (slot <- 0 until crafting.getSizeInventory) {
val stack = crafting.getStackInSlot(slot)
if (Wrench.isWrench(stack)) {
- result(slot) = stack.copy()
+ result.set(slot, stack.copy())
stack.setCount(0)
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala
index 5164599ee..69834c25a 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala
@@ -52,11 +52,11 @@ class Adapter extends traits.Environment with traits.ComponentInventory with tra
super.setSideOpen(side, value)
if (isServer) {
ServerPacketSender.sendAdapterState(this)
- world.playSound(null, x + 0.5, y + 0.5, z + 0.5, SoundEvents.BLOCK_PISTON_EXTEND, SoundCategory.BLOCKS, 0.5f, world.rand.nextFloat() * 0.25f + 0.7f)
- world.notifyNeighborsOfStateChange(getPos, getBlockType, false)
+ getWorld.playSound(null, x + 0.5, y + 0.5, z + 0.5, SoundEvents.BLOCK_PISTON_EXTEND, SoundCategory.BLOCKS, 0.5f, getWorld.rand.nextFloat() * 0.25f + 0.7f)
+ getWorld.notifyNeighborsOfStateChange(getPos, getBlockType, false)
neighborChanged(side)
} else {
- world.notifyBlockUpdate(getPos, world.getBlockState(getPos), world.getBlockState(getPos), 3)
+ getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
}
}
@@ -80,7 +80,7 @@ class Adapter extends traits.Environment with traits.ComponentInventory with tra
def neighborChanged(d: EnumFacing) {
if (node != null && node.network != null) {
val blockPos = getPos.offset(d)
- world.getTileEntity(blockPos) match {
+ getWorld.getTileEntity(blockPos) match {
case env: traits.Environment =>
// Don't provide adaption for our stuffs. This is mostly to avoid
// cables and other non-functional stuff popping up in the adapter
@@ -88,7 +88,7 @@ class Adapter extends traits.Environment with traits.ComponentInventory with tra
// but the only 'downside' is that it can't be used to manipulate
// inventories, which I actually consider a plus :P
case _ =>
- Option(api.Driver.driverFor(world, blockPos, d)) match {
+ Option(api.Driver.driverFor(getWorld, blockPos, d)) match {
case Some(newDriver) if isSideOpen(d) => blocks(d.ordinal()) match {
case Some((oldEnvironment, driver)) =>
if (newDriver != driver) {
@@ -99,7 +99,7 @@ class Adapter extends traits.Environment with traits.ComponentInventory with tra
node.disconnect(oldEnvironment.node)
// Then rebuild - if we have something.
- val environment = newDriver.createEnvironment(world, blockPos, d)
+ val environment = newDriver.createEnvironment(getWorld, blockPos, d)
if (environment != null) {
blocks(d.ordinal()) = Some((environment, newDriver))
if (environment.canUpdate) {
@@ -114,7 +114,7 @@ class Adapter extends traits.Environment with traits.ComponentInventory with tra
return
}
// A challenger appears. Maybe.
- val environment = newDriver.createEnvironment(world, blockPos, d)
+ val environment = newDriver.createEnvironment(getWorld, blockPos, d)
if (environment != null) {
blocks(d.ordinal()) = Some((environment, newDriver))
if (environment.canUpdate) {
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala
index 1c9d21e39..27a7053d3 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala
@@ -123,7 +123,7 @@ class Assembler extends traits.Environment with traits.PowerAcceptor with traits
override def updateEntity() {
super.updateEntity()
- if (output.isDefined && world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
+ if (output.isDefined && getWorld.getTotalWorldTime % Settings.get.tickFrequency == 0) {
val want = math.max(1, math.min(requiredEnergy, Settings.get.assemblerTickAmount * Settings.get.tickFrequency))
val have = want + (if (Settings.get.ignorePower) 0 else node.changeBuffer(-want))
requiredEnergy -= have
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Cable.scala b/src/main/scala/li/cil/oc/common/tileentity/Cable.scala
index 7c2596260..3bbde8215 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Cable.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Cable.scala
@@ -35,10 +35,10 @@ class Cable extends traits.Environment with traits.NotAnalyzable with traits.Imm
override protected def onColorChanged() {
super.onColorChanged()
- if (world != null && isServer) {
+ if (getWorld != null && isServer) {
api.Network.joinOrCreateNetwork(this)
}
}
- override def getRenderBoundingBox = common.block.Cable.bounds(world, getPos).offset(x, y, z)
+ override def getRenderBoundingBox = common.block.Cable.bounds(getWorld, getPos).offset(x, y, z)
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala
index 06a2f8dde..b7efddbae 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala
@@ -37,7 +37,7 @@ class Capacitor extends traits.Environment with DeviceInfo {
super.dispose()
if (isServer) {
indirectNeighbors.map(coordinate => {
- if (world.isBlockLoaded(coordinate)) Option(world.getTileEntity(coordinate))
+ if (getWorld.isBlockLoaded(coordinate)) Option(getWorld.getTileEntity(coordinate))
else None
}).collect {
case Some(capacitor: Capacitor) => capacitor.recomputeCapacity()
@@ -59,12 +59,12 @@ class Capacitor extends traits.Environment with DeviceInfo {
Settings.get.bufferCapacitor +
Settings.get.bufferCapacitorAdjacencyBonus * EnumFacing.values.count(side => {
val blockPos = getPos.offset(side)
- world.isBlockLoaded(blockPos) && (world.getTileEntity(blockPos) match {
+ getWorld.isBlockLoaded(blockPos) && (getWorld.getTileEntity(blockPos) match {
case capacitor: Capacitor => true
case _ => false
})
}) +
- Settings.get.bufferCapacitorAdjacencyBonus / 2 * indirectNeighbors.count(blockPos => world.isBlockLoaded(blockPos) && (world.getTileEntity(blockPos) match {
+ Settings.get.bufferCapacitorAdjacencyBonus / 2 * indirectNeighbors.count(blockPos => getWorld.isBlockLoaded(blockPos) && (getWorld.getTileEntity(blockPos) match {
case capacitor: Capacitor =>
if (updateSecondGradeNeighbors) {
capacitor.recomputeCapacity()
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Case.scala b/src/main/scala/li/cil/oc/common/tileentity/Case.scala
index 090e48297..83ccbfab7 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala
@@ -62,7 +62,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with
// ----------------------------------------------------------------------- //
override def updateEntity() {
- if (isServer && isCreative && world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
+ if (isServer && isCreative && getWorld.getTotalWorldTime % Settings.get.tickFrequency == 0) {
// Creative case, make it generate power.
node.asInstanceOf[Connector].changeBuffer(Double.PositiveInfinity)
}
@@ -74,7 +74,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with
override protected def onRunningChanged(): Unit = {
super.onRunningChanged()
getBlockType match {
- case block: common.block.Case => world.setBlockState(getPos, world.getBlockState(getPos).withProperty(PropertyRunning.Running, Boolean.box(isRunning)))
+ case block: common.block.Case => getWorld.setBlockState(getPos, getWorld.getBlockState(getPos).withProperty(PropertyRunning.Running, Boolean.box(isRunning)))
case _ =>
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala
index 3fd6d4da6..8f6918354 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala
@@ -82,11 +82,11 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
super.updateEntity()
// Offset by hashcode to avoid all chargers ticking at the same time.
- if ((world.getWorldInfo.getWorldTotalTime + math.abs(hashCode())) % 20 == 0) {
+ if ((getWorld.getWorldInfo.getWorldTotalTime + math.abs(hashCode())) % 20 == 0) {
updateConnectors()
}
- if (isServer && world.getWorldInfo.getWorldTotalTime % Settings.get.tickFrequency == 0) {
+ if (isServer && getWorld.getWorldInfo.getWorldTotalTime % Settings.get.tickFrequency == 0) {
var canCharge = Settings.get.ignorePower
// Charging of external devices.
@@ -121,15 +121,15 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
}
}
- if (isClient && chargeSpeed > 0 && hasPower && world.getWorldInfo.getWorldTotalTime % 10 == 0) {
+ if (isClient && chargeSpeed > 0 && hasPower && getWorld.getWorldInfo.getWorldTotalTime % 10 == 0) {
connectors.foreach(connector => {
val position = connector.pos
- val theta = world.rand.nextDouble * Math.PI
- val phi = world.rand.nextDouble * Math.PI * 2
+ val theta = getWorld.rand.nextDouble * Math.PI
+ val phi = getWorld.rand.nextDouble * Math.PI * 2
val dx = 0.45 * Math.sin(theta) * Math.cos(phi)
val dy = 0.45 * Math.sin(theta) * Math.sin(phi)
val dz = 0.45 * Math.cos(theta)
- world.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, position.xCoord + dx, position.yCoord + dz, position.zCoord + dy, 0, 0, 0)
+ getWorld.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, position.xCoord + dx, position.yCoord + dz, position.zCoord + dy, 0, 0, 0)
})
}
}
@@ -222,17 +222,17 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
def updateConnectors() {
val robots = EnumFacing.values.map(side => {
val blockPos = BlockPosition(this).offset(side)
- if (world.blockExists(blockPos)) Option(world.getTileEntity(blockPos))
+ if (getWorld.blockExists(blockPos)) Option(getWorld.getTileEntity(blockPos))
else None
}).collect {
case Some(t: RobotProxy) => new RobotChargeable(t.robot)
}
val bounds = BlockPosition(this).bounds.expand(1, 1, 1)
- val drones = world.getEntitiesWithinAABB(classOf[Drone], bounds).collect {
+ val drones = getWorld.getEntitiesWithinAABB(classOf[Drone], bounds).collect {
case drone: Drone => new DroneChargeable(drone)
}
- val players = world.getEntitiesWithinAABB(classOf[EntityPlayer], bounds).collect {
+ val players = getWorld.getEntitiesWithinAABB(classOf[EntityPlayer], bounds).collect {
case player: EntityPlayer if api.Nanomachines.hasController(player) => new PlayerChargeable(player)
}
@@ -242,7 +242,7 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
if (connectors.size != newConnectors.length || (connectors.nonEmpty && (connectors -- newConnectors).nonEmpty)) {
connectors.clear()
connectors ++= newConnectors
- world.notifyNeighborsOfStateChange(getPos, getBlockType, false)
+ getWorld.notifyNeighborsOfStateChange(getPos, getBlockType, false)
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala
index beedcf4bd..31addcd0c 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala
@@ -46,7 +46,7 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra
private def setActive(value: Boolean) = if (value != isActive) {
isActive = value
ServerPacketSender.sendDisassemblerActive(this, isActive)
- world.notifyNeighborsOfStateChange(getPos, getBlockType, true)
+ getWorld.notifyNeighborsOfStateChange(getPos, getBlockType, true)
}
private final lazy val deviceInfo = Map(
@@ -77,7 +77,7 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra
override def updateEntity() {
super.updateEntity()
- if (isServer && world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
+ if (isServer && getWorld.getTotalWorldTime % Settings.get.tickFrequency == 0) {
if (queue.isEmpty) {
val instant = disassembleNextInstantly // Is reset via decrStackSize
disassemble(decrStackSize(0, 1), instant)
@@ -95,7 +95,7 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra
while (buffer >= Settings.get.disassemblerItemCost && queue.nonEmpty) {
buffer -= Settings.get.disassemblerItemCost
val stack = queue.remove(0)
- if (disassembleNextInstantly || world.rand.nextDouble >= Settings.get.disassemblerBreakChance) {
+ if (disassembleNextInstantly || getWorld.rand.nextDouble >= Settings.get.disassemblerBreakChance) {
drop(stack)
}
}
@@ -184,13 +184,13 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra
override def setInventorySlotContents(slot: Int, stack: ItemStack): Unit = {
super.setInventorySlotContents(slot, stack)
- if (!world.isRemote) {
+ if (!getWorld.isRemote) {
disassembleNextInstantly = false
}
}
override def onSetInventorySlotContents(player: EntityPlayer, slot: Int, stack: ItemStack): Unit = {
- if (!world.isRemote) {
+ if (!getWorld.isRemote) {
disassembleNextInstantly = stack != null && slot == 0 && player.capabilities.isCreativeMode
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala
index e70388f97..bc0b7dbb4 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala
@@ -3,16 +3,15 @@ package li.cil.oc.common.tileentity
import java.util
import li.cil.oc._
+import li.cil.oc.api.driver.DeviceInfo
import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute
import li.cil.oc.api.driver.DeviceInfo.DeviceClass
-import li.cil.oc.api.driver.DeviceInfo
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.Analyzable
import li.cil.oc.api.network._
import li.cil.oc.common.SaveHandler
-import li.cil.oc.integration.util.Waila
import li.cil.oc.server.{PacketSender => ServerPacketSender}
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.nbt.NBTTagCompound
@@ -407,7 +406,7 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w
ServerPacketSender.sendHologramValues(this)
resetDirtyFlag()
}
- if (world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
+ if (getWorld.getTotalWorldTime % Settings.get.tickFrequency == 0) {
if (litRatio < 0) this.synchronized {
litRatio = 0
for (i <- volume.indices) {
@@ -440,7 +439,8 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w
val cx = x + 0.5
val cy = y + 0.5
val cz = z + 0.5
- val sh = width / 16 * scale * Sqrt2 // overscale to take into account 45 degree rotation
+ val sh = width / 16 * scale * Sqrt2
+ // overscale to take into account 45 degree rotation
val sv = height / 16 * scale * Sqrt2
new AxisAlignedBB(
cx + (-0.5 + translation.xCoord) * sh,
@@ -454,6 +454,7 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w
// ----------------------------------------------------------------------- //
private def dataPath = node.address + "_data"
+
private final val TierTag = Settings.namespace + "tier"
private final val VolumeTag = "volume"
private final val ColorsTag = "colors"
@@ -495,12 +496,10 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w
override def writeToNBTForServer(nbt: NBTTagCompound) = this.synchronized {
nbt.setByte(TierTag, tier.toByte)
super.writeToNBTForServer(nbt)
- if (!Waila.isSavingForTooltip) {
- SaveHandler.scheduleSave(world, x, z, nbt, dataPath, tag => {
- tag.setIntArray(VolumeTag, volume)
- tag.setIntArray(ColorsTag, colors.map(convertColor))
- })
- }
+ SaveHandler.scheduleSave(getWorld, x, z, nbt, dataPath, tag => {
+ tag.setIntArray(VolumeTag, volume)
+ tag.setIntArray(ColorsTag, colors.map(convertColor))
+ })
nbt.setDouble(ScaleTag, scale)
nbt.setDouble(OffsetXTag, translation.xCoord)
nbt.setDouble(OffsetYTag, translation.yCoord)
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala
index ff2633b18..02c95bb19 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala
@@ -130,7 +130,7 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C
super.updateEntity()
// Pump energy into the internal network.
- if (isServer && world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
+ if (isServer && getWorld.getTotalWorldTime % Settings.get.tickFrequency == 0) {
for (side <- EnumFacing.values if side != facing) {
sidedNode(side) match {
case connector: Connector =>
diff --git a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala
index 01d9c8a8f..873233629 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala
@@ -48,11 +48,11 @@ class MotionSensor extends traits.Environment with traits.Tickable with DeviceIn
override def updateEntity() {
super.updateEntity()
- if (isServer && world.getTotalWorldTime % 10 == 0) {
+ if (isServer && getWorld.getTotalWorldTime % 10 == 0) {
// Get a list of all living entities we could possibly detect, using a rough
// bounding box check, then refining it using the actual distance and an
// actual visibility check.
- val entities = world.getEntitiesWithinAABB(classOf[EntityLivingBase], sensorBounds)
+ val entities = getWorld.getEntitiesWithinAABB(classOf[EntityLivingBase], sensorBounds)
.filter(entity => entity.isEntityAlive && isInRange(entity) && isVisible(entity))
.toSet
// Get rid of all tracked entities that are no longer visible.
@@ -98,7 +98,7 @@ class MotionSensor extends traits.Environment with traits.Tickable with DeviceIn
if (entity.posY > y + 1) oy += 0.75
if (entity.posZ < z) oz -= 0.75
if (entity.posZ > z + 1) oz += 0.75
- world.rayTraceBlocks(new Vec3d(ox, oy, oz), target) == null
+ getWorld.rayTraceBlocks(new Vec3d(ox, oy, oz), target) == null
}
private def sendSignal(entity: EntityLivingBase) {
diff --git a/src/main/scala/li/cil/oc/common/tileentity/NetSplitter.scala b/src/main/scala/li/cil/oc/common/tileentity/NetSplitter.scala
index 35b00f7bd..90a720913 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/NetSplitter.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/NetSplitter.scala
@@ -28,11 +28,11 @@ class NetSplitter extends traits.Environment with traits.OpenSides with traits.R
node.remove()
api.Network.joinOrCreateNetwork(this)
ServerPacketSender.sendNetSplitterState(this)
- world.playSound(null, x + 0.5, y + 0.5, z + 0.5, SoundEvents.BLOCK_PISTON_EXTEND, SoundCategory.BLOCKS, 0.5f, world.rand.nextFloat() * 0.25f + 0.7f)
- world.notifyNeighborsOfStateChange(getPos, getBlockType, false)
+ getWorld.playSound(null, x + 0.5, y + 0.5, z + 0.5, SoundEvents.BLOCK_PISTON_EXTEND, SoundCategory.BLOCKS, 0.5f, getWorld.rand.nextFloat() * 0.25f + 0.7f)
+ getWorld.notifyNeighborsOfStateChange(getPos, getBlockType, false)
}
else {
- world.notifyBlockUpdate(getPos, world.getBlockState(getPos), world.getBlockState(getPos), 3)
+ getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
}
}
@@ -61,10 +61,10 @@ class NetSplitter extends traits.Environment with traits.OpenSides with traits.R
node.remove()
api.Network.joinOrCreateNetwork(this)
ServerPacketSender.sendNetSplitterState(this)
- world.playSound(null, x + 0.5, y + 0.5, z + 0.5, SoundEvents.BLOCK_PISTON_CONTRACT, SoundCategory.BLOCKS, 0.5f, world.rand.nextFloat() * 0.25f + 0.7f)
+ getWorld.playSound(null, x + 0.5, y + 0.5, z + 0.5, SoundEvents.BLOCK_PISTON_CONTRACT, SoundCategory.BLOCKS, 0.5f, getWorld.rand.nextFloat() * 0.25f + 0.7f)
}
else {
- world.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
+ getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
}
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala
index eb533e96d..324b61e61 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala
@@ -194,7 +194,7 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat
texture, tint)
isActive = false // Needs committing.
- world.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
+ getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
result(true)
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala
index 4379318d5..7bed2f888 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala
@@ -316,7 +316,7 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance
ServerPacketSender.sendRackInventory(this)
}
else {
- world.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
+ getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
}
}
@@ -365,7 +365,7 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance
hasChanged(slot) = false
lastData(slot) = mountable.getData
ServerPacketSender.sendRackMountableData(this, slot)
- world.notifyNeighborsOfStateChange(getPos, getBlockType, false)
+ getWorld.notifyNeighborsOfStateChange(getPos, getBlockType, false)
// These are working state dependent, so recompute them.
isOutputEnabled = hasRedstoneCard
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Relay.scala b/src/main/scala/li/cil/oc/common/tileentity/Relay.scala
index 93f0f1e8b..a48fa9fee 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Relay.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Relay.scala
@@ -120,16 +120,6 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits
}
}
- override def tryEnqueuePacket(sourceSide: Option[EnumFacing], packet: Packet): Boolean = {
- if (Mods.ComputerCraft.isAvailable) {
- packet.data.headOption match {
- case Some(answerPort: java.lang.Double) => queueMessage(packet.source, packet.destination, packet.port, answerPort.toInt, packet.data.drop(1))
- case _ => queueMessage(packet.source, packet.destination, packet.port, -1, packet.data)
- }
- }
- super.tryEnqueuePacket(sourceSide, packet)
- }
-
override protected def relayPacket(sourceSide: Option[EnumFacing], packet: Packet): Unit = {
super.relayPacket(sourceSide, packet)
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala
index b45dd3eb2..1f338e1e7 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala
@@ -42,7 +42,10 @@ import net.minecraft.util.SoundCategory
import net.minecraft.util.math.AxisAlignedBB
import net.minecraft.util.math.BlockPos
import net.minecraftforge.common.MinecraftForge
+import net.minecraftforge.common.capabilities.Capability
import net.minecraftforge.fluids._
+import net.minecraftforge.fluids.capability.CapabilityFluidHandler
+import net.minecraftforge.fluids.capability.IFluidHandler
import net.minecraftforge.fml.relauncher.Side
import net.minecraftforge.fml.relauncher.SideOnly
@@ -65,8 +68,17 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
machine.setCostPerTick(Settings.get.robotCost)
}
+
+
// ----------------------------------------------------------------------- //
+ override def getCapability[T](capability: Capability[T], facing: EnumFacing): T = {
+ if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
+ capability.cast(this.asInstanceOf[T])
+ else
+ super.getCapability(capability, facing)
+ }
+
override def tier = info.tier
def isCreative = tier == Tier.Four
@@ -96,7 +108,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
override def setSelectedSlot(index: Int): Unit = {
selectedSlot = index max 0 min mainInventory.getSizeInventory - 1
- if (world != null) {
+ if (getWorld != null) {
ServerPacketSender.sendRobotSelectedSlotChange(this)
}
}
@@ -189,7 +201,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
def move(direction: EnumFacing): Boolean = {
val oldPosition = getPos
val newPosition = oldPosition.offset(direction)
- if (!world.isBlockLoaded(newPosition)) {
+ if (!getWorld.isBlockLoaded(newPosition)) {
return false // Don't fall off the earth.
}
@@ -201,8 +213,8 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
val blockRobotProxy = api.Items.get(Constants.BlockName.Robot).block.asInstanceOf[common.block.RobotProxy]
val blockRobotAfterImage = api.Items.get(Constants.BlockName.RobotAfterimage).block.asInstanceOf[common.block.RobotAfterimage]
- val wasAir = world.isAirBlock(newPosition)
- val state = world.getBlockState(newPosition)
+ val wasAir = getWorld.isAirBlock(newPosition)
+ val state = getWorld.getBlockState(newPosition)
val block = state.getBlock
val metadata = block.getMetaFromState(state)
try {
@@ -214,16 +226,16 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
// worked before the client is notified so that we can use the same trick on
// the client by sending a corresponding packet. This also saves us from
// having to send the complete state again (e.g. screen buffer) each move.
- world.setBlockToAir(newPosition)
+ getWorld.setBlockToAir(newPosition)
// In some cases (though I couldn't quite figure out which one) setBlock
// will return true, even though the block was not created / adjusted.
- val created = world.setBlockState(newPosition, world.getBlockState(oldPosition), 1) &&
- world.getTileEntity(newPosition) == proxy
+ val created = getWorld.setBlockState(newPosition, getWorld.getBlockState(oldPosition), 1) &&
+ getWorld.getTileEntity(newPosition) == proxy
if (created) {
assert(getPos == newPosition)
- world.setBlockState(oldPosition, net.minecraft.init.Blocks.AIR.getDefaultState, 1)
- world.setBlockState(oldPosition, blockRobotAfterImage.getDefaultState, 1)
- assert(world.getBlockState(oldPosition).getBlock == blockRobotAfterImage)
+ getWorld.setBlockState(oldPosition, net.minecraft.init.Blocks.AIR.getDefaultState, 1)
+ getWorld.setBlockState(oldPosition, blockRobotAfterImage.getDefaultState, 1)
+ assert(getWorld.getBlockState(oldPosition).getBlock == blockRobotAfterImage)
// Here instead of Lua callback so that it gets called on client, too.
val moveTicks = math.max((Settings.get.moveDelay * 20).toInt, 1)
setAnimateMove(oldPosition, moveTicks)
@@ -239,24 +251,24 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
if (FluidRegistry.lookupFluidForBlock(block) == null &&
!block.isInstanceOf[BlockFluidBase] &&
!block.isInstanceOf[BlockLiquid]) {
- world.playEvent(2001, newPosition, Block.getIdFromBlock(block) + (metadata << 12))
+ getWorld.playEvent(2001, newPosition, Block.getIdFromBlock(block) + (metadata << 12))
}
else {
val sx = newPosition.getX + 0.5
val sy = newPosition.getY + 0.5
val sz = newPosition.getZ + 0.5
- world.playSound(sx, sy, sz, SoundEvents.BLOCK_WATER_AMBIENT, SoundCategory.BLOCKS,
- world.rand.nextFloat * 0.25f + 0.75f, world.rand.nextFloat * 1.0f + 0.5f, false)
+ getWorld.playSound(sx, sy, sz, SoundEvents.BLOCK_WATER_AMBIENT, SoundCategory.BLOCKS,
+ getWorld.rand.nextFloat * 0.25f + 0.75f, getWorld.rand.nextFloat * 1.0f + 0.5f, false)
}
}
}
- world.notifyBlockUpdate(oldPosition)
- world.notifyBlockUpdate(newPosition)
+ getWorld.notifyBlockUpdate(oldPosition)
+ getWorld.notifyBlockUpdate(newPosition)
}
assert(!isInvalid)
}
else {
- world.setBlockToAir(newPosition)
+ getWorld.setBlockToAir(newPosition)
}
created
}
@@ -313,8 +325,8 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
override def shouldRenderInPass(pass: Int) = true
override def getRenderBoundingBox =
- if (getBlockType != null && world != null)
- getBlockType.getCollisionBoundingBox(world.getBlockState(getPos), world, getPos).expand(0.5, 0.5, 0.5).offset(getPos)
+ if (getBlockType != null && getWorld != null)
+ getBlockType.getCollisionBoundingBox(getWorld.getBlockState(getPos), getWorld, getPos).expand(0.5, 0.5, 0.5).offset(getPos)
else
new AxisAlignedBB(0, 0, 0, 1, 1, 1).offset(getPos)
@@ -331,7 +343,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
}
super.updateEntity()
if (isServer) {
- if (world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
+ if (getWorld.getTotalWorldTime % Settings.get.tickFrequency == 0) {
if (info.tier == 3) {
bot.node.changeBuffer(Double.PositiveInfinity)
}
@@ -355,7 +367,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
for (slot <- 0 until equipmentInventory.getSizeInventory + mainInventory.getSizeInventory) {
getStackInSlot(slot) match {
- case stack: ItemStack => try stack.updateAnimation(world, if (!world.isRemote) player_ else null, slot, slot == 0) catch {
+ case stack: ItemStack => try stack.updateAnimation(getWorld, if (!getWorld.isRemote) player_ else null, slot, slot == 0) catch {
case ignored: NullPointerException => // Client side item updates that need a player instance...
}
case _ =>
@@ -550,7 +562,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
}
if (isComponentSlot(slot, stack)) {
super.onItemAdded(slot, stack)
- world.notifyBlocksOfNeighborChange(position, getBlockType, updateObservers = false)
+ getWorld.notifyBlocksOfNeighborChange(position, getBlockType, updateObservers = false)
}
if (isInventorySlot(slot)) {
machine.signal("inventory_changed", Int.box(slot - equipmentInventory.getSizeInventory + 1))
@@ -576,7 +588,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
machine.signal("inventory_changed", Int.box(slot - equipmentInventory.getSizeInventory + 1))
}
if (isComponentSlot(slot, stack)) {
- world.notifyBlocksOfNeighborChange(position, getBlockType, updateObservers = false)
+ getWorld.notifyBlocksOfNeighborChange(position, getBlockType, updateObservers = false)
}
}
}
@@ -692,7 +704,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
components(slot) = None
}
getSizeInventory = realSize + componentCount
- if (world != null && isServer) {
+ if (getWorld != null && isServer) {
for (stack <- removed) {
player().inventory.addItemStackToInventory(stack)
spawnStackInWorld(stack, Option(facing))
@@ -730,7 +742,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
}
else super.setInventorySlotContents(slot, stack)
}
- else if (stack != null && stack.getCount > 0 && !world.isRemote) spawnStackInWorld(stack, Option(EnumFacing.UP))
+ else if (stack != null && stack.getCount > 0 && !getWorld.isRemote) spawnStackInWorld(stack, Option(EnumFacing.UP))
}
override def isUsableByPlayer(player: EntityPlayer) =
@@ -757,14 +769,14 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot
// ----------------------------------------------------------------------- //
override def dropSlot(slot: Int, count: Int, direction: Option[EnumFacing]) =
- InventoryUtils.dropSlot(BlockPosition(x, y, z, world), mainInventory, slot, count, direction)
+ InventoryUtils.dropSlot(BlockPosition(x, y, z, getWorld), mainInventory, slot, count, direction)
override def dropAllSlots() = {
- InventoryUtils.dropSlot(BlockPosition(x, y, z, world), this, 0, Int.MaxValue)
+ InventoryUtils.dropSlot(BlockPosition(x, y, z, getWorld), this, 0, Int.MaxValue)
for (slot <- containerSlots) {
- InventoryUtils.dropSlot(BlockPosition(x, y, z, world), this, slot, Int.MaxValue)
+ InventoryUtils.dropSlot(BlockPosition(x, y, z, getWorld), this, slot, Int.MaxValue)
}
- InventoryUtils.dropAllSlots(BlockPosition(x, y, z, world), mainInventory)
+ InventoryUtils.dropAllSlots(BlockPosition(x, y, z, getWorld), mainInventory)
}
// ----------------------------------------------------------------------- //
diff --git a/src/main/scala/li/cil/oc/common/tileentity/RobotProxy.scala b/src/main/scala/li/cil/oc/common/tileentity/RobotProxy.scala
index 9a517a42d..37d5b0ae7 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/RobotProxy.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/RobotProxy.scala
@@ -6,6 +6,9 @@ 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._
+import net.minecraftforge.common.capabilities.Capability
+import net.minecraftforge.fluids.capability.CapabilityFluidHandler
+import net.minecraftforge.fluids.capability.IFluidHandler
import net.minecraftforge.fml.relauncher.Side
import net.minecraftforge.fml.relauncher.SideOnly
@@ -21,13 +24,18 @@ import net.minecraft.nbt.NBTTagCompound
import net.minecraft.util.EnumFacing
import net.minecraftforge.fluids.Fluid
import net.minecraftforge.fluids.FluidStack
-import net.minecraftforge.fluids.IFluidHandler
class RobotProxy(val robot: Robot) extends traits.Computer with traits.PowerInformation with traits.RotatableTile with ISidedInventory with IFluidHandler with internal.Robot {
def this() = this(new Robot())
// ----------------------------------------------------------------------- //
+ override def getCapability[T](capability: Capability[T], facing: EnumFacing): T = {
+ if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
+ capability.cast(this.asInstanceOf[T])
+ else super.getCapability(capability, facing)
+ }
+
override val node = api.Network.newNode(this, Visibility.Network).
withComponent("robot", Visibility.Neighbors).
create()
@@ -112,7 +120,7 @@ class RobotProxy(val robot: Robot) extends traits.Computer with traits.PowerInfo
super.validate()
val firstProxy = robot.proxy == null
robot.proxy = this
- robot.setWorld(world)
+ robot.setWorld(getWorld)
robot.setPos(getPos)
if (firstProxy) {
robot.validate()
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Screen.scala b/src/main/scala/li/cil/oc/common/tileentity/Screen.scala
index 1f7c682ee..3d8983055 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Screen.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Screen.scala
@@ -66,7 +66,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with
override def canConnect(side: EnumFacing) = side != facing
// Allow connections from front for keyboards, and keyboards only...
- override def sidedNode(side: EnumFacing) = if (side != facing || (world.isBlockLoaded(getPos.offset(side)) && world.getTileEntity(getPos.offset(side)).isInstanceOf[Keyboard])) node else null
+ override def sidedNode(side: EnumFacing) = if (side != facing || (getWorld.isBlockLoaded(getPos.offset(side)) && getWorld.getTileEntity(getPos.offset(side)).isInstanceOf[Keyboard])) node else null
// ----------------------------------------------------------------------- //
@@ -81,7 +81,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with
def hasKeyboard = screens.exists(screen =>
EnumFacing.values.map(side => (side, {
val blockPos = BlockPosition(screen).offset(side)
- if (world.blockExists(blockPos)) world.getTileEntity(blockPos)
+ if (getWorld.blockExists(blockPos)) getWorld.getTileEntity(blockPos)
else null
})).exists {
case (side, keyboard: Keyboard) => keyboard.hasNodeOnSide(side.getOpposite)
@@ -113,7 +113,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with
if (ax <= border || ay <= border || ax >= width - border || ay >= height - border) {
return (false, None)
}
- if (!world.isRemote) return (true, None)
+ if (!getWorld.isRemote) return (true, None)
val (iw, ih) = (width - border * 2, height - border * 2)
val (rx, ry) = ((ax - border) / iw, (ay - border) / ih)
@@ -197,7 +197,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with
val lpos = project(current)
def tryQueue(dx: Int, dy: Int) {
val npos = unproject(lpos.x + dx, lpos.y + dy, lpos.z)
- if (world.blockExists(npos)) world.getTileEntity(npos) match {
+ if (getWorld.blockExists(npos)) getWorld.getTileEntity(npos) match {
case s: Screen if s.pitch == pitch && s.yaw == yaw && pending.add(s) => queue += s
case _ => // Ignore.
}
@@ -219,7 +219,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with
}
if (isClient) {
val bounds = current.origin.getRenderBoundingBox
- world.markBlockRangeForRenderUpdate(bounds.minX.toInt, bounds.minY.toInt, bounds.minZ.toInt,
+ getWorld.markBlockRangeForRenderUpdate(bounds.minX.toInt, bounds.minY.toInt, bounds.minZ.toInt,
bounds.maxX.toInt, bounds.maxY.toInt, bounds.maxZ.toInt)
}
}
@@ -373,7 +373,7 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with
val opos = project(origin)
def tryMergeTowards(dx: Int, dy: Int) = {
val npos = unproject(opos.x + dx, opos.y + dy, opos.z)
- world.blockExists(npos) && (world.getTileEntity(npos) match {
+ getWorld.blockExists(npos) && (getWorld.getTileEntity(npos) match {
case s: Screen if s.tier == tier && s.pitch == pitch && s.getColor == getColor && s.yaw == yaw && !screens.contains(s) =>
val spos = project(s.origin)
val canMergeAlongX = spos.y == opos.y && s.height == height && s.width + width <= Settings.get.maxScreenWidth
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Switch.scala b/src/main/scala/li/cil/oc/common/tileentity/Switch.scala
index 59f7ac4ca..090715988 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Switch.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Switch.scala
@@ -34,16 +34,6 @@ class Switch extends traits.SwitchLike with traits.NotAnalyzable with traits.Com
// ----------------------------------------------------------------------- //
- override def tryEnqueuePacket(sourceSide: Option[EnumFacing], packet: Packet): Boolean = {
- if (Mods.ComputerCraft.isAvailable) {
- packet.data.headOption match {
- case Some(answerPort: java.lang.Double) => queueMessage(packet.source, packet.destination, packet.port, answerPort.toInt, packet.data.drop(1))
- case _ => queueMessage(packet.source, packet.destination, packet.port, -1, packet.data)
- }
- }
- super.tryEnqueuePacket(sourceSide, packet)
- }
-
override protected def relayPacket(sourceSide: Option[EnumFacing], packet: Packet) {
super.relayPacket(sourceSide, packet)
onSwitchActivity()
diff --git a/src/main/scala/li/cil/oc/common/tileentity/Waypoint.scala b/src/main/scala/li/cil/oc/common/tileentity/Waypoint.scala
index 3e9e6a7db..be60238d1 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/Waypoint.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/Waypoint.scala
@@ -38,13 +38,13 @@ class Waypoint extends traits.Environment with traits.Rotatable with traits.Reds
super.updateEntity()
if (isClient) {
val origin = position.toVec3.addVector(facing.getFrontOffsetX * 0.5, facing.getFrontOffsetY * 0.5, facing.getFrontOffsetZ * 0.5)
- val dx = (world.rand.nextFloat() - 0.5f) * 0.8f
- val dy = (world.rand.nextFloat() - 0.5f) * 0.8f
- val dz = (world.rand.nextFloat() - 0.5f) * 0.8f
- val vx = (world.rand.nextFloat() - 0.5f) * 0.2f + facing.getFrontOffsetX * 0.3f
- val vy = (world.rand.nextFloat() - 0.5f) * 0.2f + facing.getFrontOffsetY * 0.3f - 0.5f
- val vz = (world.rand.nextFloat() - 0.5f) * 0.2f + facing.getFrontOffsetZ * 0.3f
- world.spawnParticle(EnumParticleTypes.PORTAL, origin.xCoord + dx, origin.yCoord + dy, origin.zCoord + dz, vx, vy, vz)
+ val dx = (getWorld.rand.nextFloat() - 0.5f) * 0.8f
+ val dy = (getWorld.rand.nextFloat() - 0.5f) * 0.8f
+ val dz = (getWorld.rand.nextFloat() - 0.5f) * 0.8f
+ val vx = (getWorld.rand.nextFloat() - 0.5f) * 0.2f + facing.getFrontOffsetX * 0.3f
+ val vy = (getWorld.rand.nextFloat() - 0.5f) * 0.2f + facing.getFrontOffsetY * 0.3f - 0.5f
+ val vz = (getWorld.rand.nextFloat() - 0.5f) * 0.2f + facing.getFrontOffsetZ * 0.3f
+ getWorld.spawnParticle(EnumParticleTypes.PORTAL, origin.xCoord + dx, origin.yCoord + dy, origin.zCoord + dz, vx, vy, vz)
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/BundledRedstoneAware.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/BundledRedstoneAware.scala
index 593b808f1..e7407d6ec 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/BundledRedstoneAware.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/BundledRedstoneAware.scala
@@ -19,16 +19,7 @@ import net.minecraft.nbt.NBTTagIntArray
import net.minecraft.util.EnumFacing
import net.minecraftforge.common.util.Constants.NBT
-/* TODO MFR
-import powercrystals.minefactoryreloaded.api.rednet.IRedNetNetworkContainer
-*/
-
-@Optional.InterfaceList(Array(
- new Optional.Interface(iface = "mods.immibis.redlogic.api.wiring.IBundledEmitter", modid = Mods.IDs.RedLogic),
- new Optional.Interface(iface = "mods.immibis.redlogic.api.wiring.IBundledUpdatable", modid = Mods.IDs.RedLogic),
- new Optional.Interface(iface = "mrtjp.projectred.api.IBundledTile", modid = Mods.IDs.ProjectRedTransmission)
-))
-trait BundledRedstoneAware extends RedstoneAware /* with IBundledEmitter with IBundledUpdatable with IBundledTile TODO RedLogic, Project Red, MFR */ {
+trait BundledRedstoneAware extends RedstoneAware {
protected[tileentity] val _bundledInput = Array.fill(6)(Array.fill(16)(-1))
@@ -91,16 +82,6 @@ trait BundledRedstoneAware extends RedstoneAware /* with IBundledEmitter with IB
def bundledOutput(side: EnumFacing, color: Int, value: Int): Unit = if (value != bundledOutput(side, color)) {
_bundledOutput(toLocal(side).ordinal())(color) = value
- /* TODO MFR
- if (Mods.MineFactoryReloaded.isAvailable) {
- val blockPos = BlockPosition(x, y, z).offset(side)
- world.getBlock(blockPos) match {
- case block: IRedNetNetworkContainer => block.updateNetwork(world, blockPos.x, blockPos.y, blockPos.z, side.getOpposite)
- case _ =>
- }
- }
- */
-
onRedstoneOutputChanged(side)
}
@@ -152,38 +133,4 @@ trait BundledRedstoneAware extends RedstoneAware /* with IBundledEmitter with IB
nbt.setNewTagList(RednetInputTag, _rednetInput.view)
}
-
- // ----------------------------------------------------------------------- //
-
- override protected def onRedstoneOutputEnabledChanged() {
- /* TODO MFR
- if (Mods.MineFactoryReloaded.isAvailable) {
- for (side <- EnumFacing.VALID_DIRECTIONS) {
- val blockPos = BlockPosition(x, y, z).offset(side)
- world.getBlock(blockPos) match {
- case block: IRedNetNetworkContainer => block.updateNetwork(world, x, y, z, side.getOpposite)
- case _ =>
- }
- }
- }
- */
- super.onRedstoneOutputEnabledChanged()
- }
-
- // ----------------------------------------------------------------------- //
- /* TODO RedLogic
- @Optional.Method(modid = Mods.IDs.RedLogic)
- def getBundledCableStrength(blockFace: Int, toDirection: Int): Array[Byte] = bundledOutput(EnumFacing.getOrientation(toDirection)).map(value => math.min(math.max(value, 0), 255).toByte)
-
- @Optional.Method(modid = Mods.IDs.RedLogic)
- def onBundledInputChanged() = checkRedstoneInputChanged()
- */
- // ----------------------------------------------------------------------- //
- /* TODO Project Red
- @Optional.Method(modid = Mods.IDs.ProjectRedTransmission)
- def canConnectBundled(side: Int) = isOutputEnabled
-
- @Optional.Method(modid = Mods.IDs.ProjectRedTransmission)
- def getBundledSignal(side: Int) = bundledOutput(EnumFacing.getOrientation(side)).map(value => math.min(math.max(value, 0), 255).toByte)
- */
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Colored.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Colored.scala
index 86c3b8052..66129b6e5 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/Colored.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Colored.scala
@@ -24,7 +24,7 @@ trait Colored extends TileEntity with internal.Colored {
override def controlsConnectivity = false
protected def onColorChanged() {
- if (world != null && isServer) {
+ if (getWorld != null && isServer) {
PacketSender.sendColorChange(this)
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala
index de725e741..c92ebaf2e 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala
@@ -8,7 +8,6 @@ import li.cil.oc.api
import li.cil.oc.client.Sound
import li.cil.oc.common.tileentity.RobotProxy
import li.cil.oc.integration.opencomputers.DriverRedstoneCard
-import li.cil.oc.integration.util.Waila
import li.cil.oc.server.agent
import li.cil.oc.server.{PacketSender => ServerPacketSender}
import li.cil.oc.util.ExtendedNBT._
@@ -53,11 +52,11 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
if (value) {
hasErrored = false
}
- if (world != null) {
- world.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
- if (world.isRemote) {
+ if (getWorld != null) {
+ getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
+ if (getWorld.isRemote) {
runSound.foreach(sound =>
- if (_isRunning) Sound.startLoop(this, sound, 0.5f, 50 + world.rand.nextInt(50))
+ if (_isRunning) Sound.startLoop(this, sound, 0.5f, 50 + getWorld.rand.nextInt(50))
else Sound.stopLoop(this)
)
}
@@ -127,7 +126,7 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
override def dispose(): Unit = {
super.dispose()
- if (machine != null && !this.isInstanceOf[RobotProxy] && !moving) {
+ if (machine != null && !this.isInstanceOf[RobotProxy]) {
machine.stop()
}
}
@@ -160,8 +159,7 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
override def writeToNBTForServer(nbt: NBTTagCompound) {
super.writeToNBTForServer(nbt)
if (machine != null) {
- if (!Waila.isSavingForTooltip)
- nbt.setNewCompoundTag(ComputerTag, machine.save)
+ nbt.setNewCompoundTag(ComputerTag, machine.save)
}
}
@@ -172,7 +170,7 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
setRunning(nbt.getBoolean(IsRunningTag))
_users.clear()
_users ++= nbt.getTagList(UsersTag, NBT.TAG_STRING).map((tag: NBTTagString) => tag.getString)
- if (_isRunning) runSound.foreach(sound => Sound.startLoop(this, sound, 0.5f, 1000 + world.rand.nextInt(2000)))
+ if (_isRunning) runSound.foreach(sound => Sound.startLoop(this, sound, 0.5f, 1000 + getWorld.rand.nextInt(2000)))
}
override def writeToNBTForClient(nbt: NBTTagCompound) {
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala
index 96916a61d..ce5c928a7 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala
@@ -3,29 +3,24 @@ package li.cil.oc.common.tileentity.traits
import li.cil.oc.Settings
import li.cil.oc.api.network
import li.cil.oc.api.network.Connector
-import li.cil.oc.api.network.Node
import li.cil.oc.api.network.SidedEnvironment
import li.cil.oc.common.EventHandler
-import li.cil.oc.common.asm.Injectable
-import li.cil.oc.integration.Mods
-import li.cil.oc.server.network.Network
import li.cil.oc.util.ExtendedNBT._
-import li.cil.oc.util.ExtendedWorld._
import net.minecraft.nbt.NBTTagCompound
import net.minecraft.util.EnumFacing
-import net.minecraftforge.fml.common.Optional
-@Injectable.Interface(value = "appeng.api.movable.IMovableTile", modid = Mods.IDs.AppliedEnergistics2)
trait Environment extends TileEntity with network.Environment with network.EnvironmentHost {
protected var isChangeScheduled = false
+ override def world = getWorld
+
override def xPosition = x + 0.5
override def yPosition = y + 0.5
override def zPosition = z + 0.5
- override def markChanged() = if (this.isInstanceOf[Tickable]) isChangeScheduled = true else world.markChunkDirty(getPos, this)
+ override def markChanged() = if (this.isInstanceOf[Tickable]) isChangeScheduled = true else getWorld.markChunkDirty(getPos, this)
protected def isConnected = node != null && node.address != null && node.network != null
@@ -41,7 +36,7 @@ trait Environment extends TileEntity with network.Environment with network.Envir
override def updateEntity() {
super.updateEntity()
if (isChangeScheduled) {
- world.markChunkDirty(getPos, this)
+ getWorld.markChunkDirty(getPos, this)
isChangeScheduled = false
}
}
@@ -49,34 +44,12 @@ trait Environment extends TileEntity with network.Environment with network.Envir
override def dispose() {
super.dispose()
if (isServer) {
- if (moving && this.isInstanceOf[Computer]) {
- this match {
- case env: SidedEnvironment =>
- for (side <- EnumFacing.values) {
- val npos = position.offset(side)
- Network.getNetworkNode(world.getTileEntity(npos), side.getOpposite) match {
- case neighbor: Node if env.sidedNode(side) != null => env.sidedNode(side).disconnect(neighbor)
- case _ => // No neighbor node.
- }
- }
- case env =>
- for (side <- EnumFacing.values) {
- val npos = position.offset(side)
- Network.getNetworkNode(world.getTileEntity(npos), side.getOpposite) match {
- case neighbor: Node if env.node != null => env.node.disconnect(neighbor)
- case _ => // No neighbor node.
- }
- }
- }
- }
- else {
- Option(node).foreach(_.remove)
- this match {
- case sidedEnvironment: SidedEnvironment => for (side <- EnumFacing.values) {
- Option(sidedEnvironment.sidedNode(side)).foreach(_.remove())
- }
- case _ =>
+ Option(node).foreach(_.remove)
+ this match {
+ case sidedEnvironment: SidedEnvironment => for (side <- EnumFacing.values) {
+ Option(sidedEnvironment.sidedNode(side)).foreach(_.remove())
}
+ case _ =>
}
}
}
@@ -121,22 +94,5 @@ trait Environment extends TileEntity with network.Environment with network.Envir
// ----------------------------------------------------------------------- //
- protected var moving = false
-
- @Optional.Method(modid = Mods.IDs.AppliedEnergistics2)
- def prepareToMove(): Boolean = {
- moving = true
- true
- }
-
- @Optional.Method(modid = Mods.IDs.AppliedEnergistics2)
- def doneMoving(): Unit = {
- moving = false
- Network.joinOrCreateNetwork(this)
- world.notifyBlockUpdate(getPos)
- }
-
- // ----------------------------------------------------------------------- //
-
protected def result(args: Any*) = li.cil.oc.util.ResultWrapper.result(args: _*)
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala
index 9bc9d3ad7..3dc84b8a1 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala
@@ -74,7 +74,7 @@ trait Hub extends traits.Environment with SidedEnvironment with Tickable {
relayCooldown = relayDelay - 1
}
}
- else if (world.getTotalWorldTime % relayDelay == 0) {
+ else if (getWorld.getTotalWorldTime % relayDelay == 0) {
packetsPerCycleAvg += 0
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Inventory.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Inventory.scala
index 1949626f5..e60f1ce5c 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/Inventory.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Inventory.scala
@@ -36,11 +36,11 @@ trait Inventory extends TileEntity with inventory.Inventory {
// ----------------------------------------------------------------------- //
def dropSlot(slot: Int, count: Int = getInventoryStackLimit, direction: Option[EnumFacing] = None) =
- InventoryUtils.dropSlot(BlockPosition(x, y, z, world), this, slot, count, direction)
+ InventoryUtils.dropSlot(BlockPosition(x, y, z, getWorld), this, slot, count, direction)
def dropAllSlots() =
- InventoryUtils.dropAllSlots(BlockPosition(x, y, z, world), this)
+ InventoryUtils.dropAllSlots(BlockPosition(x, y, z, getWorld), this)
def spawnStackInWorld(stack: ItemStack, direction: Option[EnumFacing] = None) =
- InventoryUtils.spawnStackInWorld(BlockPosition(x, y, z, world), stack, direction)
+ InventoryUtils.spawnStackInWorld(BlockPosition(x, y, z, getWorld), stack, direction)
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerAcceptor.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerAcceptor.scala
index e7fed0bd1..7a3d77581 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerAcceptor.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerAcceptor.scala
@@ -1,12 +1,4 @@
package li.cil.oc.common.tileentity.traits
trait PowerAcceptor
- extends power.Common
-// with power.AppliedEnergistics2
-// with power.Factorization
-// with power.Galacticraft
- with power.IndustrialCraft2Experimental
-// with power.IndustrialCraft2Classic
-// with power.Mekanism
- with power.RedstoneFlux
-// with power.RotaryCraft
+ extends power.Common
\ No newline at end of file
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala
index debe38bae..3878d61b3 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala
@@ -12,7 +12,7 @@ trait PowerBalancer extends PowerInformation with SidedEnvironment with Tickable
override def updateEntity() {
super.updateEntity()
- if (isServer && isConnected && world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
+ if (isServer && isConnected && getWorld.getTotalWorldTime % Settings.get.tickFrequency == 0) {
val nodes = connectors
def network(connector: Connector) = if (connector != null && connector.network != null) connector.network else this
// Yeeeeah, so that just happened... it's not a beauty, but it works. This
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/RedstoneAware.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/RedstoneAware.scala
index 8155a02da..ac2c1497b 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/RedstoneAware.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/RedstoneAware.scala
@@ -19,12 +19,7 @@ import mods.immibis.redlogic.api.wiring.IWire
import net.minecraft.nbt.NBTTagCompound
import net.minecraft.util.EnumFacing
-@Optional.InterfaceList(Array(
- new Optional.Interface(iface = "mods.immibis.redlogic.api.wiring.IConnectable", modid = Mods.IDs.RedLogic),
- new Optional.Interface(iface = "mods.immibis.redlogic.api.wiring.IRedstoneEmitter", modid = Mods.IDs.RedLogic),
- new Optional.Interface(iface = "mods.immibis.redlogic.api.wiring.IRedstoneUpdatable", modid = Mods.IDs.RedLogic)
-))
-trait RedstoneAware extends RotationAware /* with IConnectable with IRedstoneEmitter with IRedstoneUpdatable TODO RedLogic */ {
+trait RedstoneAware extends RotationAware {
protected[tileentity] val _input = Array.fill(6)(-1)
protected[tileentity] val _output = Array.fill(6)(0)
@@ -135,34 +130,19 @@ trait RedstoneAware extends RotationAware /* with IConnectable with IRedstoneEmi
protected def onRedstoneInputChanged(side: EnumFacing, oldMaxValue: Int, newMaxValue: Int) {}
protected def onRedstoneOutputEnabledChanged() {
- if (world != null) {
- world.notifyNeighborsOfStateChange(getPos, getBlockType, true)
+ if (getWorld != null) {
+ getWorld.notifyNeighborsOfStateChange(getPos, getBlockType, true)
if (isServer) ServerPacketSender.sendRedstoneState(this)
- else world.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
+ else getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
}
}
protected def onRedstoneOutputChanged(side: EnumFacing) {
val blockPos = getPos.offset(side)
- world.neighborChanged(blockPos, getBlockType, blockPos)
- world.notifyNeighborsOfStateExcept(blockPos, world.getBlockState(blockPos).getBlock, side.getOpposite)
+ getWorld.neighborChanged(blockPos, getBlockType, blockPos)
+ getWorld.notifyNeighborsOfStateExcept(blockPos, getWorld.getBlockState(blockPos).getBlock, side.getOpposite)
if (isServer) ServerPacketSender.sendRedstoneState(this)
- else world.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
+ else getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
}
-
- // ----------------------------------------------------------------------- //
- /* TODO RedLogic
- @Optional.Method(modid = Mods.IDs.RedLogic)
- override def connects(wire: IWire, blockFace: Int, fromDirection: Int) = isOutputEnabled
-
- @Optional.Method(modid = Mods.IDs.RedLogic)
- override def connectsAroundCorner(wire: IWire, blockFace: Int, fromDirection: Int) = false
-
- @Optional.Method(modid = Mods.IDs.RedLogic)
- override def getEmittedSignalStrength(blockFace: Int, toDirection: Int): Short = _output(toLocal(ForgeDirection.getOrientation(toDirection)).ordinal()).toShort
-
- @Optional.Method(modid = Mods.IDs.RedLogic)
- override def onRedstoneInputChanged() = checkRedstoneInputChanged()
- */
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Rotatable.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Rotatable.scala
index baf4bcc0d..9a223605d 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/Rotatable.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Rotatable.scala
@@ -24,8 +24,8 @@ trait Rotatable extends RotationAware with internal.Rotatable {
// Accessors
// ----------------------------------------------------------------------- //
- def pitch = if (world != null && world.isBlockLoaded(getPos)) getBlockType match {
- case rotatable if world.getBlockState(getPos).getProperties.containsKey(PropertyRotatable.Pitch) => world.getBlockState(getPos).getValue(PropertyRotatable.Pitch)
+ def pitch = if (getWorld != null && getWorld.isBlockLoaded(getPos)) getBlockType match {
+ case rotatable if getWorld.getBlockState(getPos).getProperties.containsKey(PropertyRotatable.Pitch) => getWorld.getBlockState(getPos).getValue(PropertyRotatable.Pitch)
case _ => EnumFacing.NORTH
} else null
@@ -35,9 +35,9 @@ trait Rotatable extends RotationAware with internal.Rotatable {
case _ => EnumFacing.NORTH
}, yaw)
- def yaw = if (world != null && world.isBlockLoaded(getPos)) getBlockType match {
- case rotatable if world.getBlockState(getPos).getProperties.containsKey(PropertyRotatable.Yaw) => world.getBlockState(getPos).getValue(PropertyRotatable.Yaw)
- case rotatable if world.getBlockState(getPos).getProperties.containsKey(PropertyRotatable.Facing) => world.getBlockState(getPos).getValue(PropertyRotatable.Facing)
+ def yaw = if (getWorld != null && getWorld.isBlockLoaded(getPos)) getBlockType match {
+ case rotatable if getWorld.getBlockState(getPos).getProperties.containsKey(PropertyRotatable.Yaw) => getWorld.getBlockState(getPos).getValue(PropertyRotatable.Yaw)
+ case rotatable if getWorld.getBlockState(getPos).getProperties.containsKey(PropertyRotatable.Facing) => getWorld.getBlockState(getPos).getValue(PropertyRotatable.Facing)
case _ => EnumFacing.SOUTH
} else null
@@ -72,9 +72,9 @@ trait Rotatable extends RotationAware with internal.Rotatable {
}
def rotate(axis: EnumFacing) = {
- val block = world.getBlock(position)
+ val block = getWorld.getBlock(position)
if (block != null) {
- val valid = block.getValidRotations(world, getPos)
+ val valid = block.getValidRotations(getWorld, getPos)
if (valid != null && valid.contains(axis)) {
val (newPitch, newYaw) = facing.getRotation(axis) match {
case value@(EnumFacing.UP | EnumFacing.DOWN) =>
@@ -110,26 +110,26 @@ trait Rotatable extends RotationAware with internal.Rotatable {
ServerPacketSender.sendRotatableState(this)
}
else {
- world.notifyBlockUpdate(getPos)
+ getWorld.notifyBlockUpdate(getPos)
}
- world.notifyNeighborsOfStateChange(getPos, getBlockType, false)
+ getWorld.notifyNeighborsOfStateChange(getPos, getBlockType, false)
}
// ----------------------------------------------------------------------- //
/** Updates cached translation array and sends notification to clients. */
protected def updateTranslation(): Unit = {
- if (world != null) {
+ if (getWorld != null) {
onRotationChanged()
}
}
/** Validates new values against the allowed rotations as set in our block. */
protected def trySetPitchYaw(pitch: EnumFacing, yaw: EnumFacing) = {
- val oldState = world.getBlockState(getPos)
+ val oldState = getWorld.getBlockState(getPos)
def setState(newState: IBlockState): Boolean = {
if (oldState.hashCode() != newState.hashCode()) {
- world.setBlockState(getPos, newState)
+ getWorld.setBlockState(getPos, newState)
updateTranslation()
true
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/StateAware.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/StateAware.scala
index b79d44798..eb0f9a092 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/StateAware.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/StateAware.scala
@@ -1,12 +1,6 @@
package li.cil.oc.common.tileentity.traits
import li.cil.oc.api
-import li.cil.oc.common.asm.Injectable
-import li.cil.oc.integration.Mods
-import net.minecraftforge.fml.common.Optional
-@Injectable.Interface(value = "buildcraft.api.tiles.IHasWork", modid = Mods.IDs.BuildCraft)
trait StateAware extends api.util.StateAware {
- @Optional.Method(modid = Mods.IDs.BuildCraft)
- def hasWork: Boolean = getCurrentState.contains(api.util.StateAware.State.CanWork) || getCurrentState.contains(api.util.StateAware.State.IsWorking)
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala
index 06753f294..d1734df0c 100644
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala
+++ b/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala
@@ -18,25 +18,23 @@ import net.minecraftforge.fml.relauncher.SideOnly
trait TileEntity extends net.minecraft.tileentity.TileEntity {
private final val IsServerDataTag = Settings.namespace + "isServerData"
- def world = getWorld
-
def x = getPos.getX
def y = getPos.getY
def z = getPos.getZ
- def position = BlockPosition(x, y, z, world)
+ def position = BlockPosition(x, y, z, getWorld)
def isClient = !isServer
- def isServer = if (world != null) !world.isRemote else SideTracker.isServer
+ def isServer = if (getWorld != null) !getWorld.isRemote else SideTracker.isServer
// ----------------------------------------------------------------------- //
def updateEntity() {
- if (Settings.get.periodicallyForceLightUpdate && world.getTotalWorldTime % 40 == 0 && getBlockType.getLightValue(world.getBlockState(getPos), world, getPos) > 0) {
- world.notifyBlockUpdate(getPos, world.getBlockState(getPos), world.getBlockState(getPos), 3)
+ if (Settings.get.periodicallyForceLightUpdate && getWorld.getTotalWorldTime % 40 == 0 && getBlockType.getLightValue(getWorld.getBlockState(getPos), getWorld, getPos) > 0) {
+ getWorld.notifyBlockUpdate(getPos, getWorld.getBlockState(getPos), getWorld.getBlockState(getPos), 3)
}
}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/power/IndustrialCraft2Experimental.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/power/IndustrialCraft2Experimental.scala
deleted file mode 100644
index 4cf3b591d..000000000
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/power/IndustrialCraft2Experimental.scala
+++ /dev/null
@@ -1,96 +0,0 @@
-package li.cil.oc.common.tileentity.traits.power
-
-import ic2.api.energy.tile.IEnergyEmitter
-import li.cil.oc.OpenComputers
-import li.cil.oc.Settings
-import li.cil.oc.common.EventHandler
-import li.cil.oc.common.asm.Injectable
-import li.cil.oc.common.tileentity.traits
-import li.cil.oc.integration.Mods
-import li.cil.oc.integration.util.Power
-import net.minecraft.nbt.NBTTagCompound
-import net.minecraft.util.EnumFacing
-import net.minecraftforge.common.MinecraftForge
-import net.minecraftforge.fml.common.Optional
-import net.minecraftforge.fml.common.eventhandler.Event
-
-@Injectable.Interface(value = "ic2.api.energy.tile.IEnergySink", modid = Mods.IDs.IndustrialCraft2)
-trait IndustrialCraft2Experimental extends Common with IndustrialCraft2Common with traits.Tickable {
- private var conversionBuffer = 0.0
-
- private lazy val useIndustrialCraft2Power = isServer && Mods.IndustrialCraft2.isAvailable
-
- // ----------------------------------------------------------------------- //
-
- override def updateEntity() {
- super.updateEntity()
- if (useIndustrialCraft2Power && world.getTotalWorldTime % Settings.get.tickFrequency == 0) {
- updateEnergy()
- }
- }
-
- @Optional.Method(modid = Mods.IDs.IndustrialCraft2)
- private def updateEnergy() {
- tryAllSides((demand, _) => {
- val result = math.min(demand, conversionBuffer)
- conversionBuffer -= result
- result
- }, Power.fromEU, Power.toEU)
- }
-
- override def validate() {
- super.validate()
- if (useIndustrialCraft2Power && !addedToIC2PowerGrid) EventHandler.scheduleIC2Add(this)
- }
-
- override def invalidate() {
- super.invalidate()
- if (useIndustrialCraft2Power && addedToIC2PowerGrid) removeFromIC2Grid()
- }
-
- override def onChunkUnload() {
- super.onChunkUnload()
- if (useIndustrialCraft2Power && addedToIC2PowerGrid) removeFromIC2Grid()
- }
-
- private def removeFromIC2Grid() {
- try MinecraftForge.EVENT_BUS.post(Class.forName("ic2.api.energy.event.EnergyTileUnloadEvent").getConstructor(Class.forName("ic2.api.energy.tile.IEnergyTile")).newInstance(this).asInstanceOf[Event]) catch {
- case t: Throwable => OpenComputers.log.warn("Error removing node from IC2 grid.", t)
- }
- addedToIC2PowerGrid = false
- }
-
- // ----------------------------------------------------------------------- //
-
- override def readFromNBTForServer(nbt: NBTTagCompound) {
- super.readFromNBTForServer(nbt)
- conversionBuffer = nbt.getDouble(Settings.namespace + "ic2power")
- }
-
- override def writeToNBTForServer(nbt: NBTTagCompound) {
- super.writeToNBTForServer(nbt)
- nbt.setDouble(Settings.namespace + "ic2power", conversionBuffer)
- }
-
- // ----------------------------------------------------------------------- //
-
- @Optional.Method(modid = Mods.IDs.IndustrialCraft2)
- def getSinkTier: Int = Int.MaxValue
-
- @Optional.Method(modid = Mods.IDs.IndustrialCraft2)
- def acceptsEnergyFrom(emitter: IEnergyEmitter, direction: EnumFacing): Boolean = useIndustrialCraft2Power && canConnectPower(direction)
-
- @Optional.Method(modid = Mods.IDs.IndustrialCraft2)
- def injectEnergy(directionFrom: EnumFacing, amount: Double, voltage: Double): Double = {
- conversionBuffer += amount
- 0.0
- }
-
- @Optional.Method(modid = Mods.IDs.IndustrialCraft2)
- def getDemandedEnergy: Double = {
- if (!useIndustrialCraft2Power) 0.0
- else if (conversionBuffer < energyThroughput * Settings.get.tickFrequency)
- math.min(EnumFacing.VALUES.map(globalDemand).max, Power.toEU(energyThroughput))
- else 0
- }
-}
diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/power/RedstoneFlux.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/power/RedstoneFlux.scala
deleted file mode 100644
index 08efe9af1..000000000
--- a/src/main/scala/li/cil/oc/common/tileentity/traits/power/RedstoneFlux.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package li.cil.oc.common.tileentity.traits.power
-
-import li.cil.oc.common.asm.Injectable
-import li.cil.oc.integration.Mods
-import li.cil.oc.integration.util.Power
-import net.minecraft.util.EnumFacing
-import net.minecraftforge.fml.common.Optional
-
-@Injectable.Interface(value = "cofh.api.energy.IEnergyReceiver", modid = Mods.IDs.CoFHEnergy)
-trait RedstoneFlux extends Common {
- // IEnergyReceiver
-
- @Optional.Method(modid = Mods.IDs.CoFHEnergy)
- def receiveEnergy(from: EnumFacing, maxReceive: Int, simulate: Boolean): Int =
- if (!Mods.CoFHEnergy.isAvailable) 0
- else Power.toRF(tryChangeBuffer(from, Power.fromRF(maxReceive), !simulate))
-
- // IEnergyHandler
-
- @Optional.Method(modid = Mods.IDs.CoFHEnergy)
- def getEnergyStored(from: EnumFacing): Int = Power.toRF(globalBuffer(from))
-
- @Optional.Method(modid = Mods.IDs.CoFHEnergy)
- def getMaxEnergyStored(from: EnumFacing): Int = Power.toRF(globalBufferSize(from))
-
- // IEnergyConnection
-
- @Optional.Method(modid = Mods.IDs.CoFHEnergy)
- def canConnectEnergy(from: EnumFacing): Boolean = Mods.CoFHEnergy.isAvailable && canConnectPower(from)
-}
diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala
index 6db6a3fbc..a13686b0e 100644
--- a/src/main/scala/li/cil/oc/integration/Mods.scala
+++ b/src/main/scala/li/cil/oc/integration/Mods.scala
@@ -30,7 +30,6 @@ object Mods {
val Proxies = Array(
integration.forestry.ModForestry,
- integration.mcmp.ModMCMultiPart,
integration.tis3d.ModTIS3D,
integration.minecraft.ModMinecraft,
diff --git a/src/main/scala/li/cil/oc/integration/jei/LootDiskCyclingRecipeHandler.scala b/src/main/scala/li/cil/oc/integration/jei/LootDiskCyclingRecipeHandler.scala
index f0b74f9c4..90ae7f817 100644
--- a/src/main/scala/li/cil/oc/integration/jei/LootDiskCyclingRecipeHandler.scala
+++ b/src/main/scala/li/cil/oc/integration/jei/LootDiskCyclingRecipeHandler.scala
@@ -19,7 +19,7 @@ import scala.collection.convert.WrapAsJava._
object LootDiskCyclingRecipeHandler extends IRecipeHandler[LootDiskCyclingRecipe] {
override def getRecipeClass: Class[LootDiskCyclingRecipe] = classOf[LootDiskCyclingRecipe]
- override def getRecipeCategoryUid: String = VanillaRecipeCategoryUid.CRAFTING
+ def getRecipeCategoryUid: String = VanillaRecipeCategoryUid.CRAFTING
override def getRecipeCategoryUid(recipe: LootDiskCyclingRecipe): String = getRecipeCategoryUid
@@ -29,9 +29,9 @@ object LootDiskCyclingRecipeHandler extends IRecipeHandler[LootDiskCyclingRecipe
class LootDiskCyclingRecipeWrapper(val recipe: LootDiskCyclingRecipe) extends BlankRecipeWrapper with ICraftingRecipeWrapper {
- override def getInputs: util.List[util.List[ItemStack]] = List(seqAsJavaList(Loot.disksForCycling), seqAsJavaList(List(api.Items.get(Constants.ItemName.Wrench).createItemStack(1))))
+ def getInputs: util.List[util.List[ItemStack]] = List(seqAsJavaList(Loot.disksForCycling), seqAsJavaList(List(api.Items.get(Constants.ItemName.Wrench).createItemStack(1))))
- override def getOutputs: util.List[ItemStack] = Loot.disksForCycling.toList
+ def getOutputs: util.List[ItemStack] = Loot.disksForCycling.toList
override def getIngredients(ingredients: IIngredients): Unit = {
ingredients.setInputLists(classOf[ItemStack], getInputs)
diff --git a/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPart.scala b/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPart.scala
deleted file mode 100644
index ca43865b7..000000000
--- a/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPart.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package li.cil.oc.integration.mcmp
-
-import li.cil.oc.Constants
-import li.cil.oc.Settings
-import li.cil.oc.api
-import mcmultipart.item.PartPlacementWrapper
-import mcmultipart.multipart.MultipartRegistry
-import net.minecraft.client.renderer.block.model.ModelResourceLocation
-import net.minecraftforge.fml.common.FMLCommonHandler
-import net.minecraftforge.fml.relauncher.Side
-
-object MCMultiPart {
- final val CableMultipartRawLocation = Settings.resourceDomain + ":" + Constants.BlockName.Cable
- final val PrintMultipartRawLocation = Settings.resourceDomain + ":" + Constants.BlockName.Print
-
- def init(): Unit = {
- MultipartRegistry.registerPart(classOf[PartCable], PartFactory.PartTypeCable.toString)
- MultipartRegistry.registerPart(classOf[PartPrint], PartFactory.PartTypePrint.toString)
- MultipartRegistry.registerPartFactory(PartFactory, PartFactory.PartTypeCable.toString, PartFactory.PartTypePrint.toString)
- MultipartRegistry.registerPartConverter(PartConverter)
- MultipartRegistry.registerReversePartConverter(PartConverter)
-
- new PartPlacementWrapper(api.Items.get(Constants.BlockName.Cable).createItemStack(1), PartFactory).register(PartFactory.PartTypeCable.toString)
- new PartPlacementWrapper(api.Items.get(Constants.BlockName.Print).createItemStack(1), PartFactory).register(PartFactory.PartTypePrint.toString)
-
- if (FMLCommonHandler.instance.getSide == Side.CLIENT) {
- MCMultiPartClient.init()
- }
- }
-}
diff --git a/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPartClient.scala b/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPartClient.scala
deleted file mode 100644
index 43e844dc3..000000000
--- a/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPartClient.scala
+++ /dev/null
@@ -1,29 +0,0 @@
-package li.cil.oc.integration.mcmp
-
-import li.cil.oc.client.renderer.block.ModelInitialization
-import li.cil.oc.client.renderer.block.PrintModel
-import net.minecraft.client.renderer.block.model.ModelResourceLocation
-import net.minecraftforge.client.event.ModelBakeEvent
-import net.minecraftforge.common.MinecraftForge
-import net.minecraftforge.fml.common.eventhandler.EventPriority
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-
-object MCMultiPartClient {
- final val CableMultipartLocation = new ModelResourceLocation(MCMultiPart.CableMultipartRawLocation, "multipart")
- final val PrintMultipartLocation = new ModelResourceLocation(MCMultiPart.PrintMultipartRawLocation, "multipart")
-
- def init(): Unit = {
- MinecraftForge.EVENT_BUS.register(this)
- }
-
- @SubscribeEvent(priority = EventPriority.LOW)
- def onModelBake(e: ModelBakeEvent): Unit = {
- val registry = e.getModelRegistry
-
- // Replace default cable model with part model to properly handle connection
- // rendering to multipart cables.
- registry.putObject(ModelInitialization.CableBlockLocation, PartCableModel)
- registry.putObject(CableMultipartLocation, PartCableModel)
- registry.putObject(PrintMultipartLocation, PrintModel)
- }
-}
diff --git a/src/main/scala/li/cil/oc/integration/mcmp/ModMCMultiPart.scala b/src/main/scala/li/cil/oc/integration/mcmp/ModMCMultiPart.scala
deleted file mode 100644
index 5d2aa6a16..000000000
--- a/src/main/scala/li/cil/oc/integration/mcmp/ModMCMultiPart.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-package li.cil.oc.integration.mcmp
-
-import li.cil.oc.integration.ModProxy
-import li.cil.oc.integration.Mods
-
-object ModMCMultiPart extends ModProxy {
- override def getMod = Mods.MCMultiPart
-
- override def initialize(): Unit = {
- MCMultiPart.init()
- }
-}
diff --git a/src/main/scala/li/cil/oc/integration/mcmp/PartCable.scala b/src/main/scala/li/cil/oc/integration/mcmp/PartCable.scala
deleted file mode 100644
index 3bac4f7b3..000000000
--- a/src/main/scala/li/cil/oc/integration/mcmp/PartCable.scala
+++ /dev/null
@@ -1,265 +0,0 @@
-package li.cil.oc.integration.mcmp
-
-import java.util
-
-import com.google.common.base.Predicate
-import li.cil.oc.Constants
-import li.cil.oc.api
-import li.cil.oc.api.internal.Colored
-import li.cil.oc.api.network.Environment
-import li.cil.oc.api.network.Message
-import li.cil.oc.api.network.Node
-import li.cil.oc.common.block.Cable
-import li.cil.oc.common.block.property
-import li.cil.oc.common.capabilities.Capabilities
-import li.cil.oc.common.tileentity
-import li.cil.oc.util.Color
-import mcmultipart.capabilities.ISlottedCapabilityProvider
-import mcmultipart.multipart._
-import mcmultipart.raytrace.PartMOP
-import net.minecraft.block.material.Material
-import net.minecraft.block.state.BlockStateContainer
-import net.minecraft.block.state.IBlockState
-import net.minecraft.entity.Entity
-import net.minecraft.entity.player.EntityPlayer
-import net.minecraft.item.ItemStack
-import net.minecraft.nbt.NBTTagCompound
-import net.minecraft.network.PacketBuffer
-import net.minecraft.tileentity.TileEntity
-import net.minecraft.util.EnumFacing
-import net.minecraft.util.EnumHand
-import net.minecraft.util.ResourceLocation
-import net.minecraft.util.math.AxisAlignedBB
-import net.minecraftforge.common.capabilities.Capability
-import net.minecraftforge.common.property.ExtendedBlockState
-import net.minecraftforge.common.property.IExtendedBlockState
-
-import scala.collection.convert.WrapAsScala._
-
-class PartCable extends Multipart with ISlottedPart with INormallyOccludingPart with ISlottedCapabilityProvider with Environment with Colored {
- final val CableDefinition = api.Items.get(Constants.BlockName.Cable)
- final val CableBlock = CableDefinition.block()
-
- val wrapped = new tileentity.Cable()
-
- // ----------------------------------------------------------------------- //
- // Environment
-
- override def node = wrapped.node
-
- override def onMessage(message: Message) = wrapped.onMessage(message)
-
- override def onConnect(node: Node) = wrapped.onConnect(node)
-
- override def onDisconnect(node: Node) = wrapped.onDisconnect(node)
-
- // ----------------------------------------------------------------------- //
- // Colored
-
- override def getColor = wrapped.getColor
-
- override def setColor(value: Int): Unit = {
- if (value != getColor) {
- wrapped.setColor(value)
- if (getWorld != null && !getWorld.isRemote) {
- sendUpdatePacket(true)
- }
- }
- }
-
- override def controlsConnectivity = wrapped.controlsConnectivity
-
- // ----------------------------------------------------------------------- //
- // ISlottedPart
-
- override def getSlotMask: util.EnumSet[PartSlot] = util.EnumSet.of(PartSlot.CENTER)
-
- // ----------------------------------------------------------------------- //
- // IOccludingPart
-
- override def addOcclusionBoxes(list: util.List[AxisAlignedBB]): Unit = list.add(Cable.DefaultBounds)
-
- // ----------------------------------------------------------------------- //
- // ISlottedCapabilityProvider
-
- override def hasCapability(capability: Capability[_], slot: PartSlot, facing: EnumFacing): Boolean = {
- capability == Capabilities.EnvironmentCapability && canConnect(facing)
- }
-
- override def getCapability[T](capability: Capability[T], slot: PartSlot, facing: EnumFacing): T = {
- if (capability == Capabilities.EnvironmentCapability && canConnect(facing)) this.asInstanceOf[T]
- else null.asInstanceOf[T]
- }
-
- override def hasCapability(capability: Capability[_], facing: EnumFacing): Boolean = {
- (capability == Capabilities.ColoredCapability) || super.hasCapability(capability, facing)
- }
-
- override def getCapability[T](capability: Capability[T], facing: EnumFacing): T = {
- if (capability == Capabilities.ColoredCapability) this.asInstanceOf[T]
- else super.getCapability(capability, facing)
- }
-
- private def canConnect(facing: EnumFacing) = {
- val self = this
- val isThis = new Predicate[IMultipart] {
- override def apply(input: IMultipart): Boolean = input == self
- }
- OcclusionHelper.slotOcclusionTest(PartSlot.getFaceSlot(facing), isThis, getContainer.getParts) &&
- OcclusionHelper.occlusionTest(OcclusionHelper.boxes(Cable.CachedBounds(Cable.mask(facing))), isThis, getContainer.getParts)
- }
-
- // ----------------------------------------------------------------------- //
- // IMultipart
-
- override def addSelectionBoxes(list: util.List[AxisAlignedBB]): Unit = {
- if (getWorld != null) {
- list.add(Cable.bounds(getWorld, getPos))
- }
- }
-
- override def addCollisionBoxes(mask: AxisAlignedBB, list: util.List[AxisAlignedBB], collidingEntity: Entity): Unit = {
- if (getWorld != null) {
- val bounds = Cable.bounds(getWorld, getPos)
- if (bounds.intersectsWith(mask)) list.add(bounds)
- }
- }
-
- override def getPickBlock(player: EntityPlayer, hit: PartMOP): ItemStack = wrapped.createItemStack()
-
- override def getDrops: util.List[ItemStack] = util.Arrays.asList(wrapped.createItemStack())
-
- override def getHardness(hit: PartMOP): Float = CableBlock.getBlockHardness(MultipartRegistry.getDefaultState(this).getBaseState, getWorld, getPos)
-
- override def getMaterial: Material = CableBlock.getMaterial(MultipartRegistry.getDefaultState(this).getBaseState)
-
- override def isToolEffective(toolType: String, level: Int): Boolean = CableBlock.isToolEffective(toolType, getWorld.getBlockState(getPos))
-
- // ----------------------------------------------------------------------- //
-
- override def getModelPath = new ResourceLocation(MCMultiPart.CableMultipartRawLocation)
-
- override def createBlockState(): BlockStateContainer = new ExtendedBlockState(CableBlock, Array.empty, Array(property.PropertyTile.Tile))
-
- override def getExtendedState(state: IBlockState): IBlockState =
- state match {
- case extendedState: IExtendedBlockState =>
- wrapped.setWorldObj(getWorld)
- wrapped.setPos(getPos)
- extendedState.withProperty(property.PropertyTile.Tile, wrapped)
- case _ => state
- }
-
- override def onPartChanged(part: IMultipart): Unit = {
- super.onPartChanged(part)
- if (getWorld.isRemote) {
- markRenderUpdate()
- } else {
- // This is a bit meh... when a previously valid connection to a neighbor of
- // a multipart tile becomes invalid due to a new, occluding part, we can't
- // access the now occluded node anymore, so we can't just disconnect it from
- // it's neighbor. So instead we get the old list of neighbor nodes and kill
- // every connection for which we can't find a currently valid neighbor.
- val mask = Cable.neighbors(getWorld, getPos)
- val neighbors = EnumFacing.VALUES.filter(side => (mask & (1 << side.getIndex)) != 0).map(side => {
- val neighborPos = getPos.offset(side)
- val neighborTile = getWorld.getTileEntity(neighborPos)
- if (neighborTile == null || !canConnect(side)) null
- else if (neighborTile.hasCapability(Capabilities.SidedEnvironmentCapability, side.getOpposite)) {
- val host = neighborTile.getCapability(Capabilities.SidedEnvironmentCapability, side.getOpposite)
- if (host != null) host.sidedNode(side.getOpposite)
- else null
- }
- else if (neighborTile.hasCapability(Capabilities.EnvironmentCapability, side.getOpposite)) {
- val host = neighborTile.getCapability(Capabilities.EnvironmentCapability, side.getOpposite)
- if (host != null) host.node
- else null
- }
- else null
- }).filter(_ != null).toSet
- for (neighborNode <- node.neighbors.toSeq) {
- if (!neighbors.contains(neighborNode)) {
- node.disconnect(neighborNode)
- }
- }
- api.Network.joinOrCreateNetwork(getWorld, getPos)
- }
- }
-
- override def onAdded(): Unit = {
- super.onAdded()
- wrapped.setWorldObj(getWorld)
- wrapped.setPos(getPos)
- wrapped.validate()
- }
-
- override def onRemoved(): Unit = {
- super.onRemoved()
- wrapped.invalidate()
- wrapped.setWorldObj(null)
- wrapped.setPos(null)
- }
-
- override def onLoaded(): Unit = {
- super.onLoaded()
- wrapped.setWorldObj(getWorld)
- wrapped.setPos(getPos)
- wrapped.validate()
- }
-
- override def onUnloaded(): Unit = {
- super.onUnloaded()
- wrapped.onChunkUnload()
- wrapped.setWorldObj(null)
- wrapped.setPos(null)
- }
-
- override def onConverted(tile: TileEntity): Unit = {
- super.onConverted(tile)
- tile match {
- case cable: tileentity.Cable =>
- wrapped.setColor(cable.getColor)
- case _ =>
- }
- wrapped.setWorldObj(getWorld)
- wrapped.setPos(getPos)
- wrapped.validate()
- }
-
- // ----------------------------------------------------------------------- //
-
- override def onActivated(player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, hit: PartMOP): Boolean = {
- if (Color.isDye(heldItem)) {
- setColor(Color.rgbValues(Color.dyeColor(heldItem)))
- markDirty()
- if (!player.capabilities.isCreativeMode && wrapped.consumesDye) {
- heldItem.splitStack(1)
- }
- true
- }
- else super.onActivated(player, hand, heldItem, hit)
- }
-
- // ----------------------------------------------------------------------- //
-
- override def writeToNBT(tag: NBTTagCompound): NBTTagCompound = {
- super.writeToNBT(tag)
- wrapped.writeToNBT(tag)
- tag
- }
-
- override def readFromNBT(tag: NBTTagCompound): Unit = {
- super.readFromNBT(tag)
- wrapped.readFromNBT(tag)
- }
-
- override def writeUpdatePacket(buf: PacketBuffer): Unit = {
- super.writeUpdatePacket(buf)
- buf.writeInt(getColor)
- }
-
- override def readUpdatePacket(buf: PacketBuffer): Unit = {
- super.readUpdatePacket(buf)
- setColor(buf.readInt())
- }
-}
diff --git a/src/main/scala/li/cil/oc/integration/mcmp/PartCableModel.scala b/src/main/scala/li/cil/oc/integration/mcmp/PartCableModel.scala
deleted file mode 100644
index 8f29cab3a..000000000
--- a/src/main/scala/li/cil/oc/integration/mcmp/PartCableModel.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-package li.cil.oc.integration.mcmp
-
-import li.cil.oc.client.renderer.block.CableModel
-import li.cil.oc.util.BlockPosition
-import mcmultipart.multipart.MultipartHelper
-import mcmultipart.multipart.PartSlot
-
-object PartCableModel extends CableModel {
- override protected def isCable(pos: BlockPosition): Boolean = super.isCable(pos) || (pos.world match {
- case Some(world) =>
- val container = MultipartHelper.getPartContainer(world, pos.toBlockPos)
- (container != null) && (container.getPartInSlot(PartSlot.CENTER) match {
- case cable: PartCable => true
- case _ => false
- })
- case _ => false
- })
-}
diff --git a/src/main/scala/li/cil/oc/integration/mcmp/PartConverter.scala b/src/main/scala/li/cil/oc/integration/mcmp/PartConverter.scala
deleted file mode 100644
index 2e6a9ba3d..000000000
--- a/src/main/scala/li/cil/oc/integration/mcmp/PartConverter.scala
+++ /dev/null
@@ -1,88 +0,0 @@
-package li.cil.oc.integration.mcmp
-
-import java.util
-import java.util.Collections
-
-import li.cil.oc.Constants
-import li.cil.oc.api
-import li.cil.oc.common.EventHandler
-import li.cil.oc.common.tileentity.Cable
-import li.cil.oc.common.tileentity.Print
-import li.cil.oc.server.PacketSender
-import mcmultipart.multipart.IMultipart
-import mcmultipart.multipart.IMultipartContainer
-import mcmultipart.multipart.IPartConverter
-import mcmultipart.multipart.IReversePartConverter
-import net.minecraft.block.Block
-import net.minecraft.nbt.NBTTagCompound
-import net.minecraft.util.math.BlockPos
-import net.minecraft.world.IBlockAccess
-
-import scala.collection.convert.WrapAsScala._
-
-object PartConverter extends IPartConverter with IReversePartConverter {
- final lazy val CableBlock = api.Items.get(Constants.BlockName.Cable).block()
- final lazy val PrintBlock = api.Items.get(Constants.BlockName.Print).block()
-
- override def getConvertableBlocks: util.Collection[Block] = util.Arrays.asList(CableBlock, PrintBlock)
-
- override def convertBlock(world: IBlockAccess, pos: BlockPos, simulated: Boolean): util.Collection[_ <: IMultipart] = {
- world.getTileEntity(pos) match {
- case tileEntity: Cable =>
- val part = new PartCable()
- part.setColor(tileEntity.getColor)
- if (!simulated && tileEntity.node != null && part.node != null) {
- // Immediately connect node to avoid short disconnect.
- for (node <- tileEntity.node.neighbors) {
- node.connect(part.node)
- }
- }
- Collections.singletonList(part)
- case tileEntity: Print =>
- val part = new PartPrint()
- val nbt = new NBTTagCompound()
- tileEntity.writeToNBTForServer(nbt)
- part.wrapped.readFromNBTForServer(nbt)
- Collections.singletonList(part)
- case _ => Collections.emptyList()
- }
- }
-
- override def convertToBlock(container: IMultipartContainer): Boolean = {
- val world = container.getWorldIn
- val pos = container.getPosIn
- val parts = container.getParts
- (parts.size() == 1) && (parts.iterator().next() match {
- case part: PartCable =>
- val color = part.getColor
- world.setBlockToAir(pos)
- world.setBlockState(pos, CableBlock.getDefaultState)
- world.getTileEntity(pos) match {
- case tileEntity: Cable =>
- tileEntity.setColor(color)
- EventHandler.scheduleServer(() => PacketSender.sendColorChange(tileEntity)) // HACKS!
- case _ =>
- }
- // Immediately connect node to avoid short disconnect.
- api.Network.joinOrCreateNetwork(world, pos)
- // Required to dispose the old node because invalidate isn't forwarded to parts.
- // Can't use removePart because if the list is empty when this returns, MCMP
- // will tell MC that the block was removed so MC will set it to air.
- part.wrapped.invalidate()
- true
- case part: PartPrint =>
- val nbt = new NBTTagCompound()
- part.wrapped.writeToNBTForServer(nbt)
- world.setBlockToAir(pos)
- world.setBlockState(pos, PrintBlock.getDefaultState)
- world.getTileEntity(pos) match {
- case tileEntity: Print =>
- tileEntity.readFromNBTForServer(nbt)
- case _ =>
- }
- true
- case _ =>
- false
- })
- }
-}
diff --git a/src/main/scala/li/cil/oc/integration/mcmp/PartFactory.scala b/src/main/scala/li/cil/oc/integration/mcmp/PartFactory.scala
deleted file mode 100644
index a200f6150..000000000
--- a/src/main/scala/li/cil/oc/integration/mcmp/PartFactory.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-package li.cil.oc.integration.mcmp
-
-import li.cil.oc.Constants
-import li.cil.oc.Settings
-import li.cil.oc.api
-import li.cil.oc.common.item.data.PrintData
-import li.cil.oc.integration.Mods
-import mcmultipart.item.IItemMultipartFactory
-import mcmultipart.multipart.IMultipart
-import mcmultipart.multipart.IPartFactory
-import mcmultipart.multipart.MultipartHelper
-import net.minecraft.entity.player.EntityPlayer
-import net.minecraft.item.ItemStack
-import net.minecraft.util.EnumFacing
-import net.minecraft.util.ResourceLocation
-import net.minecraft.util.math.BlockPos
-import net.minecraft.util.math.Vec3d
-import net.minecraft.world.World
-
-import scala.collection.convert.WrapAsScala._
-
-object PartFactory extends IPartFactory with IItemMultipartFactory {
- final val PartTypeCable = new ResourceLocation(Mods.IDs.OpenComputers + ":" + Constants.BlockName.Cable)
- final val PartTypePrint = new ResourceLocation(Mods.IDs.OpenComputers + ":" + Constants.BlockName.Print)
-
- final lazy val CableDescriptor = api.Items.get(Constants.BlockName.Cable)
- final lazy val PrintDescriptor = api.Items.get(Constants.BlockName.Print)
-
- override def createPart(partType: ResourceLocation, client: Boolean): IMultipart = {
- if (partType == PartTypeCable) new PartCable()
- else if (partType == PartTypePrint) new PartPrint()
- else null
- }
-
- override def createPart(world: World, pos: BlockPos, side: EnumFacing, hit: Vec3d, stack: ItemStack, player: EntityPlayer): IMultipart = {
- val descriptor = api.Items.get(stack)
- if (descriptor == CableDescriptor) new PartCable()
- else if (descriptor == PrintDescriptor && canAddPrint(world, pos, stack)) {
- val part = new PartPrint()
- part.wrapped.data.load(stack)
- part.wrapped.setFromEntityPitchAndYaw(player)
- if (!part.wrapped.validFacings.contains(part.wrapped.pitch)) {
- part.wrapped.pitch = part.wrapped.validFacings.headOption.getOrElse(EnumFacing.NORTH)
- }
- part.wrapped.invertRotation()
- part
- }
- else null
- }
-
- private def canAddPrint(world: World, pos: BlockPos, stack: ItemStack): Boolean = {
- val container = MultipartHelper.getPartContainer(world, pos)
- container == null || {
- val complexity = container.getParts.collect {
- case print: PartPrint => print.wrapped.data.complexity
- }.sum
- val data = new PrintData(stack)
- data.complexity + complexity <= Settings.get.maxPrintComplexity
- }
- }
-}
diff --git a/src/main/scala/li/cil/oc/integration/mcmp/PartPrint.scala b/src/main/scala/li/cil/oc/integration/mcmp/PartPrint.scala
deleted file mode 100644
index 17ef1c709..000000000
--- a/src/main/scala/li/cil/oc/integration/mcmp/PartPrint.scala
+++ /dev/null
@@ -1,200 +0,0 @@
-package li.cil.oc.integration.mcmp
-
-import java.util
-
-import li.cil.oc.Constants
-import li.cil.oc.api
-import li.cil.oc.common.EventHandler
-import li.cil.oc.common.block.property
-import li.cil.oc.common.tileentity
-import mcmultipart.multipart.INormallyOccludingPart
-import mcmultipart.multipart.IRedstonePart
-import mcmultipart.multipart.Multipart
-import mcmultipart.multipart.MultipartRegistry
-import mcmultipart.raytrace.PartMOP
-import net.minecraft.block.Block
-import net.minecraft.block.material.Material
-import net.minecraft.block.state.BlockStateContainer
-import net.minecraft.block.state.IBlockState
-import net.minecraft.entity.Entity
-import net.minecraft.entity.player.EntityPlayer
-import net.minecraft.item.ItemStack
-import net.minecraft.nbt.NBTTagCompound
-import net.minecraft.network.PacketBuffer
-import net.minecraft.tileentity.TileEntity
-import net.minecraft.util.BlockRenderLayer
-import net.minecraft.util.EnumFacing
-import net.minecraft.util.EnumHand
-import net.minecraft.util.ResourceLocation
-import net.minecraft.util.math.AxisAlignedBB
-import net.minecraftforge.common.property.ExtendedBlockState
-import net.minecraftforge.common.property.IExtendedBlockState
-
-class PartPrint extends Multipart with INormallyOccludingPart with IRedstonePart {
- final val PrintDefinition = api.Items.get(Constants.BlockName.Print)
- final val PrintBlock = PrintDefinition.block()
-
- val wrapped = new tileentity.Print(canToggle _, scheduleUpdate _, onStateChange _)
-
- def canToggle: Boolean = getWorld != null && !getWorld.isRemote && {
- val toggled = new PartPrint()
- val nbt = new NBTTagCompound()
- wrapped.writeToNBTForServer(nbt)
- toggled.wrapped.readFromNBTForServer(nbt)
- toggled.wrapped.state = !wrapped.state
- getContainer.canReplacePart(this, toggled)
- }
-
- def scheduleUpdate(delay: Int): Unit = {
- EventHandler.scheduleServer(() => {
- if (wrapped.state) wrapped.toggleState()
- if (wrapped.state) scheduleUpdate(delay)
- }, delay)
- }
-
- def onStateChange(): Unit = {
- notifyPartUpdate()
- sendUpdatePacket(true)
- }
-
- // ----------------------------------------------------------------------- //
- // IRedstonePart
-
- override def canConnectRedstone(side: EnumFacing): Boolean = true
-
- override def getStrongSignal(side: EnumFacing): Int = getWeakSignal(side)
-
- override def getWeakSignal(side: EnumFacing): Int = wrapped.output(side)
-
- // ----------------------------------------------------------------------- //
- // IOccludingPart
-
- override def addOcclusionBoxes(list: util.List[AxisAlignedBB]): Unit = wrapped.addCollisionBoxesToList(null, list)
-
- // ----------------------------------------------------------------------- //
- // IMultipart
-
- override def addSelectionBoxes(list: util.List[AxisAlignedBB]): Unit = wrapped.addCollisionBoxesToList(null, list)
-
- override def addCollisionBoxes(mask: AxisAlignedBB, list: util.List[AxisAlignedBB], collidingEntity: Entity): Unit = {
- if (getWorld != null) {
- wrapped.addCollisionBoxesToList(mask, list)
- }
- }
-
- override def getLightValue: Int = wrapped.data.lightLevel
-
- override def getPickBlock(player: EntityPlayer, hit: PartMOP): ItemStack = wrapped.data.createItemStack()
-
- override def getDrops: util.List[ItemStack] = util.Arrays.asList(wrapped.data.createItemStack())
-
- override def getHardness(hit: PartMOP): Float = PrintBlock.getBlockHardness(MultipartRegistry.getDefaultState(this).getBaseState, getWorld, getPos)
-
- override def getMaterial: Material = PrintBlock.getMaterial(MultipartRegistry.getDefaultState(this).getBaseState)
-
- override def isToolEffective(toolType: String, level: Int): Boolean = PrintBlock.isToolEffective(toolType, getWorld.getBlockState(getPos))
-
- // ----------------------------------------------------------------------- //
-
- override def getModelPath = new ResourceLocation(MCMultiPart.PrintMultipartRawLocation)
-
- override def canRenderInLayer(layer: BlockRenderLayer): Boolean = layer == BlockRenderLayer.CUTOUT_MIPPED
-
- override def createBlockState(): BlockStateContainer = new ExtendedBlockState(PrintBlock, Array.empty, Array(property.PropertyTile.Tile))
-
- override def getExtendedState(state: IBlockState): IBlockState =
- state match {
- case extendedState: IExtendedBlockState =>
- wrapped.setWorldObj(getWorld)
- wrapped.setPos(getPos)
- extendedState.withProperty(property.PropertyTile.Tile, wrapped)
- case _ => state
- }
-
- // ----------------------------------------------------------------------- //
-
- override def onNeighborBlockChange(block: Block): Unit = {
- EnumFacing.values().foreach(wrapped.updateRedstoneInput)
- }
-
- override def onAdded(): Unit = {
- super.onAdded()
- initialize()
- }
-
- override def onRemoved(): Unit = {
- super.onRemoved()
- wrapped.invalidate()
- wrapped.setWorldObj(null)
- wrapped.setPos(null)
- }
-
- override def onLoaded(): Unit = {
- super.onLoaded()
- initialize()
- }
-
- override def onUnloaded(): Unit = {
- super.onUnloaded()
- wrapped.onChunkUnload()
- wrapped.setWorldObj(null)
- wrapped.setPos(null)
- }
-
- override def onConverted(tile: TileEntity): Unit = {
- super.onConverted(tile)
- tile match {
- case print: tileentity.Print =>
- val nbt = new NBTTagCompound()
- print.writeToNBTForServer(nbt)
- wrapped.readFromNBTForServer(nbt)
- case _ =>
- }
- initialize()
- }
-
- private def initialize(): Unit = {
- wrapped.setWorldObj(getWorld)
- wrapped.setPos(getPos)
- wrapped.validate()
- wrapped.updateRedstone()
-
- if (wrapped.state && wrapped.data.isButtonMode) {
- scheduleUpdate(PrintBlock.tickRate(getWorld))
- }
- }
-
- // ----------------------------------------------------------------------- //
-
- override def onActivated(player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, hit: PartMOP): Boolean = {
- wrapped.activate()
- }
-
- // ----------------------------------------------------------------------- //
-
- override def writeToNBT(tag: NBTTagCompound): NBTTagCompound = {
- super.writeToNBT(tag)
- wrapped.writeToNBT(tag)
- tag
- }
-
- override def readFromNBT(tag: NBTTagCompound): Unit = {
- super.readFromNBT(tag)
- wrapped.readFromNBT(tag)
- }
-
- override def writeUpdatePacket(buf: PacketBuffer): Unit = {
- super.writeUpdatePacket(buf)
- val nbt = new NBTTagCompound()
- wrapped.writeToNBTForClient(nbt)
- buf.writeNBTTagCompoundToBuffer(nbt)
- }
-
- override def readUpdatePacket(buf: PacketBuffer): Unit = {
- super.readUpdatePacket(buf)
- wrapped.setWorldObj(getWorld)
- wrapped.setPos(getPos)
- val nbt = buf.readNBTTagCompoundFromBuffer()
- wrapped.readFromNBTForClient(nbt)
- }
-}
diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverRedstoneCard.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverRedstoneCard.scala
index c856b60e3..8ca2a01bd 100644
--- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverRedstoneCard.scala
+++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverRedstoneCard.scala
@@ -12,7 +12,6 @@ import li.cil.oc.common.item.Delegator
import li.cil.oc.common.tileentity.traits.BundledRedstoneAware
import li.cil.oc.common.tileentity.traits.RedstoneAware
import li.cil.oc.integration.util.BundledRedstone
-import li.cil.oc.integration.util.WirelessRedstone
import li.cil.oc.server.component
import net.minecraft.item.ItemStack
@@ -26,17 +25,12 @@ object DriverRedstoneCard extends Item with HostAware {
else {
val isAdvanced = tier(stack) == Tier.Two
val hasBundled = BundledRedstone.isAvailable && isAdvanced
- val hasWireless = WirelessRedstone.isAvailable && isAdvanced
host match {
case redstone: BundledRedstoneAware if hasBundled =>
- if (hasWireless) new component.Redstone.BundledWireless(redstone)
- else new component.Redstone.Bundled(redstone)
+ new component.Redstone.Bundled(redstone)
case redstone: RedstoneAware =>
- if (hasWireless) new component.Redstone.VanillaWireless(redstone)
- else new component.Redstone.Vanilla(redstone)
- case _ =>
- if (hasWireless) new component.Redstone.Wireless(host)
- else null
+ new component.Redstone.Vanilla(redstone)
+ case _ => null
}
}
@@ -53,10 +47,8 @@ object DriverRedstoneCard extends Item with HostAware {
if (worksWith(stack)) {
val isAdvanced = tier(stack) == Tier.Two
val hasBundled = BundledRedstone.isAvailable && isAdvanced
- val hasWireless = WirelessRedstone.isAvailable && isAdvanced
if (hasBundled) {
- if (hasWireless) classOf[component.Redstone.BundledWireless]
- else classOf[component.Redstone.Bundled]
+ classOf[component.Redstone.Bundled]
}
else {
classOf[component.Redstone.Vanilla]
diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/ModOpenComputers.scala b/src/main/scala/li/cil/oc/integration/opencomputers/ModOpenComputers.scala
index 10037d073..6db558820 100644
--- a/src/main/scala/li/cil/oc/integration/opencomputers/ModOpenComputers.scala
+++ b/src/main/scala/li/cil/oc/integration/opencomputers/ModOpenComputers.scala
@@ -37,7 +37,6 @@ import li.cil.oc.integration.ModProxy
import li.cil.oc.integration.Mods
import li.cil.oc.integration.util.BundledRedstone
import li.cil.oc.integration.util.ItemBlacklist
-import li.cil.oc.integration.util.WirelessRedstone
import li.cil.oc.server.machine.luac.LuaStateFactory
import li.cil.oc.server.machine.luac.NativeLua53Architecture
import li.cil.oc.server.network.Waypoints
@@ -294,15 +293,10 @@ object ModOpenComputers extends ModProxy {
Constants.ItemName.LeashUpgrade,
Constants.ItemName.TradingUpgrade)
- if (!WirelessRedstone.isAvailable) {
- blacklistHost(classOf[internal.Drone], Constants.ItemName.RedstoneCardTier2)
- blacklistHost(classOf[internal.Tablet], Constants.ItemName.RedstoneCardTier2)
- }
-
// Note: kinda nasty, but we have to check for availability for extended
// redstone mods after integration init, so we have to set tier two
// redstone card availability here, after all other mods were inited.
- if (BundledRedstone.isAvailable || WirelessRedstone.isAvailable) {
+ if (BundledRedstone.isAvailable) {
OpenComputers.log.info("Found extended redstone mods, enabling tier two redstone card.")
Delegator.subItem(api.Items.get(Constants.ItemName.RedstoneCardTier2).createItemStack(1)) match {
case Some(redstone: RedstoneCard) => redstone.showInItemList = true
diff --git a/src/main/scala/li/cil/oc/integration/util/BundledRedstone.scala b/src/main/scala/li/cil/oc/integration/util/BundledRedstone.scala
index 998650f3a..d133bd8f5 100644
--- a/src/main/scala/li/cil/oc/integration/util/BundledRedstone.scala
+++ b/src/main/scala/li/cil/oc/integration/util/BundledRedstone.scala
@@ -12,7 +12,7 @@ object BundledRedstone {
def addProvider(provider: RedstoneProvider): Unit = providers += provider
- def isAvailable = Mods.MineFactoryReloaded.isAvailable || providers.nonEmpty
+ def isAvailable = providers.nonEmpty
def computeInput(pos: BlockPosition, side: EnumFacing): Int = {
if (pos.world.get.blockExists(pos.offset(side)))
diff --git a/src/main/scala/li/cil/oc/integration/util/PortalGun.scala b/src/main/scala/li/cil/oc/integration/util/PortalGun.scala
deleted file mode 100644
index 9848aef4f..000000000
--- a/src/main/scala/li/cil/oc/integration/util/PortalGun.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-package li.cil.oc.integration.util
-
-import li.cil.oc.integration.Mods
-import net.minecraft.item.ItemStack
-
-object PortalGun {
- private lazy val portalGunClass = try {
- Class.forName("portalgun.common.item.ItemPortalGun")
- }
- catch {
- case _: Throwable => null
- }
-
- def isPortalGun(stack: ItemStack) =
- stack != null && stack.getCount > 0 &&
- Mods.PortalGun.isAvailable &&
- portalGunClass != null &&
- portalGunClass.isAssignableFrom(stack.getItem.getClass)
-
- def isStandardPortalGun(stack: ItemStack) = isPortalGun(stack) && stack.getItemDamage == 0
-}
diff --git a/src/main/scala/li/cil/oc/integration/util/Waila.scala b/src/main/scala/li/cil/oc/integration/util/Waila.scala
deleted file mode 100644
index 179b28ea0..000000000
--- a/src/main/scala/li/cil/oc/integration/util/Waila.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package li.cil.oc.integration.util
-
-import li.cil.oc.integration.Mods
-
-object Waila {
- // This is used to check if certain data actually has to be saved in
- // writeToNBT calls. For some stuff we write lots of data (e.g. computer
- // state), and we want to avoid that when Waila is calling us.
- def isSavingForTooltip = Mods.Waila.isAvailable && new Exception().getStackTrace.exists(_.getClassName.startsWith("mcp.mobius.waila"))
-}
diff --git a/src/main/scala/li/cil/oc/integration/util/WirelessRedstone.scala b/src/main/scala/li/cil/oc/integration/util/WirelessRedstone.scala
deleted file mode 100644
index 806942ab2..000000000
--- a/src/main/scala/li/cil/oc/integration/util/WirelessRedstone.scala
+++ /dev/null
@@ -1,50 +0,0 @@
-package li.cil.oc.integration.util
-
-import li.cil.oc.server.component.RedstoneWireless
-
-import scala.collection.mutable
-
-object WirelessRedstone {
- val systems = mutable.Set.empty[WirelessRedstoneSystem]
-
- def isAvailable = systems.nonEmpty
-
- def addReceiver(rs: RedstoneWireless) {
- systems.foreach(system => try system.addReceiver(rs) catch {
- case _: Throwable => // Ignore
- })
- }
-
- def removeReceiver(rs: RedstoneWireless) {
- systems.foreach(system => try system.removeReceiver(rs) catch {
- case _: Throwable => // Ignore
- })
- }
-
- def updateOutput(rs: RedstoneWireless) {
- systems.foreach(system => try system.updateOutput(rs) catch {
- case _: Throwable => // Ignore
- })
- }
-
- def removeTransmitter(rs: RedstoneWireless) {
- systems.foreach(system => try system.removeTransmitter(rs) catch {
- case _: Throwable => // Ignore
- })
- }
-
- def getInput(rs: RedstoneWireless) = systems.exists(_.getInput(rs))
-
- trait WirelessRedstoneSystem {
- def addReceiver(rs: RedstoneWireless)
-
- def removeReceiver(rs: RedstoneWireless)
-
- def updateOutput(rs: RedstoneWireless)
-
- def removeTransmitter(rs: RedstoneWireless)
-
- def getInput(rs: RedstoneWireless): Boolean
- }
-
-}
diff --git a/src/main/scala/li/cil/oc/server/agent/Player.scala b/src/main/scala/li/cil/oc/server/agent/Player.scala
index 5d89c182e..82a543d3d 100644
--- a/src/main/scala/li/cil/oc/server/agent/Player.scala
+++ b/src/main/scala/li/cil/oc/server/agent/Player.scala
@@ -10,7 +10,6 @@ import li.cil.oc.api.internal
import li.cil.oc.api.network.Connector
import li.cil.oc.common.EventHandler
import li.cil.oc.integration.Mods
-import li.cil.oc.integration.util.PortalGun
import li.cil.oc.util.BlockPosition
import li.cil.oc.util.InventoryUtils
import net.minecraft.block.Block
@@ -102,13 +101,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc
setSize(1, 1)
- {
- val inventory = new Inventory(agent)
- if (Mods.BattleGear2.isAvailable) {
- ObfuscationReflectionHelper.setPrivateValue(classOf[EntityPlayer], this, inventory, "inventory", "field_71071_by", "bm")
- }
- else this.inventory = inventory
- }
+ this.inventory = new Inventory(agent)
var facing, side = EnumFacing.SOUTH
@@ -194,10 +187,8 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc
}
val item = if (stack != null) stack.getItem else null
- if (!PortalGun.isPortalGun(stack)) {
- if (item != null && item.onItemUseFirst(this, world, pos, side, hitX, hitY, hitZ, EnumHand.MAIN_HAND) == EnumActionResult.SUCCESS) {
- return ActivationType.ItemUsed
- }
+ if (item != null && item.onItemUseFirst(this, world, pos, side, hitX, hitY, hitZ, EnumHand.MAIN_HAND) == EnumActionResult.SUCCESS) {
+ return ActivationType.ItemUsed
}
val state = world.getBlockState(pos)
@@ -275,7 +266,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc
def sizeOrDamageChanged = newStack.getCount != oldSize || newStack.getItemDamage != oldDamage
def tagChanged = (oldData == null && newStack.hasTagCompound) || (oldData != null && !newStack.hasTagCompound) ||
(oldData != null && newStack.hasTagCompound && !oldData.equals(newStack.getTagCompound))
- val stackChanged = newStack != stack || (newStack != null && (sizeOrDamageChanged || tagChanged || PortalGun.isStandardPortalGun(stack)))
+ val stackChanged = newStack != stack || (newStack != null && (sizeOrDamageChanged || tagChanged))
if (stackChanged) {
agent.equipmentInventory.setInventorySlotContents(0, newStack)
}
@@ -403,9 +394,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc
}
private def isItemUseAllowed(stack: ItemStack) = stack == null || {
- (Settings.get.allowUseItemsWithDuration || stack.getMaxItemUseDuration <= 0) &&
- (!PortalGun.isPortalGun(stack) || PortalGun.isStandardPortalGun(stack)) &&
- !stack.isItemEqual(new ItemStack(Items.LEAD))
+ (Settings.get.allowUseItemsWithDuration || stack.getMaxItemUseDuration <= 0) && !stack.isItemEqual(new ItemStack(Items.LEAD))
}
override def dropItem(stack: ItemStack, dropAround: Boolean, traceItem: Boolean): EntityItem =
diff --git a/src/main/scala/li/cil/oc/server/component/DebugCard.scala b/src/main/scala/li/cil/oc/server/component/DebugCard.scala
index 2b7098dd2..8f846c9e0 100644
--- a/src/main/scala/li/cil/oc/server/component/DebugCard.scala
+++ b/src/main/scala/li/cil/oc/server/component/DebugCard.scala
@@ -46,7 +46,7 @@ import net.minecraftforge.common.util.FakePlayer
import net.minecraftforge.common.util.FakePlayerFactory
import net.minecraftforge.fluids.FluidRegistry
import net.minecraftforge.fluids.FluidStack
-import net.minecraftforge.fluids.IFluidHandler
+import net.minecraftforge.fluids.capability.IFluidHandler
import net.minecraftforge.fml.common.FMLCommonHandler
import net.minecraftforge.fml.common.Loader
import net.minecraftforge.fml.common.ModAPIManager
@@ -129,7 +129,7 @@ class DebugCard(host: EnvironmentHost) extends prefab.ManagedEnvironment with De
@Callback(doc = """function():table -- Get a list of currently logged-in players.""")
def getPlayers(context: Context, args: Arguments): Array[AnyRef] = {
checkAccess()
- result(FMLCommonHandler.instance.getMinecraftServerInstance.getAllUsernames)
+ result(FMLCommonHandler.instance.getMinecraftServerInstance.getOnlinePlayerNames)
}
@Callback(doc = """function():userdata -- Get the scoreboard object for the world""")
@@ -799,7 +799,7 @@ object DebugCard {
val position = BlockPosition(args.checkDouble(2), args.checkDouble(3), args.checkDouble(4), world)
val side = args.checkSideAny(5)
world.getTileEntity(position) match {
- case handler: IFluidHandler => result(handler.fill(side, new FluidStack(fluid, amount), true))
+ case handler: IFluidHandler => result(handler.fill(new FluidStack(fluid, amount), true))
case _ => result(Unit, "no tank")
}
}
@@ -811,7 +811,7 @@ object DebugCard {
val position = BlockPosition(args.checkDouble(1), args.checkDouble(2), args.checkDouble(3), world)
val side = args.checkSideAny(4)
world.getTileEntity(position) match {
- case handler: IFluidHandler => result(handler.drain(side, amount, true))
+ case handler: IFluidHandler => result(handler.drain(amount, true))
case _ => result(Unit, "no tank")
}
}
diff --git a/src/main/scala/li/cil/oc/server/component/Redstone.scala b/src/main/scala/li/cil/oc/server/component/Redstone.scala
index 93cdd36fd..c1d8d384e 100644
--- a/src/main/scala/li/cil/oc/server/component/Redstone.scala
+++ b/src/main/scala/li/cil/oc/server/component/Redstone.scala
@@ -1,17 +1,10 @@
package li.cil.oc.server.component
-import java.util
-
-import li.cil.oc.Constants
-import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute
-import li.cil.oc.api.driver.DeviceInfo.DeviceClass
import li.cil.oc.api.network.EnvironmentHost
import li.cil.oc.common.tileentity.traits.BundledRedstoneAware
import li.cil.oc.common.tileentity.traits.RedstoneAware
import li.cil.oc.server.component
-import scala.collection.convert.WrapAsJava._
-
object Redstone {
class Vanilla(val redstone: EnvironmentHost with RedstoneAware)
@@ -20,24 +13,4 @@ object Redstone {
class Bundled(val redstone: EnvironmentHost with BundledRedstoneAware)
extends component.RedstoneVanilla with component.RedstoneBundled
- class Wireless(val redstone: EnvironmentHost)
- extends component.RedstoneWireless
-
- class VanillaWireless(val redstone: EnvironmentHost with RedstoneAware)
- extends component.RedstoneVanilla with component.RedstoneWireless
-
- class BundledWireless(val redstone: EnvironmentHost with BundledRedstoneAware)
- extends component.RedstoneVanilla with component.RedstoneBundled with component.RedstoneWireless {
- private final lazy val deviceInfo = Map(
- DeviceAttribute.Class -> DeviceClass.Communication,
- DeviceAttribute.Description -> "Combined redstone controller",
- DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor,
- DeviceAttribute.Product -> "Rx900-M",
- DeviceAttribute.Capacity -> "65536",
- DeviceAttribute.Width -> "16"
- )
-
- override def getDeviceInfo: util.Map[String, String] = deviceInfo
- }
-
}
diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala
deleted file mode 100644
index 7ce68d0d6..000000000
--- a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala
+++ /dev/null
@@ -1,165 +0,0 @@
-package li.cil.oc.server.component
-
-/* TODO WRCBE
-import codechicken.lib.vec.Vector3
-import codechicken.wirelessredstone.core.WirelessReceivingDevice
-import codechicken.wirelessredstone.core.WirelessTransmittingDevice
-*/
-
-import li.cil.oc.Constants
-import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute
-import li.cil.oc.api.driver.DeviceInfo.DeviceClass
-import li.cil.oc.Settings
-import li.cil.oc.api.driver.DeviceInfo
-import li.cil.oc.api.network.EnvironmentHost
-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._
-import li.cil.oc.common.EventHandler
-import li.cil.oc.integration.Mods
-import li.cil.oc.integration.util
-import net.minecraft.nbt.NBTTagCompound
-import net.minecraftforge.fml.common.Optional
-
-import scala.collection.convert.WrapAsJava._
-
-@Optional.InterfaceList(Array(
- new Optional.Interface(iface = "codechicken.wirelessredstone.core.WirelessReceivingDevice", modid = Mods.IDs.WirelessRedstoneCBE),
- new Optional.Interface(iface = "codechicken.wirelessredstone.core.WirelessTransmittingDevice", modid = Mods.IDs.WirelessRedstoneCBE)
-))
-trait RedstoneWireless extends RedstoneSignaller /* with WirelessReceivingDevice with WirelessTransmittingDevice TODO WRCBE */ with DeviceInfo {
- def redstone: EnvironmentHost
-
- var wirelessFrequency = 0
-
- var wirelessInput = false
-
- var wirelessOutput = false
-
- // ----------------------------------------------------------------------- //
-
- private final lazy val deviceInfo = Map(
- DeviceAttribute.Class -> DeviceClass.Communication,
- DeviceAttribute.Description -> "Wireless redstone controller",
- DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor,
- DeviceAttribute.Product -> "Rw400-M",
- DeviceAttribute.Capacity -> "1",
- DeviceAttribute.Width -> "1"
- )
-
- override def getDeviceInfo: java.util.Map[String, String] = deviceInfo
-
- // ----------------------------------------------------------------------- //
-
- @Callback(doc = """function():number -- Get the wireless redstone input.""")
- def getWirelessInput(context: Context, args: Arguments): Array[AnyRef] = {
- wirelessInput = util.WirelessRedstone.getInput(this)
- result(wirelessInput)
- }
-
- @Callback(direct = true, doc = """function():boolean -- Get the wireless redstone output.""")
- def getWirelessOutput(context: Context, args: Arguments): Array[AnyRef] = result(wirelessOutput)
-
- @Callback(doc = """function(value:boolean):boolean -- Set the wireless redstone output.""")
- def setWirelessOutput(context: Context, args: Arguments): Array[AnyRef] = {
- val oldValue = wirelessOutput
- val newValue = args.checkBoolean(0)
-
- if (oldValue != newValue) {
- wirelessOutput = newValue
-
- util.WirelessRedstone.updateOutput(this)
-
- if (Settings.get.redstoneDelay > 0)
- context.pause(Settings.get.redstoneDelay)
- }
-
- result(oldValue)
- }
-
- @Callback(direct = true, doc = """function():number -- Get the currently set wireless redstone frequency.""")
- def getWirelessFrequency(context: Context, args: Arguments): Array[AnyRef] = result(wirelessFrequency)
-
- @Callback(doc = """function(frequency:number):number -- Set the wireless redstone frequency to use.""")
- def setWirelessFrequency(context: Context, args: Arguments): Array[AnyRef] = {
- val oldValue = wirelessFrequency
- val newValue = args.checkInteger(0)
-
- if (oldValue != newValue) {
- util.WirelessRedstone.removeReceiver(this)
- util.WirelessRedstone.removeTransmitter(this)
-
- wirelessFrequency = newValue
- wirelessInput = false
- wirelessOutput = false
-
- util.WirelessRedstone.addReceiver(this)
-
- context.pause(0.5)
- }
-
- result(oldValue)
- }
-
- // ----------------------------------------------------------------------- //
- /* TODO WRCBE
- @Optional.Method(modid = Mods.IDs.WirelessRedstoneCBE)
- override def updateDevice(frequency: Int, on: Boolean) {
- if (frequency == wirelessFrequency && on != wirelessInput) {
- wirelessInput = on
- onRedstoneChanged("wireless", if (on) 0 else 1, if (on) 1 else 0)
- }
- }
-
- @Optional.Method(modid = Mods.IDs.WirelessRedstoneCBE)
- override def getPosition = new Vector3(redstone.xPosition, redstone.yPosition, redstone.zPosition)
-
- @Optional.Method(modid = Mods.IDs.WirelessRedstoneCBE)
- override def getDimension = redstone.world.provider.getDimensionId
-
- @Optional.Method(modid = Mods.IDs.WirelessRedstoneCBE)
- override def getFreq = wirelessFrequency
-
- @Optional.Method(modid = Mods.IDs.WirelessRedstoneCBE)
- override def getAttachedEntity = null
- */
- // ----------------------------------------------------------------------- //
-
- override def onConnect(node: Node) {
- super.onConnect(node)
- if (node == this.node) {
- EventHandler.scheduleWirelessRedstone(this)
- }
- }
-
- override def onDisconnect(node: Node) {
- super.onDisconnect(node)
- if (node == this.node) {
- util.WirelessRedstone.removeReceiver(this)
- util.WirelessRedstone.removeTransmitter(this)
- wirelessOutput = false
- wirelessFrequency = 0
- }
- }
-
- // ----------------------------------------------------------------------- //
-
- private final val WirelessFrequencyTag = "wirelessFrequency"
- private final val WirelessInputTag = "wirelessInput"
- private final val WirelessOutputTag = "wirelessOutput"
-
- override def load(nbt: NBTTagCompound) {
- super.load(nbt)
- wirelessFrequency = nbt.getInteger(WirelessFrequencyTag)
- wirelessInput = nbt.getBoolean(WirelessInputTag)
- wirelessOutput = nbt.getBoolean(WirelessOutputTag)
- }
-
- override def save(nbt: NBTTagCompound) {
- super.save(nbt)
- nbt.setInteger(WirelessFrequencyTag, wirelessFrequency)
- nbt.setBoolean(WirelessInputTag, wirelessInput)
- nbt.setBoolean(WirelessOutputTag, wirelessOutput)
- }
-}
diff --git a/src/main/scala/li/cil/oc/server/component/traits/TankInventoryControl.scala b/src/main/scala/li/cil/oc/server/component/traits/TankInventoryControl.scala
index 1f62a7249..b155cd24a 100644
--- a/src/main/scala/li/cil/oc/server/component/traits/TankInventoryControl.scala
+++ b/src/main/scala/li/cil/oc/server/component/traits/TankInventoryControl.scala
@@ -6,11 +6,10 @@ import li.cil.oc.api.machine.Callback
import li.cil.oc.api.machine.Context
import li.cil.oc.server.component.result
import li.cil.oc.util.ExtendedArguments._
+import li.cil.oc.util.FluidUtils
import li.cil.oc.util.InventoryUtils
import net.minecraft.item.ItemStack
-import net.minecraftforge.fluids.FluidContainerRegistry
import net.minecraftforge.fluids.FluidStack
-import net.minecraftforge.fluids.IFluidContainerItem
trait TankInventoryControl extends WorldAware with InventoryAware with TankAware {
@Callback(doc = """function([slot:number]):number -- Get the amount of fluid in the tank item in the specified slot or the selected slot.""")
@@ -39,35 +38,16 @@ trait TankInventoryControl extends WorldAware with InventoryAware with TankAware
Option(tank.getFluidTank(selectedTank)) match {
case Some(into) => inventory.getStackInSlot(selectedSlot) match {
case stack: ItemStack =>
- if (FluidContainerRegistry.isFilledContainer(stack)) {
- val contents = FluidContainerRegistry.getFluidForFilledItem(stack)
- val container = stack.getItem.getContainerItem(stack)
- if (into.getCapacity - into.getFluidAmount < contents.amount) {
- result(Unit, "tank is full")
- }
- else if (into.fill(contents, false) < contents.amount) {
- result(Unit, "incompatible fluid")
- }
- else {
- into.fill(contents, true)
- inventory.decrStackSize(selectedSlot, 1)
- InventoryUtils.insertIntoInventory(container, InventoryUtils.asItemHandler(inventory), slots = Option(insertionSlots))
- if (container.getCount > 0) {
- InventoryUtils.spawnStackInWorld(position, container)
- }
- result(true, contents.amount)
- }
- }
- else stack.getItem match {
- case from: IFluidContainerItem =>
- val drained = from.drain(stack, amount, false)
+ Option(FluidUtils.fluidHandlerOf(stack)) match {
+ case Some(handler) =>
+ val drained = handler.drain(amount, false)
val transferred = into.fill(drained, true)
if (transferred > 0) {
- from.drain(stack, transferred, true)
+ handler.drain(transferred, true)
result(true, transferred)
}
else result(Unit, "incompatible or no fluid")
- case _ => result(Unit, "item is empty or not a fluid container")
+ case _ => result(Unit, "item is not a fluid container")
}
case _ => result(Unit, "nothing selected")
}
@@ -81,33 +61,16 @@ trait TankInventoryControl extends WorldAware with InventoryAware with TankAware
Option(tank.getFluidTank(selectedTank)) match {
case Some(from) => inventory.getStackInSlot(selectedSlot) match {
case stack: ItemStack =>
- if (FluidContainerRegistry.isEmptyContainer(stack)) {
- val drained = from.drain(amount, false)
- val filled = FluidContainerRegistry.fillFluidContainer(drained, stack)
- if (filled == null) {
- result(Unit, "tank is empty")
- }
- else {
- val amount = FluidContainerRegistry.getFluidForFilledItem(filled).amount
- from.drain(amount, true)
- inventory.decrStackSize(selectedSlot, 1)
- InventoryUtils.insertIntoInventory(filled, InventoryUtils.asItemHandler(inventory), slots = Option(insertionSlots))
- if (filled.getCount > 0) {
- InventoryUtils.spawnStackInWorld(position, filled)
- }
- result(true, amount)
- }
- }
- else stack.getItem match {
- case into: IFluidContainerItem =>
+ Option(FluidUtils.fluidHandlerOf(stack)) match {
+ case Some(handler) =>
val drained = from.drain(amount, false)
- val transferred = into.fill(stack, drained, true)
+ val transferred = handler.fill(drained, true)
if (transferred > 0) {
from.drain(transferred, true)
result(true, transferred)
}
else result(Unit, "incompatible or no fluid")
- case _ => result(Unit, "item is full or not a fluid container")
+ case _ => result(Unit, "item is not a fluid container")
}
case _ => result(Unit, "nothing selected")
}
@@ -116,17 +79,11 @@ trait TankInventoryControl extends WorldAware with InventoryAware with TankAware
}
private def withFluidInfo(slot: Int, f: (Option[FluidStack], Int) => Array[AnyRef]) = {
- def fluidInfo(stack: ItemStack) = {
- if (FluidContainerRegistry.isFilledContainer(stack)) {
- Option((Option(FluidContainerRegistry.getFluidForFilledItem(stack)), FluidContainerRegistry.getContainerCapacity(stack)))
- }
- else if (FluidContainerRegistry.isEmptyContainer(stack)) {
- Option((None, FluidContainerRegistry.getContainerCapacity(stack)))
- }
- else stack.getItem match {
- case from: IFluidContainerItem => Option((Option(from.getFluid(stack)), from.getCapacity(stack)))
- case _ => None
- }
+ def fluidInfo(stack: ItemStack) = Option(FluidUtils.fluidHandlerOf(stack)) match {
+ case Some(handler) if handler.getTankProperties.length > 0 =>
+ val props = handler.getTankProperties()(0)
+ Option((Option(props.getContents), props.getCapacity))
+ case _ => None
}
inventory.getStackInSlot(slot) match {
diff --git a/src/main/scala/li/cil/oc/server/component/traits/TankWorldControl.scala b/src/main/scala/li/cil/oc/server/component/traits/TankWorldControl.scala
index 42024bf20..f2677ff82 100644
--- a/src/main/scala/li/cil/oc/server/component/traits/TankWorldControl.scala
+++ b/src/main/scala/li/cil/oc/server/component/traits/TankWorldControl.scala
@@ -15,7 +15,7 @@ trait TankWorldControl extends TankAware with WorldAware with SideRestricted {
fluidInTank(selectedTank) match {
case Some(stack) =>
FluidUtils.fluidHandlerAt(position.offset(side), side.getOpposite) match {
- case Some(handler) => result(Option(handler.getTankInfo(side.getOpposite)).exists(_.exists(other => stack.isFluidEqual(other.fluid))))
+ case Some(handler) => result(Option(handler.getTankProperties).exists(_.exists(other => stack.isFluidEqual(other.getContents))))
case _ => result(false)
}
case _ => result(false)
@@ -35,14 +35,14 @@ trait TankWorldControl extends TankAware with WorldAware with SideRestricted {
case Some(handler) =>
tank.getFluid match {
case stack: FluidStack =>
- val drained = handler.drain(facing.getOpposite, new FluidStack(stack, amount), true)
+ val drained = handler.drain(new FluidStack(stack, amount), true)
if ((drained != null && drained.amount > 0) || amount == 0) {
val filled = tank.fill(drained, true)
result(true, filled)
}
else result(Unit, "incompatible or no fluid")
case _ =>
- val transferred = tank.fill(handler.drain(facing.getOpposite, amount, true), true)
+ val transferred = tank.fill(handler.drain(amount, true), true)
result(transferred > 0, transferred)
}
case _ => result(Unit, "incompatible or no fluid")
@@ -65,7 +65,7 @@ trait TankWorldControl extends TankAware with WorldAware with SideRestricted {
case Some(handler) =>
tank.getFluid match {
case stack: FluidStack =>
- val filled = handler.fill(facing.getOpposite, new FluidStack(stack, amount), true)
+ val filled = handler.fill(new FluidStack(stack, amount), true)
if (filled > 0 || amount == 0) {
tank.drain(filled, true)
result(true, filled)
diff --git a/src/main/scala/li/cil/oc/server/component/traits/WorldTankAnalytics.scala b/src/main/scala/li/cil/oc/server/component/traits/WorldTankAnalytics.scala
index 711f958b9..b155057c0 100644
--- a/src/main/scala/li/cil/oc/server/component/traits/WorldTankAnalytics.scala
+++ b/src/main/scala/li/cil/oc/server/component/traits/WorldTankAnalytics.scala
@@ -14,7 +14,7 @@ trait WorldTankAnalytics extends WorldAware with SideRestricted {
FluidUtils.fluidHandlerAt(position.offset(facing), facing.getOpposite) match {
case Some(handler) =>
- result(handler.getTankInfo(facing.getOpposite).map(info => Option(info.fluid).fold(0)(_.amount)).sum)
+ result(handler.getTankProperties.map(info => Option(info.getContents).fold(0)(_.amount)).sum)
case _ => result(Unit, "no tank")
}
}
@@ -24,7 +24,7 @@ trait WorldTankAnalytics extends WorldAware with SideRestricted {
val facing = checkSideForAction(args, 0)
FluidUtils.fluidHandlerAt(position.offset(facing), facing.getOpposite) match {
case Some(handler) =>
- result(handler.getTankInfo(facing.getOpposite).map(_.capacity).foldLeft(0)((max, capacity) => math.max(max, capacity)))
+ result(handler.getTankProperties.map(_.getCapacity).foldLeft(0)((max, capacity) => math.max(max, capacity)))
case _ => result(Unit, "no tank")
}
}
@@ -34,7 +34,7 @@ trait WorldTankAnalytics extends WorldAware with SideRestricted {
val facing = checkSideForAction(args, 0)
FluidUtils.fluidHandlerAt(position.offset(facing), facing.getOpposite) match {
case Some(handler) =>
- result(handler.getTankInfo(facing.getOpposite))
+ result(handler.getTankProperties)
case _ => result(Unit, "no tank")
}
}
diff --git a/src/main/scala/li/cil/oc/util/FluidUtils.scala b/src/main/scala/li/cil/oc/util/FluidUtils.scala
index 0c86f318a..124661e6f 100644
--- a/src/main/scala/li/cil/oc/util/FluidUtils.scala
+++ b/src/main/scala/li/cil/oc/util/FluidUtils.scala
@@ -7,6 +7,7 @@ import net.minecraft.block.BlockDynamicLiquid
import net.minecraft.block.BlockLiquid
import net.minecraft.block.BlockStaticLiquid
import net.minecraft.init.Blocks
+import net.minecraft.item.ItemStack
import net.minecraft.tileentity.TileEntity
import net.minecraft.util.EnumFacing
import net.minecraftforge.fluids.Fluid
@@ -15,9 +16,11 @@ import net.minecraftforge.fluids.FluidStack
import net.minecraftforge.fluids.FluidTank
import net.minecraftforge.fluids.FluidTankInfo
import net.minecraftforge.fluids.IFluidBlock
-import net.minecraftforge.fluids.IFluidHandler
import net.minecraftforge.fluids.capability
import net.minecraftforge.fluids.capability.CapabilityFluidHandler
+import net.minecraftforge.fluids.capability.IFluidHandler
+import net.minecraftforge.fluids.capability.IFluidHandlerItem
+import net.minecraftforge.fluids.capability.IFluidTankProperties
object FluidUtils {
/**
@@ -38,6 +41,12 @@ object FluidUtils {
case _ => None
}
+ def fluidHandlerOf(stack: ItemStack): IFluidHandlerItem = Option(stack) match {
+ case Some(itemStack) if itemStack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null) =>
+ itemStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)
+ case _ => null
+ }
+
/**
* Transfers some fluid between two fluid handlers.
*
@@ -47,10 +56,10 @@ object FluidUtils {
*
* This returns true if some fluid was transferred.
*/
- def transferBetweenFluidHandlers(source: IFluidHandler, sourceSide: EnumFacing, sink: IFluidHandler, sinkSide: EnumFacing, limit: Int = Fluid.BUCKET_VOLUME) = {
- val drained = source.drain(sourceSide, limit, false)
- val filled = sink.fill(sinkSide, drained, false)
- sink.fill(sinkSide, source.drain(sourceSide, filled, true), true)
+ def transferBetweenFluidHandlers(source: IFluidHandler, sink: IFluidHandler, limit: Int = Fluid.BUCKET_VOLUME) = {
+ val drained = source.drain(limit, false)
+ val filled = sink.fill(drained, false)
+ sink.fill(source.drain(filled, true), true)
}
/**
@@ -63,7 +72,7 @@ object FluidUtils {
def transferBetweenFluidHandlersAt(sourcePos: BlockPosition, sourceSide: EnumFacing, sinkPos: BlockPosition, sinkSide: EnumFacing, limit: Int = Fluid.BUCKET_VOLUME) =
fluidHandlerAt(sourcePos, sourceSide).fold(0)(source =>
fluidHandlerAt(sinkPos, sinkSide).fold(0)(sink =>
- transferBetweenFluidHandlers(source, sourceSide, sink, sinkSide, limit)))
+ transferBetweenFluidHandlers(source, sink, limit)))
/**
* Lookup fluid taking into account flowing liquid blocks...
@@ -77,17 +86,17 @@ object FluidUtils {
// ----------------------------------------------------------------------- //
private class GenericBlockWrapper(position: BlockPosition) extends IFluidHandler {
- override def canDrain(from: EnumFacing, fluid: Fluid): Boolean = currentWrapper.fold(false)(_.canDrain(from, fluid))
+ override def canDrain(from: EnumFacing, fluid: Fluid): Boolean = currentWrapper.fold(false)(_.drain(new FluidStack(fluid, 1), false).amount > 0)
- override def drain(from: EnumFacing, resource: FluidStack, doDrain: Boolean): FluidStack = currentWrapper.fold(null: FluidStack)(_.drain(from, resource, doDrain))
+ override def drain(from: EnumFacing, resource: FluidStack, doDrain: Boolean): FluidStack = currentWrapper.fold(null: FluidStack)(_.drain(resource, doDrain))
- override def drain(from: EnumFacing, maxDrain: Int, doDrain: Boolean): FluidStack = currentWrapper.fold(null: FluidStack)(_.drain(from, maxDrain, doDrain))
+ override def drain(from: EnumFacing, maxDrain: Int, doDrain: Boolean): FluidStack = currentWrapper.fold(null: FluidStack)(_.drain(maxDrain, doDrain))
- override def canFill(from: EnumFacing, fluid: Fluid): Boolean = currentWrapper.fold(false)(_.canFill(from, fluid))
+ override def canFill(from: EnumFacing, fluid: Fluid): Boolean = currentWrapper.fold(false)(_.fill(new FluidStack(fluid, 1), false) > 0)
- override def fill(from: EnumFacing, resource: FluidStack, doFill: Boolean): Int = currentWrapper.fold(0)(_.fill(from, resource, doFill))
+ override def fill(from: EnumFacing, resource: FluidStack, doFill: Boolean): Int = currentWrapper.fold(0)(_.fill(resource, doFill))
- override def getTankInfo(from: EnumFacing): Array[FluidTankInfo] = currentWrapper.fold(Array.empty[FluidTankInfo])(_.getTankInfo(from))
+ override def getTankInfo(from: EnumFacing): Array[IFluidTankProperties] = currentWrapper.fold(Array.empty[IFluidTankProperties])(_.getTankProperties)
def currentWrapper = if (position.world.get.blockExists(position)) position.world.get.getBlock(position) match {
case block: IFluidBlock => Option(new FluidBlockWrapper(position, block))
diff --git a/src/main/scala/li/cil/oc/util/ItemCosts.scala b/src/main/scala/li/cil/oc/util/ItemCosts.scala
index fc75393cc..94f3acb91 100644
--- a/src/main/scala/li/cil/oc/util/ItemCosts.scala
+++ b/src/main/scala/li/cil/oc/util/ItemCosts.scala
@@ -59,7 +59,7 @@ object ItemCosts {
terminate(Items.SLIME_BALL)
terminate(Items.STICK)
- def hasCosts(stack: ItemStack) = !Mods.CraftingCosts.isAvailable && {
+ def hasCosts(stack: ItemStack) = {
val ingredients = computeIngredients(stack)
ingredients.nonEmpty && (ingredients.size > 1 || !ingredients.head._1.isItemEqual(stack))
}