From 5c8768cc425e955cc7879de0e67623b17d53122b Mon Sep 17 00:00:00 2001 From: repo_alt Date: Thu, 3 Sep 2020 15:31:51 +0300 Subject: [PATCH] Batch crafting recipe cache https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6407 --- .gitignore | 1 + .../ContainerWirelessCraftingTerminal.java | 33 +++++++++++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index d2850ee..b133e6a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ run .classpath build .project +.idea *.launch # Mobile Tools for Java (J2ME) .mtj.tmp/ diff --git a/src/java/net/p455w0rd/wirelesscraftingterminal/common/container/ContainerWirelessCraftingTerminal.java b/src/java/net/p455w0rd/wirelesscraftingterminal/common/container/ContainerWirelessCraftingTerminal.java index 7b95a69..2c02d0b 100644 --- a/src/java/net/p455w0rd/wirelesscraftingterminal/common/container/ContainerWirelessCraftingTerminal.java +++ b/src/java/net/p455w0rd/wirelesscraftingterminal/common/container/ContainerWirelessCraftingTerminal.java @@ -66,6 +66,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -109,6 +110,7 @@ import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketValueConfig import net.p455w0rd.wirelesscraftingterminal.handlers.LocaleHandler; import net.p455w0rd.wirelesscraftingterminal.helpers.WirelessTerminalGuiObject; + public class ContainerWirelessCraftingTerminal extends Container implements IConfigManagerHost, IConfigurableObject, IMEMonitorHandlerReceiver, IAEAppEngInventory, IContainerCraftingPacket { private final ItemStack containerstack; @@ -163,6 +165,7 @@ public class ContainerWirelessCraftingTerminal extends Container implements ICon private IWirelessCraftingTerminalItem thisItem; private IGridNode networkNode; private IMEInventoryHandler cellInv; + private IRecipe currentRecipe; /** * Constructor for our custom container @@ -305,16 +308,34 @@ public class ContainerWirelessCraftingTerminal extends Container implements ICon return ((AppEngSlot) s).isDraggable(); } - @Override + private IRecipe findMatchingRecipe(InventoryCrafting craftMatrix, World worldIn) { + for (Object recipe : CraftingManager.getInstance().getRecipeList()) { + if (((IRecipe)recipe).matches(craftMatrix, worldIn)) { + return (IRecipe)recipe; + } + } + return null; + } + + @Override public void onCraftMatrixChanged(final IInventory iinv) { final ContainerNull cn = new ContainerNull(); - final InventoryCrafting ic = new InventoryCrafting(cn, 3, 3); + final InventoryCrafting craftingInv = new InventoryCrafting(cn, 3, 3); - for (int x = 0; x < 9; x++) { - ic.setInventorySlotContents(x, this.craftMatrixSlot[x].getStack()); - } - this.craftingSlot.putStack(CraftingManager.getInstance().findMatchingRecipe(ic, this.worldObj)); + for (int x = 0; x < 9; x++) { + craftingInv.setInventorySlotContents(x, craftMatrixSlot[x].getStack()); + } + if (currentRecipe == null || !currentRecipe.matches(craftingInv, getPlayerInv().player.worldObj)) { + currentRecipe = findMatchingRecipe(craftingInv, getPlayerInv().player.worldObj); + } + if (currentRecipe == null) { + craftingSlot.putStack(null); + } + else { + final ItemStack craftingResult = currentRecipe.getCraftingResult(craftingInv); + craftingSlot.putStack(craftingResult); + } writeToNBT("crafting"); }