death indicator: add clear option to infobox

Co-authored-by: ThatGamerBlue <thatgamerblue@gmail.com>
This commit is contained in:
Adam
2020-06-16 21:14:39 -04:00
committed by Adam
parent 48357f9329
commit 111f099654

View File

@@ -32,20 +32,25 @@ import java.time.Instant;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Set; import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.GameState; import net.runelite.api.GameState;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.api.MenuAction;
import net.runelite.api.coords.WorldPoint; import net.runelite.api.coords.WorldPoint;
import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.CommandExecuted;
import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick; import net.runelite.api.events.GameTick;
import net.runelite.api.events.PlayerDeath; import net.runelite.api.events.PlayerDeath;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.events.InfoBoxMenuClicked;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.ui.overlay.infobox.Timer; import net.runelite.client.ui.overlay.infobox.Timer;
import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager;
@@ -59,6 +64,7 @@ import net.runelite.client.util.ImageUtil;
@Slf4j @Slf4j
public class DeathIndicatorPlugin extends Plugin public class DeathIndicatorPlugin extends Plugin
{ {
private static final String DEATH_TIMER_CLEAR = "Clear";
private static final Set<Integer> RESPAWN_REGIONS = ImmutableSet.of( private static final Set<Integer> RESPAWN_REGIONS = ImmutableSet.of(
6457, // Kourend 6457, // Kourend
12850, // Lumbridge 12850, // Lumbridge
@@ -84,6 +90,10 @@ public class DeathIndicatorPlugin extends Plugin
@Inject @Inject
private ItemManager itemManager; private ItemManager itemManager;
@Inject
@Named("developerMode")
boolean developerMode;
private BufferedImage mapArrow; private BufferedImage mapArrow;
private Timer deathTimer; private Timer deathTimer;
@@ -176,25 +186,7 @@ public class DeathIndicatorPlugin extends Plugin
log.debug("Died! Grave at {}", lastDeath); log.debug("Died! Grave at {}", lastDeath);
// Save death to config die(lastDeath, lastDeathTime, lastDeathWorld);
config.deathLocationX(lastDeath.getX());
config.deathLocationY(lastDeath.getY());
config.deathLocationPlane(lastDeath.getPlane());
config.timeOfDeath(lastDeathTime);
config.deathWorld(lastDeathWorld);
if (config.showDeathHintArrow())
{
client.setHintArrow(lastDeath);
}
if (config.showDeathOnWorldMap())
{
worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance);
worldMapPointManager.add(new DeathWorldMapPoint(lastDeath, this));
}
resetInfobox();
lastDeath = null; lastDeath = null;
lastDeathTime = null; lastDeathTime = null;
@@ -209,20 +201,44 @@ public class DeathIndicatorPlugin extends Plugin
WorldPoint deathPoint = new WorldPoint(config.deathLocationX(), config.deathLocationY(), config.deathLocationPlane()); WorldPoint deathPoint = new WorldPoint(config.deathLocationX(), config.deathLocationY(), config.deathLocationPlane());
if (deathPoint.equals(client.getLocalPlayer().getWorldLocation()) || (deathTimer != null && deathTimer.cull())) if (deathPoint.equals(client.getLocalPlayer().getWorldLocation()) || (deathTimer != null && deathTimer.cull()))
{ {
client.clearHintArrow(); reset();
if (deathTimer != null) resetDeathConfig();
{
infoBoxManager.removeInfoBox(deathTimer);
deathTimer = null;
}
worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance);
resetDeath();
} }
} }
@Subscribe
public void onCommandExecuted(CommandExecuted commandExecuted)
{
if (developerMode && commandExecuted.getCommand().equals("die"))
{
die(client.getLocalPlayer().getWorldLocation(), Instant.now(), client.getWorld());
}
}
private void die(WorldPoint location, Instant time, int world)
{
// Save death to config
config.deathLocationX(location.getX());
config.deathLocationY(location.getY());
config.deathLocationPlane(location.getPlane());
config.timeOfDeath(time);
config.deathWorld(world);
if (config.showDeathHintArrow())
{
client.setHintArrow(location);
}
if (config.showDeathOnWorldMap())
{
worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance);
worldMapPointManager.add(new DeathWorldMapPoint(location, this));
}
resetInfobox();
}
@Subscribe @Subscribe
public void onConfigChanged(ConfigChanged event) public void onConfigChanged(ConfigChanged event)
{ {
@@ -287,12 +303,34 @@ public class DeathIndicatorPlugin extends Plugin
} }
} }
@Subscribe
public void onInfoBoxMenuClicked(InfoBoxMenuClicked infoBoxMenuClicked)
{
if (infoBoxMenuClicked.getInfoBox() == deathTimer)
{
reset();
}
}
private boolean hasDied() private boolean hasDied()
{ {
return config.timeOfDeath() != null; return config.timeOfDeath() != null;
} }
private void resetDeath() private void reset()
{
client.clearHintArrow();
if (deathTimer != null)
{
infoBoxManager.removeInfoBox(deathTimer);
deathTimer = null;
}
worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance);
}
private void resetDeathConfig()
{ {
config.deathLocationX(0); config.deathLocationX(0);
config.deathLocationY(0); config.deathLocationY(0);
@@ -317,6 +355,7 @@ public class DeathIndicatorPlugin extends Plugin
{ {
deathTimer = new Timer(timeLeft.getSeconds(), ChronoUnit.SECONDS, getBonesImage(), this); deathTimer = new Timer(timeLeft.getSeconds(), ChronoUnit.SECONDS, getBonesImage(), this);
deathTimer.setTooltip("Died on world: " + config.deathWorld()); deathTimer.setTooltip("Died on world: " + config.deathWorld());
deathTimer.getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_INFOBOX, DEATH_TIMER_CLEAR, "Death Timer"));
infoBoxManager.addInfoBox(deathTimer); infoBoxManager.addInfoBox(deathTimer);
} }
} }