More backporting

This commit is contained in:
DBotThePony 2024-01-01 11:39:30 +07:00
parent 0bcc078fe9
commit afe7d698c8
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 148 additions and 23 deletions

View File

@ -11,7 +11,6 @@ import net.minecraft.world.Container
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Player import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.inventory.AbstractContainerMenu
import net.minecraft.world.inventory.TransientCraftingContainer
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.CraftingRecipe import net.minecraft.world.item.crafting.CraftingRecipe
import net.minecraft.world.item.crafting.RecipeType import net.minecraft.world.item.crafting.RecipeType
@ -28,11 +27,9 @@ import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.render.IGUIRenderable import ru.dbotthepony.mc.otm.client.render.IGUIRenderable
import ru.dbotthepony.mc.otm.client.render.UVWindingOrder import ru.dbotthepony.mc.otm.client.render.UVWindingOrder
import ru.dbotthepony.mc.otm.config.MachinesConfig import ru.dbotthepony.mc.otm.config.MachinesConfig
import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.graph.storage.StorageNode import ru.dbotthepony.mc.otm.graph.storage.StorageNode
import ru.dbotthepony.mc.otm.graph.storage.StorageGraph import ru.dbotthepony.mc.otm.graph.storage.StorageGraph
import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.registry.MBlockEntities
import ru.dbotthepony.mc.otm.container.set
import ru.dbotthepony.mc.otm.core.nbt.mapString import ru.dbotthepony.mc.otm.core.nbt.mapString
import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.menu.storage.ItemMonitorMenu import ru.dbotthepony.mc.otm.menu.storage.ItemMonitorMenu
@ -44,6 +41,8 @@ import kotlin.collections.HashMap
import ru.dbotthepony.mc.otm.client.render.Widgets8 import ru.dbotthepony.mc.otm.client.render.Widgets8
import ru.dbotthepony.mc.otm.container.CombinedContainer import ru.dbotthepony.mc.otm.container.CombinedContainer
import ru.dbotthepony.mc.otm.container.MatteryCraftingContainer import ru.dbotthepony.mc.otm.container.MatteryCraftingContainer
import ru.dbotthepony.mc.otm.container.get
import ru.dbotthepony.mc.otm.container.set
import ru.dbotthepony.mc.otm.container.util.slotIterator import ru.dbotthepony.mc.otm.container.util.slotIterator
import ru.dbotthepony.mc.otm.core.collect.map import ru.dbotthepony.mc.otm.core.collect.map
import ru.dbotthepony.mc.otm.core.collect.toList import ru.dbotthepony.mc.otm.core.collect.toList

View File

@ -1,22 +1,113 @@
package ru.dbotthepony.mc.otm.container package ru.dbotthepony.mc.otm.container
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.Tag
import net.minecraft.world.Container
import net.minecraft.world.entity.player.Player
import net.minecraft.world.entity.player.StackedContents
import net.minecraft.world.inventory.AbstractContainerMenu
import net.minecraft.world.inventory.CraftingContainer import net.minecraft.world.inventory.CraftingContainer
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraftforge.common.util.INBTSerializable
import java.util.function.Predicate
open class MatteryCraftingContainer(watcher: Runnable, private val width: Int, private val height: Int) : MatteryContainer(watcher, width * height), CraftingContainer { object DummyMenu : AbstractContainerMenu(null, 0) {
constructor(width: Int, height: Int) : this({}, width, height) override fun quickMoveStack(pPlayer: Player, pIndex: Int): ItemStack {
final override fun getWidth(): Int { return ItemStack.EMPTY
return width
} }
final override fun getHeight(): Int { override fun stillValid(pPlayer: Player): Boolean {
return height return false
} }
}
final override fun getItems(): MutableList<ItemStack> {
val i = spliterator() // урод
val result = ArrayList<ItemStack>(i.estimateSize().toInt()) open class MatteryCraftingContainer private constructor(watcher: Runnable, width: Int, height: Int, private val parent: MatteryContainer) : CraftingContainer(DummyMenu, width, height), IMatteryContainer by parent, INBTSerializable<CompoundTag?> {
i.forEachRemaining { result.add(it) } constructor(width: Int, height: Int) : this({}, width, height)
return result constructor(watcher: Runnable, width: Int, height: Int) : this(watcher, width, height, MatteryContainer(watcher, width * height))
override fun serializeNBT(): CompoundTag {
return parent.serializeNBT()
}
override fun deserializeNBT(nbt: CompoundTag?) {
parent.deserializeNBT(nbt)
}
fun deserializeNBT(nbt: Tag?) {
parent.deserializeNBT(nbt as? CompoundTag)
}
override fun clearContent() {
parent.clearContent()
}
override fun getContainerSize(): Int {
return parent.getContainerSize()
}
override fun isEmpty(): Boolean {
return parent.isEmpty()
}
override fun getItem(p_39332_: Int): ItemStack {
return parent.getItem(p_39332_)
}
override fun removeItem(p_39334_: Int, p_39335_: Int): ItemStack {
return parent.removeItem(p_39334_, p_39335_)
}
override fun removeItemNoUpdate(p_39344_: Int): ItemStack {
return parent.removeItemNoUpdate(p_39344_)
}
override fun setItem(p_39337_: Int, p_39338_: ItemStack) {
parent.setItem(p_39337_, p_39338_)
}
override fun setChanged() {
parent.setChanged()
}
override fun stillValid(p_39340_: Player): Boolean {
return parent.stillValid(p_39340_)
}
override fun fillStackedContents(p_39342_: StackedContents) {
parent.fillStackedContents(p_39342_)
}
override fun getMaxStackSize(): Int {
return parent.getMaxStackSize()
}
override fun startOpen(p_18955_: Player) {
parent.startOpen(p_18955_)
}
override fun stopOpen(p_18954_: Player) {
parent.stopOpen(p_18954_)
}
override fun canPlaceItem(p_18952_: Int, p_18953_: ItemStack): Boolean {
return parent.canPlaceItem(p_18952_, p_18953_)
}
override fun canTakeItem(p_273520_: Container, p_272681_: Int, p_273702_: ItemStack): Boolean {
return parent.canTakeItem(p_273520_, p_272681_, p_273702_)
}
override fun countItem(p_18948_: Item): Int {
return parent.countItem(p_18948_)
}
override fun hasAnyOf(p_18950_: MutableSet<Item>): Boolean {
return parent.hasAnyOf(p_18950_)
}
override fun hasAnyMatching(p_216875_: Predicate<ItemStack>): Boolean {
return parent.hasAnyMatching(p_216875_)
} }
} }

