diff --git a/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java b/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java index c379e4666..d60bbf623 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java @@ -81,6 +81,7 @@ public class GuiCraftConfirm extends AEBaseGui { this.setScrollBar(scrollbar); this.ccc = (ContainerCraftConfirm) this.inventorySlots; + this.ccc.setGui(this); if (te instanceof WirelessTerminalGuiObject) { this.OriginalGui = GuiBridge.GUI_WIRELESS_TERM; diff --git a/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java b/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java index 0cf30218b..6b45ca179 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java @@ -95,6 +95,7 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource { protected GuiCraftingCPU(final ContainerCraftingCPU container) { super(container); this.craftingCpu = container; + this.craftingCpu.setGui(this); this.ySize = GUI_HEIGHT; this.xSize = GUI_WIDTH; diff --git a/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java b/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java index b08aedb76..da75b2b73 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java +++ b/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java @@ -31,7 +31,11 @@ import appeng.api.util.IConfigManager; import appeng.api.util.IConfigurableObject; import appeng.client.ActionKey; import appeng.client.gui.AEBaseMEGui; -import appeng.client.gui.widgets.*; +import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiScrollbar; +import appeng.client.gui.widgets.GuiTabButton; +import appeng.client.gui.widgets.ISortSource; +import appeng.client.gui.widgets.MEGuiTextField; import appeng.client.me.InternalSlotME; import appeng.client.me.ItemRepo; import appeng.client.me.SlotME; diff --git a/src/main/java/appeng/client/gui/implementations/GuiNetworkStatus.java b/src/main/java/appeng/client/gui/implementations/GuiNetworkStatus.java index 301eabc6a..907a90dcd 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiNetworkStatus.java +++ b/src/main/java/appeng/client/gui/implementations/GuiNetworkStatus.java @@ -51,6 +51,7 @@ public class GuiNetworkStatus extends AEBaseGui implements ISortSource { private final ItemRepo repo; private final int rows = 4; + private final ContainerNetworkStatus cns; private GuiImgButton units; private int tooltip = -1; @@ -65,6 +66,9 @@ public class GuiNetworkStatus extends AEBaseGui implements ISortSource { this.ySize = 153; this.xSize = 195; this.repo.setRowSize(5); + + this.cns = (ContainerNetworkStatus) this.inventorySlots; + this.cns.setGui(this); } @Override diff --git a/src/main/java/appeng/container/implementations/ContainerCraftConfirm.java b/src/main/java/appeng/container/implementations/ContainerCraftConfirm.java index 7a9c9501c..b4d2dc323 100644 --- a/src/main/java/appeng/container/implementations/ContainerCraftConfirm.java +++ b/src/main/java/appeng/container/implementations/ContainerCraftConfirm.java @@ -35,6 +35,7 @@ import appeng.api.storage.ITerminalHost; import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; +import appeng.client.gui.implementations.GuiCraftConfirm; import appeng.container.AEBaseContainer; import appeng.container.guisync.GuiSync; import appeng.core.AELog; @@ -61,6 +62,7 @@ import javax.annotation.Nonnull; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.concurrent.Future; @@ -85,6 +87,7 @@ public class ContainerCraftConfirm extends AEBaseContainer { public boolean noCPU = true; @GuiSync(7) public String myName = ""; + private GuiCraftConfirm guiCraftConfirm; public ContainerCraftConfirm(final InventoryPlayer ip, final ITerminalHost te) { super(ip, te); @@ -403,4 +406,12 @@ public class ContainerCraftConfirm extends AEBaseContainer { public void setJob(final Future job) { this.job = job; } + + public void postUpdate(final List list, final byte ref) { + this.guiCraftConfirm.postUpdate(list, ref); + } + + public void setGui(GuiCraftConfirm guiCraftConfirm) { + this.guiCraftConfirm = guiCraftConfirm; + } } diff --git a/src/main/java/appeng/container/implementations/ContainerCraftingCPU.java b/src/main/java/appeng/container/implementations/ContainerCraftingCPU.java index 4954d7428..3358c9ece 100644 --- a/src/main/java/appeng/container/implementations/ContainerCraftingCPU.java +++ b/src/main/java/appeng/container/implementations/ContainerCraftingCPU.java @@ -30,6 +30,8 @@ import appeng.api.storage.IMEMonitorHandlerReceiver; import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; +import appeng.client.gui.implementations.GuiCraftConfirm; +import appeng.client.gui.implementations.GuiCraftingCPU; import appeng.container.AEBaseContainer; import appeng.container.guisync.GuiSync; import appeng.core.AELog; @@ -47,6 +49,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IContainerListener; import java.io.IOException; +import java.util.List; public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorHandlerReceiver, ICustomNameObject { @@ -58,6 +61,7 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH @GuiSync(0) public long eta = -1; + private GuiCraftingCPU guiCraftingCPU; public ContainerCraftingCPU(final InventoryPlayer ip, final Object te) { super(ip, te); @@ -232,4 +236,12 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH private void setNetwork(final IGrid network) { this.network = network; } + + public void postUpdate(final List list, final byte ref) { + this.guiCraftingCPU.postUpdate(list, ref); + } + + public void setGui(GuiCraftingCPU guiCraftingCPU) { + this.guiCraftingCPU = guiCraftingCPU; + } } diff --git a/src/main/java/appeng/container/implementations/ContainerCraftingTerm.java b/src/main/java/appeng/container/implementations/ContainerCraftingTerm.java index 82965ca3f..c87ad806b 100644 --- a/src/main/java/appeng/container/implementations/ContainerCraftingTerm.java +++ b/src/main/java/appeng/container/implementations/ContainerCraftingTerm.java @@ -24,6 +24,7 @@ import appeng.container.ContainerNull; import appeng.container.slot.SlotCraftingMatrix; import appeng.container.slot.SlotCraftingTerm; import appeng.helpers.IContainerCraftingPacket; +import appeng.parts.reporting.AbstractPartTerminal; import appeng.parts.reporting.PartCraftingTerminal; import appeng.tile.inventory.AppEngInternalInventory; import appeng.util.IConfigManagerHost; @@ -120,8 +121,4 @@ public class ContainerCraftingTerm extends ContainerMEMonitorable implements IAE public IRecipe getCurrentRecipe() { return this.currentRecipe; } - - public IConfigManagerHost getGui() { - return super.getGui(); - } } diff --git a/src/main/java/appeng/container/implementations/ContainerMEMonitorable.java b/src/main/java/appeng/container/implementations/ContainerMEMonitorable.java index e03142caa..7bf98bcb6 100644 --- a/src/main/java/appeng/container/implementations/ContainerMEMonitorable.java +++ b/src/main/java/appeng/container/implementations/ContainerMEMonitorable.java @@ -42,6 +42,7 @@ import appeng.api.storage.data.IItemList; import appeng.api.util.AEPartLocation; import appeng.api.util.IConfigManager; import appeng.api.util.IConfigurableObject; +import appeng.client.gui.implementations.GuiMEMonitorable; import appeng.container.AEBaseContainer; import appeng.container.guisync.GuiSync; import appeng.container.slot.SlotRestrictedInput; @@ -64,6 +65,7 @@ import net.minecraftforge.fml.common.Loader; import javax.annotation.Nonnull; import java.io.IOException; import java.nio.BufferOverflowException; +import java.util.List; public class ContainerMEMonitorable extends AEBaseContainer implements IConfigManagerHost, IConfigurableObject, IMEMonitorHandlerReceiver { @@ -357,11 +359,19 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa this.hasPower = isPowered; } - protected IConfigManagerHost getGui() { + public IConfigManagerHost getGui() { return this.gui; } public void setGui(@Nonnull final IConfigManagerHost gui) { this.gui = gui; } + + public IItemList getItems() { + return items; + } + + public void postUpdate(final List list) { + ((GuiMEMonitorable) this.gui).postUpdate(list); + } } diff --git a/src/main/java/appeng/container/implementations/ContainerNetworkStatus.java b/src/main/java/appeng/container/implementations/ContainerNetworkStatus.java index a30165032..eb54f5d10 100644 --- a/src/main/java/appeng/container/implementations/ContainerNetworkStatus.java +++ b/src/main/java/appeng/container/implementations/ContainerNetworkStatus.java @@ -30,6 +30,7 @@ import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import appeng.api.util.AEPartLocation; +import appeng.client.gui.implementations.GuiNetworkStatus; import appeng.container.AEBaseContainer; import appeng.container.guisync.GuiSync; import appeng.core.sync.network.NetworkHandler; @@ -42,6 +43,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import java.io.IOException; +import java.util.List; public class ContainerNetworkStatus extends AEBaseContainer { @@ -56,6 +58,7 @@ public class ContainerNetworkStatus extends AEBaseContainer { public long maxPower; private IGrid network; private int delay = 40; + private GuiNetworkStatus guiNetworkStatus; public ContainerNetworkStatus(final InventoryPlayer ip, final INetworkTool te) { super(ip, null, null); @@ -160,4 +163,12 @@ public class ContainerNetworkStatus extends AEBaseContainer { private void setPowerUsage(final long powerUsage) { this.powerUsage = powerUsage; } + + public void postUpdate(final List list) { + this.guiNetworkStatus.postUpdate(list); + } + + public void setGui(GuiNetworkStatus guiNetworkStatus) { + this.guiNetworkStatus = guiNetworkStatus; + } } diff --git a/src/main/java/appeng/core/sync/packets/PacketMEInventoryUpdate.java b/src/main/java/appeng/core/sync/packets/PacketMEInventoryUpdate.java index 0bb6f49f2..63503dccb 100644 --- a/src/main/java/appeng/core/sync/packets/PacketMEInventoryUpdate.java +++ b/src/main/java/appeng/core/sync/packets/PacketMEInventoryUpdate.java @@ -20,19 +20,18 @@ package appeng.core.sync.packets; import appeng.api.storage.data.IAEItemStack; -import appeng.client.gui.implementations.GuiCraftConfirm; -import appeng.client.gui.implementations.GuiCraftingCPU; -import appeng.client.gui.implementations.GuiMEMonitorable; -import appeng.client.gui.implementations.GuiNetworkStatus; +import appeng.container.implementations.ContainerCraftConfirm; +import appeng.container.implementations.ContainerCraftingCPU; +import appeng.container.implementations.ContainerMEMonitorable; +import appeng.container.implementations.ContainerNetworkStatus; import appeng.core.AELog; import appeng.core.sync.AppEngPacket; import appeng.core.sync.network.INetworkInfo; import appeng.util.item.AEItemStack; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -132,22 +131,22 @@ public class PacketMEInventoryUpdate extends AppEngPacket { @Override @SideOnly(Side.CLIENT) public void clientPacketData(final INetworkInfo network, final AppEngPacket packet, final EntityPlayer player) { - final GuiScreen gs = Minecraft.getMinecraft().currentScreen; + final Container c = player.openContainer; - if (gs instanceof GuiCraftConfirm) { - ((GuiCraftConfirm) gs).postUpdate(this.list, this.ref); + if (c instanceof ContainerCraftConfirm) { + ((ContainerCraftConfirm) c).postUpdate(this.list, this.ref); } - if (gs instanceof GuiCraftingCPU) { - ((GuiCraftingCPU) gs).postUpdate(this.list, this.ref); + if (c instanceof ContainerCraftingCPU) { + ((ContainerCraftingCPU) c).postUpdate(this.list, this.ref); } - if (gs instanceof GuiMEMonitorable) { - ((GuiMEMonitorable) gs).postUpdate(this.list); + if (c instanceof ContainerMEMonitorable) { + ((ContainerMEMonitorable) c).postUpdate(this.list); } - if (gs instanceof GuiNetworkStatus) { - ((GuiNetworkStatus) gs).postUpdate(this.list); + if (c instanceof ContainerNetworkStatus) { + ((ContainerNetworkStatus) c).postUpdate(this.list); } } diff --git a/src/main/java/appeng/integration/modules/jei/CraftableCallBack.java b/src/main/java/appeng/integration/modules/jei/CraftableCallBack.java index fbafa048f..3d14cb807 100644 --- a/src/main/java/appeng/integration/modules/jei/CraftableCallBack.java +++ b/src/main/java/appeng/integration/modules/jei/CraftableCallBack.java @@ -29,12 +29,15 @@ public class CraftableCallBack implements ITooltipCallback { if (list != null) { AEItemStack stack = AEItemStack.fromItemStack(ingredient); if (list.findPrecise(stack) != null) { + tooltip.add(I18n.translateToLocalFormatted("gui.appliedenergistics2.Missing")); tooltip.add(I18n.translateToLocalFormatted("gui.tooltips.appliedenergistics2.Craftable")); if (Mouse.isButtonDown(2)) { ((AEBaseContainer) container).setTargetStack(stack); final PacketInventoryAction p = new PacketInventoryAction(InventoryAction.AUTO_CRAFT, container.getInventory().size(), 0); NetworkHandler.instance().sendToServer(p); } + } else { + tooltip.add(I18n.translateToLocalFormatted("gui.appliedenergistics2.Missing")); } } } diff --git a/src/main/java/appeng/integration/modules/jei/JEIMissingItem.java b/src/main/java/appeng/integration/modules/jei/JEIMissingItem.java index e25ce52bb..346ac0958 100644 --- a/src/main/java/appeng/integration/modules/jei/JEIMissingItem.java +++ b/src/main/java/appeng/integration/modules/jei/JEIMissingItem.java @@ -4,14 +4,13 @@ import appeng.api.config.FuzzyMode; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import appeng.client.gui.implementations.GuiCraftingTerm; -import appeng.client.gui.implementations.GuiPatternTerm; import appeng.container.implementations.ContainerCraftingTerm; -import appeng.container.implementations.ContainerPatternTerm; import appeng.util.Platform; import appeng.util.item.AEItemStack; import mezz.jei.api.gui.IGuiIngredient; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.recipe.transfer.IRecipeTransferError; +import mezz.jei.gui.recipes.RecipeLayout; import net.minecraft.client.Minecraft; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -49,7 +48,7 @@ public class JEIMissingItem implements IRecipeTransferError { if (fuzzy.size() > 0) { for (IAEItemStack itemStack : fuzzy) { if (itemStack.getStackSize() > 0) { - if (itemStack.isSameType(stack)) { + if (itemStack.fuzzyComparison(AEItemStack.fromItemStack(stack), FuzzyMode.IGNORE_ALL)) { found = true; break; } @@ -87,8 +86,8 @@ public class JEIMissingItem implements IRecipeTransferError { Container c = minecraft.player.openContainer; if (c instanceof ContainerCraftingTerm) { ContainerCraftingTerm craftingTerm = (ContainerCraftingTerm) c; - GuiCraftingTerm g = (GuiCraftingTerm) craftingTerm.getGui(); + GuiCraftingTerm g = (GuiCraftingTerm) craftingTerm.getGui(); IItemList ir = g.getRepo().getList(); boolean found; boolean craftable; @@ -145,6 +144,9 @@ public class JEIMissingItem implements IRecipeTransferError { } } } + if (!this.errored) { + ((RecipeLayout) recipeLayout).getRecipeTransferButton().init(Minecraft.getMinecraft().player.openContainer, Minecraft.getMinecraft().player); + } } } diff --git a/src/main/java/appeng/integration/modules/jei/RecipeTransferHandler.java b/src/main/java/appeng/integration/modules/jei/RecipeTransferHandler.java index f641da43c..637187417 100644 --- a/src/main/java/appeng/integration/modules/jei/RecipeTransferHandler.java +++ b/src/main/java/appeng/integration/modules/jei/RecipeTransferHandler.java @@ -41,6 +41,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; import java.util.ArrayList; @@ -63,7 +64,7 @@ class RecipeTransferHandler implements IRecipeTransferHandl @Nullable @Override - public IRecipeTransferError transferRecipe(T container, IRecipeLayout recipeLayout, EntityPlayer player, boolean maxTransfer, boolean doTransfer) { + public IRecipeTransferError transferRecipe(@Nonnull T container, IRecipeLayout recipeLayout, @Nonnull EntityPlayer player, boolean maxTransfer, boolean doTransfer) { final String recipeType = recipeLayout.getRecipeCategory().getUid(); if (recipeType.equals(VanillaRecipeCategoryUid.INFORMATION) || recipeType.equals(VanillaRecipeCategoryUid.FUEL)) {