mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-16 10:51:55 -04:00
added power buttons to server rack gui and sending and handling packet to toggle power
This commit is contained in:
parent
5de05dfe90
commit
d47013df42
@ -78,8 +78,8 @@ oc:gui.Robot.TurnOn=Einschalten
|
|||||||
oc:container.Adapter=Adapter
|
oc:container.Adapter=Adapter
|
||||||
oc:container.Case=Computer
|
oc:container.Case=Computer
|
||||||
oc:container.DiskDrive=Diskettenlaufwerk
|
oc:container.DiskDrive=Diskettenlaufwerk
|
||||||
|
oc:container.Rack=Serverschrank
|
||||||
oc:container.Server=Server
|
oc:container.Server=Server
|
||||||
oc:container.ServerRack=Serverschrank
|
|
||||||
|
|
||||||
# Item / Block Tooltips
|
# Item / Block Tooltips
|
||||||
oc:tooltip.Acid=Eine hochgiftige Möchtegernflüssigkeit, wird üblicherweise nur von gewissen Piraten konsumiert. Dank ihrer korrosiven Eigenschaften ideal zum Bedrucken von Leiterplatten geeignet.
|
oc:tooltip.Acid=Eine hochgiftige Möchtegernflüssigkeit, wird üblicherweise nur von gewissen Piraten konsumiert. Dank ihrer korrosiven Eigenschaften ideal zum Bedrucken von Leiterplatten geeignet.
|
||||||
|
@ -78,8 +78,8 @@ oc:gui.Robot.TurnOn=Turn on
|
|||||||
oc:container.Adapter=Adapter
|
oc:container.Adapter=Adapter
|
||||||
oc:container.Case=Computer
|
oc:container.Case=Computer
|
||||||
oc:container.DiskDrive=Disk Drive
|
oc:container.DiskDrive=Disk Drive
|
||||||
|
oc:container.Rack=Server Rack
|
||||||
oc:container.Server=Server
|
oc:container.Server=Server
|
||||||
oc:container.ServerRack=Server Rack
|
|
||||||
|
|
||||||
# Item / Block Tooltips
|
# Item / Block Tooltips
|
||||||
oc:tooltip.Acid=A highly toxic pseudo-liquid, usually only consumed by certain pirates. Thanks to its corrosive nature it is perfectly suited for etching circuit boards.
|
oc:tooltip.Acid=A highly toxic pseudo-liquid, usually only consumed by certain pirates. Thanks to its corrosive nature it is perfectly suited for etching circuit boards.
|
||||||
|
@ -69,4 +69,14 @@ object PacketSender {
|
|||||||
|
|
||||||
pb.sendToServer()
|
pb.sendToServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def sendServerPower(t: Rack, number: Int, power: Boolean) {
|
||||||
|
val pb = new PacketBuilder(PacketType.ComputerPower)
|
||||||
|
|
||||||
|
pb.writeTileEntity(t)
|
||||||
|
pb.writeInt(number)
|
||||||
|
pb.writeBoolean(power)
|
||||||
|
|
||||||
|
pb.sendToServer()
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,15 +1,55 @@
|
|||||||
package li.cil.oc.client.gui
|
package li.cil.oc.client.gui
|
||||||
|
|
||||||
|
import java.util
|
||||||
|
import li.cil.oc.Settings
|
||||||
|
import li.cil.oc.client.{PacketSender => ClientPacketSender}
|
||||||
import li.cil.oc.common.container
|
import li.cil.oc.common.container
|
||||||
import li.cil.oc.common.tileentity
|
import li.cil.oc.common.tileentity
|
||||||
|
import net.minecraft.client.gui.GuiButton
|
||||||
import net.minecraft.entity.player.InventoryPlayer
|
import net.minecraft.entity.player.InventoryPlayer
|
||||||
import net.minecraft.util.StatCollector
|
import net.minecraft.util.{ResourceLocation, StatCollector}
|
||||||
|
import org.lwjgl.opengl.GL11
|
||||||
|
|
||||||
class Rack(playerInventory: InventoryPlayer, val rack: tileentity.Rack) extends DynamicGuiContainer(new container.Rack(playerInventory, rack)) {
|
class Rack(playerInventory: InventoryPlayer, val rack: tileentity.Rack) extends DynamicGuiContainer(new container.Rack(playerInventory, rack)) {
|
||||||
|
protected val powerIcon = new ResourceLocation(Settings.resourceDomain, "textures/gui/power.png")
|
||||||
|
|
||||||
|
protected var powerButtons = new Array[ImageButton](4)
|
||||||
|
|
||||||
|
def add[T](list: util.List[T], value: Any) = list.add(value.asInstanceOf[T])
|
||||||
|
|
||||||
|
protected override def actionPerformed(button: GuiButton) {
|
||||||
|
if (button.id >= 0 && button.id <= 3 && rack.isServerInstalled(button.id)) {
|
||||||
|
ClientPacketSender.sendServerPower(rack, button.id, !rack.isRunning(button.id))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override def drawScreen(mouseX: Int, mouseY: Int, dt: Float) {
|
||||||
|
for (i <- 0 to 3) {
|
||||||
|
powerButtons(i).toggled = rack.isRunning(i)
|
||||||
|
}
|
||||||
|
super.drawScreen(mouseX, mouseY, dt)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def initGui() {
|
||||||
|
super.initGui()
|
||||||
|
for (i <- 0 to 3) {
|
||||||
|
powerButtons(i) = new ImageButton(0, guiLeft + 94, guiTop + 7 + i * 18, 18, 18, powerIcon)
|
||||||
|
add(buttonList, powerButtons(i))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
||||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY)
|
super.drawGuiContainerForegroundLayer(mouseX, mouseY)
|
||||||
|
GL11.glPushAttrib(0xFFFFFFFF) // Prevents NEI render glitch.
|
||||||
fontRenderer.drawString(
|
fontRenderer.drawString(
|
||||||
StatCollector.translateToLocal(rack.getInvName),
|
StatCollector.translateToLocal(rack.getInvName),
|
||||||
8, 6, 0x404040)
|
8, 6, 0x404040)
|
||||||
|
for (i <- 0 to 3 if powerButtons(i).func_82252_a) {
|
||||||
|
val tooltip = new java.util.ArrayList[String]
|
||||||
|
val which = if (rack.isRunning(i)) "gui.Robot.TurnOff" else "gui.Robot.TurnOn"
|
||||||
|
tooltip.add(StatCollector.translateToLocal(Settings.namespace + which))
|
||||||
|
drawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRenderer)
|
||||||
|
}
|
||||||
|
GL11.glPopAttrib()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,9 @@ import li.cil.oc.common.tileentity
|
|||||||
import net.minecraft.entity.player.InventoryPlayer
|
import net.minecraft.entity.player.InventoryPlayer
|
||||||
|
|
||||||
class Rack(playerInventory: InventoryPlayer, rack: tileentity.Rack) extends Player(playerInventory, rack) {
|
class Rack(playerInventory: InventoryPlayer, rack: tileentity.Rack) extends Player(playerInventory, rack) {
|
||||||
addSlotToContainer(80, 35)
|
addSlotToContainer(116, 8)
|
||||||
addSlotToContainer(100, 35)
|
addSlotToContainer(116, 26)
|
||||||
addSlotToContainer(120, 35)
|
addSlotToContainer(116, 44)
|
||||||
addSlotToContainer(140, 35)
|
addSlotToContainer(116, 62)
|
||||||
addPlayerInventorySlots(8, 84)
|
addPlayerInventorySlots(8, 84)
|
||||||
}
|
}
|
||||||
|
@ -17,4 +17,11 @@ class Rack extends Environment with Inventory {
|
|||||||
def getInventoryStackLimit = 1
|
def getInventoryStackLimit = 1
|
||||||
|
|
||||||
def isItemValidForSlot(i: Int, stack: ItemStack) = Items.server.createItemStack().isItemEqual(stack)
|
def isItemValidForSlot(i: Int, stack: ItemStack) = Items.server.createItemStack().isItemEqual(stack)
|
||||||
|
|
||||||
|
def isRunning(number: Int) = servers(number) match {
|
||||||
|
case Some(server) => server.isRunning
|
||||||
|
case _ => false
|
||||||
|
}
|
||||||
|
|
||||||
|
def isServerInstalled(number: Int) = servers(number).isDefined
|
||||||
}
|
}
|
||||||
|
@ -24,27 +24,36 @@ class PacketHandler extends CommonPacketHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def onComputerPower(p: PacketParser) =
|
def onComputerPower(p: PacketParser) =
|
||||||
p.readTileEntity[Computer]() match {
|
p.readTileEntity[TileEntity]() match {
|
||||||
case Some(t) => p.player match {
|
case Some(t: Computer) => p.player match {
|
||||||
case player: EntityPlayer if t.computer.canInteract(player.getCommandSenderName) =>
|
case player: EntityPlayer => trySetComputerPower(t.computer, p.readBoolean(), player)
|
||||||
if (p.readBoolean()) {
|
|
||||||
if (!t.computer.isPaused) {
|
|
||||||
t.computer.start()
|
|
||||||
t.computer.lastError match {
|
|
||||||
case Some(message) => p.player match {
|
|
||||||
case player: EntityPlayer => player.addChatMessage(message)
|
|
||||||
case _ =>
|
|
||||||
}
|
|
||||||
case _ =>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else t.computer.stop()
|
|
||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
|
case Some(r: Rack) => r.servers(p.readInt()) match {
|
||||||
|
case Some(server) => p.player match {
|
||||||
|
case player: EntityPlayer => trySetComputerPower(server, p.readBoolean(), player)
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
case _ => // Invalid packet.
|
||||||
|
}
|
||||||
case _ => // Invalid packet.
|
case _ => // Invalid packet.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def trySetComputerPower(computer: component.Computer, value: Boolean, player: EntityPlayer) {
|
||||||
|
if (computer.canInteract(player.getCommandSenderName)) {
|
||||||
|
if (value) {
|
||||||
|
if (!computer.isPaused) {
|
||||||
|
computer.start()
|
||||||
|
computer.lastError match {
|
||||||
|
case Some(message) => player.addChatMessage(message)
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else computer.stop()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def onKeyDown(p: PacketParser) =
|
def onKeyDown(p: PacketParser) =
|
||||||
p.readTileEntity[Buffer]() match {
|
p.readTileEntity[Buffer]() match {
|
||||||
case Some(s: Screen) =>
|
case Some(s: Screen) =>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user