1
+ package com .jelly .farmhelperv2 .feature .impl ;
2
+
3
+ import cc .polyfrost .oneconfig .utils .Multithreading ;
4
+ import com .jelly .farmhelperv2 .config .FarmHelperConfig ;
5
+ import com .jelly .farmhelperv2 .handler .MacroHandler ;
6
+ import com .jelly .farmhelperv2 .util .InventoryUtils ;
7
+ import com .jelly .farmhelperv2 .util .LogUtils ;
8
+ import com .jelly .farmhelperv2 .util .PlayerUtils ;
9
+ import com .jelly .farmhelperv2 .util .helper .Clock ;
10
+ import com .jelly .farmhelperv2 .util .helper .SignUtils ;
11
+ import net .minecraft .client .Minecraft ;
12
+ import net .minecraftforge .common .MinecraftForge ;
13
+ import net .minecraftforge .event .world .WorldEvent ;
14
+ import net .minecraftforge .fml .common .eventhandler .SubscribeEvent ;
15
+ import net .minecraftforge .fml .common .gameevent .TickEvent ;
16
+ import java .util .concurrent .TimeUnit ;
17
+
18
+
19
+ public final class RancherSpeedSetter {
20
+ /** @return true if need to change speed (async started), false otherwise */
21
+ public static boolean runIfNeeded (Runnable after ) {
22
+ if (!FarmHelperConfig .customFarmingSpeed ) return false ;
23
+
24
+ int current = InventoryUtils .getRancherBootSpeed ();
25
+ if (current == -1 ) return false ;
26
+ if (current == FarmHelperConfig .farmingSpeed ) return false ;
27
+
28
+ INSTANCE .start (after );
29
+ return true ;
30
+ }
31
+
32
+ private enum Stage { NONE , START , INPUT , CONFIRM , END }
33
+
34
+ private static final RancherSpeedSetter INSTANCE = new RancherSpeedSetter ();
35
+
36
+ private final Minecraft mc = Minecraft .getMinecraft ();
37
+ private final Clock clock = new Clock ();
38
+ private Stage stage = Stage .NONE ;
39
+ private Runnable callback ;
40
+ private boolean enabled ;
41
+ private boolean worldChanging ;
42
+
43
+ private RancherSpeedSetter () {}
44
+
45
+ private void start (Runnable after ) {
46
+ if (enabled ) return ;
47
+ this .callback = after ;
48
+ this .stage = Stage .START ;
49
+ this .enabled = true ;
50
+ this .worldChanging = false ;
51
+ clock .reset ();
52
+ MinecraftForge .EVENT_BUS .register (this );
53
+ LogUtils .sendDebug ("[Rancher Speed Setter]: starting (target " + FarmHelperConfig .farmingSpeed + ")" );
54
+ }
55
+
56
+ @ SubscribeEvent
57
+ public void onWorldUnload (WorldEvent .Unload e ) { worldChanging = true ; }
58
+
59
+ @ SubscribeEvent
60
+ public void onTick (TickEvent .ClientTickEvent e ) {
61
+ if (!enabled || e .phase == TickEvent .Phase .END ) return ;
62
+ if (mc .thePlayer == null || mc .theWorld == null || worldChanging ) { finish (); return ; }
63
+ if (clock .isScheduled () && !clock .passed ()) return ;
64
+
65
+ switch (stage ) {
66
+ case START : {
67
+ mc .thePlayer .sendChatMessage ("/setmaxspeed" );
68
+ stage = Stage .INPUT ;
69
+ clock .schedule (750 );
70
+ break ;
71
+ }
72
+ case INPUT : {
73
+ if (mc .currentScreen == null ) break ;
74
+ SignUtils .setTextToWriteOnString (String .valueOf (FarmHelperConfig .farmingSpeed ));
75
+ stage = Stage .CONFIRM ;
76
+ clock .schedule (750 );
77
+ break ;
78
+ }
79
+ case CONFIRM : {
80
+ if (mc .currentScreen == null ) break ;
81
+ SignUtils .confirmSign ();
82
+ stage = Stage .END ;
83
+ clock .schedule (750 );
84
+ break ;
85
+ }
86
+ case END : {
87
+ LogUtils .sendSuccess ("Rancher's Boots Speed set to " + FarmHelperConfig .farmingSpeed + "." );
88
+ PlayerUtils .getFarmingTool (MacroHandler .getInstance ().getCrop (), false , false );
89
+ finish ();
90
+ break ;
91
+ }
92
+ default : break ;
93
+ }
94
+ }
95
+
96
+ private void finish () {
97
+ enabled = false ;
98
+ stage = Stage .NONE ;
99
+ clock .reset ();
100
+ MinecraftForge .EVENT_BUS .unregister (this );
101
+ if (callback != null ) {
102
+ Runnable run = callback ;
103
+ callback = null ;
104
+ Multithreading .schedule (run , 1 , TimeUnit .MILLISECONDS );
105
+ }
106
+ }
107
+ }
0 commit comments