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