From 7ebb2a0fbb3f1c76a9a512c02d7a2dd6aa1d1dd1 Mon Sep 17 00:00:00 2001 From: Yang Xizhi <60341015+GlodBlock@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:06:07 +0800 Subject: [PATCH] allow custom slot jei check and fix fluid color in cell workbanch (#401) --- .../java/appeng/client/gui/AEGuiHandler.java | 23 +++++++++---------- .../gui/implementations/GuiUpgradeable.java | 20 ++++++++-------- .../appeng/container/slot/IJEITargetSlot.java | 5 ++++ .../java/appeng/container/slot/SlotFake.java | 7 +++++- .../client/gui/widgets/GuiFluidSlot.java | 6 +++++ .../fluids/items/FluidDummyItemRendering.java | 5 ++++ 6 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/main/java/appeng/client/gui/AEGuiHandler.java b/src/main/java/appeng/client/gui/AEGuiHandler.java index b7cd7c29b..89acf5087 100644 --- a/src/main/java/appeng/client/gui/AEGuiHandler.java +++ b/src/main/java/appeng/client/gui/AEGuiHandler.java @@ -1,10 +1,14 @@ package appeng.client.gui; import appeng.api.storage.data.IAEItemStack; -import appeng.client.gui.implementations.*; +import appeng.client.gui.implementations.GuiCraftAmount; +import appeng.client.gui.implementations.GuiCraftConfirm; +import appeng.client.gui.implementations.GuiCraftingCPU; +import appeng.client.gui.implementations.GuiExpandedProcessingPatternTerm; +import appeng.client.gui.implementations.GuiPatternTerm; +import appeng.client.gui.implementations.GuiUpgradeable; import appeng.container.interfaces.IJEIGhostIngredients; -import appeng.container.slot.SlotFake; -import appeng.fluids.client.gui.widgets.GuiFluidSlot; +import appeng.container.slot.IJEITargetSlot; import mezz.jei.api.gui.IAdvancedGuiHandler; import mezz.jei.api.gui.IGhostIngredientHandler; import net.minecraft.client.gui.GuiScreen; @@ -78,12 +82,12 @@ public class AEGuiHandler implements IAdvancedGuiHandler, IGhostIngre return (guiSloty * 3) + guiSlotx + (currentScroll * 3); } + @SuppressWarnings("unchecked") @Override @Nonnull public List> getTargets(@Nonnull AEBaseGui gui, @Nonnull I ingredient, boolean doStart) { ArrayList> targets = new ArrayList<>(); - if (gui instanceof IJEIGhostIngredients) { - IJEIGhostIngredients g = (IJEIGhostIngredients) gui; + if (gui instanceof IJEIGhostIngredients g) { List> phantomTargets = g.getPhantomTargets(ingredient); targets.addAll((List>) (Object) phantomTargets); } @@ -91,13 +95,8 @@ public class AEGuiHandler implements IAdvancedGuiHandler, IGhostIngre if (gui instanceof GuiUpgradeable || gui instanceof GuiPatternTerm || gui instanceof GuiExpandedProcessingPatternTerm) { IJEIGhostIngredients ghostGui = ((IJEIGhostIngredients) gui); for (Target target : targets) { - if (ghostGui.getFakeSlotTargetMap().get(target) instanceof SlotFake) { - if (((SlotFake) ghostGui.getFakeSlotTargetMap().get(target)).getStack().isEmpty()) { - target.accept(ingredient); - break; - } - } else if (ghostGui.getFakeSlotTargetMap().get(target) instanceof GuiFluidSlot) { - if (((GuiFluidSlot) ghostGui.getFakeSlotTargetMap().get(target)).getFluidStack() == null) { + if (ghostGui.getFakeSlotTargetMap().get(target) instanceof IJEITargetSlot jeiSlot) { + if (jeiSlot.needAccept()) { target.accept(ingredient); break; } diff --git a/src/main/java/appeng/client/gui/implementations/GuiUpgradeable.java b/src/main/java/appeng/client/gui/implementations/GuiUpgradeable.java index b7efac632..90a2274d6 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiUpgradeable.java +++ b/src/main/java/appeng/client/gui/implementations/GuiUpgradeable.java @@ -47,6 +47,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import org.lwjgl.input.Mouse; +import javax.annotation.Nonnull; import java.awt.*; import java.io.IOException; import java.util.List; @@ -54,7 +55,7 @@ import java.util.*; public class GuiUpgradeable extends AEBaseGui implements IJEIGhostIngredients { - private final Map, Object> mapTargetSlot = new HashMap<>(); + protected final Map, Object> mapTargetSlot = new HashMap<>(); protected final ContainerUpgradeable cvb; protected final IUpgradeableHost bc; @@ -218,24 +219,25 @@ public class GuiUpgradeable extends AEBaseGui implements IJEIGhostIngredients { List> targets = new ArrayList<>(); List slots = new ArrayList<>(); - if (this.inventorySlots.inventorySlots.size() > 0) { + if (!this.inventorySlots.inventorySlots.isEmpty()) { for (Slot slot : this.inventorySlots.inventorySlots) { if (slot instanceof SlotFake && (!itemStack.isEmpty() || this instanceof GuiCellWorkbench && fluidStack != null)) { slots.add((IJEITargetSlot) slot); } } } - if (this.getGuiSlots().size() > 0) { + if (!this.getGuiSlots().isEmpty()) { for (GuiCustomSlot slot : this.getGuiSlots()) { if (slot instanceof GuiFluidSlot && fluidStack != null) { slots.add((IJEITargetSlot) slot); } } } - for (Object slot : slots) { + for (IJEITargetSlot slot : slots) { ItemStack finalItemStack = itemStack; FluidStack finalFluidStack = fluidStack; - Target targetItem = new Target() { + Target targetItem = new Target<>() { + @Nonnull @Override public Rectangle getArea() { if (slot instanceof SlotFake && ((SlotFake) slot).isSlotEnabled()) { @@ -247,20 +249,20 @@ public class GuiUpgradeable extends AEBaseGui implements IJEIGhostIngredients { } @Override - public void accept(Object ingredient) { + public void accept(@Nonnull Object ingredient) { PacketInventoryAction p = null; try { if (slot instanceof SlotFake && ((SlotFake) slot).isSlotEnabled()) { if (finalItemStack.isEmpty() && finalFluidStack != null) { - p = new PacketInventoryAction(InventoryAction.PLACE_JEI_GHOST_ITEM, (IJEITargetSlot) slot, AEItemStack.fromItemStack(FluidUtil.getFilledBucket(finalFluidStack))); + p = new PacketInventoryAction(InventoryAction.PLACE_JEI_GHOST_ITEM, slot, AEItemStack.fromItemStack(FluidUtil.getFilledBucket(finalFluidStack))); } else if (!finalItemStack.isEmpty()) { - p = new PacketInventoryAction(InventoryAction.PLACE_JEI_GHOST_ITEM, (IJEITargetSlot) slot, AEItemStack.fromItemStack(finalItemStack)); + p = new PacketInventoryAction(InventoryAction.PLACE_JEI_GHOST_ITEM, slot, AEItemStack.fromItemStack(finalItemStack)); } } else { if (finalFluidStack == null) { return; } - p = new PacketInventoryAction(InventoryAction.PLACE_JEI_GHOST_ITEM, (IJEITargetSlot) slot, AEItemStack.fromItemStack(AEFluidStack.fromFluidStack(finalFluidStack).asItemStackRepresentation())); + p = new PacketInventoryAction(InventoryAction.PLACE_JEI_GHOST_ITEM, slot, AEItemStack.fromItemStack(AEFluidStack.fromFluidStack(finalFluidStack).asItemStackRepresentation())); } NetworkHandler.instance().sendToServer(p); diff --git a/src/main/java/appeng/container/slot/IJEITargetSlot.java b/src/main/java/appeng/container/slot/IJEITargetSlot.java index c6d0f0429..a4b12900d 100644 --- a/src/main/java/appeng/container/slot/IJEITargetSlot.java +++ b/src/main/java/appeng/container/slot/IJEITargetSlot.java @@ -1,4 +1,9 @@ package appeng.container.slot; public interface IJEITargetSlot { + + default boolean needAccept() { + return false; + } + } diff --git a/src/main/java/appeng/container/slot/SlotFake.java b/src/main/java/appeng/container/slot/SlotFake.java index 5f15bb472..99110e695 100644 --- a/src/main/java/appeng/container/slot/SlotFake.java +++ b/src/main/java/appeng/container/slot/SlotFake.java @@ -50,7 +50,6 @@ public class SlotFake extends AppEngSlot implements IJEITargetSlot { if (!is.isEmpty()) { is = is.copy(); } - super.putStack(is); } @@ -58,4 +57,10 @@ public class SlotFake extends AppEngSlot implements IJEITargetSlot { public boolean canTakeStack(final EntityPlayer par1EntityPlayer) { return false; } + + @Override + public boolean needAccept() { + return this.getStack().isEmpty(); + } + } diff --git a/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidSlot.java b/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidSlot.java index 85f91b3d7..07afc6532 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidSlot.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidSlot.java @@ -93,4 +93,10 @@ public class GuiFluidSlot extends GuiCustomSlot implements IJEITargetSlot { this.fluids.setFluidInSlot(this.slot, stack); NetworkHandler.instance().sendToServer(new PacketFluidSlot(Collections.singletonMap(this.getId(), this.getFluidStack()))); } + + @Override + public boolean needAccept() { + return this.getFluidStack() == null; + } + } diff --git a/src/main/java/appeng/fluids/items/FluidDummyItemRendering.java b/src/main/java/appeng/fluids/items/FluidDummyItemRendering.java index 7871e6eaf..56fe90dbd 100644 --- a/src/main/java/appeng/fluids/items/FluidDummyItemRendering.java +++ b/src/main/java/appeng/fluids/items/FluidDummyItemRendering.java @@ -22,6 +22,7 @@ package appeng.fluids.items; import appeng.bootstrap.IItemRendering; import appeng.bootstrap.ItemRenderingCustomizer; import appeng.client.render.DummyFluidItemModel; +import net.minecraftforge.fluids.FluidStack; /** @@ -33,5 +34,9 @@ public class FluidDummyItemRendering extends ItemRenderingCustomizer { @Override public void customize(IItemRendering rendering) { rendering.builtInModel("models/item/dummy_fluid_item", new DummyFluidItemModel()); + rendering.color(((s, i) -> { + FluidStack fluid = ((FluidDummyItem) s.getItem()).getFluidStack(s); + return fluid != null ? fluid.getFluid().getColor() : 0xFFFFFFFF; + })); } }