mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-18 19:56:17 -04:00
Merge branch 'master' of github.com:MightyPirates/OpenComputers into master-MC1.7.10
Conflicts: build.properties src/main/scala/li/cil/oc/client/KeyBindings.scala src/main/scala/li/cil/oc/client/gui/ServerRack.scala src/main/scala/li/cil/oc/util/Audio.scala
This commit is contained in:
commit
ecaa8bd349
@ -3,6 +3,6 @@ forge.version=10.13.0.1180
|
|||||||
oc.version=1.3.2
|
oc.version=1.3.2
|
||||||
oc.subversion=dev
|
oc.subversion=dev
|
||||||
cc.mc.version=1.7.2
|
cc.mc.version=1.7.2
|
||||||
ccl.version=1.1.1.80
|
ccl.version=1.1.1.95
|
||||||
fmp.version=1.1.0.282
|
fmp.version=1.1.0.299
|
||||||
maven.url=file:///var/www/users/fnuecke/maven.cil.li
|
maven.url=file:///var/www/users/fnuecke/maven.cil.li
|
@ -146,6 +146,8 @@ oc:gui.ServerRack.Bottom=Unten
|
|||||||
oc:gui.ServerRack.Left=Links
|
oc:gui.ServerRack.Left=Links
|
||||||
oc:gui.ServerRack.Right=Rechts
|
oc:gui.ServerRack.Right=Rechts
|
||||||
oc:gui.ServerRack.Top=Oben
|
oc:gui.ServerRack.Top=Oben
|
||||||
|
oc:gui.ServerRack.SwitchExternal=Extern
|
||||||
|
oc:gui.ServerRack.SwitchInternal=Intern
|
||||||
oc:gui.ServerRack.WirelessRange=Reichweite
|
oc:gui.ServerRack.WirelessRange=Reichweite
|
||||||
oc:gui.Switch.TransferRate=Taktung
|
oc:gui.Switch.TransferRate=Taktung
|
||||||
oc:gui.Switch.PacketsPerCycle=Pakete / Zyklus
|
oc:gui.Switch.PacketsPerCycle=Pakete / Zyklus
|
||||||
|
@ -147,6 +147,8 @@ oc:gui.ServerRack.Bottom=Bottom
|
|||||||
oc:gui.ServerRack.Left=Left
|
oc:gui.ServerRack.Left=Left
|
||||||
oc:gui.ServerRack.Right=Right
|
oc:gui.ServerRack.Right=Right
|
||||||
oc:gui.ServerRack.Top=Top
|
oc:gui.ServerRack.Top=Top
|
||||||
|
oc:gui.ServerRack.SwitchExternal=External
|
||||||
|
oc:gui.ServerRack.SwitchInternal=Internal
|
||||||
oc:gui.ServerRack.WirelessRange=Range
|
oc:gui.ServerRack.WirelessRange=Range
|
||||||
oc:gui.Switch.TransferRate=Cycle rate
|
oc:gui.Switch.TransferRate=Cycle rate
|
||||||
oc:gui.Switch.PacketsPerCycle=Packets / cycle
|
oc:gui.Switch.PacketsPerCycle=Packets / cycle
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 859 B |
@ -93,6 +93,10 @@ object Localization {
|
|||||||
|
|
||||||
def None = localizeImmediately("gui.ServerRack.None")
|
def None = localizeImmediately("gui.ServerRack.None")
|
||||||
|
|
||||||
|
def SwitchExternal = localizeImmediately("gui.ServerRack.SwitchExternal")
|
||||||
|
|
||||||
|
def SwitchInternal = localizeImmediately("gui.ServerRack.SwitchInternal")
|
||||||
|
|
||||||
def WirelessRange = localizeImmediately("gui.ServerRack.WirelessRange")
|
def WirelessRange = localizeImmediately("gui.ServerRack.WirelessRange")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,9 +5,9 @@ import net.minecraft.client.settings.KeyBinding
|
|||||||
import org.lwjgl.input.Keyboard
|
import org.lwjgl.input.Keyboard
|
||||||
|
|
||||||
object KeyBindings {
|
object KeyBindings {
|
||||||
def showExtendedTooltips = Keyboard.isKeyDown(extendedTooltip.getKeyCode)
|
def showExtendedTooltips = Keyboard.isCreated && Keyboard.isKeyDown(extendedTooltip.getKeyCode)
|
||||||
|
|
||||||
def showMaterialCosts = Keyboard.isKeyDown(materialCosts.getKeyCode)
|
def showMaterialCosts = Keyboard.isCreated && Keyboard.isKeyDown(materialCosts.getKeyCode)
|
||||||
|
|
||||||
val extendedTooltip = FMLClientHandler.instance.getClient.gameSettings.keyBindSneak
|
val extendedTooltip = FMLClientHandler.instance.getClient.gameSettings.keyBindSneak
|
||||||
|
|
||||||
|
@ -158,4 +158,13 @@ object PacketSender {
|
|||||||
|
|
||||||
pb.sendToServer()
|
pb.sendToServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def sendServerSwitchMode(t: ServerRack, internal: Boolean) {
|
||||||
|
val pb = new PacketBuilder(PacketType.ServerSwitchMode)
|
||||||
|
|
||||||
|
pb.writeTileEntity(t)
|
||||||
|
pb.writeBoolean(internal)
|
||||||
|
|
||||||
|
pb.sendToServer()
|
||||||
|
}
|
||||||
}
|
}
|
@ -16,6 +16,7 @@ object Textures {
|
|||||||
val guiButtonRun = new ResourceLocation(Settings.resourceDomain, "textures/gui/button_run.png")
|
val guiButtonRun = new ResourceLocation(Settings.resourceDomain, "textures/gui/button_run.png")
|
||||||
val guiButtonScroll = new ResourceLocation(Settings.resourceDomain, "textures/gui/button_scroll.png")
|
val guiButtonScroll = new ResourceLocation(Settings.resourceDomain, "textures/gui/button_scroll.png")
|
||||||
val guiButtonSide = new ResourceLocation(Settings.resourceDomain, "textures/gui/button_side.png")
|
val guiButtonSide = new ResourceLocation(Settings.resourceDomain, "textures/gui/button_side.png")
|
||||||
|
val guiButtonSwitch = new ResourceLocation(Settings.resourceDomain, "textures/gui/button_switch.png")
|
||||||
val guiComputer = new ResourceLocation(Settings.resourceDomain, "textures/gui/computer.png")
|
val guiComputer = new ResourceLocation(Settings.resourceDomain, "textures/gui/computer.png")
|
||||||
val guiDisassembler = new ResourceLocation(Settings.resourceDomain, "textures/gui/disassembler.png")
|
val guiDisassembler = new ResourceLocation(Settings.resourceDomain, "textures/gui/disassembler.png")
|
||||||
val guiKeyboardMissing = new ResourceLocation(Settings.resourceDomain, "textures/gui/keyboard_missing.png")
|
val guiKeyboardMissing = new ResourceLocation(Settings.resourceDomain, "textures/gui/keyboard_missing.png")
|
||||||
|
@ -13,7 +13,8 @@ class ImageButton(id: Int, x: Int, y: Int, w: Int, h: Int,
|
|||||||
val canToggle: Boolean = false,
|
val canToggle: Boolean = false,
|
||||||
val textColor: Int = 0xE0E0E0,
|
val textColor: Int = 0xE0E0E0,
|
||||||
val textDisabledColor: Int = 0xA0A0A0,
|
val textDisabledColor: Int = 0xA0A0A0,
|
||||||
val textHoverColor: Int = 0xFFFFA0) extends GuiButton(id, x, y, w, h, text) {
|
val textHoverColor: Int = 0xFFFFA0,
|
||||||
|
val textIndent: Int = -1) extends GuiButton(id, x, y, w, h, text) {
|
||||||
|
|
||||||
var toggled = false
|
var toggled = false
|
||||||
|
|
||||||
@ -48,7 +49,8 @@ class ImageButton(id: Int, x: Int, y: Int, w: Int, h: Int,
|
|||||||
if (!enabled) textDisabledColor
|
if (!enabled) textDisabledColor
|
||||||
else if (hoverOverride || field_146123_n) textHoverColor
|
else if (hoverOverride || field_146123_n) textHoverColor
|
||||||
else textColor
|
else textColor
|
||||||
drawCenteredString(mc.fontRenderer, displayString, xPosition + width / 2, yPosition + (height - 8) / 2, color)
|
if (textIndent >= 0) drawString(mc.fontRenderer, displayString, textIndent + xPosition, yPosition + (height - 8) / 2, color)
|
||||||
|
else drawCenteredString(mc.fontRenderer, displayString, xPosition + width / 2, yPosition + (height - 8) / 2, color)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,8 @@ import net.minecraftforge.common.util.ForgeDirection
|
|||||||
import org.lwjgl.opengl.GL11
|
import org.lwjgl.opengl.GL11
|
||||||
|
|
||||||
class ServerRack(playerInventory: InventoryPlayer, val rack: tileentity.ServerRack) extends DynamicGuiContainer(new container.ServerRack(playerInventory, rack)) {
|
class ServerRack(playerInventory: InventoryPlayer, val rack: tileentity.ServerRack) extends DynamicGuiContainer(new container.ServerRack(playerInventory, rack)) {
|
||||||
|
protected var switchButton: ImageButton = _
|
||||||
|
|
||||||
protected var powerButtons = new Array[ImageButton](4)
|
protected var powerButtons = new Array[ImageButton](4)
|
||||||
|
|
||||||
protected var sideButtons = new Array[GuiButton](4)
|
protected var sideButtons = new Array[GuiButton](4)
|
||||||
@ -57,6 +59,9 @@ class ServerRack(playerInventory: InventoryPlayer, val rack: tileentity.ServerRa
|
|||||||
ClientPacketSender.sendServerRange(rack, range)
|
ClientPacketSender.sendServerRange(rack, range)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (button.id == 10) {
|
||||||
|
ClientPacketSender.sendServerSwitchMode(rack, !rack.internalSwitch)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override def drawScreen(mouseX: Int, mouseY: Int, dt: Float) {
|
override def drawScreen(mouseX: Int, mouseY: Int, dt: Float) {
|
||||||
@ -64,6 +69,7 @@ class ServerRack(playerInventory: InventoryPlayer, val rack: tileentity.ServerRa
|
|||||||
powerButtons(i).toggled = rack.isRunning(i)
|
powerButtons(i).toggled = rack.isRunning(i)
|
||||||
sideButtons(i).displayString = sideName(i)
|
sideButtons(i).displayString = sideName(i)
|
||||||
}
|
}
|
||||||
|
switchButton.displayString = if (rack.internalSwitch) Localization.ServerRack.SwitchInternal else Localization.ServerRack.SwitchExternal
|
||||||
super.drawScreen(mouseX, mouseY, dt)
|
super.drawScreen(mouseX, mouseY, dt)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,9 +84,11 @@ class ServerRack(playerInventory: InventoryPlayer, val rack: tileentity.ServerRa
|
|||||||
add(buttonList, sideButtons(i))
|
add(buttonList, sideButtons(i))
|
||||||
}
|
}
|
||||||
for (i <- 0 to 1) {
|
for (i <- 0 to 1) {
|
||||||
rangeButtons(i) = new ImageButton(8 + i, guiLeft + 8 + i * 48, guiTop + 43, 16, 18, Textures.guiButtonRange, if (i == 0) "-" else "+")
|
rangeButtons(i) = new ImageButton(8 + i, guiLeft + 8 + i * 48, guiTop + 50, 16, 18, Textures.guiButtonRange, if (i == 0) "-" else "+")
|
||||||
add(buttonList, rangeButtons(i))
|
add(buttonList, rangeButtons(i))
|
||||||
}
|
}
|
||||||
|
switchButton = new ImageButton(10, guiLeft + 8, guiTop + 17, 64, 18, Textures.guiButtonSwitch, Localization.ServerRack.SwitchExternal, textIndent = 18)
|
||||||
|
add(buttonList, switchButton)
|
||||||
}
|
}
|
||||||
|
|
||||||
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
override def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) = {
|
||||||
@ -91,12 +99,13 @@ class ServerRack(playerInventory: InventoryPlayer, val rack: tileentity.ServerRa
|
|||||||
StatCollector.translateToLocal(rack.getInventoryName),
|
StatCollector.translateToLocal(rack.getInventoryName),
|
||||||
8, 6, 0x404040)
|
8, 6, 0x404040)
|
||||||
|
|
||||||
fontRendererObj.drawString(Localization.ServerRack.WirelessRange, 8, 31, 0x404040)
|
val rangeY = 39
|
||||||
|
fontRendererObj.drawString(Localization.ServerRack.WirelessRange, 8, rangeY, 0x404040)
|
||||||
|
|
||||||
{
|
{
|
||||||
// Background for range value.
|
// Background for range value.
|
||||||
val tx = 25
|
val tx = 25
|
||||||
val ty = 43
|
val ty = 50
|
||||||
val w = 30
|
val w = 30
|
||||||
val h = 18
|
val h = 18
|
||||||
val t = Tessellator.instance
|
val t = Tessellator.instance
|
||||||
@ -114,7 +123,7 @@ class ServerRack(playerInventory: InventoryPlayer, val rack: tileentity.ServerRa
|
|||||||
|
|
||||||
drawCenteredString(fontRendererObj,
|
drawCenteredString(fontRendererObj,
|
||||||
rack.range.toString,
|
rack.range.toString,
|
||||||
40, 48, 0xFFFFFF)
|
40, 56, 0xFFFFFF)
|
||||||
|
|
||||||
for (i <- 0 to 3 if powerButtons(i).func_146115_a) {
|
for (i <- 0 to 3 if powerButtons(i).func_146115_a) {
|
||||||
val tooltip = new java.util.ArrayList[String]
|
val tooltip = new java.util.ArrayList[String]
|
||||||
|
@ -49,6 +49,9 @@ object PacketType extends Enumeration {
|
|||||||
MultiPartPlace,
|
MultiPartPlace,
|
||||||
RobotAssemblerStart,
|
RobotAssemblerStart,
|
||||||
RobotStateRequest,
|
RobotStateRequest,
|
||||||
|
ServerRange,
|
||||||
ServerSide,
|
ServerSide,
|
||||||
ServerRange = Value
|
ServerSwitchMode,
|
||||||
|
|
||||||
|
EndOfList = Value
|
||||||
}
|
}
|
@ -1,6 +1,8 @@
|
|||||||
package li.cil.oc.common.container
|
package li.cil.oc.common.container
|
||||||
|
|
||||||
|
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
||||||
import li.cil.oc.common.tileentity
|
import li.cil.oc.common.tileentity
|
||||||
|
import li.cil.oc.util.SideTracker
|
||||||
import net.minecraft.entity.player.InventoryPlayer
|
import net.minecraft.entity.player.InventoryPlayer
|
||||||
|
|
||||||
class ServerRack(playerInventory: InventoryPlayer, rack: tileentity.ServerRack) extends Player(playerInventory, rack) {
|
class ServerRack(playerInventory: InventoryPlayer, rack: tileentity.ServerRack) extends Player(playerInventory, rack) {
|
||||||
@ -9,4 +11,23 @@ class ServerRack(playerInventory: InventoryPlayer, rack: tileentity.ServerRack)
|
|||||||
addSlotToContainer(106, 44)
|
addSlotToContainer(106, 44)
|
||||||
addSlotToContainer(106, 62)
|
addSlotToContainer(106, 62)
|
||||||
addPlayerInventorySlots(8, 84)
|
addPlayerInventorySlots(8, 84)
|
||||||
|
|
||||||
|
var lastSentSwitchMode = !rack.internalSwitch
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
override def updateProgressBar(id: Int, value: Int) {
|
||||||
|
if (id == 0) {
|
||||||
|
rack.internalSwitch = value == 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override def detectAndSendChanges() {
|
||||||
|
super.detectAndSendChanges()
|
||||||
|
if (SideTracker.isServer) {
|
||||||
|
if (lastSentSwitchMode != rack.internalSwitch) {
|
||||||
|
lastSentSwitchMode = rack.internalSwitch
|
||||||
|
sendProgressBarUpdate(0, if (lastSentSwitchMode) 1 else 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ class Tablet(val parent: Delegator) extends Delegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TabletWrapper(val stack: ItemStack, var holder: Entity) extends ComponentInventory with Container with Owner {
|
class TabletWrapper(var stack: ItemStack, var holder: Entity) extends ComponentInventory with Container with Owner {
|
||||||
lazy val computer = if (holder.worldObj.isRemote) null else Machine.create(this)
|
lazy val computer = if (holder.worldObj.isRemote) null else Machine.create(this)
|
||||||
|
|
||||||
val items = Array(
|
val items = Array(
|
||||||
@ -52,6 +52,7 @@ class TabletWrapper(val stack: ItemStack, var holder: Entity) extends ComponentI
|
|||||||
Option(api.Items.get("batteryUpgrade2").createItemStack(1)),
|
Option(api.Items.get("batteryUpgrade2").createItemStack(1)),
|
||||||
Option(api.Items.get("navigationUpgrade").createItemStack(1)),
|
Option(api.Items.get("navigationUpgrade").createItemStack(1)),
|
||||||
Option(api.Items.get("openOS").createItemStack(1)),
|
Option(api.Items.get("openOS").createItemStack(1)),
|
||||||
|
Option(api.Items.get("hdd1").createItemStack(1)),
|
||||||
Option(api.Items.get("wlanCard").createItemStack(1))
|
Option(api.Items.get("wlanCard").createItemStack(1))
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -229,7 +230,7 @@ object Tablet extends Callable[TabletWrapper] with RemovalListener[String, Table
|
|||||||
|
|
||||||
private var currentHolder: Entity = _
|
private var currentHolder: Entity = _
|
||||||
|
|
||||||
def get(stack: ItemStack, holder: Entity) = clientCache.synchronized {
|
def get(stack: ItemStack, holder: Entity) = (if (holder.worldObj.isRemote) clientCache else serverCache).synchronized {
|
||||||
currentStack = stack
|
currentStack = stack
|
||||||
currentHolder = holder
|
currentHolder = holder
|
||||||
if (!stack.hasTagCompound) {
|
if (!stack.hasTagCompound) {
|
||||||
@ -239,18 +240,14 @@ object Tablet extends Callable[TabletWrapper] with RemovalListener[String, Table
|
|||||||
stack.getTagCompound.setString(Settings.namespace + "tablet", UUID.randomUUID().toString)
|
stack.getTagCompound.setString(Settings.namespace + "tablet", UUID.randomUUID().toString)
|
||||||
}
|
}
|
||||||
val id = stack.getTagCompound.getString(Settings.namespace + "tablet")
|
val id = stack.getTagCompound.getString(Settings.namespace + "tablet")
|
||||||
if (holder.worldObj.isRemote)
|
val wrapper =
|
||||||
clientCache.get(id, this)
|
if (holder.worldObj.isRemote)
|
||||||
else
|
clientCache.get(id, this)
|
||||||
serverCache.get(id, this)
|
else
|
||||||
}
|
serverCache.get(id, this)
|
||||||
|
wrapper.stack = stack
|
||||||
def get(stack: ItemStack) = clientCache.synchronized {
|
wrapper.holder = holder
|
||||||
if (stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "tablet")) {
|
wrapper
|
||||||
val id = stack.getTagCompound.getString(Settings.namespace + "tablet")
|
|
||||||
Option(clientCache.getIfPresent(id))
|
|
||||||
}
|
|
||||||
else None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def call = {
|
def call = {
|
||||||
|
@ -7,7 +7,7 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent
|
|||||||
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
||||||
import li.cil.oc._
|
import li.cil.oc._
|
||||||
import li.cil.oc.api.Network
|
import li.cil.oc.api.Network
|
||||||
import li.cil.oc.api.network.{Analyzable, Connector, Node, Visibility}
|
import li.cil.oc.api.network._
|
||||||
import li.cil.oc.client.Sound
|
import li.cil.oc.client.Sound
|
||||||
import li.cil.oc.server.{component, driver, PacketSender => ServerPacketSender}
|
import li.cil.oc.server.{component, driver, PacketSender => ServerPacketSender}
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
@ -40,6 +40,8 @@ class ServerRack extends traits.PowerAcceptor with traits.Hub with traits.PowerB
|
|||||||
|
|
||||||
private var hasChanged = false
|
private var hasChanged = false
|
||||||
|
|
||||||
|
var internalSwitch = false
|
||||||
|
|
||||||
// For client side rendering.
|
// For client side rendering.
|
||||||
var isPresent = Array.fill[Option[String]](getSizeInventory)(None)
|
var isPresent = Array.fill[Option[String]](getSizeInventory)(None)
|
||||||
|
|
||||||
@ -144,6 +146,33 @@ class ServerRack extends traits.PowerAcceptor with traits.Hub with traits.PowerB
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
override protected def relayPacket(sourceSide: ForgeDirection, packet: Packet) {
|
||||||
|
if (internalSwitch) {
|
||||||
|
for (slot <- 0 until servers.length) {
|
||||||
|
val side = sides(slot)
|
||||||
|
if (side != sourceSide) {
|
||||||
|
servers(slot) match {
|
||||||
|
case Some(server) => server.node.sendToNeighbors("network.message", packet)
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else super.relayPacket(sourceSide, packet)
|
||||||
|
}
|
||||||
|
|
||||||
|
override protected def onPlugMessage(plug: Plug, message: Message) {
|
||||||
|
// This check is a little hacky. Basically what we test here is whether
|
||||||
|
// the message was relayed internally, because only internally relayed
|
||||||
|
// network messages originate from the actual server nodes themselves.
|
||||||
|
// The otherwise come from the network card.
|
||||||
|
if (message.name != "network.message" || !(servers collect {
|
||||||
|
case Some(server) => server.node
|
||||||
|
}).contains(message.source)) super.onPlugMessage(plug, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
override def getSizeInventory = 4
|
override def getSizeInventory = 4
|
||||||
|
|
||||||
override def getInventoryStackLimit = 1
|
override def getInventoryStackLimit = 1
|
||||||
@ -258,6 +287,7 @@ class ServerRack extends traits.PowerAcceptor with traits.Hub with traits.PowerB
|
|||||||
case t: Throwable => OpenComputers.log.log(Level.WARN, "Failed restoring terminal state. Please report this!", t)
|
case t: Throwable => OpenComputers.log.log(Level.WARN, "Failed restoring terminal state. Please report this!", t)
|
||||||
})
|
})
|
||||||
range = nbt.getInteger(Settings.namespace + "range")
|
range = nbt.getInteger(Settings.namespace + "range")
|
||||||
|
internalSwitch = nbt.getBoolean(Settings.namespace + "internalSwitch")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Side check for Waila (and other mods that may call this client side).
|
// Side check for Waila (and other mods that may call this client side).
|
||||||
@ -283,6 +313,7 @@ class ServerRack extends traits.PowerAcceptor with traits.Hub with traits.PowerB
|
|||||||
terminalNbt
|
terminalNbt
|
||||||
}))
|
}))
|
||||||
nbt.setInteger(Settings.namespace + "range", range)
|
nbt.setInteger(Settings.namespace + "range", range)
|
||||||
|
nbt.setBoolean(Settings.namespace + "internalSwitch", internalSwitch)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
|
@ -79,7 +79,7 @@ trait Hub extends traits.Environment with SidedEnvironment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected def tryEnqueuePacket(sourceSide: ForgeDirection, packet: Packet) = queue.synchronized {
|
protected def tryEnqueuePacket(sourceSide: ForgeDirection, packet: Packet) = queue.synchronized {
|
||||||
if (packet.ttl > 0 && queue.size < maxQueueSize && !plugs.exists(_.node.address == packet.source)) {
|
if (packet.ttl > 0 && queue.size < maxQueueSize) {
|
||||||
queue += sourceSide -> packet.hop()
|
queue += sourceSide -> packet.hop()
|
||||||
if (relayCooldown < 0) {
|
if (relayCooldown < 0) {
|
||||||
relayCooldown = relayDelay
|
relayCooldown = relayDelay
|
||||||
@ -159,7 +159,7 @@ trait Hub extends traits.Environment with SidedEnvironment {
|
|||||||
protected def onPlugDisconnect(plug: Plug, node: Node) {}
|
protected def onPlugDisconnect(plug: Plug, node: Node) {}
|
||||||
|
|
||||||
protected def onPlugMessage(plug: Plug, message: Message) {
|
protected def onPlugMessage(plug: Plug, message: Message) {
|
||||||
if (message.name == "network.message") message.data match {
|
if (message.name == "network.message" && !plugs.exists(_.node == message.source)) message.data match {
|
||||||
case Array(packet: Packet) => tryEnqueuePacket(plug.side, packet)
|
case Array(packet: Packet) => tryEnqueuePacket(plug.side, packet)
|
||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
case PacketType.RobotStateRequest => onRobotStateRequest(p)
|
case PacketType.RobotStateRequest => onRobotStateRequest(p)
|
||||||
case PacketType.ServerRange => onServerRange(p)
|
case PacketType.ServerRange => onServerRange(p)
|
||||||
case PacketType.ServerSide => onServerSide(p)
|
case PacketType.ServerSide => onServerSide(p)
|
||||||
|
case PacketType.ServerSwitchMode => onServerSwitchMode(p)
|
||||||
case _ => // Invalid packet.
|
case _ => // Invalid packet.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -184,4 +185,14 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
}
|
}
|
||||||
case _ => // Invalid packet.
|
case _ => // Invalid packet.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def onServerSwitchMode(p: PacketParser) =
|
||||||
|
p.readTileEntity[ServerRack]() match {
|
||||||
|
case Some(rack) => p.player match {
|
||||||
|
case player: EntityPlayerMP if rack.isUseableByPlayer(player) =>
|
||||||
|
rack.internalSwitch = p.readBoolean()
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
case _ => // Invalid packet.
|
||||||
|
}
|
||||||
}
|
}
|
@ -43,6 +43,16 @@ private class Network private(private val data: mutable.Map[String, Network.Vert
|
|||||||
node.data.network = wrapper
|
node.data.network = wrapper
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Called by nodes when they may have changed address from loading.
|
||||||
|
def remap(node: MutableNode) {
|
||||||
|
data.find(_._2.data == node) match {
|
||||||
|
case Some((address, vertex)) =>
|
||||||
|
data -= address
|
||||||
|
data += node.address -> vertex
|
||||||
|
case _ => // Eh?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
def connect(nodeA: MutableNode, nodeB: MutableNode) = {
|
def connect(nodeA: MutableNode, nodeB: MutableNode) = {
|
||||||
@ -144,9 +154,7 @@ private class Network private(private val data: mutable.Map[String, Network.Vert
|
|||||||
|
|
||||||
def neighbors(node: ImmutableNode): Iterable[ImmutableNode] = {
|
def neighbors(node: ImmutableNode): Iterable[ImmutableNode] = {
|
||||||
data.get(node.address) match {
|
data.get(node.address) match {
|
||||||
case Some(n) =>
|
case Some(n) if n.data == node => n.edges.map(_.other(n).data)
|
||||||
assert(n.data == node)
|
|
||||||
n.edges.map(_.other(n).data)
|
|
||||||
case _ => throw new IllegalArgumentException("Node must be in this network.")
|
case _ => throw new IllegalArgumentException("Node must be in this network.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -640,7 +648,7 @@ object Network extends api.detail.NetworkAPI {
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
private class Wrapper(val network: Network) extends api.network.Network with Distributor {
|
private[network] class Wrapper(val network: Network) extends api.network.Network with Distributor {
|
||||||
def connect(nodeA: ImmutableNode, nodeB: ImmutableNode) =
|
def connect(nodeA: ImmutableNode, nodeB: ImmutableNode) =
|
||||||
network.connect(nodeA.asInstanceOf[MutableNode], nodeB.asInstanceOf[MutableNode])
|
network.connect(nodeA.asInstanceOf[MutableNode], nodeB.asInstanceOf[MutableNode])
|
||||||
|
|
||||||
|
@ -64,7 +64,12 @@ trait Node extends ImmutableNode {
|
|||||||
|
|
||||||
def load(nbt: NBTTagCompound) = {
|
def load(nbt: NBTTagCompound) = {
|
||||||
if (nbt.hasKey("address")) {
|
if (nbt.hasKey("address")) {
|
||||||
|
val oldAddress = address
|
||||||
address = nbt.getString("address")
|
address = nbt.getString("address")
|
||||||
|
if (address != oldAddress) network match {
|
||||||
|
case wrapper: Network.Wrapper => wrapper.network.remap(this)
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import java.nio.ByteBuffer
|
|||||||
import cpw.mods.fml.common.FMLCommonHandler
|
import cpw.mods.fml.common.FMLCommonHandler
|
||||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent
|
||||||
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent
|
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent
|
||||||
|
import li.cil.oc.OpenComputers
|
||||||
import net.minecraft.client.Minecraft
|
import net.minecraft.client.Minecraft
|
||||||
import net.minecraft.client.audio.SoundCategory
|
import net.minecraft.client.audio.SoundCategory
|
||||||
import org.lwjgl.BufferUtils
|
import org.lwjgl.BufferUtils
|
||||||
@ -26,6 +27,8 @@ object Audio {
|
|||||||
|
|
||||||
private def volume = Minecraft.getMinecraft.gameSettings.getSoundLevel(SoundCategory.BLOCKS)
|
private def volume = Minecraft.getMinecraft.gameSettings.getSoundLevel(SoundCategory.BLOCKS)
|
||||||
|
|
||||||
|
private var errored = false
|
||||||
|
|
||||||
def play(x: Float, y: Float, z: Float, frequencyInHz: Int, durationInMilliseconds: Int) {
|
def play(x: Float, y: Float, z: Float, frequencyInHz: Int, durationInMilliseconds: Int) {
|
||||||
val distanceBasedGain = math.max(0, 1 - Minecraft.getMinecraft.thePlayer.getDistance(x, y, z) / 12).toFloat
|
val distanceBasedGain = math.max(0, 1 - Minecraft.getMinecraft.thePlayer.getDistance(x, y, z) / 12).toFloat
|
||||||
val gain = distanceBasedGain * volume
|
val gain = distanceBasedGain * volume
|
||||||
@ -54,11 +57,17 @@ object Audio {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def update() {
|
def update() {
|
||||||
sources.synchronized(sources --= sources.filter(_.checkFinished))
|
if (!errored) {
|
||||||
|
sources.synchronized(sources --= sources.filter(_.checkFinished))
|
||||||
|
|
||||||
// Clear error stack.
|
// Clear error stack.
|
||||||
if (AL.isCreated) {
|
if (AL.isCreated) {
|
||||||
AL10.alGetError()
|
try AL10.alGetError() catch {
|
||||||
|
case _: UnsatisfiedLinkError =>
|
||||||
|
OpenComputers.log.warn("Negotiations with OpenAL broke down, disabling sounds.")
|
||||||
|
errored = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user