Skip to content

Commit 49e60c0

Browse files
committed
使元件工作台可以正常编写显示元件的流体
1 parent 147e86f commit 49e60c0

File tree

11 files changed

+183
-19
lines changed

11 files changed

+183
-19
lines changed

src/main/java/com/glodblock/github/client/GuiGeneralLevelMaintainer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
5858
final var item = s.getStack();
5959
if (!item.isEmpty()) {
6060
if (item.getItem() == FCItems.FLUID_DROP) {
61-
if (UtilClient.rendererFluid(this, AEItemStack.fromItemStack(item), mouseX, mouseY, false))
61+
if (UtilClient.rendererFluid(this, AEItemStack.fromItemStack(item), mouseX, mouseY))
6262
return;
6363
}
6464
if (ModAndClassUtil.GAS && item.getItem() == FCGasItems.GAS_DROP) {
65-
if (UtilClient.rendererGas(this, AEItemStack.fromItemStack(item), mouseX, mouseY, false))
65+
if (UtilClient.rendererGas(this, AEItemStack.fromItemStack(item), mouseX, mouseY))
6666
return;
6767
}
6868
}

src/main/java/com/glodblock/github/client/GuiUltimateEncoder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,8 @@ protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
233233
if (slot instanceof final SlotFake s) {
234234
if (UtilClient.renderPatternSlotTip(this, mouseX, mouseY)) return;
235235
final var i = AEItemStack.fromItemStack(s.getStack());
236-
if (UtilClient.rendererFluid(this, i, mouseX, mouseY, true)) return;
237-
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY, true)) return;
236+
if (UtilClient.rendererFluid(this, i, mouseX, mouseY)) return;
237+
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY)) return;
238238
}
239239
super.renderHoveredToolTip(mouseX, mouseY);
240240
}

src/main/java/com/glodblock/github/client/client/gui/GuiExtendedFluidPatternTerminal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
144144
if (slot instanceof final SlotFake s) {
145145
if (UtilClient.renderPatternSlotTip(this, mouseX, mouseY)) return;
146146
final var i = AEItemStack.fromItemStack(s.getStack());
147-
if (UtilClient.rendererFluid(this, i, mouseX, mouseY, true)) return;
148-
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY, true)) return;
147+
if (UtilClient.rendererFluid(this, i, mouseX, mouseY)) return;
148+
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY)) return;
149149
}
150150
super.renderHoveredToolTip(mouseX, mouseY);
151151
}

src/main/java/com/glodblock/github/client/client/gui/GuiFluidPatternTerminal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
158158
if (!this.container.isCraftingMode() && slot instanceof final SlotFake s) {
159159
if (UtilClient.renderPatternSlotTip(this, mouseX, mouseY)) return;
160160
final var i = AEItemStack.fromItemStack(s.getStack());
161-
if (UtilClient.rendererFluid(this, i, mouseX, mouseY, true)) return;
162-
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY, true)) return;
161+
if (UtilClient.rendererFluid(this, i, mouseX, mouseY)) return;
162+
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY)) return;
163163
}
164164
super.renderHoveredToolTip(mouseX, mouseY);
165165
}

src/main/java/com/glodblock/github/client/client/gui/GuiWirelessFluidPatternTerminal.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
import com.glodblock.github.util.Ae2ReflectClient;
2121
import com.glodblock.github.util.ModAndClassUtil;
2222
import com.glodblock.github.util.UtilClient;
23+
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
2324
import mezz.jei.api.gui.IGhostIngredientHandler;
2425
import net.minecraft.client.gui.Gui;
2526
import net.minecraft.client.gui.GuiButton;
2627
import net.minecraft.entity.player.InventoryPlayer;
2728
import net.minecraft.inventory.ClickType;
2829
import net.minecraft.inventory.Slot;
2930

30-
import java.util.ArrayList;
3131
import java.util.List;
3232

