fixed AE network iterator being unsafe if the network changes when iterating (iteration may not fit in one tick, even if not suspended)

updated AE dependency
This commit is contained in:
repo_alt 2021-01-11 21:45:43 +03:00
parent 5f03fd3696
commit 6a062f1821
3 changed files with 29 additions and 6 deletions

View File

@ -115,6 +115,9 @@ repositories {
name 'UsrvDE' name 'UsrvDE'
url "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases/" url "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases/"
} }
maven {
url "http://downloads.gtnewhorizons.com/Mods_for_Jenkins/"
}
} }
configurations { configurations {

View File

@ -1,9 +1,9 @@
minecraft.version=1.7.10 minecraft.version=1.7.10
forge.version=10.13.4.1614-1.7.10 forge.version=10.13.4.1614-1.7.10
oc.version=1.7.5.8-GTNH oc.version=1.7.5.9-GTNH
ae2.version=rv2-beta-26 ae2.version=rv3-beta-31
bc.version=7.0.9 bc.version=7.0.9
bloodmagic.cf=2223/203 bloodmagic.cf=2223/203
bloodmagic.version=1.3.0a-1 bloodmagic.version=1.3.0a-1

View File

@ -1,11 +1,14 @@
package li.cil.oc.integration.appeng package li.cil.oc.integration.appeng
import java.lang
import appeng.api.AEApi import appeng.api.AEApi
import appeng.api.config.Actionable import appeng.api.config.Actionable
import appeng.api.networking.crafting.ICraftingLink import appeng.api.networking.crafting.ICraftingLink
import appeng.api.networking.crafting.ICraftingRequester import appeng.api.networking.crafting.ICraftingRequester
import appeng.api.networking.security.IActionHost import appeng.api.networking.security.{BaseActionSource, IActionHost, MachineSource}
import appeng.api.networking.security.MachineSource import appeng.api.networking.storage.IBaseMonitor
import appeng.api.storage.IMEMonitorHandlerReceiver
import appeng.api.storage.data.{IAEItemStack, IItemList} import appeng.api.storage.data.{IAEItemStack, IItemList}
import appeng.me.helpers.IGridProxyable import appeng.me.helpers.IGridProxyable
import appeng.util.item.AEItemStack import appeng.util.item.AEItemStack
@ -315,9 +318,11 @@ object NetworkControl {
} }
} }
class NetworkContents(var controller: TileEntity with IGridProxyable) extends AbstractValue class NetworkContents(var controller: TileEntity with IGridProxyable) extends AbstractValue with IMEMonitorHandlerReceiver[IAEItemStack]
{ {
def this() = this(null) def this() = this(null)
if (controller != null)
controller.getProxy.getStorage.getItemInventory.addListener(this, null)
var items : IItemList[IAEItemStack] = null var items : IItemList[IAEItemStack] = null
var i : java.util.Iterator[IAEItemStack] = null var i : java.util.Iterator[IAEItemStack] = null
var index = 0 var index = 0
@ -350,8 +355,11 @@ object NetworkControl {
index = nbt.getInteger("index") index = nbt.getInteger("index")
EventHandler.scheduleServer(() => { EventHandler.scheduleServer(() => {
val tileEntity = DimensionManager.getWorld(dimension).getTileEntity(x, y, z) val tileEntity = DimensionManager.getWorld(dimension).getTileEntity(x, y, z)
if (tileEntity != null && tileEntity.isInstanceOf[TileEntity with IGridProxyable]) if (tileEntity != null && tileEntity.isInstanceOf[TileEntity with IGridProxyable]) {
controller = tileEntity.asInstanceOf[TileEntity with IGridProxyable] controller = tileEntity.asInstanceOf[TileEntity with IGridProxyable]
if (controller!= null)
controller.getProxy.getStorage.getItemInventory.addListener(this, null)
}
}) })
} }
} }
@ -365,6 +373,18 @@ object NetworkControl {
nbt.setInteger("z", controller.zCoord) nbt.setInteger("z", controller.zCoord)
} }
} }
var valid = true
def dispose(context: Nothing): Unit = {
valid = false
}
override def isValid(verificationToken: Any): Boolean = valid
override def onListUpdate(): Unit = {
this.items = null
}
override def postChange(monitor: IBaseMonitor[IAEItemStack], change: lang.Iterable[IAEItemStack], actionSource: BaseActionSource): Unit = {
this.items = null
}
} }
def aeCraftItem(aeItem: IAEItemStack, tile: TileEntity with IGridProxyable): IAEItemStack = { def aeCraftItem(aeItem: IAEItemStack, tile: TileEntity with IGridProxyable): IAEItemStack = {
val patterns = tile.getProxy.getCrafting.getCraftingFor(aeItem, null, 0, tile.getWorldObj) val patterns = tile.getProxy.getCrafting.getCraftingFor(aeItem, null, 0, tile.getWorldObj)