From 3a2a7744feca2576f09a70cde68ebcc5e9c2c5e1 Mon Sep 17 00:00:00 2001
From: Julian Braun <julianbraun6@gmail.com>
Date: Tue, 30 Mar 2021 00:03:06 +0200
Subject: added pricetooltip for AH

---
 .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java |  10 +-
 .../skyblocker/mixin/ItemRendererMixin.java        |   5 +-
 .../skyblocker/skyblock/item/PriceInfoTooltip.java | 138 +++++++++++++++++++++
 .../java/me/xmrvizzy/skyblocker/utils/Utils.java   |   7 +-
 4 files changed, 156 insertions(+), 4 deletions(-)
 create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java

(limited to 'src/main/java/me')

diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index efd746e7..8be9fb3d 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -1,21 +1,27 @@
 package me.xmrvizzy.skyblocker;
 
+import java.util.Map;
+
 import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
 import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock;
 import me.xmrvizzy.skyblocker.utils.Utils;
 import net.fabricmc.api.ClientModInitializer;
+import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
 import net.minecraft.client.MinecraftClient;
-
+import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
 public class SkyblockerMod implements ClientModInitializer {
 	public static final String NAMESPACE = "skyblocker";
 	private static int TICKS = 0;
-
+	public static Map prices = PriceInfoTooltip.downloadPrices();
 	@Override
 	public void onInitializeClient() {
 		HotbarSlotLock.init();
 		SkyblockerConfig.init();
+		
+		
 	}
 
+
 	public static void onTick() {
 		MinecraftClient client = MinecraftClient.getInstance();
 		if (client == null) return;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
index 1992db89..eaac1c9c 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
@@ -4,12 +4,14 @@ import com.mojang.blaze3d.systems.RenderSystem;
 import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
 import me.xmrvizzy.skyblocker.utils.ItemUtils;
 import me.xmrvizzy.skyblocker.utils.Utils;
+import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.font.TextRenderer;
 import net.minecraft.client.render.BufferBuilder;
 import net.minecraft.client.render.Tessellator;
 import net.minecraft.client.render.item.ItemRenderer;
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.CompoundTag;
+import net.minecraft.text.LiteralText;
 import net.minecraft.util.math.MathHelper;
 import org.jetbrains.annotations.Nullable;
 import org.spongepowered.asm.mixin.Mixin;
@@ -27,6 +29,7 @@ public abstract class ItemRendererMixin {
 
     @Inject(method = "renderGuiItemOverlay(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD"))
     public void renderItemBar(TextRenderer renderer, ItemStack stack, int x, int y, @Nullable String countLabel, CallbackInfo ci) {
+
         if (Utils.isSkyblock && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) {
             if (!stack.isEmpty()) {
                 CompoundTag tag = stack.getTag();
@@ -34,7 +37,7 @@ public abstract class ItemRendererMixin {
                     if (tag.getCompound("ExtraAttributes").contains("drill_fuel")) {
                         float current = 3000.0F;
                         float max = 3000.0F;
-
+                        
                         for (String line : ItemUtils.getTooltipStrings(stack)) {
                             if (line.contains("Fuel: ")) {
                                 String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim();
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
new file mode 100644
index 00000000..51b30c23
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
@@ -0,0 +1,138 @@
+package me.xmrvizzy.skyblocker.skyblock.item;
+
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.GZIPInputStream;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.item.TooltipContext;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.text.LiteralText;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+
+import me.xmrvizzy.skyblocker.SkyblockerMod;
+
+public class PriceInfoTooltip {
+    
+    public static void onInjectTooltip(ItemStack stack, TooltipContext context, List<Text> list) {
+        String name = getInternalNameForItem(stack);
+        
+        try {
+
+            if(SkyblockerMod.prices != null && SkyblockerMod.prices.containsKey(name)){
+                if(!list.toString().contains("Lowest BIN Price")){
+                    Double price = round((Double)SkyblockerMod.prices.get(name), 2);
+                   
+                    list.add(new LiteralText("Lowest BIN Price: " + price).formatted(Formatting.GOLD));
+                }
+            }
+        }catch(Exception e) {
+
+        }
+    
+	}
+    public static double round(double value, int places) {
+        if (places < 0) throw new IllegalArgumentException();
+    
+        BigDecimal bd = new BigDecimal(value);
+        bd = bd.setScale(places, RoundingMode.HALF_UP);
+        return bd.doubleValue();
+    }
+    public static String getInternalNameForItem(ItemStack stack) {
+        if(stack == null) return null;
+        CompoundTag tag = stack.getTag();
+        return getInternalnameFromNBT(tag);
+    }
+
+    public static String getInternalnameFromNBT(CompoundTag tag) {
+        String internalname = null;
+        if(tag != null && tag.contains("ExtraAttributes", 10)) {
+            CompoundTag  ea = tag.getCompound("ExtraAttributes");
+
+            if(ea.contains("id", 8)) {
+                internalname = ea.getString("id").replaceAll(":", "-");
+            } else {
+                return null;
+            }
+
+
+            if("ENCHANTED_BOOK".equals(internalname)) {
+                CompoundTag enchants = ea.getCompound("enchantments");
+
+                for(String enchname : enchants.getKeys()) {
+                    internalname = enchname.toUpperCase() + ";" + enchants.getInt(enchname);
+                    break;
+                }
+            }
+        }
+
+        return internalname;
+    }
+
+    public static Map downloadPrices() {
+        try {
+            downloadUsingStream("https://moulberry.codes/auction_averages_lbin/1day.json.gz", "1day.json.gz");
+            decompressGzipFile("1day.json.gz", "1day.json");
+            Gson gson = new Gson();
+            Reader reader = Files.newBufferedReader(Paths.get("1day.json"));
+              // convert JSON file to map
+            Map<?, ?> map = gson.fromJson(reader, Map.class);
+            return map;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    private static void decompressGzipFile(String gzipFile, String newFile) {
+        try {
+            FileInputStream fis = new FileInputStream(gzipFile);
+            GZIPInputStream gis = new GZIPInputStream(fis);
+            FileOutputStream fos = new FileOutputStream(newFile);
+            byte[] buffer = new byte[1024];
+            int len;
+            while((len = gis.read(buffer)) != -1){
+                fos.write(buffer, 0, len);
+            }
+            //close resources
+            fos.close();
+            gis.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        
+    }
+    
+    private static void downloadUsingStream(String urlStr, String file) throws IOException{
+        URL url = new URL(urlStr);
+        BufferedInputStream bis = new BufferedInputStream(url.openStream());
+        FileOutputStream fis = new FileOutputStream(file);
+        byte[] buffer = new byte[1024];
+        int count=0;
+        while((count = bis.read(buffer,0,1024)) != -1)
+        {
+            fis.write(buffer, 0, count);
+        }
+        fis.close();
+        bis.close();
+    }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
index 719e4e4f..ef1390e6 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
@@ -4,6 +4,8 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
 import me.xmrvizzy.skyblocker.skyblock.Attribute;
+import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
+import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.scoreboard.Scoreboard;
 import net.minecraft.scoreboard.ScoreboardObjective;
@@ -57,7 +59,10 @@ public class Utils {
 
         if (sidebar.isEmpty()) return;
         if (sidebar.get(sidebar.size() - 1).equals("www.hypixel.net")) {
-            if (sidebar.get(0).contains("SKYBLOCK")) isSkyblock = true;
+            if (sidebar.get(0).contains("SKYBLOCK")){
+                ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip);
+                isSkyblock = true;
+            }
             else isSkyblock = false;
 
             if (isSkyblock && string.contains("The Catacombs")) isDungeons = true;
-- 
cgit