Skip to content

Commit e7fced1

Browse files
author
Circulate233
committed
完善 #42
修理了一些乱七八糟的东西
1 parent 64ac600 commit e7fced1

21 files changed

Lines changed: 142 additions & 49 deletions

src/main/java/com/circulation/random_complement/client/ClientProxy.java

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,46 +7,63 @@
77
import com.circulation.random_complement.client.handler.RCJEIInputHandler;
88
import com.circulation.random_complement.common.CommonProxy;
99
import com.circulation.random_complement.common.util.Functions;
10+
import com.circulation.random_complement.mixin.jei.AccessorGhostIngredientDragManager;
1011
import com.circulation.random_complement.mixin.jei.AccessorInputHandler;
1112
import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
1213
import it.unimi.dsi.fastutil.objects.ReferenceList;
1314
import lombok.val;
1415
import mezz.jei.Internal;
1516
import mezz.jei.bookmarks.BookmarkItem;
16-
import mezz.jei.input.IClickedIngredient;
17-
import mezz.jei.input.MouseHelper;
17+
import mezz.jei.gui.ghost.GhostIngredientDrag;
1818
import net.minecraft.client.Minecraft;
1919
import net.minecraft.item.ItemStack;
2020
import net.minecraftforge.common.MinecraftForge;
2121
import net.minecraftforge.fml.common.Loader;
22+
import net.minecraftforge.fml.common.Mod;
2223
import net.minecraftforge.fml.common.Optional;
24+
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
25+
import net.minecraftforge.fml.common.gameevent.TickEvent;
26+
import net.minecraftforge.fml.relauncher.Side;
27+
import org.jetbrains.annotations.NotNull;
2328

