mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 11:15:12 -04:00
Merge branch 'master-MC1.7.10' into master-MC1.10
This commit is contained in:
commit
e7bb1fa5b5
@ -178,7 +178,7 @@
|
||||
00B1:000000001818187E181818007E000000
|
||||
00B2:00386C0C1830607C0000000000000000
|
||||
00B3:00386C0C380C6C380000000000000000
|
||||
00B4:0C0C1818303000000000000000000000
|
||||
00B4:00000C18300000000000000000000000
|
||||
00B5:0000000000006666666666667C6060C0
|
||||
00B6:00003E7A7A7A7A3A1A1A1A1A1A000000
|
||||
00B7:00000000000000180000000000000000
|
||||
@ -911,23 +911,36 @@
|
||||
2020:00001818187E18181818181818000000
|
||||
2021:00001818187E1818187E181818000000
|
||||
2022:000000000000183C3C18000000000000
|
||||
2023:00000000000060787E78600000000000
|
||||
2024:00000000000000000000181818000000
|
||||
2025:00000000000000000000666666660000
|
||||
2026:00000000000000000000009292000000
|
||||
2030:0000C6C6CCCC18186060DBDBDBDB0000
|
||||
2031:0000C6C6CCCC18186060D5D5D5D50000
|
||||
2027:00000000000000181800000000000000
|
||||
2030:0000CCCCCCCC18186060DBDBDBDB0000
|
||||
2031:0000D8D8D8D830306060D5D5D5D50000
|
||||
2032:00000C18300000000000000000000000
|
||||
2033:0000366CD80000000000000000000000
|
||||
2034:00002A54A80000000000000000000000
|
||||
2035:000030180C0000000000000000000000
|
||||
2036:00006C361B0000000000000000000000
|
||||
2037:0000542A150000000000000000000000
|
||||
203C:66666666666666666666000066660000
|
||||
203D:007EDBDB1B1E1C181800001818000000
|
||||
2044:000006060C0C181830306060C0C00000
|
||||
2047:CCCC66666666CCCCCCCC0000CCCC0000
|
||||
2048:E6E6363636366666C6C60000C6C60000
|
||||
2049:DCDCC6C6C6C6CCCCD8D80000D8D80000
|
||||
2070:00386C6C6C6C6C380000000000000000
|
||||
2071:00303000303030300000000000000000
|
||||
2074:001C3C6C7E0C0C0C0000000000000000
|
||||
2075:007C60780C0C6C380000000000000000
|
||||
2076:00386060786C6C380000000000000000
|
||||
2077:007C0C0C183030300000000000000000
|
||||
2078:00386C6C386C6C380000000000000000
|
||||
2079:00386C6C3C0C0C380000000000000000
|
||||
207A:0018187E7E1818000000000000000000
|
||||
207B:00007E7E000000000000000000000000
|
||||
207C:00007E7E007E7E000000000000000000
|
||||
207F:000000786C6C6C6C0000000000000000
|
||||
20A3:00007E6060607C6060F8606060000000
|
||||
20A4:0000386C6C60F060F0606666FC000000
|
||||
@ -957,13 +970,26 @@
|
||||
2190:000000000010307F7F30100000000000
|
||||
2191:183C7E18181818181818181818181818
|
||||
2192:0000000000080CFEFE0C080000000000
|
||||
2193:181818181818181818181818187E3C18
|
||||
2194:00000000002466FFFF66240000000000
|
||||
2196:F0F0E0E0F0F0B8B81C1C0E0E04040000
|
||||
2197:0F0F07070F0F1D1D3838707020200000
|
||||
2198:00002020707038381D1D0F0F07070F0F
|
||||
2199:000004040E0E1C1CB8B8F0F0E0E0F0F0
|
||||
21A5:183C7E181818181818181818187E3C18
|
||||
2195:183C7E181818181818181818187E3C18
|
||||
2196:00000000F0E0F0B81C0E040000000000
|
||||
2197:000000000F070F1D3870200000000000
|
||||
2198:00000000002070381D0F070F00000000
|
||||
2199:0000000000040E1CB8F0E0F000000000
|
||||
21A4:00000000002262FEFE62220000000000
|
||||
21A5:183C7E181818181818181818181818FF
|
||||
21A6:000000000044467F7F46440000000000
|
||||
21A7:FF183C7E1818181818181818187E3C18
|
||||
21A8:183C7E1818181818181818187E3C18FF
|
||||
21BC:000000000010307F7F00000000000000
|
||||
21BD:000000000000007F7F30100000000000
|
||||
21BE:181C1E18181818181818181818181818
|
||||
21BF:18387818181818181818181818181818
|
||||
21C0:0000000000080CFEFE00000000000000
|
||||
21C1:00000000000000FEFE0C080000000000
|
||||
21C2:181818181818181818181818181E1C18
|
||||
21C3:18181818181818181818181818783818
|
||||
21E6:0000000018386FC1C16F381800000000
|
||||
21E7:00000000183C66C3E724243C00000000
|
||||
21E8:00000000181CF68383F61C1800000000
|
||||
@ -1569,7 +1595,7 @@
|
||||
28FD:FFFFFFFF0F0F0F0FFFFFFFFFFFFFFFFF
|
||||
28FE:0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
28FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
2913:181818181818181818181818187E3C18
|
||||
2913:1C1C1C1C3E3E1C1C080800003E3E0000
|
||||
2A00:000007C01C7030183018600C638C638C638C600C301830181C7007C000000000
|
||||
2A01:000007C01D7031183118610C610C7FFC610C610C311831181D7007C000000000
|
||||
2A02:000007C01C70301838386C6C66CC638C66CC6C6C383830181C7007C000000000
|
||||
@ -1577,7 +1603,7 @@
|
||||
2A04:4444444454547C7C5454444438380000
|
||||
2A05:7C7C4444444444444444444444440000
|
||||
2A06:4444444444444444444444447C7C0000
|
||||
2B1D:00000000000018181818000000000000
|
||||
2B1D:00000000000000181800000000000000
|
||||
2B24:000000003C7EFFFFFFFF7E3C00000000
|
||||
2B55:000000003C7EE7C3C3E77E3C00000000
|
||||
2B58:00000000003C7E66667E3C0000000000
|
||||
|
@ -120,7 +120,7 @@ object GuiHandler extends CommonGuiHandler {
|
||||
val address = stack.getTagCompound.getString(Settings.namespace + "server")
|
||||
val key = stack.getTagCompound.getString(Settings.namespace + "key")
|
||||
if (!Strings.isNullOrEmpty(key) && !Strings.isNullOrEmpty(address)) {
|
||||
component.TerminalServer.loaded.find(_.address == address) match {
|
||||
component.TerminalServer.loaded.find(address) match {
|
||||
case Some(term) => term.rack match {
|
||||
case rack: TileEntity with api.internal.Rack =>
|
||||
def inRange = player.isEntityAlive && !rack.isInvalid && rack.getDistanceSq(player.posX, player.posY, player.posZ) < term.range * term.range
|
||||
|
@ -33,6 +33,7 @@ import net.minecraft.util.EnumFacing
|
||||
import net.minecraft.util.EnumHand
|
||||
import net.minecraftforge.common.util.Constants.NBT
|
||||
|
||||
import scala.collection.convert.WrapAsScala._
|
||||
import scala.collection.convert.WrapAsJava._
|
||||
import scala.collection.mutable
|
||||
|
||||
@ -66,7 +67,17 @@ class TerminalServer(val rack: api.internal.Rack, val slot: Int) extends Environ
|
||||
var range = Settings.get.maxWirelessRange(Tier.Two)
|
||||
val keys = mutable.ListBuffer.empty[String]
|
||||
|
||||
def address = rack.getMountableData(slot).getString("terminalAddress")
|
||||
def hasAddress: Boolean = {
|
||||
if (rack != null) {
|
||||
val data = rack.getMountableData(slot)
|
||||
if (data != null) {
|
||||
return data.hasKey("terminalAddress")
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
def address: String = rack.getMountableData(slot).getString("terminalAddress")
|
||||
|
||||
def sidedKeys = {
|
||||
if (!rack.world.isRemote) keys
|
||||
@ -212,13 +223,77 @@ class TerminalServer(val rack: api.internal.Rack, val slot: Int) extends Environ
|
||||
|
||||
override def onLifecycleStateChange(state: Lifecycle.LifecycleState): Unit = if (rack.world.isRemote) state match {
|
||||
case Lifecycle.LifecycleState.Initialized =>
|
||||
TerminalServer.loaded += this
|
||||
TerminalServer.loaded.add(this)
|
||||
case Lifecycle.LifecycleState.Disposed =>
|
||||
TerminalServer.loaded -= this
|
||||
TerminalServer.loaded.remove(this)
|
||||
case _ => // Ignore.
|
||||
}
|
||||
}
|
||||
|
||||
object TerminalServer {
|
||||
val loaded = mutable.Buffer.empty[TerminalServer]
|
||||
val loaded = new TerminalServerCache()
|
||||
|
||||
// we need a smart cache because nodes are loaded in before they have addresses
|
||||
// and we need a unique set of terminal servers based on address
|
||||
// This cache acts as a Map[address: String, term: TerminalServer]
|
||||
// But it can store terminals before they have an address
|
||||
// Null-address terminals are not available for binding
|
||||
// As an address loads, repeated addresses are dropped from the list
|
||||
class TerminalServerCache {
|
||||
|
||||
private val ready: mutable.Map[String, TerminalServer] = new mutable.HashMap[String, TerminalServer]()
|
||||
private val pending: mutable.Buffer[TerminalServer] = mutable.Buffer.empty[TerminalServer]
|
||||
|
||||
private def completePending(): Unit = {
|
||||
val promoted: mutable.Buffer[TerminalServer] = mutable.Buffer.empty[TerminalServer]
|
||||
pending.foreach { term => if (term.hasAddress)
|
||||
promoted += term
|
||||
}
|
||||
promoted.foreach { term =>
|
||||
pending -= term
|
||||
val address = term.address
|
||||
if (!ready.contains(address)) {
|
||||
ready.put(address, term)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def add(terminal: TerminalServer): Boolean = {
|
||||
completePending()
|
||||
if (terminal.hasAddress) {
|
||||
val newAddress: String = terminal.address
|
||||
if (ready.contains(newAddress)) {
|
||||
false
|
||||
} else {
|
||||
ready.put(newAddress, terminal)
|
||||
true
|
||||
}
|
||||
}
|
||||
else {
|
||||
pending += terminal
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
def remove(terminal: TerminalServer): Boolean = {
|
||||
completePending()
|
||||
if (terminal.hasAddress)
|
||||
ready.remove(terminal.address).isDefined
|
||||
else {
|
||||
val before = pending.size
|
||||
pending -= terminal
|
||||
pending.size > before
|
||||
}
|
||||
}
|
||||
|
||||
def clear(): Unit = {
|
||||
ready.clear()
|
||||
pending.clear()
|
||||
}
|
||||
|
||||
def find(address: String): Option[TerminalServer] = {
|
||||
completePending()
|
||||
Some(ready.getOrDefault(address, null))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user