Drop exosuit inventory on death

This commit is contained in:
DBotThePony 2022-08-31 11:21:55 +07:00
parent 7585da2a51
commit 23eb879105
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 39 additions and 2 deletions

View File

@ -80,6 +80,17 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, IMatteryEn
field = value
}
fun dropExoSuitInventory() {
val iterator = exoSuitContainer.iterator()
for (item in iterator) {
if (!item.isEmpty) {
ply.drop(item, true, false)
iterator.remove()
}
}
}
var isExoSuitCraftingUpgraded by synchronizer.bool(setter = setter@{ value, access, _ ->
if (value != access.read()) {
access.write(value)
@ -799,6 +810,10 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, IMatteryEn
return
}
if (mattery.hasExoSuit) {
mattery.dropExoSuitInventory()
}
if (!mattery.isAndroid) {
return
}

View File

@ -346,8 +346,30 @@ open class MatteryContainer(val watcher: Runnable, private val size: Int) : Cont
Arrays.fill(trackedSlots, ItemStack.EMPTY)
}
final override fun iterator(): Iterator<ItemStack> {
return slots.iterator()
final override fun iterator(): MutableIterator<ItemStack> {
return object : MutableIterator<ItemStack> {
private var index = 0
override fun hasNext(): Boolean {
return index < size
}
override fun next(): ItemStack {
if (index >= size) {
throw IllegalStateException("Already finished iterating")
}
return slots[index++]
}
override fun remove() {
if (index == 0) {
throw IllegalStateException("Never called next()")
}
set(index - 1, ItemStack.EMPTY)
}
}
}
}