3333
public class GuiWirelessFluidPatternTerminal extends GuiPatternTerm {
@@ -146,7 +146,7 @@ protected void handleMouseClick(final Slot slot, final int slotIdx, final int mo
146146

147147
@Override
148148
public List<IGhostIngredientHandler.Target<?>> getPhantomTargets(final Object ingredient) {
149-
final List<IGhostIngredientHandler.Target<?>> targets = new ArrayList<>();
149+
final List<IGhostIngredientHandler.Target<?>> targets = new ObjectArrayList<>();
150150
for (final Slot slot : this.inventorySlots.inventorySlots) {
151151
if (slot instanceof SlotFake) {
152152
final IGhostIngredientHandler.Target<?> target = new FluidPacketTarget(getGuiLeft(), getGuiTop(), slot);
@@ -163,8 +163,8 @@ protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
163163
if (!this.container.isCraftingMode() && slot instanceof final SlotFake s) {
164164
if (UtilClient.renderPatternSlotTip(this, mouseX, mouseY)) return;
165165
final var i = AEItemStack.fromItemStack(s.getStack());
166-
if (UtilClient.rendererFluid(this, i, mouseX, mouseY, true)) return;
167-
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY, true)) return;
166+
if (UtilClient.rendererFluid(this, i, mouseX, mouseY)) return;
167+
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY)) return;
168168
}
169169
super.renderHoveredToolTip(mouseX, mouseY);
170170
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package com.glodblock.github.coremod.mixin.ae2.container;
2+
3+
import appeng.api.implementations.IUpgradeableHost;
4+
import appeng.container.implementations.ContainerCellWorkbench;
5+
import appeng.container.implementations.ContainerUpgradeable;
6+
import appeng.container.slot.SlotFake;
7+
import appeng.helpers.InventoryAction;
8+
import appeng.items.storage.ItemViewCell;
9+
import appeng.tile.misc.TileCellWorkbench;
10+
import com.glodblock.github.common.item.fake.FakeFluids;
11+
import com.glodblock.github.common.item.fake.FakeItemRegister;
12+
import com.glodblock.github.integration.mek.FakeGases;
13+
import com.glodblock.github.util.ModAndClassUtil;
14+
import com.glodblock.github.util.Util;
15+
import mekanism.api.gas.GasStack;
16+
import mekanism.api.gas.IGasItem;
17+
import net.minecraft.entity.player.EntityPlayerMP;
18+
import net.minecraft.entity.player.InventoryPlayer;
19+
import net.minecraft.inventory.Slot;
20+
import net.minecraft.item.ItemStack;
21+
import net.minecraftforge.fluids.FluidStack;
22+
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
23+
import net.minecraftforge.items.ItemHandlerHelper;
24+
import org.spongepowered.asm.mixin.Final;
25+
import org.spongepowered.asm.mixin.Intrinsic;
26+
import org.spongepowered.asm.mixin.Mixin;
27+
import org.spongepowered.asm.mixin.Shadow;
28+
29+
@Mixin(value = ContainerCellWorkbench.class, remap = false)
30+
public abstract class MixinContainerCellWorkbench extends ContainerUpgradeable {
31+
32+
@Shadow
33+
@Final
34+
private TileCellWorkbench workBench;
35+
36+
public MixinContainerCellWorkbench(final InventoryPlayer ip, final IUpgradeableHost te) {
37+
super(ip, te);
38+
}
39+
40+
@Intrinsic
41+
public void doAction(final EntityPlayerMP player, final InventoryAction action, final int slotId, final long id) {
42+
if (this.workBench.getCell() instanceof ItemViewCell) {
43+
final Slot slot = getSlot(slotId);
44+
final ItemStack stack = player.inventory.getItemStack();
45+
if (slot instanceof SlotFake && !stack.isEmpty()
46+
&& stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null) && Util.getFluidFromItem(stack) != null) {
47+
FluidStack fluid = null;
48+
switch (action) {
49+
case PICKUP_OR_SET_DOWN:
50+
fluid = Util.getFluidFromItem(stack);
51+
slot.putStack(FakeFluids.packFluid2Drops(fluid));
52+
break;
53+
case SPLIT_OR_PLACE_SINGLE:
54+
fluid = Util.getFluidFromItem(ItemHandlerHelper.copyStackWithSize(stack, 1));
55+
final FluidStack origin = FakeItemRegister.getStack(slot.getStack());
56+
if (fluid != null && fluid.equals(origin)) {
57+
fluid.amount += origin.amount;
58+
if (fluid.amount <= 0) fluid = null;
59+
}
60+
slot.putStack(FakeFluids.packFluid2Drops(fluid));
61+
break;
62+
}
63+
if (fluid == null) {
64+
super.doAction(player, action, slotId, id);
65+
return;
66+
}
67+
return;
68+
}
69+
if (ModAndClassUtil.GAS && slot instanceof SlotFake && !stack.isEmpty()
70+
&& stack.getItem() instanceof IGasItem && Util.getGasFromItem(stack) != null) {
71+
GasStack gas = null;
72+
switch (action) {
73+
case PICKUP_OR_SET_DOWN:
74+
gas = Util.getGasFromItem(stack);
75+
slot.putStack(FakeGases.packGas2Drops(gas));
76+
break;
77+
case SPLIT_OR_PLACE_SINGLE:
78+
gas = Util.getGasFromItem(ItemHandlerHelper.copyStackWithSize(stack, 1));
79+
final GasStack origin = FakeItemRegister.getStack(slot.getStack());
80+
if (gas != null && gas.equals(origin)) {
81+
gas.amount += origin.amount;
82+
if (gas.amount <= 0) gas = null;
83+
}
84+
slot.putStack(FakeGases.packGas2Drops(gas));
85+
break;
86+
}
87+
if (gas == null) {
88+
super.doAction(player, action, slotId, id);
89+
return;
90+
}
91+
return;
92+
}
93+
}
94+
super.doAction(player, action, slotId, id);
95+
}
96+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.glodblock.github.coremod.mixin.ae2.gui;
2+
3+
import appeng.api.implementations.IUpgradeableHost;
4+
import appeng.client.gui.implementations.GuiCellWorkbench;
5+
import appeng.client.gui.implementations.GuiUpgradeable;
6+
import appeng.container.implementations.ContainerCellWorkbench;
7+
import appeng.container.slot.SlotFake;
8+
import appeng.items.storage.ItemViewCell;
9+
import appeng.tile.misc.TileCellWorkbench;
10+
import appeng.util.item.AEItemStack;
11+
import com.glodblock.github.integration.jei.FluidPacketTarget;
12+
import com.glodblock.github.util.ModAndClassUtil;
13+
import com.glodblock.github.util.UtilClient;
14+
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
15+
import mezz.jei.api.gui.IGhostIngredientHandler;
16+
import net.minecraft.entity.player.InventoryPlayer;
17+
import net.minecraft.inventory.Slot;
18+
import org.spongepowered.asm.mixin.Final;
19+
import org.spongepowered.asm.mixin.Intrinsic;
20+
import org.spongepowered.asm.mixin.Mixin;
21+
import org.spongepowered.asm.mixin.Shadow;
22+
23+
import java.util.List;
24+
25+
@Mixin(value = GuiCellWorkbench.class, remap = false)
26+
public abstract class MixinGuiCellWorkbench extends GuiUpgradeable {
27+
28+
@Shadow
29+
@Final
30+
private ContainerCellWorkbench workbench;
31+
32+
public MixinGuiCellWorkbench(final InventoryPlayer inventoryPlayer, final IUpgradeableHost te) {
33+
super(inventoryPlayer, te);
34+
}
35+
36+
@Intrinsic
37+
protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
38+
if (((TileCellWorkbench) this.workbench.getTileEntity()).getCell() instanceof ItemViewCell) {
39+
final var slot = this.getSlotUnderMouse();
40+
if (slot instanceof final SlotFake s) {
41+
if (UtilClient.renderPatternSlotTip(this, mouseX, mouseY)) return;
42+
final var i = AEItemStack.fromItemStack(s.getStack());
43+
if (UtilClient.rendererFluid(this, i, mouseX, mouseY)) return;
44+
if (ModAndClassUtil.GAS && UtilClient.rendererGas(this, i, mouseX, mouseY)) return;
45+
}
46+
}
47+
super.renderHoveredToolTip(mouseX, mouseY);
48+
}
49+
50+
@Intrinsic
51+
public List<IGhostIngredientHandler.Target<?>> getPhantomTargets(final Object ingredient) {
52+
if (((TileCellWorkbench) this.workbench.getTileEntity()).getCell() instanceof ItemViewCell) {
53+
final List<IGhostIngredientHandler.Target<?>> targets = new ObjectArrayList<>();
54+
for (final Slot slot : this.inventorySlots.inventorySlots) {
55+
if (slot instanceof SlotFake) {
56+
final IGhostIngredientHandler.Target<?> target = new FluidPacketTarget(getGuiLeft(), getGuiTop(), slot);
57+
targets.add(target);
58+
mapTargetSlot.putIfAbsent(target, slot);
59+
}
60+
}
61+
return targets;
62+
} else return super.getPhantomTargets(ingredient);
63+
}
64+
}

