diff options
Diffstat (limited to 'src')
6 files changed, 122 insertions, 21 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 048f4968a..179104aaf 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.config.commands.SimpleCommand.ProcessCommandRunnabl import at.hannibal2.skyhanni.config.core.GuiScreenElementWrapper import at.hannibal2.skyhanni.data.ApiDataLoader import at.hannibal2.skyhanni.data.GuiEditManager +import at.hannibal2.skyhanni.features.bazaar.BazaarDataGrabber import at.hannibal2.skyhanni.features.bingo.BingoCardDisplay import at.hannibal2.skyhanni.features.bingo.BingoNextStepHelper import at.hannibal2.skyhanni.features.event.diana.BurrowWarpHelper @@ -54,6 +55,7 @@ object Commands { registerCommand("shprintbingohelper") { BingoNextStepHelper.command() } registerCommand("shsetapikey") { ApiDataLoader.command(it) } registerCommand("shtestgardenvisitors") { LorenzTest.testGardenVisitors() } + registerCommand("shresetitemnames") { BazaarDataGrabber.resetItemNames() } } private fun registerCommand(name: String, function: (Array<String>) -> Unit) { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java b/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java index 06056903e..528eb7966 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java @@ -510,6 +510,13 @@ public class Garden { @ConfigEditorBoolean @ConfigAccordionId(id = 13) public boolean moneyPerHourCompactPrice = false; + @Expose + @ConfigOption( + name = "Advanced stats", + desc = "Show not only Sell Offer price but also Instant Sell price and NPC Sell price.") + @ConfigEditorBoolean + @ConfigAccordionId(id = 13) + public boolean moneyPerHourAdvancedStats = false; @Expose // @ConfigOption(name = "Money per hour Position", desc = "") diff --git a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarData.kt b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarData.kt index b4f00f248..eb76ac18f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarData.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarData.kt @@ -1,3 +1,11 @@ package at.hannibal2.skyhanni.features.bazaar -data class BazaarData(val apiName: String, val itemName: String, val sellPrice: Double, val buyPrice: Double, val buyMovingWeek: Int, val sellMovingWeek: Int)
\ No newline at end of file +data class BazaarData( + val apiName: String, + val itemName: String, + val sellPrice: Double, + val buyPrice: Double, + val npcPrice: Double, + val buyMovingWeek: Int, + val sellMovingWeek: Int, +)
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarDataGrabber.kt b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarDataGrabber.kt index 609801cd5..0bcaded93 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarDataGrabber.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarDataGrabber.kt @@ -14,9 +14,15 @@ internal class BazaarDataGrabber(private var bazaarMap: MutableMap<String, Bazaa companion object { private val itemNames = mutableMapOf<String, String>() + private val npcPrices = mutableMapOf<String, Double>() var lastTime = 0L var currentlyUpdating = false + + fun resetItemNames() { + LorenzUtils.chat("§e[SkyHanni] Reloading the hypixel item api..") + itemNames.clear() + } } private fun loadItemNames(): Boolean { @@ -28,6 +34,17 @@ internal class BazaarDataGrabber(private var bazaarMap: MutableMap<String, Bazaa val name = jsonObject["name"].asString val id = jsonObject["id"].asString itemNames[id] = name.removeColor() +// if (id.lowercase().contains("redstone")) { + if (jsonObject.has("npc_sell_price")) { +// println(" ") +// println("name: $name") +// println("id: $id") + val npcPrice = jsonObject["npc_sell_price"].asDouble +// println("npcPrice: $npcPrice") + npcPrices[id] = npcPrice + } +// println("jsonObject: $jsonObject") +// } } currentlyUpdating = false return true @@ -94,7 +111,8 @@ internal class BazaarDataGrabber(private var bazaarMap: MutableMap<String, Bazaa val itemName = getItemName(apiName) if (itemName == null) { - LorenzUtils.warning("§c[SkyHanni] bazaar item '$apiName' not found! Try restarting your minecraft to fix this.") + LorenzUtils.warning("§c[SkyHanni] bazaar item '$apiName' not found!") + resetItemNames() continue } @@ -109,7 +127,18 @@ internal class BazaarDataGrabber(private var bazaarMap: MutableMap<String, Bazaa apiName = text } - val data = BazaarData(apiName, itemName, sellPrice, buyPrice, buyMovingWeek, sellMovingWeek) + val npcPrice = npcPrices[apiName] ?: -1.0 +// if (npcPrice == -1.0) { +// if (apiName.lowercase().contains("carrot")) { +// println(" ") +// println("BazaarData") +// println("itemName: '$itemName'") +// println("apiName: '$apiName'") +// println("npc price: $npcPrice") +// } +// } + + val data = BazaarData(apiName, itemName, sellPrice, buyPrice, npcPrice, buyMovingWeek, sellMovingWeek) bazaarMap[itemName] = data } BazaarUpdateEvent(bazaarMap).postAndCatch() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/CropMoneyDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/CropMoneyDisplay.kt index d004befd8..094f890a0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/CropMoneyDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/CropMoneyDisplay.kt @@ -60,20 +60,31 @@ class CropMoneyDisplay { val newDisplay = mutableListOf<List<Any>>() val title = if (config.moneyPerHourCompact) { - Collections.singletonList("§7Money/hour:") + "§7Money/hour:" } else { - Collections.singletonList("§7Money per hour when selling:") + "§7Money per hour when selling:" } if (!ready) { - newDisplay.add(title) + newDisplay.add(Collections.singletonList(title)) newDisplay.add(Collections.singletonList("§eLoading...")) return newDisplay } if (!hasCropInHand && !config.moneyPerHourAlwaysOn) return newDisplay - newDisplay.add(title) + + newDisplay.add( + Collections.singletonList( + if (config.moneyPerHourAdvancedStats) { + "$title §7(§eSell Offer§7/§eInstant Sell§7/§eNpc Price§7)" + } else if (LorenzUtils.noTradeMode) { + "$title §7(§eNpc Price§7)" + } else { + "$title §7(§eSell Offer§7)" + } + ) + ) val moneyPerHourData = calculateMoneyPerHour() if (moneyPerHourData.isEmpty()) { @@ -91,7 +102,15 @@ class CropMoneyDisplay { } var number = 0 - for ((internalName, moneyPerHour) in moneyPerHourData.sortedDesc()) { + + +// val help = moneyPerHourData.map { it.key to it.value.max() } + val help = mutableMapOf<String, Double>() + for ((name, array) in moneyPerHourData) { + help[name] = array.max() + } + + for (internalName in help.sortedDesc().keys) { number++ val cropName = cropNames[internalName]!! val isCurrent = cropName == GardenAPI.cropInHand @@ -115,13 +134,24 @@ class CropMoneyDisplay { list.add("$currentColor$contestFormat$itemName§7: ") } - - val format = if (config.moneyPerHourCompactPrice) { - NumberUtil.format(moneyPerHour) + val coinsColor = if (isCurrent && config.moneyPerHourCompact) "§e" else "§6" + val moneyArray = moneyPerHourData[internalName]!! + if (config.moneyPerHourAdvancedStats) { + for (price in moneyArray) { + val format = format(price) + list.add("$coinsColor$format") + list.add("§7/") + } + list.removeLast() + } else if (LorenzUtils.noTradeMode) { + // Show npc price + val format = format(moneyArray[2]) + list.add("$coinsColor$format") } else { - LorenzUtils.formatInteger(moneyPerHour.toLong()) + val format = format(moneyArray[0]) + list.add("$coinsColor$format") } - list.add("§6$format") + newDisplay.add(list) } @@ -129,22 +159,35 @@ class CropMoneyDisplay { return newDisplay } - private fun calculateMoneyPerHour(): Map<String, Double> { - val moneyPerHours = mutableMapOf<String, Double>() + private fun format(moneyPerHour: Double) = if (config.moneyPerHourCompactPrice) { + NumberUtil.format(moneyPerHour) + } else { + LorenzUtils.formatInteger(moneyPerHour.toLong()) + } + + // sell offer -> instant sell -> npc + private fun calculateMoneyPerHour(): Map<String, Array<Double>> { + val moneyPerHours = mutableMapOf<String, Array<Double>>() for ((internalName, amount) in multipliers) { - val price = NEUItems.getPrice(internalName) val crop = cropNames[internalName]!! val speed = crop.getSpeed() // No speed data for item in hand if (speed == -1) continue - // Price not found - if (price == -1.0) continue - val speedPerHr = speed.toDouble() * 60 * 60 val blocksPerHour = speedPerHr / amount.toDouble() - val moneyPerHour = price * blocksPerHour - moneyPerHours[internalName] = moneyPerHour + + val bazaarData = BazaarApi.getBazaarDataForInternalName(internalName) ?: continue + + val npcPrice = bazaarData.npcPrice * blocksPerHour +// if (LorenzUtils.noTradeMode) { +// moneyPerHours[internalName] = arrayOf(npcPrice) +// } else { + val sellOffer = bazaarData.buyPrice * blocksPerHour + val instantSell = bazaarData.sellPrice * blocksPerHour + moneyPerHours[internalName] = arrayOf(sellOffer, instantSell, npcPrice) +// } + } return moneyPerHours } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 8633dcadd..1ce7c9e22 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -1,5 +1,6 @@ package at.hannibal2.skyhanni.utils +import at.hannibal2.skyhanni.features.bazaar.BazaarApi import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import io.github.moulberry.notenoughupdates.NEUManager import io.github.moulberry.notenoughupdates.NotEnoughUpdates @@ -41,6 +42,17 @@ object NEUItems { } fun getPrice(internalName: String, useSellingPrice: Boolean = false): Double { + val bazaarData = BazaarApi.getBazaarDataForInternalName(internalName) + bazaarData?.let { + val buyPrice = it.buyPrice + if (buyPrice > 0) return buyPrice + + val sellPrice = it.sellPrice + if (sellPrice > 0) return sellPrice + + return it.npcPrice + } + val result = manager.auctionManager.getBazaarOrBin(internalName, useSellingPrice) // TODO remove workaround if (result == -1.0) { |