Skip to content
Open
225 changes: 30 additions & 195 deletions src/main/java/randomeventhelper/RandomEventHelperPlugin.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package randomeventhelper;

import com.google.common.collect.ImmutableMap;
import com.google.inject.Provides;
import java.util.Map;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Actor;
Expand Down Expand Up @@ -30,6 +32,7 @@
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.OverlayManager;
import randomeventhelper.pluginmodulesystem.PluginModule;
import randomeventhelper.randomevents.beekeeper.BeekeeperHelper;
import randomeventhelper.randomevents.drilldemon.DrillDemonHelper;
import randomeventhelper.randomevents.freakyforester.FreakyForesterHelper;
Expand Down Expand Up @@ -71,89 +74,35 @@ public class RandomEventHelperPlugin extends Plugin
private RandomEventHelperItemOverlay itemOverlay;

@Inject
private SurpriseExamHelper surpriseExamHelper;

@Inject
private BeekeeperHelper beekeeperHelper;

@Inject
private FreakyForesterHelper freakyForesterHelper;

@Inject
private PinballHelper pinballHelper;

@Inject
private DrillDemonHelper drillDemonHelper;

@Inject
private GravediggerHelper gravediggerHelper;

@Inject
private GravediggerOverlay gravediggerOverlay;
private PirateHelper pirateHelper;

@Inject
private MimeHelper mimeHelper;

@Inject
private MazeHelper mazeHelper;

@Inject
private SandwichLadyHelper sandwichLadyHelper;
private SurpriseExamHelper surpriseExamHelper;

@Inject
private QuizMasterHelper quizMasterHelper;

@Inject
private PirateHelper pirateHelper;
// <String, PluginModule> -> <configKeyForIsEnabled, PluginModuleInstance>
private Map<String, PluginModule> pluginModulesMap;

@Override
protected void startUp() throws Exception
{
this.overlayManager.add(overlay);
this.overlayManager.add(itemOverlay);
if (config.isSurpriseExamEnabled())
{
surpriseExamHelper.startUp();
}
if (config.isBeekeeperEnabled())
{
beekeeperHelper.startUp();
}
if (config.isFreakyForesterEnabled())
{
freakyForesterHelper.startUp();
}
if (config.isPinballEnabled())
{
pinballHelper.startUp();
}
if (config.isDrillDemonEnabled())
{
drillDemonHelper.startUp();
}
if (config.isGravediggerEnabled())
{
gravediggerHelper.startUp(gravediggerOverlay);
}
if (config.isMimeEnabled())
{
mimeHelper.startUp();
}
if (config.isMazeEnabled())
{
mazeHelper.startUp();
}
if (config.isSandwichLadyEnabled())
{
sandwichLadyHelper.startUp();
}
if (config.isQuizMasterEnabled())
{
quizMasterHelper.startUp();
}
if (config.isCaptArnavChestEnabled())

pluginModulesMap = ImmutableMap.<String, PluginModule>builder()
.put("isCaptArnavChestEnabled", pirateHelper)
.put("isMimeEnabled", mimeHelper)
.put("isSurpriseExamEnabled", surpriseExamHelper)
.build();
// Start only the enabled modules
for (PluginModule module : pluginModulesMap.values())
{
pirateHelper.startUp();
if (module.isEnabled())
{
module.startUp();
}
}
}

Expand All @@ -162,17 +111,11 @@ protected void shutDown() throws Exception
{
this.overlayManager.remove(overlay);
this.overlayManager.remove(itemOverlay);
surpriseExamHelper.shutDown();
beekeeperHelper.shutDown();
freakyForesterHelper.shutDown();
pinballHelper.shutDown();
drillDemonHelper.shutDown();
gravediggerHelper.shutDown();
mimeHelper.shutDown();
mazeHelper.shutDown();
sandwichLadyHelper.shutDown();
quizMasterHelper.shutDown();
pirateHelper.shutDown();
// Shutdown all modules regardless of their enabled state
for (PluginModule module : pluginModulesMap.values())
{
module.shutdown();
}
}

