mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-12 16:57:32 -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 li.cil.oc.OpenComputers
|
||||
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.DisassemblerTemplates
|
||||
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)
|
||||
}
|
||||
}
|
||||
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 {
|
||||
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
|
||||
|
||||
import java.lang.reflect.Method
|
||||
|
||||
import li.cil.oc.Constants
|
||||
import li.cil.oc.Settings
|
||||
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.ExtendedNBT._
|
||||
import net.minecraft.item.ItemStack
|
||||
@ -103,6 +105,10 @@ object PrintData {
|
||||
private val step = stepping / 16f
|
||||
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]) = {
|
||||
var volume = 1f
|
||||
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 inkPerCartridge = Settings.get.printInkValue
|
||||
|
||||
def materialValue(stack: ItemStack) = {
|
||||
if (api.Items.get(stack) == api.Items.get(Constants.ItemName.Chamelium))
|
||||
@ -148,12 +153,14 @@ object PrintData {
|
||||
else 0
|
||||
}
|
||||
|
||||
def inkValue(stack: ItemStack) = {
|
||||
if (api.Items.get(stack) == api.Items.get(Constants.ItemName.InkCartridge))
|
||||
inkPerCartridge
|
||||
else if (Color.isDye(stack))
|
||||
inkPerCartridge / 10
|
||||
else 0
|
||||
def inkValue(stack: ItemStack): Int = {
|
||||
for (provider <- inkProviders) {
|
||||
val value = IMC.tryInvokeStatic(provider, stack)(0)
|
||||
if (value > 0) {
|
||||
return value
|
||||
}
|
||||
}
|
||||
0
|
||||
}
|
||||
|
||||
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.server.network.Waypoints
|
||||
import li.cil.oc.server.network.WirelessNetwork
|
||||
import li.cil.oc.util.Color
|
||||
import li.cil.oc.util.ExtendedNBT._
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.item.ItemStack
|
||||
@ -57,12 +58,16 @@ object ModOpenComputers extends ModProxy {
|
||||
TemplateBlacklist.register()
|
||||
|
||||
FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerWrenchTool", "li.cil.oc.integration.opencomputers.ModOpenComputers.useWrench")
|
||||
|
||||
val chargerNbt = new NBTTagCompound()
|
||||
chargerNbt.setString("name", "OpenComputers")
|
||||
chargerNbt.setString("canCharge", "li.cil.oc.integration.opencomputers.ModOpenComputers.canCharge")
|
||||
chargerNbt.setString("charge", "li.cil.oc.integration.opencomputers.ModOpenComputers.charge")
|
||||
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)
|
||||
|
||||
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*) {
|
||||
for (itemName <- itemNames) {
|
||||
val nbt = new NBTTagCompound()
|
||||
|
Loading…
x
Reference in New Issue
Block a user