Add Wintertodt Plugin

This commit is contained in:
Adam
2018-09-19 17:14:57 -04:00
committed by GitHub
parent 8293819e47
commit e89eb7fdfa
7 changed files with 754 additions and 0 deletions

View File

@@ -144,6 +144,7 @@ public final class AnimationID
public static final int COW_HOME_TELEPORT_4 = 1699;
public static final int COW_HOME_TELEPORT_5 = 1700;
public static final int COW_HOME_TELEPORT_6 = 1701;
public static final int CONSTRUCTION = 3676;
// NPC animations
public static final int TZTOK_JAD_MAGIC_ATTACK = 2656;

View File

@@ -0,0 +1,43 @@
/*
* Copyright (c) 2018, terminatusx <jbfleischman@gmail.com>
* Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.wintertodt;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
enum WintertodtActivity
{
IDLE("IDLE"),
WOODCUTTING("Woodcutting"),
FLETCHING("Fletching"),
FEEDING_BRAZIER("Feeding"),
FIXING_BRAZIER("Fixing"),
LIGHTING_BRAZIER("Lighting");
private final String actionString;
}

View File

@@ -0,0 +1,58 @@
/*
* Copyright (c) 2018, terminatusx <jbfleischman@gmail.com>
* Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.wintertodt;
import java.awt.Color;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
import net.runelite.client.plugins.wintertodt.config.WintertodtNotifyMode;
@ConfigGroup("wintertodt")
public interface WintertodtConfig extends Config
{
@ConfigItem(
position = 1,
keyName = "notifyCondition",
name = "Notify When",
description = "Configures when to send notifications"
)
default WintertodtNotifyMode notifyCondition()
{
return WintertodtNotifyMode.ONLY_WHEN_INTERRUPTED;
}
@ConfigItem(
position = 2,
keyName = "damageNotificationColor",
name = "Damage Notification Color",
description = "Color of damage notification text in chat"
)
default Color damageNotificationColor()
{
return Color.CYAN;
}
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (c) 2018, terminatusx <jbfleischman@gmail.com>
* Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.wintertodt;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
enum WintertodtInterruptType
{
COLD("Damaged by Wintertodt Cold"),
SNOWFALL("Damaged by Wintertodt Snowfall"),
BRAZIER("Brazier Shattered"),
INVENTORY_FULL("Inventory full of Bruma Roots"),
OUT_OF_ROOTS("Out of Bruma Roots"),
FIXED_BRAZIER("Fixed Brazier"),
LIT_BRAZIER("Lit Brazier"),
BRAZIER_WENT_OUT("Brazier went out");
private final String interruptSourceString;
}

View File

@@ -0,0 +1,84 @@
/*
* Copyright (c) 2018, terminatusx <jbfleischman@gmail.com>
* Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.wintertodt;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import javax.inject.Inject;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.components.TitleComponent;
class WintertodtOverlay extends Overlay
{
private final WintertodtPlugin plugin;
private final PanelComponent panelComponent = new PanelComponent();
@Inject
private WintertodtOverlay(WintertodtPlugin plugin)
{
this.plugin = plugin;
setPosition(OverlayPosition.BOTTOM_LEFT);
}
@Override
public Dimension render(Graphics2D graphics)
{
if (!plugin.isInWintertodt())
{
return null;
}
panelComponent.getChildren().clear();
panelComponent.setPreferredSize(new Dimension(150, 0));
panelComponent.getChildren().add(TitleComponent.builder()
.text(plugin.getCurrentActivity().getActionString())
.color(plugin.getCurrentActivity() == WintertodtActivity.IDLE ? Color.RED : Color.GREEN)
.build());
String inventoryString = plugin.getNumLogs() > 0 ? plugin.getInventoryScore() + " (" + plugin.getTotalPotentialinventoryScore() + ") pts" : plugin.getInventoryScore() + " pts";
panelComponent.getChildren().add(LineComponent.builder()
.left("Inventory:")
.leftColor(Color.WHITE)
.right(inventoryString)
.rightColor(plugin.getInventoryScore() > 0 ? Color.GREEN : Color.RED)
.build());
String kindlingString = plugin.getNumLogs() > 0 ? plugin.getNumKindling() + " (" + (plugin.getNumLogs() + plugin.getNumKindling()) + ")" : Integer.toString(plugin.getNumKindling());
panelComponent.getChildren().add(LineComponent.builder()
.left("Kindling:")
.leftColor(Color.WHITE)
.right(kindlingString)
.rightColor(plugin.getNumKindling() + plugin.getNumLogs() > 0 ? Color.GREEN : Color.RED)
.build());
return panelComponent.render(graphics);
}
}

View File

@@ -0,0 +1,476 @@
/*
* Copyright (c) 2018, terminatusx <jbfleischman@gmail.com>
* Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.wintertodt;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides;
import java.time.Duration;
import java.time.Instant;
import javax.inject.Inject;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import static net.runelite.api.AnimationID.CONSTRUCTION;
import static net.runelite.api.AnimationID.FIREMAKING;
import static net.runelite.api.AnimationID.FLETCHING_BOW_CUTTING;
import static net.runelite.api.AnimationID.IDLE;
import static net.runelite.api.AnimationID.LOOKING_INTO;
import static net.runelite.api.AnimationID.WOODCUTTING_3A_AXE;
import static net.runelite.api.AnimationID.WOODCUTTING_ADAMANT;
import static net.runelite.api.AnimationID.WOODCUTTING_BLACK;
import static net.runelite.api.AnimationID.WOODCUTTING_BRONZE;
import static net.runelite.api.AnimationID.WOODCUTTING_DRAGON;
import static net.runelite.api.AnimationID.WOODCUTTING_INFERNAL;
import static net.runelite.api.AnimationID.WOODCUTTING_IRON;
import static net.runelite.api.AnimationID.WOODCUTTING_MITHRIL;
import static net.runelite.api.AnimationID.WOODCUTTING_RUNE;
import static net.runelite.api.AnimationID.WOODCUTTING_STEEL;
import net.runelite.api.ChatMessageType;
import net.runelite.api.Client;
import net.runelite.api.InventoryID;
import net.runelite.api.Item;
import net.runelite.api.ItemContainer;
import static net.runelite.api.ItemID.BRUMA_KINDLING;
import static net.runelite.api.ItemID.BRUMA_ROOT;
import net.runelite.api.MessageNode;
import net.runelite.api.Player;
import net.runelite.api.events.AnimationChanged;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.events.SetMessage;
import net.runelite.client.Notifier;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ColorUtil;
@PluginDescriptor(
name = "Wintertodt",
description = "Wintertodt",
tags = {"minigame", "firemaking"}
)
@Slf4j
public class WintertodtPlugin extends Plugin
{
private static final int WINTERTODT_REGION = 6462;
@Inject
private Notifier notifier;
@Inject
private Client client;
@Inject
private OverlayManager overlayManager;
@Inject
private WintertodtOverlay overlay;
@Inject
private WintertodtConfig config;
@Inject
private ChatMessageManager chatMessageManager;
@Getter(AccessLevel.PACKAGE)
private WintertodtActivity currentActivity = WintertodtActivity.IDLE;
@Getter(AccessLevel.PACKAGE)
private int inventoryScore;
@Getter(AccessLevel.PACKAGE)
private int totalPotentialinventoryScore;
@Getter(AccessLevel.PACKAGE)
private int numLogs;
@Getter(AccessLevel.PACKAGE)
private int numKindling;
@Getter(AccessLevel.PACKAGE)
private boolean isInWintertodt;
private Instant lastActionTime;
@Provides
WintertodtConfig getConfig(ConfigManager configManager)
{
return configManager.getConfig(WintertodtConfig.class);
}
@Override
protected void startUp() throws Exception
{
reset();
overlayManager.add(overlay);
}
@Override
protected void shutDown() throws Exception
{
overlayManager.remove(overlay);
reset();
}
private void reset()
{
inventoryScore = 0;
totalPotentialinventoryScore = 0;
numLogs = 0;
numKindling = 0;
currentActivity = WintertodtActivity.IDLE;
lastActionTime = null;
}
private boolean isInWintertodtRegion()
{
if (client.getLocalPlayer() != null)
{
return client.getLocalPlayer().getWorldLocation().getRegionID() == WINTERTODT_REGION;
}
return false;
}
@Subscribe
public void onGameTick(GameTick gameTick)
{
if (!isInWintertodtRegion())
{
if (isInWintertodt)
{
log.debug("Left Wintertodt!");
reset();
}
isInWintertodt = false;
return;
}
if (!isInWintertodt)
{
reset();
log.debug("Entered Wintertodt!");
}
isInWintertodt = true;
checkActionTimeout();
}
private void checkActionTimeout()
{
if (currentActivity == WintertodtActivity.IDLE)
{
return;
}
int currentAnimation = client.getLocalPlayer() != null ? client.getLocalPlayer().getAnimation() : -1;
if (currentAnimation != IDLE || lastActionTime == null)
{
return;
}
Duration actionTimeout = Duration.ofSeconds(3);
Duration sinceAction = Duration.between(lastActionTime, Instant.now());
if (sinceAction.compareTo(actionTimeout) >= 0)
{
log.debug("Activity timeout!");
currentActivity = WintertodtActivity.IDLE;
}
}
@Subscribe
public void onSetMessage(SetMessage setMessage)
{
if (!isInWintertodt)
{
return;
}
ChatMessageType chatMessageType = setMessage.getType();
if (chatMessageType != ChatMessageType.SERVER && chatMessageType != ChatMessageType.FILTERED)
{
return;
}
MessageNode messageNode = setMessage.getMessageNode();
final WintertodtInterruptType interruptType;
if (messageNode.getValue().startsWith("The cold of"))
{
interruptType = WintertodtInterruptType.COLD;
}
else if (messageNode.getValue().startsWith("The freezing cold attack"))
{
interruptType = WintertodtInterruptType.SNOWFALL;
}
else if (messageNode.getValue().startsWith("The brazier is broken and shrapnel"))
{
interruptType = WintertodtInterruptType.BRAZIER;
}
else if (messageNode.getValue().startsWith("You have run out of bruma roots"))
{
interruptType = WintertodtInterruptType.OUT_OF_ROOTS;
}
else if (messageNode.getValue().startsWith("Your inventory is too full"))
{
interruptType = WintertodtInterruptType.INVENTORY_FULL;
}
else if (messageNode.getValue().startsWith("You fix the brazier"))
{
interruptType = WintertodtInterruptType.FIXED_BRAZIER;
}
else if (messageNode.getValue().startsWith("You light the brazier"))
{
interruptType = WintertodtInterruptType.LIT_BRAZIER;
}
else if (messageNode.getValue().startsWith("The brazier has gone out."))
{
interruptType = WintertodtInterruptType.BRAZIER_WENT_OUT;
}
else
{
return;
}
boolean wasInterrupted = false;
boolean wasDamaged = false;
boolean neverNotify = false;
switch (interruptType)
{
case COLD:
case BRAZIER:
case SNOWFALL:
wasDamaged = true;
// Recolor message for damage notification
messageNode.setRuneLiteFormatMessage(ColorUtil.wrapWithColorTag(messageNode.getValue(), config.damageNotificationColor()));
chatMessageManager.update(messageNode);
client.refreshChat();
// all actions except woodcutting are interrupted from damage
if (currentActivity != WintertodtActivity.WOODCUTTING)
{
wasInterrupted = true;
}
break;
case INVENTORY_FULL:
case OUT_OF_ROOTS:
case BRAZIER_WENT_OUT:
wasInterrupted = true;
break;
case LIT_BRAZIER:
case FIXED_BRAZIER:
wasInterrupted = true;
neverNotify = true;
break;
}
if (!neverNotify)
{
boolean shouldNotify = false;
switch (config.notifyCondition())
{
case ONLY_WHEN_INTERRUPTED:
if (wasInterrupted)
{
shouldNotify = true;
}
break;
case WHEN_DAMAGED:
if (wasDamaged)
{
shouldNotify = true;
}
break;
case EITHER:
shouldNotify = true;
break;
}
if (shouldNotify)
{
notifyInterrupted(interruptType, wasInterrupted);
}
}
if (wasInterrupted)
{
currentActivity = WintertodtActivity.IDLE;
}
}
private void notifyInterrupted(WintertodtInterruptType interruptType, boolean wasActivityInterrupted)
{
final StringBuilder str = new StringBuilder();
str.append("Wintertodt: ");
if (wasActivityInterrupted)
{
str.append(currentActivity.getActionString());
str.append(" interrupted! ");
}
str.append(interruptType.getInterruptSourceString());
String notification = str.toString();
log.debug("Sending notification: {}", notification);
notifier.notify(notification);
}
@Subscribe
public void onAnimationChanged(final AnimationChanged event)
{
if (!isInWintertodt)
{
return;
}
final Player local = client.getLocalPlayer();
if (event.getActor() != local)
{
return;
}
final int animId = local.getAnimation();
switch (animId)
{
case WOODCUTTING_BRONZE:
case WOODCUTTING_IRON:
case WOODCUTTING_STEEL:
case WOODCUTTING_BLACK:
case WOODCUTTING_MITHRIL:
case WOODCUTTING_ADAMANT:
case WOODCUTTING_RUNE:
case WOODCUTTING_DRAGON:
case WOODCUTTING_INFERNAL:
case WOODCUTTING_3A_AXE:
setActivity(WintertodtActivity.WOODCUTTING);
break;
case FLETCHING_BOW_CUTTING:
setActivity(WintertodtActivity.FLETCHING);
break;
case LOOKING_INTO:
setActivity(WintertodtActivity.FEEDING_BRAZIER);
break;
case FIREMAKING:
setActivity(WintertodtActivity.LIGHTING_BRAZIER);
break;
case CONSTRUCTION:
setActivity(WintertodtActivity.FIXING_BRAZIER);
break;
}
}
@Subscribe
public void itemContainerChanged(ItemContainerChanged event)
{
final ItemContainer container = event.getItemContainer();
if (!isInWintertodt || container != client.getItemContainer(InventoryID.INVENTORY))
{
return;
}
final Item[] inv = container.getItems();
inventoryScore = 0;
totalPotentialinventoryScore = 0;
numLogs = 0;
numKindling = 0;
for (Item item : inv)
{
inventoryScore += getPoints(item.getId());
totalPotentialinventoryScore += getPotentialPoints(item.getId());
switch (item.getId())
{
case BRUMA_ROOT:
++numLogs;
break;
case BRUMA_KINDLING:
++numKindling;
break;
}
}
//If we're currently fletching but there are no more logs, go ahead and abort fletching immediately
if (numLogs == 0 && currentActivity == WintertodtActivity.FLETCHING)
{
currentActivity = WintertodtActivity.IDLE;
}
//Otherwise, if we're currently feeding the brazier but we've run out of both logs and kindling, abort the feeding activity
else if (numLogs == 0 && numKindling == 0 && currentActivity == WintertodtActivity.FEEDING_BRAZIER)
{
currentActivity = WintertodtActivity.IDLE;
}
}
private void setActivity(WintertodtActivity action)
{
currentActivity = action;
lastActionTime = Instant.now();
}
private static int getPoints(int id)
{
switch (id)
{
case BRUMA_ROOT:
return 10;
case BRUMA_KINDLING:
return 25;
default:
return 0;
}
}
private static int getPotentialPoints(int id)
{
switch (id)
{
case BRUMA_ROOT:
case BRUMA_KINDLING:
return 25;
default:
return 0;
}
}
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright (c) 2018, terminatusx <jbfleischman@gmail.com>
* Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.wintertodt.config;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum WintertodtNotifyMode
{
NONE("None"),
WHEN_DAMAGED("Damage Taken"),
ONLY_WHEN_INTERRUPTED("Action Interrupted"),
EITHER("Either");
private final String name;
@Override
public String toString()
{
return name;
}
}