By popular demand, floppy disks can now be dyed by crafting them together with the according dye. Closes #388.

This commit is contained in:
Florian Nücke 2014-07-11 16:20:58 +02:00
parent f7540d412e
commit c9e441caba
23 changed files with 81 additions and 1 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

View File

@ -59,6 +59,8 @@ trait Delegate {
} }
} }
def color(stack: ItemStack, pass: Int) = 0xFFFFFF
def displayName(stack: ItemStack): Option[String] = None def displayName(stack: ItemStack): Option[String] = None
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)

View File

@ -81,6 +81,12 @@ class Delegator(id: Int) extends Item(id) {
case _ => EnumRarity.common case _ => EnumRarity.common
} }
override def getColorFromItemStack(stack: ItemStack, pass: Int) =
subItem(stack) match {
case Some(subItem) => subItem.color(stack, pass)
case _ => super.getColorFromItemStack(stack, pass)
}
override def getChestGenBase(chest: ChestGenHooks, rnd: Random, original: WeightedRandomChestContent) = original override def getChestGenBase(chest: ChestGenHooks, rnd: Random, original: WeightedRandomChestContent) = original
override def shouldPassSneakingClickToBlock(world: World, x: Int, y: Int, z: Int) = { override def shouldPassSneakingClickToBlock(world: World, x: Int, y: Int, z: Int) = {
@ -166,6 +172,9 @@ class Delegator(id: Int) extends Item(id) {
case _ => super.getIcon(stack, pass) case _ => super.getIcon(stack, pass)
} }
@SideOnly(Side.CLIENT)
override def getIconIndex(stack: ItemStack) = getIcon(stack, 0)
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
override def getIconFromDamage(damage: Int): Icon = override def getIconFromDamage(damage: Int): Icon =
subItem(damage) match { subItem(damage) match {

View File

@ -2,14 +2,25 @@ package li.cil.oc.common.item
import java.util import java.util
import cpw.mods.fml.relauncher.{SideOnly, Side}
import li.cil.oc.Settings import li.cil.oc.Settings
import net.minecraft.client.renderer.texture.IconRegister import net.minecraft.client.renderer.texture.IconRegister
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraft.util.Icon
class FloppyDisk(val parent: Delegator) extends Delegate { class FloppyDisk(val parent: Delegator) extends Delegate {
val unlocalizedName = "FloppyDisk" val unlocalizedName = "FloppyDisk"
val icons = Array.fill[Icon](16)(null)
@SideOnly(Side.CLIENT)
override def icon(stack: ItemStack, pass: Int) =
if (stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "color"))
Some(icons(stack.getTagCompound.getInteger(Settings.namespace + "color") max 0 min 15))
else
Some(icons(8))
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) = { override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) = {
if (stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "data")) { if (stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "data")) {
val nbt = stack.getTagCompound.getCompoundTag(Settings.namespace + "data") val nbt = stack.getTagCompound.getCompoundTag(Settings.namespace + "data")
@ -23,6 +34,21 @@ class FloppyDisk(val parent: Delegator) extends Delegate {
override def registerIcons(iconRegister: IconRegister) { override def registerIcons(iconRegister: IconRegister) {
super.registerIcons(iconRegister) super.registerIcons(iconRegister)
icon = iconRegister.registerIcon(Settings.resourceDomain + ":disk_floppy") icons(0) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_black")
icons(1) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_red")
icons(2) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_green")
icons(3) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_brown")
icons(4) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_blue")
icons(5) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_purple")
icons(6) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_cyan")
icons(7) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_lightGray")
icons(8) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_gray")
icons(9) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_pink")
icons(10) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_lime")
icons(11) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_yellow")
icons(12) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_lightBlue")
icons(13) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_magenta")
icons(14) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_orange")
icons(15) = iconRegister.registerIcon(Settings.resourceDomain + ":floppy_white")
} }
} }

View File

@ -3,14 +3,17 @@ package li.cil.oc.common.recipe
import java.util.UUID import java.util.UUID
import cpw.mods.fml.common.FMLCommonHandler import cpw.mods.fml.common.FMLCommonHandler
import li.cil.oc.util.Color
import li.cil.oc.util.ExtendedNBT._ import li.cil.oc.util.ExtendedNBT._
import li.cil.oc.{Settings, api} import li.cil.oc.{Settings, api}
import net.minecraft.inventory.InventoryCrafting import net.minecraft.inventory.InventoryCrafting
import net.minecraft.item.{Item, ItemStack} import net.minecraft.item.{Item, ItemStack}
import net.minecraft.nbt.NBTTagCompound
object ExtendedRecipe { 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")
def addNBTToResult(craftedStack: ItemStack, inventory: InventoryCrafting) = { def addNBTToResult(craftedStack: ItemStack, inventory: InventoryCrafting) = {
if (api.Items.get(craftedStack) == navigationUpgrade) { if (api.Items.get(craftedStack) == navigationUpgrade) {
@ -32,6 +35,21 @@ object ExtendedRecipe {
}) })
} }
if (api.Items.get(craftedStack) == floppy) {
if (!craftedStack.hasTagCompound) {
craftedStack.setTagCompound(new NBTTagCompound("tag"))
}
val nbt = craftedStack.getTagCompound
for (i <- 0 until inventory.getSizeInventory) {
val stack = inventory.getStackInSlot(i)
if (stack != null) Color.findDye(stack) match {
case Some(oreDictName) =>
nbt.setInteger(Settings.namespace + "color", Color.dyes.indexOf(oreDictName))
case _ =>
}
}
}
craftedStack craftedStack
} }
} }

