From 7bbed622f9b709e331d1e8b36394c12015382f29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 11 Jan 2015 16:01:35 +0100 Subject: [PATCH] Coloring tooltips of devices according to their tier now (robots, mcus, drones). Added creative drone and mcu case. Added preconfigured robot, mcu and drone to creative tab (mcu and drone still need a programmed EEPROM to be put in). --- assets/items.psd | Bin 567787 -> 571995 bytes .../assets/opencomputers/lang/en_US.lang | 2 + .../textures/items/DroneCase3.png | Bin 0 -> 406 bytes .../textures/items/MicrocontrollerCase3.png | Bin 0 -> 600 bytes .../scala/li/cil/oc/common/block/Case.scala | 4 +- .../li/cil/oc/common/block/Hologram.scala | 4 +- .../scala/li/cil/oc/common/block/Item.scala | 2 +- .../cil/oc/common/block/Microcontroller.scala | 6 + .../cil/oc/common/block/RobotAfterimage.scala | 9 +- .../li/cil/oc/common/block/RobotProxy.scala | 7 +- .../scala/li/cil/oc/common/block/Screen.scala | 8 +- .../li/cil/oc/common/block/SimpleBlock.scala | 2 +- .../scala/li/cil/oc/common/init/Items.scala | 108 +++++++++++++++++- .../li/cil/oc/common/item/Delegate.scala | 6 +- .../li/cil/oc/common/item/Delegator.scala | 2 +- .../scala/li/cil/oc/common/item/Drone.scala | 6 + .../li/cil/oc/common/item/DroneCase.scala | 4 +- .../li/cil/oc/common/item/ItemTier.scala | 2 +- .../li/cil/oc/common/item/Microchip.scala | 3 +- .../oc/common/item/MicrocontrollerCase.scala | 4 +- .../scala/li/cil/oc/common/item/Server.scala | 2 +- .../cil/oc/common/item/UpgradeDatabase.scala | 2 +- .../oc/common/template/DroneTemplate.scala | 45 +++++++- .../template/MicrocontrollerTemplate.scala | 45 +++++++- .../oc/common/template/RobotTemplate.scala | 5 +- src/main/scala/li/cil/oc/util/ItemUtils.scala | 7 +- 26 files changed, 248 insertions(+), 37 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/textures/items/DroneCase3.png create mode 100644 src/main/resources/assets/opencomputers/textures/items/MicrocontrollerCase3.png diff --git a/assets/items.psd b/assets/items.psd index 0709d3979ccdddab77defe4526e83d27448b3f49..9a6d7b44d0707f665fb830a950af5f4395c2a446 100644 GIT binary patch delta 6070 zcmai%3s@6Z+Q&}LXUW+O3yVX*+(F)~|Ngdi(6>rPW>QimTh!N=1v-YBguinVCS+)iv`>&dlV0 z&YZmS{?GfHYp2cUZ<*JI2mKtIIx)Av*B9WAq@w|1_Z+_~T>E*~T8irVR}V~L zeSRd<0wVxG{HJHpH*u0cKYqqi{-;oQGDRBNb@W?*Q=r8219(vaFQR}1x2t-7`ZnK( zDk7H{n14eS()IMU*Cp*;eYay&PveX9oP{sExFB~@-3#?|@afC&W~*dE*TD5)NpjcP z{u0 zZkk4#Czbj#5Fd2Gs#poj*+Zn;B~o8M;ZorTxbx~L{PhAp;ywzOyeNSNy);^b zBy#SIUiuF191h{OID+DT zk@!N>fJDjNuu0FdQ49Dd7l0!RRBiZ+JiEF>Tdt$cRVhvk2tyJgp%=GJ4k4&)t0;Ex5CLv6ng9lLG6K5XFd z!K)vaY`^Y77%ZT%Qc()gXT>W;s3`PtI*-@QM7?+(y7D?@kIbm_PKhE1QJeI=)DbzSq{Hq2PsfB%bYm-5!Ux4)a1-gJlVD8BG^ z{tvf}?`1W{K8Snj{-?bg-Yz+VGRlP-CabwqC7qsmuK6^UxTGA6!T2ix~d}ZIo zp69+F`5<)v&8OI9Km!2m}PPlu?Sy@;i#k&vQeYwI4S=k?a0|wDS_|6U4^TLtlrmTqR_zp-qdeI

fFd0FG5qU>gKDEYwzH+ECietA)*s1y^q zrkF~H!0^pfCzF?KH$_Cmo8kV=)Ly^5#Q2CrYrI(vn{#O$+yHTRxPe+w52}Q-PtjRX$X?c1aPHGX z`wmTZI_#6v)u?`bYf}^MQAAp69}&a1PSNSss3qUzzx;AOvZxF4j%HU>6c=;p>Dg*E zDr(h_Z&Co@;9I^2nhdYv;o}hKKXUZ-)vH~tXmK#t+mV1AP2<~YBZ^b4q*V+c@Zlgo zpB$KYn$9vIpq`w)TH#VMnux`T+i*c}xN2pJz2^9&09P#l1Mrh0)YuqH_N44d_4Shw zwmY|42^0!2t|q&;Jpoy*3f-FcTx*Elil;OH?;oLZV)YJGQ0}Z~RVvyxsWNLaXIXHe zNls2R=Pqiu+AXeRJdgGKJmAgKbZms7+Kvj&^%mm}o7!*(&e@&-5CE2VYkNm}VW;EM4UAF~ZV6h6-6p$Kt?drnXqSaXbuY*t(ItjJ#TWX&OGZR;1IH+TT5w+$9C4c3Z;SwQMGMXa)!2fw zvHi+H1$Y`1@)o>&n$lqlYNr0;kfcrXuwcp{Rm?b6wmu)eLLUm(4pJ)^M|kav%WLtO z?iRI^aYV1EH5g2x@c(a7dl^UMVnbvEK3jF0dXI5L)Gl73$7d6N!d`pIm+^=9f5Kiv zzKlZB0~Inx$@Si${>WQye1bZNST4b=4&p60nYhiY)iXgs=hP<*2VG{FE(ndb=v-Rt zHj7THWm!+RWkoaCZEF3fFy3t=om%xs6@x5ae|72qhwp$R(CfZbCBe30u{Hcg#Vno}i)jFjgU>Km4YYYaQb0p|~tjfrc;PbZAz<(I% zuqdvF~zNx8VoF$C^ACKGyK9Fj@;&7-@@{cb(d7G-KD9oF?Kr4IcTyacm&` zjqL-SMp~VuKtU=UXt%V>TmAfGGK~`3iv=`qGggX69UOY#fnR}7Ui4eXsl=QCSN#-vUi zQ#c>8Q|X<|R+v9#`t()v;a{fGdzr0o*r&g-4xcT{rQh@0x^9d;zi`$3$uMCHrGq7T zbSKQ6iOqE*kKO=(n8_$0E@UIQ_n)9&;;pr-C4;YKE!7#gnk6lubBML79VHrE$TCip z9&}a93N2_=T_In{>I#2d$l4Z=!jVz3@QId}n_gerZq-ju{SjY;6LIw{npfiUY zWzjs5_l9G}jH06Uv^0lCg9=;q=}j!ZwBpw7C{=^tsO4|C9o62*7qRqLYt2Qth~btU zc2o|m#2s)E)8sf*EG}YNb8upvSj1STDQ6J2)(nfwH2|X*(&=LHYAnLS zDY01C-XIpQIP1zaY12YT@v2=&+e8;-WE3g2qzrk?PQuHvN~(VG_iOg&?MB*%H>RqXe3QTi(sUjPY}ekYbM zQo7O#L3@0AY^zr5?{6Q&mo8Q;T{yx+p3;b=i|cNrJ19=Ggzl7b+n3VsNQ^36kO(J| zZ6;5LMW6^w!Fw!+hk=wTQfDdMxk3=4eI>(P3)1`aA;okccC~ z_yX{aLdYBVu*eJe1hE_TkT>jMu@~(1!RaxK8lF8u>4wdMyonF}iun3qM-2W0|BErs zz+#N`#=iTAc0=C<_`_-1YE)p9IIO zl5u#=egp*}u|B)=kWi42hwe2Szj$Dg7X=AoHvu6p0>WA^0^-xqou{O}p* zFq7o-h98_)ZuGf8JPBtR=p=UndcqGDy3ywX42)$G#02yP9)!Gsrw?ZFQZWHNSx4Z@ zVbCg#8Kju>59khfsD@Rso~-XV!701v+|iLV)w z;kEi9{Nszc2j}Gw|L}Rq@OeoHh#!b7axDm;TPZH&H=0X{W8URcmEZ+VRYDgh;iaX_ z1d^qXp$j29Dj^|@sK=58xiLJx!1ERP;dH^(n%4*TIod=WUUmr zLJ-z3q(weQ-eiH0H(B(-=;b7{g>>~I3-l|p=z}w{R9r7TiNYPwA#8(d_%X?P`3RyA z!^`%;Pso^$Bnpr9^2Tz8UoZcYA$&1A@av_>5PV*0hS$r07Un=CH@KCl^o1RNW@i2y DP2vgb delta 3458 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 H+tj}S$9ES5 diff --git a/src/main/resources/assets/opencomputers/lang/en_US.lang b/src/main/resources/assets/opencomputers/lang/en_US.lang index 6515dbe6e..993ca42e4 100644 --- a/src/main/resources/assets/opencomputers/lang/en_US.lang +++ b/src/main/resources/assets/opencomputers/lang/en_US.lang @@ -57,6 +57,7 @@ item.oc.Disk.name=Disk Platter item.oc.Drone.name=Drone item.oc.DroneCase0.name=Drone Case (Tier 1) item.oc.DroneCase1.name=Drone Case (Tier 2) +item.oc.DroneCase3.name=Drone Case (Creative) item.oc.eeprom.name=EEPROM item.oc.FloppyDisk.name=Floppy Disk item.oc.GraphicsCard0.name=Graphics Card (Tier 1) @@ -80,6 +81,7 @@ item.oc.Microchip1.name=Microchip (Tier 2) item.oc.Microchip2.name=Microchip (Tier 3) item.oc.MicrocontrollerCase0.name=Microcontroller Case (Tier 1) item.oc.MicrocontrollerCase1.name=Microcontroller Case (Tier 2) +item.oc.MicrocontrollerCase3.name=Microcontroller Case (Creative) item.oc.NetworkCard.name=Network Card item.oc.NumPad.name=Numeric Keypad item.oc.Present.name=A little something... diff --git a/src/main/resources/assets/opencomputers/textures/items/DroneCase3.png b/src/main/resources/assets/opencomputers/textures/items/DroneCase3.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce2fe4bb8f2170ae6f01884a44bbe618104a15b GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8`~aU2S3LneM{&orGieoCkJNc4wN7fVQoujSQDer+&Mqq^BgOgq4V;5|5%9pPGe;g}=0)2!}|IK^G4zZ;(uY z6qlqhyRb5^Qkh1{CY$v}LI(YYJ(2Pe|NsAg9Q9-&&<@p-AirQBmmpxUKkwuZ)X?MU z;uunKE2iIFsM$b(#hsJI%+mVdhX3`8%T-rwy6L_8myzy;hYsHFrUtn%HMrLK^&~!Q zRjQe^^q9~}j|oOEJ?+;iw>W03eY;sdPQ1=StYPi6MUJx%S_#%9-(O>TO7Yw$Ue;IT z=64ry{MOxdeoyI%y4Ipu@1x!Cl)u~We5lU4qJDWv%ip;cb^o;wFj!v`WEJv@e+P6I NgQu&X%Q~loCIBQ~q6`24 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/textures/items/MicrocontrollerCase3.png b/src/main/resources/assets/opencomputers/textures/items/MicrocontrollerCase3.png new file mode 100644 index 0000000000000000000000000000000000000000..8e95b929199c0fef6a4008a1630941cbe790e870 GIT binary patch literal 600 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8lL0;oNa{Eeq>kI17o8#^%?s)3dRApYJH*el}NqK4W zYi-}Y{m`L9=gyrgRxdhvvZ24fKbDU#Mj>j)j&dU*gDIk-&CSh`@)2v-HcG4MX!2{U zw_bbWM&rhfc?S>HmCXPird{DOg83IT&-63cs_ao0Ru978H@nVb*J zV{znR2{13_e{A%=ZDykJcl(ez8XN!5^HP<*mp+NF-Z*$t(=A<&rNNaq<29CAaTOJA z{bv#OJv6a=lLlwNCcC@8mvshCU#ia1Hu?46Yuwd#r zCKb*zGtD)f@}>#BSNGH!e8xlM~OkUt53~Z8Y^|Xj*B6xY{I@}>Hd}bqB`{%cn<#m fEyA#mRf2)fUi?Aqxvf)yK4kE8^>bP0l+XkKTUZJd literal 0 HcmV?d00001 diff --git a/src/main/scala/li/cil/oc/common/block/Case.scala b/src/main/scala/li/cil/oc/common/block/Case.scala index f3979cee4..03c3fce69 100644 --- a/src/main/scala/li/cil/oc/common/block/Case.scala +++ b/src/main/scala/li/cil/oc/common/block/Case.scala @@ -11,10 +11,10 @@ import li.cil.oc.common.tileentity import li.cil.oc.integration.util.Wrench import li.cil.oc.util.BlockPosition import li.cil.oc.util.Color +import li.cil.oc.util.Rarity import li.cil.oc.util.Tooltip import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.IIcon import net.minecraft.world.IBlockAccess @@ -56,7 +56,7 @@ class Case(val tier: Int) extends RedstoneAware with traits.PowerAcceptor with t // ----------------------------------------------------------------------- // - override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare, EnumRarity.epic).apply(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override protected def tooltipBody(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { tooltip.addAll(Tooltip.get(getClass.getSimpleName, slots)) diff --git a/src/main/scala/li/cil/oc/common/block/Hologram.scala b/src/main/scala/li/cil/oc/common/block/Hologram.scala index 488e2e595..9708d2817 100644 --- a/src/main/scala/li/cil/oc/common/block/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/block/Hologram.scala @@ -5,9 +5,9 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.common.tileentity +import li.cil.oc.util.Rarity import li.cil.oc.util.Tooltip import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.world.IBlockAccess import net.minecraft.world.World @@ -37,7 +37,7 @@ class Hologram(val tier: Int) extends SimpleBlock with traits.SpecialBlock { // ----------------------------------------------------------------------- // - override def rarity = Array(EnumRarity.uncommon, EnumRarity.rare).apply(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override protected def tooltipBody(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { tooltip.addAll(Tooltip.get(getClass.getSimpleName + tier)) diff --git a/src/main/scala/li/cil/oc/common/block/Item.scala b/src/main/scala/li/cil/oc/common/block/Item.scala index c5e1a481e..a83ba8417 100644 --- a/src/main/scala/li/cil/oc/common/block/Item.scala +++ b/src/main/scala/li/cil/oc/common/block/Item.scala @@ -42,7 +42,7 @@ class Item(value: Block) extends ItemBlock(value) { } override def getRarity(stack: ItemStack) = block match { - case simple: SimpleBlock => simple.rarity + case simple: SimpleBlock => simple.rarity(stack) case _ => EnumRarity.common } diff --git a/src/main/scala/li/cil/oc/common/block/Microcontroller.scala b/src/main/scala/li/cil/oc/common/block/Microcontroller.scala index 4f6e8d742..5228067f9 100644 --- a/src/main/scala/li/cil/oc/common/block/Microcontroller.scala +++ b/src/main/scala/li/cil/oc/common/block/Microcontroller.scala @@ -10,6 +10,7 @@ import li.cil.oc.integration.util.NEI import li.cil.oc.integration.util.Wrench import li.cil.oc.util.BlockPosition import li.cil.oc.util.ItemUtils +import li.cil.oc.util.Rarity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack @@ -55,6 +56,11 @@ class Microcontroller extends RedstoneAware with traits.PowerAcceptor with trait } } + override def rarity(stack: ItemStack) = { + val data = new ItemUtils.MicrocontrollerData(stack) + Rarity.byTier(data.tier) + } + // ----------------------------------------------------------------------- // override def energyThroughput = Settings.get.caseRate(Tier.One) diff --git a/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala b/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala index b542552a8..20a1b3bdd 100644 --- a/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala +++ b/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala @@ -8,9 +8,11 @@ import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.common.tileentity import li.cil.oc.integration.util.NEI +import li.cil.oc.util.ItemUtils +import li.cil.oc.util.Rarity import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.EnumRarity +import net.minecraft.item.ItemStack import net.minecraft.util.IIcon import net.minecraft.util.MovingObjectPosition import net.minecraft.world.IBlockAccess @@ -47,7 +49,10 @@ class RobotAfterimage extends SimpleBlock with traits.SpecialBlock { // ----------------------------------------------------------------------- // - override def rarity = EnumRarity.epic + override def rarity(stack: ItemStack) = { + val data = new ItemUtils.RobotData(stack) + Rarity.byTier(data.tier) + } // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/common/block/RobotProxy.scala b/src/main/scala/li/cil/oc/common/block/RobotProxy.scala index cf64ceb0e..80c7ad3e3 100644 --- a/src/main/scala/li/cil/oc/common/block/RobotProxy.scala +++ b/src/main/scala/li/cil/oc/common/block/RobotProxy.scala @@ -14,12 +14,12 @@ import li.cil.oc.integration.util.NEI import li.cil.oc.server.PacketSender import li.cil.oc.server.component.robot import li.cil.oc.util.ItemUtils +import li.cil.oc.util.Rarity import li.cil.oc.util.Tooltip import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.AxisAlignedBB import net.minecraft.util.IIcon @@ -65,7 +65,10 @@ class RobotProxy extends RedstoneAware with traits.SpecialBlock with traits.Stat // ----------------------------------------------------------------------- // - override def rarity = EnumRarity.epic + override def rarity(stack: ItemStack) = { + val data = new ItemUtils.RobotData(stack) + Rarity.byTier(data.tier) + } override protected def tooltipHead(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { super.tooltipHead(metadata, stack, player, tooltip, advanced) diff --git a/src/main/scala/li/cil/oc/common/block/Screen.scala b/src/main/scala/li/cil/oc/common/block/Screen.scala index 64df6f24b..130951915 100644 --- a/src/main/scala/li/cil/oc/common/block/Screen.scala +++ b/src/main/scala/li/cil/oc/common/block/Screen.scala @@ -9,16 +9,12 @@ import li.cil.oc.Settings import li.cil.oc.common.GuiType import li.cil.oc.common.tileentity import li.cil.oc.integration.util.Wrench -import li.cil.oc.util.BlockPosition -import li.cil.oc.util.Color -import li.cil.oc.util.PackedColor -import li.cil.oc.util.Tooltip +import li.cil.oc.util._ import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.projectile.EntityArrow -import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.IIcon import net.minecraft.world.IBlockAccess @@ -33,7 +29,7 @@ class Screen(val tier: Int) extends RedstoneAware { // ----------------------------------------------------------------------- // - override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare).apply(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override protected def tooltipBody(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { val (w, h) = Settings.screenResolutionsByTier(tier) diff --git a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala index cbd71ad41..47fc3ff79 100644 --- a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala +++ b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala @@ -97,7 +97,7 @@ class SimpleBlock(material: Material = Material.iron) extends Block(material) { // ItemBlock // ----------------------------------------------------------------------- // - def rarity = EnumRarity.common + def rarity(stack: ItemStack) = EnumRarity.common @SideOnly(Side.CLIENT) def addInformation(metadata: Int, stack: ItemStack, player: EntityPlayer, tooltip: java.util.List[String], advanced: Boolean) { diff --git a/src/main/scala/li/cil/oc/common/init/Items.scala b/src/main/scala/li/cil/oc/common/init/Items.scala index 3a574c8a8..6639c13b9 100644 --- a/src/main/scala/li/cil/oc/common/init/Items.scala +++ b/src/main/scala/li/cil/oc/common/init/Items.scala @@ -15,6 +15,7 @@ import li.cil.oc.common.item.UpgradeLeash import li.cil.oc.common.recipe.Recipes import li.cil.oc.integration.Mods import li.cil.oc.util.Color +import li.cil.oc.util.ItemUtils import net.minecraft.block.Block import net.minecraft.creativetab.CreativeTabs import net.minecraft.entity.player.EntityPlayer @@ -139,6 +140,98 @@ object Items extends ItemAPI { stack } + def createConfiguredDrone() = { + val data = new ItemUtils.MicrocontrollerData() + + data.tier = Tier.Four + data.storedEnergy = Settings.get.bufferDrone.toInt + data.components = Array( + get("inventoryUpgrade").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryControllerUpgrade").createItemStack(1), + get("tankUpgrade").createItemStack(1), + get("tankControllerUpgrade").createItemStack(1), + + get("wlanCard").createItemStack(1), + + get("cpu3").createItemStack(1), + get("ram6").createItemStack(1), + get("ram6").createItemStack(1) + ) + + val stack = get("drone").createItemStack(1) + data.save(stack) + + stack + } + + def createConfiguredMicrocontroller() = { + val data = new ItemUtils.MicrocontrollerData() + + data.tier = Tier.Four + data.storedEnergy = Settings.get.bufferMicrocontroller.toInt + data.components = Array( + get("signUpgrade").createItemStack(1), + get("pistonUpgrade").createItemStack(1), + + get("redstoneCard2").createItemStack(1), + get("wlanCard").createItemStack(1), + + get("cpu3").createItemStack(1), + get("ram6").createItemStack(1), + get("ram6").createItemStack(1) + ) + + val stack = get("microcontroller").createItemStack(1) + data.save(stack) + + stack + } + + def createConfiguredRobot() = { + val data = new ItemUtils.RobotData() + + data.name = "Creatix" + data.tier = Tier.Four + data.robotEnergy = Settings.get.bufferRobot.toInt + data.totalEnergy = data.robotEnergy + data.components = Array( + get("screen1").createItemStack(1), + get("keyboard").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryUpgrade").createItemStack(1), + get("inventoryControllerUpgrade").createItemStack(1), + get("tankUpgrade").createItemStack(1), + get("tankControllerUpgrade").createItemStack(1), + get("craftingUpgrade").createItemStack(1), + + get("graphicsCard3").createItemStack(1), + get("redstoneCard2").createItemStack(1), + get("wlanCard").createItemStack(1), + get("internetCard").createItemStack(1), + + get("cpu3").createItemStack(1), + get("ram6").createItemStack(1), + get("ram6").createItemStack(1), + + createLuaBios(), + createOpenOS(), + get("hdd3").createItemStack(1) + ) + data.containers = Array( + get("cardContainer3").createItemStack(1), + get("upgradeContainer3").createItemStack(1), + get("upgradeContainer3").createItemStack(1) + ) + + val stack = get("robot").createItemStack(1) + data.save(stack) + + stack + } + // ----------------------------------------------------------------------- // var multi: item.Delegator = _ @@ -149,13 +242,20 @@ object Items extends ItemAPI { def init() { multi = new item.Delegator() { + lazy val configuredItems = Array( + createOpenOS(), + createLuaBios(), + createConfiguredDrone(), + createConfiguredMicrocontroller(), + createConfiguredRobot() + ) + override def getSubItems(item: Item, tab: CreativeTabs, list: java.util.List[_]) { // Workaround for MC's untyped lists... def add[T](list: java.util.List[T], value: Any) = list.add(value.asInstanceOf[T]) super.getSubItems(item, tab, list) Loot.worldDisks.values.foreach(entry => add(list, entry._1)) - add(list, createOpenOS()) - add(list, createLuaBios()) + configuredItems.foreach(add(list, _)) } } @@ -323,5 +423,9 @@ object Items extends ItemAPI { if (Mods.Galacticraft.isAvailable) { Recipes.addMultiItem(worldSensorCard, "worldSensorCard", "oc:worldSensorCard") } + + // 1.4.4 + registerItem(new item.MicrocontrollerCase(multi, Tier.Four), "microcontrollerCaseCreative") + registerItem(new item.DroneCase(multi, Tier.Four), "droneCaseCreative") } } diff --git a/src/main/scala/li/cil/oc/common/item/Delegate.scala b/src/main/scala/li/cil/oc/common/item/Delegate.scala index 50158123b..e71de888f 100644 --- a/src/main/scala/li/cil/oc/common/item/Delegate.scala +++ b/src/main/scala/li/cil/oc/common/item/Delegate.scala @@ -60,15 +60,13 @@ trait Delegate { // ----------------------------------------------------------------------- // - def rarity = Rarity.byTier(tierFromDriver) + def rarity(stack: ItemStack) = Rarity.byTier(tierFromDriver(stack)) - protected def tierFromDriver = { - val stack = createItemStack() + protected def tierFromDriver(stack: ItemStack) = api.Driver.driverFor(stack) match { case driver: api.driver.Item => driver.tier(stack) case _ => 0 } - } def color(stack: ItemStack, pass: Int) = 0xFFFFFF diff --git a/src/main/scala/li/cil/oc/common/item/Delegator.scala b/src/main/scala/li/cil/oc/common/item/Delegator.scala index e67c7ef08..dfbc11795 100644 --- a/src/main/scala/li/cil/oc/common/item/Delegator.scala +++ b/src/main/scala/li/cil/oc/common/item/Delegator.scala @@ -83,7 +83,7 @@ class Delegator extends Item { override def isBookEnchantable(itemA: ItemStack, itemB: ItemStack): Boolean = false override def getRarity(stack: ItemStack) = subItem(stack) match { - case Some(subItem) => subItem.rarity + case Some(subItem) => subItem.rarity(stack) case _ => EnumRarity.common } diff --git a/src/main/scala/li/cil/oc/common/item/Drone.scala b/src/main/scala/li/cil/oc/common/item/Drone.scala index 18862635c..04001d32d 100644 --- a/src/main/scala/li/cil/oc/common/item/Drone.scala +++ b/src/main/scala/li/cil/oc/common/item/Drone.scala @@ -9,6 +9,7 @@ import li.cil.oc.common.entity import li.cil.oc.integration.util.NEI import li.cil.oc.util.BlockPosition import li.cil.oc.util.ItemUtils +import li.cil.oc.util.Rarity import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack @@ -24,6 +25,11 @@ class Drone(val parent: Delegator) extends Delegate { } } + override def rarity(stack: ItemStack) = { + val data = new ItemUtils.MicrocontrollerData(stack) + Rarity.byTier(data.tier) + } + override def onItemUse(stack: ItemStack, player: EntityPlayer, position: BlockPosition, side: Int, hitX: Float, hitY: Float, hitZ: Float) = { val world = position.world.get if (!world.isRemote) { diff --git a/src/main/scala/li/cil/oc/common/item/DroneCase.scala b/src/main/scala/li/cil/oc/common/item/DroneCase.scala index 5f62cde92..9a90eb3d2 100644 --- a/src/main/scala/li/cil/oc/common/item/DroneCase.scala +++ b/src/main/scala/li/cil/oc/common/item/DroneCase.scala @@ -1,9 +1,11 @@ package li.cil.oc.common.item +import net.minecraft.item.ItemStack + class DroneCase(val parent: Delegator, val tier: Int) extends Delegate with ItemTier { override val unlocalizedName = super.unlocalizedName + tier - override protected def tierFromDriver = tier + override protected def tierFromDriver(stack: ItemStack) = tier override protected def tooltipName = Option(super.unlocalizedName) } \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/common/item/ItemTier.scala b/src/main/scala/li/cil/oc/common/item/ItemTier.scala index aa6eb4f86..c6be84ae4 100644 --- a/src/main/scala/li/cil/oc/common/item/ItemTier.scala +++ b/src/main/scala/li/cil/oc/common/item/ItemTier.scala @@ -14,7 +14,7 @@ trait ItemTier extends Delegate { override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { super.tooltipLines(stack, player, tooltip, advanced) if (advanced) { - tooltip.add(Localization.Tooltip.Tier(tierFromDriver + 1)) + tooltip.add(Localization.Tooltip.Tier(tierFromDriver(stack) + 1)) } } } diff --git a/src/main/scala/li/cil/oc/common/item/Microchip.scala b/src/main/scala/li/cil/oc/common/item/Microchip.scala index 7e18e4967..3b753f5a3 100644 --- a/src/main/scala/li/cil/oc/common/item/Microchip.scala +++ b/src/main/scala/li/cil/oc/common/item/Microchip.scala @@ -1,11 +1,12 @@ package li.cil.oc.common.item import li.cil.oc.util.Rarity +import net.minecraft.item.ItemStack class Microchip(val parent: Delegator, val tier: Int) extends Delegate { override val unlocalizedName = super.unlocalizedName + tier override protected def tooltipName = Option(super.unlocalizedName) - override def rarity = Rarity.byTier(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) } diff --git a/src/main/scala/li/cil/oc/common/item/MicrocontrollerCase.scala b/src/main/scala/li/cil/oc/common/item/MicrocontrollerCase.scala index bf8c9fd05..de0340e22 100644 --- a/src/main/scala/li/cil/oc/common/item/MicrocontrollerCase.scala +++ b/src/main/scala/li/cil/oc/common/item/MicrocontrollerCase.scala @@ -1,9 +1,11 @@ package li.cil.oc.common.item +import net.minecraft.item.ItemStack + class MicrocontrollerCase(val parent: Delegator, val tier: Int) extends Delegate with ItemTier { override val unlocalizedName = super.unlocalizedName + tier - override protected def tierFromDriver = tier + override protected def tierFromDriver(stack: ItemStack) = tier override protected def tooltipName = Option(super.unlocalizedName) } diff --git a/src/main/scala/li/cil/oc/common/item/Server.scala b/src/main/scala/li/cil/oc/common/item/Server.scala index 4b469af56..1cec10b36 100644 --- a/src/main/scala/li/cil/oc/common/item/Server.scala +++ b/src/main/scala/li/cil/oc/common/item/Server.scala @@ -23,7 +23,7 @@ class Server(val parent: Delegator, val tier: Int) extends Delegate { override protected def tooltipData = Seq(Settings.get.terminalsPerTier(math.min(Tier.Three, tier))) - override def rarity = Rarity.byTier(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override def maxStackSize = 1 diff --git a/src/main/scala/li/cil/oc/common/item/UpgradeDatabase.scala b/src/main/scala/li/cil/oc/common/item/UpgradeDatabase.scala index 6633d8578..c63dc54fe 100644 --- a/src/main/scala/li/cil/oc/common/item/UpgradeDatabase.scala +++ b/src/main/scala/li/cil/oc/common/item/UpgradeDatabase.scala @@ -15,7 +15,7 @@ class UpgradeDatabase(val parent: Delegator, val tier: Int) extends Delegate wit override protected def tooltipData = Seq(Settings.get.databaseEntriesPerTier(tier)) - override def rarity = Rarity.byTier(tier) + override def rarity(stack: ItemStack) = Rarity.byTier(tier) override def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer) = { if (!player.isSneaking) { diff --git a/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala b/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala index 0f8c0c1a0..64c9b9ef3 100644 --- a/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala @@ -23,6 +23,8 @@ object DroneTemplate extends Template { def selectTier2(stack: ItemStack) = api.Items.get(stack) == api.Items.get("droneCase2") + def selectTierCreative(stack: ItemStack) = api.Items.get(stack) == api.Items.get("droneCaseCreative") + def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory) def assemble(inventory: IInventory) = { @@ -42,7 +44,9 @@ object DroneTemplate extends Template { def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { val info = new ItemUtils.MicrocontrollerData(stack) - Array(api.Items.get("droneCase" + (info.tier + 1)).createItemStack(1)) ++ info.components + val itemName = ItemUtils.caseNameWithTierSuffix("droneCase", info.tier) + + Array(api.Items.get(itemName).createItemStack(1)) ++ info.components } def register() { @@ -101,6 +105,40 @@ object DroneTemplate extends Template { FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) } + // Creative + { + val nbt = new NBTTagCompound() + nbt.setString("name", "Drone (Creative)") + nbt.setString("select", "li.cil.oc.common.template.DroneTemplate.selectTierCreative") + nbt.setString("validate", "li.cil.oc.common.template.DroneTemplate.validate") + nbt.setString("assemble", "li.cil.oc.common.template.DroneTemplate.assemble") + nbt.setString("hostClass", "li.cil.oc.api.internal.Drone") + + val upgradeSlots = new NBTTagList() + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + nbt.setTag("upgradeSlots", upgradeSlots) + + val componentSlots = new NBTTagList() + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.CPU, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.EEPROM, "tier" -> Tier.Any)) + nbt.setTag("componentSlots", componentSlots) + + FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) + } + // Disassembler { val nbt = new NBTTagCompound() @@ -112,7 +150,10 @@ object DroneTemplate extends Template { } } - override protected def maxComplexity(inventory: IInventory) = if (caseTier(inventory) == Tier.Two) 8 else 5 + override protected def maxComplexity(inventory: IInventory) = + if (caseTier(inventory) == Tier.Two) 8 + else if (caseTier(inventory) == Tier.Four) 9001 // Creative + else 5 override protected def caseTier(inventory: IInventory) = ItemUtils.caseTier(inventory.getStackInSlot(0)) } diff --git a/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala b/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala index d528ca100..ed8a7c6f2 100644 --- a/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala @@ -23,6 +23,8 @@ object MicrocontrollerTemplate extends Template { def selectTier2(stack: ItemStack) = api.Items.get(stack) == api.Items.get("microcontrollerCase2") + def selectTierCreative(stack: ItemStack) = api.Items.get(stack) == api.Items.get("microcontrollerCaseCreative") + def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory) def assemble(inventory: IInventory) = { @@ -42,7 +44,9 @@ object MicrocontrollerTemplate extends Template { def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { val info = new ItemUtils.MicrocontrollerData(stack) - Array(api.Items.get("microcontrollerCase" + (info.tier + 1)).createItemStack(1)) ++ info.components + val itemName = ItemUtils.caseNameWithTierSuffix("microcontrollerCase", info.tier) + + Array(api.Items.get(itemName).createItemStack(1)) ++ info.components } def register() { @@ -98,6 +102,40 @@ object MicrocontrollerTemplate extends Template { FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) } + // Creative + { + val nbt = new NBTTagCompound() + nbt.setString("name", "Microcontroller (Creative)") + nbt.setString("select", "li.cil.oc.common.template.MicrocontrollerTemplate.selectTierCreative") + nbt.setString("validate", "li.cil.oc.common.template.MicrocontrollerTemplate.validate") + nbt.setString("assemble", "li.cil.oc.common.template.MicrocontrollerTemplate.assemble") + nbt.setString("hostClass", "li.cil.oc.api.internal.Microcontroller") + + val upgradeSlots = new NBTTagList() + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + upgradeSlots.appendTag(Map("tier" -> Tier.Three)) + nbt.setTag("upgradeSlots", upgradeSlots) + + val componentSlots = new NBTTagList() + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Card, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.CPU, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.Memory, "tier" -> Tier.Three)) + componentSlots.appendTag(Map("type" -> Slot.EEPROM, "tier" -> Tier.Any)) + nbt.setTag("componentSlots", componentSlots) + + FMLInterModComms.sendMessage("OpenComputers", "registerAssemblerTemplate", nbt) + } + // Disassembler { val nbt = new NBTTagCompound() @@ -109,7 +147,10 @@ object MicrocontrollerTemplate extends Template { } } - override protected def maxComplexity(inventory: IInventory) = if (caseTier(inventory) == Tier.Two) 5 else 4 + override protected def maxComplexity(inventory: IInventory) = + if (caseTier(inventory) == Tier.Two) 5 + else if (caseTier(inventory) == Tier.Four) 9001 // Creative + else 4 override protected def caseTier(inventory: IInventory) = ItemUtils.caseTier(inventory.getStackInSlot(0)) } diff --git a/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala b/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala index 44ea2cde9..54257ce6c 100644 --- a/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala @@ -46,9 +46,8 @@ object RobotTemplate extends Template { def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { val info = new ItemUtils.RobotData(stack) - val itemName = - if (info.tier == Tier.Four) "caseCreative" - else "case" + (info.tier + 1) + val itemName = ItemUtils.caseNameWithTierSuffix("case", info.tier) + Array(api.Items.get(itemName).createItemStack(1)) ++ info.containers ++ info.components } diff --git a/src/main/scala/li/cil/oc/util/ItemUtils.scala b/src/main/scala/li/cil/oc/util/ItemUtils.scala index 81e6f8d30..b7589040e 100644 --- a/src/main/scala/li/cil/oc/util/ItemUtils.scala +++ b/src/main/scala/li/cil/oc/util/ItemUtils.scala @@ -39,14 +39,19 @@ object ItemUtils { else if (descriptor == api.Items.get("caseCreative")) Tier.Four else if (descriptor == api.Items.get("microcontrollerCase1")) Tier.One else if (descriptor == api.Items.get("microcontrollerCase2")) Tier.Two + else if (descriptor == api.Items.get("microcontrollerCaseCreative")) Tier.Four else if (descriptor == api.Items.get("droneCase1")) Tier.One else if (descriptor == api.Items.get("droneCase2")) Tier.Two + else if (descriptor == api.Items.get("droneCaseCreative")) Tier.Four else if (descriptor == api.Items.get("server1")) Tier.One else if (descriptor == api.Items.get("server2")) Tier.Two else if (descriptor == api.Items.get("server3")) Tier.Three + else if (descriptor == api.Items.get("serverCreative")) Tier.Four else Tier.None } + def caseNameWithTierSuffix(name: String, tier: Int) = name + (if (tier == Tier.Four) "Creative" else (tier + 1).toString) + def loadStack(nbt: NBTTagCompound) = DelegatorConverter.convert(ItemStack.loadItemStackFromNBT(nbt)) def getIngredients(stack: ItemStack): Array[ItemStack] = try { @@ -253,7 +258,7 @@ object ItemUtils { } override def save(nbt: NBTTagCompound) { - if (name != null) { + if (!Strings.isNullOrEmpty(name)) { if (!nbt.hasKey("display")) { nbt.setTag("display", new NBTTagCompound()) }