Update vanish/clear/drop inventory hooks
This commit is contained in:
parent
024a25f72a
commit
db99fb339c
@ -13,6 +13,7 @@ import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.tags.TagKey
|
||||
import net.minecraft.world.Container
|
||||
import net.minecraft.world.Difficulty
|
||||
import net.minecraft.world.damagesource.DamageSource
|
||||
import net.minecraft.world.effect.MobEffect
|
||||
@ -35,7 +36,6 @@ import net.minecraft.world.phys.Vec3
|
||||
import net.minecraftforge.common.ForgeHooks
|
||||
import net.minecraftforge.common.MinecraftForge
|
||||
import net.minecraftforge.common.capabilities.Capability
|
||||
import net.minecraftforge.common.capabilities.ForgeCapabilities
|
||||
import net.minecraftforge.common.capabilities.ICapabilityProvider
|
||||
import net.minecraftforge.common.util.INBTSerializable
|
||||
import net.minecraftforge.common.util.LazyOptional
|
||||
@ -72,7 +72,9 @@ import ru.dbotthepony.mc.otm.client.minecraft
|
||||
import ru.dbotthepony.mc.otm.config.AndroidConfig
|
||||
import ru.dbotthepony.mc.otm.config.ExopackConfig
|
||||
import ru.dbotthepony.mc.otm.container.MatteryContainer
|
||||
import ru.dbotthepony.mc.otm.container.iterator
|
||||
import ru.dbotthepony.mc.otm.container.stream
|
||||
import ru.dbotthepony.mc.otm.container.vanishCursedItems
|
||||
import ru.dbotthepony.mc.otm.core.*
|
||||
import ru.dbotthepony.mc.otm.core.collect.UUIDIntModifiersMap
|
||||
import ru.dbotthepony.mc.otm.core.collect.filter
|
||||
@ -106,6 +108,17 @@ import kotlin.collections.ArrayList
|
||||
import kotlin.collections.HashMap
|
||||
import kotlin.reflect.KMutableProperty1
|
||||
|
||||
private fun Player.dropContainer(container: Container, spill: Boolean = true, setThrower: Boolean = false) {
|
||||
val iterator = container.iterator()
|
||||
|
||||
for (item in iterator) {
|
||||
if (item.isNotEmpty) {
|
||||
drop(item, spill, setThrower)
|
||||
iterator.remove()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerializable<CompoundTag> {
|
||||
/**
|
||||
@ -1557,26 +1570,13 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
|
||||
return
|
||||
}
|
||||
|
||||
val iterator = mattery.exoPackContainer.iterator()
|
||||
|
||||
for (item in iterator) {
|
||||
if (!item.isEmpty) {
|
||||
inventory.player.drop(item, true, false)
|
||||
iterator.remove()
|
||||
}
|
||||
}
|
||||
inventory.player.dropContainer(mattery.exoPackContainer)
|
||||
inventory.player.dropContainer(mattery.exoPackChargeSlots)
|
||||
inventory.player.dropContainer(mattery.exoPackEnergy.parent)
|
||||
|
||||
for (smelter in mattery.smelters) {
|
||||
if (!smelter.input[0].isEmpty) {
|
||||
inventory.player.drop(smelter.input[0], true, false)
|
||||
smelter.input[0] = ItemStack.EMPTY
|
||||
}
|
||||
|
||||
if (!smelter.output[0].isEmpty) {
|
||||
inventory.player.drop(smelter.output[0], true, false)
|
||||
smelter.output[0] = ItemStack.EMPTY
|
||||
}
|
||||
|
||||
inventory.player.dropContainer(smelter.input)
|
||||
inventory.player.dropContainer(smelter.output)
|
||||
smelter.currentJob = null
|
||||
}
|
||||
}
|
||||
@ -1590,6 +1590,8 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
|
||||
}
|
||||
|
||||
mattery.exoPackContainer.clearContent()
|
||||
mattery.exoPackChargeSlots.clearContent()
|
||||
mattery.exoPackEnergy.parent.clearContent()
|
||||
|
||||
for (smelter in mattery.smelters) {
|
||||
smelter.input.clearContent()
|
||||
@ -1600,15 +1602,16 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
|
||||
|
||||
@JvmStatic
|
||||
fun playerDestroyVanishingCursedItems(player: Player) {
|
||||
if (player.matteryPlayer?.hasExoPack == false) {
|
||||
return
|
||||
}
|
||||
player.matteryPlayer?.let {
|
||||
if (it.hasExoPack) {
|
||||
it.exoPackContainer.vanishCursedItems()
|
||||
it.exoPackChargeSlots.vanishCursedItems()
|
||||
it.exoPackEnergy.parent.vanishCursedItems()
|
||||
|
||||
val iterator = player.matteryPlayer?.exoPackContainer?.iterator() ?: return
|
||||
|
||||
for (item in iterator) {
|
||||
if (!item.isEmpty && hasVanishingCurse(item)) {
|
||||
iterator.remove()
|
||||
for (smelter in it.smelters) {
|
||||
smelter.input.vanishCursedItems()
|
||||
smelter.output.vanishCursedItems()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectFunction
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap
|
||||
import net.minecraft.world.Container
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.enchantment.EnchantmentHelper.hasVanishingCurse
|
||||
import net.minecraftforge.common.capabilities.Capability
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler
|
||||
import ru.dbotthepony.mc.otm.core.addAll
|
||||
@ -83,6 +84,16 @@ fun Container.addItem(stack: ItemStack, range: IntRange, simulate: Boolean = fal
|
||||
|
||||
fun Container.addItem(stack: ItemStack, simulate: Boolean): ItemStack = addItem(stack, 0 until containerSize, simulate)
|
||||
|
||||
fun Container.vanishCursedItems() {
|
||||
val iterator = iterator()
|
||||
|
||||
for (item in iterator) {
|
||||
if (item.isNotEmpty && hasVanishingCurse(item)) {
|
||||
iterator.remove()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <T> Container.forEach(cap: Capability<T>, consumer: (Pair<ItemStack, T>) -> Unit) {
|
||||
for (value in iterator(cap)) {
|
||||
consumer(value)
|
||||
|
Loading…
Reference in New Issue
Block a user