Skip to content

Commit 4c6930f

Browse files
committed
feat: add LBIN averages tooltip with configurable 1/3/7-day period
feat(perf): cache tooltip price components with identity-based invalidation refactor: replace cancelUpdateTask() with setActive(boolean) fix: add volatile to updateTask and error flag fields fix: ButtonCycling left/right directions were swapped
1 parent 9f405e1 commit 4c6930f

File tree

15 files changed

+515
-158
lines changed

15 files changed

+515
-158
lines changed

src/main/java/com/fix3dll/skyblockaddons/SkyblockAddons.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,13 @@ public class SkyblockAddons implements ClientModInitializer {
137137
private final NetworkListener networkListener;
138138
private final SkillXpManager skillXpManager;
139139

140-
@Setter private OnlineData onlineData;
141-
@Setter private ElectionData electionData;
142-
@Setter private MayorJerryData mayorJerryData;
143-
@Setter private BazaarData bazaarData = new BazaarData();
144-
@Setter private ItemsData itemsData = new ItemsData();
145-
@Setter private Map<String, Double> lowestBinData = Map.of();
140+
@Setter private volatile OnlineData onlineData;
141+
@Setter private volatile ElectionData electionData;
142+
@Setter private volatile MayorJerryData mayorJerryData;
143+
@Setter private volatile BazaarData bazaarData = new BazaarData();
144+
@Setter private volatile ItemsData itemsData = new ItemsData();
145+
@Setter private volatile Map<String, Double> lowestBinData = Map.of();
146+
@Setter private volatile Map<String, Double> lowestBinAveragesData = Map.of();
146147

147148
public SkyblockAddons() {
148149
instance = this;

src/main/java/com/fix3dll/skyblockaddons/core/feature/Feature.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import com.fix3dll.skyblockaddons.mixin.hooks.FontHook;
1010
import com.fix3dll.skyblockaddons.utils.EnumUtils.AnchorPoint;
1111
import com.fix3dll.skyblockaddons.utils.EnumUtils.DrawType;
12+
import com.fix3dll.skyblockaddons.utils.data.requests.BazaarRequest;
13+
import com.fix3dll.skyblockaddons.utils.data.requests.LowestBinAveragesRequest;
14+
import com.fix3dll.skyblockaddons.utils.data.requests.LowestBinRequest;
1215
import com.fix3dll.skyblockaddons.utils.data.skyblockdata.OnlineData;
1316
import com.fix3dll.skyblockaddons.utils.objects.Pair;
1417
import com.fix3dll.skyblockaddons.utils.objects.RegistrableEnum;
@@ -650,4 +653,23 @@ public boolean has(FeatureSetting setting) {
650653
}
651654
}
652655

656+
/**
657+
* Starts or cancels API fetch tasks based on the currently enabled sub-settings.
658+
* If the player is not on SkyBlock, all tasks are canceled unconditionally.
659+
* Should be called after the feature or any of its price-related settings are changed.
660+
*/
661+
public void updateApiRequests() {
662+
if (!SkyblockAddons.getInstance().getUtils().isOnSkyblock()) {
663+
BazaarRequest.setActive(false);
664+
LowestBinRequest.setActive(false);
665+
LowestBinAveragesRequest.setActive(false);
666+
return;
667+
}
668+
if (this == Feature.ITEM_PRICES_IN_TOOLTIP) {
669+
BazaarRequest.setActive(this.isEnabled(FeatureSetting.BAZAAR_PRICES_IN_TOOLTIP));
670+
LowestBinRequest.setActive(this.isEnabled(FeatureSetting.LOWEST_BIN_PRICES_IN_TOOLTIP));
671+
LowestBinAveragesRequest.setActive(this.isEnabled(FeatureSetting.LBIN_AVERAGE_PRICES_IN_TOOLTIP));
672+
}
673+
}
674+
653675
}

