Compare commits
14 Commits
df4c081367
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ce480a1185 | ||
|
|
9324c7f55c | ||
|
|
aa89432e84 | ||
|
|
5cb7de46c6 | ||
|
|
00b214af3f | ||
|
|
210350e627 | ||
|
|
b374307309 | ||
|
|
0c812ac666 | ||
|
|
c3bea71867 | ||
|
|
bbc7fddf58 | ||
|
|
cbd778b598 | ||
|
|
257288a6a3 | ||
|
|
82d6add928 | ||
|
|
50d72f9635 |
@@ -65,4 +65,7 @@ Bonus Click Notification | Information Panel
|
||||
* Added bonus action tracking
|
||||
- [TalSk](https://github.com/TalSk "TalSk's github")
|
||||
* Integrated Smith's outfit effect
|
||||
|
||||
- [Aiadan](https://github.com/Aiadan "Aiadan's github")
|
||||
* Added metal counter
|
||||
- [Rikten X](https://github.com/riktenx "Rikten X's github")
|
||||
* Added configs to enhance text visibility
|
||||
|
||||
10
build.gradle
10
build.gradle
@@ -27,7 +27,7 @@ dependencies {
|
||||
}
|
||||
|
||||
group = 'com.toofifty'
|
||||
version = '1.0.9'
|
||||
version = '1.0.11'
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
options.encoding = 'UTF-8'
|
||||
@@ -62,3 +62,11 @@ tasks.register('shadowJar', Jar) {
|
||||
archiveFileName.set("${rootProject.name}-${project.version}-all.jar")
|
||||
}
|
||||
|
||||
|
||||
task runClient(type: JavaExec) {
|
||||
group = 'application'
|
||||
description = 'Run the PluginTester main class to launch RuneLite with plugins'
|
||||
classpath = sourceSets.test.runtimeClasspath
|
||||
mainClass = 'com.toofifty.easygiantsfoundry.EasyGiantsFoundryPluginTest'
|
||||
jvmArgs '-ea'
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.toofifty.easygiantsfoundry;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import com.toofifty.easygiantsfoundry.enums.FontType;
|
||||
import net.runelite.client.config.Alpha;
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
@@ -187,6 +190,22 @@ public interface EasyGiantsFoundryConfig extends Config
|
||||
return true;
|
||||
}
|
||||
|
||||
@Range(
|
||||
min = 100,
|
||||
max = 200
|
||||
)
|
||||
@ConfigItem(
|
||||
keyName = "clickboxScale",
|
||||
name = "Clickbox scale %",
|
||||
description = "Scale clickbox highlights to make targets easier to click.",
|
||||
position = 4,
|
||||
section = highlightList
|
||||
)
|
||||
default int clickboxScale()
|
||||
{
|
||||
return 150;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "waterLavaHighlight",
|
||||
name = "Highlight Waterfall/Lava Pool",
|
||||
@@ -350,6 +369,42 @@ public interface EasyGiantsFoundryConfig extends Config
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "heatDelta",
|
||||
name = "Heat change",
|
||||
description = "Show the heat delta and recommended location for the next adjust.",
|
||||
position = 7,
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean drawHeatDelta()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "heatPlan",
|
||||
name = "Heat plan",
|
||||
description = "Show fast/slow heat action plans with predicted results.",
|
||||
position = 8,
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean drawHeatPlan()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "heatActionTimer",
|
||||
name = "Heat action timer",
|
||||
description = "Show the active heat action countdown in the info panel.",
|
||||
position = 9,
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean drawHeatActionTimer()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigSection(
|
||||
name = "Info Overlay",
|
||||
description = "Overlay Text Info On Objects",
|
||||
@@ -509,6 +564,116 @@ public interface EasyGiantsFoundryConfig extends Config
|
||||
return Color.CYAN;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "textBackground",
|
||||
name = "Text Background",
|
||||
description = "Set a color to draw a box behind text.",
|
||||
position = 7,
|
||||
section = colourList
|
||||
)
|
||||
@Alpha
|
||||
default Color textBackground()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "dynamicOverlayFont",
|
||||
name = "Dynamic Overlay Font",
|
||||
description = "Choose the font type for the info overlay.<br/>" +
|
||||
"Defaults to your setting from RuneLite -> Overlay settings -> Dynamic overlay font.",
|
||||
position = 10,
|
||||
section = colourList
|
||||
)
|
||||
default FontType dynamicOverlayFont()
|
||||
{
|
||||
return FontType.DEFAULT;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "textOutline",
|
||||
name = "Text Outline",
|
||||
description = "Use an outline around text instead of a shadow.",
|
||||
position = 11,
|
||||
section = colourList
|
||||
)
|
||||
default boolean textOutline()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
position = -100,
|
||||
keyName = "alwaysShowInfoPanel",
|
||||
name = "Always show",
|
||||
description = "Always show the info panel, even outside of Giants' Foundry.",
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean alwaysDrawInfoPanel()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
position = 100,
|
||||
keyName = "drawMetals",
|
||||
name = "Metals",
|
||||
description = "Show total metals count in the info panel.",
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean drawMetals()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
position = 101,
|
||||
keyName = "drawAllMetals",
|
||||
name = "Metals: show all",
|
||||
description = "Show rows for metals even if you don't have any of that type.",
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean drawAllMetals()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
position = 110,
|
||||
keyName = "countOre",
|
||||
name = "Metals: count ore",
|
||||
description = "Include raw ores in the metals count.",
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean countOre()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
position = 111,
|
||||
keyName = "countBars",
|
||||
name = "Metals: count bars",
|
||||
description = "Include smelted bars in the metals count.",
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean countBars()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
position = 112,
|
||||
keyName = "countEquipment",
|
||||
name = "Metals: count equipment",
|
||||
description = "Include equipment in the metals count.",
|
||||
section = infoPanelList
|
||||
)
|
||||
default boolean countEquipment()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigSection(
|
||||
name = "Advanced",
|
||||
description = "Advanced Settings",
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
package com.toofifty.easygiantsfoundry;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.client.ui.ColorScheme;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
import java.awt.Color;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Graphics2D;
|
||||
|
||||
@Slf4j
|
||||
@Singleton
|
||||
public final class EasyGiantsFoundryHelper
|
||||
{
|
||||
|
||||
|
||||
public static Color getHeatColor(int actions, int heat)
|
||||
{
|
||||
if (heat >= actions)
|
||||
@@ -26,4 +27,30 @@ public final class EasyGiantsFoundryHelper
|
||||
|
||||
return ColorScheme.PROGRESS_ERROR_COLOR;
|
||||
}
|
||||
|
||||
public static void renderTextLocation(Graphics2D graphics, Point point, String text, Color fg, Color bg, boolean outline)
|
||||
{
|
||||
if (bg != null)
|
||||
{
|
||||
FontMetrics fm = graphics.getFontMetrics();
|
||||
graphics.setColor(bg);
|
||||
graphics.fillRect(point.getX(), point.getY() - fm.getHeight(), fm.stringWidth(text), fm.getHeight());
|
||||
}
|
||||
|
||||
graphics.setColor(Color.BLACK);
|
||||
if (outline)
|
||||
{
|
||||
graphics.drawString(text, point.getX(), point.getY() + 1);
|
||||
graphics.drawString(text, point.getX(), point.getY() - 1);
|
||||
graphics.drawString(text, point.getX() + 1, point.getY());
|
||||
graphics.drawString(text, point.getX() - 1, point.getY());
|
||||
}
|
||||
else
|
||||
{
|
||||
graphics.drawString(text, point.getX() + 1, point.getY() + 1);
|
||||
}
|
||||
|
||||
graphics.setColor(fg);
|
||||
graphics.drawString(text, point.getX(), point.getY());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameObject;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.gameval.InventoryID;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.ItemContainer;
|
||||
import net.runelite.api.MenuAction;
|
||||
@@ -75,6 +75,9 @@ public class EasyGiantsFoundryPlugin extends Plugin
|
||||
@Inject
|
||||
private EasyGiantsFoundryHelper helper;
|
||||
|
||||
@Inject
|
||||
private MetalBarCounter metalBarCounter;
|
||||
|
||||
@Inject
|
||||
private OverlayManager overlayManager;
|
||||
|
||||
@@ -118,6 +121,7 @@ public class EasyGiantsFoundryPlugin extends Plugin
|
||||
{
|
||||
overlayManager.remove(overlay2d);
|
||||
overlayManager.remove(overlay3d);
|
||||
metalBarCounter.clear();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@@ -253,7 +257,7 @@ public class EasyGiantsFoundryPlugin extends Plugin
|
||||
@Subscribe
|
||||
public void onItemContainerChanged(ItemContainerChanged event)
|
||||
{
|
||||
if (event.getContainerId() == InventoryID.EQUIPMENT.getId())
|
||||
if (event.getContainerId() == InventoryID.WORN)
|
||||
{
|
||||
if (event.getItemContainer().count(PREFORM) == 0)
|
||||
{
|
||||
@@ -265,6 +269,10 @@ public class EasyGiantsFoundryPlugin extends Plugin
|
||||
updateSmithsOutfitPieces();
|
||||
}
|
||||
}
|
||||
else if (event.getContainerId() == InventoryID.INV || event.getContainerId() == InventoryID.BANK)
|
||||
{
|
||||
metalBarCounter.put(event.getItemContainer());
|
||||
}
|
||||
}
|
||||
|
||||
public void onMenuEntryAdded(MenuEntryAdded event)
|
||||
@@ -474,7 +482,7 @@ public class EasyGiantsFoundryPlugin extends Plugin
|
||||
{
|
||||
int pieces = 0;
|
||||
|
||||
ItemContainer equipment = client.getItemContainer(InventoryID.EQUIPMENT);
|
||||
ItemContainer equipment = client.getItemContainer(InventoryID.WORN);
|
||||
if (equipment != null)
|
||||
{
|
||||
for (Item item : equipment.getItems())
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package com.toofifty.easygiantsfoundry;
|
||||
|
||||
import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryHelper.getHeatColor;
|
||||
import com.toofifty.easygiantsfoundry.enums.Heat;
|
||||
import com.toofifty.easygiantsfoundry.enums.MetalBarType;
|
||||
import com.toofifty.easygiantsfoundry.enums.Stage;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.client.ui.ColorScheme;
|
||||
import net.runelite.client.ui.overlay.OverlayPanel;
|
||||
@@ -21,9 +21,12 @@ import net.runelite.client.ui.overlay.components.TitleComponent;
|
||||
public class FoundryOverlay2D extends OverlayPanel
|
||||
{
|
||||
private static final int REGION_ID = 13491;
|
||||
private static final int PANEL_WIDTH = 240;
|
||||
|
||||
private final Client client;
|
||||
private final EasyGiantsFoundryPlugin plugin;
|
||||
private final EasyGiantsFoundryState state;
|
||||
private final MetalBarCounter metalBarCounter;
|
||||
private final EasyGiantsFoundryConfig config;
|
||||
|
||||
@Inject
|
||||
@@ -31,13 +34,403 @@ public class FoundryOverlay2D extends OverlayPanel
|
||||
Client client,
|
||||
EasyGiantsFoundryPlugin plugin,
|
||||
EasyGiantsFoundryState state,
|
||||
MetalBarCounter metalBarCounter,
|
||||
EasyGiantsFoundryConfig config)
|
||||
{
|
||||
this.client = client;
|
||||
this.plugin = plugin;
|
||||
this.state = state;
|
||||
this.metalBarCounter = metalBarCounter;
|
||||
this.config = config;
|
||||
this.setPosition(OverlayPosition.BOTTOM_LEFT);
|
||||
setPosition(OverlayPosition.BOTTOM_LEFT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension render(Graphics2D graphics)
|
||||
{
|
||||
if (!config.alwaysDrawInfoPanel() && client.getLocalPlayer().getWorldLocation().getRegionID() != REGION_ID)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
panelComponent.getChildren().clear();
|
||||
panelComponent.setPreferredSize(new Dimension(PANEL_WIDTH, 0));
|
||||
|
||||
boolean hasContent = false;
|
||||
if (config.drawTitle())
|
||||
{
|
||||
panelComponent.getChildren().add(TitleComponent.builder().text("Easy Giants' Foundry").build());
|
||||
hasContent = true;
|
||||
}
|
||||
|
||||
boolean swordPickedUp = state.isEnabled() && state.getCurrentStage() != null;
|
||||
if (swordPickedUp)
|
||||
{
|
||||
hasContent = appendSection(buildStatusLines(), hasContent);
|
||||
hasContent = appendSection(buildProgressLines(), hasContent);
|
||||
hasContent = appendSection(buildHeatPlannerLines(), hasContent);
|
||||
}
|
||||
|
||||
hasContent = appendSection(buildReputationLines(), hasContent);
|
||||
hasContent = appendSection(buildMetalLines(), hasContent);
|
||||
|
||||
if (!hasContent)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return super.render(graphics);
|
||||
}
|
||||
|
||||
private boolean appendSection(List<LineComponent> lines, boolean hasPreviousContent)
|
||||
{
|
||||
if (lines.isEmpty())
|
||||
{
|
||||
return hasPreviousContent;
|
||||
}
|
||||
|
||||
if (hasPreviousContent)
|
||||
{
|
||||
panelComponent.getChildren().add(LineComponent.builder().left(" ").right("").build());
|
||||
}
|
||||
|
||||
panelComponent.getChildren().addAll(lines);
|
||||
return true;
|
||||
}
|
||||
|
||||
private List<LineComponent> buildStatusLines()
|
||||
{
|
||||
List<LineComponent> lines = new ArrayList<>();
|
||||
Heat heat = state.getCurrentHeat();
|
||||
Stage stage = state.getCurrentStage();
|
||||
|
||||
if (config.drawHeatInfo())
|
||||
{
|
||||
lines.add(
|
||||
LineComponent.builder()
|
||||
.left("Heat")
|
||||
.right(heat.getName() + " (" + state.getHeatAmount() / 10 + "%)")
|
||||
.rightColor(heat.getColor())
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
if (config.drawStageInfo())
|
||||
{
|
||||
lines.add(
|
||||
LineComponent.builder()
|
||||
.left("Stage")
|
||||
.right(stage.getName() + " (" + state.getProgressAmount() / 10 + "%)")
|
||||
.rightColor(stage.getHeat().getColor())
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
||||
private List<LineComponent> buildProgressLines()
|
||||
{
|
||||
List<LineComponent> lines = new ArrayList<>();
|
||||
int actionsLeft = state.getActionsLeftInStage();
|
||||
int heatLeft = state.getActionsForHeatLevel();
|
||||
|
||||
if (config.drawActionsLeft())
|
||||
{
|
||||
lines.add(LineComponent.builder().left("Actions left").right(Integer.toString(actionsLeft)).build());
|
||||
}
|
||||
|
||||
if (config.drawHeatLeft())
|
||||
{
|
||||
lines.add(
|
||||
LineComponent.builder()
|
||||
.left("Heat left")
|
||||
.right(Integer.toString(heatLeft))
|
||||
.rightColor(getHeatColor(actionsLeft, heatLeft))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
if (config.drawBonusActions())
|
||||
{
|
||||
lines.add(
|
||||
LineComponent.builder()
|
||||
.left("Bonus actions")
|
||||
.right(state.getBonusActionsReceived() + "/" + state.getBonusActionsExpected())
|
||||
.rightColor(getBonusActionsColor(state.getBonusActionsReceived(), state.getBonusActionsExpected()))
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
||||
private List<LineComponent> buildHeatPlannerLines()
|
||||
{
|
||||
List<LineComponent> lines = new ArrayList<>();
|
||||
if (!config.drawHeatDelta() && !config.drawHeatPlan() && !config.drawHeatActionTimer())
|
||||
{
|
||||
return lines;
|
||||
}
|
||||
|
||||
if (state.getCurrentStage() == null)
|
||||
{
|
||||
return lines;
|
||||
}
|
||||
|
||||
int heatChangeNeeded = state.getHeatChangeNeeded();
|
||||
|
||||
if (config.drawHeatDelta())
|
||||
{
|
||||
lines.add(buildHeatDeltaLine(heatChangeNeeded));
|
||||
}
|
||||
|
||||
if (config.drawHeatPlan())
|
||||
{
|
||||
lines.addAll(buildHeatPlanLines(heatChangeNeeded));
|
||||
}
|
||||
|
||||
if (config.drawHeatActionTimer())
|
||||
{
|
||||
LineComponent timerLine = buildHeatActionTimerLine();
|
||||
if (timerLine != null)
|
||||
{
|
||||
lines.add(timerLine);
|
||||
}
|
||||
}
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
||||
private LineComponent buildHeatDeltaLine(int heatChangeNeeded)
|
||||
{
|
||||
String location;
|
||||
if (heatChangeNeeded > 0)
|
||||
{
|
||||
location = "Lava";
|
||||
}
|
||||
else if (heatChangeNeeded < 0)
|
||||
{
|
||||
location = "Waterfall";
|
||||
}
|
||||
else
|
||||
{
|
||||
location = "In range";
|
||||
}
|
||||
|
||||
String deltaText = heatChangeNeeded == 0
|
||||
? "0 (in range)"
|
||||
: String.format("%+d (%s)", heatChangeNeeded, location);
|
||||
|
||||
Color color = heatChangeNeeded == 0 ? ColorScheme.PROGRESS_COMPLETE_COLOR : config.lavaWaterfallColour();
|
||||
|
||||
return LineComponent.builder()
|
||||
.left("Heat Δ")
|
||||
.right(deltaText)
|
||||
.rightColor(color)
|
||||
.build();
|
||||
}
|
||||
|
||||
private List<LineComponent> buildHeatPlanLines(int heatChangeNeeded)
|
||||
{
|
||||
List<LineComponent> lines = new ArrayList<>();
|
||||
|
||||
if (heatChangeNeeded == 0)
|
||||
{
|
||||
lines.add(
|
||||
LineComponent.builder()
|
||||
.left("Heat plan")
|
||||
.right("Hold")
|
||||
.rightColor(ColorScheme.PROGRESS_COMPLETE_COLOR)
|
||||
.build()
|
||||
);
|
||||
return lines;
|
||||
}
|
||||
|
||||
boolean isHeating = heatChangeNeeded > 0;
|
||||
HeatActionSolver.DurationResult fast = solveHeatAction(true, isHeating);
|
||||
HeatActionSolver.DurationResult slow = solveHeatAction(false, isHeating);
|
||||
boolean added = false;
|
||||
|
||||
if (fast != null && fast.getDuration() > 0)
|
||||
{
|
||||
lines.add(buildHeatPlanLine("Fast", isHeating, true, fast));
|
||||
added = true;
|
||||
}
|
||||
|
||||
if (slow != null && slow.getDuration() > 0)
|
||||
{
|
||||
lines.add(buildHeatPlanLine("Slow", isHeating, false, slow));
|
||||
added = true;
|
||||
}
|
||||
|
||||
if (!added)
|
||||
{
|
||||
lines.add(
|
||||
LineComponent.builder()
|
||||
.left("Heat plan")
|
||||
.right("Hold")
|
||||
.rightColor(ColorScheme.PROGRESS_COMPLETE_COLOR)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
||||
private LineComponent buildHeatPlanLine(String label, boolean isHeating, boolean fast, HeatActionSolver.DurationResult result)
|
||||
{
|
||||
String actionName = getActionName(isHeating, fast);
|
||||
String value = String.format("%s %dt → %s%s",
|
||||
actionName,
|
||||
result.getDuration(),
|
||||
formatPredictedHeat(result.getPredictedHeat()),
|
||||
formatPlanStatus(result));
|
||||
|
||||
return LineComponent.builder()
|
||||
.left(label)
|
||||
.right(value)
|
||||
.rightColor(config.lavaWaterfallColour())
|
||||
.build();
|
||||
}
|
||||
|
||||
private HeatActionSolver.DurationResult solveHeatAction(boolean fast, boolean isHeating)
|
||||
{
|
||||
Stage stage = state.getCurrentStage();
|
||||
if (stage == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return HeatActionSolver.solve(
|
||||
stage,
|
||||
state.getCurrentHeatRange(),
|
||||
state.getActionsLeftInStage(),
|
||||
state.getHeatAmount(),
|
||||
fast,
|
||||
isHeating,
|
||||
config.heatActionPadTicks(),
|
||||
state.isPlayerRunning()
|
||||
);
|
||||
}
|
||||
|
||||
private LineComponent buildHeatActionTimerLine()
|
||||
{
|
||||
HeatActionStateMachine machine = state.heatActionStateMachine;
|
||||
if (machine.isIdle() || machine.getActionname() == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return LineComponent.builder()
|
||||
.left("Action")
|
||||
.right(String.format(
|
||||
"%s %dt → %s%s",
|
||||
prettifyActionName(machine.getActionname()),
|
||||
machine.getRemainingDuration(),
|
||||
formatPredictedHeat(machine.getPredictedHeat()),
|
||||
machine.isGoalInRange() ? "" : machine.isOverShooting() ? " (overshoot)" : " (limit)"))
|
||||
.rightColor(config.lavaWaterfallColour())
|
||||
.build();
|
||||
}
|
||||
|
||||
private String formatPredictedHeat(int predictedHeat)
|
||||
{
|
||||
return heatPercent(predictedHeat) + "%";
|
||||
}
|
||||
|
||||
private String formatPlanStatus(HeatActionSolver.DurationResult result)
|
||||
{
|
||||
if (result == null || result.isGoalInRange())
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
return result.isOvershooting() ? " (overshoot)" : " (limit)";
|
||||
}
|
||||
|
||||
private String getActionName(boolean isHeating, boolean fast)
|
||||
{
|
||||
if (isHeating)
|
||||
{
|
||||
return fast ? "Dunk" : "Heat";
|
||||
}
|
||||
return fast ? "Quench" : "Cool";
|
||||
}
|
||||
|
||||
private String prettifyActionName(String action)
|
||||
{
|
||||
if (action == null || action.isEmpty())
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case "dunks":
|
||||
return "Dunk";
|
||||
case "heats":
|
||||
return "Heat";
|
||||
case "cools":
|
||||
return "Cool";
|
||||
case "quenches":
|
||||
return "Quench";
|
||||
default:
|
||||
return Character.toUpperCase(action.charAt(0)) + action.substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
private int heatPercent(int heat)
|
||||
{
|
||||
return Math.max(0, Math.min(1000, heat)) / 10;
|
||||
}
|
||||
|
||||
private List<LineComponent> buildReputationLines()
|
||||
{
|
||||
List<LineComponent> lines = new ArrayList<>();
|
||||
if (!config.drawShopPoints())
|
||||
{
|
||||
return lines;
|
||||
}
|
||||
|
||||
lines.add(LineComponent.builder().left("Reputation").right(Integer.toString(plugin.getReputation())).build());
|
||||
return lines;
|
||||
}
|
||||
|
||||
private List<LineComponent> buildMetalLines()
|
||||
{
|
||||
List<LineComponent> lines = new ArrayList<>();
|
||||
if (!config.drawMetals())
|
||||
{
|
||||
return lines;
|
||||
}
|
||||
|
||||
if (!metalBarCounter.isSeenBank())
|
||||
{
|
||||
lines.add(
|
||||
LineComponent.builder()
|
||||
.left("Metals: open bank")
|
||||
.leftColor(Color.RED)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
addMetalCount(lines, "Bronze bars:", metalBarCounter.get(MetalBarType.BRONZE));
|
||||
addMetalCount(lines, "Iron bars:", metalBarCounter.get(MetalBarType.IRON));
|
||||
addMetalCount(lines, "Steel bars:", metalBarCounter.get(MetalBarType.STEEL));
|
||||
addMetalCount(lines, "Mithril bars:", metalBarCounter.get(MetalBarType.MITHRIL));
|
||||
addMetalCount(lines, "Adamant bars:", metalBarCounter.get(MetalBarType.ADAMANT));
|
||||
addMetalCount(lines, "Runite bars:", metalBarCounter.get(MetalBarType.RUNITE));
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
||||
private void addMetalCount(List<LineComponent> lines, String displayName, int count)
|
||||
{
|
||||
if (count > 0 || config.drawAllMetals())
|
||||
{
|
||||
lines.add(LineComponent.builder().left(displayName).right(Integer.toString(count)).build());
|
||||
}
|
||||
}
|
||||
|
||||
private Color getHeatColor(int actions, int heat)
|
||||
@@ -64,70 +457,4 @@ public class FoundryOverlay2D extends OverlayPanel
|
||||
|
||||
return ColorScheme.PROGRESS_INPROGRESS_COLOR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension render(Graphics2D graphics)
|
||||
{
|
||||
if (client.getLocalPlayer().getWorldLocation().getRegionID() != REGION_ID)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
boolean swordPickedUp = state.isEnabled() && state.getCurrentStage() != null;
|
||||
|
||||
if (config.drawTitle())
|
||||
{
|
||||
panelComponent.getChildren().add(TitleComponent.builder().text("Easy Giants' Foundry").build());
|
||||
}
|
||||
|
||||
if (swordPickedUp)
|
||||
{
|
||||
Heat heat = state.getCurrentHeat();
|
||||
Stage stage = state.getCurrentStage();
|
||||
|
||||
if (config.drawHeatInfo())
|
||||
{
|
||||
panelComponent.getChildren().add(
|
||||
LineComponent.builder().left("Heat").right(heat.getName() + " (" + state.getHeatAmount() / 10 + "%)").rightColor(heat.getColor()).build()
|
||||
);
|
||||
}
|
||||
if (config.drawStageInfo())
|
||||
{
|
||||
panelComponent.getChildren().add(
|
||||
LineComponent.builder().left("Stage").right(stage.getName() + " (" + state.getProgressAmount() / 10 + "%)").rightColor(stage.getHeat().getColor()).build()
|
||||
);
|
||||
}
|
||||
|
||||
int actionsLeft = state.getActionsLeftInStage();
|
||||
int heatLeft = state.getActionsForHeatLevel();
|
||||
|
||||
if (config.drawActionsLeft())
|
||||
{
|
||||
panelComponent.getChildren().add(
|
||||
LineComponent.builder().left("Actions left").right(actionsLeft + "").build()
|
||||
);
|
||||
}
|
||||
if (config.drawHeatLeft())
|
||||
{
|
||||
panelComponent.getChildren().add(
|
||||
LineComponent.builder().left("Heat left").right(heatLeft + "").rightColor(getHeatColor(actionsLeft, heatLeft)).build()
|
||||
);
|
||||
}
|
||||
if (config.drawBonusActions())
|
||||
{
|
||||
panelComponent.getChildren().add(
|
||||
LineComponent.builder().left("Bonus actions").right(state.getBonusActionsReceived() + "/" + state.getBonusActionsExpected()).rightColor(getBonusActionsColor(state.getBonusActionsReceived(), state.getBonusActionsExpected())).build()
|
||||
);
|
||||
}
|
||||
}
|
||||
//
|
||||
// int points = plugin.getPointsTracker().getShopPoints();
|
||||
if (config.drawShopPoints())
|
||||
{
|
||||
panelComponent.getChildren().add(
|
||||
LineComponent.builder().left("Reputation").right(plugin.getReputation() + "").build()
|
||||
);
|
||||
}
|
||||
|
||||
return super.render(graphics);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,11 @@ package com.toofifty.easygiantsfoundry;
|
||||
|
||||
import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryClientIDs.*;
|
||||
import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryHelper.getHeatColor;
|
||||
import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryHelper.renderTextLocation;
|
||||
import static com.toofifty.easygiantsfoundry.MouldHelper.SWORD_TYPE_1_VARBIT;
|
||||
import static com.toofifty.easygiantsfoundry.MouldHelper.SWORD_TYPE_2_VARBIT;
|
||||
import com.toofifty.easygiantsfoundry.enums.CommissionType;
|
||||
import com.toofifty.easygiantsfoundry.enums.FontType;
|
||||
import com.toofifty.easygiantsfoundry.enums.Heat;
|
||||
import com.toofifty.easygiantsfoundry.enums.Stage;
|
||||
|
||||
@@ -12,6 +14,8 @@ import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Shape;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import net.runelite.api.Client;
|
||||
@@ -24,7 +28,6 @@ import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
||||
import net.runelite.client.ui.overlay.outline.ModelOutlineRenderer;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@@ -107,6 +110,11 @@ public class FoundryOverlay3D extends Overlay
|
||||
return null;
|
||||
}
|
||||
|
||||
if (config.dynamicOverlayFont() != FontType.DEFAULT)
|
||||
{
|
||||
graphics.setFont(config.dynamicOverlayFont().getFont());
|
||||
}
|
||||
|
||||
if (config.highlightKovac())
|
||||
{
|
||||
drawKovacIfHandIn(graphics);
|
||||
@@ -147,8 +155,6 @@ public class FoundryOverlay3D extends Overlay
|
||||
return null;
|
||||
}
|
||||
|
||||
drawActionOverlay(graphics, stageObject);
|
||||
|
||||
Heat heat = state.getCurrentHeat();
|
||||
Color color = getObjectColor(stage, heat);
|
||||
// TODO Config
|
||||
@@ -186,6 +192,8 @@ public class FoundryOverlay3D extends Overlay
|
||||
}
|
||||
}
|
||||
|
||||
drawActionOverlay(graphics, stageObject);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -194,6 +202,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
Shape objectClickbox = stageObject.getClickbox();
|
||||
if (objectClickbox != null && config.highlightTools())
|
||||
{
|
||||
objectClickbox = scaleShape(objectClickbox);
|
||||
Point mousePosition = client.getMouseCanvasPosition();
|
||||
if (objectClickbox.contains(mousePosition.getX(), mousePosition.getY()))
|
||||
{
|
||||
@@ -274,7 +283,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
|
||||
Color color = config.lavaWaterfallColour();
|
||||
|
||||
OverlayUtil.renderTextLocation(graphics, pos, text, color);
|
||||
renderTextLocation(graphics, pos, text, color, config.textBackground(), config.textOutline());
|
||||
}
|
||||
|
||||
private void drawHeatChangerOverlay(Graphics2D graphics, GameObject stageObject)
|
||||
@@ -304,7 +313,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
Point pos = Perspective.getCanvasTextLocation(client, graphics, stageLoc, text, 50);
|
||||
Color color = config.lavaWaterfallColour();
|
||||
|
||||
OverlayUtil.renderTextLocation(graphics, pos, text, color);
|
||||
renderTextLocation(graphics, pos, text, color, config.textBackground(), config.textOutline());
|
||||
}
|
||||
|
||||
private void drawHeatChangers(Graphics2D graphics)
|
||||
@@ -324,6 +333,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
}
|
||||
if (shape != null)
|
||||
{
|
||||
shape = scaleShape(shape);
|
||||
Point mousePosition = client.getMouseCanvasPosition();
|
||||
Color color = config.lavaWaterfallColour();
|
||||
if (shape.contains(mousePosition.getX(), mousePosition.getY()))
|
||||
@@ -382,7 +392,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
{
|
||||
color = config.generalHighlight();
|
||||
}
|
||||
OverlayUtil.renderTextLocation(graphics, pos, text, color);
|
||||
renderTextLocation(graphics, pos, text, color, config.textBackground(), config.textOutline());
|
||||
}
|
||||
|
||||
private void drawMouldScoreIfMouldSet(Graphics2D graphics) {
|
||||
@@ -405,7 +415,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
Point pos = Perspective.getCanvasTextLocation(client, graphics, mouldLoc, text, 115);
|
||||
Color color = config.generalHighlight();
|
||||
|
||||
OverlayUtil.renderTextLocation(graphics, pos, text, color);
|
||||
renderTextLocation(graphics, pos, text, color, config.textBackground(), config.textOutline());
|
||||
}
|
||||
private void drawPreformScoreIfPoured(Graphics2D graphics) {
|
||||
if (client.getVarbitValue(VARBIT_GAME_STAGE) != 2)
|
||||
@@ -425,7 +435,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
|
||||
Color color = config.generalHighlight();
|
||||
|
||||
OverlayUtil.renderTextLocation(graphics, pos, text, color);
|
||||
renderTextLocation(graphics, pos, text, color, config.textBackground(), config.textOutline());
|
||||
}
|
||||
|
||||
private void drawCrucibleIfMouldSet(Graphics2D graphics)
|
||||
@@ -439,13 +449,12 @@ public class FoundryOverlay3D extends Overlay
|
||||
return;
|
||||
}
|
||||
|
||||
drawCrucibleContent(graphics);
|
||||
|
||||
if (config.highlightStyle() == HighlightStyle.HIGHLIGHT_CLICKBOX)
|
||||
{
|
||||
Shape shape = crucible.getConvexHull();
|
||||
if (shape != null)
|
||||
{
|
||||
shape = scaleShape(shape);
|
||||
Color color = config.generalHighlight();
|
||||
if (state.getCrucibleCount() == CRUCIBLE_CAPACITY)
|
||||
{
|
||||
@@ -473,6 +482,8 @@ public class FoundryOverlay3D extends Overlay
|
||||
}
|
||||
drawObjectOutline(graphics, crucible, color);
|
||||
}
|
||||
|
||||
drawCrucibleContent(graphics);
|
||||
}
|
||||
|
||||
private void drawMouldIfNotSet(Graphics2D graphics)
|
||||
@@ -489,6 +500,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
Shape shape = mouldJig.getConvexHull();
|
||||
if (shape != null)
|
||||
{
|
||||
shape = scaleShape(shape);
|
||||
Color color = config.generalHighlight();
|
||||
graphics.setColor(color);
|
||||
graphics.draw(shape);
|
||||
@@ -510,15 +522,37 @@ public class FoundryOverlay3D extends Overlay
|
||||
textLocation = new LocalPoint(textLocation.getX(), textLocation.getY());
|
||||
Point canvasLocation = Perspective.getCanvasTextLocation(client, graphics, textLocation, text, 100);
|
||||
canvasLocation = new Point(canvasLocation.getX(), canvasLocation.getY() + 10);
|
||||
OverlayUtil.renderTextLocation(graphics, canvasLocation, text, config.generalHighlight());
|
||||
renderTextLocation(graphics, canvasLocation, text, config.generalHighlight(), config.textBackground(), config.textOutline());
|
||||
}
|
||||
}
|
||||
|
||||
private Shape scaleShape(Shape shape)
|
||||
{
|
||||
if (shape == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
double scale = config.clickboxScale() / 100.0;
|
||||
if (Math.abs(scale - 1.0) < 0.01)
|
||||
{
|
||||
return shape;
|
||||
}
|
||||
|
||||
Rectangle2D bounds = shape.getBounds2D();
|
||||
AffineTransform transform = new AffineTransform();
|
||||
transform.translate(bounds.getCenterX(), bounds.getCenterY());
|
||||
transform.scale(scale, scale);
|
||||
transform.translate(-bounds.getCenterX(), -bounds.getCenterY());
|
||||
return transform.createTransformedShape(shape);
|
||||
}
|
||||
|
||||
private void drawStorage(Graphics2D graphics)
|
||||
{
|
||||
Shape shape = storage.getConvexHull();
|
||||
if (shape != null)
|
||||
{
|
||||
shape = scaleShape(shape);
|
||||
Color color = config.generalHighlight();
|
||||
graphics.setColor(color);
|
||||
graphics.draw(shape);
|
||||
@@ -532,14 +566,15 @@ public class FoundryOverlay3D extends Overlay
|
||||
Widget handInWidget = client.getWidget(HAND_IN_WIDGET);
|
||||
if (handInWidget != null && !handInWidget.isHidden())
|
||||
{
|
||||
Shape shape = kovac.getConvexHull();
|
||||
if (shape != null)
|
||||
{
|
||||
Color color = config.generalHighlight();
|
||||
graphics.setColor(color);
|
||||
graphics.draw(shape);
|
||||
graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), 20));
|
||||
graphics.fill(shape);
|
||||
Shape shape = kovac.getConvexHull();
|
||||
if (shape != null)
|
||||
{
|
||||
shape = scaleShape(shape);
|
||||
Color color = config.generalHighlight();
|
||||
graphics.setColor(color);
|
||||
graphics.draw(shape);
|
||||
graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), 20));
|
||||
graphics.fill(shape);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -562,7 +597,7 @@ public class FoundryOverlay3D extends Overlay
|
||||
{
|
||||
return;
|
||||
}
|
||||
OverlayUtil.renderTextLocation(graphics, canvasLocation, text, getHeatColor(actionsLeft, heatLeft));
|
||||
renderTextLocation(graphics, canvasLocation, text, getHeatColor(actionsLeft, heatLeft), config.textBackground(), config.textOutline());
|
||||
}
|
||||
if (config.drawActionLeftOverlay())
|
||||
// Draw actions left
|
||||
@@ -575,8 +610,8 @@ public class FoundryOverlay3D extends Overlay
|
||||
{
|
||||
return;
|
||||
}
|
||||
canvasLocation = new Point(canvasLocation.getX(), canvasLocation.getY() + 10);
|
||||
OverlayUtil.renderTextLocation(graphics, canvasLocation, text, getHeatColor(actionsLeft, heatLeft));
|
||||
canvasLocation = new Point(canvasLocation.getX(), canvasLocation.getY() + graphics.getFontMetrics().getHeight());
|
||||
renderTextLocation(graphics, canvasLocation, text, getHeatColor(actionsLeft, heatLeft), config.textBackground(), config.textOutline());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
package com.toofifty.easygiantsfoundry;
|
||||
|
||||
import com.toofifty.easygiantsfoundry.enums.MetalBarSource;
|
||||
import com.toofifty.easygiantsfoundry.enums.MetalBarType;
|
||||
import lombok.Getter;
|
||||
import lombok.Value;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.ItemContainer;
|
||||
import net.runelite.api.gameval.InventoryID;
|
||||
import net.runelite.api.gameval.ItemID;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Singleton
|
||||
public class MetalBarCounter
|
||||
{
|
||||
private final Map<Integer, Map<MetalBarType, CountsBySource>> index = new HashMap<>(); // container id -> bar counts
|
||||
|
||||
@Inject
|
||||
private EasyGiantsFoundryConfig config;
|
||||
|
||||
@Getter
|
||||
private boolean seenBank = false;
|
||||
|
||||
public int get(MetalBarType type)
|
||||
{
|
||||
int count = 0;
|
||||
for (Map<MetalBarType, CountsBySource> counts : index.values())
|
||||
{
|
||||
count += counts.get(type).sum(config);
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
index.clear();
|
||||
seenBank = false;
|
||||
}
|
||||
|
||||
public void put(ItemContainer container)
|
||||
{
|
||||
int tinOre = 0;
|
||||
int copperOre = 0;
|
||||
int ironOre = 0;
|
||||
|
||||
if (container.getId() == InventoryID.BANK)
|
||||
{
|
||||
seenBank = true;
|
||||
}
|
||||
|
||||
Map<MetalBarType, CountsBySource> counts = newCounts();
|
||||
for (Item item : container.getItems())
|
||||
{
|
||||
MetalBarValues.Record record = MetalBarValues.get(item.getId());
|
||||
if (record == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// ore special cases:
|
||||
// * add bronze bars equal to min(tin, copper)
|
||||
// * there is an edge case here where it won't sum quite right multiple item containers but I don't really
|
||||
// care to code for that right now
|
||||
// * iron ore counts for both iron and steel
|
||||
switch (item.getId())
|
||||
{
|
||||
case ItemID.TIN_ORE:
|
||||
case ItemID.Cert.TIN_ORE:
|
||||
tinOre += item.getQuantity();
|
||||
break;
|
||||
case ItemID.COPPER_ORE:
|
||||
case ItemID.Cert.COPPER_ORE:
|
||||
copperOre += item.getQuantity();
|
||||
break;
|
||||
case ItemID.IRON_ORE:
|
||||
case ItemID.Cert.IRON_ORE:
|
||||
ironOre += item.getQuantity();
|
||||
break;
|
||||
default:
|
||||
counts.compute(record.getType(), (k, v) ->
|
||||
v.add(record.getSource(), record.getValue() * item.getQuantity()));
|
||||
}
|
||||
}
|
||||
|
||||
int finalTinOre = tinOre;
|
||||
int finalCopperOre = copperOre;
|
||||
int finalIronOre = ironOre;
|
||||
counts.compute(MetalBarType.BRONZE, (k, v) ->
|
||||
v.add(MetalBarSource.ORE, Math.min(finalTinOre, finalCopperOre)));
|
||||
counts.compute(MetalBarType.IRON, (k, v) ->
|
||||
v.add(MetalBarSource.ORE, finalIronOre));
|
||||
counts.compute(MetalBarType.STEEL, (k, v) ->
|
||||
v.add(MetalBarSource.ORE, finalIronOre));
|
||||
|
||||
index.put(container.getId(), counts);
|
||||
}
|
||||
|
||||
private static Map<MetalBarType, CountsBySource> newCounts()
|
||||
{
|
||||
Map<MetalBarType, CountsBySource> counts = new HashMap<>();
|
||||
counts.put(MetalBarType.BRONZE, CountsBySource.empty());
|
||||
counts.put(MetalBarType.IRON, CountsBySource.empty());
|
||||
counts.put(MetalBarType.STEEL, CountsBySource.empty());
|
||||
counts.put(MetalBarType.MITHRIL, CountsBySource.empty());
|
||||
counts.put(MetalBarType.ADAMANT, CountsBySource.empty());
|
||||
counts.put(MetalBarType.RUNITE, CountsBySource.empty());
|
||||
return counts;
|
||||
}
|
||||
|
||||
@Value
|
||||
private static class CountsBySource
|
||||
{
|
||||
int ores, bars, equipment;
|
||||
|
||||
public static CountsBySource empty()
|
||||
{
|
||||
return new CountsBySource(0, 0, 0);
|
||||
}
|
||||
|
||||
public CountsBySource add(MetalBarSource source, int count)
|
||||
{
|
||||
switch (source)
|
||||
{
|
||||
case ORE:
|
||||
return new CountsBySource(ores + count, bars, equipment);
|
||||
case BAR:
|
||||
return new CountsBySource(ores, bars + count, equipment);
|
||||
case EQUIPMENT:
|
||||
return new CountsBySource(ores, bars, equipment + count);
|
||||
default:
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public int sum(EasyGiantsFoundryConfig config)
|
||||
{
|
||||
int sum = config.countOre() ? ores : 0;
|
||||
sum += config.countBars() ? bars : 0;
|
||||
sum += config.countEquipment() ? equipment : 0;
|
||||
return sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
238
src/main/java/com/toofifty/easygiantsfoundry/MetalBarValues.java
Normal file
238
src/main/java/com/toofifty/easygiantsfoundry/MetalBarValues.java
Normal file
@@ -0,0 +1,238 @@
|
||||
package com.toofifty.easygiantsfoundry;
|
||||
|
||||
import com.toofifty.easygiantsfoundry.enums.MetalBarSource;
|
||||
import com.toofifty.easygiantsfoundry.enums.MetalBarType;
|
||||
import lombok.Value;
|
||||
import net.runelite.api.gameval.ItemID;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class MetalBarValues
|
||||
{
|
||||
private static final HashMap<Integer, Record> values = new HashMap<>();
|
||||
|
||||
static
|
||||
{
|
||||
// tin, copper, and iron are included here so the counter doesn't ignore them, but their actual counts are
|
||||
// handled as special cases
|
||||
putOre(ItemID.TIN_ORE, MetalBarType.BRONZE);
|
||||
putOre(ItemID.COPPER_ORE, MetalBarType.BRONZE);
|
||||
putOre(ItemID.IRON_BAR, MetalBarType.IRON);
|
||||
putOre(ItemID.MITHRIL_ORE, MetalBarType.MITHRIL);
|
||||
putOre(ItemID.ADAMANTITE_ORE, MetalBarType.ADAMANT);
|
||||
putOre(ItemID.RUNITE_ORE, MetalBarType.RUNITE);
|
||||
putOre(ItemID.Cert.TIN_ORE, MetalBarType.BRONZE);
|
||||
putOre(ItemID.Cert.COPPER_ORE, MetalBarType.BRONZE);
|
||||
putOre(ItemID.Cert.IRON_BAR, MetalBarType.IRON);
|
||||
putOre(ItemID.Cert.MITHRIL_ORE, MetalBarType.MITHRIL);
|
||||
putOre(ItemID.Cert.ADAMANTITE_ORE, MetalBarType.ADAMANT);
|
||||
putOre(ItemID.Cert.RUNITE_ORE, MetalBarType.RUNITE);
|
||||
|
||||
putBar(ItemID.BRONZE_BAR, MetalBarType.BRONZE);
|
||||
putBar(ItemID.IRON_BAR, MetalBarType.IRON);
|
||||
putBar(ItemID.STEEL_BAR, MetalBarType.STEEL);
|
||||
putBar(ItemID.MITHRIL_BAR, MetalBarType.MITHRIL);
|
||||
putBar(ItemID.ADAMANTITE_BAR, MetalBarType.ADAMANT);
|
||||
putBar(ItemID.RUNITE_BAR, MetalBarType.RUNITE);
|
||||
putBar(ItemID.Cert.BRONZE_BAR, MetalBarType.BRONZE);
|
||||
putBar(ItemID.Cert.IRON_BAR, MetalBarType.IRON);
|
||||
putBar(ItemID.Cert.STEEL_BAR, MetalBarType.STEEL);
|
||||
putBar(ItemID.Cert.MITHRIL_BAR, MetalBarType.MITHRIL);
|
||||
putBar(ItemID.Cert.ADAMANTITE_BAR, MetalBarType.ADAMANT);
|
||||
putBar(ItemID.Cert.RUNITE_BAR, MetalBarType.RUNITE);
|
||||
|
||||
putEquipment(ItemID.BRONZE_SCIMITAR, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.BRONZE_LONGSWORD, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.BRONZE_FULL_HELM, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.BRONZE_SQ_SHIELD, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.BRONZE_CLAWS, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.BRONZE_WARHAMMER, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.BRONZE_BATTLEAXE, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.BRONZE_CHAINBODY, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.BRONZE_KITESHIELD, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.BRONZE_2H_SWORD, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.BRONZE_PLATELEGS, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.BRONZE_PLATESKIRT, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.BRONZE_PLATEBODY, MetalBarType.BRONZE, 4);
|
||||
putEquipment(ItemID.Cert.BRONZE_SCIMITAR, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.Cert.BRONZE_LONGSWORD, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.Cert.BRONZE_FULL_HELM, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.Cert.BRONZE_SQ_SHIELD, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.Cert.BRONZE_CLAWS, MetalBarType.BRONZE, 1);
|
||||
putEquipment(ItemID.Cert.BRONZE_WARHAMMER, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.Cert.BRONZE_BATTLEAXE, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.Cert.BRONZE_CHAINBODY, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.Cert.BRONZE_KITESHIELD, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.Cert.BRONZE_2H_SWORD, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.Cert.BRONZE_PLATELEGS, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.Cert.BRONZE_PLATESKIRT, MetalBarType.BRONZE, 2);
|
||||
putEquipment(ItemID.Cert.BRONZE_PLATEBODY, MetalBarType.BRONZE, 4);
|
||||
|
||||
putEquipment(ItemID.IRON_SCIMITAR, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.IRON_LONGSWORD, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.IRON_FULL_HELM, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.IRON_SQ_SHIELD, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.IRON_CLAWS, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.IRON_WARHAMMER, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.IRON_BATTLEAXE, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.IRON_CHAINBODY, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.IRON_KITESHIELD, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.IRON_2H_SWORD, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.IRON_PLATELEGS, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.IRON_PLATESKIRT, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.IRON_PLATEBODY, MetalBarType.IRON, 4);
|
||||
putEquipment(ItemID.Cert.IRON_SCIMITAR, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.Cert.IRON_LONGSWORD, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.Cert.IRON_FULL_HELM, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.Cert.IRON_SQ_SHIELD, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.Cert.IRON_CLAWS, MetalBarType.IRON, 1);
|
||||
putEquipment(ItemID.Cert.IRON_WARHAMMER, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.Cert.IRON_BATTLEAXE, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.Cert.IRON_CHAINBODY, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.Cert.IRON_KITESHIELD, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.Cert.IRON_2H_SWORD, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.Cert.IRON_PLATELEGS, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.Cert.IRON_PLATESKIRT, MetalBarType.IRON, 2);
|
||||
putEquipment(ItemID.Cert.IRON_PLATEBODY, MetalBarType.IRON, 4);
|
||||
|
||||
putEquipment(ItemID.STEEL_SCIMITAR, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.STEEL_LONGSWORD, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.STEEL_FULL_HELM, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.STEEL_SQ_SHIELD, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.STEEL_CLAWS, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.STEEL_WARHAMMER, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.STEEL_BATTLEAXE, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.STEEL_CHAINBODY, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.STEEL_KITESHIELD, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.STEEL_2H_SWORD, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.STEEL_PLATELEGS, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.STEEL_PLATESKIRT, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.STEEL_PLATEBODY, MetalBarType.STEEL, 4);
|
||||
putEquipment(ItemID.Cert.STEEL_SCIMITAR, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.Cert.STEEL_LONGSWORD, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.Cert.STEEL_FULL_HELM, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.Cert.STEEL_SQ_SHIELD, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.Cert.STEEL_CLAWS, MetalBarType.STEEL, 1);
|
||||
putEquipment(ItemID.Cert.STEEL_WARHAMMER, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.Cert.STEEL_BATTLEAXE, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.Cert.STEEL_CHAINBODY, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.Cert.STEEL_KITESHIELD, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.Cert.STEEL_2H_SWORD, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.Cert.STEEL_PLATELEGS, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.Cert.STEEL_PLATESKIRT, MetalBarType.STEEL, 2);
|
||||
putEquipment(ItemID.Cert.STEEL_PLATEBODY, MetalBarType.STEEL, 4);
|
||||
|
||||
putEquipment(ItemID.MITHRIL_SCIMITAR, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.MITHRIL_LONGSWORD, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.MITHRIL_FULL_HELM, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.MITHRIL_SQ_SHIELD, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.MITHRIL_CLAWS, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.MITHRIL_WARHAMMER, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.MITHRIL_BATTLEAXE, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.MITHRIL_CHAINBODY, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.MITHRIL_KITESHIELD, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.MITHRIL_2H_SWORD, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.MITHRIL_PLATELEGS, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.MITHRIL_PLATESKIRT, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.MITHRIL_PLATEBODY, MetalBarType.MITHRIL, 4);
|
||||
putEquipment(ItemID.Cert.MITHRIL_SCIMITAR, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.Cert.MITHRIL_LONGSWORD, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.Cert.MITHRIL_FULL_HELM, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.Cert.MITHRIL_SQ_SHIELD, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.Cert.MITHRIL_CLAWS, MetalBarType.MITHRIL, 1);
|
||||
putEquipment(ItemID.Cert.MITHRIL_WARHAMMER, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.Cert.MITHRIL_BATTLEAXE, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.Cert.MITHRIL_CHAINBODY, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.Cert.MITHRIL_KITESHIELD, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.Cert.MITHRIL_2H_SWORD, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.Cert.MITHRIL_PLATELEGS, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.Cert.MITHRIL_PLATESKIRT, MetalBarType.MITHRIL, 2);
|
||||
putEquipment(ItemID.Cert.MITHRIL_PLATEBODY, MetalBarType.MITHRIL, 4);
|
||||
|
||||
putEquipment(ItemID.ADAMANT_SCIMITAR, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.ADAMANT_LONGSWORD, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.ADAMANT_FULL_HELM, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.ADAMANT_SQ_SHIELD, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.ADAMANT_CLAWS, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.ADAMNT_WARHAMMER, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.ADAMANT_BATTLEAXE, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.ADAMANT_CHAINBODY, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.ADAMANT_KITESHIELD, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.ADAMANT_2H_SWORD, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.ADAMANT_PLATELEGS, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.ADAMANT_PLATESKIRT, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.ADAMANT_PLATEBODY, MetalBarType.ADAMANT, 4);
|
||||
putEquipment(ItemID.Cert.ADAMANT_SCIMITAR, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.Cert.ADAMANT_LONGSWORD, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.Cert.ADAMANT_FULL_HELM, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.Cert.ADAMANT_SQ_SHIELD, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.Cert.ADAMANT_CLAWS, MetalBarType.ADAMANT, 1);
|
||||
putEquipment(ItemID.Cert.ADAMNT_WARHAMMER, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.Cert.ADAMANT_BATTLEAXE, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.Cert.ADAMANT_CHAINBODY, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.Cert.ADAMANT_KITESHIELD, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.Cert.ADAMANT_2H_SWORD, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.Cert.ADAMANT_PLATELEGS, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.Cert.ADAMANT_PLATESKIRT, MetalBarType.ADAMANT, 2);
|
||||
putEquipment(ItemID.Cert.ADAMANT_PLATEBODY, MetalBarType.ADAMANT, 4);
|
||||
|
||||
putEquipment(ItemID.RUNE_SCIMITAR, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.RUNE_LONGSWORD, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.RUNE_FULL_HELM, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.RUNE_SQ_SHIELD, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.RUNE_CLAWS, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.RUNE_WARHAMMER, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.RUNE_BATTLEAXE, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.RUNE_CHAINBODY, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.RUNE_KITESHIELD, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.RUNE_2H_SWORD, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.RUNE_PLATELEGS, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.RUNE_PLATESKIRT, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.RUNE_PLATEBODY, MetalBarType.RUNITE, 4);
|
||||
putEquipment(ItemID.Cert.RUNE_SCIMITAR, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.Cert.RUNE_LONGSWORD, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.Cert.RUNE_FULL_HELM, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.Cert.RUNE_SQ_SHIELD, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.Cert.RUNE_CLAWS, MetalBarType.RUNITE, 1);
|
||||
putEquipment(ItemID.Cert.RUNE_WARHAMMER, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.Cert.RUNE_BATTLEAXE, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.Cert.RUNE_CHAINBODY, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.Cert.RUNE_KITESHIELD, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.Cert.RUNE_2H_SWORD, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.Cert.RUNE_PLATELEGS, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.Cert.RUNE_PLATESKIRT, MetalBarType.RUNITE, 2);
|
||||
putEquipment(ItemID.Cert.RUNE_PLATEBODY, MetalBarType.RUNITE, 4);
|
||||
}
|
||||
|
||||
@Value
|
||||
public static class Record
|
||||
{
|
||||
MetalBarType type;
|
||||
MetalBarSource source;
|
||||
int value;
|
||||
}
|
||||
|
||||
public static Record get(int id)
|
||||
{
|
||||
return values.get(id);
|
||||
}
|
||||
|
||||
private static void putOre(int id, MetalBarType type)
|
||||
{
|
||||
values.put(id, new Record(type, MetalBarSource.ORE, 1));
|
||||
}
|
||||
|
||||
private static void putBar(int id, MetalBarType type)
|
||||
{
|
||||
values.put(id, new Record(type, MetalBarSource.BAR, 1));
|
||||
}
|
||||
|
||||
private static void putEquipment(int id, MetalBarType type, int value)
|
||||
{
|
||||
values.put(id, new Record(type, MetalBarSource.EQUIPMENT, value));
|
||||
}
|
||||
|
||||
private MetalBarValues()
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.toofifty.easygiantsfoundry.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import net.runelite.client.ui.FontManager;
|
||||
|
||||
import java.awt.Font;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum FontType
|
||||
{
|
||||
DEFAULT("Default", null),
|
||||
REGULAR("Regular", FontManager.getRunescapeFont()),
|
||||
BOLD("Bold", FontManager.getRunescapeBoldFont()),
|
||||
SMALL("Small", FontManager.getRunescapeSmallFont()),
|
||||
;
|
||||
|
||||
private final String name;
|
||||
private final Font font;
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.toofifty.easygiantsfoundry.enums;
|
||||
|
||||
public enum MetalBarSource
|
||||
{
|
||||
ORE,
|
||||
BAR,
|
||||
EQUIPMENT,
|
||||
;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.toofifty.easygiantsfoundry.enums;
|
||||
|
||||
public enum MetalBarType
|
||||
{
|
||||
BRONZE,
|
||||
IRON,
|
||||
STEEL,
|
||||
MITHRIL,
|
||||
ADAMANT,
|
||||
RUNITE,
|
||||
;
|
||||
}
|
||||
Reference in New Issue
Block a user