Use MatteryCraftingContainer in item monitor
This commit is contained in:
parent
af2d621cee
commit
4a606e78b0
@ -43,6 +43,7 @@ import java.util.*
|
|||||||
import kotlin.collections.HashMap
|
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.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
|
||||||
@ -211,10 +212,9 @@ class ItemMonitorBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matte
|
|||||||
|
|
||||||
// a lot of code is hardcoded to take CraftingContainer as it's input
|
// a lot of code is hardcoded to take CraftingContainer as it's input
|
||||||
// hence we are forced to work around this by providing proxy container
|
// hence we are forced to work around this by providing proxy container
|
||||||
val craftingGrid = object : MatteryContainer(3 * 3) {
|
val craftingGrid = object : MatteryCraftingContainer(::markDirtyFast, 3, 3) {
|
||||||
override fun setChanged(slot: Int, new: ItemStack, old: ItemStack) {
|
override fun setChanged(slot: Int, new: ItemStack, old: ItemStack) {
|
||||||
markDirtyFast()
|
markDirtyFast()
|
||||||
craftingGridVanilla[slot] = new
|
|
||||||
|
|
||||||
if (!inProcessOfCraft) {
|
if (!inProcessOfCraft) {
|
||||||
scanCraftingGrid(false)
|
scanCraftingGrid(false)
|
||||||
@ -222,20 +222,15 @@ class ItemMonitorBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matte
|
|||||||
}
|
}
|
||||||
}.also(::addDroppableContainer)
|
}.also(::addDroppableContainer)
|
||||||
|
|
||||||
private val craftingGridVanilla = TransientCraftingContainer(object : AbstractContainerMenu(null, Int.MIN_VALUE) {
|
|
||||||
override fun stillValid(p_38874_: Player) = true
|
|
||||||
override fun quickMoveStack(p_38941_: Player, p_38942_: Int) = ItemStack.EMPTY
|
|
||||||
}, 3, 3)
|
|
||||||
|
|
||||||
private fun scanCraftingGrid(justCheckForRecipeChange: Boolean): Boolean {
|
private fun scanCraftingGrid(justCheckForRecipeChange: Boolean): Boolean {
|
||||||
val level = level ?: return false
|
val level = level ?: return false
|
||||||
val server = level.server ?: return false
|
val server = level.server ?: return false
|
||||||
|
|
||||||
var craftingRecipe = craftingRecipe
|
var craftingRecipe = craftingRecipe
|
||||||
if (craftingRecipe != null && craftingRecipe.matches(craftingGridVanilla, level)) return true
|
if (craftingRecipe != null && craftingRecipe.matches(craftingGrid, level)) return true
|
||||||
if (justCheckForRecipeChange) return false
|
if (justCheckForRecipeChange) return false
|
||||||
|
|
||||||
craftingRecipe = server.recipeManager.getRecipeFor(RecipeType.CRAFTING, craftingGridVanilla, level).orElse(null)
|
craftingRecipe = server.recipeManager.getRecipeFor(RecipeType.CRAFTING, craftingGrid, level).orElse(null)
|
||||||
Arrays.fill(craftingGridTuples, null)
|
Arrays.fill(craftingGridTuples, null)
|
||||||
val poweredView = poweredView
|
val poweredView = poweredView
|
||||||
|
|
||||||
@ -335,7 +330,7 @@ class ItemMonitorBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matte
|
|||||||
val result: ItemStack
|
val result: ItemStack
|
||||||
|
|
||||||
try {
|
try {
|
||||||
residue = craftingRecipe.getRemainingItems(craftingGridVanilla)
|
residue = craftingRecipe.getRemainingItems(craftingGrid)
|
||||||
result = craftingRecipe.getResultItem(level.registryAccess())
|
result = craftingRecipe.getResultItem(level.registryAccess())
|
||||||
} finally {
|
} finally {
|
||||||
ForgeHooks.setCraftingPlayer(null)
|
ForgeHooks.setCraftingPlayer(null)
|
||||||
@ -344,7 +339,7 @@ class ItemMonitorBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matte
|
|||||||
check(residue.size == craftingGrid.containerSize) { "Container and residue list sizes mismatch: ${residue.size} != ${craftingGrid.containerSize}" }
|
check(residue.size == craftingGrid.containerSize) { "Container and residue list sizes mismatch: ${residue.size} != ${craftingGrid.containerSize}" }
|
||||||
|
|
||||||
val combinedInventory = craftingPlayer.matteryPlayer?.inventoryAndExopack
|
val combinedInventory = craftingPlayer.matteryPlayer?.inventoryAndExopack
|
||||||
val copy = craftingGrid.iterator(true).map { it.copy() }.toList()
|
val copy = craftingGrid.iterator(false).map { it.copy() }.toList()
|
||||||
|
|
||||||
// удаляем по одному предмету из сетки крафта
|
// удаляем по одному предмету из сетки крафта
|
||||||
for (slot in 0 until craftingGrid.containerSize) {
|
for (slot in 0 until craftingGrid.containerSize) {
|
||||||
|
Loading…
Reference in New Issue
Block a user