aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Update Notes/2.1.md1
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java10
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PowerStoneStatsDisplay.java168
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java8
6 files changed, 191 insertions, 0 deletions
diff --git a/Update Notes/2.1.md b/Update Notes/2.1.md
index 71350dc7..57ad2bbb 100644
--- a/Update Notes/2.1.md
+++ b/Update Notes/2.1.md
@@ -100,6 +100,7 @@
- Added Fishing Timer over bobber - nea89
- Added [Auction Profit Viewer Overlay](https://cdn.discordapp.com/attachments/848901833119629332/993191851400101918/176946124-28ddf336-1ec7-460b-b22a-5fe2733b46a3.png) - efefury
- Added Trophy Reward Overlay - hannibal2
+- Added power stone feature - hannibal2
### **Bug Fixes:**
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java
index 8c23aa60..6bf6d86b 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java
@@ -49,6 +49,7 @@ import io.github.moulberry.notenoughupdates.miscfeatures.NPCRetexturing;
import io.github.moulberry.notenoughupdates.miscfeatures.Navigation;
import io.github.moulberry.notenoughupdates.miscfeatures.NullzeeSphere;
import io.github.moulberry.notenoughupdates.miscfeatures.PetInfoOverlay;
+import io.github.moulberry.notenoughupdates.miscfeatures.PowerStoneStatsDisplay;
import io.github.moulberry.notenoughupdates.miscfeatures.SlotLocking;
import io.github.moulberry.notenoughupdates.miscfeatures.StorageManager;
import io.github.moulberry.notenoughupdates.miscfeatures.SunTzu;
@@ -287,6 +288,7 @@ public class NotEnoughUpdates {
MinecraftForge.EVENT_BUS.register(new OldAnimationChecker());
MinecraftForge.EVENT_BUS.register(new SignCalculator());
MinecraftForge.EVENT_BUS.register(TrophyRewardOverlay.getInstance());
+ MinecraftForge.EVENT_BUS.register(PowerStoneStatsDisplay.getInstance());
MinecraftForge.EVENT_BUS.register(navigation);
if (Minecraft.getMinecraft().getResourceManager() instanceof IReloadableResourceManager) {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java
index 41f2742f..d52f9ba1 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/StringUtils.java
@@ -53,4 +53,14 @@ public class StringUtils {
return trim;
}
+
+ public static String substringBetween(String str, String open, String close) {
+ return org.apache.commons.lang3.StringUtils.substringBetween(str, open, close);
+ }
+
+ public static int cleanAndParseInt(String str) {
+ str = cleanColour(str);
+ str = str.replace(",", "");
+ return Integer.parseInt(str);
+ }
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PowerStoneStatsDisplay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PowerStoneStatsDisplay.java
new file mode 100644
index 00000000..e62e572d
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PowerStoneStatsDisplay.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2022 NotEnoughUpdates contributors
+ *
+ * This file is part of NotEnoughUpdates.
+ *
+ * NotEnoughUpdates is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * NotEnoughUpdates is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package io.github.moulberry.notenoughupdates.miscfeatures;
+
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.core.util.StringUtils;
+import io.github.moulberry.notenoughupdates.options.NEUConfig;
+import io.github.moulberry.notenoughupdates.util.ItemUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.ContainerChest;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.event.entity.player.ItemTooltipEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent;
+
+import java.text.NumberFormat;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+
+public class PowerStoneStatsDisplay {
+ private static PowerStoneStatsDisplay instance = null;
+ NumberFormat format = NumberFormat.getInstance(Locale.US);
+
+ public static PowerStoneStatsDisplay getInstance() {
+ if (instance == null) {
+ instance = new PowerStoneStatsDisplay();
+ }
+ return instance;
+ }
+
+ @SubscribeEvent
+ public void onTick(TickEvent event) {
+ GuiScreen currentScreen = Minecraft.getMinecraft().currentScreen;
+ if (currentScreen == null) return;
+ if (!(currentScreen instanceof GuiChest)) return;
+ ContainerChest container = (ContainerChest) ((GuiChest) currentScreen).inventorySlots;
+ IInventory menu = container.getLowerChestInventory();
+ String title = menu.getDisplayName().getUnformattedText();
+
+ if (!title.equals("SkyBlock Menu")) return;
+
+ EntityPlayerSP p = Minecraft.getMinecraft().thePlayer;
+ Container openContainer = p.openContainer;
+ for (Slot slot : openContainer.inventorySlots) {
+ ItemStack stack = slot.getStack();
+ if (stack == null) continue;
+
+ String displayName = stack.getDisplayName();
+ if (!"§aAccessory Bag".equals(displayName)) continue;
+
+ for (String line : ItemUtils.getLore(stack)) {
+ if (line.startsWith("§7Magical Power: ")) {
+ String rawNumber = line.split("§6")[1].replace(",", "");
+ NEUConfig.HiddenProfileSpecific configProfileSpecific = NotEnoughUpdates.INSTANCE.config.getProfileSpecific();
+ if (configProfileSpecific == null) return;
+ configProfileSpecific.magicalPower = Integer.parseInt(rawNumber);
+ }
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onItemTooltipLow(ItemTooltipEvent event) {
+ if (!NotEnoughUpdates.INSTANCE.config.tooltipTweaks.powerStoneStats) return;
+
+ ItemStack itemStack = event.itemStack;
+ if (itemStack == null) return;
+ List<String> lore = ItemUtils.getLore(itemStack);
+
+ boolean isPowerStone = false;
+ for (String line : lore) {
+ if (line.equals("§8Power Stone")) {
+ isPowerStone = true;
+ break;
+ }
+ }
+
+ if (!isPowerStone) return;
+
+ NEUConfig.HiddenProfileSpecific configProfileSpecific = NotEnoughUpdates.INSTANCE.config.getProfileSpecific();
+ if (configProfileSpecific == null) return;
+
+ int magicalPower = configProfileSpecific.magicalPower;
+ if (magicalPower < 1) return;
+
+ double scaledMagicalPower = scalePower(magicalPower);
+ double scaledCurrentPower = 0.0;
+
+ int index = 0;
+ boolean foundMagicalPower = false;
+ for (String line : new LinkedList<>(lore)) {
+ index++;
+ line = line.replace("§k", "");
+
+ if (line.startsWith("§7At ")) {
+
+ String rawNumber = StringUtils.substringBetween(StringUtils.cleanColour(line), "At ", " Magical");
+ if (rawNumber == null) return;
+
+ //This ignores old repo entries in the item browser from neu
+ if (rawNumber.equals("mmm")) return;
+
+ try {
+ scaledCurrentPower = scalePower(StringUtils.cleanAndParseInt(rawNumber));
+ } catch (NumberFormatException ignored) {
+ return;
+ }
+
+ event.toolTip.set(index, "§7At §6" + format.format((double) magicalPower) + " Magical Power§7:");
+ foundMagicalPower = true;
+ continue;
+ }
+
+ if (!foundMagicalPower) continue;
+
+ String cleanLine = StringUtils.cleanColour(line);
+ if (cleanLine.equals("")) {
+ break;
+ }
+
+ for (String operator : new String[]{"+", "-"}) {
+ if (!cleanLine.startsWith(operator)) continue;
+ String rawStat = StringUtils.cleanColour(StringUtils.substringBetween(line, operator, " "));
+
+ double currentStat;
+ try {
+ currentStat = 0.0 + StringUtils.cleanAndParseInt(rawStat.substring(0, rawStat.length() - 1));
+ } catch (NumberFormatException ignored) {
+ continue;
+ }
+ double realStat = (currentStat / scaledCurrentPower) * scaledMagicalPower;
+
+ String format = this.format.format((double) Math.round(realStat));
+ format += rawStat.substring(rawStat.length() - 1);
+
+ event.toolTip.set(index, line.replace(rawStat, format));
+ }
+ }
+ }
+
+ private double scalePower(int magicalPower) {
+ return Math.pow(29.97 * (Math.log(0.0019 * magicalPower + 1)), 1.2);
+ }
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
index e1848382..ade9edfe 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
@@ -564,6 +564,8 @@ public class NEUConfig extends Config {
public long dailyHeavyPearlCompleted = 0L;
@Expose
public HashMap<Integer, JsonObject> savedEquipment = new HashMap<>();
+ @Expose
+ public int magicalPower = 0;
}
public HiddenLocationSpecific getLocationSpecific() {
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 d1660e68..bcb7e8a7 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
@@ -172,4 +172,12 @@ public class TooltipTweaks {
minStep = 1f
)
public int tooltipBorderOpacity = 200;
+
+ @Expose
+ @ConfigOption(
+ name = "Power Stone Stats",
+ desc = "Show your real magical power and real stat increase on power stones"
+ )
+ @ConfigEditorBoolean
+ public boolean powerStoneStats = true;
}