View File

@ -1,12 +1,15 @@
package ru.dbotthepony.mc.otm.container package ru.dbotthepony.mc.otm.container
import net.minecraft.world.entity.player.Player
import net.minecraft.world.entity.player.StackedContents import net.minecraft.world.entity.player.StackedContents
import net.minecraft.world.inventory.CraftingContainer import net.minecraft.world.inventory.CraftingContainer
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.container.util.iterator import ru.dbotthepony.mc.otm.container.util.iterator
import ru.dbotthepony.mc.otm.core.collect.toList import ru.dbotthepony.mc.otm.core.collect.toList
class ShadowCraftingContainer(private val parent: CraftingContainer) : IContainer by ShadowContainer(parent), CraftingContainer { class ShadowCraftingContainer private constructor(private val parent: CraftingContainer, private val shadow: ShadowContainer) : CraftingContainer(DummyMenu, parent.width, parent.height), IContainer by shadow {
constructor(parent: CraftingContainer) : this(parent, ShadowContainer(parent))
override fun fillStackedContents(contents: StackedContents) { override fun fillStackedContents(contents: StackedContents) {
for (item in iterator()) { for (item in iterator()) {
contents.accountStack(item) contents.accountStack(item)
@ -21,8 +24,40 @@ class ShadowCraftingContainer(private val parent: CraftingContainer) : IContaine
return parent.height return parent.height
} }
override fun getItems(): MutableList<ItemStack> { override fun clearContent() {
return iterator().toList() shadow.clearContent()
}
override fun getContainerSize(): Int {
return shadow.getContainerSize()
}
override fun isEmpty(): Boolean {
return shadow.isEmpty()
}
override fun getItem(p_39332_: Int): ItemStack {
return shadow.getItem(p_39332_)
}
override fun removeItem(p_39334_: Int, p_39335_: Int): ItemStack {
return shadow.removeItem(p_39334_, p_39335_)
}
override fun removeItemNoUpdate(p_39344_: Int): ItemStack {
return shadow.removeItemNoUpdate(p_39344_)
}
override fun setItem(p_39337_: Int, p_39338_: ItemStack) {
shadow.setItem(p_39337_, p_39338_)
}
override fun setChanged() {
shadow.setChanged()
}
override fun stillValid(p_39340_: Player): Boolean {
return shadow.stillValid(p_39340_)
} }
companion object { companion object {

View File

@ -39,7 +39,7 @@ import net.minecraft.util.profiling.ProfilerFiller
import net.minecraft.world.Container import net.minecraft.world.Container
import net.minecraft.world.entity.player.Player import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.inventory.AbstractContainerMenu
import net.minecraft.world.inventory.TransientCraftingContainer import net.minecraft.world.inventory.CraftingContainer
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
@ -521,7 +521,7 @@ object MatterManager {
height = it.value.ingredients.size.coerceAtLeast(height) height = it.value.ingredients.size.coerceAtLeast(height)
} }
val container = TransientCraftingContainer(object : AbstractContainerMenu(null, 0) { val container = CraftingContainer(object : AbstractContainerMenu(null, 0) {
override fun quickMoveStack(pPlayer: Player, pIndex: Int): ItemStack { override fun quickMoveStack(pPlayer: Player, pIndex: Int): ItemStack {
return ItemStack.EMPTY return ItemStack.EMPTY
} }

View File

@ -25,9 +25,9 @@ class ExopackInventoryMenu(val capability: MatteryPlayerCapability) : MatteryMen
init { init {
if (capability.isExopackCraftingUpgraded) { if (capability.isExopackCraftingUpgraded) {
craftingGrid = TransientCraftingContainer(this, 3, 3) craftingGrid = CraftingContainer(this, 3, 3)
} else { } else {
craftingGrid = TransientCraftingContainer(this, 2, 2) craftingGrid = CraftingContainer(this, 2, 2)
} }
val builder = ImmutableList.builder<MatterySlot>() val builder = ImmutableList.builder<MatterySlot>()