mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-13 09:18:05 -04:00
Added IMC callback to add custom ink providers (i.e. callbacks that let us know how much ink an item is worth). Closes #1135.
This commit is contained in:
parent
1ecd5063af
commit
ba6053ab0c
@ -7,6 +7,7 @@ import com.typesafe.config.Config
|
|||||||
import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent
|
import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent
|
||||||
import li.cil.oc.OpenComputers
|
import li.cil.oc.OpenComputers
|
||||||
import li.cil.oc.Settings
|
import li.cil.oc.Settings
|
||||||
|
import li.cil.oc.common.item.data.PrintData
|
||||||
import li.cil.oc.common.template.AssemblerTemplates
|
import li.cil.oc.common.template.AssemblerTemplates
|
||||||
import li.cil.oc.common.template.DisassemblerTemplates
|
import li.cil.oc.common.template.DisassemblerTemplates
|
||||||
import li.cil.oc.integration.util.ItemCharge
|
import li.cil.oc.integration.util.ItemCharge
|
||||||
@ -84,6 +85,12 @@ object IMC {
|
|||||||
case t: Throwable => OpenComputers.log.warn("Failed registering assembler template filter.", t)
|
case t: Throwable => OpenComputers.log.warn("Failed registering assembler template filter.", t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (message.key == "registerInkProvider" && message.isStringMessage) {
|
||||||
|
OpenComputers.log.info(s"Registering new ink provider '${message.getStringValue}' from mod ${message.getSender}.")
|
||||||
|
try PrintData.addInkProvider(getStaticMethod(message.getStringValue, classOf[ItemStack])) catch {
|
||||||
|
case t: Throwable => OpenComputers.log.warn("Failed registering ink provider.", t)
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
OpenComputers.log.warn(s"Got an unrecognized or invalid IMC message '${message.key}' from mod ${message.getSender}.")
|
OpenComputers.log.warn(s"Got an unrecognized or invalid IMC message '${message.key}' from mod ${message.getSender}.")
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package li.cil.oc.common.item.data
|
package li.cil.oc.common.item.data
|
||||||
|
|
||||||
|
import java.lang.reflect.Method
|
||||||
|
|
||||||
import li.cil.oc.Constants
|
import li.cil.oc.Constants
|
||||||
import li.cil.oc.Settings
|
import li.cil.oc.Settings
|
||||||
import li.cil.oc.api
|
import li.cil.oc.api
|
||||||
import li.cil.oc.util.Color
|
import li.cil.oc.common.IMC
|
||||||
import li.cil.oc.util.ExtendedAABB._
|
import li.cil.oc.util.ExtendedAABB._
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
@ -103,6 +105,10 @@ object PrintData {
|
|||||||
private val step = stepping / 16f
|
private val step = stepping / 16f
|
||||||
private val invMaxVolume = 1f / (stepping * stepping * stepping)
|
private val invMaxVolume = 1f / (stepping * stepping * stepping)
|
||||||
|
|
||||||
|
private val inkProviders = mutable.LinkedHashSet.empty[Method]
|
||||||
|
|
||||||
|
def addInkProvider(provider: Method): Unit = inkProviders += provider
|
||||||
|
|
||||||
def computeApproximateOpacity(shapes: Iterable[PrintData.Shape]) = {
|
def computeApproximateOpacity(shapes: Iterable[PrintData.Shape]) = {
|
||||||
var volume = 1f
|
var volume = 1f
|
||||||
if (shapes.size > 0) for (x <- 0 until 16 / stepping; y <- 0 until 16 / stepping; z <- 0 until 16 / stepping) {
|
if (shapes.size > 0) for (x <- 0 until 16 / stepping; y <- 0 until 16 / stepping; z <- 0 until 16 / stepping) {
|
||||||
@ -133,7 +139,6 @@ object PrintData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val materialPerItem = Settings.get.printMaterialValue
|
private val materialPerItem = Settings.get.printMaterialValue
|
||||||
private val inkPerCartridge = Settings.get.printInkValue
|
|
||||||
|
|
||||||
def materialValue(stack: ItemStack) = {
|
def materialValue(stack: ItemStack) = {
|
||||||
if (api.Items.get(stack) == api.Items.get(Constants.ItemName.Chamelium))
|
if (api.Items.get(stack) == api.Items.get(Constants.ItemName.Chamelium))
|
||||||
@ -148,12 +153,14 @@ object PrintData {
|
|||||||
else 0
|
else 0
|
||||||
}
|
}
|
||||||
|
|
||||||
def inkValue(stack: ItemStack) = {
|
def inkValue(stack: ItemStack): Int = {
|
||||||
if (api.Items.get(stack) == api.Items.get(Constants.ItemName.InkCartridge))
|
for (provider <- inkProviders) {
|
||||||
inkPerCartridge
|
val value = IMC.tryInvokeStatic(provider, stack)(0)
|
||||||
else if (Color.isDye(stack))
|
if (value > 0) {
|
||||||
inkPerCartridge / 10
|
return value
|
||||||
else 0
|
}
|
||||||
|
}
|
||||||
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
def nbtToShape(nbt: NBTTagCompound): Shape = {
|
def nbtToShape(nbt: NBTTagCompound): Shape = {
|
||||||
|
@ -36,6 +36,7 @@ import li.cil.oc.integration.util.BundledRedstone
|
|||||||
import li.cil.oc.integration.util.WirelessRedstone
|
import li.cil.oc.integration.util.WirelessRedstone
|
||||||
import li.cil.oc.server.network.Waypoints
|
import li.cil.oc.server.network.Waypoints
|
||||||
import li.cil.oc.server.network.WirelessNetwork
|
import li.cil.oc.server.network.WirelessNetwork
|
||||||
|
import li.cil.oc.util.Color
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
import net.minecraft.entity.player.EntityPlayer
|
import net.minecraft.entity.player.EntityPlayer
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
@ -57,12 +58,16 @@ object ModOpenComputers extends ModProxy {
|
|||||||
TemplateBlacklist.register()
|
TemplateBlacklist.register()
|
||||||
|
|
||||||
FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerWrenchTool", "li.cil.oc.integration.opencomputers.ModOpenComputers.useWrench")
|
FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerWrenchTool", "li.cil.oc.integration.opencomputers.ModOpenComputers.useWrench")
|
||||||
|
|
||||||
val chargerNbt = new NBTTagCompound()
|
val chargerNbt = new NBTTagCompound()
|
||||||
chargerNbt.setString("name", "OpenComputers")
|
chargerNbt.setString("name", "OpenComputers")
|
||||||
chargerNbt.setString("canCharge", "li.cil.oc.integration.opencomputers.ModOpenComputers.canCharge")
|
chargerNbt.setString("canCharge", "li.cil.oc.integration.opencomputers.ModOpenComputers.canCharge")
|
||||||
chargerNbt.setString("charge", "li.cil.oc.integration.opencomputers.ModOpenComputers.charge")
|
chargerNbt.setString("charge", "li.cil.oc.integration.opencomputers.ModOpenComputers.charge")
|
||||||
FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerItemCharge", chargerNbt)
|
FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerItemCharge", chargerNbt)
|
||||||
|
|
||||||
|
FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerInkProvider", "li.cil.oc.integration.opencomputers.ModOpenComputers.inkCartridgeInkProvider")
|
||||||
|
FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerInkProvider", "li.cil.oc.integration.opencomputers.ModOpenComputers.dyeInkProvider")
|
||||||
|
|
||||||
ForgeChunkManager.setForcedChunkLoadingCallback(OpenComputers, ChunkloaderUpgradeHandler)
|
ForgeChunkManager.setForcedChunkLoadingCallback(OpenComputers, ChunkloaderUpgradeHandler)
|
||||||
|
|
||||||
FMLCommonHandler.instance.bus.register(EventHandler)
|
FMLCommonHandler.instance.bus.register(EventHandler)
|
||||||
@ -254,6 +259,20 @@ object ModOpenComputers extends ModProxy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def inkCartridgeInkProvider(stack: ItemStack): Int = {
|
||||||
|
if (api.Items.get(stack) == api.Items.get(Constants.ItemName.InkCartridge))
|
||||||
|
Settings.get.printInkValue
|
||||||
|
else
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
|
def dyeInkProvider(stack: ItemStack): Int = {
|
||||||
|
if (Color.isDye(stack))
|
||||||
|
Settings.get.printInkValue / 10
|
||||||
|
else
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
private def blacklistHost(host: Class[_], itemNames: String*) {
|
private def blacklistHost(host: Class[_], itemNames: String*) {
|
||||||
for (itemName <- itemNames) {
|
for (itemName <- itemNames) {
|
||||||
val nbt = new NBTTagCompound()
|
val nbt = new NBTTagCompound()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user