@@ -3,23 +3,22 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator
33import appeng.api.implementations.ICraftingPatternItem
44import appeng.api.networking.crafting.ICraftingPatternDetails
55import appeng.api.networking.events.MENetworkCraftingPatternChange
6+ import appeng.api.storage.data.IAEItemStack
7+ import appeng.items.misc.ItemEncodedPattern
68import appeng.me.GridAccessException
79import appeng.tile.inventory.AppEngInternalInventory
810import appeng.util.inv.IAEAppEngInventory
911import appeng.util.inv.InvOperation
1012import com.glodblock.github.util.FluidCraftingPatternDetails
13+ import com.glodblock.github.util.FluidPatternDetails
1114import github.kasuminova.mmce.common.util.PatternItemFilter
1215import github.kasuminova.novaeng.NovaEngineeringCore
1316import github.kasuminova.novaeng.common.container.ContainerEFabricatorPatternSearch
1417import github.kasuminova.novaeng.common.container.data.EFabricatorPatternData
1518import github.kasuminova.novaeng.common.network.PktEFabricatorPatternSearchGUIUpdate
1619import hellfirepvp.modularmachinery.ModularMachinery
1720import it.unimi.dsi.fastutil.objects.ObjectArrayList
18- import java.util.Objects
19- import java.util.function.Consumer
20- import java.util.function.IntFunction
21- import java.util.stream.Collectors
22- import java.util.stream.IntStream
21+ import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet
2322import net.minecraft.entity.player.EntityPlayer
2423import net.minecraft.entity.player.EntityPlayerMP
2524import net.minecraft.item.ItemStack
@@ -29,6 +28,11 @@ import net.minecraftforge.common.capabilities.Capability
2928import net.minecraftforge.fml.common.FMLCommonHandler
3029import net.minecraftforge.items.CapabilityItemHandler
3130import net.minecraftforge.items.IItemHandler
31+ import java.util.Objects
32+ import java.util.function.Consumer
33+ import java.util.function.IntFunction
34+ import java.util.stream.Collectors
35+ import java.util.stream.IntStream
3236import javax.annotation.Nonnull
3337
3438open class EFabricatorPatternBus : EFabricatorPart (), IAEAppEngInventory {
@@ -37,6 +41,7 @@ open class EFabricatorPatternBus : EFabricatorPart(), IAEAppEngInventory {
3741 val PATTERN_SLOTS = 12 * 6
3842 }
3943
44+ val aePatterns = ObjectOpenHashSet <IAEItemStack >()
4045 val patterns = AppEngInternalInventory (this , PATTERN_SLOTS , 1 , PatternItemFilter .INSTANCE )
4146 protected val details = ObjectArrayList <ICraftingPatternDetails ?>(PATTERN_SLOTS )
4247
@@ -83,15 +88,43 @@ open class EFabricatorPatternBus : EFabricatorPart(), IAEAppEngInventory {
8388 }
8489
8590 override fun onChangeInventory (
86- inv : IItemHandler ? ,
91+ inv : IItemHandler ,
8792 slot : Int ,
88- mc : InvOperation ? ,
89- removedStack : ItemStack ? ,
90- newStack : ItemStack ?
93+ mc : InvOperation ,
94+ removedStack : ItemStack ,
95+ newStack : ItemStack
9196 ) {
9297 refreshPattern(slot)
9398 notifyPatternChanged()
9499 sendPatternSearchGUIUpdateToClient(slot)
100+ when (mc) {
101+ InvOperation .EXTRACT -> removePattern(removedStack)
102+ InvOperation .INSERT -> addPattern(newStack)
103+ InvOperation .SET -> {
104+ removePattern(removedStack)
105+ addPattern(newStack)
106+ }
107+ }
108+ }
109+
110+ private fun addPattern (stack : ItemStack ) {
111+ val item = stack.item
112+ if (item is ItemEncodedPattern ) {
113+ val pattern = item.getPatternForItem(stack, this .world)
114+ if (pattern.isCraftable || pattern is FluidPatternDetails ) {
115+ aePatterns.add(pattern.condensedOutputs[0 ])
116+ }
117+ }
118+ }
119+
120+ private fun removePattern (stack : ItemStack ) {
121+ val item = stack.item
122+ if (item is ItemEncodedPattern ) {
123+ val pattern = item.getPatternForItem(stack, this .world)
124+ if (pattern.isCraftable || pattern is FluidPatternDetails ) {
125+ aePatterns.remove(pattern.condensedOutputs[0 ])
126+ }
127+ }
95128 }
96129
97130 private fun notifyPatternChanged () {
@@ -165,6 +198,9 @@ open class EFabricatorPatternBus : EFabricatorPart(), IAEAppEngInventory {
165198 override fun readCustomNBT (compound : NBTTagCompound ) {
166199 super .readCustomNBT(compound)
167200 patterns.readFromNBT(compound.getCompoundTag(" patterns" ))
201+ for (stack in patterns) {
202+ addPattern(stack)
203+ }
168204 }
169205
170206 override fun writeCustomNBT (compound : NBTTagCompound ? ) {
0 commit comments