diff --git a/src/main/resources/assets/opencomputers/lang/de_DE.lang b/src/main/resources/assets/opencomputers/lang/de_DE.lang index 66d6db81a..a2e680357 100644 --- a/src/main/resources/assets/opencomputers/lang/de_DE.lang +++ b/src/main/resources/assets/opencomputers/lang/de_DE.lang @@ -125,6 +125,7 @@ oc:gui.Robot.TurnOn=Einschalten oc:gui.RobotAssembler.CollectRobot=Roboter entnehmen oc:gui.RobotAssembler.Complexity=Komplexität: %s/%s oc:gui.RobotAssembler.InsertCase=Computergehäuse einlegen +oc:gui.RobotAssembler.Progress=Fortschritt: %s (%s) oc:gui.RobotAssembler.Run=Zusammenbauen oc:gui.ServerRack.None=Keine oc:gui.ServerRack.Back=Hinten diff --git a/src/main/resources/assets/opencomputers/lang/en_US.lang b/src/main/resources/assets/opencomputers/lang/en_US.lang index da16a793a..054f0e5d1 100644 --- a/src/main/resources/assets/opencomputers/lang/en_US.lang +++ b/src/main/resources/assets/opencomputers/lang/en_US.lang @@ -125,6 +125,7 @@ oc:gui.Robot.TurnOn=Turn on oc:gui.RobotAssembler.CollectRobot=Collect robot oc:gui.RobotAssembler.Complexity=Complexity: %s/%s oc:gui.RobotAssembler.InsertCase=Insert a Computer Case +oc:gui.RobotAssembler.Progress=Progress: %s (%s) oc:gui.RobotAssembler.Run=Assemble oc:gui.ServerRack.None=None oc:gui.ServerRack.Back=Back diff --git a/src/main/resources/assets/opencomputers/lua/component/robot/lib/robot.lua b/src/main/resources/assets/opencomputers/lua/component/robot/lib/robot.lua index d214a950d..97825c793 100644 --- a/src/main/resources/assets/opencomputers/lua/component/robot/lib/robot.lua +++ b/src/main/resources/assets/opencomputers/lua/component/robot/lib/robot.lua @@ -6,14 +6,18 @@ local robot = {} ------------------------------------------------------------------------------- -- General -function robot.level() - return component.robot.level() -end - function robot.name() return component.robot.name() end +function robot.level() + if component.isAvailable("experience") then + return component.experience.level() + else + return 0 + end +end + ------------------------------------------------------------------------------- -- World @@ -32,6 +36,11 @@ end ------------------------------------------------------------------------------- -- Inventory +function robot.inventorySize() + return component.robot.inventorySize() +end + + function robot.select(slot) return component.robot.select(slot) end diff --git a/src/main/scala/li/cil/oc/OpenComputers.scala b/src/main/scala/li/cil/oc/OpenComputers.scala index 282f77ccb..cfe271fe2 100644 --- a/src/main/scala/li/cil/oc/OpenComputers.scala +++ b/src/main/scala/li/cil/oc/OpenComputers.scala @@ -11,14 +11,18 @@ import li.cil.oc.client.{PacketHandler => ClientPacketHandler} import li.cil.oc.common.Proxy import li.cil.oc.server.{PacketHandler => ServerPacketHandler, CommandHandler} -@Mod(modid = "OpenComputers", modLanguage = "scala", - /* certificateFingerprint = "@FINGERPRINT@", */ useMetadata = true) +@Mod(modid = OpenComputers.ModID, modLanguage = "scala", + /* certificateFingerprint = OpenComputers.Fingerprint, */ useMetadata = true) @NetworkMod(clientSideRequired = true, serverSideRequired = false, clientPacketHandlerSpec = new SidedPacketHandler( channels = Array("OpenComp"), packetHandler = classOf[ClientPacketHandler]), serverPacketHandlerSpec = new SidedPacketHandler( channels = Array("OpenComp"), packetHandler = classOf[ServerPacketHandler])) object OpenComputers { + final val ModID = "OpenComputers" + + final val Fingerprint = "@FINGERPRINT@" + val log = Logger.getLogger("OpenComputers") @SidedProxy(clientSide = "li.cil.oc.client.Proxy", serverSide = "li.cil.oc.server.Proxy") @@ -26,6 +30,8 @@ object OpenComputers { var tampered: Option[FMLFingerprintViolationEvent] = None + scala.collection.mutable.Map.empty[String, Int].keySet + // @EventHandler // def invalidFingerprint(e: FMLFingerprintViolationEvent) = tampered = Some(e) diff --git a/src/main/scala/li/cil/oc/client/gui/RobotAssembler.scala b/src/main/scala/li/cil/oc/client/gui/RobotAssembler.scala index aba0f7bcd..b7a32ce98 100644 --- a/src/main/scala/li/cil/oc/client/gui/RobotAssembler.scala +++ b/src/main/scala/li/cil/oc/client/gui/RobotAssembler.scala @@ -64,15 +64,27 @@ class RobotAssembler(playerInventory: InventoryPlayer, val assembler: tileentity StatCollector.translateToLocalFormatted(Settings.namespace + "gui.RobotAssembler.Complexity", Int.box(assembler.complexity), Int.box(assembler.maxComplexity)), 30, 94, if (assembler.complexity <= assembler.maxComplexity) 0x404040 else 0x804040) } + if (runButton.func_82252_a) { + val tooltip = new java.util.ArrayList[String] + tooltip.add(StatCollector.translateToLocal(Settings.namespace + "gui.RobotAssembler.Run")) + drawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRenderer) + } } - if (runButton.func_82252_a && !assemblerContainer.isAssembling) { + else if (isPointInRegion(progressX, progressY, progressWidth, progressHeight, mouseX, mouseY)) { val tooltip = new java.util.ArrayList[String] - tooltip.add(StatCollector.translateToLocal(Settings.namespace + "gui.RobotAssembler.Run")) - drawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRenderer) + val timeRemaining = formatTime(assemblerContainer.assemblyRemainingTime) + tooltip.add(StatCollector.translateToLocalFormatted(Settings.namespace + "gui.RobotAssembler.Progress", assemblerContainer.assemblyProgress.toString, timeRemaining)) + copiedDrawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRenderer) } GL11.glPopAttrib() } + private def formatTime(seconds: Int) = { + // Assembly times should not / rarely exceed one hour, so this is good enough. + if (seconds < 60) "0:%02d".format(seconds) + else "%d:%02d".format(seconds / 60, seconds % 60) + } + override def drawGuiContainerBackgroundLayer(dt: Float, mouseX: Int, mouseY: Int) { GL11.glColor3f(1, 1, 1) // Required under Linux. super.drawGuiContainerBackgroundLayer(dt, mouseX, mouseY) diff --git a/src/main/scala/li/cil/oc/common/container/RobotAssembler.scala b/src/main/scala/li/cil/oc/common/container/RobotAssembler.scala index 0051ff856..fa24d9618 100644 --- a/src/main/scala/li/cil/oc/common/container/RobotAssembler.scala +++ b/src/main/scala/li/cil/oc/common/container/RobotAssembler.scala @@ -6,11 +6,11 @@ import li.cil.oc.common.{InventorySlots, tileentity} import li.cil.oc.util.ItemUtils import net.minecraft.entity.player.InventoryPlayer import net.minecraft.inventory.Slot -import li.cil.oc.api +import li.cil.oc.{Settings, api} import li.cil.oc.common.InventorySlots.Tier import li.cil.oc.client.gui.Icons -class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.RobotAssembler) extends Player(playerInventory, assembler) { +class RobotAssembler(playerInventory: InventoryPlayer, val assembler: tileentity.RobotAssembler) extends Player(playerInventory, assembler) { // Computer case. { val index = inventorySlots.size @@ -57,6 +57,7 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob var isAssembling = false var assemblyProgress = 0 + var assemblyRemainingTime = 0 @SideOnly(Side.CLIENT) override def updateProgressBar(id: Int, value: Int) { @@ -68,6 +69,10 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob if (id == 1) { assemblyProgress = value } + + if (id == 2) { + assemblyRemainingTime = value + } } override def detectAndSendChanges() { @@ -77,9 +82,12 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob isAssembling = assembler.isAssembling sendProgressBarUpdate(0, if (isAssembling) 1 else 0) } - if (assemblyProgress != assembler.progress) { + val timeRemaining = (assembler.requiredEnergy / Settings.get.assemblerTickAmount * Settings.get.tickFrequency / 20).toInt + if (assemblyProgress != assembler.progress || assemblyRemainingTime != timeRemaining) { assemblyProgress = assembler.progress + assemblyRemainingTime = timeRemaining sendProgressBarUpdate(1, assemblyProgress) + sendProgressBarUpdate(2, timeRemaining) } } } diff --git a/src/main/scala/li/cil/oc/server/component/robot/Robot.scala b/src/main/scala/li/cil/oc/server/component/robot/Robot.scala index b1c1d29d9..182098776 100644 --- a/src/main/scala/li/cil/oc/server/component/robot/Robot.scala +++ b/src/main/scala/li/cil/oc/server/component/robot/Robot.scala @@ -57,7 +57,7 @@ class Robot(val robot: tileentity.Robot) extends ManagedComponent { // ----------------------------------------------------------------------- // @Callback - def getInventorySize(context: Context, args: Arguments): Array[AnyRef] = result(robot.inventorySize) + def inventorySize(context: Context, args: Arguments): Array[AnyRef] = result(robot.inventorySize) @Callback def select(context: Context, args: Arguments): Array[AnyRef] = {