diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index 5b0fc62e46..5dc44b1264 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -70,7 +70,7 @@ import net.runelite.client.events.PluginChanged; import net.runelite.client.task.Schedule; import net.runelite.client.task.ScheduledMethod; import net.runelite.client.task.Scheduler; -import net.runelite.client.util.SceneTileManager; +import net.runelite.client.util.GameEventManager; @Singleton @Slf4j @@ -86,7 +86,7 @@ public class PluginManager private final Scheduler scheduler; private final ConfigManager configManager; private final ScheduledExecutorService executor; - private final Provider sceneTileManager; + private final Provider sceneTileManager; private final List plugins = new CopyOnWriteArrayList<>(); private final List activePlugins = new CopyOnWriteArrayList<>(); private final String runeliteGroupName = RuneLiteConfig.class @@ -103,7 +103,7 @@ public class PluginManager final Scheduler scheduler, final ConfigManager configManager, final ScheduledExecutorService executor, - final Provider sceneTileManager) + final Provider sceneTileManager) { this.developerMode = developerMode; this.eventBus = eventBus; @@ -326,10 +326,10 @@ public class PluginManager log.debug("Plugin {} is now running", plugin.getClass().getSimpleName()); if (!isOutdated && sceneTileManager != null) { - final SceneTileManager sceneTileManager = this.sceneTileManager.get(); - if (sceneTileManager != null) + final GameEventManager gameEventManager = this.sceneTileManager.get(); + if (gameEventManager != null) { - sceneTileManager.simulateObjectSpawns(plugin); + gameEventManager.simulateGameEvents(plugin); } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/SceneTileManager.java b/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java similarity index 88% rename from runelite-client/src/main/java/net/runelite/client/util/SceneTileManager.java rename to runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java index fe6c41b094..5483f95296 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/SceneTileManager.java +++ b/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java @@ -34,24 +34,27 @@ import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.Constants; import net.runelite.api.GameState; +import net.runelite.api.InventoryID; import net.runelite.api.Item; +import net.runelite.api.ItemContainer; import net.runelite.api.Node; import net.runelite.api.Scene; import net.runelite.api.Tile; import net.runelite.api.events.DecorativeObjectSpawned; import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GroundObjectSpawned; +import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.ItemSpawned; import net.runelite.api.events.WallObjectSpawned; @Singleton -public class SceneTileManager +public class GameEventManager { private final EventBus eventBus = new EventBus(); private final Client client; @Inject - private SceneTileManager(Client client) + private GameEventManager(Client client) { this.client = client; } @@ -61,12 +64,8 @@ public class SceneTileManager * * @param consumer consumer accepting tile as parameter */ - public void forEachTile(Consumer consumer) + private void forEachTile(Consumer consumer) { - if (client.getGameState() != GameState.LOGGED_IN) - { - return; - } final Scene scene = client.getScene(); final Tile[][][] tiles = scene.getTiles(); @@ -91,14 +90,29 @@ public class SceneTileManager } /** - * Simulate object spawns for EventBus subscriber + * Simulate game events for EventBus subscriber * * @param subscriber EventBus subscriber */ - public void simulateObjectSpawns(Object subscriber) + public void simulateGameEvents(Object subscriber) { + if (client.getGameState() != GameState.LOGGED_IN) + { + return; + } + eventBus.register(subscriber); + for (final InventoryID inventory : InventoryID.values()) + { + final ItemContainer itemContainer = client.getItemContainer(inventory); + + if (itemContainer != null) + { + eventBus.post(new ItemContainerChanged(itemContainer)); + } + } + forEachTile((tile) -> { Optional.ofNullable(tile.getWallObject()).ifPresent(object ->