From 6a062f1821e0ad55f6eb1b0f08460b1de79341db Mon Sep 17 00:00:00 2001 From: repo_alt Date: Mon, 11 Jan 2021 21:45:43 +0300 Subject: [PATCH] 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 --- build.gradle | 3 ++ build.properties | 4 +-- .../integration/appeng/NetworkControl.scala | 28 ++++++++++++++++--- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 9b328d282..10abe5c34 100644 --- a/build.gradle +++ b/build.gradle @@ -115,6 +115,9 @@ repositories { name 'UsrvDE' url "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases/" } + maven { + url "http://downloads.gtnewhorizons.com/Mods_for_Jenkins/" + } } configurations { diff --git a/build.properties b/build.properties index b70843bac..ce5f33805 100644 --- a/build.properties +++ b/build.properties @@ -1,9 +1,9 @@ minecraft.version=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 bloodmagic.cf=2223/203 bloodmagic.version=1.3.0a-1 diff --git a/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala b/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala index c41389852..3c72f0b1f 100644 --- a/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala +++ b/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala @@ -1,11 +1,14 @@ package li.cil.oc.integration.appeng +import java.lang + import appeng.api.AEApi import appeng.api.config.Actionable import appeng.api.networking.crafting.ICraftingLink import appeng.api.networking.crafting.ICraftingRequester -import appeng.api.networking.security.IActionHost -import appeng.api.networking.security.MachineSource +import appeng.api.networking.security.{BaseActionSource, IActionHost, MachineSource} +import appeng.api.networking.storage.IBaseMonitor +import appeng.api.storage.IMEMonitorHandlerReceiver import appeng.api.storage.data.{IAEItemStack, IItemList} import appeng.me.helpers.IGridProxyable 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) + if (controller != null) + controller.getProxy.getStorage.getItemInventory.addListener(this, null) var items : IItemList[IAEItemStack] = null var i : java.util.Iterator[IAEItemStack] = null var index = 0 @@ -350,8 +355,11 @@ object NetworkControl { index = nbt.getInteger("index") EventHandler.scheduleServer(() => { 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] + if (controller!= null) + controller.getProxy.getStorage.getItemInventory.addListener(this, null) + } }) } } @@ -365,6 +373,18 @@ object NetworkControl { 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 = { val patterns = tile.getProxy.getCrafting.getCraftingFor(aeItem, null, 0, tile.getWorldObj)