death indicator: add clear option to infobox
Co-authored-by: ThatGamerBlue <thatgamerblue@gmail.com>
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user