Homogenized item data stuff a bit and trying to avoid NPEs in preconfigured item creation.

This commit is contained in:
Florian Nücke 2015-06-25 18:25:37 +02:00
parent fb45881cec
commit 64d3f93177
13 changed files with 85 additions and 109 deletions

View File

@ -191,6 +191,8 @@ object Items extends ItemAPI {
get(Constants.ItemName.LuaBios).createItemStack(amount) get(Constants.ItemName.LuaBios).createItemStack(amount)
} }
private def safeGetStack(name: String) = Option(get(name)).map(_.createItemStack(1)).orNull
def createConfiguredDrone() = { def createConfiguredDrone() = {
val data = new DroneData() val data = new DroneData()
@ -198,18 +200,18 @@ object Items extends ItemAPI {
data.tier = Tier.Four data.tier = Tier.Four
data.storedEnergy = Settings.get.bufferDrone.toInt data.storedEnergy = Settings.get.bufferDrone.toInt
data.components = Array( data.components = Array(
get(Constants.ItemName.InventoryUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.InventoryUpgrade),
get(Constants.ItemName.InventoryUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.InventoryUpgrade),
get(Constants.ItemName.InventoryControllerUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.InventoryControllerUpgrade),
get(Constants.ItemName.TankUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.TankUpgrade),
get(Constants.ItemName.TankControllerUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.TankControllerUpgrade),
get(Constants.ItemName.LeashUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.LeashUpgrade),
get(Constants.ItemName.WirelessNetworkCard).createItemStack(1), safeGetStack(Constants.ItemName.WirelessNetworkCard),
get(Constants.ItemName.CPUTier3).createItemStack(1), safeGetStack(Constants.ItemName.CPUTier3),
get(Constants.ItemName.RAMTier6).createItemStack(1), safeGetStack(Constants.ItemName.RAMTier6),
get(Constants.ItemName.RAMTier6).createItemStack(1) safeGetStack(Constants.ItemName.RAMTier6)
) )
data.createItemStack() data.createItemStack()
@ -221,15 +223,15 @@ object Items extends ItemAPI {
data.tier = Tier.Four data.tier = Tier.Four
data.storedEnergy = Settings.get.bufferMicrocontroller.toInt data.storedEnergy = Settings.get.bufferMicrocontroller.toInt
data.components = Array( data.components = Array(
get(Constants.ItemName.SignUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.SignUpgrade),
get(Constants.ItemName.PistonUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.PistonUpgrade),
get(Constants.ItemName.RedstoneCardTier2).createItemStack(1), safeGetStack(Constants.ItemName.RedstoneCardTier2),
get(Constants.ItemName.WirelessNetworkCard).createItemStack(1), safeGetStack(Constants.ItemName.WirelessNetworkCard),
get(Constants.ItemName.CPUTier3).createItemStack(1), safeGetStack(Constants.ItemName.CPUTier3),
get(Constants.ItemName.RAMTier6).createItemStack(1), safeGetStack(Constants.ItemName.RAMTier6),
get(Constants.ItemName.RAMTier6).createItemStack(1) safeGetStack(Constants.ItemName.RAMTier6)
) )
data.createItemStack() data.createItemStack()
@ -243,34 +245,34 @@ object Items extends ItemAPI {
data.robotEnergy = Settings.get.bufferRobot.toInt data.robotEnergy = Settings.get.bufferRobot.toInt
data.totalEnergy = data.robotEnergy data.totalEnergy = data.robotEnergy
data.components = Array( data.components = Array(
get(Constants.BlockName.ScreenTier1).createItemStack(1), safeGetStack(Constants.BlockName.ScreenTier1),
get(Constants.BlockName.Keyboard).createItemStack(1), safeGetStack(Constants.BlockName.Keyboard),
get(Constants.ItemName.InventoryUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.InventoryUpgrade),
get(Constants.ItemName.InventoryUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.InventoryUpgrade),
get(Constants.ItemName.InventoryUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.InventoryUpgrade),
get(Constants.ItemName.InventoryUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.InventoryUpgrade),
get(Constants.ItemName.InventoryControllerUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.InventoryControllerUpgrade),
get(Constants.ItemName.TankUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.TankUpgrade),
get(Constants.ItemName.TankControllerUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.TankControllerUpgrade),
get(Constants.ItemName.CraftingUpgrade).createItemStack(1), safeGetStack(Constants.ItemName.CraftingUpgrade),
get(Constants.ItemName.GraphicsCardTier3).createItemStack(1), safeGetStack(Constants.ItemName.GraphicsCardTier3),
get(Constants.ItemName.RedstoneCardTier2).createItemStack(1), safeGetStack(Constants.ItemName.RedstoneCardTier2),
get(Constants.ItemName.WirelessNetworkCard).createItemStack(1), safeGetStack(Constants.ItemName.WirelessNetworkCard),
get(Constants.ItemName.InternetCard).createItemStack(1), safeGetStack(Constants.ItemName.InternetCard),
get(Constants.ItemName.CPUTier3).createItemStack(1), safeGetStack(Constants.ItemName.CPUTier3),
get(Constants.ItemName.RAMTier6).createItemStack(1), safeGetStack(Constants.ItemName.RAMTier6),
get(Constants.ItemName.RAMTier6).createItemStack(1), safeGetStack(Constants.ItemName.RAMTier6),
get(Constants.ItemName.LuaBios).createItemStack(1), safeGetStack(Constants.ItemName.LuaBios),
get(Constants.ItemName.OpenOS).createItemStack(1), safeGetStack(Constants.ItemName.OpenOS),
get(Constants.ItemName.HDDTier3).createItemStack(1) safeGetStack(Constants.ItemName.HDDTier3)
) )
data.containers = Array( data.containers = Array(
get(Constants.ItemName.CardContainerTier3).createItemStack(1), safeGetStack(Constants.ItemName.CardContainerTier3),
get(Constants.ItemName.UpgradeContainerTier3).createItemStack(1), safeGetStack(Constants.ItemName.UpgradeContainerTier3),
get(Constants.BlockName.DiskDrive).createItemStack(1) safeGetStack(Constants.BlockName.DiskDrive)
) )
data.createItemStack() data.createItemStack()
@ -283,42 +285,36 @@ object Items extends ItemAPI {
data.energy = Settings.get.bufferTablet data.energy = Settings.get.bufferTablet
data.maxEnergy = data.energy data.maxEnergy = data.energy
data.items = Array( data.items = Array(
Option(get(Constants.BlockName.ScreenTier1).createItemStack(1)), Option(safeGetStack(Constants.BlockName.ScreenTier1)),
Option(get(Constants.BlockName.Keyboard).createItemStack(1)), Option(safeGetStack(Constants.BlockName.Keyboard)),
Option(get(Constants.ItemName.SignUpgrade).createItemStack(1)), Option(safeGetStack(Constants.ItemName.SignUpgrade)),
Option(get(Constants.ItemName.PistonUpgrade).createItemStack(1)), Option(safeGetStack(Constants.ItemName.PistonUpgrade)),
Option(get(Constants.BlockName.Geolyzer).createItemStack(1)), Option(safeGetStack(Constants.BlockName.Geolyzer)),
Option(get(Constants.ItemName.NavigationUpgrade).createItemStack(1)), Option(safeGetStack(Constants.ItemName.NavigationUpgrade)),
Option(get(Constants.ItemName.GraphicsCardTier2).createItemStack(1)), Option(safeGetStack(Constants.ItemName.GraphicsCardTier2)),
Option(get(Constants.ItemName.RedstoneCardTier2).createItemStack(1)), Option(safeGetStack(Constants.ItemName.RedstoneCardTier2)),
Option(get(Constants.ItemName.WirelessNetworkCard).createItemStack(1)), Option(safeGetStack(Constants.ItemName.WirelessNetworkCard)),
Option(get(Constants.ItemName.CPUTier3).createItemStack(1)), Option(safeGetStack(Constants.ItemName.CPUTier3)),
Option(get(Constants.ItemName.RAMTier6).createItemStack(1)), Option(safeGetStack(Constants.ItemName.RAMTier6)),
Option(get(Constants.ItemName.RAMTier6).createItemStack(1)), Option(safeGetStack(Constants.ItemName.RAMTier6)),
Option(get(Constants.ItemName.LuaBios).createItemStack(1)), Option(safeGetStack(Constants.ItemName.LuaBios)),
Option(get(Constants.ItemName.HDDTier3).createItemStack(1)) Option(safeGetStack(Constants.ItemName.HDDTier3))
).padTo(32, None) ).padTo(32, None)
data.items(31) = Option(get(Constants.ItemName.OpenOS).createItemStack(1)) data.items(31) = Option(safeGetStack(Constants.ItemName.OpenOS))
data.container = Option(get(Constants.BlockName.DiskDrive).createItemStack(1)) data.container = Option(safeGetStack(Constants.BlockName.DiskDrive))
val stack = get(Constants.ItemName.Tablet).createItemStack(1) data.createItemStack()
data.save(stack)
stack
} }
def createChargedHoverBoots() = { def createChargedHoverBoots() = {
val data = new HoverBootsData() val data = new HoverBootsData()
data.charge = Settings.get.bufferHoverBoots data.charge = Settings.get.bufferHoverBoots
val stack = get(Constants.ItemName.HoverBoots).createItemStack(1) data.createItemStack()
data.save(stack)
stack
} }
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //

View File

@ -1,10 +1,11 @@
package li.cil.oc.common.item.data package li.cil.oc.common.item.data
import li.cil.oc.Constants
import li.cil.oc.Settings import li.cil.oc.Settings
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
class DebugCardData extends ItemData { class DebugCardData extends ItemData(Constants.ItemName.DebugCard) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)

View File

@ -2,11 +2,10 @@ package li.cil.oc.common.item.data
import com.google.common.base.Strings import com.google.common.base.Strings
import li.cil.oc.Constants import li.cil.oc.Constants
import li.cil.oc.api
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
class DroneData extends MicrocontrollerData { class DroneData extends MicrocontrollerData(Constants.ItemName.Drone) {
def this(stack: ItemStack) = { def this(stack: ItemStack) = {
this() this()
load(stack) load(stack)
@ -33,10 +32,4 @@ class DroneData extends MicrocontrollerData {
nbt.getCompoundTag("display").setString("Name", name) nbt.getCompoundTag("display").setString("Name", name)
} }
} }
override def createItemStack(): ItemStack = {
val stack = api.Items.get(Constants.ItemName.Drone).createItemStack(1)
save(stack)
stack
}
} }

View File

@ -1,10 +1,11 @@
package li.cil.oc.common.item.data package li.cil.oc.common.item.data
import li.cil.oc.Constants
import li.cil.oc.Settings import li.cil.oc.Settings
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
class HoverBootsData extends ItemData { class HoverBootsData extends ItemData(Constants.ItemName.HoverBoots) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)

View File

@ -1,10 +1,11 @@
package li.cil.oc.common.item.data package li.cil.oc.common.item.data
import li.cil.oc.api
import li.cil.oc.api.Persistable import li.cil.oc.api.Persistable
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
abstract class ItemData extends Persistable { abstract class ItemData(val itemName: String) extends Persistable {
def load(stack: ItemStack) { def load(stack: ItemStack) {
if (stack.hasTagCompound) { if (stack.hasTagCompound) {
// Because ItemStack's load function doesn't copy the compound tag, // Because ItemStack's load function doesn't copy the compound tag,
@ -19,4 +20,13 @@ abstract class ItemData extends Persistable {
} }
save(stack.getTagCompound) save(stack.getTagCompound)
} }
def createItemStack() = {
if (itemName == null) null
else {
val stack = api.Items.get(itemName).createItemStack(1)
save(stack)
stack
}
}
} }

View File

@ -9,7 +9,7 @@ import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.common.util.Constants.NBT import net.minecraftforge.common.util.Constants.NBT
class MicrocontrollerData extends ItemData { class MicrocontrollerData(itemName: String = Constants.BlockName.Microcontroller) extends ItemData(itemName) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)
@ -40,12 +40,6 @@ class MicrocontrollerData extends ItemData {
nbt.setInteger(Settings.namespace + "storedEnergy", storedEnergy) nbt.setInteger(Settings.namespace + "storedEnergy", storedEnergy)
} }
def createItemStack() = {
val stack = api.Items.get(Constants.BlockName.Microcontroller).createItemStack(1)
save(stack)
stack
}
def copyItemStack() = { def copyItemStack() = {
val stack = createItemStack() val stack = createItemStack()
val newInfo = new MicrocontrollerData(stack) val newInfo = new MicrocontrollerData(stack)

View File

@ -1,5 +1,6 @@
package li.cil.oc.common.item.data package li.cil.oc.common.item.data
import li.cil.oc.Constants
import li.cil.oc.Settings import li.cil.oc.Settings
import li.cil.oc.util.ExtendedNBT._ import li.cil.oc.util.ExtendedNBT._
import net.minecraft.item.ItemMap import net.minecraft.item.ItemMap
@ -7,7 +8,7 @@ import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import net.minecraft.world.World import net.minecraft.world.World
class NavigationUpgradeData extends ItemData { class NavigationUpgradeData extends ItemData(Constants.ItemName.NavigationUpgrade) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)

View File

@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
// Generic one for items that are used as components; gets the items node info. // Generic one for items that are used as components; gets the items node info.
class NodeData extends ItemData { class NodeData extends ItemData(null) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)

View File

@ -15,7 +15,7 @@ import net.minecraftforge.common.util.Constants.NBT
import scala.collection.mutable import scala.collection.mutable
class PrintData extends ItemData { class PrintData extends ItemData(Constants.BlockName.Print) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)
@ -83,12 +83,6 @@ class PrintData extends ItemData {
nbt.setBoolean("isBeaconBase", isBeaconBase) nbt.setBoolean("isBeaconBase", isBeaconBase)
nbt.setByte("lightLevel", lightLevel.toByte) nbt.setByte("lightLevel", lightLevel.toByte)
} }
def createItemStack() = {
val stack = api.Items.get(Constants.BlockName.Print).createItemStack(1)
save(stack)
stack
}
} }
object PrintData { object PrintData {

View File

@ -2,13 +2,12 @@ package li.cil.oc.common.item.data
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.util.ExtendedNBT._ import li.cil.oc.util.ExtendedNBT._
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.common.util.Constants.NBT import net.minecraftforge.common.util.Constants.NBT
class RaidData extends ItemData { class RaidData extends ItemData(Constants.BlockName.Raid) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)
@ -34,10 +33,4 @@ class RaidData extends ItemData {
nbt.setTag(Settings.namespace + "filesystem", filesystem) nbt.setTag(Settings.namespace + "filesystem", filesystem)
label.foreach(nbt.setString(Settings.namespace + "label", _)) label.foreach(nbt.setString(Settings.namespace + "label", _))
} }
def createItemStack() = {
val stack = api.Items.get(Constants.BlockName.Raid).createItemStack(1)
save(stack)
stack
}
} }

View File

@ -29,7 +29,7 @@ object RobotData {
def randomName = if (names.length > 0) names((math.random * names.length).toInt) else "Robot" def randomName = if (names.length > 0) names((math.random * names.length).toInt) else "Robot"
} }
class RobotData extends ItemData { class RobotData extends ItemData(Constants.BlockName.Robot) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)
@ -85,12 +85,6 @@ class RobotData extends ItemData {
nbt.setInteger(Settings.namespace + "lightColor", lightColor) nbt.setInteger(Settings.namespace + "lightColor", lightColor)
} }
def createItemStack() = {
val stack = api.Items.get(Constants.BlockName.Robot).createItemStack(1)
save(stack)
stack
}
def copyItemStack() = { def copyItemStack() = {
val stack = createItemStack() val stack = createItemStack()
// Forget all node addresses and so on. This is used when 'picking' a // Forget all node addresses and so on. This is used when 'picking' a

View File

@ -1,5 +1,6 @@
package li.cil.oc.common.item.data package li.cil.oc.common.item.data
import li.cil.oc.Constants
import li.cil.oc.Settings import li.cil.oc.Settings
import li.cil.oc.common.Tier import li.cil.oc.common.Tier
import li.cil.oc.util.ExtendedNBT._ import li.cil.oc.util.ExtendedNBT._
@ -7,7 +8,7 @@ import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.common.util.Constants.NBT import net.minecraftforge.common.util.Constants.NBT
class TabletData extends ItemData { class TabletData extends ItemData(Constants.ItemName.Tablet) {
def this(stack: ItemStack) { def this(stack: ItemStack) {
this() this()
load(stack) load(stack)

View File

@ -122,7 +122,6 @@ object RecipeHandler {
} }
//all values required //all values required
case _ => case _ =>
} }
} }
@ -164,7 +163,6 @@ object RecipeHandler {
} }
} }
private def parseRecipe(output: ItemStack, recipe: Config) = { private def parseRecipe(output: ItemStack, recipe: Config) = {
val inputs = parseIngredientList(recipe.getValue("input")).toBuffer val inputs = parseIngredientList(recipe.getValue("input")).toBuffer
output.stackSize = Recipes.tryGetCount(recipe) output.stackSize = Recipes.tryGetCount(recipe)