aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/GardenNpcPrices.java60
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java39
2 files changed, 95 insertions, 4 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/GardenNpcPrices.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/GardenNpcPrices.java
index 294194b9..d08cb1a5 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/GardenNpcPrices.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/GardenNpcPrices.java
@@ -19,10 +19,16 @@
package io.github.moulberry.notenoughupdates.miscfeatures;
+import com.google.common.reflect.TypeToken;
+import com.google.gson.GsonBuilder;
+import com.google.gson.Gson;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe;
+import io.github.moulberry.notenoughupdates.events.RepositoryReloadEvent;
import io.github.moulberry.notenoughupdates.util.ItemResolutionQuery;
import io.github.moulberry.notenoughupdates.util.Utils;
+import lombok.Data;
+import lombok.NoArgsConstructor;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
@@ -30,22 +36,41 @@ import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+
@NEUAutoSubscribe
public class GardenNpcPrices {
-
private final Pattern itemRegex = Pattern.compile("§5§o §.([a-zA-Z \\-]+)(?:§8x(\\d+))?");
+ private final Gson gson = new GsonBuilder().create();
+ @Data @NoArgsConstructor public class SkyMartItem {
+ String currency;
+ double price;
+ String display;
+ }
//§5§o §aEnchanted Cactus Green §8x421
//§5§o §aEnchanted Hay Bale §8x62
//§5§o §9Enchanted Cookie §8x4
//§5§o §9Tightly-Tied Hay Bale
-
+ private final Pattern copperRegex = Pattern.compile(".* §8\\+§c(\\d+) Copper.*");
+ //§5§o §8+§c24 Copper
+ //§5§o §8+§c69 Copper
+ //§5§o §8+§cNaN Copper
private Map<List<String>, List<String>> prices = new HashMap<>();
+ private Map<String, SkyMartItem> skymart = null;
+ @SubscribeEvent
+ public void onRepoReload(RepositoryReloadEvent reload) {
+ skymart = gson.fromJson(
+ Utils.getConstant("skymart", NotEnoughUpdates.INSTANCE.manager.gson),
+ new TypeToken<Map<String, SkyMartItem>>() {}.getType()
+ );
+ }
@SubscribeEvent
public void onGardenNpcPrices(ItemTooltipEvent event) {
@@ -60,10 +85,20 @@ public class GardenNpcPrices {
if (matcher.matches()) {
int amount = 1;
if (matcher.group(2) != null) amount = Integer.parseInt(matcher.group(2));
-
double cost = calculateCost(ItemResolutionQuery.findInternalNameByDisplayName(matcher.group(1).trim(), false), amount);
event.toolTip.set(i, event.toolTip.get(i) + " §7(§6" + (cost == 0 ? "?" : Utils.shortNumberFormat(cost, 0)) + "§7 coins)");
- } else {
+ }
+
+ else if (NotEnoughUpdates.INSTANCE.config.tooltipTweaks.copperCoins) {
+ Matcher copperMatcher = copperRegex.matcher(event.toolTip.get(i));
+ if (copperMatcher.matches()) {
+ int amount = Integer.parseInt(copperMatcher.group(1));
+ net.minecraft.util.Tuple<String, Double> copperMax = calculateCopper(amount);
+ event.toolTip.set(i, event.toolTip.get(i) + " §7(§6" + Utils.shortNumberFormat((Double) copperMax.getSecond(), 0) + "§7 selling "+copperMax.getFirst()+"§7)");
+ }
+ }
+
+ else {
prices.put(tooltipCopy, event.toolTip);
}
}
@@ -72,6 +107,23 @@ public class GardenNpcPrices {
event.toolTip.addAll(prices.get(tooltipCopy));
}
}
+
+ public net.minecraft.util.Tuple<String, Double> calculateCopper(int amount) {
+ if (skymart == null) {return new net.minecraft.util.Tuple<String, Double>("NEU REPO error", 0d);};
+ Map<String, Double> prices = new HashMap<>();
+ for (Map.Entry<String, SkyMartItem> entry : skymart.entrySet()) {
+ String internalName = entry.getKey();
+ SkyMartItem item = entry.getValue();
+ if (!Objects.equals(item.currency, "copper")) continue;
+ boolean isBazaar = NotEnoughUpdates.INSTANCE.manager.auctionManager.getBazaarInfo(internalName)!=null;
+ if (!isBazaar&&(NotEnoughUpdates.INSTANCE.config.tooltipTweaks.ignoreAllAHItems||item.price<=NotEnoughUpdates.INSTANCE.config.tooltipTweaks.AHPriceIgnoreThreshold)) continue;
+ double price = NotEnoughUpdates.INSTANCE.manager.auctionManager.getBazaarOrBin(internalName, false) /item.price*amount;
+ prices.put(item.display, price);
+ }
+ Map.Entry<String, Double> maxPrice = Collections.max(prices.entrySet(), Map.Entry.comparingByValue());
+ return new net.minecraft.util.Tuple<String, Double>(maxPrice.getKey(), maxPrice.getValue());
+ }
+
public double calculateCost(String internalName, int amount) {
double price = NotEnoughUpdates.INSTANCE.manager.auctionManager.getBazaarOrBin(internalName, false);
if (price != -1) {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java
index a3e0adb5..078a8a90 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java
@@ -306,11 +306,50 @@ public class TooltipTweaks {
@ConfigEditorBoolean
public boolean essencePriceInEssenceShop = true;
+ @ConfigOption(
+ name = "Garden Visitors",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 2)
+ public boolean gardenVisitors = false;
+
@Expose
@ConfigOption(
name = "Item Cost in Garden NPC",
desc = "Show the item cost in garden NPC shop"
)
@ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
public boolean gardenNpcPrice = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Copper value",
+ desc = "Calculate how much coins is a copper worth"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean copperCoins = true;
+
+
+ @Expose
+ @ConfigOption(
+ name = "AH items cost threshold",
+ desc = "Ignore AH items that cost less or equal copper than"
+ )
+ @ConfigEditorSlider(
+ minValue = 0f,
+ maxValue = 500f,
+ minStep = 5f
+ )
+ @ConfigAccordionId(id = 2)
+ public double AHPriceIgnoreThreshold = 0;
+ @Expose
+ @ConfigOption(
+ name = "Ignore AH items",
+ desc = "Ignore ALL items that can be sold to AH"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean ignoreAllAHItems = true;
}