src/main/java/com/fix3dll/skyblockaddons/core/feature/FeatureSetting.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,10 @@ public enum FeatureSetting {
145145
NPC_SELL_PRICES_IN_TOOLTIP("settings.itemPricesInTooltip.npcSellPrices", Feature.ITEM_PRICES_IN_TOOLTIP),
146146
LOWEST_BIN_PRICES_IN_TOOLTIP("settings.itemPricesInTooltip.lowestBinPrices", Feature.ITEM_PRICES_IN_TOOLTIP),
147147
BAZAAR_PRICES_IN_TOOLTIP("settings.itemPricesInTooltip.bazaarPrices", Feature.ITEM_PRICES_IN_TOOLTIP),
148+
LBIN_AVERAGE_PRICES_IN_TOOLTIP("settings.itemPricesInTooltip.lbinAveragePrices", Feature.ITEM_PRICES_IN_TOOLTIP),
148149
LOWEST_BIN_PRICES_UPDATE_INTERVAL("settings.itemPricesInTooltip.lowestBinUpdateInterval", Feature.ITEM_PRICES_IN_TOOLTIP),
149150
BAZAAR_PRICES_UPDATE_INTERVAL("settings.itemPricesInTooltip.bazaarUpdateInterval", Feature.ITEM_PRICES_IN_TOOLTIP),
151+
LBIN_AVERAGES_TYPE("settings.itemPricesInTooltip.lbinAveragesType", Feature.ITEM_PRICES_IN_TOOLTIP),
150152

151153

152154
DISCORD_RP_DETAILS("messages.firstStatus", Feature.DISCORD_RPC),
@@ -200,4 +202,5 @@ public String getMessage(String... variables) {
200202
return null;
201203
}
202204
}
205+
203206
}