src/main/java/com/glodblock/github/coremod/mixin/ae2/gui/MixinGuiMEMonitorable.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
4040
final var item = s.getAEStack();
4141
if (item != null) {
4242
if (item.getItem() == FCItems.FLUID_DROP) {
43-
if (UtilClient.rendererFluid(this, item, mouseX, mouseY, true)) return;
43+
if (UtilClient.rendererFluid(this, item, mouseX, mouseY)) return;
4444
}
4545
if (ModAndClassUtil.GAS && item.getItem() == FCGasItems.GAS_DROP) {
46-
if (UtilClient.rendererGas(this, item, mouseX, mouseY, true)) return;
46+
if (UtilClient.rendererGas(this, item, mouseX, mouseY)) return;
4747
}
4848
}
4949
} else if (UtilClient.renderContainerToolTip(this, mouseX, mouseY)) return;

src/main/java/com/glodblock/github/coremod/mixin/thaumicenergistics/MixinGuiArcaneTerminal.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
4545
final var aItem = s.getAEStack();
4646
if (aItem instanceof final IAEItemStack item) {
4747
if (item.getItem() == FCItems.FLUID_DROP) {
48-
if (UtilClient.rendererFluid(this, item, mouseX, mouseY, true)) return;
48+
if (UtilClient.rendererFluid(this, item, mouseX, mouseY)) return;
4949
}
5050
if (ModAndClassUtil.GAS && item.getItem() == FCGasItems.GAS_DROP) {
51-
if (UtilClient.rendererGas(this, item, mouseX, mouseY, true)) return;
51+
if (UtilClient.rendererGas(this, item, mouseX, mouseY)) return;
5252
}
5353
}
5454
} else if (UtilClient.renderContainerToolTip(this, mouseX, mouseY)) return;
@@ -58,7 +58,6 @@ protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
5858

