Skip to content

Commit 43f58a1

Browse files
authored
Auto set Rancher's Boots speed on start, thanks Jookly!
2 parents 5895068 + d89196b commit 43f58a1

File tree

4 files changed

+137
-2
lines changed

4 files changed

+137
-2
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ baseGroup=com.jelly.farmhelperv2
44
mcVersion=1.8.9
55
modid=farmhelperv2
66
modName=FarmHelper
7-
version=2.9.3
7+
version=2.9.4-pre1
88
shouldRelease=true

src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,23 @@ public class FarmHelperConfig extends Config {
109109

110110
@Switch(
111111
name = "Always hold W while farming", category = GENERAL,
112-
description = "Always hold W while farming"
112+
description = "Always hold W while farming",
113+
size = OptionSize.DUAL
113114
)
114115
public static boolean alwaysHoldW = false;
115116

117+
@Switch(
118+
name = "Use Custom Farming Speed", category = GENERAL,
119+
description = "Enable auto ranchers boots speed changer when farming"
120+
)
121+
public static boolean customFarmingSpeed = false;
122+
@Number(
123+
name = "Custom Farming Speed", category = GENERAL,
124+
description = "Set a Custom Farming Speed for Ranchers Boots",
125+
min = 1, max = 400
126+
)
127+
public static int farmingSpeed = 400;
128+
116129
//<editor-fold desc="Rotation">
117130
@Switch(
118131
name = "Rotate After Warped", category = GENERAL, subcategory = "Rotation",
@@ -2269,6 +2282,8 @@ public FarmHelperConfig() {
22692282

22702283
this.addDependency("macroType", "Macro Type", () -> !MacroHandler.getInstance().isMacroToggled());
22712284

2285+
this.addDependency("farmingSpeed", "customFarmingSpeed");
2286+
22722287
this.addDependency("customPitchLevel", "customPitch");
22732288
this.addDependency("customYawLevel", "customYaw");
22742289

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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+
}

src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.jelly.farmhelperv2.util.LogUtils;
1616
import com.jelly.farmhelperv2.util.PlayerUtils;
1717
import com.jelly.farmhelperv2.util.RenderUtils;
18+
import com.jelly.farmhelperv2.util.InventoryUtils;
1819
import com.jelly.farmhelperv2.util.helper.AudioManager;
1920
import com.jelly.farmhelperv2.util.helper.Clock;
2021
import com.jelly.farmhelperv2.util.helper.Timer;
@@ -165,6 +166,18 @@ public void toggleMacro() {
165166
LogUtils.sendWarning("Farm manually and DO NOT restart the macro too soon! The staff might still be spectating you for a while!");
166167
return;
167168
}
169+
if (FarmHelperConfig.customFarmingSpeed) {
170+
if (InventoryUtils.getRancherBootSpeed() == -1) {
171+
LogUtils.sendError("You must have Rancher's Boots equipped for custom farming speed.");
172+
}
173+
else if (InventoryUtils.getRancherBootSpeed() != FarmHelperConfig.farmingSpeed) {
174+
if (RancherSpeedSetter.runIfNeeded(this::enableMacro)) {
175+
return;
176+
}
177+
} else {
178+
LogUtils.sendDebug("Rancher's Boot at custom farming speed.");
179+
}
180+
}
168181
this.enableMacro();
169182
}
170183
}

0 commit comments

Comments
 (0)