diff --git a/src/api/java/appeng/api/config/Packaging.java b/src/api/java/appeng/api/config/Packaging.java new file mode 100644 index 000000000..d3642d2cd --- /dev/null +++ b/src/api/java/appeng/api/config/Packaging.java @@ -0,0 +1,5 @@ +package appeng.api.config; + +public enum Packaging { + ENABLED, DISABLED; +} diff --git a/src/api/java/appeng/api/networking/crafting/ICraftingPatternDetails.java b/src/api/java/appeng/api/networking/crafting/ICraftingPatternDetails.java index 11e4ee367..f7ce84924 100644 --- a/src/api/java/appeng/api/networking/crafting/ICraftingPatternDetails.java +++ b/src/api/java/appeng/api/networking/crafting/ICraftingPatternDetails.java @@ -37,82 +37,86 @@ import java.util.List; /** * do not implement provided by {@link ICraftingPatternItem} - * + *

* caching this INSTANCE will increase performance of validation and checks. */ -public interface ICraftingPatternDetails -{ +public interface ICraftingPatternDetails { - /** - * @return source item. - */ - ItemStack getPattern(); + /** + * @return source item. + */ + ItemStack getPattern(); - /** - * @param slotIndex specific slot index - * @param itemStack item in slot - * @param world crafting world - * - * @return if an item can be used in the specific slot for this pattern. - */ - boolean isValidItemForSlot( int slotIndex, ItemStack itemStack, World world ); + /** + * @param slotIndex specific slot index + * @param itemStack item in slot + * @param world crafting world + * @return if an item can be used in the specific slot for this pattern. + */ + boolean isValidItemForSlot(int slotIndex, ItemStack itemStack, World world); - /** - * @return if this pattern is a crafting pattern ( work bench ) - */ - boolean isCraftable(); + /** + * @return if this pattern is a crafting pattern ( work bench ) + */ + boolean isCraftable(); - /** - * @return a list of the inputs, will include nulls. - */ - IAEItemStack[] getInputs(); + /** + * @return a list of the inputs, will include nulls. + */ + IAEItemStack[] getInputs(); - /** - * @return a list of the inputs, will be clean - */ - IAEItemStack[] getCondensedInputs(); + /** + * @return a list of the inputs, will be clean + */ + IAEItemStack[] getCondensedInputs(); - /** - * @return a list of the outputs, will be clean - */ - IAEItemStack[] getCondensedOutputs(); + /** + * @return a list of the outputs, will be clean + */ + IAEItemStack[] getCondensedOutputs(); - /** - * @return a list of the outputs, will include nulls. - */ - IAEItemStack[] getOutputs(); + /** + * @return a list of the outputs, will include nulls. + */ + IAEItemStack[] getOutputs(); - /** - * @return if this pattern is enabled to support substitutions. - */ - boolean canSubstitute(); + /** + * @return if this pattern is enabled to support substitutions. + */ + boolean canSubstitute(); - default List getSubstituteInputs( int slot ) - { - return Collections.emptyList(); - } + default List getSubstituteInputs(int slot) { + return Collections.emptyList(); + } - /** - * Allow using this INSTANCE of the pattern details to preform the crafting action with performance enhancements. - * - * @param craftingInv inventory - * @param world crafting world - * - * @return the crafted ( work bench ) item. - */ - ItemStack getOutput( InventoryCrafting craftingInv, World world ); + /** + * Allow using this INSTANCE of the pattern details to preform the crafting action with performance enhancements. + * + * @param craftingInv inventory + * @param world crafting world + * @return the crafted ( work bench ) item. + */ + ItemStack getOutput(InventoryCrafting craftingInv, World world); - /** - * Get the priority of this pattern - * - * @return the priority of this pattern - */ - int getPriority(); + /** + * Get the priority of this pattern + * + * @return the priority of this pattern + */ + int getPriority(); - /** - * Set the priority the of this pattern. - * - * @param priority priority of pattern - */ - void setPriority( int priority ); + /** + * Set the priority the of this pattern. + * + * @param priority priority of pattern + */ + void setPriority(int priority); + + /** + * @return if this pattern is a packaging pattern. + */ + + default boolean isPackage() { + return false; + } } diff --git a/src/main/java/appeng/client/gui/implementations/GuiExpandedProcessingPatternTerm.java b/src/main/java/appeng/client/gui/implementations/GuiExpandedProcessingPatternTerm.java index 2ea395213..3ca3a4d36 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiExpandedProcessingPatternTerm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiExpandedProcessingPatternTerm.java @@ -1,7 +1,7 @@ package appeng.client.gui.implementations; import appeng.api.config.ActionItems; -import appeng.api.config.ItemSubstitution; +import appeng.api.config.Packaging; import appeng.api.config.Settings; import appeng.api.storage.ITerminalHost; import appeng.client.gui.widgets.GuiImgButton; @@ -36,6 +36,9 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement private static final String SUBSITUTION_DISABLE = "0"; private static final String SUBSITUTION_ENABLE = "1"; + private static final String PACKAGING_DISABLE = "0"; + private static final String PACKAGING_ENABLE = "1"; + private static final String CRAFTMODE_CRFTING = "1"; private static final String CRAFTMODE_PROCESSING = "0"; @@ -52,10 +55,14 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement private GuiImgButton divThreeBtn; private GuiImgButton minusOneBtn; private GuiImgButton maxCountBtn; + private GuiImgButton packagingEnabledBtn; + private GuiImgButton packagingDisabledBtn; public Map, Object> mapTargetSlot = new HashMap<>(); + private ContainerExpandedProcessingPatternTerm container; public GuiExpandedProcessingPatternTerm(final InventoryPlayer inventoryPlayer, final ITerminalHost te) { super(inventoryPlayer, te, new ContainerExpandedProcessingPatternTerm(inventoryPlayer, te)); + this.container = (ContainerExpandedProcessingPatternTerm) this.inventorySlots; this.setReservedSpace(81); } @@ -112,6 +119,13 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement if (this.substitutionsEnabledBtn == btn || this.substitutionsDisabledBtn == btn) { NetworkHandler.instance().sendToServer(new PacketValueConfig("PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSITUTION_DISABLE : SUBSITUTION_ENABLE)); } + + if (this.packagingEnabledBtn == btn || this.packagingDisabledBtn == btn) { + NetworkHandler.instance() + .sendToServer( + new PacketValueConfig("PatternTerminal.Package", this.packagingEnabledBtn == btn ? PACKAGING_DISABLE : PACKAGING_ENABLE)); + } + } catch (final IOException e) { AELog.error(e); } @@ -121,29 +135,26 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement public void initGui() { super.initGui(); - this.tabCraftButton = new GuiTabButton(this.guiLeft + 173, this.guiTop + this.ySize - 177, new ItemStack(Blocks.CRAFTING_TABLE), GuiText.CraftingPattern.getLocal(), this.itemRender); - this.buttonList.add(this.tabCraftButton); - this.tabProcessButton = new GuiTabButton(this.guiLeft + 173, this.guiTop + this.ySize - 177, new ItemStack(Blocks.FURNACE), GuiText.ProcessingPattern.getLocal(), this.itemRender); this.buttonList.add(this.tabProcessButton); - this.substitutionsEnabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, ItemSubstitution.ENABLED); - this.substitutionsEnabledBtn.setHalfSize(true); - this.buttonList.add(this.substitutionsEnabledBtn); + this.packagingEnabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, Packaging.ENABLED); + this.packagingEnabledBtn.setHalfSize(true); + this.buttonList.add(this.packagingEnabledBtn); - this.substitutionsDisabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, ItemSubstitution.DISABLED); - this.substitutionsDisabledBtn.setHalfSize(true); - this.buttonList.add(this.substitutionsDisabledBtn); + this.packagingDisabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, Packaging.DISABLED); + this.packagingDisabledBtn.setHalfSize(true); + this.buttonList.add(this.packagingDisabledBtn); this.clearBtn = new GuiImgButton(this.guiLeft + 74, this.guiTop + this.ySize - 163, Settings.ACTIONS, ActionItems.CLOSE); this.clearBtn.setHalfSize(true); this.buttonList.add(this.clearBtn); - this.x3Btn = new GuiImgButton(this.guiLeft + 131, this.guiTop + this.ySize - 158, Settings.ACTIONS, ActionItems.MULTIPLY_BY_THREE); + this.x3Btn = new GuiImgButton(this.guiLeft + 131, this.guiTop + this.ySize - 154, Settings.ACTIONS, ActionItems.MULTIPLY_BY_THREE); this.x3Btn.setHalfSize(true); this.buttonList.add(this.x3Btn); - this.x2Btn = new GuiImgButton(this.guiLeft + 131, this.guiTop + this.ySize - 148, Settings.ACTIONS, ActionItems.MULTIPLY_BY_TWO); + this.x2Btn = new GuiImgButton(this.guiLeft + 131, this.guiTop + this.ySize - 144, Settings.ACTIONS, ActionItems.MULTIPLY_BY_TWO); this.x2Btn.setHalfSize(true); this.buttonList.add(this.x2Btn); @@ -151,11 +162,11 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement this.plusOneBtn.setHalfSize(true); this.buttonList.add(this.plusOneBtn); - this.divThreeBtn = new GuiImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 158, Settings.ACTIONS, ActionItems.DIVIDE_BY_THREE); + this.divThreeBtn = new GuiImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 154, Settings.ACTIONS, ActionItems.DIVIDE_BY_THREE); this.divThreeBtn.setHalfSize(true); this.buttonList.add(this.divThreeBtn); - this.divTwoBtn = new GuiImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 148, Settings.ACTIONS, ActionItems.DIVIDE_BY_TWO); + this.divTwoBtn = new GuiImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 144, Settings.ACTIONS, ActionItems.DIVIDE_BY_TWO); this.divTwoBtn.setHalfSize(true); this.buttonList.add(this.divTwoBtn); @@ -173,16 +184,21 @@ public class GuiExpandedProcessingPatternTerm extends GuiMEMonitorable implement @Override public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.tabCraftButton.visible = false; this.tabProcessButton.visible = true; - this.substitutionsEnabledBtn.visible = false; - this.substitutionsDisabledBtn.visible = false; this.x2Btn.visible = true; this.x3Btn.visible = true; this.divTwoBtn.visible = true; this.divThreeBtn.visible = true; this.plusOneBtn.visible = true; this.minusOneBtn.visible = true; + + if (this.container.packaging) { + this.packagingEnabledBtn.visible = true; + this.packagingDisabledBtn.visible = false; + } else { + this.packagingEnabledBtn.visible = false; + this.packagingDisabledBtn.visible = true; + } //this.maxCountBtn.visible = true; super.drawFG(offsetX, offsetY, mouseX, mouseY); diff --git a/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java b/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java index 456dcca52..4be15088b 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java @@ -21,6 +21,7 @@ package appeng.client.gui.implementations; import appeng.api.config.ActionItems; import appeng.api.config.ItemSubstitution; +import appeng.api.config.Packaging; import appeng.api.config.Settings; import appeng.api.storage.ITerminalHost; import appeng.client.gui.widgets.GuiImgButton; @@ -60,6 +61,9 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi private static final String SUBSITUTION_DISABLE = "0"; private static final String SUBSITUTION_ENABLE = "1"; + private static final String PACKAGING_DISABLE = "0"; + private static final String PACKAGING_ENABLE = "1"; + private static final String CRAFTMODE_CRFTING = "1"; private static final String CRAFTMODE_PROCESSING = "0"; @@ -78,6 +82,8 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi private GuiImgButton divThreeBtn; private GuiImgButton minusOneBtn; private GuiImgButton maxCountBtn; + private GuiImgButton packagingEnabledBtn; + private GuiImgButton packagingDisabledBtn; public Map, Object> mapTargetSlot = new HashMap<>(); public GuiPatternTerm(final InventoryPlayer inventoryPlayer, final ITerminalHost te) { @@ -149,6 +155,12 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi .sendToServer( new PacketValueConfig("PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSITUTION_DISABLE : SUBSITUTION_ENABLE)); } + + if (this.packagingEnabledBtn == btn || this.packagingDisabledBtn == btn) { + NetworkHandler.instance() + .sendToServer( + new PacketValueConfig("PatternTerminal.Package", this.packagingEnabledBtn == btn ? PACKAGING_DISABLE : PACKAGING_ENABLE)); + } } catch (final IOException e) { AELog.error(e); } @@ -174,6 +186,14 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi this.substitutionsDisabledBtn.setHalfSize(true); this.buttonList.add(this.substitutionsDisabledBtn); + this.packagingEnabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, Packaging.ENABLED); + this.packagingEnabledBtn.setHalfSize(true); + this.buttonList.add(this.packagingEnabledBtn); + + this.packagingDisabledBtn = new GuiImgButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, Packaging.DISABLED); + this.packagingDisabledBtn.setHalfSize(true); + this.buttonList.add(this.packagingDisabledBtn); + this.clearBtn = new GuiImgButton(this.guiLeft + 74, this.guiTop + this.ySize - 163, Settings.ACTIONS, ActionItems.CLOSE); this.clearBtn.setHalfSize(true); this.buttonList.add(this.clearBtn); @@ -221,6 +241,8 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi this.divThreeBtn.visible = false; this.plusOneBtn.visible = false; this.minusOneBtn.visible = false; + this.packagingEnabledBtn.visible = false; + this.packagingDisabledBtn.visible = false; //this.maxCountBtn.visible = false; if (this.container.substitute) { @@ -231,6 +253,13 @@ public class GuiPatternTerm extends GuiMEMonitorable implements IJEIGhostIngredi this.substitutionsDisabledBtn.visible = true; } } else { + if (this.container.packaging) { + this.packagingEnabledBtn.visible = true; + this.packagingDisabledBtn.visible = false; + } else { + this.packagingEnabledBtn.visible = false; + this.packagingDisabledBtn.visible = true; + } this.tabCraftButton.visible = false; this.tabProcessButton.visible = true; this.substitutionsEnabledBtn.visible = false; diff --git a/src/main/java/appeng/client/gui/widgets/GuiImgButton.java b/src/main/java/appeng/client/gui/widgets/GuiImgButton.java index a72ac2e9b..5cc0dd6ef 100644 --- a/src/main/java/appeng/client/gui/widgets/GuiImgButton.java +++ b/src/main/java/appeng/client/gui/widgets/GuiImgButton.java @@ -125,6 +125,9 @@ public class GuiImgButton extends GuiButton implements ITooltip { this.registerApp(4 + 3 * 16, Settings.ACTIONS, ItemSubstitution.ENABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescEnabled); this.registerApp(7 + 3 * 16, Settings.ACTIONS, ItemSubstitution.DISABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescDisabled); + this.registerApp(8 + 3 * 16, Settings.ACTIONS, Packaging.ENABLED, ButtonToolTips.Packaging, ButtonToolTips.PackagingDescEnabled); + this.registerApp(9 + 3 * 16, Settings.ACTIONS, Packaging.DISABLED, ButtonToolTips.Packaging, ButtonToolTips.PackagingDescDisabled); + this.registerApp(16, Settings.VIEW_MODE, ViewItems.STORED, ButtonToolTips.View, ButtonToolTips.StoredItems); this.registerApp(18, Settings.VIEW_MODE, ViewItems.ALL, ButtonToolTips.View, ButtonToolTips.StoredCraftable); this.registerApp(19, Settings.VIEW_MODE, ViewItems.CRAFTABLE, ButtonToolTips.View, ButtonToolTips.Craftable); diff --git a/src/main/java/appeng/container/implementations/ContainerPatternEncoder.java b/src/main/java/appeng/container/implementations/ContainerPatternEncoder.java index 783150105..15858c8a3 100644 --- a/src/main/java/appeng/container/implementations/ContainerPatternEncoder.java +++ b/src/main/java/appeng/container/implementations/ContainerPatternEncoder.java @@ -12,14 +12,7 @@ import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import appeng.container.ContainerNull; import appeng.container.guisync.GuiSync; -import appeng.container.slot.AppEngSlot; -import appeng.container.slot.IOptionalSlotHost; -import appeng.container.slot.OptionalSlotFake; -import appeng.container.slot.SlotFakeCraftingMatrix; -import appeng.container.slot.SlotPatternTerm; -import appeng.container.slot.SlotPlayerHotBar; -import appeng.container.slot.SlotPlayerInv; -import appeng.container.slot.SlotRestrictedInput; +import appeng.container.slot.*; import appeng.core.sync.packets.PacketPatternSlot; import appeng.helpers.IContainerCraftingPacket; import appeng.items.storage.ItemViewCell; @@ -74,6 +67,8 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp public boolean craftingMode = true; @GuiSync(96) public boolean substitute = false; + @GuiSync(95) + public boolean packaging = false; protected ContainerPatternEncoder(InventoryPlayer ip, ITerminalHost monitorable, boolean bindInventory) { super(ip, monitorable, bindInventory); @@ -254,8 +249,12 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp encodedValue.setTag("in", tagIn); encodedValue.setTag("out", tagOut); - encodedValue.setBoolean("crafting", this.isCraftingMode()); - encodedValue.setBoolean("substitute", this.isSubstitute()); + if (this.isCraftingMode()) { + encodedValue.setBoolean("crafting", this.isCraftingMode()); + encodedValue.setBoolean("substitute", this.isSubstitute()); + } else { + encodedValue.setBoolean("packaging", this.isPackaging()); + } output.setTagCompound(encodedValue); @@ -532,6 +531,14 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp } public void setSubstitute(final boolean substitute) { + if (getPart() != null) { + getPart().setSubstitution(substitute); + } else if (iGuiItemObject != null) { + NBTTagCompound nbtTagCompound = iGuiItemObject.getItemStack().getTagCompound(); + if (nbtTagCompound != null) { + nbtTagCompound.setBoolean("isSubstitute", substitute); + } + } this.substitute = substitute; if (getPart() != null) { getPart().setSubstitution(substitute); @@ -543,6 +550,22 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp } } + public boolean isPackaging() { + return this.packaging; + } + + public void setPackaging(boolean packaging) { + if (getPart() != null) { + getPart().setPackaging(packaging); + } else if (iGuiItemObject != null) { + NBTTagCompound nbtTagCompound = iGuiItemObject.getItemStack().getTagCompound(); + if (nbtTagCompound != null) { + nbtTagCompound.setBoolean("isPackaging", packaging); + } + } + this.packaging = packaging; + } + @Override public void detectAndSendChanges() { super.detectAndSendChanges(); @@ -552,6 +575,7 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp this.setCraftingMode(this.getPart().isCraftingRecipe()); this.updateOrderOfOutputSlots(); } + this.packaging = this.getPart().isPackaging(); this.substitute = this.getPart().isSubstitution(); } else if (iGuiItemObject != null) { NBTTagCompound nbtTagCompound = iGuiItemObject.getItemStack().getTagCompound(); @@ -570,20 +594,23 @@ public abstract class ContainerPatternEncoder extends ContainerMEMonitorable imp nbtTagCompound.setBoolean("isCraftingMode", false); iGuiItemObject.getItemStack().setTagCompound(nbtTagCompound); } - nbtTagCompound = iGuiItemObject.getItemStack().getTagCompound(); - if (nbtTagCompound != null) { - if (nbtTagCompound.hasKey("isSubstitute")) { - boolean substitute = nbtTagCompound.getBoolean("isSubstitute"); - if (this.isSubstitute() != substitute) { - this.setSubstitute(substitute); - } - } else { - nbtTagCompound.setBoolean("isSubstitute", false); + + if (nbtTagCompound.hasKey("isSubstitute")) { + boolean substitute = nbtTagCompound.getBoolean("isSubstitute"); + if (this.isSubstitute() != substitute) { + this.setSubstitute(substitute); } } else { - nbtTagCompound = new NBTTagCompound(); nbtTagCompound.setBoolean("isSubstitute", false); - iGuiItemObject.getItemStack().setTagCompound(nbtTagCompound); + } + + if (nbtTagCompound.hasKey("isPackaging")) { + boolean packaging = nbtTagCompound.getBoolean("isPackaging"); + if (this.isPackaging() != packaging) { + this.setPackaging(packaging); + } + } else { + nbtTagCompound.setBoolean("isPackaging", false); } } } diff --git a/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java b/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java index 8b760b636..047978d92 100644 --- a/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java +++ b/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java @@ -224,7 +224,7 @@ public class ContainerWirelessPatternTerminal extends ContainerPatternEncoder im this.output.writeToNBT(tag, "output"); this.pattern.writeToNBT(tag, "patterns"); this.upgrades.writeToNBT(tag, "upgrades"); - + tag.setBoolean("isPackaging", this.packaging); this.wirelessTerminalGUIObject.saveChanges(tag); } } @@ -236,6 +236,7 @@ public class ContainerWirelessPatternTerminal extends ContainerPatternEncoder im this.output.readFromNBT(data, "output"); this.pattern.readFromNBT(data, "patterns"); upgrades.readFromNBT(wirelessTerminalGUIObject.getItemStack().getTagCompound().getCompoundTag("upgrades")); + this.packaging = data.getBoolean("isPackaging"); } } diff --git a/src/main/java/appeng/core/localization/ButtonToolTips.java b/src/main/java/appeng/core/localization/ButtonToolTips.java index ecbe17a65..f3aa25101 100644 --- a/src/main/java/appeng/core/localization/ButtonToolTips.java +++ b/src/main/java/appeng/core/localization/ButtonToolTips.java @@ -116,6 +116,11 @@ public enum ButtonToolTips { SubstitutionsOff, SubstitutionsDescEnabled, SubstitutionsDescDisabled, + Packaging, + PackagingOn, + PackagingOff, + PackagingDescEnabled, + PackagingDescDisabled, CraftOnly, CraftEither, diff --git a/src/main/java/appeng/core/localization/GuiText.java b/src/main/java/appeng/core/localization/GuiText.java index 56cc91c8a..176b7cd83 100644 --- a/src/main/java/appeng/core/localization/GuiText.java +++ b/src/main/java/appeng/core/localization/GuiText.java @@ -119,6 +119,7 @@ public enum GuiText { And, With, Substitute, + Package, Yes, No, diff --git a/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java b/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java index bdfab5900..d2f0d8c70 100644 --- a/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java +++ b/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java @@ -255,14 +255,16 @@ public class PacketJEIRecipe extends AppEngPacket { if (this.output != null && ((con instanceof ContainerPatternEncoder && !((ContainerPatternEncoder) con).isCraftingMode()))) { IItemHandler outputSlots = cct.getInventoryByName("output"); - for (int i = 0; i < outputSlots.getSlots(); ++i) { - ItemHandlerUtil.setStackInSlot(outputSlots, i, ItemStack.EMPTY); - } - for (int i = 0; i < this.output.size() && i < outputSlots.getSlots(); ++i) { - if (this.output.get(i) == null || this.output.get(i) == ItemStack.EMPTY) { - continue; + if (outputSlots != null) { + for (int i = 0; i < outputSlots.getSlots(); ++i) { + ItemHandlerUtil.setStackInSlot(outputSlots, i, ItemStack.EMPTY); + } + for (int i = 0; i < this.output.size() && i < outputSlots.getSlots(); ++i) { + if (this.output.get(i) == null || this.output.get(i) == ItemStack.EMPTY) { + continue; + } + ItemHandlerUtil.setStackInSlot(outputSlots, i, this.output.get(i)); } - ItemHandlerUtil.setStackInSlot(outputSlots, i, this.output.get(i)); } } } diff --git a/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java b/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java index 678bb3f57..57ccafd43 100644 --- a/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java +++ b/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java @@ -23,7 +23,6 @@ import appeng.api.AEApi; import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.data.IAEItemStack; import appeng.container.implementations.ContainerPatternEncoder; -import appeng.container.implementations.ContainerPatternTerm; import appeng.core.sync.AppEngPacket; import appeng.core.sync.network.INetworkInfo; import appeng.util.item.AEItemStack; diff --git a/src/main/java/appeng/core/sync/packets/PacketValueConfig.java b/src/main/java/appeng/core/sync/packets/PacketValueConfig.java index ef9156931..691667337 100644 --- a/src/main/java/appeng/core/sync/packets/PacketValueConfig.java +++ b/src/main/java/appeng/core/sync/packets/PacketValueConfig.java @@ -157,7 +157,9 @@ public class PacketValueConfig extends AppEngPacket { } else if (this.Name.equals("PatternTerminal.MaximizeCount")) { cpt.maximizeCount(); } else if (this.Name.equals("PatternTerminal.Substitute")) { - cpt.getPart().setSubstitution(this.Value.equals("1")); + cpt.setSubstitute(this.Value.equals("1")); + } else if (this.Name.equals("PatternTerminal.Package")) { + cpt.setPackaging(this.Value.equals("1")); } } } else if (this.Name.startsWith("StorageBus.")) { diff --git a/src/main/java/appeng/helpers/PatternHelper.java b/src/main/java/appeng/helpers/PatternHelper.java index 888195676..d05ef54e5 100644 --- a/src/main/java/appeng/helpers/PatternHelper.java +++ b/src/main/java/appeng/helpers/PatternHelper.java @@ -68,6 +68,7 @@ public class PatternHelper implements ICraftingPatternDetails, Comparable failCache = new HashSet<>(); private final Set passCache = new HashSet<>(); private final IAEItemStack pattern; + private final boolean isPackaging; private int priority = 0; public PatternHelper(final ItemStack is, final World w) { @@ -80,6 +81,7 @@ public class PatternHelper implements ICraftingPatternDetails, Comparable