aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
blob: f70c8a7b346ba3b7d730a0b5628270077e96182b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package me.xmrvizzy.skyblocker.skyblock.item;


import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URL;
import java.text.DecimalFormat;
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.NbtCompound;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;


import me.xmrvizzy.skyblocker.SkyblockerMod;

public class PriceInfoTooltip {
    private JsonObject auctionPricesJson = null;
    private JsonObject bazaarPricesJson = null;
    public static JsonObject prices = PriceInfoTooltip.downloadPrices();
    public static void onInjectTooltip(ItemStack stack, TooltipContext context, List<Text> list) {
        String name = getInternalNameForItem(stack);

        try {
            if(!list.toString().contains("Avg. BIN Price") && prices.has(name) ){
                if(prices != null){
                
                    JsonElement getPrice = prices.get(name);
                    String price = round(getPrice.getAsDouble(), 2);
                   
                    list.add(new LiteralText("Avg. BIN Price: ").formatted(Formatting.GOLD).append(new LiteralText(price + " Coins").formatted(Formatting.DARK_AQUA)));
                }
            }
        }catch(Exception e) {
            MinecraftClient.getInstance().player.sendMessage(new LiteralText(e.toString()), false);
        }
    
	}
    public static String round(double value, int places) {
        DecimalFormat df = new DecimalFormat("#,##0.00");
        if (places < 0) throw new IllegalArgumentException();
    
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(places, RoundingMode.HALF_UP);
        return df.format(bd);
    }
    public static String getInternalNameForItem(ItemStack stack) {
        if(stack == null) return null;
        NbtCompound tag = stack.getNbt();
        return getInternalnameFromNBT(tag);
    }

    public static String getInternalnameFromNBT(NbtCompound tag) {
        String internalname = null;
        if(tag != null && tag.contains("ExtraAttributes", 10)) {
            NbtCompound  ea = tag.getCompound("ExtraAttributes");

            if(ea.contains("id", 8)) {
                internalname = ea.getString("id").replaceAll(":", "-");
            } else {
                return null;
            }


            if("ENCHANTED_BOOK".equals(internalname)) {
                NbtCompound enchants = ea.getCompound("enchantments");

                for(String enchname : enchants.getKeys()) {
                    internalname = enchname.toUpperCase() + ";" + enchants.getInt(enchname);
                    break;
                }
            }
        }

        return internalname;
    }

    public static JsonObject downloadPrices() {
        JsonObject result = null;
        try {
            URL apiAddr = new URL("https://moulberry.codes/auction_averages_lbin/3day.json.gz");
            InputStream src = apiAddr.openStream();
            GZIPInputStream gzipOutput = new GZIPInputStream(src);
            InputStreamReader reader = new InputStreamReader(gzipOutput);
            result = new Gson().fromJson(reader, JsonObject.class);
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        return result;
    }
}