View File

@ -6,6 +6,7 @@ import java.util.logging.Level
import com.typesafe.config._ import com.typesafe.config._
import cpw.mods.fml.common.Loader import cpw.mods.fml.common.Loader
import cpw.mods.fml.common.registry.GameRegistry import cpw.mods.fml.common.registry.GameRegistry
import li.cil.oc.util.Color
import li.cil.oc.util.mods.GregTech import li.cil.oc.util.mods.GregTech
import li.cil.oc.{Items, OpenComputers, api, common} import li.cil.oc.{Items, OpenComputers, api, common}
import net.minecraft.block.Block import net.minecraft.block.Block
@ -97,6 +98,12 @@ object Recipes {
// Navigation upgrade recrafting. // Navigation upgrade recrafting.
val navigationUpgrade = api.Items.get("navigationUpgrade").createItemStack(1) val navigationUpgrade = api.Items.get("navigationUpgrade").createItemStack(1)
GameRegistry.addRecipe(new ExtendedShapelessOreRecipe(navigationUpgrade, navigationUpgrade, new ItemStack(Item.map, 1, OreDictionary.WILDCARD_VALUE))) GameRegistry.addRecipe(new ExtendedShapelessOreRecipe(navigationUpgrade, navigationUpgrade, new ItemStack(Item.map, 1, OreDictionary.WILDCARD_VALUE)))
// Floppy disk coloring.
val floppy = api.Items.get("floppy").createItemStack(1)
for (dye <- Color.dyes) {
GameRegistry.addRecipe(new ExtendedShapelessOreRecipe(floppy, floppy, dye))
}
} }
catch { catch {
case e: Throwable => OpenComputers.log.log(Level.SEVERE, "Error parsing recipes, you may not be able to craft any items from this mod!", e) case e: Throwable => OpenComputers.log.log(Level.SEVERE, "Error parsing recipes, you may not be able to craft any items from this mod!", e)

View File

@ -31,6 +31,24 @@ object Color {
val Orange = 0xEB8844 val Orange = 0xEB8844
val White = 0xF0F0F0 val White = 0xF0F0F0
val dyes = Array(
"dyeBlack",
"dyeRed",
"dyeGreen",
"dyeBrown",
"dyeBlue",
"dyePurple",
"dyeCyan",
"dyeLightGray",
"dyeGray",
"dyePink",
"dyeLime",
"dyeYellow",
"dyeLightBlue",
"dyeMagenta",
"dyeOrange",
"dyeWhite")
val byOreName = Map( val byOreName = Map(
"dyeBlack" -> Black, "dyeBlack" -> Black,
"dyeRed" -> Red, "dyeRed" -> Red,