From 948f344404d47d56baa96cff4e1a927d69960974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 23 May 2015 17:25:30 +0200 Subject: [PATCH 01/14] Fixes craftables not being loadable after 5ad8ef331dc6b7dcbc0f11e15ca5019f0e578844. --- .../cil/oc/integration/appeng/NetworkControl.scala | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala b/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala index 9ad963421..52a4c4869 100644 --- a/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala +++ b/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala @@ -55,7 +55,7 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi case Some(pattern) => pattern.getOutputs.find(_.isSameType(stack)).get case _ => stack.copy.setStackSize(0) // Should not be possible, but hey... } - new Craftable(tile, result) + new NetworkControl.Craftable(tile, result) }).toArray) } @@ -101,8 +101,11 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi filter.get("name").forall(_.equals(Item.itemRegistry.getNameForObject(stack.getItem))) && filter.get("label").forall(_.equals(stack.getItemStack.getDisplayName)) } +} - class Craftable(var controller: AETile, var stack: IAEItemStack) extends AbstractValue with ICraftingRequester { +object NetworkControl { + + class Craftable(var controller: TileEntity with IGridProxyable with IActionHost, var stack: IAEItemStack) extends AbstractValue with ICraftingRequester { def this() = this(null, null) private val links = mutable.Set.empty[ICraftingLink] @@ -186,8 +189,8 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi EventHandler.schedule(() => { val world = DimensionManager.getWorld(dimension) val tileEntity = world.getTileEntity(x, y, z) - if (tileEntity != null && tileEntity.isInstanceOf[AETile]) { - controller = tileEntity.asInstanceOf[AETile] + if (tileEntity != null && tileEntity.isInstanceOf[TileEntity with IGridProxyable with IActionHost]) { + controller = tileEntity.asInstanceOf[TileEntity with IGridProxyable with IActionHost] } }) } @@ -256,4 +259,4 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi } } -} +} \ No newline at end of file From e14ba3be7a8436264460300f12237608f9afaa93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 24 May 2015 10:58:30 +0200 Subject: [PATCH 02/14] Added geolyzer and nav upgrade to creative tablet. Closes #1171. --- src/main/scala/li/cil/oc/common/init/Items.scala | 2 ++ 1 file changed, 2 insertions(+) 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 9d02389b9..0acc17155 100644 --- a/src/main/scala/li/cil/oc/common/init/Items.scala +++ b/src/main/scala/li/cil/oc/common/init/Items.scala @@ -288,6 +288,8 @@ object Items extends ItemAPI { Option(get(Constants.ItemName.SignUpgrade).createItemStack(1)), Option(get(Constants.ItemName.PistonUpgrade).createItemStack(1)), + Option(get(Constants.BlockName.Geolyzer).createItemStack(1)), + Option(get(Constants.ItemName.NavigationUpgrade).createItemStack(1)), Option(get(Constants.ItemName.GraphicsCardTier2).createItemStack(1)), Option(get(Constants.ItemName.RedstoneCardTier2).createItemStack(1)), From 37e0403927e12689cf9e4965682b5eacaaa3639d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 24 May 2015 11:15:14 +0200 Subject: [PATCH 03/14] Added creative tier APU (acts as T3 CPU+GPU). Closes #1169. --- assets/items.psd | Bin 620434 -> 624946 bytes .../assets/opencomputers/lang/en_US.lang | 1 + .../opencomputers/textures/items/APU2.png | Bin 0 -> 887 bytes .../textures/items/APU2.png.mcmeta | 18 ++++++++++++++++++ src/main/scala/li/cil/oc/Constants.scala | 1 + .../scala/li/cil/oc/common/init/Items.scala | 3 +++ .../scala/li/cil/oc/common/item/APU.scala | 4 +++- .../scala/li/cil/oc/common/item/Server.scala | 2 +- .../integration/opencomputers/DriverAPU.scala | 4 +++- 9 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/textures/items/APU2.png create mode 100644 src/main/resources/assets/opencomputers/textures/items/APU2.png.mcmeta diff --git a/assets/items.psd b/assets/items.psd index 9c65a2b8687ae9101bbab34f03dadbdb7fd18396..78087d3e982a84a129dc4b8f48e14c64a8d16d85 100644 GIT binary patch delta 21760 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 UI{baYf4CI)zZjmLC2F|;2E3x;^8f$< diff --git a/src/main/resources/assets/opencomputers/lang/en_US.lang b/src/main/resources/assets/opencomputers/lang/en_US.lang index 527629c23..c31a753a4 100644 --- a/src/main/resources/assets/opencomputers/lang/en_US.lang +++ b/src/main/resources/assets/opencomputers/lang/en_US.lang @@ -45,6 +45,7 @@ item.oc.ALU.name=Arithmetic Logic Unit (ALU) item.oc.Analyzer.name=Analyzer item.oc.APU0.name=Accelerated Processing Unit (APU) (Tier 1) item.oc.APU1.name=Accelerated Processing Unit (APU) (Tier 2) +item.oc.APU2.name=Accelerated Processing Unit (APU) (Creative) item.oc.ArrowKeys.name=Arrow Keys item.oc.ButtonGroup.name=Button Group item.oc.CardBase.name=Card Base diff --git a/src/main/resources/assets/opencomputers/textures/items/APU2.png b/src/main/resources/assets/opencomputers/textures/items/APU2.png new file mode 100644 index 0000000000000000000000000000000000000000..4a09b42d6c7395c83c08ff6833dd1afcfea89eab GIT binary patch literal 887 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=!3-po`I#mGDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MYjWdLR^Jdq=3w0$ByZ8Iy&(tK7aoF)saWnZd|EvsJmFc z@4=EQH~LO2TrzL{hINltUF+-bJ(;-q(vk-c_rE>ZeD(Cy+qc#~y}9k#l~s@K?Ra&6 z|I1Y=^Jckpo|%33<>`+*8rIAS={**yYe9F8&A+J7t3OJvv8}X=Y!jAC6EayY)1z|22Guq;oOyNj4U-ZJTGbY~AG5WQ z%#+LNFEf1baFP48)H{cl$}P*3d%f}QzUk-Y_Z^>BHRZ}-$9@&h9qrDxbL9G6nwH1w zFA$ONTFCh#u%O?iZTa+Di(`2zro0FgVg0VLvi-5e@v1dp>l>Gq+Js$EULYq`)slF^ z*5uW~uN5sqHvji9s~!{J0J?fcb&HYB{i`5XD?9XC^zC$aur=}hz5cj8BO8OJ#)SWc T#^FN1)WhKE>gTe~DWM4fR?6U) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/opencomputers/textures/items/APU2.png.mcmeta b/src/main/resources/assets/opencomputers/textures/items/APU2.png.mcmeta new file mode 100644 index 000000000..622c31336 --- /dev/null +++ b/src/main/resources/assets/opencomputers/textures/items/APU2.png.mcmeta @@ -0,0 +1,18 @@ +{ + "animation": { + "frametime": 1, + "frames": [ + { "index": 0, "time": 3 }, + { "index": 1, "time": 3 }, + { "index": 2, "time": 3 }, + { "index": 3, "time": 3 }, + { "index": 4, "time": 3 }, + { "index": 5, "time": 3 }, + { "index": 4, "time": 3 }, + { "index": 3, "time": 3 }, + { "index": 2, "time": 3 }, + { "index": 1, "time": 3 }, + { "index": 0, "time": 3 } + ] + } +} \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/Constants.scala b/src/main/scala/li/cil/oc/Constants.scala index 413ceff3d..be261a68d 100644 --- a/src/main/scala/li/cil/oc/Constants.scala +++ b/src/main/scala/li/cil/oc/Constants.scala @@ -49,6 +49,7 @@ object Constants { final val Alu = "alu" final val Analyzer = "analyzer" final val AngelUpgrade = "angelUpgrade" + final val APUCreative = "apuCreative" final val APUTier1 = "apu1" final val APUTier2 = "apu2" final val ArrowKeys = "arrowKeys" 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 0acc17155..3fd66423c 100644 --- a/src/main/scala/li/cil/oc/common/init/Items.scala +++ b/src/main/scala/li/cil/oc/common/init/Items.scala @@ -535,5 +535,8 @@ object Items extends ItemAPI { // 1.5.11 Recipes.addItem(new item.HoverBoots(), Constants.ItemName.HoverBoots, "oc:hoverBoots") + + // 1.5.12 + registerItem(new item.APU(multi, Tier.Three), Constants.ItemName.APUCreative) } } diff --git a/src/main/scala/li/cil/oc/common/item/APU.scala b/src/main/scala/li/cil/oc/common/item/APU.scala index a03c2457e..b111a240c 100644 --- a/src/main/scala/li/cil/oc/common/item/APU.scala +++ b/src/main/scala/li/cil/oc/common/item/APU.scala @@ -1,11 +1,13 @@ package li.cil.oc.common.item +import li.cil.oc.common.Tier + import scala.language.existentials class APU(val parent: Delegator, val tier: Int) extends traits.Delegate with traits.ItemTier with traits.CPULike with traits.GPULike { override val unlocalizedName = super[Delegate].unlocalizedName + tier - override def cpuTier = tier + 1 + override def cpuTier = math.min(Tier.Three, tier + 1) override def gpuTier = tier 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 b31b0c19f..a2272e7b2 100644 --- a/src/main/scala/li/cil/oc/common/item/Server.scala +++ b/src/main/scala/li/cil/oc/common/item/Server.scala @@ -43,7 +43,7 @@ class Server(val parent: Delegator, val tier: Int) extends traits.Delegate { val itemName = item.getDisplayName items += itemName -> (if (items.contains(itemName)) items(itemName) + 1 else 1) } - if (items.size > 0) { + if (items.nonEmpty) { tooltip.addAll(Tooltip.get("Server.Components")) for (itemName <- items.keys.toArray.sorted) { tooltip.add("- " + items(itemName) + "x " + itemName) diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverAPU.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverAPU.scala index 97fa16316..a41112f13 100644 --- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverAPU.scala +++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverAPU.scala @@ -14,12 +14,14 @@ import net.minecraft.item.ItemStack object DriverAPU extends DriverCPU with HostAware with EnvironmentAware { override def worksWith(stack: ItemStack) = isOneOf(stack, api.Items.get(Constants.ItemName.APUTier1), - api.Items.get(Constants.ItemName.APUTier2)) + api.Items.get(Constants.ItemName.APUTier2), + api.Items.get(Constants.ItemName.APUCreative)) override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = gpuTier(stack) match { case Tier.One => new component.GraphicsCard.Tier1() case Tier.Two => new component.GraphicsCard.Tier2() + case Tier.Three => new component.GraphicsCard.Tier3() case _ => null } From ccf00ae3c3af9c414527ab3b9775702a3c8c6bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 24 May 2015 11:24:08 +0200 Subject: [PATCH 04/14] Make creative APU be colored appropriately. --- src/main/scala/li/cil/oc/common/item/APU.scala | 7 +++++++ src/main/scala/li/cil/oc/server/machine/Machine.scala | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/item/APU.scala b/src/main/scala/li/cil/oc/common/item/APU.scala index b111a240c..57835d687 100644 --- a/src/main/scala/li/cil/oc/common/item/APU.scala +++ b/src/main/scala/li/cil/oc/common/item/APU.scala @@ -1,12 +1,19 @@ package li.cil.oc.common.item import li.cil.oc.common.Tier +import li.cil.oc.util.Rarity +import net.minecraft.item.EnumRarity +import net.minecraft.item.ItemStack import scala.language.existentials class APU(val parent: Delegator, val tier: Int) extends traits.Delegate with traits.ItemTier with traits.CPULike with traits.GPULike { override val unlocalizedName = super[Delegate].unlocalizedName + tier + override def rarity(stack: ItemStack): EnumRarity = + if (tier == Tier.Three) Rarity.byTier(Tier.Four) + else super.rarity(stack) + override def cpuTier = math.min(Tier.Three, tier + 1) override def gpuTier = tier diff --git a/src/main/scala/li/cil/oc/server/machine/Machine.scala b/src/main/scala/li/cil/oc/server/machine/Machine.scala index 2a2ecaec9..cb22d09a6 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -26,6 +26,7 @@ import li.cil.oc.api.prefab import li.cil.oc.common.EventHandler import li.cil.oc.common.SaveHandler import li.cil.oc.common.Slot +import li.cil.oc.common.Tier import li.cil.oc.common.tileentity import li.cil.oc.server.PacketSender import li.cil.oc.server.driver.Registry @@ -112,7 +113,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach })) maxCallBudget = components.foldLeft(0.0)((sum, item) => sum + (Option(item) match { case Some(stack) => Option(Driver.driverFor(stack, host.getClass)) match { - case Some(driver: Processor) if driver.slot(stack) == Slot.CPU => Settings.get.callBudgets(driver.tier(stack)) + case Some(driver: Processor) if driver.slot(stack) == Slot.CPU => Settings.get.callBudgets(driver.tier(stack) max Tier.One min Tier.Three) case _ => 0 } case _ => 0 From 04b611eb8fc6c0b7806892824673ef0aa6e221b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 24 May 2015 11:50:19 +0200 Subject: [PATCH 05/14] Fixed keyboards not dropping if the block they're attached to is being destroyed and immibis' microblocks is present. --- src/main/scala/li/cil/oc/common/block/Keyboard.scala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/block/Keyboard.scala b/src/main/scala/li/cil/oc/common/block/Keyboard.scala index bbef0dc2d..67877a9f6 100644 --- a/src/main/scala/li/cil/oc/common/block/Keyboard.scala +++ b/src/main/scala/li/cil/oc/common/block/Keyboard.scala @@ -2,10 +2,12 @@ package li.cil.oc.common.block import java.util.Random +import li.cil.oc.Constants import li.cil.oc.api import li.cil.oc.common.tileentity import li.cil.oc.util.BlockPosition import li.cil.oc.util.ExtendedWorld._ +import li.cil.oc.util.InventoryUtils import net.minecraft.block.Block import net.minecraft.block.material.Material import net.minecraft.entity.player.EntityPlayer @@ -88,10 +90,12 @@ class Keyboard extends SimpleBlock(Material.rock) with traits.SpecialBlock { override def onNeighborBlockChange(world: World, x: Int, y: Int, z: Int, block: Block) = world.getTileEntity(x, y, z) match { - case keyboard: tileentity.Keyboard if canPlaceBlockOnSide(world, x, y, z, keyboard.facing.getOpposite) => // Can stay. + case keyboard: tileentity.Keyboard => + if (!canPlaceBlockOnSide(world, x, y, z, keyboard.facing.getOpposite)) { + world.setBlockToAir(x, y, z) + InventoryUtils.spawnStackInWorld(BlockPosition(x, y, z, world), api.Items.get(Constants.BlockName.Keyboard).createItemStack(1)) + } case _ => - dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0) - world.setBlockToAir(x, y, z) } override def onBlockActivated(world: World, x: Int, y: Int, z: Int, player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float) = From c82256774502b2a349329394f5c2b2d0468f6278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 24 May 2015 11:59:58 +0200 Subject: [PATCH 06/14] Recognize APU as graphics card when generating warnings in assembler for suggested components. --- .../scala/li/cil/oc/common/template/TabletTemplate.scala | 9 ++++++++- src/main/scala/li/cil/oc/common/template/Template.scala | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala b/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala index 80bc37272..775a0d6d8 100644 --- a/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala @@ -17,7 +17,14 @@ object TabletTemplate extends Template { override protected val suggestedComponents = Array( "BIOS" -> hasComponent(Constants.ItemName.EEPROM) _, "Keyboard" -> hasComponent(Constants.BlockName.Keyboard) _, - "GraphicsCard" -> ((inventory: IInventory) => Array(Constants.ItemName.GraphicsCardTier1, Constants.ItemName.GraphicsCardTier2, Constants.ItemName.GraphicsCardTier3).exists(name => hasComponent(name)(inventory))), + "GraphicsCard" -> ((inventory: IInventory) => Array( + Constants.ItemName.APUCreative, + Constants.ItemName.APUTier1, + Constants.ItemName.APUTier2, + Constants.ItemName.GraphicsCardTier1, + Constants.ItemName.GraphicsCardTier2, + Constants.ItemName.GraphicsCardTier3). + exists(name => hasComponent(name)(inventory))), "OS" -> hasFileSystem _) override protected def hostClass = classOf[internal.Tablet] diff --git a/src/main/scala/li/cil/oc/common/template/Template.scala b/src/main/scala/li/cil/oc/common/template/Template.scala index 8a0b5b7f3..2e1e59a53 100644 --- a/src/main/scala/li/cil/oc/common/template/Template.scala +++ b/src/main/scala/li/cil/oc/common/template/Template.scala @@ -23,7 +23,14 @@ abstract class Template { "BIOS" -> hasComponent(Constants.ItemName.EEPROM) _, "Screen" -> hasComponent(Constants.BlockName.ScreenTier1) _, "Keyboard" -> hasComponent(Constants.BlockName.Keyboard) _, - "GraphicsCard" -> ((inventory: IInventory) => Array(Constants.ItemName.GraphicsCardTier1, Constants.ItemName.GraphicsCardTier2, Constants.ItemName.GraphicsCardTier3).exists(name => hasComponent(name)(inventory))), + "GraphicsCard" -> ((inventory: IInventory) => Array( + Constants.ItemName.APUCreative, + Constants.ItemName.APUTier1, + Constants.ItemName.APUTier2, + Constants.ItemName.GraphicsCardTier1, + Constants.ItemName.GraphicsCardTier2, + Constants.ItemName.GraphicsCardTier3). + exists(name => hasComponent(name)(inventory))), "Inventory" -> hasInventory _, "OS" -> hasFileSystem _) From 4db51079135920f93321b34a4a8b662ab8b9a2d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 24 May 2015 12:03:20 +0200 Subject: [PATCH 07/14] Allow robots to power up other robots (and computers) by sneak-rightclicking them. Doesn't work for powering up creative robots/cases, but meh. --- .../scala/li/cil/oc/common/tileentity/traits/Computer.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala index 58e8bdf4e..ec3a0538f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala @@ -16,6 +16,7 @@ import li.cil.oc.common.tileentity.traits import li.cil.oc.integration.opencomputers.DriverRedstoneCard import li.cil.oc.integration.stargatetech2.DriverAbstractBusCard import li.cil.oc.integration.util.Waila +import li.cil.oc.server.agent import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.util.ExtendedNBT._ import net.minecraft.entity.player.EntityPlayer @@ -194,7 +195,10 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B } override def isUseableByPlayer(player: EntityPlayer) = - super.isUseableByPlayer(player) && canInteract(player.getCommandSenderName) + super.isUseableByPlayer(player) && (player match { + case fakePlayer: agent.Player => canInteract(fakePlayer.agent.ownerName()) + case _ => canInteract(player.getCommandSenderName) + }) override protected def onRotationChanged() { super.onRotationChanged() From 2b965c0685148506bed65b65a5cd5df925e94220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 24 May 2015 12:15:58 +0200 Subject: [PATCH 08/14] Fixes damage bar display on hover boots being inverted. Closes #1170. --- src/main/scala/li/cil/oc/common/item/HoverBoots.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/item/HoverBoots.scala b/src/main/scala/li/cil/oc/common/item/HoverBoots.scala index 1ee68e43b..87b91a6e5 100644 --- a/src/main/scala/li/cil/oc/common/item/HoverBoots.scala +++ b/src/main/scala/li/cil/oc/common/item/HoverBoots.scala @@ -63,7 +63,7 @@ class HoverBoots extends ItemArmor(ItemArmor.ArmorMaterial.DIAMOND, 0, 3) with t override def getDurabilityForDisplay(stack: ItemStack): Double = { val data = new HoverBootsData(stack) - data.charge / Settings.get.bufferHoverBoots + 1 - data.charge / Settings.get.bufferHoverBoots } override def getMaxDamage(stack: ItemStack): Int = Settings.get.bufferHoverBoots.toInt From 610c5b8fdbd6501d9f19da199a53eb2a76a094b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 24 May 2015 13:57:00 +0200 Subject: [PATCH 09/14] Should fix potential NPE in cable rendering. --- .../scala/li/cil/oc/common/block/Cable.scala | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/block/Cable.scala b/src/main/scala/li/cil/oc/common/block/Cable.scala index 637402e73..c52b5ddd8 100644 --- a/src/main/scala/li/cil/oc/common/block/Cable.scala +++ b/src/main/scala/li/cil/oc/common/block/Cable.scala @@ -121,13 +121,15 @@ object Cable { case _ => !world.isAirBlock(tpos) }) { val neighborTileEntity = world.getTileEntity(tpos) - val neighborHasNode = hasNetworkNode(neighborTileEntity, side.getOpposite) - val canConnectColor = canConnectBasedOnColor(tileEntity, neighborTileEntity) - val canConnectFMP = !Mods.ForgeMultipart.isAvailable || - (canConnectFromSideFMP(tileEntity, side) && canConnectFromSideFMP(neighborTileEntity, side.getOpposite)) - val canConnectIM = canConnectFromSideIM(tileEntity, side) && canConnectFromSideIM(neighborTileEntity, side.getOpposite) - if (neighborHasNode && canConnectColor && canConnectFMP && canConnectIM) { - result |= (1 << side.getIndex) + if (neighborTileEntity != null && neighborTileEntity.getWorld != null) { + val neighborHasNode = hasNetworkNode(neighborTileEntity, side.getOpposite) + val canConnectColor = canConnectBasedOnColor(tileEntity, neighborTileEntity) + val canConnectFMP = !Mods.ForgeMultipart.isAvailable || + (canConnectFromSideFMP(tileEntity, side) && canConnectFromSideFMP(neighborTileEntity, side.getOpposite)) + val canConnectIM = canConnectFromSideIM(tileEntity, side) && canConnectFromSideIM(neighborTileEntity, side.getOpposite) + if (neighborHasNode && canConnectColor && canConnectFMP && canConnectIM) { + result |= (1 << side.getIndex) + } } } } From 891638d88a14451c598d6b20aaa6112546f1623c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 26 May 2015 13:21:51 +0200 Subject: [PATCH 10/14] Fixes potential client crash when placing server at y-level 0. Closes #1175. --- src/main/scala/li/cil/oc/common/block/ServerRack.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/block/ServerRack.scala b/src/main/scala/li/cil/oc/common/block/ServerRack.scala index 65a7357d7..aa3c31675 100644 --- a/src/main/scala/li/cil/oc/common/block/ServerRack.scala +++ b/src/main/scala/li/cil/oc/common/block/ServerRack.scala @@ -28,7 +28,7 @@ class ServerRack extends RedstoneAware with traits.SpecialBlock with traits.Powe @SideOnly(Side.CLIENT) override def getMixedBrightnessForBlock(world: IBlockAccess, x: Int, y: Int, z: Int) = { - world.getTileEntity(x, y, z) match { + if (y >= 0 && y < world.getHeight) world.getTileEntity(x, y, z) match { case rack: tileentity.ServerRack => def brightness(x: Int, y: Int, z: Int) = world.getLightBrightnessForSkyBlocks(x, y, z, getLightValue(world, x, y, z)) val value = brightness(x + rack.facing.offsetX, y + rack.facing.offsetY, z + rack.facing.offsetZ) @@ -37,6 +37,7 @@ class ServerRack extends RedstoneAware with traits.SpecialBlock with traits.Powe ((skyBrightness * 3 / 4) << 20) | ((blockBrightness * 3 / 4) << 4) case _ => super.getMixedBrightnessForBlock(world, x, y, z) } + else super.getMixedBrightnessForBlock(world, x, y, z) } override def isBlockSolid(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection) = side != ForgeDirection.SOUTH From 9c23524c2462d38f4fcadce0b9485310491890e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 26 May 2015 13:38:41 +0200 Subject: [PATCH 11/14] Added missing HostAware interface to hover upgrade driver. Closes #1176. --- .../cil/oc/integration/opencomputers/DriverUpgradeHover.scala | 3 ++- src/main/scala/li/cil/oc/server/driver/Registry.scala | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverUpgradeHover.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverUpgradeHover.scala index 1ea62e678..1f80c0029 100644 --- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverUpgradeHover.scala +++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverUpgradeHover.scala @@ -3,13 +3,14 @@ package li.cil.oc.integration.opencomputers import li.cil.oc.Constants import li.cil.oc.api import li.cil.oc.api.driver.EnvironmentHost +import li.cil.oc.api.driver.item.HostAware import li.cil.oc.common.Slot import li.cil.oc.common.Tier import li.cil.oc.common.item import li.cil.oc.common.item.Delegator import net.minecraft.item.ItemStack -object DriverUpgradeHover extends Item { +object DriverUpgradeHover extends Item with HostAware { override def worksWith(stack: ItemStack) = isOneOf(stack, api.Items.get(Constants.ItemName.HoverUpgradeTier1), api.Items.get(Constants.ItemName.HoverUpgradeTier2)) diff --git a/src/main/scala/li/cil/oc/server/driver/Registry.scala b/src/main/scala/li/cil/oc/server/driver/Registry.scala index a2f58e0bd..2c19dd94f 100644 --- a/src/main/scala/li/cil/oc/server/driver/Registry.scala +++ b/src/main/scala/li/cil/oc/server/driver/Registry.scala @@ -77,7 +77,7 @@ private[oc] object Registry extends api.detail.DriverAPI { val hostAware = items.collect { case driver: HostAware if driver.worksWith(stack) => driver } - if (hostAware.size > 0) { + if (hostAware.nonEmpty) { hostAware.find(_.worksWith(stack, host)).orNull } else driverFor(stack) @@ -112,7 +112,7 @@ private[oc] object Registry extends api.detail.DriverAPI { memo.get(valueRef) } else valueRef match { - case null | Unit | None => null + case null | None => null case arg: java.lang.Boolean => arg case arg: java.lang.Byte => arg From 67556ad1921be9d68703ec2860902254224195b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 26 May 2015 13:41:43 +0200 Subject: [PATCH 12/14] Added missing flag to recognize Electrical Age as power provider (so power was disabled if that was the only power mod). Closes #1177. --- src/main/scala/li/cil/oc/integration/Mods.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index 0de8a9dbe..9e3c1bcdc 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -34,7 +34,7 @@ object Mods { val ComputerCraft = new SimpleMod(IDs.ComputerCraft) val CraftingCosts = new SimpleMod(IDs.CraftingCosts) val DeepStorageUnit = new ClassBasedMod(IDs.DeepStorageUnit, "powercrystals.minefactoryreloaded.api.IDeepStorageUnit")() - val ElectricalAge = new SimpleMod(IDs.ElectricalAge) + val ElectricalAge = new SimpleMod(IDs.ElectricalAge, providesPower = true) val EnderIO = new SimpleMod(IDs.EnderIO) val EnderStorage = new SimpleMod(IDs.EnderStorage) val Factorization = new SimpleMod(IDs.Factorization, providesPower = true) From 6cbd608fa4dacd8f9b9a525f72729fcef86c772c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 26 May 2015 14:13:14 +0200 Subject: [PATCH 13/14] Fixed APU textures, closes #1178. --- .../opencomputers/models/item/apuCreative.json | 6 ++++++ .../opencomputers/textures/items/apu2.png | Bin 887 -> 885 bytes .../items/{APU2.png => apuCreative.png} | Bin .../{APU2.png.mcmeta => apuCreative.png.mcmeta} | 0 4 files changed, 6 insertions(+) create mode 100644 src/main/resources/assets/opencomputers/models/item/apuCreative.json rename src/main/resources/assets/opencomputers/textures/items/{APU2.png => apuCreative.png} (100%) rename src/main/resources/assets/opencomputers/textures/items/{APU2.png.mcmeta => apuCreative.png.mcmeta} (100%) diff --git a/src/main/resources/assets/opencomputers/models/item/apuCreative.json b/src/main/resources/assets/opencomputers/models/item/apuCreative.json new file mode 100644 index 000000000..b070b2c2d --- /dev/null +++ b/src/main/resources/assets/opencomputers/models/item/apuCreative.json @@ -0,0 +1,6 @@ +{ + "parent": "opencomputers:item/flat", + "textures": { + "layer0": "opencomputers:items/apuCreative" + } +} diff --git a/src/main/resources/assets/opencomputers/textures/items/apu2.png b/src/main/resources/assets/opencomputers/textures/items/apu2.png index 4a09b42d6c7395c83c08ff6833dd1afcfea89eab..bc7a83844e15425bd5d4395e60a7b6ef2a9bc454 100644 GIT binary patch delta 735 zcmV<50wDeO2K5GzPJap%6#xJL#>U1MF*71bOy}q4&eh@9)zyxkyMTXxv%b-xuEwyh zucM%#kB*MG!qj_?ud~b1n7P5r-r}dj%EH##%G=+)(%87q)WzA}gN~wdhN`T`&CuZE z!OGc5TY1&w=z)u#S7m=%YK4xNszz3FW^;;ZcaV03nT(dFbYOs$;^3?9?a%4x!SV3b z=H$2S>&cO-+F^#uXpGF3uH0{t&Y-s7f}qrfqSkhn(3`T}jHcLpo6^eN;eVafi>BCx zqSo8!>(Jojm9E@*n9|4E-;k=>*5&B`|Njyg4Th5~0a$9@GV@o|8>S3Tqk|f;2pdLn#MgclcE2q9z2mW?9v1bm(W58|?qO38yT_xD;PLealnR3-Gyy#- z?or6_cvE|{ivbS{J*ukW9v1bmZTnb{)#|VBe(QLwsE1EIT=eifk9)Y(!|n0#BzXDr z1WI#+!55l<9ufEOWO#Y1J=(>9hmRgn6mbuqdbqB8tjA{aGt~8t$A)@@)I&#)G)=jO zPCfJNHsfVuX|MmDMzyOSUkpIGC R>MH;M002ovPDHLkV1fkSloJ2| delta 737 zcmV<70v`SK2KNS#PJa>v8UO$Q#>U1i2|+>)Vdv-P>cryK*wlZ3e$jWn;H1>pj>w^; zp0BX3;;Pn;kB!M;v(lvC;lJ&{gVoEG+uEfgWVs$`y;M2XCs-RaBm zxPYvjRE@?~u81&pw0^0vbEBhGljXJCrDKiaq zzy08!{m}hh+WkP({WjD5N!I;l+W&##{%zg(le) z#_s=e;Qnjg{$1PW&GG(a+~B_K{#Duk|Nl;GpfHmy0a$*!T6o>Ka z0Yr@?Vc!HQP&PH1eQnb=Y3uj@M1|vA!kjQ=JTIU5&s_MiJvp|&xUd(xE-=RSqtU1d zq9_XW)rDbLi0tErfVCC6Y3O+b&Fd-yV3-_{=OV!*>jk37%0 zhfO^U!#LJsy>=~C?Rc!IhebV9^hnc`d#Kby?eTv|CAfOK2PMK_2~9wchgLXRklxQ9hOR8>9JW3&0;n%_Gf8|vXw4--8+&*L5@^)P!pJPB@oKY)^9aD^tI zN5(xo8EzhGk9INO;i5;DW!%H19;Rs?>#^Owm(HJ#$Ci4O)WboKBuTi3Lp_`xk3@o} zUoUl_6c|dO3FuL9k3@#2m)fIU40x32Q4|IDD5;0zILCUdR~C5Jpa4{CB_g4O+b&BdxSDP-_;)NV!$Ink2sFGM?gI^P5ZCMKLG{+DJYQt TaWhvE00000NkvXXu0mjfn8}JE diff --git a/src/main/resources/assets/opencomputers/textures/items/APU2.png b/src/main/resources/assets/opencomputers/textures/items/apuCreative.png similarity index 100% rename from src/main/resources/assets/opencomputers/textures/items/APU2.png rename to src/main/resources/assets/opencomputers/textures/items/apuCreative.png diff --git a/src/main/resources/assets/opencomputers/textures/items/APU2.png.mcmeta b/src/main/resources/assets/opencomputers/textures/items/apuCreative.png.mcmeta similarity index 100% rename from src/main/resources/assets/opencomputers/textures/items/APU2.png.mcmeta rename to src/main/resources/assets/opencomputers/textures/items/apuCreative.png.mcmeta From 78c628aed0e1020c2db2d82bd81dba00a685c6b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 26 May 2015 14:55:47 +0200 Subject: [PATCH 14/14] Bump version. --- build.properties | 2 +- src/main/scala/li/cil/oc/client/renderer/block/Print.scala | 2 +- src/main/scala/li/cil/oc/server/machine/Machine.scala | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.properties b/build.properties index bef439f60..ca888122c 100644 --- a/build.properties +++ b/build.properties @@ -1,7 +1,7 @@ minecraft.version=1.7.10 forge.version=10.13.3.1395-1710ls -oc.version=1.5.11 +oc.version=1.5.12 oc.subversion=dev ae2.version=rv2-beta-26 diff --git a/src/main/scala/li/cil/oc/client/renderer/block/Print.scala b/src/main/scala/li/cil/oc/client/renderer/block/Print.scala index 979c7bcfb..e88af409a 100644 --- a/src/main/scala/li/cil/oc/client/renderer/block/Print.scala +++ b/src/main/scala/li/cil/oc/client/renderer/block/Print.scala @@ -17,7 +17,7 @@ object Print { def render(data: PrintData, state: Boolean, facing: ForgeDirection, x: Int, y: Int, z: Int, block: Block, renderer: RenderBlocks): Unit = { val shapes = if (state) data.stateOn else data.stateOff - if (shapes.size == 0) { + if (shapes.isEmpty) { printBlock.textureOverride = Option(resolveTexture("missingno")) renderer.setRenderBounds(0, 0, 0, 1, 1, 1) renderer.renderStandardBlock(block, x, y, z) diff --git a/src/main/scala/li/cil/oc/server/machine/Machine.scala b/src/main/scala/li/cil/oc/server/machine/Machine.scala index cb22d09a6..c045c38b4 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -833,7 +833,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach } private def close() = state.synchronized( - if (state.size == 0 || state.top != Machine.State.Stopped) { + if (state.isEmpty || state.top != Machine.State.Stopped) { this.synchronized { state.clear() state.push(Machine.State.Stopped)