Skip to content

Commit 7f52a44

Browse files
committed
Add option to simulate encode button click
Update version to 1.0.2
1 parent 8190c26 commit 7f52a44

6 files changed

Lines changed: 46 additions & 2 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ parchment_mappings_version=2025.12.20
2626
mod_id=emi_patternizer
2727
mod_name=EMI Patternizer
2828
mod_license=GNU LGPL 3.0
29-
mod_version=1.0.1
29+
mod_version=1.0.2
3030
mod_group_id=io.github.linkfgfgui
3131
mod_authors=link-fgfgui
3232
mod_description=Automatically Encoding Patterns from the EMI Recipe Tree.

src/main/java/io/github/linkfgfgui/emi_patternizer/Config.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class Config {
99
public static final ModConfigSpec.LongValue DELAY_ADDITIONAL_PER_PATTERN = BUILDER.comment("Additional delay after 3 clicks").translation("emi_patternizer.config.delay2").defineInRange("delayAdditionalPerPattern", 20, 0, Long.MAX_VALUE);
1010
public static final ModConfigSpec.LongValue DELAY_BEFORE_READ = BUILDER.comment("Delay before read patterns from terminal (Unit: Millisecond)").translation("emi_patternizer.config.delay3").defineInRange("delayBeforeRead", 1000, 0, Long.MAX_VALUE);
1111
public static final ModConfigSpec.BooleanValue IS_PLAY_SOUND = BUILDER.comment("Play a sound after recipe fill").translation("emi_patternizer.config.playsound").define("isPlaySound", true);
12+
public static final ModConfigSpec.BooleanValue IS_SIMULATE_CLICK = BUILDER.comment("Whether to simulate a encode button click").translation("emi_patternizer.config.simulate").define("isSimulateClick", false);
1213

1314
static final ModConfigSpec SPEC = BUILDER.build();
1415
}

src/main/java/io/github/linkfgfgui/emi_patternizer/Patternize.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.linkfgfgui.emi_patternizer;
22

3+
import appeng.client.gui.WidgetContainer;
34
import appeng.client.gui.me.items.PatternEncodingTermScreen;
45
import appeng.menu.SlotSemantics;
56
import appeng.menu.me.items.PatternEncodingTermMenu;
@@ -12,7 +13,11 @@
1213
import dev.emi.emi.bom.MaterialNode;
1314
import dev.emi.emi.registry.EmiRecipeFiller;
1415
import io.github.linkfgfgui.emi_patternizer.mixin.AEBaseMenuAccessor;
16+
import io.github.linkfgfgui.emi_patternizer.mixin.AEBaseScreenAccessor;
17+
import io.github.linkfgfgui.emi_patternizer.mixin.WidgetContainerAccessor;
1518
import net.minecraft.client.Minecraft;
19+
import net.minecraft.client.gui.components.AbstractWidget;
20+
import net.minecraft.client.gui.components.Button;
1621
import net.minecraft.client.multiplayer.MultiPlayerGameMode;
1722
import net.minecraft.client.player.LocalPlayer;
1823
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
@@ -37,6 +42,7 @@ public class Patternize {
3742
static long delayPerOperation;
3843
static long delayAdditionalPerPattern;
3944
static boolean isPlaySound;
45+
static boolean isSimulateClick;
4046

4147
public static boolean containsAllItems(EmiRecipe r) {
4248
return containsAllItems(r.getOutputs());
@@ -56,7 +62,15 @@ public static void Encode(long initDelay, Minecraft minecraft, EmiRecipe recipe,
5662
});
5763
CompletableFuture.delayedExecutor(delayPerOperation, TimeUnit.MILLISECONDS).execute(() -> {
5864
minecraft.execute(() -> {
59-
menu.encode();
65+
if (isSimulateClick) {
66+
WidgetContainer widgets = ((AEBaseScreenAccessor) screen).getWidgets();
67+
AbstractWidget widget = ((WidgetContainerAccessor) widgets).getWidgets().get("encodePattern");
68+
if (widget instanceof Button but) {
69+
but.onPress();
70+
}
71+
} else {
72+
menu.encode();
73+
}
6074
});
6175
CompletableFuture.delayedExecutor(delayPerOperation, TimeUnit.MILLISECONDS).execute(() ->
6276
minecraft.execute(() ->
@@ -85,6 +99,7 @@ public static void LoadConfig() {
8599
delayPerOperation = Config.DELAY_PER_OPERATION.get();
86100
delayAdditionalPerPattern = Config.DELAY_ADDITIONAL_PER_PATTERN.get();
87101
isPlaySound = Config.IS_PLAY_SOUND.get();
102+
isSimulateClick = Config.IS_SIMULATE_CLICK.get();
88103
}
89104

90105
public static void onKeyPressed(ScreenEvent.KeyPressed.Post event) {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.github.linkfgfgui.emi_patternizer.mixin;
2+
3+
import appeng.client.gui.AEBaseScreen;
4+
import appeng.client.gui.WidgetContainer;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.gen.Accessor;
7+
8+
@Mixin(AEBaseScreen.class)
9+
public interface AEBaseScreenAccessor {
10+
@Accessor("widgets")
11+
WidgetContainer getWidgets();
12+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.github.linkfgfgui.emi_patternizer.mixin;
2+
3+
import appeng.client.gui.WidgetContainer;
4+
import net.minecraft.client.gui.components.AbstractWidget;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.gen.Accessor;
7+
8+
import java.util.Map;
9+
10+
@Mixin(WidgetContainer.class)
11+
public interface WidgetContainerAccessor {
12+
@Accessor("widgets")
13+
Map<String, AbstractWidget> getWidgets();
14+
}

src/main/resources/emi_patternizer.mixins.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
"client": [
99
"AbstractContainerScreenMixin",
1010
"AEBaseMenuAccessor",
11+
"AEBaseScreenAccessor",
12+
"WidgetContainerAccessor",
1113
"PatternAccessTermScreenAccessor"
1214
],
1315
"injectors": {

0 commit comments

Comments
 (0)