Added sound config settings to idle plugin

Added Over Special Energy Notification
This commit is contained in:
James Munson
2019-06-12 04:49:28 -07:00
parent 05493f5c8d
commit 40b1e53b31
22 changed files with 173 additions and 55 deletions

View File

@@ -317,6 +317,7 @@
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>png</nonFilteredFileExtension>
<nonFilteredFileExtension>gif</nonFilteredFileExtension>
<nonFilteredFileExtension>wav</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>

View File

@@ -29,6 +29,7 @@ public class SoundManager
}
public void playSound(final Sound sound)
throws UnsupportedAudioFileException, IOException, LineUnavailableException
{
new Thread(new Runnable()
{

View File

@@ -32,10 +32,10 @@ import net.runelite.client.config.ConfigItem;
public interface IdleNotifierConfig extends Config
{
@ConfigItem(
keyName = "animationidle",
name = "Idle Animation Notifications",
description = "Configures if idle animation notifications are enabled",
position = 1
keyName = "animationidle",
name = "Idle Animation Notifications",
description = "Configures if idle animation notifications are enabled",
position = 1
)
default boolean animationIdle()
{
@@ -43,10 +43,20 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
keyName = "interactionidle",
name = "Idle Interaction Notifications",
description = "Configures if idle interaction notifications are enabled e.g. combat, fishing",
position = 2
keyName = "animationidlesound",
name = "Idle Animation Sound",
description = "Plays a custom sound accompanying Idle Animation notifications",
position = 2
)
default boolean animationIdleSound() {
return false;
}
@ConfigItem(
keyName = "interactionidle",
name = "Idle Interaction Notifications",
description = "Configures if idle interaction notifications are enabled e.g. combat, fishing",
position = 3
)
default boolean interactionIdle()
{
@@ -54,10 +64,20 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
keyName = "logoutidle",
name = "Idle Logout Notifications",
description = "Configures if the idle logout notifications are enabled",
position = 3
keyName = "interactionidlesound",
name = "Idle Interaction Sound",
description = "Plays a custom sound accompanying Idle Interaction notifications",
position = 4
)
default boolean interactionIdleSound() {
return false;
}
@ConfigItem(
keyName = "logoutidle",
name = "Idle Logout Notifications",
description = "Configures if the idle logout notifications are enabled",
position = 5
)
default boolean logoutIdle()
{
@@ -65,10 +85,20 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
position = 4,
keyName = "skullNotification",
name = "Skull Notification",
description = "Receive a notification when you skull."
keyName = "outofcombatsound",
name = "Out of Combat Sound",
description = "Plays a custom sound whenever you leave combat",
position = 6
)
default boolean outOfCombatSound() {
return false;
}
@ConfigItem(
position = 7,
keyName = "skullNotification",
name = "Skull Notification",
description = "Receive a notification when you skull."
)
default boolean showSkullNotification()
{
@@ -76,10 +106,10 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
position = 5,
keyName = "unskullNotification",
name = "Unskull Notification",
description = "Receive a notification when you unskull."
position = 8,
keyName = "unskullNotification",
name = "Unskull Notification",
description = "Receive a notification when you unskull."
)
default boolean showUnskullNotification()
{
@@ -87,10 +117,10 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
keyName = "timeout",
name = "Idle Notification Delay (ms)",
description = "The notification delay after the player is idle",
position = 6
keyName = "timeout",
name = "Idle Notification Delay (ms)",
description = "The notification delay after the player is idle",
position = 9
)
default int getIdleNotificationDelay()
{
@@ -98,10 +128,10 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
keyName = "hitpoints",
name = "Hitpoints Notification Threshold",
description = "The amount of hitpoints to send a notification at. A value of 0 will disable notification.",
position = 7
keyName = "hitpoints",
name = "Hitpoints Notification Threshold",
description = "The amount of hitpoints to send a notification at. A value of 0 will disable notification.",
position = 10
)
default int getHitpointsThreshold()
{
@@ -109,10 +139,20 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
keyName = "prayer",
name = "Prayer Notification Threshold",
description = "The amount of prayer points to send a notification at. A value of 0 will disable notification.",
position = 8
keyName = "playHealthSound",
name = "Play sound for Low Health",
description = "Will play a sound for every Low Health notification sent",
position = 12
)
default boolean getPlayHealthSound() {
return false;
}
@ConfigItem(
keyName = "prayer",
name = "Prayer Notification Threshold",
description = "The amount of prayer points to send a notification at. A value of 0 will disable notification.",
position = 12
)
default int getPrayerThreshold()
{
@@ -120,10 +160,20 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
keyName = "oxygen",
name = "Oxygen Notification Threshold",
position = 9,
description = "The amount of remaining oxygen to send a notification at. A value of 0 will disable notification."
keyName = "playPrayerSound",
name = "Play sound for Low Prayer",
description = "Will play a sound for every Low Prayer notification sent",
position = 13
)
default boolean getPlayPrayerSound() {
return false;
}
@ConfigItem(
keyName = "oxygen",
name = "Oxygen Notification Threshold",
position = 14,
description = "The amount of remaining oxygen to send a notification at. A value of 0 will disable notification."
)
default int getOxygenThreshold()
{
@@ -131,10 +181,10 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
keyName = "spec",
name = "Special Attack Energy Notification Threshold",
position = 10,
description = "The amount of spec energy reached to send a notification at. A value of 0 will disable notification."
keyName = "spec",
name = "Special Attack Energy Notification Threshold",
position = 15,
description = "The amount of spec energy reached to send a notification at. A value of 0 will disable notification."
)
default int getSpecEnergyThreshold()
{
@@ -142,12 +192,32 @@ public interface IdleNotifierConfig extends Config
}
@ConfigItem(
keyName = "pkers",
name = "PKer Notifier",
position = 9,
description = "Notifies if an attackable player based on your level range appears on screen.",
group = "PvP",
warning = "This will not notify you if the player is in your cc or is online on your friends list."
keyName = "specSound",
name = "Special Attack Energy Sound",
description = "Plays a custom sound accompanying Special Attack energy notifications",
position = 16
)
default boolean getSpecSound() {
return false;
}
@ConfigItem(
keyName = "overspec",
name = "Over Special Energy Notification",
description = "Will repeat notifications for any value over the special energy threshold",
position = 17
)
default boolean getOverSpecEnergy() {
return false;
}
@ConfigItem(
keyName = "pkers",
name = "PKer Notifier",
position = 18,
description = "Notifies if an attackable player based on your level range appears on screen.",
group = "PvP",
warning = "This will not notify you if the player is in your cc or is online on your friends list."
)
default boolean notifyPkers()
{

View File

@@ -27,12 +27,18 @@ package net.runelite.client.plugins.idlenotifier;
import com.google.inject.Provides;
import java.awt.TrayIcon;
import java.io.IOException;
import java.time.Duration;
import java.time.Instant;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import javax.inject.Inject;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.runelite.api.Actor;
import net.runelite.api.AnimationID;
import static net.runelite.api.AnimationID.COOKING_FIRE;
@@ -145,6 +151,8 @@ import net.runelite.api.events.PlayerSpawned;
import net.runelite.client.Notifier;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.Sound;
import net.runelite.client.game.SoundManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.PvPUtil;
@@ -156,6 +164,8 @@ import net.runelite.client.util.PvPUtil;
)
public class IdleNotifierPlugin extends Plugin
{
private static final Logger logger = LoggerFactory.getLogger(IdleNotifierPlugin.class);
// This must be more than 500 client ticks (10 seconds) before you get AFK kicked
private static final int LOGOUT_WARNING_MILLIS = (4 * 60 + 40) * 1000; // 4 minutes and 40 seconds
private static final int COMBAT_WARNING_MILLIS = 19 * 60 * 1000; // 19 minutes
@@ -173,6 +183,9 @@ public class IdleNotifierPlugin extends Plugin
@Inject
private Client client;
@Inject
private SoundManager soundManager;
@Inject
private IdleNotifierConfig config;
@@ -509,8 +522,19 @@ public class IdleNotifierPlugin extends Plugin
if (config.animationIdle() && checkAnimationIdle(waitDuration, local))
{
notifier.notify("[" + local.getName() + "] is now idle!");
if (this.config.animationIdleSound())
{
try
{
this.soundManager.playSound(Sound.IDLE);
}
catch (UnsupportedAudioFileException | IOException | LineUnavailableException e)
{
logger.info("Failed to play Idle sound: {}", e);
e.printStackTrace();
}
}
}
if (config.interactionIdle() && checkInteractionIdle(waitDuration, local))
{
if (lastInteractWasCombat)
@@ -557,8 +581,10 @@ public class IdleNotifierPlugin extends Plugin
// Check if we have regenerated over the threshold, and that the
// regen was small enough.
boolean notify = lastSpecEnergy < threshold && currentSpecEnergy >= threshold
&& currentSpecEnergy - lastSpecEnergy <= 100;
boolean notify = lastSpecEnergy < threshold && currentSpecEnergy >= threshold && currentSpecEnergy - lastSpecEnergy <= 100;
notify = (notify) || ((config.getOverSpecEnergy()) && (currentSpecEnergy >= threshold) && (currentSpecEnergy != lastSpecEnergy) && (currentSpecEnergy - lastSpecEnergy <= 100));
lastSpecEnergy = currentSpecEnergy;
return notify;
}

View File

@@ -28,6 +28,9 @@ package net.runelite.client.plugins.zulrah;
import com.google.inject.Provides;
import javax.inject.Inject;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
@@ -56,6 +59,8 @@ import net.runelite.client.plugins.zulrah.phase.ZulrahPhase;
import net.runelite.client.plugins.zulrah.phase.ZulrahType;
import net.runelite.client.ui.overlay.OverlayManager;
import java.io.IOException;
@PluginDescriptor(
name = "Zulrah Helper",
description = "Shows tiles on where to stand during the phases and what prayer to use.",
@@ -167,14 +172,29 @@ public class ZulrahPlugin extends Plugin
if (config.sounds())
{
if (type == ZulrahType.RANGE)
{
soundManager.playSound(Sound.PRAY_RANGED);
if (type == ZulrahType.RANGE) {
try
{
soundManager.playSound(Sound.PRAY_RANGED);
}
catch (UnsupportedAudioFileException | IOException | LineUnavailableException e)
{
log.info("Failed to play Idle sound: {}", e);
e.printStackTrace();
}
}
if (type == ZulrahType.MAGIC)
{
soundManager.playSound(Sound.PRAY_MAGIC);
if (type == ZulrahType.MAGIC) {
try
{
soundManager.playSound(Sound.PRAY_MAGIC);
}
catch (UnsupportedAudioFileException|IOException|LineUnavailableException e)
{
log.info("Failed to play Idle sound: {}", e);
e.printStackTrace();
}
}
}