diff options
6 files changed, 54 insertions, 15 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/dev/DebugConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/dev/DebugConfig.java index 9164aacc3..8b58e4919 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/dev/DebugConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/dev/DebugConfig.java @@ -66,6 +66,11 @@ public class DebugConfig { public boolean showNpcPrice = false; @Expose + @ConfigOption(name = "Show Craft Price", desc = "Show craft price in item lore.") + @ConfigEditorBoolean + public boolean showCraftPrice = false; + + @Expose @ConfigOption(name = "Show BZ Price", desc = "Show BZ price in item lore.") @ConfigEditorBoolean public boolean showBZPrice = false; diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/craft/CraftableItemList.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/craft/CraftableItemList.kt index 741021d87..6b841f5a4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/craft/CraftableItemList.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/craft/CraftableItemList.kt @@ -10,10 +10,10 @@ import at.hannibal2.skyhanni.utils.CollectionUtils.addOrPut import at.hannibal2.skyhanni.utils.CollectionUtils.sortedDesc import at.hannibal2.skyhanni.utils.HypixelCommands import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils import at.hannibal2.skyhanni.utils.ItemUtils.itemName import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NEUInternalName -import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NEUItems.isVanillaItem @@ -26,7 +26,6 @@ import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.renderables.Renderable import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import io.github.moulberry.notenoughupdates.recipes.CraftingRecipe -import io.github.moulberry.notenoughupdates.recipes.NeuRecipe import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.math.floor @@ -85,7 +84,7 @@ object CraftableItemList { pricePer: MutableMap<NEUInternalName, Double>, internalName: NEUInternalName, ): Renderable? { - val neededItems = neededItems(recipe) + val neededItems = ItemUtils.neededItems(recipe) // Just a fail save, should not happen normally if (neededItems.isEmpty()) return null @@ -142,16 +141,6 @@ object CraftableItemList { return canCraftTotal.min() } - private fun neededItems(recipe: NeuRecipe): MutableMap<NEUInternalName, Int> { - val neededItems = mutableMapOf<NEUInternalName, Int>() - for (ingredient in recipe.ingredients) { - val material = ingredient.internalItemId.asInternalName() - val amount = ingredient.count.toInt() - neededItems.addOrPut(material, amount) - } - return neededItems - } - private fun readItems(): Map<NEUInternalName, Long> { val materials = mutableMapOf<NEUInternalName, Long>() for (stack in InventoryUtils.getItemsInOwnInventory()) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt index 05d53fa65..1d6b21d2e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt @@ -16,8 +16,10 @@ import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUItems.getItemStackOrNull +import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull +import at.hannibal2.skyhanni.utils.NEUItems.getRawCraftCostOrNull import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getAbilityScrolls @@ -538,6 +540,17 @@ object EstimatedItemValueCalculator { price = 0.0 } + // If craft cost price is greater than npc price, and there is no ah/bz price, use craft cost instead + internalName.getNpcPriceOrNull()?.let { npcPrice -> + if (price == npcPrice) { + internalName.getRawCraftCostOrNull()?.let { rawCraftPrice -> + if (rawCraftPrice > npcPrice) { + price = rawCraftPrice + } + } + } + } + val name = internalName.itemName if (internalName.startsWith("ENCHANTED_BOOK_BUNDLE_")) { list.add("§7Base item: $name") diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index e718593f3..2a5092f27 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -46,6 +46,7 @@ import at.hannibal2.skyhanni.utils.NEUItems.getItemStack import at.hannibal2.skyhanni.utils.NEUItems.getItemStackOrNull import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull +import at.hannibal2.skyhanni.utils.NEUItems.getRawCraftCostOrNull import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.OSUtils import at.hannibal2.skyhanni.utils.ReflectionUtils.makeAccessible @@ -469,6 +470,15 @@ object SkyHanniDebugsAndTests { } @SubscribeEvent + fun onSHowCraftPrice(event: LorenzToolTipEvent) { + if (!LorenzUtils.inSkyBlock) return + if (!debugConfig.showCraftPrice) return + val price = event.itemStack.getInternalNameOrNull()?.getRawCraftCostOrNull() ?: return + + event.toolTip.add("§7Craft price: ${price.addSeparators()}") + } + + @SubscribeEvent fun onShowBzPrice(event: LorenzToolTipEvent) { if (!LorenzUtils.inSkyBlock) return if (!debugConfig.showBZPrice) return diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt index 67f2865eb..c094df489 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt @@ -2,8 +2,10 @@ package at.hannibal2.skyhanni.utils import at.hannibal2.skyhanni.data.PetAPI import at.hannibal2.skyhanni.test.command.ErrorManager +import at.hannibal2.skyhanni.utils.CollectionUtils.addOrPut import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems.getItemStackOrNull +import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NumberUtil.formatInt import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RegexUtils.matches @@ -14,6 +16,7 @@ import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.StringUtils.removeResets import com.google.gson.GsonBuilder import com.google.gson.JsonObject +import io.github.moulberry.notenoughupdates.recipes.NeuRecipe import net.minecraft.client.Minecraft import net.minecraft.init.Items import net.minecraft.item.ItemStack @@ -339,7 +342,7 @@ object ItemUtils { "internal name" to pet.getInternalName(), "item name" to name, "rarity id" to rarityId, - "inventory name" to InventoryUtils.openInventoryName() + "inventory name" to InventoryUtils.openInventoryName(), ) } return rarity @@ -409,4 +412,20 @@ object ItemUtils { } return list } + + fun neededItems(recipe: NeuRecipe): Map<NEUInternalName, Int> { + val neededItems = mutableMapOf<NEUInternalName, Int>() + for (ingredient in recipe.ingredients) { + val material = ingredient.internalItemId.asInternalName() + val amount = ingredient.count.toInt() + neededItems.addOrPut(material, amount) + } + return neededItems + } + + fun getRecipePrice(recipe: NeuRecipe): Double = + neededItems(recipe).map { + it.key.getPrice() * it.value + }.sum() + } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 4b334d027..75d394631 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -197,7 +197,10 @@ object NEUItems { return getNpcPriceOrNull() ?: getRawCraftCostOrNull() } - fun NEUInternalName.getRawCraftCostOrNull(): Double? = manager.auctionManager.getCraftCost(asString())?.craftCost + // If NEU fails to calculate the craft costs, we calculate it ourself. + fun NEUInternalName.getRawCraftCostOrNull(): Double? = manager.auctionManager.getCraftCost(asString())?.craftCost ?: run { + getRecipes(this).map { ItemUtils.getRecipePrice(it) }.minOrNull() + } fun NEUInternalName.getItemStackOrNull(): ItemStack? = ItemResolutionQuery(manager) .withKnownInternalName(asString()) |