BossTimerPlugin: Find bosses based on id instead of name

Use id instead of name of boss when, when finding bosses. Makes support
for multi phase bosses possible if added.
This commit is contained in:
Magic fTail
2018-05-28 13:55:55 +02:00
parent 3db89124c3
commit 14c37f142d
2 changed files with 40 additions and 36 deletions

View File

@@ -31,36 +31,37 @@ import java.util.HashMap;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ItemID;
import net.runelite.api.NpcID;
@Slf4j
enum Boss
{
GENERAL_GRAARDOR("General Graardor", 90, ChronoUnit.SECONDS, ItemID.PET_GENERAL_GRAARDOR),
KRIL_TSUTSAROTH("K'ril Tsutsaroth", 90, ChronoUnit.SECONDS, ItemID.PET_KRIL_TSUTSAROTH),
KREEARRA("Kree'arra", 90, ChronoUnit.SECONDS, ItemID.PET_KREEARRA),
COMMANDER_ZILYANA("Commander Zilyana", 90, ChronoUnit.SECONDS, ItemID.PET_ZILYANA),
CALLISTO("Callisto", 30, ChronoUnit.SECONDS, ItemID.CALLISTO_CUB),
CHAOS_ELEMENTAL("Chaos Elemental", 150, ChronoUnit.SECONDS, ItemID.PET_CHAOS_ELEMENTAL),
CHAOS_FANATIC("Chaos fanatic", 30, ChronoUnit.SECONDS, ItemID.ANCIENT_STAFF),
CRAZY_ARCHAEOLOGIST("Crazy archaeologist", 30, ChronoUnit.SECONDS, ItemID.FEDORA),
KING_BLACK_DRAGON("King Black Dragon", 10, ChronoUnit.SECONDS, ItemID.PRINCE_BLACK_DRAGON),
SCORPIA("Scorpia", 10, ChronoUnit.SECONDS, ItemID.SCORPIAS_OFFSPRING),
VENENATIS("Venenatis", 30, ChronoUnit.SECONDS, ItemID.VENENATIS_SPIDERLING),
VETION("Vet'ion Reborn", 30, ChronoUnit.SECONDS, ItemID.VETION_JR),
DAGANNOTH_PRIME("Dagannoth Prime", 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_PRIME),
DAGANNOTH_REX("Dagannoth Rex", 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_REX),
DAGANNOTH_SUPREME("Dagannoth Supreme", 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_SUPREME),
CORPOREAL_BEAST("Corporeal Beast", 30, ChronoUnit.SECONDS, ItemID.PET_DARK_CORE),
GIANT_MOLE("Giant Mole", 10, ChronoUnit.SECONDS, ItemID.BABY_MOLE),
DERANGED_ARCHAEOLOGIST("Deranged archaeologist", 30, ChronoUnit.SECONDS, ItemID.UNIDENTIFIED_LARGE_FOSSIL),
CERBERUS("Cerberus", 10800, ChronoUnit.MILLIS, ItemID.HELLPUPPY),
THERMONUCLEAR_SMOKE_DEVIL("Thermonuclear smoke devil", 12, ChronoUnit.SECONDS, ItemID.PET_SMOKE_DEVIL),
KRAKEN("Kraken", 10800, ChronoUnit.MILLIS, ItemID.PET_KRAKEN),
KALPHITE_QUEEN("Kalphite Queen", 30, ChronoUnit.SECONDS, ItemID.KALPHITE_PRINCESS);
GENERAL_GRAARDOR(NpcID.GENERAL_GRAARDOR, 90, ChronoUnit.SECONDS, ItemID.PET_GENERAL_GRAARDOR),
KRIL_TSUTSAROTH(NpcID.KRIL_TSUTSAROTH, 90, ChronoUnit.SECONDS, ItemID.PET_KRIL_TSUTSAROTH),
KREEARRA(NpcID.KREEARRA, 90, ChronoUnit.SECONDS, ItemID.PET_KREEARRA),
COMMANDER_ZILYANA(NpcID.COMMANDER_ZILYANA, 90, ChronoUnit.SECONDS, ItemID.PET_ZILYANA),
CALLISTO(NpcID.CALLISTO, 30, ChronoUnit.SECONDS, ItemID.CALLISTO_CUB),
CHAOS_ELEMENTAL(NpcID.CHAOS_ELEMENTAL, 150, ChronoUnit.SECONDS, ItemID.PET_CHAOS_ELEMENTAL),
CHAOS_FANATIC(NpcID.CHAOS_FANATIC, 30, ChronoUnit.SECONDS, ItemID.ANCIENT_STAFF),
CRAZY_ARCHAEOLOGIST(NpcID.CRAZY_ARCHAEOLOGIST, 30, ChronoUnit.SECONDS, ItemID.FEDORA),
KING_BLACK_DRAGON(NpcID.KING_BLACK_DRAGON, 10, ChronoUnit.SECONDS, ItemID.PRINCE_BLACK_DRAGON),
SCORPIA(NpcID.SCORPIA, 10, ChronoUnit.SECONDS, ItemID.SCORPIAS_OFFSPRING),
VENENATIS(NpcID.VENENATIS, 30, ChronoUnit.SECONDS, ItemID.VENENATIS_SPIDERLING),
VETION(NpcID.VETION_REBORN, 30, ChronoUnit.SECONDS, ItemID.VETION_JR),
DAGANNOTH_PRIME(NpcID.DAGANNOTH_PRIME, 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_PRIME),
DAGANNOTH_REX(NpcID.DAGANNOTH_REX, 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_REX),
DAGANNOTH_SUPREME(NpcID.DAGANNOTH_SUPREME, 90, ChronoUnit.SECONDS, ItemID.PET_DAGANNOTH_SUPREME),
CORPOREAL_BEAST(NpcID.CORPOREAL_BEAST, 30, ChronoUnit.SECONDS, ItemID.PET_DARK_CORE),
GIANT_MOLE(NpcID.GIANT_MOLE, 10, ChronoUnit.SECONDS, ItemID.BABY_MOLE),
DERANGED_ARCHAEOLOGIST(NpcID.DERANGED_ARCHAEOLOGIST, 30, ChronoUnit.SECONDS, ItemID.UNIDENTIFIED_LARGE_FOSSIL),
CERBERUS(NpcID.CERBERUS, 10800, ChronoUnit.MILLIS, ItemID.HELLPUPPY),
THERMONUCLEAR_SMOKE_DEVIL(NpcID.THERMONUCLEAR_SMOKE_DEVIL, 12, ChronoUnit.SECONDS, ItemID.PET_SMOKE_DEVIL),
KRAKEN(NpcID.KRAKEN, 10800, ChronoUnit.MILLIS, ItemID.PET_KRAKEN),
KALPHITE_QUEEN(NpcID.KALPHITE_QUEEN_965, 30, ChronoUnit.SECONDS, ItemID.KALPHITE_PRINCESS);
private static final Map<String, Boss> bosses = new HashMap<>();
private static final Map<Integer, Boss> bosses = new HashMap<>();
private final String name;
private final int id;
private final Duration spawnTime;
private final int itemSpriteId;
@@ -68,20 +69,20 @@ enum Boss
{
for (Boss boss : values())
{
bosses.put(boss.getName(), boss);
bosses.put(boss.getId(), boss);
}
}
private Boss(String name, long period, ChronoUnit unit, int itemSpriteId)
private Boss(int id, long period, ChronoUnit unit, int itemSpriteId)
{
this.name = name;
this.id = id;
this.spawnTime = Duration.of(period, unit);
this.itemSpriteId = itemSpriteId;
}
public String getName()
public int getId()
{
return name;
return id;
}
public Duration getSpawnTime()
@@ -94,8 +95,8 @@ enum Boss
return itemSpriteId;
}
public static Boss find(String name)
public static Boss find(int id)
{
return bosses.get(name);
return bosses.get(id);
}
}

View File

@@ -56,14 +56,17 @@ public class BossTimersPlugin extends Plugin
@Subscribe
public void onNpcDespawned(NpcDespawned npcDespawned)
{
NPC actor = npcDespawned.getNpc();
NPC npc = npcDespawned.getNpc();
if (actor.getHealthRatio() != 0)
if (npc.getHealthRatio() != 0)
{
return;
}
Boss boss = Boss.find(actor.getName());
int npcId = npc.getId();
Boss boss = Boss.find(npcId);
if (boss == null)
{
return;
@@ -72,10 +75,10 @@ public class BossTimersPlugin extends Plugin
// remove existing timer
infoBoxManager.removeIf(t -> t instanceof RespawnTimer && ((RespawnTimer) t).getBoss() == boss);
log.debug("Creating spawn timer for {} ({} seconds)", actor.getName(), boss.getSpawnTime());
log.debug("Creating spawn timer for {} ({} seconds)", npc.getName(), boss.getSpawnTime());
RespawnTimer timer = new RespawnTimer(boss, itemManager.getImage(boss.getItemSpriteId()), this);
timer.setTooltip(boss.getName());
timer.setTooltip(npc.getName());
infoBoxManager.addInfoBox(timer);
}
}