Skip to content

Commit 2f3820a

Browse files
committed
修复bug
1 parent 4fd6d73 commit 2f3820a

14 files changed

+105
-21
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ show_testing_output = false
1616

1717
# Mod Information
1818
# HIGHLY RECOMMEND complying with SemVer for mod_version: https://semver.org/
19-
mod_version = 1.7.5
19+
mod_version = 1.7.6
2020
root_package = com.circulation
2121
mod_id = random_complement
2222
mod_name = RandomComplement

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,16 @@ public class RCGuiScrollbar extends GuiScrollbar {
1313

1414
@Getter
1515
private final Rectangle rectangle = new Rectangle(getLeft(), getTop(), getWidth(), getHeight());
16-
@Setter
1716
@Getter
1817
private boolean visible = true;
1918

19+
public void setVisible(boolean visible) {
20+
if (this.visible != visible) {
21+
this.visible = visible;
22+
rcScrollbarGui.onCurrentScrollChance(getCurrentScroll());
23+
}
24+
}
25+
2026
@Setter
2127
private RCScrollbarGui rcScrollbarGui;
2228

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,4 @@
33
public interface RCScrollbarGui {
44

55
void onCurrentScrollChance(int currentScroll);
6-
76
}

src/main/java/com/circulation/random_complement/client/handler/RCJEIInputHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class RCJEIInputHandler {
2828
private static Runnable shiftClickCache;
2929
@Getter
3030
private static XYPair xy;
31+
3132
private RCJEIInputHandler() {
3233

3334
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package com.circulation.random_complement.common.interfaces;
22

3+
import appeng.client.gui.widgets.GuiScrollbar;
4+
35
public interface RCPatternEncoder {
46

57
void setRCSlot(int i);
68

9+
void setRCSlot();
10+
711
boolean isRCPatternEncoder();
12+
13+
void setScrollbar(GuiScrollbar scrollbar);
814
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ private void drawSlotME(Slot slot, CallbackInfo ci) {
8686

8787
@Inject(method = "drawSlot", at = @At(value = "HEAD"))
8888
private void drawSlotFake(Slot slot, CallbackInfo ci) {
89+
if (slot.xPos < 0 || slot.yPos < 0) return;
8990
if (Minecraft.getMinecraft().currentScreen instanceof SpecialLogic patternTerm) {
9091
if (patternTerm.r$notMonitorable()) return;
9192
if (slot instanceof SlotFake slotFake) {

src/main/java/com/circulation/random_complement/mixin/ae2/new_patten_gui/MixinContainerPatternEncoder.java

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.circulation.random_complement.mixin.ae2.new_patten_gui;
22

33
import appeng.api.storage.ITerminalHost;
4+
import appeng.client.gui.widgets.GuiScrollbar;
45
import appeng.container.implementations.ContainerMEMonitorable;
56
import appeng.container.implementations.ContainerPatternEncoder;
67
import appeng.container.slot.IOptionalSlotHost;
@@ -14,6 +15,10 @@
1415
import org.spongepowered.asm.mixin.Mixin;
1516
import org.spongepowered.asm.mixin.Shadow;
1617
import org.spongepowered.asm.mixin.Unique;
18+
import org.spongepowered.asm.mixin.injection.At;
19+
import org.spongepowered.asm.mixin.injection.Inject;
20+
import org.spongepowered.asm.mixin.injection.Redirect;
21+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1722

1823
@Mixin(ContainerPatternEncoder.class)
1924
public abstract class MixinContainerPatternEncoder extends ContainerMEMonitorable implements RCPatternEncoder, IOptionalSlotHost {
@@ -33,20 +38,33 @@ public abstract class MixinContainerPatternEncoder extends ContainerMEMonitorabl
3338
@Unique
3439
protected OptionalSlotFake[][] r$outputSlotGroup;
3540

41+
@Unique
42+
protected GuiScrollbar r$guiScrollbar;
43+
3644
public MixinContainerPatternEncoder(InventoryPlayer ip, ITerminalHost monitorable) {
3745
super(ip, monitorable);
3846
}
3947

48+
@Intrinsic
49+
public void setScrollbar(GuiScrollbar scrollbar) {
50+
if (!isRCPatternEncoder()) return;
51+
r$guiScrollbar = scrollbar;
52+
setRCSlot();
53+
}
54+
4055
@Intrinsic
4156
public void setRCSlot(int i) {
4257
if (!isRCPatternEncoder()) return;
43-
for (int j = 0; j < 9; j++) {
58+
if (this.isCraftingMode()) i = 0;
59+
for (int j = 0; j < 9; ++j) {
4460
if (j == i) {
4561
for (int y = 0; y < 3; ++y) {
4662
for (int x = 0; x < 3; ++x) {
47-
r$craftingSlotGroup[j][x + y * 3].xPos = 18 + x * 18;
63+
var input = r$craftingSlotGroup[j][x + y * 3];
64+
input.xPos = input.getX();
4865
}
49-
r$outputSlotGroup[j][y].xPos = 110;
66+
var output = r$outputSlotGroup[j][y];
67+
output.xPos = this.isCraftingMode() ? -9000 : output.getX();
5068
}
5169
} else {
5270
for (var slot : r$craftingSlotGroup[j]) {
@@ -59,11 +77,41 @@ public void setRCSlot(int i) {
5977
}
6078
}
6179

80+
@Intrinsic
81+
public void setRCSlot() {
82+
if (!isRCPatternEncoder()) return;
83+
if (r$guiScrollbar == null) return;
84+
setRCSlot(r$guiScrollbar.getCurrentScroll());
85+
}
86+
87+
@Inject(method = "updateOrderOfOutputSlots", at = @At("HEAD"), remap = false)
88+
protected void updateOrderOfOutputSlots(CallbackInfo ci) {
89+
if (!isRCPatternEncoder()) return;
90+
if (this.isCraftingMode()) {
91+
setRCSlot(0);
92+
} else {
93+
setRCSlot();
94+
}
95+
}
96+
97+
@Redirect(method = "getInputs", at = @At(value = "FIELD", args = "array=length", target = "Lappeng/container/implementations/ContainerPatternEncoder;craftingSlots:[Lappeng/container/slot/SlotFakeCraftingMatrix;"), remap = false)
98+
protected int getInputs(SlotFakeCraftingMatrix[] array) {
99+
var o = array.length;
100+
if (!isRCPatternEncoder()) return o;
101+
if (this.isCraftingMode()) {
102+
return Math.min(9, o);
103+
}
104+
return o;
105+
}
106+
62107
@Shadow(remap = false)
63108
public abstract AbstractPartEncoder getPart();
64109

110+
@Shadow(remap = false)
111+
public abstract boolean isCraftingMode();
112+
65113
@Intrinsic
66114
public final boolean isRCPatternEncoder() {
67-
return this.craftingSlots.length == 81;
115+
return r$craftingSlotGroup != null;
68116
}
69117
}

src/main/java/com/circulation/random_complement/mixin/ae2/new_patten_gui/MixinContainerWirelessPatternTerminal.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,49 @@
1515
import org.spongepowered.asm.mixin.Mixin;
1616
import org.spongepowered.asm.mixin.Shadow;
1717
import org.spongepowered.asm.mixin.injection.At;
18+
import org.spongepowered.asm.mixin.injection.Redirect;
1819

19-
@Mixin(value = ContainerWirelessPatternTerminal.class, remap = false)
20+
@Mixin(ContainerWirelessPatternTerminal.class)
2021
public abstract class MixinContainerWirelessPatternTerminal extends MixinContainerPatternEncoder {
2122

22-
@Shadow
23+
@Shadow(remap = false)
2324
protected AppEngInternalInventory output;
2425

2526
public MixinContainerWirelessPatternTerminal(InventoryPlayer ip, ITerminalHost monitorable) {
2627
super(ip, monitorable);
2728
}
2829

29-
@WrapOperation(method = "<init>", at = @At(value = "NEW", target = "(Lappeng/util/inv/IAEAppEngInventory;I)Lappeng/tile/inventory/AppEngInternalInventory;", ordinal = 0))
30-
public AppEngInternalInventory newCrafting(IAEAppEngInventory inventory, int size, Operation<AppEngInternalInventory> original) {
31-
return original.call(inventory, 81);
30+
@Redirect(method = "<init>", at = @At(value = "NEW", target = "(Lappeng/util/inv/IAEAppEngInventory;I)Lappeng/tile/inventory/AppEngInternalInventory;", ordinal = 0, remap = false))
31+
public AppEngInternalInventory newCrafting(IAEAppEngInventory inventory, int size) {
32+
return new AppEngInternalInventory(inventory, 81) {
33+
@Override
34+
public void setSize(int size) {
35+
if (size < getSlots()) return;
36+
super.setSize(size);
37+
}
38+
};
3239
}
3340

34-
@WrapOperation(method = "<init>", at = @At(value = "NEW", target = "(Lappeng/util/inv/IAEAppEngInventory;I)Lappeng/tile/inventory/AppEngInternalInventory;", ordinal = 1))
35-
public AppEngInternalInventory newOutput(IAEAppEngInventory inventory, int size, Operation<AppEngInternalInventory> original) {
36-
return original.call(inventory, 27);
41+
@Redirect(method = "<init>", at = @At(value = "NEW", target = "(Lappeng/util/inv/IAEAppEngInventory;I)Lappeng/tile/inventory/AppEngInternalInventory;", ordinal = 1, remap = false))
42+
public AppEngInternalInventory newOutput(IAEAppEngInventory inventory, int size) {
43+
return new AppEngInternalInventory(inventory, 27) {
44+
@Override
45+
public void setSize(int size) {
46+
if (size < getSlots()) return;
47+
super.setSize(size);
48+
}
49+
};
3750
}
3851

39-
@WrapOperation(method = "<init>", at = @At(value = "INVOKE", target = "Lappeng/container/implementations/ContainerWirelessPatternTerminal;addSlotToContainer(Lnet/minecraft/inventory/Slot;)Lnet/minecraft/inventory/Slot;", remap = true))
52+
@WrapOperation(method = "<init>", at = @At(value = "INVOKE", target = "Lappeng/container/implementations/ContainerWirelessPatternTerminal;addSlotToContainer(Lnet/minecraft/inventory/Slot;)Lnet/minecraft/inventory/Slot;"))
4053
public Slot redirectAddSlot(ContainerWirelessPatternTerminal instance, Slot slot, Operation<Slot> original) {
4154
if (slot instanceof SlotFakeCraftingMatrix || slot instanceof SlotPatternOutputs) {
4255
return null;
4356
}
4457
return original.call(instance, slot);
4558
}
4659

47-
@WrapOperation(method = "<init>", at = @At(value = "INVOKE", target = "Lappeng/container/slot/SlotRestrictedInput;setStackLimit(I)Lnet/minecraft/inventory/Slot;"))
60+
@WrapOperation(method = "<init>", at = @At(value = "INVOKE", target = "Lappeng/container/slot/SlotRestrictedInput;setStackLimit(I)Lnet/minecraft/inventory/Slot;", remap = false))
4861
public Slot onInit(SlotRestrictedInput instance, int size, Operation<Slot> original) {
4962
this.craftingSlots = new SlotFakeCraftingMatrix[81];
5063
this.outputSlots = new OptionalSlotFake[27];

src/main/java/com/circulation/random_complement/mixin/ae2/new_patten_gui/MixinGuiMEMonitorableTwo.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
public abstract class MixinGuiMEMonitorableTwo extends AEBaseGui implements ISortSource {
2727

2828
@Unique
29+
@NotNull
2930
private final List<RCGuiScrollbar> r$guiScrollbars = new ObjectArrayList<>();
3031
@Mutable
3132
@Shadow(remap = false)

src/main/java/com/circulation/random_complement/mixin/ae2/new_patten_gui/MixinGuiPatternTerm.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public MixinGuiPatternTerm(Container container) {
4646

4747
@Intrinsic
4848
public void onCurrentScrollChance(int currentScroll) {
49-
((RCPatternEncoder) container).setRCSlot(currentScroll);
49+
((RCPatternEncoder) container).setRCSlot();
5050
}
5151

5252
@Inject(method = "initGui", at = @At("TAIL"))
@@ -59,13 +59,13 @@ public void onInitGui(CallbackInfo ci) {
5959
}
6060
r$scrollbar.setWidthEx(175);
6161
r$scrollbar.setTop(r$slotTop).setLeft(r$slotLeft - 14).setHeight(3 * 18 - 2).setWidth(12);
62-
r$scrollbar.setRange(0, 9, 1);
62+
r$scrollbar.setRange(0, 8, 1);
6363
r$scrollbar.setRcScrollbarGui(this);
6464
r$scrollbar.setDrawBG(() -> {
6565
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
6666
this.drawTexturedModalRect(r$slotLeft - 13 + guiLeft - 2, r$slotTop + guiTop - 1, 174, 17, 14, 3 * 18);
6767
});
68-
((RCPatternEncoder) container).setRCSlot(r$scrollbar.getCurrentScroll());
68+
((RCPatternEncoder) container).setScrollbar(r$scrollbar);
6969
}
7070

7171
@Override

0 commit comments

Comments
 (0)