From 93218f4ff70f3ef70647651e72b3d9c68db855ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Thu, 17 Jul 2014 16:02:36 +0200 Subject: [PATCH] The Optional.Method annotation seems to not work in dev-env in some cases... trying to work around that to fix absence of FMP and Waila related crashes in dev-env. --- .../scala/li/cil/oc/common/EventHandler.scala | 48 +++++++++++-------- .../cil/oc/common/multipart/CablePart.scala | 2 +- .../li/cil/oc/common/tileentity/Rack.scala | 4 +- .../common/tileentity/traits/Computer.scala | 4 +- src/main/scala/li/cil/oc/util/mods/Mods.scala | 1 + 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/EventHandler.scala b/src/main/scala/li/cil/oc/common/EventHandler.scala index 3fd9d7176..f277f1a67 100644 --- a/src/main/scala/li/cil/oc/common/EventHandler.scala +++ b/src/main/scala/li/cil/oc/common/EventHandler.scala @@ -30,38 +30,46 @@ import scala.collection.mutable object EventHandler extends ITickHandler with IConnectionHandler with ICraftingHandler { val pending = mutable.Buffer.empty[() => Unit] - def schedule(tileEntity: TileEntity) = + def schedule(tileEntity: TileEntity) { if (FMLCommonHandler.instance.getEffectiveSide.isServer) pending.synchronized { pending += (() => Network.joinOrCreateNetwork(tileEntity)) } + } @Optional.Method(modid = "ForgeMultipart") - def schedule(part: TMultiPart) = + def schedule(tileEntity: () => TileEntity) { if (FMLCommonHandler.instance.getEffectiveSide.isServer) pending.synchronized { - pending += (() => Network.joinOrCreateNetwork(part.tile)) + pending += (() => Network.joinOrCreateNetwork(tileEntity())) } - - @Optional.Method(modid = "IC2") - def scheduleIC2Add(tileEntity: power.IndustrialCraft2) = if (FMLCommonHandler.instance.getEffectiveSide.isServer) pending.synchronized { - pending += (() => if (!tileEntity.addedToPowerGrid && !tileEntity.isInvalid) { - MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(tileEntity)) - tileEntity.addedToPowerGrid = true - }) } @Optional.Method(modid = "IC2") - def scheduleIC2Remove(tileEntity: power.IndustrialCraft2) = if (FMLCommonHandler.instance.getEffectiveSide.isServer) pending.synchronized { - pending += (() => if (tileEntity.addedToPowerGrid) { - MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(tileEntity)) - tileEntity.addedToPowerGrid = false - }) + def scheduleIC2Add(tileEntity: power.IndustrialCraft2) { + if (FMLCommonHandler.instance.getEffectiveSide.isServer) pending.synchronized { + pending += (() => if (!tileEntity.addedToPowerGrid && !tileEntity.isInvalid) { + MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(tileEntity)) + tileEntity.addedToPowerGrid = true + }) + } } - def scheduleWirelessRedstone(rs: server.component.RedstoneWireless) = if (FMLCommonHandler.instance.getEffectiveSide.isServer) pending.synchronized { - pending += (() => if (!rs.owner.isInvalid) { - mods.WirelessRedstone.addReceiver(rs) - mods.WirelessRedstone.updateOutput(rs) - }) + @Optional.Method(modid = "IC2") + def scheduleIC2Remove(tileEntity: power.IndustrialCraft2) { + if (FMLCommonHandler.instance.getEffectiveSide.isServer) pending.synchronized { + pending += (() => if (tileEntity.addedToPowerGrid) { + MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(tileEntity)) + tileEntity.addedToPowerGrid = false + }) + } + } + + def scheduleWirelessRedstone(rs: server.component.RedstoneWireless) { + if (FMLCommonHandler.instance.getEffectiveSide.isServer) pending.synchronized { + pending += (() => if (!rs.owner.isInvalid) { + mods.WirelessRedstone.addReceiver(rs) + mods.WirelessRedstone.updateOutput(rs) + }) + } } override def getLabel = "OpenComputers Network Initialization Ticker" diff --git a/src/main/scala/li/cil/oc/common/multipart/CablePart.scala b/src/main/scala/li/cil/oc/common/multipart/CablePart.scala index 478892897..01dbae1e2 100644 --- a/src/main/scala/li/cil/oc/common/multipart/CablePart.scala +++ b/src/main/scala/li/cil/oc/common/multipart/CablePart.scala @@ -43,7 +43,7 @@ class CablePart(val original: Option[Node] = None) extends DelegatePart with TCu override def onWorldJoin() { super.onWorldJoin() - common.EventHandler.schedule(this) + common.EventHandler.schedule(() => tile) } override def onWorldSeparate() { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala index 11f6c1b56..6b5dc3fef 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala @@ -8,7 +8,7 @@ import li.cil.oc.api.network.{Analyzable, Connector, Node, Visibility} import li.cil.oc.client.Sound import li.cil.oc.server.{component, driver, PacketSender => ServerPacketSender} import li.cil.oc.util.ExtendedNBT._ -import li.cil.oc.util.mods.Waila +import li.cil.oc.util.mods.{Mods, Waila} import li.cil.oc.{Localization, Settings, api, common} import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack @@ -261,7 +261,7 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance // Side check for Waila (and other mods that may call this client side). override def writeToNBT(nbt: NBTTagCompound) = if (isServer) { - if (!Waila.isSavingForTooltip) { + if (!Mods.Waila.isAvailable || !Waila.isSavingForTooltip) { nbt.setNewTagList(Settings.namespace + "servers", servers map { case Some(server) => val serverNbt = new NBTTagCompound() diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala index 2818d14d6..d3cb6edbf 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala @@ -9,7 +9,7 @@ import li.cil.oc.client.Sound import li.cil.oc.common.tileentity.RobotProxy import li.cil.oc.server.{driver, PacketSender => ServerPacketSender} import li.cil.oc.util.ExtendedNBT._ -import li.cil.oc.util.mods.Waila +import li.cil.oc.util.mods.{Mods, Waila} import li.cil.oc.{Localization, Settings} import net.minecraft.entity.player.EntityPlayer import net.minecraft.nbt.{NBTTagCompound, NBTTagString} @@ -148,7 +148,7 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B override def writeToNBT(nbt: NBTTagCompound) { super.writeToNBT(nbt) - if (computer != null && !Waila.isSavingForTooltip) { + if (computer != null && (!Mods.Waila.isAvailable || !Waila.isSavingForTooltip)) { nbt.setNewCompoundTag(Settings.namespace + "computer", computer.save) } } diff --git a/src/main/scala/li/cil/oc/util/mods/Mods.scala b/src/main/scala/li/cil/oc/util/mods/Mods.scala index 062c8a723..f0d12a2d2 100644 --- a/src/main/scala/li/cil/oc/util/mods/Mods.scala +++ b/src/main/scala/li/cil/oc/util/mods/Mods.scala @@ -36,6 +36,7 @@ object Mods { val ThermalExpansion = new SimpleMod("ThermalExpansion") val TinkersConstruct = new SimpleMod("TConstruct") val UniversalElectricity = new SimpleMod("UniversalElectricity@[3.1,)") + val Waila = new SimpleMod("Waila") val WirelessRedstoneCBE = new SimpleMod("WR-CBE|Core") val WirelessRedstoneSV = new SimpleMod("WirelessRedstoneCore")