5959
@Inject(method = "handleMouseClick", at = @At("HEAD"), cancellable = true)
6060
private void fc$handleMouseClick(final Slot slot, final int slotId, final int mouseButton, final ClickType type, final CallbackInfo ci) {
61-
final boolean success = false;
6261
if (slot instanceof final SlotME<?> s) {
6362
if (!UtilClient.getMouseItem().isEmpty()) {
6463
if (mouseButton == 0) {

src/main/java/com/glodblock/github/util/UtilClient.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import appeng.api.storage.data.IAEFluidStack;
44
import appeng.api.storage.data.IAEItemStack;
55
import appeng.api.storage.data.IAEStack;
6+
import appeng.client.gui.implementations.GuiMEMonitorable;
67
import appeng.client.me.SlotME;
78
import appeng.helpers.InventoryAction;
89
import appeng.util.Platform;
@@ -151,8 +152,9 @@ public static ItemStack getJEIMouseItem() {
151152
private static final MutablePair<IAEStack<?>, List<String>> cacheTooltip = new MutablePair<>();
152153
private static boolean cacheIsStorage = false;
153154

154-
public static boolean rendererFluid(final GuiContainer gui, final IAEItemStack item, final int mouseX, final int mouseY, final boolean isStorage) {
155+
public static boolean rendererFluid(final GuiContainer gui, final IAEItemStack item, final int mouseX, final int mouseY) {
155156
if (item == null) return false;
157+
final boolean isStorage = gui instanceof GuiMEMonitorable;
156158
if (item.getItem() == FCItems.FLUID_DROP) {
157159
if (cacheTooltip.left == null || !cacheTooltip.left.equals(item) || cacheTooltip.left.getStackSize() != item.getStackSize() || cacheIsStorage != isStorage) {
158160
final IAEFluidStack fluidStack = FakeItemRegister.getAEStack(item.copy().setStackSize(1));
@@ -182,8 +184,9 @@ public static boolean rendererFluid(final GuiContainer gui, final IAEItemStack i
182184
}
183185

184186
@Optional.Method(modid = "mekeng")
185-
public static boolean rendererGas(final GuiContainer gui, final IAEItemStack item, final int mouseX, final int mouseY, final boolean isStorage) {
187+
public static boolean rendererGas(final GuiContainer gui, final IAEItemStack item, final int mouseX, final int mouseY) {
186188
if (item == null) return false;
189+
final boolean isStorage = gui instanceof GuiMEMonitorable;
187190
if (item.getItem() == FCGasItems.GAS_DROP) {
188191
if (cacheTooltip.left == null || !cacheTooltip.left.equals(item) || cacheTooltip.left.getStackSize() != item.getStackSize() || cacheIsStorage != isStorage) {
189192
final IAEGasStack gs = FakeItemRegister.getAEStack(item.copy().setStackSize(1));

0 commit comments

Comments
 (0)