Merge pull request #2124 from SoyChai/discord-skilling-icons

Display skill icons in Discord while training
This commit is contained in:
Adam
2018-04-29 12:05:52 -04:00
committed by GitHub
3 changed files with 55 additions and 39 deletions

View File

@@ -129,7 +129,7 @@ public class DiscordService implements AutoCloseable
discordRichPresence.largeImageText = discordPresence.getLargeImageText();
discordRichPresence.smallImageKey = Strings.isNullOrEmpty(discordPresence.getSmallImageKey())
? "default"
: discordPresence.getLargeImageKey();
: discordPresence.getSmallImageKey();
discordRichPresence.smallImageText = discordPresence.getSmallImageText();
discordRichPresence.partyId = discordPresence.getPartyId();
discordRichPresence.partySize = discordPresence.getPartySize();

View File

@@ -24,7 +24,7 @@
*/
package net.runelite.client.plugins.discord;
import com.google.common.collect.Sets;
import com.google.common.collect.ImmutableSet;
import java.util.Set;
import java.util.function.Function;
import lombok.AllArgsConstructor;
@@ -62,32 +62,34 @@ public enum DiscordGameEventType
{
IN_GAME("In Game", false),
IN_MENU("In Menu", false),
TRAINING_ATTACK(training(ATTACK), DiscordGameEventType::combatSkillChanged),
TRAINING_DEFENCE(training(DEFENCE), DiscordGameEventType::combatSkillChanged),
TRAINING_STRENGTH(training(STRENGTH), DiscordGameEventType::combatSkillChanged),
TRAINING_HITPOINTS(training(HITPOINTS), DiscordGameEventType::combatSkillChanged),
TRAINING_SLAYER(training(SLAYER), 1, DiscordGameEventType::combatSkillChanged),
TRAINING_RANGED(training(RANGED), DiscordGameEventType::combatSkillChanged),
TRAINING_MAGIC(training(MAGIC), DiscordGameEventType::combatSkillChanged),
TRAINING_PRAYER(training(PRAYER)),
TRAINING_COOKING(training(COOKING)),
TRAINING_WOODCUTTING(training(WOODCUTTING)),
TRAINING_FLETCHING(training(FLETCHING)),
TRAINING_FISHING(training(FISHING)),
TRAINING_FIREMAKING(training(FIREMAKING)),
TRAINING_CRAFTING(training(CRAFTING)),
TRAINING_SMITHING(training(SMITHING)),
TRAINING_MINING(training(MINING)),
TRAINING_HERBLORE(training(HERBLORE)),
TRAINING_AGILITY(training(AGILITY)),
TRAINING_THIEVING(training(THIEVING)),
TRAINING_FARMING(training(FARMING)),
TRAINING_RUNECRAFT(training(RUNECRAFT)),
TRAINING_HUNTER(training(HUNTER)),
TRAINING_CONSTRUCTION(training(CONSTRUCTION));
TRAINING_ATTACK(ATTACK, DiscordGameEventType::combatSkillChanged),
TRAINING_DEFENCE(DEFENCE, DiscordGameEventType::combatSkillChanged),
TRAINING_STRENGTH(STRENGTH, DiscordGameEventType::combatSkillChanged),
TRAINING_HITPOINTS(HITPOINTS, DiscordGameEventType::combatSkillChanged),
TRAINING_SLAYER(SLAYER, 1, DiscordGameEventType::combatSkillChanged),
TRAINING_RANGED(RANGED, DiscordGameEventType::combatSkillChanged),
TRAINING_MAGIC(MAGIC, DiscordGameEventType::combatSkillChanged),
TRAINING_PRAYER(PRAYER),
TRAINING_COOKING(COOKING),
TRAINING_WOODCUTTING(WOODCUTTING),
TRAINING_FLETCHING(FLETCHING),
TRAINING_FISHING(FISHING),
TRAINING_FIREMAKING(FIREMAKING),
TRAINING_CRAFTING(CRAFTING),
TRAINING_SMITHING(SMITHING),
TRAINING_MINING(MINING),
TRAINING_HERBLORE(HERBLORE),
TRAINING_AGILITY(AGILITY),
TRAINING_THIEVING(THIEVING),
TRAINING_FARMING(FARMING),
TRAINING_RUNECRAFT(RUNECRAFT),
TRAINING_HUNTER(HUNTER),
TRAINING_CONSTRUCTION(CONSTRUCTION);
private static final Set<Skill> COMBAT_SKILLS = ImmutableSet.of(ATTACK, STRENGTH, DEFENCE, HITPOINTS, SLAYER, RANGED, MAGIC);
private static final Set<Skill> COMBAT_SKILLS = Sets.newHashSet(ATTACK, STRENGTH, DEFENCE, HITPOINTS, SLAYER, RANGED, MAGIC);
private final String state;
private final String imageKey;
private String details;
private boolean considerDelay = true;
private Function<DiscordGameEventType, Boolean> isChanged = (l) -> true;
@@ -96,22 +98,31 @@ public enum DiscordGameEventType
DiscordGameEventType(String state, boolean considerDelay)
{
this.state = state;
this.imageKey = "default";
this.considerDelay = considerDelay;
}
DiscordGameEventType(String state, int priority, Function<DiscordGameEventType, Boolean> isChanged)
DiscordGameEventType(Skill skill, int priority, Function<DiscordGameEventType, Boolean> isChanged)
{
this.state = state;
this.state = training(skill);
this.imageKey = imageKeyOf(skill);
this.priority = priority;
this.isChanged = isChanged;
}
DiscordGameEventType(String state, Function<DiscordGameEventType, Boolean> isChanged)
DiscordGameEventType(Skill skill, Function<DiscordGameEventType, Boolean> isChanged)
{
this.state = state;
this.state = training(skill);
this.imageKey = imageKeyOf(skill);
this.isChanged = isChanged;
}
DiscordGameEventType(Skill skill)
{
this.state = training(skill);
this.imageKey = imageKeyOf(skill);
}
private static String training(final Skill skill)
{
return training(skill.getName());
@@ -122,7 +133,17 @@ public enum DiscordGameEventType
return "Training: " + what;
}
static boolean combatSkillChanged(final DiscordGameEventType l)
private static String imageKeyOf(final Skill skill)
{
return imageKeyOf(skill.getName().toLowerCase());
}
private static String imageKeyOf(final String what)
{
return "icon_" + what;
}
private static boolean combatSkillChanged(final DiscordGameEventType l)
{
for (Skill skill : Skill.values())
{
@@ -161,8 +182,7 @@ public enum DiscordGameEventType
case RUNECRAFT: return TRAINING_RUNECRAFT;
case HUNTER: return TRAINING_HUNTER;
case CONSTRUCTION: return TRAINING_CONSTRUCTION;
default: return null;
}
return null;
}
}

View File

@@ -111,6 +111,7 @@ public class DiscordState
.state(lastEvent.getState())
.details(lastEvent.getDetails())
.startTimestamp(startOfAction)
.smallImageKey(newEvent.getImageKey())
.build();
needsFlush = true;
@@ -126,11 +127,6 @@ public class DiscordState
final Duration actionTimeout = Duration.ofMinutes(timeout);
if (Instant.now().compareTo(lastAction.plus(actionTimeout)) >= 0)
{
return true;
}
return false;
return Instant.now().isAfter(lastAction.plus(actionTimeout));
}
}