Fixed merge problems

This commit is contained in:
DrummerMC 2015-04-05 14:51:23 +02:00
commit d5b4db009f
14 changed files with 95 additions and 42 deletions

View File

@ -174,6 +174,8 @@ oc:gui.Chat.WarningPower=No supported power providing mod available. Computers,
oc:gui.Chat.TextureName=§7Texture name is §a%s§f. oc:gui.Chat.TextureName=§7Texture name is §a%s§f.
oc:gui.Chat.WarningProjectRed=You are using a version of Project: Red that is incompatible with OpenComputers. Try updating your version of Project: Red. oc:gui.Chat.WarningProjectRed=You are using a version of Project: Red that is incompatible with OpenComputers. Try updating your version of Project: Red.
oc:gui.Chat.WarningRecipes=There were errors loading one or more recipes. Some items may be uncraftable. Please check your log file for more information. oc:gui.Chat.WarningRecipes=There were errors loading one or more recipes. Some items may be uncraftable. Please check your log file for more information.
oc:gui.Chat.WarningClassTransformer=There were §cerrors§f running the class transformer. Please report this, together with your (full!) FML §alatest.log§f/§afml-server-latest.log§f logfile, thank you!
oc:gui.Chat.WarningSimpleComponent=An addon (yours?) using the §aSimpleComponent§f interface did §esomething wrong§f. Component logic could not be injected. Please check your log file for more information.
oc:gui.Error.ComponentOverflow=Too many components connected to the computer. oc:gui.Error.ComponentOverflow=Too many components connected to the computer.
oc:gui.Error.InternalError=Internal error, please see the log file. This is probably a bug. oc:gui.Error.InternalError=Internal error, please see the log file. This is probably a bug.
oc:gui.Error.NoCPU=No CPU is installed in the computer. oc:gui.Error.NoCPU=No CPU is installed in the computer.
@ -225,6 +227,7 @@ oc:tooltip.Adapter=Used to control non-component blocks, such as vanilla blocks
oc:tooltip.ALU=Adds numbers so you don't have to. It might be better this way. oc:tooltip.ALU=Adds numbers so you don't have to. It might be better this way.
oc:tooltip.Analyzer=Used to display information about blocks, such as their §faddress§7 and §fcomponent name§7.[nl] Also displays the error that caused a computer to crash if it did not shut down normally. oc:tooltip.Analyzer=Used to display information about blocks, such as their §faddress§7 and §fcomponent name§7.[nl] Also displays the error that caused a computer to crash if it did not shut down normally.
oc:tooltip.Assembler=Allows constructing robots and other devices from a number of different computer parts. oc:tooltip.Assembler=Allows constructing robots and other devices from a number of different computer parts.
oc:tooltip.BeaconBase=§8Works as a beacon base.
oc:tooltip.Cable=A cheap way of connecting blocks. oc:tooltip.Cable=A cheap way of connecting blocks.
oc:tooltip.Capacitor=Stores energy for later use. Can be filled and emptied very quickly. oc:tooltip.Capacitor=Stores energy for later use. Can be filled and emptied very quickly.
oc:tooltip.CardBase=As the name indicates, this is the basic building block for all expansion cards. oc:tooltip.CardBase=As the name indicates, this is the basic building block for all expansion cards.

View File

@ -85,6 +85,10 @@ object Localization {
def WarningRecipes = new ChatComponentText("§aOpenComputers§f: ").appendSibling(localizeLater("gui.Chat.WarningRecipes")) def WarningRecipes = new ChatComponentText("§aOpenComputers§f: ").appendSibling(localizeLater("gui.Chat.WarningRecipes"))
def WarningClassTransformer = new ChatComponentText("§aOpenComputers§f: ").appendSibling(localizeLater("gui.Chat.WarningClassTransformer"))
def WarningSimpleComponent = new ChatComponentText("§aOpenComputers§f: ").appendSibling(localizeLater("gui.Chat.WarningSimpleComponent"))
def InfoNewVersion(version: String) = new ChatComponentText("§aOpenComputers§f: ").appendSibling(localizeLater("gui.Chat.NewVersion", version)) def InfoNewVersion(version: String) = new ChatComponentText("§aOpenComputers§f: ").appendSibling(localizeLater("gui.Chat.NewVersion", version))
def TextureName(name: String) = new ChatComponentText("§aOpenComputers§f: ").appendSibling(localizeLater("gui.Chat.TextureName", name)) def TextureName(name: String) = new ChatComponentText("§aOpenComputers§f: ").appendSibling(localizeLater("gui.Chat.TextureName", name))
@ -140,6 +144,8 @@ object Localization {
def Materials = localizeImmediately("tooltip.Materials") def Materials = localizeImmediately("tooltip.Materials")
def Tier(tier: Int) = localizeImmediately("tooltip.Tier", tier.toString) def Tier(tier: Int) = localizeImmediately("tooltip.Tier", tier.toString)
def BeaconBase = localizeImmediately("tooltip.BeaconBase")
} }
} }