@Subscribe
Expand All @@ -181,125 +124,17 @@ public void onConfigChanged(ConfigChanged configChanged)
if (configChanged.getGroup().equals("randomeventhelper"))
{
log.debug("Config changed: {} | New value: {}", configChanged.getKey(), configChanged.getNewValue());
if (configChanged.getKey().equals("isSurpriseExamEnabled"))
{
if (config.isSurpriseExamEnabled())
{
surpriseExamHelper.startUp();
}
else
{
surpriseExamHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isBeekeeperEnabled"))
{
if (config.isBeekeeperEnabled())
{
beekeeperHelper.startUp();
}
else
{
beekeeperHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isFreakyForesterEnabled"))
{
if (config.isFreakyForesterEnabled())
{
freakyForesterHelper.startUp();
}
else
{
freakyForesterHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isPinballEnabled"))
{
if (config.isPinballEnabled())
{
pinballHelper.startUp();
}
else
{
pinballHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isDrillDemonEnabled"))
{
if (config.isDrillDemonEnabled())
{
drillDemonHelper.startUp();
}
else
{
drillDemonHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isGravediggerEnabled"))
{
if (config.isGravediggerEnabled())
{
gravediggerHelper.startUp(gravediggerOverlay);
}
else
{
gravediggerHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isMimeEnabled"))
{
if (config.isMimeEnabled())
{
mimeHelper.startUp();
}
else
{
mimeHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isMazeEnabled"))
{
if (config.isMazeEnabled())
{
mazeHelper.startUp();
}
else
{
mazeHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isSandwichLadyEnabled"))
{
if (config.isSandwichLadyEnabled())
{
sandwichLadyHelper.startUp();
}
else
{
sandwichLadyHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isQuizMasterEnabled"))
{
if (config.isQuizMasterEnabled())
{
quizMasterHelper.startUp();
}
else
{
quizMasterHelper.shutDown();
}
}
else if (configChanged.getKey().equals("isCaptArnavChestEnabled"))
// Let's first handle plugin module updates - so lets first check to see if the changed config key is a mapped module
PluginModule module = pluginModulesMap.get(configChanged.getKey());
if (module != null)
{
if (config.isCaptArnavChestEnabled())
if (module.isEnabled())
{
pirateHelper.startUp();
module.startUp();
}
else
{
pirateHelper.shutDown();
module.shutdown();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package randomeventhelper.pluginmodulesystem;

import javax.inject.Inject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.client.eventbus.EventBus;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.GameEventManager;
import randomeventhelper.RandomEventHelperConfig;

@Slf4j
// Thanks to Llemon for this - Since we are now relying on constructor injection, we will need a constructor followed by injecting it
// To keep it a little cleaner, you can still use lombok RAC and also pass in @Inject into it so that the constructor will be injected properly
// Also, keep in mind that we don't need to define final variables within the module classes themselves since they will be passed in via the constructor injection super call
@RequiredArgsConstructor(onConstructor = @__(@Inject))
public abstract class PluginModule
{
// It's fine to field inject these since we only need access to them here and not in the module classes themselves
@Inject
protected EventBus eventBus;
@Inject
protected GameEventManager gameEventManager;
protected final OverlayManager overlayManager;
protected final RandomEventHelperConfig config;
protected final Client client;

public abstract void onStartUp();

public abstract void onShutdown();

public abstract boolean isEnabled();

public void startUp()
{
this.eventBus.register(this);
this.onStartUp();
if (this.client.getGameState().getState() >= GameState.LOGGED_IN.getState())
{
// Remember to pass in the instance (this) and not the class (#getClass)
// Re-posts NpcSpawned, PlayerSpawned, WallObjectSpawned, DecorativeObjectSpawned, GroundObjectSpawned, GameObjectSpawned, ItemSpawned, WorldEntitySpawned
this.gameEventManager.simulateGameEvents(this);
}
log.debug("Started the {} module", this.getClass().getSimpleName());
}

public void shutdown()
{
this.eventBus.unregister(this);
this.onShutdown();
log.debug("Shutdown the {} module", this.getClass().getSimpleName());
}

public boolean isLoggedIn()
{
return this.client.getGameState().getState() >= GameState.LOGGED_IN.getState();
}
}
Loading