aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-12-07 23:10:13 +0100
committerLinnea Gräf <nea@nea.moe>2024-12-07 23:10:13 +0100
commit3acf36fbd07686431b8fbb5484f1f70b52651dc5 (patch)
tree2e7a582bc481c73bbd268a6fe8de57e5a5cf4e95 /src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt
parent0ca988c907c7e8e26029f59cc098e6be5e008ee5 (diff)
downloadLocalTransactionLedger-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.kt48
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