diff --git a/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt b/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt
index 832845eb0c11f60f2ae6168661d1a99961b28c37..050ae6fe442acacc4d3c20211d94b7200738182c 100644 (file)
jsonMap.forEach { (key, value) ->
craftingRecipes += CraftingRecipe(
- input = value.input.map(::getItem),
+ input = value.input.map(::Regex),
output = CraftingResult(getItem(key), value.count)
)
}
}
fun craftItem(input: List<Item>): InventoryItem? {
+ val startIndex = input.indexOfFirst { !it.isNone() }.takeIf { it >= 0 } ?: return null
+
return try {
- craftingRecipes.first { rec -> rec.input == input}.output.toInventoryItem()
+ craftingRecipes.first { rec ->
+ for (i in rec.input.indices) {
+ if (startIndex + i >= input.size) {
+ return@first rec.input.subList(i, rec.input.size).all { it.matches("none") }
+ }
+ if (!input[startIndex + i].params.key.matches(rec.input[i])) {
+ return@first false
+ }
+ }
+ return@first true
+ }.output.toInventoryItem()
} catch (e: NoSuchElementException) {
null
}