diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/DynamicallyProxiedContainer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/DynamicallyProxiedContainer.kt deleted file mode 100644 index b2e400392..000000000 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/DynamicallyProxiedContainer.kt +++ /dev/null @@ -1,81 +0,0 @@ -package ru.dbotthepony.mc.otm.container - -import net.minecraft.world.Container -import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack -import java.util.function.Predicate -import java.util.function.Supplier - -/** - * because mods tend to do crazy shit - */ -class DynamicallyProxiedContainer(private val toProxy: Supplier) : IContainer { - override fun clearContent() { - return toProxy.get().clearContent() - } - - override fun getContainerSize(): Int { - return toProxy.get().containerSize - } - - override fun isEmpty(): Boolean { - return toProxy.get().isEmpty - } - - override fun getItem(slot: Int): ItemStack { - return toProxy.get().getItem(slot) - } - - override fun removeItem(slot: Int, amount: Int): ItemStack { - return toProxy.get().removeItem(slot, amount) - } - - override fun removeItemNoUpdate(slot: Int): ItemStack { - return toProxy.get().removeItemNoUpdate(slot) - } - - override fun setItem(slot: Int, itemStack: ItemStack) { - return toProxy.get().setItem(slot, itemStack) - } - - override fun setChanged() { - return toProxy.get().setChanged() - } - - override fun stillValid(player: Player): Boolean { - return toProxy.get().stillValid(player) - } - - override fun getMaxStackSize(): Int { - return toProxy.get().getMaxStackSize() - } - - override fun startOpen(player: Player) { - toProxy.get().startOpen(player) - } - - override fun stopOpen(player: Player) { - toProxy.get().stopOpen(player) - } - - override fun canPlaceItem(slot: Int, itemStack: ItemStack): Boolean { - return toProxy.get().canPlaceItem(slot, itemStack) - } - - override fun canTakeItem(container: Container, slot: Int, itemStack: ItemStack): Boolean { - return toProxy.get().canTakeItem(container, slot, itemStack) - } - - override fun countItem(item: Item): Int { - return toProxy.get().countItem(item) - } - - override fun hasAnyOf(items: Set): Boolean { - return toProxy.get().hasAnyOf(items) - } - - override fun hasAnyMatching(predicate: Predicate): Boolean { - return toProxy.get().hasAnyMatching(predicate) - } -} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/IContainer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/IContainer.kt deleted file mode 100644 index 3afa4ab72..000000000 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/IContainer.kt +++ /dev/null @@ -1,95 +0,0 @@ -package ru.dbotthepony.mc.otm.container - -import net.minecraft.world.Container -import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack -import java.util.function.Predicate - -// passthrough all default methods to fix Kotlin bug related to implementation delegation not properly working on Java interfaces -// and also to give params proper names -// https://youtrack.jetbrains.com/issue/KT-55080/Change-the-behavior-of-inheritance-delegation-to-delegates-implementing-Java-interfaces-with-default-methods -interface IContainer : Container { - override fun getMaxStackSize(): Int { - return super.getMaxStackSize() - } - - override fun startOpen(player: Player) { - super.startOpen(player) - } - - override fun stopOpen(player: Player) { - super.stopOpen(player) - } - - override fun canPlaceItem(slot: Int, itemStack: ItemStack): Boolean { - return super.canPlaceItem(slot, itemStack) - } - - override fun canTakeItem(container: Container, slot: Int, itemStack: ItemStack): Boolean { - return super.canTakeItem(container, slot, itemStack) - } - - override fun countItem(item: Item): Int { - return super.countItem(item) - } - - override fun hasAnyOf(items: Set): Boolean { - return super.hasAnyOf(items) - } - - override fun hasAnyMatching(predicate: Predicate): Boolean { - return super.hasAnyMatching(predicate) - } - - override fun clearContent() - override fun getContainerSize(): Int - override fun isEmpty(): Boolean - override fun getItem(slot: Int): ItemStack - override fun removeItem(slot: Int, amount: Int): ItemStack - override fun removeItemNoUpdate(slot: Int): ItemStack - override fun setItem(slot: Int, itemStack: ItemStack) - override fun setChanged() - - override fun stillValid(player: Player): Boolean - companion object { - fun wrap(container: Container): IContainer { - if (container is IContainer) - return container - else - return object : IContainer, Container by container { - override fun getMaxStackSize(): Int { - return container.getMaxStackSize() - } - - override fun startOpen(player: Player) { - container.startOpen(player) - } - - override fun stopOpen(player: Player) { - container.stopOpen(player) - } - - override fun canPlaceItem(slot: Int, itemStack: ItemStack): Boolean { - return container.canPlaceItem(slot, itemStack) - } - - override fun canTakeItem(container: Container, slot: Int, itemStack: ItemStack): Boolean { - return container.canTakeItem(container, slot, itemStack) - } - - override fun countItem(item: Item): Int { - return container.countItem(item) - } - - override fun hasAnyOf(items: Set): Boolean { - return container.hasAnyOf(items) - } - - override fun hasAnyMatching(predicate: Predicate): Boolean { - return container.hasAnyMatching(predicate) - } - } - } - } -} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/IEnhancedContainer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/IEnhancedContainer.kt index 8a9fd2fac..f6560d196 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/IEnhancedContainer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/IEnhancedContainer.kt @@ -19,12 +19,41 @@ import java.util.stream.Stream import java.util.stream.StreamSupport /** - * "Backward-compatible" enhanced container interface, where all methods can be derived/emulated from existing [IContainer] ([Container]) code + * "Backward-compatible" enhanced container interface, where all methods can be derived/emulated from existing [Container] code * * This is useful because it allows to interact with actually enhanced and regular containers through unified interface, * and actual implementations of this interface are likely to provide efficient method implementations in place of derived/emulated ones. */ -interface IEnhancedContainer : IContainer, RecipeInput, Iterable, StackedContentsCompatible { +interface IEnhancedContainer : Container, RecipeInput, Iterable, StackedContentsCompatible { + // https://youtrack.jetbrains.com/issue/KT-55080/Change-the-behavior-of-inheritance-delegation-to-delegates-implementing-Java-interfaces-with-default-methods + override fun getMaxStackSize(): Int { + return super.getMaxStackSize() + } + + override fun startOpen(player: Player) { + super.startOpen(player) + } + + override fun stopOpen(player: Player) { + super.stopOpen(player) + } + + override fun canPlaceItem(slot: Int, itemStack: ItemStack): Boolean { + return super.canPlaceItem(slot, itemStack) + } + + override fun canTakeItem(container: Container, slot: Int, itemStack: ItemStack): Boolean { + return super.canTakeItem(container, slot, itemStack) + } + + override fun clearContent() + override fun getContainerSize(): Int + override fun getItem(slot: Int): ItemStack + override fun removeItem(slot: Int, amount: Int): ItemStack + override fun removeItemNoUpdate(slot: Int): ItemStack + override fun setItem(slot: Int, itemStack: ItemStack) + override fun setChanged() + // provide non-ambiguous get and set operators operator fun get(slot: Int): ItemStack { return getItem(slot) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryPlayer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryPlayer.kt index 5dbc065d0..83c7d95bc 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryPlayer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryPlayer.kt @@ -79,9 +79,7 @@ import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.config.PlayerConfig import ru.dbotthepony.mc.otm.config.ExopackConfig import ru.dbotthepony.mc.otm.container.CombinedContainer -import ru.dbotthepony.mc.otm.container.DynamicallyProxiedContainer import ru.dbotthepony.mc.otm.container.EnhancedContainer -import ru.dbotthepony.mc.otm.container.IContainer import ru.dbotthepony.mc.otm.container.IContainerSlot import ru.dbotthepony.mc.otm.container.IEnhancedContainer import ru.dbotthepony.mc.otm.container.IFilteredContainerSlot