View File

@ -14,6 +14,7 @@ import li.cil.oc.api.Network
import li.cil.oc.api.detail.ItemInfo import li.cil.oc.api.detail.ItemInfo
import li.cil.oc.client.renderer.PetRenderer import li.cil.oc.client.renderer.PetRenderer
import li.cil.oc.client.{PacketSender => ClientPacketSender} import li.cil.oc.client.{PacketSender => ClientPacketSender}
import li.cil.oc.common.asm.ClassTransformer
import li.cil.oc.common.item.data.MicrocontrollerData import li.cil.oc.common.item.data.MicrocontrollerData
import li.cil.oc.common.item.data.RobotData import li.cil.oc.common.item.data.RobotData
import li.cil.oc.common.item.data.TabletData import li.cil.oc.common.item.data.TabletData
@ -160,6 +161,12 @@ object EventHandler {
if (Recipes.hadErrors) { if (Recipes.hadErrors) {
player.addChatMessage(Localization.Chat.WarningRecipes) player.addChatMessage(Localization.Chat.WarningRecipes)
} }
if (ClassTransformer.hadErrors) {
player.addChatMessage(Localization.Chat.WarningClassTransformer)
}
if (ClassTransformer.hadSimpleComponentErrors) {
player.addChatMessage(Localization.Chat.WarningSimpleComponent)
}
ServerPacketSender.sendPetVisibility(None, Some(player)) ServerPacketSender.sendPetVisibility(None, Some(player))
// Do update check in local games and for OPs. // Do update check in local games and for OPs.
if (!Mods.VersionChecker.isAvailable && (!MinecraftServer.getServer.isDedicatedServer || MinecraftServer.getServer.getConfigurationManager.func_152596_g(player.getGameProfile))) { if (!Mods.VersionChecker.isAvailable && (!MinecraftServer.getServer.isDedicatedServer || MinecraftServer.getServer.getConfigurationManager.func_152596_g(player.getGameProfile))) {

View File

@ -33,9 +33,13 @@ object ObfNames {
final val Method_writeToNBT = Array("writeToNBT", "func_145841_b") final val Method_writeToNBT = Array("writeToNBT", "func_145841_b")
} }
object ClassTransformer {
var hadErrors = false
var hadSimpleComponentErrors = false
}
class ClassTransformer extends IClassTransformer { class ClassTransformer extends IClassTransformer {
private val loader = classOf[ClassTransformer].getClassLoader.asInstanceOf[LaunchClassLoader] private val loader = classOf[ClassTransformer].getClassLoader.asInstanceOf[LaunchClassLoader]
private val log = LogManager.getLogger("OpenComputers") private val log = LogManager.getLogger("OpenComputers")
override def transform(name: String, transformedName: String, basicClass: Array[Byte]): Array[Byte] = { override def transform(name: String, transformedName: String, basicClass: Array[Byte]): Array[Byte] = {
@ -73,7 +77,7 @@ class ClassTransformer extends IClassTransformer {
// Inject available interfaces where requested. // Inject available interfaces where requested.
if (classNode.visibleAnnotations != null) { if (classNode.visibleAnnotations != null) {
def injectInterface(annotation: AnnotationNode): Unit = { def injectInterface(annotation: AnnotationNode): Unit = {
val values = annotation.values.grouped(2).map(buffer => buffer(0) -> buffer(1)).toMap val values = annotation.values.grouped(2).map(buffer => buffer.head -> buffer.last).toMap
(values.get("value"), values.get("modid")) match { (values.get("value"), values.get("modid")) match {
case (Some(interfaceName: String), Some(modid: String)) => case (Some(interfaceName: String), Some(modid: String)) =>
Mods.All.find(_.id == modid) match { Mods.All.find(_.id == modid) match {
@ -93,6 +97,7 @@ class ClassTransformer extends IClassTransformer {
else { else {
log.warn(s"Missing implementations for interface $interfaceName, skipping injection.") log.warn(s"Missing implementations for interface $interfaceName, skipping injection.")
missing.foreach(log.warn) missing.foreach(log.warn)
ClassTransformer.hadErrors = true
} }
} }
} }
@ -113,7 +118,7 @@ class ClassTransformer extends IClassTransformer {
} }
classNode.visibleAnnotations.find(_.desc == "Lli/cil/oc/common/asm/Injectable$InterfaceList;") match { classNode.visibleAnnotations.find(_.desc == "Lli/cil/oc/common/asm/Injectable$InterfaceList;") match {
case Some(annotation) => case Some(annotation) =>
val values = annotation.values.grouped(2).map(buffer => buffer(0) -> buffer(1)).toMap val values = annotation.values.grouped(2).map(buffer => buffer.head -> buffer.last).toMap
values.get("value") match { values.get("value") match {
case Some(interfaceList: java.lang.Iterable[AnnotationNode]@unchecked) => case Some(interfaceList: java.lang.Iterable[AnnotationNode]@unchecked) =>
interfaceList.foreach(injectInterface) interfaceList.foreach(injectInterface)
@ -135,6 +140,7 @@ class ClassTransformer extends IClassTransformer {
catch { catch {
case e: Throwable => case e: Throwable =>
log.warn(s"Failed injecting component logic into class $name.", e) log.warn(s"Failed injecting component logic into class $name.", e)
ClassTransformer.hadSimpleComponentErrors = true
} }
} }
} }
@ -220,6 +226,7 @@ class ClassTransformer extends IClassTransformer {
catch { catch {
case t: Throwable => case t: Throwable =>
log.warn("Something went wrong!", t) log.warn("Something went wrong!", t)
ClassTransformer.hadErrors = true
basicClass basicClass
} }
} }
@ -233,10 +240,12 @@ class ClassTransformer extends IClassTransformer {
} }
else { else {
log.warn(s"Failed patching ${classNode.name}.${methodNames(0)}, injection point not found.") log.warn(s"Failed patching ${classNode.name}.${methodNames(0)}, injection point not found.")
ClassTransformer.hadErrors = true
None None
} }
case _ => case _ =>
log.warn(s"Failed patching ${classNode.name}.${methodNames(0)}, method not found.") log.warn(s"Failed patching ${classNode.name}.${methodNames(0)}, method not found.")
ClassTransformer.hadErrors = true
None None
} }
} }

View File

@ -5,6 +5,7 @@ import java.util.Random
import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.Side
import cpw.mods.fml.relauncher.SideOnly import cpw.mods.fml.relauncher.SideOnly
import li.cil.oc.Localization
import li.cil.oc.Settings import li.cil.oc.Settings
import li.cil.oc.common.item.data.PrintData import li.cil.oc.common.item.data.PrintData
import li.cil.oc.common.tileentity import li.cil.oc.common.tileentity
@ -49,6 +50,9 @@ class Print(protected implicit val tileTag: ClassTag[tileentity.Print]) extends
override protected def tooltipBody(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean): Unit = { override protected def tooltipBody(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean): Unit = {
super.tooltipBody(metadata, stack, player, tooltip, advanced) super.tooltipBody(metadata, stack, player, tooltip, advanced)
val data = new PrintData(stack) val data = new PrintData(stack)
if (data.isBeaconBase) {
tooltip.add(Localization.Tooltip.BeaconBase)
}
data.tooltip.foreach(s => tooltip.addAll(s.lines.toIterable)) data.tooltip.foreach(s => tooltip.addAll(s.lines.toIterable))
} }

View File

@ -370,11 +370,6 @@ object Items extends ItemAPI {
// v1.2.3 // v1.2.3
registerItem(new item.FloppyDisk(multi) { registerItem(new item.FloppyDisk(multi) {
showInItemList = false showInItemList = false
override def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer) = {
if (player.isSneaking) get("floppy").createItemStack(1)
else super.onItemRightClick(stack, world, player)
}
}, "lootDisk") }, "lootDisk")
// v1.2.6 // v1.2.6

View File

@ -46,15 +46,7 @@ trait Delegate {
def onItemUse(stack: ItemStack, player: EntityPlayer, position: BlockPosition, side: Int, hitX: Float, hitY: Float, hitZ: Float): Boolean = false def onItemUse(stack: ItemStack, player: EntityPlayer, position: BlockPosition, side: Int, hitX: Float, hitY: Float, hitZ: Float): Boolean = false
def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer): ItemStack = { def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer): ItemStack = stack
if (player.isSneaking) {
if (stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "data")) {
stack.setTagCompound(null)
player.swingItem()
}
}
stack
}
def getItemUseAction(stack: ItemStack): EnumAction = EnumAction.none def getItemUseAction(stack: ItemStack): EnumAction = EnumAction.none

View File

@ -16,6 +16,7 @@ import li.cil.oc.util.SideTracker
import net.minecraft.init.Blocks import net.minecraft.init.Blocks
import net.minecraft.inventory.InventoryCrafting import net.minecraft.inventory.InventoryCrafting
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraft.item.crafting.IRecipe
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import scala.collection.convert.WrapAsScala._ import scala.collection.convert.WrapAsScala._
@ -29,6 +30,7 @@ object ExtendedRecipe {
private lazy val navigationUpgrade = api.Items.get("navigationUpgrade") private lazy val navigationUpgrade = api.Items.get("navigationUpgrade")
private lazy val linkedCard = api.Items.get("linkedCard") private lazy val linkedCard = api.Items.get("linkedCard")
private lazy val floppy = api.Items.get("floppy") private lazy val floppy = api.Items.get("floppy")
private lazy val lootDisk = api.Items.get("lootDisk")
private lazy val robot = api.Items.get("robot") private lazy val robot = api.Items.get("robot")
private lazy val tablet = api.Items.get("tablet") private lazy val tablet = api.Items.get("tablet")
private lazy val print = api.Items.get("print") private lazy val print = api.Items.get("print")
@ -40,7 +42,7 @@ object ExtendedRecipe {
stack stack
} }
def addNBTToResult(craftedStack: ItemStack, inventory: InventoryCrafting): ItemStack = { def addNBTToResult(recipe: IRecipe, craftedStack: ItemStack, inventory: InventoryCrafting): ItemStack = {
if (api.Items.get(craftedStack) == navigationUpgrade) { if (api.Items.get(craftedStack) == navigationUpgrade) {
Option(api.Driver.driverFor(craftedStack)).foreach(driver => Option(api.Driver.driverFor(craftedStack)).foreach(driver =>
for (slot <- 0 until inventory.getSizeInventory) { for (slot <- 0 until inventory.getSizeInventory) {
@ -64,6 +66,11 @@ object ExtendedRecipe {
} }
if (api.Items.get(craftedStack) == floppy) { if (api.Items.get(craftedStack) == floppy) {
if (recipe.getRecipeSize == 1) {
// Formatting / loot to normal disk conversion.
craftedStack.setTagCompound(null)
}
else {
if (!craftedStack.hasTagCompound) { if (!craftedStack.hasTagCompound) {
craftedStack.setTagCompound(new NBTTagCompound()) craftedStack.setTagCompound(new NBTTagCompound())
} }
@ -78,6 +85,7 @@ object ExtendedRecipe {
} }
} }
} }
}
if (api.Items.get(craftedStack) == print) { if (api.Items.get(craftedStack) == print) {
val blocks = Array( val blocks = Array(

View File

@ -6,5 +6,5 @@ import net.minecraftforge.oredict.ShapedOreRecipe
class ExtendedShapedOreRecipe(result: ItemStack, ingredients: AnyRef*) extends ShapedOreRecipe(result, ingredients: _*) { class ExtendedShapedOreRecipe(result: ItemStack, ingredients: AnyRef*) extends ShapedOreRecipe(result, ingredients: _*) {
override def getCraftingResult(inventory: InventoryCrafting) = override def getCraftingResult(inventory: InventoryCrafting) =
ExtendedRecipe.addNBTToResult(super.getCraftingResult(inventory), inventory) ExtendedRecipe.addNBTToResult(this, super.getCraftingResult(inventory), inventory)
} }

View File

@ -6,5 +6,5 @@ import net.minecraftforge.oredict.ShapelessOreRecipe
class ExtendedShapelessOreRecipe(result: ItemStack, ingredients: AnyRef*) extends ShapelessOreRecipe(result, ingredients: _*) { class ExtendedShapelessOreRecipe(result: ItemStack, ingredients: AnyRef*) extends ShapelessOreRecipe(result, ingredients: _*) {
override def getCraftingResult(inventory: InventoryCrafting) = override def getCraftingResult(inventory: InventoryCrafting) =
ExtendedRecipe.addNBTToResult(super.getCraftingResult(inventory), inventory) ExtendedRecipe.addNBTToResult(this, super.getCraftingResult(inventory), inventory)
} }

View File

@ -10,6 +10,7 @@ import li.cil.oc._
import li.cil.oc.common.block.SimpleBlock import li.cil.oc.common.block.SimpleBlock
import li.cil.oc.common.init.Items import li.cil.oc.common.init.Items
import li.cil.oc.common.item.SimpleItem import li.cil.oc.common.item.SimpleItem
import li.cil.oc.common.item.data.PrintData
import li.cil.oc.integration.Mods import li.cil.oc.integration.Mods
import li.cil.oc.integration.util.NEI import li.cil.oc.integration.util.NEI
import li.cil.oc.util.Color import li.cil.oc.util.Color
@ -124,6 +125,7 @@ object Recipes {
val navigationUpgrade = api.Items.get("navigationUpgrade") val navigationUpgrade = api.Items.get("navigationUpgrade")
val mcu = api.Items.get("microcontroller") val mcu = api.Items.get("microcontroller")
val floppy = api.Items.get("floppy") val floppy = api.Items.get("floppy")
val lootDisk = api.Items.get("lootDisk")
val drone = api.Items.get("drone") val drone = api.Items.get("drone")
val eeprom = api.Items.get("eeprom") val eeprom = api.Items.get("eeprom")
val robot = api.Items.get("robot") val robot = api.Items.get("robot")
@ -188,6 +190,10 @@ object Recipes {
} }
// Print beaconification. // Print beaconification.
val beaconPrint = print.createItemStack(1)
val printData = new PrintData(beaconPrint)
printData.isBeaconBase = true
printData.save(beaconPrint)
for (block <- Array( for (block <- Array(
net.minecraft.init.Blocks.iron_block, net.minecraft.init.Blocks.iron_block,
net.minecraft.init.Blocks.gold_block, net.minecraft.init.Blocks.gold_block,
@ -195,9 +201,13 @@ object Recipes {
net.minecraft.init.Blocks.diamond_block net.minecraft.init.Blocks.diamond_block
)) { )) {
GameRegistry.addRecipe(new ExtendedShapelessOreRecipe( GameRegistry.addRecipe(new ExtendedShapelessOreRecipe(
print.createItemStack(1), beaconPrint,
print.createItemStack(1), new ItemStack(block))) print.createItemStack(1), new ItemStack(block)))
} }
// Floppy disk formatting.
GameRegistry.addRecipe(new ExtendedShapelessOreRecipe(floppy.createItemStack(1), floppy.createItemStack(1)))
GameRegistry.addRecipe(new ExtendedShapelessOreRecipe(floppy.createItemStack(1), lootDisk.createItemStack(1)))
} }
catch { catch {
case e: Throwable => OpenComputers.log.error("Error parsing recipes, you may not be able to craft any items from this mod!", e) case e: Throwable => OpenComputers.log.error("Error parsing recipes, you may not be able to craft any items from this mod!", e)
@ -323,10 +333,10 @@ object Recipes {
(inputs, inputCount).zipped.foreach((stacks, count) => stacks.foreach(stack => if (stack != null && count > 0) stack.stackSize = stack.getMaxStackSize min count)) (inputs, inputCount).zipped.foreach((stacks, count) => stacks.foreach(stack => if (stack != null && count > 0) stack.stackSize = stack.getMaxStackSize min count))
inputs.padTo(2, null) inputs.padTo(2, null)
if (inputs(0) != null) { if (inputs.head != null) {
for (input1 <- inputs(0)) { for (input1 <- inputs.head) {
if (inputs(1) != null) { if (inputs.last != null) {
for (input2 <- inputs(1)) for (input2 <- inputs.last)
gregtech.api.GregTech_API.sRecipeAdder.addAssemblerRecipe(input1, input2, output, duration, eu) gregtech.api.GregTech_API.sRecipeAdder.addAssemblerRecipe(input1, input2, output, duration, eu)
} }
else gregtech.api.GregTech_API.sRecipeAdder.addAssemblerRecipe(input1, null, output, duration, eu) else gregtech.api.GregTech_API.sRecipeAdder.addAssemblerRecipe(input1, null, output, duration, eu)

View File

@ -7,7 +7,6 @@ import appeng.api.config.Settings
import appeng.api.config.Upgrades import appeng.api.config.Upgrades
import appeng.api.networking.security.MachineSource import appeng.api.networking.security.MachineSource
import appeng.parts.automation.PartExportBus import appeng.parts.automation.PartExportBus
import appeng.util.Platform
import li.cil.oc.api.driver import li.cil.oc.api.driver
import li.cil.oc.api.driver.NamedBlock import li.cil.oc.api.driver.NamedBlock
import li.cil.oc.api.driver.EnvironmentAware import li.cil.oc.api.driver.EnvironmentAware
@ -26,16 +25,17 @@ import net.minecraft.world.World
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import scala.collection.convert.WrapAsScala._ import scala.collection.convert.WrapAsScala._
object DriverExportBus extends driver.Block with EnvironmentAware {
type ExportBusTile = appeng.api.parts.IPartHost object DriverExportBus extends driver.Block {
type AETileType = appeng.api.parts.IPartHost
override def worksWith(world: World, x: Int, y: Int, z: Int) = override def worksWith(world: World, x: Int, y: Int, z: Int) =
world.getTileEntity(x, y, z) match { world.getTileEntity(x, y, z) match {
case container: ExportBusTile => ForgeDirection.VALID_DIRECTIONS.map(container.getPart).exists(_.isInstanceOf[PartExportBus]) case container: AETileType => ForgeDirection.VALID_DIRECTIONS.map(container.getPart).exists(_.isInstanceOf[PartExportBus])
case _ => false case _ => false
} }
override def createEnvironment(world: World, x: Int, y: Int, z: Int) = new Environment(world.getTileEntity(x, y, z).asInstanceOf[ExportBusTile]) override def createEnvironment(world: World, x: Int, y: Int, z: Int) = new Environment(world.getTileEntity(x, y, z).asInstanceOf[AETileType])
override def providedEnvironment(stack: ItemStack) = override def providedEnvironment(stack: ItemStack) =
if (stack != null && if (stack != null &&
@ -47,7 +47,7 @@ object DriverExportBus extends driver.Block with EnvironmentAware {
AEApi.instance().parts().partExportBus.stack(1).getItemDamage == stack.getItemDamage) classOf[Environment] AEApi.instance().parts().partExportBus.stack(1).getItemDamage == stack.getItemDamage) classOf[Environment]
else null else null
class Environment(host: ExportBusTile) extends ManagedTileEntityEnvironment[ExportBusTile](host, "me_exportbus") with NamedBlock { class Environment(host: AETileType) extends ManagedTileEntityEnvironment[AETileType](host, "me_exportbus") with NamedBlock {
override def preferredName = "me_exportbus" override def preferredName = "me_exportbus"
override def priority = 2 override def priority = 2
@ -128,7 +128,7 @@ object DriverExportBus extends driver.Block with EnvironmentAware {
is.stackSize = count is.stackSize = count
if (InventoryUtils.insertIntoInventorySlot(is, inventory, Option(side.getOpposite), targetSlot, count, simulate = true)) { if (InventoryUtils.insertIntoInventorySlot(is, inventory, Option(side.getOpposite), targetSlot, count, simulate = true)) {
ais.setStackSize(count - is.stackSize) ais.setStackSize(count - is.stackSize)
val eais = Platform.poweredExtraction(export.getProxy.getEnergy, itemStorage, ais, source) val eais = AEApi.instance.storage.poweredExtraction(export.getProxy.getEnergy, itemStorage, ais, source)
if (eais != null) { if (eais != null) {
val eis = eais.getItemStack val eis = eais.getItemStack
count -= eis.stackSize count -= eis.stackSize
@ -152,4 +152,5 @@ object DriverExportBus extends driver.Block with EnvironmentAware {
} }
} }
} }
} }

View File

@ -0,0 +1,17 @@
package li.cil.oc.integration.forestry
import java.util
import forestry.api.genetics.AlleleManager
import li.cil.oc.api.driver.Converter
import net.minecraft.item.ItemStack
import scala.collection.convert.WrapAsScala._
object ConverterItemStack extends Converter {
override def convert(value: scala.Any, output: util.Map[AnyRef, AnyRef]): Unit = value match {
case stack: ItemStack if AlleleManager.alleleRegistry.isIndividual(stack) =>
output += "individual" -> AlleleManager.alleleRegistry.getIndividual(stack)
case _ =>
}
}

View File

@ -10,6 +10,7 @@ object ModForestry extends ModProxy {
override def initialize() { override def initialize() {
Driver.add(new ConverterIAlleles) Driver.add(new ConverterIAlleles)
Driver.add(new ConverterIIndividual) Driver.add(new ConverterIIndividual)
Driver.add(ConverterItemStack)
Driver.add(new DriverAnalyzer) Driver.add(new DriverAnalyzer)
Driver.add(new DriverBeeHouse) Driver.add(new DriverBeeHouse)
} }