diff --git a/src/main/resources/application.conf b/src/main/resources/application.conf index 86dd28bda..ba5b6ffd8 100644 --- a/src/main/resources/application.conf +++ b/src/main/resources/application.conf @@ -949,7 +949,7 @@ opencomputers { # This is a list of blacklisted domain names. If an HTTP request is made # or a socket connection is opened the target address will be compared - # to the addresses / adress ranges in this list. It it is present in this + # to the addresses / address ranges in this list. It it is present in this # list, the request will be denied. # Entries are either domain names (www.example.com) or IP addresses in # string format (10.0.0.3), optionally in CIDR notation to make it easier diff --git a/src/main/resources/assets/opencomputers/loot/openos/bin/edit.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/edit.lua index 55860887e..90cd2e9ba 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/bin/edit.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/bin/edit.lua @@ -556,7 +556,7 @@ getKeyBindHandler = function(code) if type(keybinds) == "table" and keyBindHandlers[command] then for _, keybind in ipairs(keybinds) do if type(keybind) == "table" then - local alt, control, shift, key + local alt, control, shift, key = false, false, false for _, value in ipairs(keybind) do if value == "alt" then alt = true elseif value == "control" then control = true @@ -564,9 +564,9 @@ getKeyBindHandler = function(code) else key = value end end local keyboardAddress = term.keyboard() - if (not alt or keyboard.isAltDown(keyboardAddress)) and - (not control or keyboard.isControlDown(keyboardAddress)) and - (not shift or keyboard.isShiftDown(keyboardAddress)) and + if (alt == not not keyboard.isAltDown(keyboardAddress)) and + (control == not not keyboard.isControlDown(keyboardAddress)) and + (shift == not not keyboard.isShiftDown(keyboardAddress)) and code == keyboard.keys[key] and #keybind > resultWeight then diff --git a/src/main/scala/li/cil/oc/common/event/ChunkloaderUpgradeHandler.scala b/src/main/scala/li/cil/oc/common/event/ChunkloaderUpgradeHandler.scala index e80c89c21..80395e3bd 100644 --- a/src/main/scala/li/cil/oc/common/event/ChunkloaderUpgradeHandler.scala +++ b/src/main/scala/li/cil/oc/common/event/ChunkloaderUpgradeHandler.scala @@ -45,8 +45,15 @@ object ChunkloaderUpgradeHandler extends LoadingCallback { // so if the save is because the game is being quit the tickets aren't // actually being cleared. This will *usually* not be a problem, but it // has room for improvement. - restoredTickets.values.foreach(ticket => try ForgeChunkManager.releaseTicket(ticket) catch { - case _: Throwable => // Ignored. + restoredTickets.values.foreach(ticket => { + try{ + val data = ticket.getModData + OpenComputers.log.warn(s"A chunk loader ticket has been orphaned! Address: ${data.getString("address")}, position: (${data.getInteger("x")}, ${data.getInteger("z")}). Removing...") + ForgeChunkManager.releaseTicket(ticket) + } + catch { + case _: Throwable => // Ignored. + } }) restoredTickets.clear() } @@ -73,9 +80,6 @@ object ChunkloaderUpgradeHandler extends LoadingCallback { val robotChunks = (for (x <- -1 to 1; z <- -1 to 1) yield new ChunkPos(centerChunk.x + x, centerChunk.z + z)).toSet loader.ticket.foreach(ticket => { - if (ticket.getType() == ForgeChunkManager.Type.ENTITY && ticket.getEntity() == null && loader.host.isInstanceOf[Entity]) - ticket.bindEntity(loader.host.asInstanceOf[Entity]) - ticket.getChunkList.collect { case chunk: ChunkPos if !robotChunks.contains(chunk) => ForgeChunkManager.unforceChunk(ticket, chunk) } diff --git a/src/main/scala/li/cil/oc/server/component/DebugCard.scala b/src/main/scala/li/cil/oc/server/component/DebugCard.scala index c7b9057db..10b517140 100644 --- a/src/main/scala/li/cil/oc/server/component/DebugCard.scala +++ b/src/main/scala/li/cil/oc/server/component/DebugCard.scala @@ -664,7 +664,19 @@ object DebugCard { @Callback(doc = """function(x:number, y:number, z:number):number -- Get the metadata of the block at the specified coordinates.""") def getMetadata(context: Context, args: Arguments): Array[AnyRef] = { checkAccess() - result(world.getBlockState(new BlockPos(args.checkInteger(0), args.checkInteger(1), args.checkInteger(2)))) + val state = world.getBlockState(new BlockPos(args.checkInteger(0), args.checkInteger(1), args.checkInteger(2))) + result(state.getBlock.getMetaFromState(state)) + } + + @Callback(doc = """function(x:number, y:number, z:number[, actualState:boolean=false]) - gets the block state for the block at the specified position, optionally getting additional display related data""") + def getBlockState(context: Context, args: Arguments): Array[AnyRef] = { + checkAccess() + val pos = new BlockPos(args.checkInteger(0), args.checkInteger(1), args.checkInteger(2)) + var state = world.getBlockState(pos) + if (args.optBoolean(3, false)) { + state = state.getActualState(world, pos) + } + result(state) } @Callback(doc = """function(x:number, y:number, z:number):number -- Check whether the block at the specified coordinates is loaded.""") diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala index d0c4bd587..70457ba9d 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala @@ -69,7 +69,7 @@ class UpgradeChunkloader(val host: EnvironmentHost) extends AbstractManagedEnvir OpenComputers.log.info(s"Reclaiming chunk loader ticket at (${host.xPosition()}, ${host.yPosition()}, ${host.zPosition()}) in dimension ${host.world().provider.getDimension}.") } ticket = ChunkloaderUpgradeHandler.restoredTickets.remove(node.address).orElse(host match { - case context: Context if context.isRunning => Option(ForgeChunkManager.requestTicket(OpenComputers, host.world, if (host.isInstanceOf[Entity]) ForgeChunkManager.Type.ENTITY else ForgeChunkManager.Type.NORMAL)) + case context: Context if context.isRunning => Option(ForgeChunkManager.requestTicket(OpenComputers, host.world, ForgeChunkManager.Type.NORMAL)) case _ => None }) ChunkloaderUpgradeHandler.updateLoadedChunk(this) @@ -98,7 +98,7 @@ class UpgradeChunkloader(val host: EnvironmentHost) extends AbstractManagedEnvir private def setActive(enabled: Boolean) = { if (enabled && ticket.isEmpty) { - ticket = Option(ForgeChunkManager.requestTicket(OpenComputers, host.world, if (host.isInstanceOf[Entity]) ForgeChunkManager.Type.ENTITY else ForgeChunkManager.Type.NORMAL)) + ticket = Option(ForgeChunkManager.requestTicket(OpenComputers, host.world, ForgeChunkManager.Type.NORMAL)) ChunkloaderUpgradeHandler.updateLoadedChunk(this) } else if (!enabled && ticket.isDefined) {