From dd0afac3a8459035827dac36986a690c8a9541ea Mon Sep 17 00:00:00 2001 From: nea Date: Mon, 29 May 2023 23:28:52 +0200 Subject: Add price checker --- src/main/kotlin/moe/nea/firmament/commands/dsl.kt | 12 ++++++++++ src/main/kotlin/moe/nea/firmament/commands/rome.kt | 26 ++++++++++++++++++++++ 2 files changed, 38 insertions(+) (limited to 'src/main/kotlin/moe/nea/firmament/commands') diff --git a/src/main/kotlin/moe/nea/firmament/commands/dsl.kt b/src/main/kotlin/moe/nea/firmament/commands/dsl.kt index e2b9e8a..155e700 100644 --- a/src/main/kotlin/moe/nea/firmament/commands/dsl.kt +++ b/src/main/kotlin/moe/nea/firmament/commands/dsl.kt @@ -23,6 +23,7 @@ import com.mojang.brigadier.builder.ArgumentBuilder import com.mojang.brigadier.builder.LiteralArgumentBuilder import com.mojang.brigadier.builder.RequiredArgumentBuilder import com.mojang.brigadier.context.CommandContext +import com.mojang.brigadier.suggestion.SuggestionProvider import java.lang.reflect.ParameterizedType import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource import moe.nea.firmament.util.iterate @@ -80,6 +81,17 @@ fun , AT : Any> T.thenArgument( block: RequiredArgumentBuilder.(TypeSafeArg) -> Unit ): T = then(argument(name, argument, block)) +fun > T.suggestsList(provider: () -> Iterable) { + suggests(SuggestionProvider { context, builder -> + provider() + .asSequence() + .filter { it.startsWith(builder.remaining, ignoreCase = true) } + .forEach { + builder.suggest(it) + } + builder.buildFuture() + }) +} fun > T.thenLiteral( name: String, diff --git a/src/main/kotlin/moe/nea/firmament/commands/rome.kt b/src/main/kotlin/moe/nea/firmament/commands/rome.kt index 55dce75..02b12d9 100644 --- a/src/main/kotlin/moe/nea/firmament/commands/rome.kt +++ b/src/main/kotlin/moe/nea/firmament/commands/rome.kt @@ -19,12 +19,16 @@ package moe.nea.firmament.commands import com.mojang.brigadier.CommandDispatcher +import com.mojang.brigadier.arguments.StringArgumentType.getString +import com.mojang.brigadier.arguments.StringArgumentType.string import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource import net.minecraft.text.Text import moe.nea.firmament.features.world.FairySouls import moe.nea.firmament.gui.config.AllConfigsGui +import moe.nea.firmament.repo.ItemCostData import moe.nea.firmament.repo.RepoManager import moe.nea.firmament.util.SBData +import moe.nea.firmament.util.SkyblockId fun firmamentCommand() = literal("firmament") { @@ -47,6 +51,28 @@ fun firmamentCommand() = literal("firmament") { } } } + thenLiteral("price") { + thenArgument("item", string()) { item -> + suggestsList { RepoManager.neuRepo.items.items.keys } + thenExecute { + val itemName = SkyblockId(getString(context, "item")) + source.sendFeedback(Text.translatable("firmament.price", itemName.neuItem)) + val bazaarData = ItemCostData.bazaarData[itemName] + if (bazaarData != null) { + source.sendFeedback(Text.translatable("firmament.price.bazaar")) + source.sendFeedback(Text.translatable("firmament.price.bazaar.productid", bazaarData.productId.bazaarId)) + source.sendFeedback(Text.translatable("firmament.price.bazaar.buy.price", bazaarData.quickStatus.buyPrice)) + source.sendFeedback(Text.translatable("firmament.price.bazaar.buy.order", bazaarData.quickStatus.buyOrders)) + source.sendFeedback(Text.translatable("firmament.price.bazaar.sell.price", bazaarData.quickStatus.sellPrice)) + source.sendFeedback(Text.translatable("firmament.price.bazaar.sell.order", bazaarData.quickStatus.sellOrders)) + } + val lowestBin = ItemCostData.lowestBin[itemName] + if (lowestBin != null) { + source.sendFeedback(Text.translatable("firmament.price.lowestbin", lowestBin)) + } + } + } + } thenLiteral("dev") { thenLiteral("config") { thenExecute { -- cgit