item filtering for inventory additem

This commit is contained in:
minjaesong
2023-09-29 11:36:21 +09:00
parent 20a25b9725
commit 9031c66966

View File

@@ -1,9 +1,12 @@
package net.torvald.terrarum.modulebasegame.gameactors package net.torvald.terrarum.modulebasegame.gameactors
import net.torvald.terrarum.BlockCodex
import net.torvald.terrarum.ItemCodex import net.torvald.terrarum.ItemCodex
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.gameitems.isBlock
import net.torvald.terrarum.gameitems.isWall
import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.util.SortedArrayList import net.torvald.util.SortedArrayList
import java.math.BigInteger import java.math.BigInteger
@@ -37,13 +40,45 @@ open class FixtureInventory() {
fun isEmpty() = totalCount == 0L fun isEmpty() = totalCount == 0L
fun isNotEmpty() = totalCount > 0 fun isNotEmpty() = totalCount > 0
private fun filterItem(item: GameItem): GameItem {
return if (item.originalID.isBlock()) {
ItemCodex[BlockCodex[item.originalID].drop]!!
}
else if (item.originalID.isWall()) {
val blockID = item.originalID.substringAfter('@')
ItemCodex["wall@${BlockCodex[blockID].drop}"]!!
}
else {
item
}
}
open fun add(itemID: ItemID, count: Long = 1) { open fun add(itemID: ItemID, count: Long = 1) {
if (ItemCodex[itemID] == null) if (ItemCodex[itemID] == null)
throw NullPointerException("Item not found: $itemID") throw NullPointerException("Item not found: $itemID")
else else
add(ItemCodex[itemID]!!, count) add(ItemCodex[itemID]!!, count)
} }
open fun add(item: GameItem, count: Long = 1L) { open fun add(item0: GameItem, count: Long = 1L) {
var item = item0
var recursionCount = 0
var breakNow = false
var item1: GameItem
while (!breakNow) {
if (recursionCount > 16) throw IllegalStateException("Item filter recursion is too deep, check the filtering code")
item1 = filterItem(item)
if (item1 == item) {
breakNow = true
}
item = item1
recursionCount++
}
// println("[ActorInventory] add-by-elem $item, $count") // println("[ActorInventory] add-by-elem $item, $count")