Merge branch 'master-MC1.7.10' into master-MC1.10

This commit is contained in:
payonel 2018-11-14 18:14:41 -08:00
commit e7bb1fa5b5
3 changed files with 116 additions and 15 deletions

View File

@ -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

View File

@ -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

View File

@ -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))
}
}
}