29+
@Mod.EventBusSubscriber(Side.CLIENT)
2430
public class ClientProxy extends CommonProxy {
2531
public static final String categoryJEI = "RandomComplement(JEI)";
2632
public static final String categoryAE2 = "RandomComplement(AE2)";
33+
@NotNull
34+
private static ItemStack mouseItemStack = ItemStack.EMPTY;
2735

28-
public static ItemStack getMouseItem() {
36+
@SubscribeEvent
37+
public static void onClientTick(TickEvent.ClientTickEvent event) {
2938
val player = Minecraft.getMinecraft().player;
30-
if (player == null) return ItemStack.EMPTY;
31-
val i = player.inventory.getItemStack();
32-
if (!i.isEmpty()) return i;
33-
34-
if (Loader.isModLoaded("jei")) return getJEIMouseItem();
39+
if (player == null) {
40+
mouseItemStack = ItemStack.EMPTY;
41+
return;
42+
}
43+
var inv = player.inventory.getItemStack();
44+
if (!inv.isEmpty()) {
45+
mouseItemStack = inv;
46+
return;
47+
}
48+
if (Loader.isModLoaded("jei")) mouseItemStack = getJEIMouseItem();
49+
else mouseItemStack = ItemStack.EMPTY;
50+
}
3551

36-
return ItemStack.EMPTY;
52+
public static ItemStack getMouseItem() {
53+
return mouseItemStack;
3754
}
3855

3956
@Optional.Method(modid = "jei")
4057
public static ItemStack getJEIMouseItem() {
41-
IClickedIngredient<?> ii = null;
58+
GhostIngredientDrag<?> ii = null;
4259
if (Internal.getInputHandler() != null) {
43-
ii = ((AccessorInputHandler) Internal.getInputHandler()).invokeGetIngredientUnderMouseForKey(MouseHelper.getX(), MouseHelper.getY());
60+
ii = ((AccessorGhostIngredientDragManager) ((AccessorInputHandler) Internal.getInputHandler()).getGhostIngredientDragManager()).getGhostIngredientDrag();
4461
}
4562
if (ii != null) {
46-
if (ii.getValue() instanceof ItemStack stack) {
63+
if (ii.getIngredient() instanceof ItemStack stack) {
4764
return stack;
4865
}
49-
if (ii.getValue() instanceof BookmarkItem<?> book && book.ingredient instanceof ItemStack stack) {
66+
if (ii.getIngredient() instanceof BookmarkItem<?> book && book.ingredient instanceof ItemStack stack) {
5067
return stack;
5168
}
5269
}

src/main/java/com/circulation/random_complement/client/RCAECraftablesGui.java renamed to src/main/java/com/circulation/random_complement/client/RCGuiMEMonitorable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.Collection;
66
import java.util.Set;
77

8-
public interface RCAECraftablesGui {
8+
public interface RCGuiMEMonitorable {
99

1010
Set<IAEItemStack> r$getCpuCache();
1111

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.circulation.random_complement.common.interfaces;
2+
3+
import mezz.jei.api.gui.IGhostIngredientHandler;
4+
import net.minecraftforge.fml.common.Optional;
5+
6+
public interface RCGuiMEMonitorableJei {
7+
8+
@Optional.Method(modid = "jei")
9+
IGhostIngredientHandler.Target<?> r$getMEGuiTextFieldTarget();
10+
11+
}

src/main/java/com/circulation/random_complement/common/network/RCPacketMEInventoryUpdate.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import appeng.core.sync.AppEngPacket;
66
import appeng.core.sync.network.INetworkInfo;
77
import appeng.util.item.AEItemStack;
8-
import com.circulation.random_complement.client.RCAECraftablesGui;
8+
import com.circulation.random_complement.client.RCGuiMEMonitorable;
99
import com.circulation.random_complement.common.util.MEHandler;
1010
import io.netty.buffer.ByteBuf;
1111
import io.netty.buffer.Unpooled;
@@ -143,7 +143,7 @@ public void clientPacketData(INetworkInfo network, AppEngPacket packet, EntityPl
143143
Minecraft.getMinecraft().addScheduledTask(() -> {
144144
switch (id) {
145145
case 1 -> {
146-
if (Minecraft.getMinecraft().currentScreen instanceof RCAECraftablesGui gui) {
146+
if (Minecraft.getMinecraft().currentScreen instanceof RCGuiMEMonitorable gui) {
147147
gui.r$addCpuCache(this.list);
148148
}
149149
}
@@ -159,7 +159,7 @@ public void clientPacketData(INetworkInfo network, AppEngPacket packet, EntityPl
159159
public void ae2fcClientPacketData() {
160160
switch (id) {
161161
case 3 -> {
162-
if (Minecraft.getMinecraft().currentScreen instanceof RCAECraftablesGui gui) {
162+
if (Minecraft.getMinecraft().currentScreen instanceof RCGuiMEMonitorable gui) {
163163
gui.r$addCraftablesCache(this.list);
164164
}
165165
}
@@ -171,7 +171,7 @@ public void tcClientPacketData() {
171171
if (this.list == null) return;
172172
switch (id) {
173173
case 4 -> {
174-
if (Minecraft.getMinecraft().currentScreen instanceof RCAECraftablesGui gui) {
174+
if (Minecraft.getMinecraft().currentScreen instanceof RCGuiMEMonitorable gui) {
175175
gui.r$addCpuCache(this.list);
176176
}
177177
}

src/main/java/com/circulation/random_complement/mixin/ae2/MixinDualityInterface.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import appeng.api.config.Upgrades;
66
import appeng.api.config.YesNo;
77
import appeng.api.networking.crafting.ICraftingPatternDetails;
8-
import appeng.api.networking.security.IActionSource;
9-
import appeng.api.storage.IMEInventory;
108
import appeng.api.storage.channels.IItemStorageChannel;
119
import appeng.api.storage.data.IAEItemStack;
1210
import appeng.helpers.DualityInterface;

src/main/java/com/circulation/random_complement/mixin/ae2/gui/MixinAEBaseGui.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import appeng.client.gui.AEBaseGui;
55
import appeng.client.me.SlotME;
66
import appeng.container.slot.SlotFake;
7-
import com.circulation.random_complement.client.RCAECraftablesGui;
7+
import com.circulation.random_complement.client.RCGuiMEMonitorable;
88
import com.circulation.random_complement.client.handler.RCInputHandler;
99
import com.circulation.random_complement.common.util.MEHandler;
1010
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
@@ -73,7 +73,7 @@ private void drawSlotME(Slot slot, CallbackInfo ci) {
7373
@Inject(method = "drawSlot", at = @At(value = "HEAD"))
7474
private void drawSlotFake(Slot slot, CallbackInfo ci) {
7575
if (slot.xPos < 0 || slot.yPos < 0) return;
76-
if (this instanceof RCAECraftablesGui) {
76+
if (this instanceof RCGuiMEMonitorable) {
7777
if (slot instanceof SlotFake slotFake) {
7878
if (!slotFake.shouldDisplay()) return;
7979
var item = slotFake.getDisplayStack();
@@ -96,7 +96,7 @@ public void drawPlusSlot(int mouseX, int mouseY, float partialTicks, CallbackInf
9696

9797
@Inject(method = "drawGuiContainerBackgroundLayer", at = @At(value = "INVOKE", target = "Lappeng/client/gui/AEBaseGui;drawBG(IIII)V", remap = false, shift = At.Shift.AFTER))
9898
private void drawPin(float f, int x, int y, CallbackInfo ci) {
99-
if (this instanceof RCAECraftablesGui monitorable) {
99+
if (this instanceof RCGuiMEMonitorable monitorable) {
100100
var items = monitorable.r$getCpuCache();
101101
if (!items.isEmpty()) {
102102
List<SlotME> slots = new ObjectArrayList<>();

src/main/java/com/circulation/random_complement/mixin/ae2/gui/MixinGuiMEMonitorable.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
import appeng.container.implementations.ContainerMEMonitorable;
1010
import appeng.container.implementations.ContainerPatternEncoder;
1111
import com.circulation.random_complement.RandomComplement;
12-
import com.circulation.random_complement.client.RCAECraftablesGui;
1312
import com.circulation.random_complement.client.RCGuiButton;
13+
import com.circulation.random_complement.client.RCGuiMEMonitorable;
1414
import com.circulation.random_complement.client.RCSettings;
1515
import com.circulation.random_complement.client.buttonsetting.PatternTermAutoFillPattern;
1616
import com.circulation.random_complement.common.interfaces.PatternTermConfigs;
@@ -36,7 +36,7 @@
3636
import java.util.Set;
3737

3838
@Mixin(value = GuiMEMonitorable.class)
39-
public abstract class MixinGuiMEMonitorable extends MixinAEBaseGui implements RCAECraftablesGui {
39+
public abstract class MixinGuiMEMonitorable extends MixinAEBaseGui implements RCGuiMEMonitorable {
4040

4141
@Unique
4242
protected final Set<IAEItemStack> randomComplement$cpuCache = new ObjectOpenHashSet<>();
@@ -54,8 +54,6 @@ public abstract class MixinGuiMEMonitorable extends MixinAEBaseGui implements RC
5454
private MEGuiTextField searchField;
5555
@Unique
5656
private RCGuiButton randomComplement$AutoFillPattern;
57-
@Shadow(remap = false)
58-
protected abstract void setScrollBar();
5957

6058
public MixinGuiMEMonitorable(Container container) {
6159
super(container);
@@ -153,7 +151,6 @@ public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY, CallbackInf
153151
String name = mouseItem.getDisplayName();
154152
this.searchField.setText(name);
155153
this.repo.setSearchString(name);
156-
this.setScrollBar();
157154
}
158155
}
159156
}

src/main/java/com/circulation/random_complement/mixin/ae2/gui/MixinItemRepo.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import appeng.api.storage.data.IAEItemStack;
44
import appeng.client.me.ItemRepo;
55
import appeng.util.Platform;
6-
import com.circulation.random_complement.client.RCAECraftablesGui;
6+
import com.circulation.random_complement.client.RCGuiMEMonitorable;
77
import net.minecraft.client.Minecraft;
88
import org.spongepowered.asm.mixin.Mixin;
99
import org.spongepowered.asm.mixin.Unique;
@@ -35,7 +35,7 @@ public void updateView(List<IAEItemStack> instance, Comparator<IAEItemStack> com
3535

3636
@Unique
3737
private boolean randomComplement$isPriorityItem(IAEItemStack stack) {
38-
if (Platform.isClient() && Minecraft.getMinecraft().currentScreen instanceof RCAECraftablesGui g) {
38+
if (Platform.isClient() && Minecraft.getMinecraft().currentScreen instanceof RCGuiMEMonitorable g) {
3939
var list = g.r$getCpuCache();
4040
return list.contains(stack);
4141
}

src/main/java/com/circulation/random_complement/mixin/ae2/jei/MixinAEGuiHandler.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import appeng.client.gui.AEBaseGui;
44
import appeng.client.gui.AEGuiHandler;
5+
import com.circulation.random_complement.common.interfaces.RCGuiMEMonitorableJei;
56
import mezz.jei.api.gui.IGhostIngredientHandler;
67
import mezz.jei.bookmarks.BookmarkItem;
78
import net.minecraft.client.gui.GuiScreen;
@@ -28,8 +29,17 @@ public void getTargets(AEBaseGui gui, Object ingredient, boolean doStart, Callba
2829
}
2930
}
3031

32+
@Inject(method = "getTargets(Lappeng/client/gui/AEBaseGui;Ljava/lang/Object;Z)Ljava/util/List;", at = @At("RETURN"))
33+
public void addTextField(AEBaseGui gui, Object ingredient, boolean doStart, CallbackInfoReturnable<List<IGhostIngredientHandler.Target<?>>> cir) {
34+
if (gui instanceof RCGuiMEMonitorableJei guiMEMonitorable) {
35+
var i = guiMEMonitorable.r$getMEGuiTextFieldTarget();
36+
if (i == null) return;
37+
cir.getReturnValue().add(i);
38+
}
39+
}
40+
3141
@Redirect(method = "getTargets(Lappeng/client/gui/AEBaseGui;Ljava/lang/Object;Z)Ljava/util/List;", at = @At(value = "INVOKE", target = "Lorg/lwjgl/input/Mouse;isButtonDown(I)Z"))
3242
public boolean getTargets(int button) {
3343
return !Mouse.isButtonDown(0);
3444
}
35-
}
45+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.circulation.random_complement.mixin.ae2.jei;
2+
3+
import appeng.client.gui.implementations.GuiMEMonitorable;
4+
import appeng.client.gui.widgets.MEGuiTextField;
5+
import appeng.client.me.ItemRepo;
6+
import com.circulation.random_complement.common.interfaces.RCGuiMEMonitorableJei;
7+
import mezz.jei.api.gui.IGhostIngredientHandler;
8+
import net.minecraft.item.ItemStack;
9+
import org.jetbrains.annotations.NotNull;
10+
import org.spongepowered.asm.mixin.Final;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.Shadow;
13+
14+
import java.awt.Rectangle;
15+
16+
@Mixin(value = GuiMEMonitorable.class)
17+
public abstract class MixinGuiMEMonitorable implements RCGuiMEMonitorableJei {
18+
19+
@Shadow(remap = false)
20+
@Final
21+
protected ItemRepo repo;
22+
@Shadow(remap = false)
23+
private MEGuiTextField searchField;
24+
25+
@Override
26+
public IGhostIngredientHandler.Target<?> r$getMEGuiTextFieldTarget() {
27+
if (searchField == null) return null;
28+
return new IGhostIngredientHandler.Target<>() {
29+
@Override
30+
public @NotNull Rectangle getArea() {
31+
return new Rectangle(searchField.x, searchField.y, searchField.width, searchField.height);
32+
}
33+
34+
@Override
35+
public void accept(@NotNull Object o) {
36+
if (o instanceof ItemStack mouseItem) {
37+
if (!mouseItem.isEmpty()) {
38+
String name = mouseItem.getDisplayName();
39+
searchField.setText(name);
40+
repo.setSearchString(name);
41+
}
42+
}
43+
}
44+
};
45+
}
46+
}

0 commit comments

Comments
 (0)