From 30263bf30e6832058f94dd5fb0c4e8fec5bec4e8 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Fri, 28 Feb 2025 20:29:20 +0700 Subject: [PATCH] Make CombinedContainer temporarily implement old IMatteryContainer so it no longer crashes --- .../mc/otm/container/CombinedContainer.kt | 26 +++++++++++++++---- .../otm/container/IFilteredContainerSlot.kt | 8 ++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/CombinedContainer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/CombinedContainer.kt index e255cd03a..456f87cde 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/CombinedContainer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/CombinedContainer.kt @@ -23,7 +23,7 @@ import ru.dbotthepony.mc.otm.core.isNotEmpty import ru.dbotthepony.mc.otm.core.stream import java.util.stream.Stream -class CombinedContainer(containers: Stream>>) : ISlottedContainer { +class CombinedContainer(containers: Stream>>) : ISlottedContainer, IMatteryContainer { constructor(vararg containers: IEnhancedContainer) : this(containers.stream().map { it to (0 until it.containerSize) }) constructor(containers: Collection) : this(containers.stream().map { it to (0 until it.containerSize) }) @@ -116,12 +116,28 @@ class CombinedContainer(containers: Stream { - return slots.iterator() + override fun slotIterator(): Iterator { + return slots.iterator().map { + if (it is IFilteredContainerSlot) it else IFilteredContainerSlot.Dummy(it) + } } - override fun containerSlot(slot: Int): IContainerSlot { - return slots[slot] + override fun containerSlot(slot: Int): IFilteredContainerSlot { + val getSlot = slots[slot] + if (getSlot is IFilteredContainerSlot) return getSlot + return IFilteredContainerSlot.Dummy(getSlot) + } + + override fun getMaxStackSize(slot: Int, itemStack: ItemStack): Int { + return super.getMaxStackSize(slot, itemStack) + } + + override fun getSlotFilter(slot: Int): Item? { + return containerSlot(slot).filter + } + + override fun clearSlotFilters() { + } override fun setChanged(slot: Int) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/IFilteredContainerSlot.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/IFilteredContainerSlot.kt index 054f0719d..0eaa8ee8f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/IFilteredContainerSlot.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/IFilteredContainerSlot.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.container +import net.minecraft.world.Container import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items @@ -26,4 +27,11 @@ interface IFilteredContainerSlot : IContainerSlot { return filter === item } } + + @Deprecated("Dummy implementation") + class Dummy(parent: IContainerSlot) : IFilteredContainerSlot, IContainerSlot by parent { + override var filter: Item? + get() = null + set(value) {} + } }