From c6437465b79b8f1989e916b2cbce81bc21651652 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Wed, 17 Jun 2020 00:23:46 +0200 Subject: [PATCH] Notify the parent container of a lot more thoroughly when the slot is changed (i.e. items taken from it). And then make use of that to invalidate the validation state of the crafting pattern in the Molecular Assembler when the pattern is changed. --- .../java/appeng/client/gui/AEBaseGui.java | 10 ++++---- .../ContainerMolecularAssembler.java | 24 +++++++++++++++++-- .../appeng/container/slot/AppEngSlot.java | 23 +++++++++++------- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/main/java/appeng/client/gui/AEBaseGui.java b/src/main/java/appeng/client/gui/AEBaseGui.java index 5dc7e33d1..6334712cf 100644 --- a/src/main/java/appeng/client/gui/AEBaseGui.java +++ b/src/main/java/appeng/client/gui/AEBaseGui.java @@ -64,7 +64,7 @@ import appeng.client.me.SlotME; import appeng.client.render.StackSizeRenderer; import appeng.container.AEBaseContainer; import appeng.container.slot.*; -import appeng.container.slot.AppEngSlot.hasCalculatedValidness; +import appeng.container.slot.AppEngSlot.CalculatedValidity; import appeng.core.AELog; import appeng.core.AppEng; import appeng.core.sync.network.NetworkHandler; @@ -701,7 +701,8 @@ public abstract class AEBaseGui extends ContainerScre } if (!is.isEmpty() && s instanceof AppEngSlot) { - if (((AppEngSlot) s).getIsValid() == hasCalculatedValidness.NotAvailable) { + AppEngSlot aeSlot = (AppEngSlot) s; + if (aeSlot.getIsValid() == CalculatedValidity.NotAvailable) { boolean isValid = s.isItemValid(is) || s instanceof SlotOutput || s instanceof AppEngCraftingSlot || s instanceof SlotDisabled || s instanceof SlotInaccessible || s instanceof SlotFake @@ -713,11 +714,10 @@ public abstract class AEBaseGui extends ContainerScre AELog.debug(err); } } - ((AppEngSlot) s) - .setIsValid(isValid ? hasCalculatedValidness.Valid : hasCalculatedValidness.Invalid); + aeSlot.setIsValid(isValid ? CalculatedValidity.Valid : CalculatedValidity.Invalid); } - if (((AppEngSlot) s).getIsValid() == hasCalculatedValidness.Invalid) { + if (aeSlot.getIsValid() == CalculatedValidity.Invalid) { setBlitOffset(100); this.itemRenderer.zLevel = 100.0F; diff --git a/src/main/java/appeng/container/implementations/ContainerMolecularAssembler.java b/src/main/java/appeng/container/implementations/ContainerMolecularAssembler.java index c63cd0be3..c6224e970 100644 --- a/src/main/java/appeng/container/implementations/ContainerMolecularAssembler.java +++ b/src/main/java/appeng/container/implementations/ContainerMolecularAssembler.java @@ -21,6 +21,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.ContainerType; +import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraft.world.World; @@ -33,6 +34,7 @@ import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.container.ContainerLocator; import appeng.container.guisync.GuiSync; import appeng.container.interfaces.IProgressProvider; +import appeng.container.slot.AppEngSlot; import appeng.container.slot.SlotMolecularAssemblerPattern; import appeng.container.slot.SlotOutput; import appeng.container.slot.SlotRestrictedInput; @@ -60,6 +62,8 @@ public class ContainerMolecularAssembler extends ContainerUpgradeable implements @GuiSync(4) public int craftProgress = 0; + private Slot encodedPatternSlot; + public ContainerMolecularAssembler(int id, final PlayerInventory ip, final TileMolecularAssembler te) { super(TYPE, id, ip, te); this.tma = te; @@ -108,8 +112,9 @@ public class ContainerMolecularAssembler extends ContainerUpgradeable implements offX = 126; offY = 16; - this.addSlot(new SlotRestrictedInput(SlotRestrictedInput.PlacableItemType.ENCODED_CRAFTING_PATTERN, mac, 10, - offX, offY, this.getPlayerInventory())); + encodedPatternSlot = this + .addSlot(new SlotRestrictedInput(SlotRestrictedInput.PlacableItemType.ENCODED_CRAFTING_PATTERN, mac, 10, + offX, offY, this.getPlayerInventory())); this.addSlot(new SlotOutput(mac, 9, offX, offY + 32, -1)); offX = 122; @@ -161,4 +166,19 @@ public class ContainerMolecularAssembler extends ContainerUpgradeable implements public int getMaxProgress() { return MAX_CRAFT_PROGRESS; } + + @Override + public void onSlotChange(Slot s) { + + // If the pattern changes, the crafting grid slots lose validity + if (s == encodedPatternSlot) { + for (Slot otherSlot : inventorySlots) { + if (otherSlot != s && otherSlot instanceof AppEngSlot) { + ((AppEngSlot) otherSlot).setIsValid(AppEngSlot.CalculatedValidity.NotAvailable); + } + } + } + + } + } diff --git a/src/main/java/appeng/container/slot/AppEngSlot.java b/src/main/java/appeng/container/slot/AppEngSlot.java index df1018fe7..7daf8d83f 100644 --- a/src/main/java/appeng/container/slot/AppEngSlot.java +++ b/src/main/java/appeng/container/slot/AppEngSlot.java @@ -43,7 +43,7 @@ public class AppEngSlot extends Slot { private boolean isPlayerSide = false; private AEBaseContainer myContainer = null; private int IIcon = -1; - private hasCalculatedValidness isValid; + private CalculatedValidity isValid; private boolean isDisplay = false; public AppEngSlot(final IItemHandler inv, final int idx, final int x, final int y) { @@ -53,7 +53,7 @@ public class AppEngSlot extends Slot { this.defX = x; this.defY = y; - this.setIsValid(hasCalculatedValidness.NotAvailable); + this.setIsValid(CalculatedValidity.NotAvailable); } public Slot setNotDraggable() { @@ -105,10 +105,13 @@ public class AppEngSlot extends Slot { public void putStack(final ItemStack stack) { if (this.isSlotEnabled()) { ItemHandlerUtil.setStackInSlot(this.itemHandler, this.index, stack); + this.onSlotChanged(); + } + } - if (this.getContainer() != null) { - this.getContainer().onSlotChange(this); - } + private void notifyContainerSlotChanged() { + if (this.getContainer() != null) { + this.getContainer().onSlotChange(this); } } @@ -118,7 +121,9 @@ public class AppEngSlot extends Slot { @Override public void onSlotChanged() { - this.setIsValid(hasCalculatedValidness.NotAvailable); + super.onSlotChanged(); + this.setIsValid(CalculatedValidity.NotAvailable); + notifyContainerSlotChanged(); } @Override @@ -220,11 +225,11 @@ public class AppEngSlot extends Slot { this.isPlayerSide = isPlayerSide; } - public hasCalculatedValidness getIsValid() { + public CalculatedValidity getIsValid() { return this.isValid; } - public void setIsValid(final hasCalculatedValidness isValid) { + public void setIsValid(final CalculatedValidity isValid) { this.isValid = isValid; } @@ -236,7 +241,7 @@ public class AppEngSlot extends Slot { this.myContainer = myContainer; } - public enum hasCalculatedValidness { + public enum CalculatedValidity { NotAvailable, Valid, Invalid } }