/* * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod * Copyright (C) 2021 cyoung06 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package kr.syeyoung.dungeonsguide.features.impl.etc; import kr.syeyoung.dungeonsguide.features.FeatureParameter; import kr.syeyoung.dungeonsguide.features.SimpleFeature; import kr.syeyoung.dungeonsguide.features.listener.TooltipListener; import kr.syeyoung.dungeonsguide.utils.AhUtils; import kr.syeyoung.dungeonsguide.utils.TextUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import org.lwjgl.input.Keyboard; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; public class FeatureTooltipPrice extends SimpleFeature implements TooltipListener { public FeatureTooltipPrice() { super("Misc.API Features", "Item Price", "Shows price of items", "tooltip.price"); parameters.put("reqShift", new FeatureParameter("reqShift", "Require Shift", "If shift needs to be pressed in order for this feature to be activated", false, "boolean")); setEnabled(false); } @Override public void onTooltip(ItemTooltipEvent event) { if (!isEnabled()) return; boolean activated = !this.getParameter("reqShift").getValue() || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); ItemStack hoveredItem = event.itemStack; NBTTagCompound compound = hoveredItem.getTagCompound(); if (compound == null) return; if (!compound.hasKey("ExtraAttributes")) return; if (!activated) { event.toolTip.add("§7Shift to view price"); return; } final String id = compound.getCompoundTag("ExtraAttributes").getString("id"); if (id.equals("ENCHANTED_BOOK")) { final NBTTagCompound enchants = compound.getCompoundTag("ExtraAttributes").getCompoundTag("enchantments"); Set keys = enchants.getKeySet(); Set actualKeys = new TreeSet(new Comparator() { public int compare(String o1, String o2) { String id2 = id + "::" + o1 + "-" + enchants.getInteger(o1); AhUtils.AuctionData auctionData = AhUtils.auctions.get(id2); long price1 = (auctionData == null) ? 0 : auctionData.lowestBin; String id3 = id + "::" + o2 + "-" + enchants.getInteger(o2); AhUtils.AuctionData auctionData2 = AhUtils.auctions.get(id3); long price2 = (auctionData2 == null) ? 0 : auctionData2.lowestBin; return (compare2(price1, price2) == 0) ? o1.compareTo(o2) : compare2(price1, price2); } public int compare2(long y, long x) { return (x < y) ? -1 : ((x == y) ? 0 : 1); } }); actualKeys.addAll(keys); int totalLowestPrice = 0; int iterations = 0; for (String key : actualKeys) { iterations++; String id2 = id + "::" + key + "-" + enchants.getInteger(key); AhUtils.AuctionData auctionData = AhUtils.auctions.get(id2); if (auctionData == null) { if (iterations < 10) event.toolTip.add("§f"+ key + " " + enchants.getInteger(key) + "§7: §cn/a"); continue; } if (iterations < 10) event.toolTip.add("§f"+ key + " " + enchants.getInteger(key) + "§7: §e"+ TextUtils.format( auctionData.lowestBin)); totalLowestPrice += auctionData.lowestBin; } if (iterations >= 10) event.toolTip.add("§7"+ (iterations - 10) + " more enchants... "); event.toolTip.add("§fTotal Lowest§7: §e"+ TextUtils.format(totalLowestPrice)); } else { AhUtils.AuctionData auctionData = AhUtils.auctions.get(id); event.toolTip.add(""); if (auctionData == null) { event.toolTip.add("§fLowest ah §7: §cn/a"); event.toolTip.add("§fBazaar sell price §7: §cn/a"); event.toolTip.add("§fBazaar buy price §7: §cn/a"); } else { event.toolTip.add("§fLowest ah §7: " + ((auctionData.lowestBin != -1) ? ("§e"+ TextUtils.format(auctionData.lowestBin)) : "§cn/a")); event.toolTip.add("§fBazaar sell price §7: " + ((auctionData.sellPrice == -1) ? "§cn/a": ("§e"+ TextUtils.format(auctionData.sellPrice)))); event.toolTip.add("§fBazaar buy price §7: " + ((auctionData.buyPrice == -1) ? "§cn/a": ("§e"+ TextUtils.format(auctionData.buyPrice)))); } } } }