src/main/java/com/fix3dll/skyblockaddons/gui/buttons/ButtonCycling.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,12 @@ protected void renderWidget(@NonNull GuiGraphics graphics, int mouseX, int mouse
130130
@Override
131131
public boolean mouseClicked(MouseButtonEvent event, boolean isDoubleClick) {
132132
if (isOverLeftButton(event.x(), event.y())) {
133-
index = index == itemList.size() - 1 ? 0 : index + 1;
133+
index = index == 0 ? itemList.size() - 1 : index - 1;
134134
callback.accept(index);
135135
this.playDownSound(Minecraft.getInstance().getSoundManager());
136136
return true;
137137
} else if (isOverRightButton(event.x(), event.y())) {
138-
index = index == 0 ? itemList.size() - 1 : index - 1;
138+
index = index == itemList.size() - 1 ? 0 : index + 1;
139139
callback.accept(index);
140140
this.playDownSound(Minecraft.getInstance().getSoundManager());
141141
return true;

src/main/java/com/fix3dll/skyblockaddons/gui/screens/SettingsGui.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class SettingsGui extends SkyblockAddonsScreen {
5656
/**
5757
* The main gui, opened with /sba.
5858
*/
59-
public SettingsGui(Feature feature, int page, int lastPage, EnumUtils.GuiTab lastTab, EnumUtils.GUIType lastGUI) {
59+
public SettingsGui(@NonNull Feature feature, int page, int lastPage, EnumUtils.GuiTab lastTab, EnumUtils.GUIType lastGUI) {
6060
super(Component.empty());
6161
this.feature = feature;
6262
this.page = page;
@@ -343,7 +343,7 @@ private void addButton(FeatureSetting setting, Object settingValue) {
343343
addRenderableWidget(new ButtonText(halfWidth, (int) y - 10, setting.getMessage(), true, 0xFFFFFFFF));
344344
addRenderableWidget(new ButtonCycling(x, (int) y, 140, 20,
345345
Arrays.asList(EnumUtils.PetItemStyle.values()),
346-
feature.getAsEnum(FeatureSetting.PET_ITEM_STYLE).ordinal(),
346+
feature.getAsEnum(setting).ordinal(),
347347
index -> feature.set(setting, EnumUtils.PetItemStyle.values()[index])
348348
));
349349
row += .1F;
@@ -429,6 +429,22 @@ private void addButton(FeatureSetting setting, Object settingValue) {
429429
row += .1F;
430430
break;
431431

432+
case LBIN_AVERAGES_TYPE:
433+
boxWidth = 140;
434+
x = halfWidth - (boxWidth / 2);
435+
y = getRowHeightSetting(row);
436+
addRenderableWidget(new ButtonText(halfWidth, (int) y - 10, setting.getMessage(), true, ColorCode.GRAY.getColor()));
437+
addRenderableWidget(new ButtonCycling(x, (int) y, 140, 20,
438+
Arrays.asList(EnumUtils.LBinAveragesType.values()),
439+
feature.getAsEnum(setting).ordinal(),
440+
index -> feature.set(setting, EnumUtils.LBinAveragesType.values()[index])
441+
));
442+
row += .4F;
443+
y = getRowHeightSetting(row);
444+
addRenderableWidget(new ButtonText(halfWidth, (int) y + 15, Translations.getMessage("settings.itemPricesInTooltip.lbinAveragesWarning"), true, ColorCode.GRAY.getColor()));
445+
row += .2F;
446+
break;
447+
432448
default:
433449
if (setting.isUniversal()) return; // see addUniversalButton()
434450

src/main/java/com/fix3dll/skyblockaddons/gui/screens/SkyblockAddonsGui.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,7 @@ public void removed() {
487487
if (tab == GuiTab.GENERAL_SETTINGS) {
488488
main.getRenderListener().setGuiToOpen(GUIType.MAIN, 1, GuiTab.MAIN);
489489
}
490+
Feature.ITEM_PRICES_IN_TOOLTIP.updateApiRequests();
490491
main.getConfigValuesManager().saveConfig();
491492
}
492493
}

src/main/java/com/fix3dll/skyblockaddons/listeners/NetworkListener.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.fix3dll.skyblockaddons.listeners;
22

33
import com.fix3dll.skyblockaddons.SkyblockAddons;
4-
import com.fix3dll.skyblockaddons.core.feature.Feature;
54
import com.fix3dll.skyblockaddons.core.Island;
5+
import com.fix3dll.skyblockaddons.core.feature.Feature;
66
import com.fix3dll.skyblockaddons.core.scheduler.ScheduledTask;
77
import com.fix3dll.skyblockaddons.events.PacketEvents;
88
import com.fix3dll.skyblockaddons.events.SkyblockEvents;
@@ -13,6 +13,7 @@
1313
import com.fix3dll.skyblockaddons.utils.Utils;
1414
import com.fix3dll.skyblockaddons.utils.data.DataUtils;
1515
import com.fix3dll.skyblockaddons.utils.data.requests.BazaarRequest;
16+
import com.fix3dll.skyblockaddons.utils.data.requests.LowestBinAveragesRequest;
1617
import com.fix3dll.skyblockaddons.utils.data.requests.LowestBinRequest;
1718
import com.google.common.cache.Cache;
1819
import com.google.common.cache.CacheBuilder;
@@ -58,9 +59,7 @@ private void onSkyblockJoined() {
5859
updateHealth = main.getScheduler().scheduleTask(scheduledTask ->
5960
main.getPlayerListener().updateLastSecondHealth(), 0, 20
6061
);
61-
62-
DataUtils.loadOnlineData(new BazaarRequest());
63-
DataUtils.loadOnlineData(new LowestBinRequest());
62+
Feature.ITEM_PRICES_IN_TOOLTIP.updateApiRequests();
6463
DataUtils.onSkyblockJoined();
6564
}
6665

@@ -75,8 +74,9 @@ private void onSkyblockLeft() {
7574
updateHealth.cancel();
7675
updateHealth = null;
7776
}
78-
BazaarRequest.cancelUpdateTask();
79-
LowestBinRequest.cancelUpdateTask();
77+
BazaarRequest.setActive(false);
78+
LowestBinRequest.setActive(false);
79+
LowestBinAveragesRequest.setActive(false);
8080
}
8181

8282
private void onPacketRead(ChannelHandlerContext channelHandlerContext, Packet<?> packet) {

0 commit comments

Comments
 (0)