From d227c59c01f2a940dd2144fb991025e4a440f3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 7 Feb 2014 23:09:50 +0100 Subject: [PATCH] merged some of the event classes; fixed crash in keyboard event handler by moving it directly into the class --- .../oc/client/gui/DynamicGuiContainer.scala | 1 - .../renderer/tileentity/ScreenRenderer.scala | 5 +- .../li/cil/oc/common/ConnectionHandler.scala | 33 ----------- .../EventHandler.scala} | 36 ++++++++++-- src/main/scala/li/cil/oc/common/Proxy.scala | 7 +-- .../li/cil/oc/server/component/Keyboard.scala | 58 ++++++++----------- 6 files changed, 59 insertions(+), 81 deletions(-) delete mode 100644 src/main/scala/li/cil/oc/common/ConnectionHandler.scala rename src/main/scala/li/cil/oc/{CraftingHandler.scala => common/EventHandler.scala} (65%) diff --git a/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala b/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala index 106832f4a..873bb0d1a 100644 --- a/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala +++ b/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala @@ -19,7 +19,6 @@ abstract class DynamicGuiContainer(container: Container) extends GuiContainer(co drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize) } - // TODO private now? // override def drawSlotInventory(slot: Slot) { // if (slot.slotNumber < container.inventorySlots.size() - 36) { diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala index 9a962fbb1..1b0170fa0 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala @@ -2,7 +2,7 @@ package li.cil.oc.client.renderer.tileentity import com.google.common.cache.{CacheBuilder, RemovalNotification, RemovalListener} import cpw.mods.fml.common.eventhandler.SubscribeEvent -import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent +import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent import java.util.concurrent.{TimeUnit, Callable} import li.cil.oc.Settings import li.cil.oc.client.Textures @@ -246,7 +246,6 @@ object ScreenRenderer extends TileEntitySpecialRenderer with Callable[Int] with GLAllocation.deleteDisplayLists(e.getValue) } - @SubscribeEvent - def onTick(e: WorldTickEvent) = cache.cleanUp() + def onTick(e: ClientTickEvent) = cache.cleanUp() } \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/common/ConnectionHandler.scala b/src/main/scala/li/cil/oc/common/ConnectionHandler.scala deleted file mode 100644 index 45e29f2ce..000000000 --- a/src/main/scala/li/cil/oc/common/ConnectionHandler.scala +++ /dev/null @@ -1,33 +0,0 @@ -package li.cil.oc.common - -import cpw.mods.fml.common.{FMLCommonHandler, Loader} -import cpw.mods.fml.common.eventhandler.SubscribeEvent -import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent -import li.cil.oc.Settings -import li.cil.oc.util.LuaStateFactory -import li.cil.oc.util.mods.ProjectRed -import net.minecraft.entity.player.EntityPlayerMP -import net.minecraft.util.{ChatComponentText, ChatComponentTranslation} - -object ConnectionHandler { - - @SubscribeEvent - def playerLoggedIn(e: PlayerLoggedInEvent) { - if (FMLCommonHandler.instance.getEffectiveSide.isServer) e.player match { - case player: EntityPlayerMP => - if (!LuaStateFactory.isAvailable) { - player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling( - new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningLuaFallback"))) - } - if (ProjectRed.isAvailable && !ProjectRed.isAPIAvailable) { - player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling( - new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningProjectRed"))) - } - if (!Settings.get.pureIgnorePower && !Loader.isModLoaded("UniversalElectricity")) { - player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling( - new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningPower"))) - } - case _ => - } - } -} diff --git a/src/main/scala/li/cil/oc/CraftingHandler.scala b/src/main/scala/li/cil/oc/common/EventHandler.scala similarity index 65% rename from src/main/scala/li/cil/oc/CraftingHandler.scala rename to src/main/scala/li/cil/oc/common/EventHandler.scala index ac8693466..2f1e3436a 100644 --- a/src/main/scala/li/cil/oc/CraftingHandler.scala +++ b/src/main/scala/li/cil/oc/common/EventHandler.scala @@ -1,12 +1,38 @@ -package li.cil.oc +package li.cil.oc.common -import cpw.mods.fml.common.eventhandler.SubscribeEvent -import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent +import cpw.mods.fml.common.eventhandler.{Event, SubscribeEvent} +import cpw.mods.fml.common.gameevent.PlayerEvent._ +import cpw.mods.fml.common.{Loader, FMLCommonHandler} import li.cil.oc.server.driver.Registry +import li.cil.oc.util.LuaStateFactory +import li.cil.oc.{Items, Settings} import li.cil.oc.util.ExtendedNBT._ +import li.cil.oc.util.mods.ProjectRed +import net.minecraft.entity.player.{EntityPlayerMP, EntityPlayer} import net.minecraft.item.{ItemMap, ItemStack} +import net.minecraft.util.{ChatComponentTranslation, ChatComponentText} + +object EventHandler { + @SubscribeEvent + def playerLoggedIn(e: PlayerLoggedInEvent) { + if (FMLCommonHandler.instance.getEffectiveSide.isServer) e.player match { + case player: EntityPlayerMP => + if (!LuaStateFactory.isAvailable) { + player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling( + new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningLuaFallback"))) + } + if (ProjectRed.isAvailable && !ProjectRed.isAPIAvailable) { + player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling( + new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningProjectRed"))) + } + if (!Settings.get.pureIgnorePower && !Loader.isModLoaded("UniversalElectricity")) { + player.addChatMessage(new ChatComponentText("§aOpenComputers§f: ").appendSibling( + new ChatComponentTranslation(Settings.namespace + "gui.Chat.WarningPower"))) + } + case _ => + } + } -object CraftingHandler { @SubscribeEvent def onCrafting(e: ItemCraftedEvent) = { val player = e.player @@ -68,4 +94,4 @@ object CraftingHandler { } } } -} +} \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/common/Proxy.scala b/src/main/scala/li/cil/oc/common/Proxy.scala index 644736a67..5bedffa31 100644 --- a/src/main/scala/li/cil/oc/common/Proxy.scala +++ b/src/main/scala/li/cil/oc/common/Proxy.scala @@ -1,17 +1,16 @@ package li.cil.oc.common +import cpw.mods.fml.common.FMLCommonHandler import cpw.mods.fml.common.event._ import cpw.mods.fml.common.network.NetworkRegistry import li.cil.oc._ import li.cil.oc.server -import li.cil.oc.server.component.Keyboard import li.cil.oc.server.driver import li.cil.oc.server.fs import li.cil.oc.server.network import li.cil.oc.server.network.Network import li.cil.oc.util.WirelessNetwork import net.minecraftforge.common.MinecraftForge -import cpw.mods.fml.common.FMLCommonHandler class Proxy { def preInit(e: FMLPreInitializationEvent): Unit = { @@ -43,7 +42,6 @@ class Proxy { Recipes.init() - FMLCommonHandler.instance().bus().register(CraftingHandler) OpenComputers.channel = NetworkRegistry.INSTANCE.newEventDrivenChannel("OpenComputers") OpenComputers.channel.register(server.PacketHandler) } @@ -52,8 +50,7 @@ class Proxy { // Don't allow driver registration after this point, to avoid issues. driver.Registry.locked = true - FMLCommonHandler.instance().bus().register(Keyboard) - FMLCommonHandler.instance().bus().register(ConnectionHandler) + FMLCommonHandler.instance().bus().register(EventHandler) MinecraftForge.EVENT_BUS.register(Network) MinecraftForge.EVENT_BUS.register(WirelessNetwork) } diff --git a/src/main/scala/li/cil/oc/server/component/Keyboard.scala b/src/main/scala/li/cil/oc/server/component/Keyboard.scala index 37c7e0261..153f73b78 100644 --- a/src/main/scala/li/cil/oc/server/component/Keyboard.scala +++ b/src/main/scala/li/cil/oc/server/component/Keyboard.scala @@ -1,14 +1,13 @@ package li.cil.oc.server.component -import cpw.mods.fml.common.eventhandler.{Event, SubscribeEvent} +import cpw.mods.fml.common.FMLCommonHandler +import cpw.mods.fml.common.eventhandler.SubscribeEvent import cpw.mods.fml.common.gameevent.PlayerEvent.{PlayerLoggedOutEvent, PlayerChangedDimensionEvent, PlayerRespawnEvent} import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.network.{Node, Visibility, Message} import net.minecraft.entity.player.EntityPlayer -import net.minecraftforge.common.MinecraftForge import scala.collection.mutable -import cpw.mods.fml.common.FMLCommonHandler // TODO key up when screen is disconnected from which the key down came // TODO key up after load for anything that was pressed @@ -23,32 +22,46 @@ abstract class Keyboard extends ManagedComponent { // ----------------------------------------------------------------------- // @SubscribeEvent - def onReleasePressedKeys(e: Keyboard.ReleasePressedKeys) { - pressedKeys.get(e.player) match { + def onPlayerRespawn(e: PlayerRespawnEvent) { + releasePressedKeys(e.player) + } + + @SubscribeEvent + def onPlayerChangedDimension(e: PlayerChangedDimensionEvent) { + releasePressedKeys(e.player) + } + + @SubscribeEvent + def onPlayerLogout(e: PlayerLoggedOutEvent) { + releasePressedKeys(e.player) + } + + def releasePressedKeys(player: EntityPlayer) { + pressedKeys.get(player) match { case Some(keys) => for ((code, char) <- keys) { if (Settings.get.inputUsername) { - signal(e.player, "key_up", char, code, e.player.getCommandSenderName) + signal(player, "key_up", char, code, player.getCommandSenderName) } else { - signal(e.player, "key_up", char, code) + signal(player, "key_up", char, code) } } case _ => } - pressedKeys.remove(e.player) + pressedKeys.remove(player) } // ----------------------------------------------------------------------- // override def onConnect(node: Node) { if (node == this.node) { - FMLCommonHandler.instance().bus().register(this) + FMLCommonHandler.instance.bus.register(this) } } override def onDisconnect(node: Node) { if (node == this.node) { - FMLCommonHandler.instance().bus().unregister(this) + FMLCommonHandler.instance.bus.unregister(this) } } @@ -97,27 +110,4 @@ abstract class Keyboard extends ManagedComponent { protected def signal(args: AnyRef*) = node.sendToReachable("computer.checked_signal", args: _*) -} - - -object Keyboard { - - @SubscribeEvent - def onPlayerRespawn(e: PlayerRespawnEvent) { - FMLCommonHandler.instance().bus().post(new ReleasePressedKeys(e.player)) - } - - @SubscribeEvent - def onPlayerChangedDimension(e: PlayerChangedDimensionEvent) { - //TODO Throws exception - FMLCommonHandler.instance().bus().post(new ReleasePressedKeys(e.player)) - } - - @SubscribeEvent - def onPlayerLogout(e: PlayerLoggedOutEvent) { - FMLCommonHandler.instance().bus().post(new ReleasePressedKeys(e.player)) - } - - class ReleasePressedKeys(val player: EntityPlayer) extends Event - -} +} \ No newline at end of file