diff options
author | Linnea Gräf <nea@nea.moe> | 2024-12-07 23:10:13 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-12-07 23:10:13 +0100 |
commit | 3acf36fbd07686431b8fbb5484f1f70b52651dc5 (patch) | |
tree | 2e7a582bc481c73bbd268a6fe8de57e5a5cf4e95 /src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt | |
parent | 0ca988c907c7e8e26029f59cc098e6be5e008ee5 (diff) | |
download | LocalTransactionLedger-3acf36fbd07686431b8fbb5484f1f70b52651dc5.tar.gz LocalTransactionLedger-3acf36fbd07686431b8fbb5484f1f70b52651dc5.tar.bz2 LocalTransactionLedger-3acf36fbd07686431b8fbb5484f1f70b52651dc5.zip |
Add kuudra chest detection
Diffstat (limited to 'src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt')
-rw-r--r-- | src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt new file mode 100644 index 0000000..48c040a --- /dev/null +++ b/src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt @@ -0,0 +1,48 @@ +package moe.nea.ledger.modules + +import moe.nea.ledger.ItemChange +import moe.nea.ledger.ItemId +import moe.nea.ledger.ItemIdProvider +import moe.nea.ledger.getDisplayNameU +import moe.nea.ledger.getInternalId +import moe.nea.ledger.getLore +import moe.nea.ledger.unformattedString +import moe.nea.ledger.utils.Inject +import net.minecraft.init.Blocks +import net.minecraft.inventory.Slot +import net.minecraft.item.Item +import java.time.Instant + +abstract class ChestDetection { + data class ChestCost( + val diff: List<ItemChange>, + val timestamp: Instant, + ) + + @Inject + lateinit var itemIdProvider: ItemIdProvider + fun scrapeChestReward(rewardSlot: Slot): ChestCost? { + val inventory = rewardSlot.inventory + if (!inventory.displayName.unformattedText.unformattedString() + .endsWith(" Chest") + ) return null + val rewardStack = rewardSlot.stack ?: return null + val name = rewardStack.getDisplayNameU() + if (name != "§aOpen Reward Chest") return null + val lore = rewardStack.getLore() + val cost = itemIdProvider.findCostItemsFromSpan(lore) + val gain = (9..18) + .mapNotNull { inventory.getStackInSlot(it) } + .filter { it.item != Item.getItemFromBlock(Blocks.stained_glass_pane) } + .map { + it.getInternalId()?.withStackSize(it.stackSize) + ?: itemIdProvider.findStackableItemByName(it.displayName) + ?: ItemId.NIL.withStackSize(it.stackSize) + } + return ChestCost( + cost.map { ItemChange.lose(it.first, it.second) } + gain.map { ItemChange.gain(it.first, it.second) }, + Instant.now() + ) + } + +}
\ No newline at end of file |