From 2eca81e2ba67d0892d2b68c1794f2efbc3f81cc0 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Tue, 16 Oct 2018 21:42:33 +0200 Subject: [PATCH] Invoke GameEventManager events on ClientThread Signed-off-by: Tomas Slusny --- .../client/util/GameEventManager.java | 148 +++++++++--------- 1 file changed, 77 insertions(+), 71 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java b/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java index e82b7af4fc..88e69d8d78 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java +++ b/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java @@ -50,17 +50,20 @@ import net.runelite.api.events.ItemSpawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.PlayerSpawned; import net.runelite.api.events.WallObjectSpawned; +import net.runelite.client.callback.ClientThread; @Singleton public class GameEventManager { private final EventBus eventBus = new EventBus(); private final Client client; + private final ClientThread clientThread; @Inject - private GameEventManager(Client client) + private GameEventManager(Client client, ClientThread clientThread) { this.client = client; + this.clientThread = clientThread; } /** @@ -70,7 +73,6 @@ public class GameEventManager */ private void forEachTile(Consumer consumer) { - final Scene scene = client.getScene(); final Tile[][][] tiles = scene.getTiles(); @@ -105,88 +107,92 @@ public class GameEventManager return; } - eventBus.register(subscriber); - - for (final InventoryID inventory : InventoryID.values()) + clientThread.invoke(() -> { - final ItemContainer itemContainer = client.getItemContainer(inventory); - if (itemContainer != null) + eventBus.register(subscriber); + + for (final InventoryID inventory : InventoryID.values()) { - eventBus.post(new ItemContainerChanged(itemContainer)); - } - } + final ItemContainer itemContainer = client.getItemContainer(inventory); - for (NPC npc : client.getCachedNPCs()) - { - if (npc != null) - { - final NpcSpawned npcSpawned = new NpcSpawned(npc); - eventBus.post(npcSpawned); - } - } - - for (Player player : client.getCachedPlayers()) - { - if (player != null) - { - final PlayerSpawned playerSpawned = new PlayerSpawned(player); - eventBus.post(playerSpawned); - } - } - - forEachTile((tile) -> - { - Optional.ofNullable(tile.getWallObject()).ifPresent(object -> - { - final WallObjectSpawned objectSpawned = new WallObjectSpawned(); - objectSpawned.setTile(tile); - objectSpawned.setWallObject(object); - eventBus.post(objectSpawned); - }); - - Optional.ofNullable(tile.getDecorativeObject()).ifPresent(object -> - { - final DecorativeObjectSpawned objectSpawned = new DecorativeObjectSpawned(); - objectSpawned.setTile(tile); - objectSpawned.setDecorativeObject(object); - eventBus.post(objectSpawned); - }); - - Optional.ofNullable(tile.getGroundObject()).ifPresent(object -> - { - final GroundObjectSpawned objectSpawned = new GroundObjectSpawned(); - objectSpawned.setTile(tile); - objectSpawned.setGroundObject(object); - eventBus.post(objectSpawned); - }); - - Arrays.stream(tile.getGameObjects()) - .filter(Objects::nonNull) - .forEach(object -> + if (itemContainer != null) { - final GameObjectSpawned objectSpawned = new GameObjectSpawned(); + eventBus.post(new ItemContainerChanged(itemContainer)); + } + } + + for (NPC npc : client.getCachedNPCs()) + { + if (npc != null) + { + final NpcSpawned npcSpawned = new NpcSpawned(npc); + eventBus.post(npcSpawned); + } + } + + for (Player player : client.getCachedPlayers()) + { + if (player != null) + { + final PlayerSpawned playerSpawned = new PlayerSpawned(player); + eventBus.post(playerSpawned); + } + } + + forEachTile((tile) -> + { + Optional.ofNullable(tile.getWallObject()).ifPresent(object -> + { + final WallObjectSpawned objectSpawned = new WallObjectSpawned(); objectSpawned.setTile(tile); - objectSpawned.setGameObject(object); + objectSpawned.setWallObject(object); eventBus.post(objectSpawned); }); - Optional.ofNullable(tile.getItemLayer()).ifPresent(itemLayer -> - { - Node current = itemLayer.getBottom(); - - while (current instanceof Item) + Optional.ofNullable(tile.getDecorativeObject()).ifPresent(object -> { - final Item item = (Item) current; + final DecorativeObjectSpawned objectSpawned = new DecorativeObjectSpawned(); + objectSpawned.setTile(tile); + objectSpawned.setDecorativeObject(object); + eventBus.post(objectSpawned); + }); - current = current.getNext(); + Optional.ofNullable(tile.getGroundObject()).ifPresent(object -> + { + final GroundObjectSpawned objectSpawned = new GroundObjectSpawned(); + objectSpawned.setTile(tile); + objectSpawned.setGroundObject(object); + eventBus.post(objectSpawned); + }); - final ItemSpawned itemSpawned = new ItemSpawned(tile, item); - eventBus.post(itemSpawned); - } + Arrays.stream(tile.getGameObjects()) + .filter(Objects::nonNull) + .forEach(object -> + { + final GameObjectSpawned objectSpawned = new GameObjectSpawned(); + objectSpawned.setTile(tile); + objectSpawned.setGameObject(object); + eventBus.post(objectSpawned); + }); + + Optional.ofNullable(tile.getItemLayer()).ifPresent(itemLayer -> + { + Node current = itemLayer.getBottom(); + + while (current instanceof Item) + { + final Item item = (Item) current; + + current = current.getNext(); + + final ItemSpawned itemSpawned = new ItemSpawned(tile, item); + eventBus.post(itemSpawned); + } + }); }); - }); - eventBus.unregister(subscriber); + eventBus.unregister(subscriber); + }); } }