From 30ef327abbf5c700996795c4358b3ba8b3dea723 Mon Sep 17 00:00:00 2001 From: Tal Skverer Date: Sun, 30 Jun 2024 11:48:59 +0300 Subject: [PATCH] Adds consideration to the number of Smith's Outfit pieces currently worn by the player. --- .../EasyGiantsFoundryPlugin.java | 44 +++++++++++++++++-- .../EasyGiantsFoundryState.java | 7 ++- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java index 16d0c0d..db92c9f 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java @@ -13,6 +13,8 @@ import net.runelite.api.Client; import net.runelite.api.GameObject; import net.runelite.api.GameState; import net.runelite.api.InventoryID; +import net.runelite.api.Item; +import net.runelite.api.ItemContainer; import net.runelite.api.Skill; import net.runelite.api.events.GameObjectDespawned; import net.runelite.api.events.GameObjectSpawned; @@ -34,6 +36,8 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; +import java.util.Set; + @Slf4j @PluginDescriptor( name = "Easy Giant's Foundry", @@ -57,6 +61,9 @@ public class EasyGiantsFoundryPlugin extends Plugin private static final int REPUTATION_VARBIT = 3436; + // 5 total items, includes Smiths gloves (i); + private static final Set SMITHS_OUTFIT_IDS = Set.of(27023, 27025, 27027, 27029, 27031); + private Stage oldStage; private int lastBoost; @@ -243,11 +250,17 @@ public class EasyGiantsFoundryPlugin extends Plugin @Subscribe public void onItemContainerChanged(ItemContainerChanged event) { - if (event.getContainerId() == InventoryID.EQUIPMENT.getId() - && event.getItemContainer().count(PREFORM) == 0) + if (event.getContainerId() == InventoryID.EQUIPMENT.getId()) { - state.reset(); - oldStage = null; + if (event.getItemContainer().count(PREFORM) == 0) + { + state.reset(); + oldStage = null; + } + else + { + updateSmithsOutfitPieces(); + } } } @@ -382,6 +395,29 @@ public class EasyGiantsFoundryPlugin extends Plugin bonusNotified = true; } + private void updateSmithsOutfitPieces() + { + int pieces = 0; + + ItemContainer equipment = client.getItemContainer(InventoryID.EQUIPMENT); + if (equipment != null) + { + for (Item item : equipment.getItems()) + { + if (item != null && isSmithsOutfitPiece(item.getId())) + { + pieces++; + } + } + } + state.setSmithsOutfitPieces(pieces); + } + + private boolean isSmithsOutfitPiece(int itemId) + { + return SMITHS_OUTFIT_IDS.contains(itemId); + } + @Provides EasyGiantsFoundryConfig provideConfig(ConfigManager configManager) { diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java index 370a9b5..adf33e8 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java @@ -29,6 +29,9 @@ public class EasyGiantsFoundryState @Getter private boolean enabled; + @Setter + private int smithsOutfitPieces; + private final List stages = new ArrayList<>(); private double heatRangeRatio = 0; @@ -241,7 +244,9 @@ public class EasyGiantsFoundryState double progressTillNext = progressPerStage - progress % progressPerStage; Stage current = getCurrentStage(); - return (int) Math.ceil(progressTillNext / current.getProgressPerAction()); + // Each Smith's Outfit piece adds 20% chance to increase action progress by 1, or 100% for all 4 pieces. + double smithsOutfitBonus = smithsOutfitPieces == 4 ? 1 : 0.2 * smithsOutfitPieces; + return (int) Math.ceil(progressTillNext / (current.getProgressPerAction() + smithsOutfitBonus)); } public int[] getCurrentHeatRange()