From 9c91e47a4599e68203a5ad2bb2faf3149484615a Mon Sep 17 00:00:00 2001 From: Oxdoric <175957833+Oxdoric@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:49:03 +0200 Subject: [PATCH 1/6] Added a really scummy sugar cane macro for melonkingde's farms --- gradle.properties | 2 +- .../farmhelperv2/config/FarmHelperConfig.java | 20 +-- .../farmhelperv2/handler/MacroHandler.java | 3 + .../impl/SShapeSugarcaneMelonkingdeMacro.java | 134 ++++++++++++++++++ .../jelly/farmhelperv2/util/PlayerUtils.java | 2 +- 5 files changed, 150 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java diff --git a/gradle.properties b/gradle.properties index 59ef25968..5c3d4641c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ mcVersion=1.8.9 modid=farmhelperv2 modName=FarmHelper version=2.8.7 -shouldRelease=true +shouldRelease=true \ No newline at end of file diff --git a/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java b/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java index 6e6c43a09..4cfe1e636 100644 --- a/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java +++ b/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java @@ -90,15 +90,16 @@ public class FarmHelperConfig extends Config { "S Shape - Pumpkin/Melon Melongkingde", // 2 "S Shape - Pumpkin/Melon Default Plot", // 3 "S Shape - Sugar Cane", // 4 - "S Shape - Cactus", // 5 - "S Shape - Cactus SunTzu Black Cat", // 6 - "S Shape - Cocoa Beans", // 7 - "S Shape - Cocoa Beans (With Trapdoors)", // 8 - "S Shape - Cocoa Beans (Left/Right)", // 9 - "S Shape - Mushroom (45°)", // 10 - "S Shape - Mushroom (30° with rotations)", // 11 - "S Shape - Mushroom SDS", // 12 - "Circle - Crops (Wheat, Carrot, Potato, NW)" // 13 + "S Shape - Sugar Cane Melonkingde", // 5 + "S Shape - Cactus", // 6 + "S Shape - Cactus SunTzu Black Cat", // 7 + "S Shape - Cocoa Beans", // 8 + "S Shape - Cocoa Beans (With Trapdoors)", // 9 + "S Shape - Cocoa Beans (Left/Right)", // 10 + "S Shape - Mushroom (45°)", // 11 + "S Shape - Mushroom (30° with rotations)", // 12 + "S Shape - Mushroom SDS", // 13 + "Circle - Crops (Wheat, Carrot, Potato, NW)" // 14 }, size = 2 ) public static int macroType = 0; @@ -2402,6 +2403,7 @@ public enum MacroEnum { S_PUMPKIN_MELON_MELONGKINGDE, S_PUMPKIN_MELON_DEFAULT_PLOT, S_SUGAR_CANE, + S_SUGAR_CANE_MELONKINGDE, S_CACTUS, S_CACTUS_SUNTZU, S_COCOA_BEANS, diff --git a/src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java b/src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java index 7f3179b3a..6cc4f123e 100644 --- a/src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java +++ b/src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java @@ -97,6 +97,8 @@ public T getMacro() { return Macros.S_SHAPE_MELON_PUMPKIN_DEFAULT_MACRO.getMacro(); case S_SUGAR_CANE: return Macros.S_SHAPE_SUGARCANE_MACRO.getMacro(); + case S_SUGAR_CANE_MELONKINGDE: + return Macros.S_SHAPE_SUGARCANE_MELONKINGDE_MACRO.getMacro(); case S_COCOA_BEANS: case S_COCOA_BEANS_TRAPDOORS: return Macros.S_SHAPE_COCOA_BEAN_MACRO.getMacro(); @@ -535,6 +537,7 @@ public enum Macros { S_SHAPE_MUSHROOM_MACRO(SShapeMushroomMacro.class), S_SHAPE_COCOA_BEAN_MACRO(SShapeCocoaBeanMacro.class), S_SHAPE_SUGARCANE_MACRO(SShapeSugarcaneMacro.class), + S_SHAPE_SUGARCANE_MELONKINGDE_MACRO(SShapeSugarcaneMelonkingdeMacro.class), S_SHAPE_VERTICAL_CROP_MACRO(SShapeVerticalCropMacro.class), S_SHAPE_MELON_PUMPKIN_DEFAULT_MACRO(SShapeMelonPumpkinDefaultMacro.class), S_SHAPE_MUSHROOM_SDS(SShapeMushroomSDSMacro.class), diff --git a/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java b/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java new file mode 100644 index 000000000..9122eb65c --- /dev/null +++ b/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java @@ -0,0 +1,134 @@ +package com.jelly.farmhelperv2.macro.impl; + +import com.jelly.farmhelperv2.config.FarmHelperConfig; +import com.jelly.farmhelperv2.handler.MacroHandler; +import com.jelly.farmhelperv2.macro.AbstractMacro; +import com.jelly.farmhelperv2.util.AngleUtils; +import com.jelly.farmhelperv2.util.BlockUtils; +import com.jelly.farmhelperv2.util.KeyBindUtils; +import com.jelly.farmhelperv2.util.LogUtils; +import com.jelly.farmhelperv2.util.helper.Rotation; +import com.jelly.farmhelperv2.util.helper.RotationConfiguration; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDirt; +import net.minecraft.block.BlockTrapDoor; + +import java.util.Optional; + +public class SShapeSugarcaneMelonkingdeMacro extends AbstractMacro { + + public double rowStartX = 0; + public double rowStartZ = 0; + + @Override + public void updateState() { + if (currentState == null) + changeState(State.NONE); + switch (currentState) { + case W: { + if (hasWall(0, 1, getYaw() - 45f) && + hasWall(0, 1, getYaw() + 45f)) { + + changeState(State.A); + } + break; + } + case A: { + if (hasWall(0, 1, getYaw() - 45f) && + hasWall(0, -1, getYaw() + 45f)) { + + changeState(State.W); + } + break; + } + case NONE: { + changeState(calculateDirection()); + break; + } + default: { + LogUtils.sendDebug("This shouldn't happen, but it did..."); + changeState(State.NONE); + } + } + } + + @Override + public void invokeState() { + if (currentState == null) return; + switch (currentState) { + case NONE: + break; + case A: + KeyBindUtils.holdThese( + mc.gameSettings.keyBindLeft, + mc.gameSettings.keyBindAttack + ); + break; + case D: + KeyBindUtils.holdThese( + mc.gameSettings.keyBindRight, + mc.gameSettings.keyBindAttack + ); + break; + case S: + KeyBindUtils.holdThese( + mc.gameSettings.keyBindBack, + mc.gameSettings.keyBindAttack + ); + break; + case W: + KeyBindUtils.holdThese( + mc.gameSettings.keyBindForward, + mc.gameSettings.keyBindAttack + ); + break; + case DROPPING: + if (mc.thePlayer.onGround && Math.abs(getLayerY() - mc.thePlayer.getPosition().getY()) <= 1.5) { + LogUtils.sendDebug("Dropping done, but didn't drop high enough to rotate!"); + setLayerY(mc.thePlayer.getPosition().getY()); + changeState(State.NONE); + } + break; + } + } + + @Override + public void actionAfterTeleport() { + setLayerY(mc.thePlayer.getPosition().getY()); + rowStartX = mc.thePlayer.posX; + rowStartZ = mc.thePlayer.posZ; + } + + @Override + public void onEnable() { + super.onEnable(); + if (!isPitchSet()) { + setPitch((float) (Math.random() * 1) - 0.5f); // -0.5 to 0.5 + } + if (!isYawSet()) { + setYaw(AngleUtils.getClosestDiagonal()); + setClosest90Deg(Optional.of(AngleUtils.getClosest(getYaw()))); + } + rowStartX = mc.thePlayer.posX; + rowStartZ = mc.thePlayer.posZ; + if (MacroHandler.getInstance().isTeleporting()) return; + setRestoredState(false); + if (FarmHelperConfig.dontFixAfterWarping && Math.abs(getYaw() - AngleUtils.get360RotationYaw()) < 0.1) return; + getRotation().easeTo( + new RotationConfiguration( + new Rotation(getYaw(), getPitch()), + FarmHelperConfig.getRandomRotationTime(), null + ).easeOutBack(!MacroHandler.getInstance().isResume()) + ); + } + + @Override + public State calculateDirection() { + return State.W; + } + + boolean hasWall(int rightOffset, int frontOffset, float yaw) { + return mc.theWorld.getBlockState(BlockUtils.getRelativeBlockPos(rightOffset, 0, frontOffset, yaw)).getBlock() instanceof BlockTrapDoor || mc.theWorld.getBlockState(BlockUtils.getRelativeBlockPos(rightOffset, 0, frontOffset, yaw)).getBlock() instanceof BlockDirt; + } + +} diff --git a/src/main/java/com/jelly/farmhelperv2/util/PlayerUtils.java b/src/main/java/com/jelly/farmhelperv2/util/PlayerUtils.java index 01ec8fe5d..ed574b031 100644 --- a/src/main/java/com/jelly/farmhelperv2/util/PlayerUtils.java +++ b/src/main/java/com/jelly/farmhelperv2/util/PlayerUtils.java @@ -65,7 +65,7 @@ public static FarmHelperConfig.CropEnum getFarmingCrop() { if (MacroHandler.getInstance().getCurrentMacro().isPresent()) { yaw = MacroHandler.getInstance().getCurrentMacro().get().getClosest90Deg().orElse(AngleUtils.getClosest()); } else { - if (FarmHelperConfig.getMacro() == FarmHelperConfig.MacroEnum.S_MUSHROOM || FarmHelperConfig.getMacro() == FarmHelperConfig.MacroEnum.S_SUGAR_CANE) { + if (FarmHelperConfig.getMacro() == FarmHelperConfig.MacroEnum.S_MUSHROOM || FarmHelperConfig.getMacro() == FarmHelperConfig.MacroEnum.S_SUGAR_CANE || FarmHelperConfig.getMacro() == FarmHelperConfig.MacroEnum.S_SUGAR_CANE_MELONKINGDE) { yaw = AngleUtils.getClosestDiagonal(); } else { yaw = AngleUtils.getClosest(); From 5e813b15a87d959ff7bb6b14e5d97b8d7065491c Mon Sep 17 00:00:00 2001 From: Oxdoric <175957833+Oxdoric@users.noreply.github.com> Date: Sat, 20 Jul 2024 19:07:15 +0200 Subject: [PATCH 2/6] Added logic to know which direction to start with --- .../macro/impl/SShapeSugarcaneMelonkingdeMacro.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java b/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java index 9122eb65c..54cf1e874 100644 --- a/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java +++ b/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java @@ -11,7 +11,9 @@ import com.jelly.farmhelperv2.util.helper.RotationConfiguration; import net.minecraft.block.Block; import net.minecraft.block.BlockDirt; +import net.minecraft.block.BlockReed; import net.minecraft.block.BlockTrapDoor; +import net.minecraft.init.Blocks; import java.util.Optional; @@ -124,6 +126,9 @@ public void onEnable() { @Override public State calculateDirection() { + if (mc.theWorld.getBlockState(BlockUtils.getRelativeBlockPos(-1, 1, 0, getYaw() - 45f)).getBlock() instanceof BlockReed) { + return State.A; + } return State.W; } From bf70c95654d7bc668ed3b37d72b7e57871722fa9 Mon Sep 17 00:00:00 2001 From: Oxdoric <175957833+Oxdoric@users.noreply.github.com> Date: Sat, 20 Jul 2024 19:07:57 +0200 Subject: [PATCH 3/6] Fixed imports --- .../macro/impl/SShapeSugarcaneMelonkingdeMacro.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java b/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java index 54cf1e874..77cf64007 100644 --- a/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java +++ b/src/main/java/com/jelly/farmhelperv2/macro/impl/SShapeSugarcaneMelonkingdeMacro.java @@ -9,11 +9,9 @@ import com.jelly.farmhelperv2.util.LogUtils; import com.jelly.farmhelperv2.util.helper.Rotation; import com.jelly.farmhelperv2.util.helper.RotationConfiguration; -import net.minecraft.block.Block; import net.minecraft.block.BlockDirt; import net.minecraft.block.BlockReed; import net.minecraft.block.BlockTrapDoor; -import net.minecraft.init.Blocks; import java.util.Optional; From 993292967d3d99effbb94639cc6f4035df93f698 Mon Sep 17 00:00:00 2001 From: onixiya1337 <47077455+onixiya1337@users.noreply.github.com> Date: Fri, 19 Jul 2024 04:11:16 +0200 Subject: [PATCH 4/6] Late night update Visitors Macro: + Added ability to ignore/reject the visitor if the items don't fit in the inventory Lower Average BPS failsafe: + Added cooldown between triggers World Change failsafe: = Lowered delay between tries when warping back --- gradle.properties | 2 +- .../farmhelperv2/config/FarmHelperConfig.java | 7 +++++ .../failsafe/impl/LowerAvgBpsFailsafe.java | 11 ++++++- .../failsafe/impl/WorldChangeFailsafe.java | 7 +++-- .../farmhelperv2/feature/impl/BanInfoWS.java | 5 ++-- .../feature/impl/VisitorsMacro.java | 17 +++++++++-- .../handler/GameStateHandler.java | 7 ++++- .../farmhelperv2/util/InventoryUtils.java | 29 +++++++++++++++++++ 8 files changed, 73 insertions(+), 12 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5c3d4641c..59ef25968 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ mcVersion=1.8.9 modid=farmhelperv2 modName=FarmHelper version=2.8.7 -shouldRelease=true \ No newline at end of file +shouldRelease=true diff --git a/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java b/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java index 4cfe1e636..c6d30b40f 100644 --- a/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java +++ b/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java @@ -1048,6 +1048,13 @@ public class FarmHelperConfig extends Config { @Deprecated // Just here to keep the old settings for automatic migration public static boolean visitorsFilteringMethod = false; + @DualOption( + name = "Full Inventory Action", category = VISITORS_MACRO, subcategory = "Visitors Macro", + description = "The action to take when the items don't fit in your inventory", + left = "Reject", right = "Ignore" + ) + public static boolean fullInventoryAction = true; + // // diff --git a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java index d8cd2f23a..89723aa11 100644 --- a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java +++ b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java @@ -10,6 +10,7 @@ import com.jelly.farmhelperv2.handler.MacroHandler; import com.jelly.farmhelperv2.handler.RotationHandler; import com.jelly.farmhelperv2.util.KeyBindUtils; +import com.jelly.farmhelperv2.util.LogUtils; import com.jelly.farmhelperv2.util.helper.Clock; import com.jelly.farmhelperv2.util.helper.Rotation; import com.jelly.farmhelperv2.util.helper.RotationConfiguration; @@ -19,6 +20,7 @@ public class LowerAvgBpsFailsafe extends Failsafe { private static LowerAvgBpsFailsafe instance; private final Clock clock = new Clock(); + private long lastTriggered = 0L; public static LowerAvgBpsFailsafe getInstance() { if (instance == null) { @@ -79,7 +81,12 @@ public void onTickDetection(TickEvent.ClientTickEvent event) { clock.schedule(4500L + Math.random() * 1000L); // LogUtils.sendDebug("LowerAvgBpsFailsafe: BPS below threshold. Current: " + currentBPS + ", Threshold: " + FarmHelperConfig.minBpsThreshold); } else if (clock.passed()) { + if (System.currentTimeMillis() - lastTriggered < 20000L) { + resetStates(); + return; + } // LogUtils.sendDebug("LowerAvgBpsFailsafe: Failsafe triggered. Current BPS: " + currentBPS); + lastTriggered = System.currentTimeMillis(); FailsafeManager.getInstance().possibleDetection(this); } } @@ -107,7 +114,7 @@ public void duringFailsafeTrigger() { MacroHandler.getInstance().triggerWarpGarden(true, false); FailsafeManager.getInstance().scheduleRandomDelay(2500, 2000); } else if (GameStateHandler.getInstance().getLocation() == GameStateHandler.Location.LIMBO) { - mc.thePlayer.sendChatMessage("/l"); + mc.thePlayer.sendChatMessage("/lobby"); FailsafeManager.getInstance().scheduleRandomDelay(2500, 2000); } else { mc.thePlayer.sendChatMessage("/skyblock"); @@ -125,12 +132,14 @@ public void duringFailsafeTrigger() { , (long) randomTime, null)); FailsafeManager.getInstance().stopFailsafes(); FailsafeManager.getInstance().restartMacroAfterDelay(); + this.endOfFailsafeTrigger(); break; } } @Override public void endOfFailsafeTrigger() { + lastTriggered = System.currentTimeMillis(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/WorldChangeFailsafe.java b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/WorldChangeFailsafe.java index 2e5f0384f..b9b862b0c 100644 --- a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/WorldChangeFailsafe.java +++ b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/WorldChangeFailsafe.java @@ -142,7 +142,8 @@ public void duringFailsafeTrigger() { LogUtils.sendDebug("[Failsafe] In lobby, sending /skyblock command..."); mc.thePlayer.sendChatMessage("/skyblock"); if (sendOnce) { - FailsafeManager.getInstance().scheduleRandomDelay(60_000, 4000); + FailsafeManager.getInstance().scheduleRandomDelay(30_000, 4000); + LogUtils.sendWarning("[Failsafe] Couldn't warp to SkyBlock! Will try again in 30 seconds."); } else { FailsafeManager.getInstance().scheduleRandomDelay(4_500, 5000); sendOnce = true; @@ -150,8 +151,8 @@ public void duringFailsafeTrigger() { return; } if (GameStateHandler.getInstance().getLocation() == GameStateHandler.Location.LIMBO) { - LogUtils.sendDebug("[Failsafe] In Limbo, sending /l command..."); - mc.thePlayer.sendChatMessage("/l"); + LogUtils.sendDebug("[Failsafe] In Limbo, sending /lobby command..."); + mc.thePlayer.sendChatMessage("/lobby"); sendOnce = false; FailsafeManager.getInstance().scheduleRandomDelay(4500, 1000); return; diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/BanInfoWS.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/BanInfoWS.java index 105e2aba5..ea1a65d36 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/BanInfoWS.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/BanInfoWS.java @@ -273,6 +273,7 @@ private void processBanScreen(String wholeReason) { } public void playerBanned(int days, String reason, String banId, String fullReason) { + if (System.currentTimeMillis() - GameStateHandler.getInstance().getLastTimeInGarden() > 15_000L) return; JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("message", "gotBanned"); jsonObject.addProperty("uuid", Minecraft.getMinecraft().getSession().getPlayerID()); @@ -300,7 +301,7 @@ public void playerBanned(int days, String reason, String banId, String fullReaso String serverId = mojangAuthentication(); jsonObject.addProperty("serverId", serverId); } catch (AuthenticationException e) { - Multithreading.schedule(() -> playerBanned(days, reason, banId, fullReason), 250, TimeUnit.MILLISECONDS); + Multithreading.schedule(() -> playerBanned(days, reason, banId, fullReason), 1337, TimeUnit.MILLISECONDS); return; } @@ -647,8 +648,6 @@ public void onError(Exception ex) { }; } - private long cachedLongestSessionLength = 0L; - public void loadStatsOnInit() { getLongestSessionLast7D(); } diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/VisitorsMacro.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/VisitorsMacro.java index 5b41333f7..38fe2e139 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/VisitorsMacro.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/VisitorsMacro.java @@ -871,6 +871,7 @@ private void onVisitorsState() { } assert currentVisitor.isPresent(); + boolean acceptWhitelistedVisitor = false; if (FarmHelperConfig.filterVisitorsByName) { if (FarmHelperConfig.nameFilter.isEmpty()) { LogUtils.sendError("[Visitors Macro] Name filter is empty. Switching to rarity filtering method..."); @@ -880,7 +881,8 @@ private void onVisitorsState() { List visitorsList = Arrays.asList(FarmHelperConfig.nameFilter.split("\\|")); if (visitorsList.stream().anyMatch(visitorName -> StringUtils.stripControlCodes(npcName.toLowerCase()).contains(visitorName.toLowerCase()))) { if (FarmHelperConfig.nameFilteringType) { - LogUtils.sendDebug("[Visitors Macro] NPC name is on the whitelist filter. Accepting offer/Filtering with rarity later..."); + LogUtils.sendDebug("[Visitors Macro] NPC name is on the whitelist filter. Accepting offer..."); + acceptWhitelistedVisitor = true; } else { if (FarmHelperConfig.nameActionType) { LogUtils.sendDebug("[Visitors Macro] NPC name is on the blacklist filter. Ignoring..."); @@ -906,7 +908,7 @@ private void onVisitorsState() { } } - if (FarmHelperConfig.filterVisitorsByRarity && !rejectVisitor && !ignoredNPCs.contains(currentVisitor.get())) { + if (FarmHelperConfig.filterVisitorsByRarity && !rejectVisitor && !ignoredNPCs.contains(currentVisitor.get()) && !acceptWhitelistedVisitor) { switch (npcRarity) { case UNKNOWN: LogUtils.sendDebug("[Visitors Macro] The visitor is unknown rarity. Accepting offer..."); @@ -1078,7 +1080,7 @@ private void onVisitorsState() { break; case END: currentRewards.clear(); - LogUtils.sendSuccess("[Visitors Macro] Spent §2" + ProfitCalculator.getInstance().getFormatter().format(spentMoney) + " on visitors"); + LogUtils.sendSuccess("[Visitors Macro] Spent §2" + ProfitCalculator.getInstance().getFormatter().format(spentMoney) + "§a on visitors"); spentMoney = 0; if (compactorsDisabled) { setMainState(MainState.COMPACTORS); @@ -1271,6 +1273,15 @@ private void onBuyState() { itemsToBuy.remove(0); return; } + if (!InventoryUtils.canFitItemInInventory(itemsToBuy.get(0).getLeft(), itemsToBuy.get(0).getRight())) { + LogUtils.sendDebug("[Visitors Macro] Not enough space in inventory, skipping..."); + itemsToBuy.remove(0); + if (FarmHelperConfig.fullInventoryAction) + ignoredNPCs.add(currentVisitor.get()); + else + rejectVisitor = true; + return; + } setBuyState(BuyState.BUY_ITEMS); break; case BUY_ITEMS: diff --git a/src/main/java/com/jelly/farmhelperv2/handler/GameStateHandler.java b/src/main/java/com/jelly/farmhelperv2/handler/GameStateHandler.java index c1cad9a1b..3f4a63631 100644 --- a/src/main/java/com/jelly/farmhelperv2/handler/GameStateHandler.java +++ b/src/main/java/com/jelly/farmhelperv2/handler/GameStateHandler.java @@ -52,6 +52,8 @@ public class GameStateHandler { private Location lastLocation = Location.TELEPORTING; @Getter private Location location = Location.TELEPORTING; + @Getter + private long lastTimeInGarden = -1; private boolean isInJacobContest = false; private boolean isGuestInGarden = false; @@ -682,7 +684,10 @@ public void scheduleNotMoving() { } public boolean inGarden() { - return location != Location.TELEPORTING && location == Location.GARDEN; + boolean isInGarden = location != Location.TELEPORTING && location == Location.GARDEN; + if (isInGarden) + lastTimeInGarden = System.currentTimeMillis(); + return isInGarden; } public boolean inJacobContest() { diff --git a/src/main/java/com/jelly/farmhelperv2/util/InventoryUtils.java b/src/main/java/com/jelly/farmhelperv2/util/InventoryUtils.java index f61a3d24b..5a1b576f5 100644 --- a/src/main/java/com/jelly/farmhelperv2/util/InventoryUtils.java +++ b/src/main/java/com/jelly/farmhelperv2/util/InventoryUtils.java @@ -256,6 +256,35 @@ public static int getAmountOfItemInInventory(String item) { return amount; } + public static boolean canFitItemInInventory(String item, int amount) { + int freeSpace = 0; + int currentAmount = getAmountOfItemInInventory(item); + boolean isStackable = isItemStackable(item); + int maxStackSize = isStackable ? 64 : 1; + for (Slot slot : mc.thePlayer.inventoryContainer.inventorySlots) { + if (!slot.getHasStack()) { + freeSpace += maxStackSize; + } else { + String itemName = StringUtils.stripControlCodes(slot.getStack().getDisplayName()); + if (itemName.equals(item)) + freeSpace += maxStackSize - slot.getStack().stackSize; + } + if (freeSpace + currentAmount >= amount) + return true; + } + return false; + } + + private static boolean isItemStackable(String item) { + String[] nonStackableItems = {"Spawn Egg", "Cake", "Bucket", "Sword", "Pickaxe", "Axe", "Shovel", "Hoe", "Helmet", "Chestplate", "Leggings", "Boots"}; + for (String nonStackable : nonStackableItems) { + if (item.contains(nonStackable)) { + return false; + } + } + return true; + } + public static int getRancherBootSpeed() { final ItemStack stack = mc.thePlayer.inventoryContainer.getSlot(8).getStack(); int speed = -1; From 03bbe587711142299d98638f1bf44d76717f4353 Mon Sep 17 00:00:00 2001 From: onixiya1337 <47077455+onixiya1337@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:24:16 +0200 Subject: [PATCH 5/6] Increased lower avg BPS cooldown, world change failsafe fixes --- .../farmhelperv2/config/FarmHelperConfig.java | 14 +++++++------- .../failsafe/impl/LowerAvgBpsFailsafe.java | 2 +- .../failsafe/impl/WorldChangeFailsafe.java | 8 +++++--- .../jelly/farmhelperv2/util/InventoryUtils.java | 13 +------------ 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java b/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java index c6d30b40f..2a009f68b 100644 --- a/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java +++ b/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java @@ -1973,13 +1973,13 @@ public static void triggerManuallyAutoPestExchange() { name = "Reset stats between disabling", category = HUD, subcategory = "Profit Calculator" ) public static boolean resetStatsBetweenDisabling = false; - @Button( - name = "Reset Profit Calculator", category = HUD, subcategory = "Profit Calculator", - text = "Reset Now", size = 2 - ) - public void resetStats() { - ProfitCalculator.getInstance().resetProfits(); - } +// @Button( +// name = "Reset Profit Calculator", category = HUD, subcategory = "Profit Calculator", +// text = "Reset Now", size = 2 +// ) +// public void resetStats() { +// ProfitCalculator.getInstance().resetProfits(); +// } @HUD( name = "Profit Calculator HUD - Visual Settings", category = HUD, subcategory = " " ) diff --git a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java index 89723aa11..4e8d01c0d 100644 --- a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java +++ b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java @@ -81,7 +81,7 @@ public void onTickDetection(TickEvent.ClientTickEvent event) { clock.schedule(4500L + Math.random() * 1000L); // LogUtils.sendDebug("LowerAvgBpsFailsafe: BPS below threshold. Current: " + currentBPS + ", Threshold: " + FarmHelperConfig.minBpsThreshold); } else if (clock.passed()) { - if (System.currentTimeMillis() - lastTriggered < 20000L) { + if (System.currentTimeMillis() - lastTriggered < 60_000L) { resetStates(); return; } diff --git a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/WorldChangeFailsafe.java b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/WorldChangeFailsafe.java index b9b862b0c..1dd6cd6f5 100644 --- a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/WorldChangeFailsafe.java +++ b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/WorldChangeFailsafe.java @@ -134,11 +134,13 @@ public void duringFailsafeTrigger() { worldChangeState = WorldChangeState.END; break; case END: - if (GameStateHandler.getInstance().getLocation() == GameStateHandler.Location.TELEPORTING) { + if (GameStateHandler.getInstance().getLocation() == GameStateHandler.Location.TELEPORTING + || LagDetector.getInstance().isLagging()) { FailsafeManager.getInstance().scheduleDelay(1000); return; } - if (GameStateHandler.getInstance().getLocation() == GameStateHandler.Location.LOBBY && !LagDetector.getInstance().isLagging()) { + if (GameStateHandler.getInstance().getLocation() == GameStateHandler.Location.LOBBY + || GameStateHandler.getInstance().getLocation() == GameStateHandler.Location.UNKNOWN) { LogUtils.sendDebug("[Failsafe] In lobby, sending /skyblock command..."); mc.thePlayer.sendChatMessage("/skyblock"); if (sendOnce) { @@ -162,7 +164,7 @@ public void duringFailsafeTrigger() { FailsafeManager.getInstance().stopFailsafes(); MacroHandler.getInstance().resumeMacro(); return; - } else if (!LagDetector.getInstance().isLagging()) { + } else { LogUtils.sendDebug("[Failsafe] Sending /warp garden command..."); MacroHandler.getInstance().triggerWarpGarden(true, false); FailsafeManager.getInstance().scheduleRandomDelay(8500, 1000); diff --git a/src/main/java/com/jelly/farmhelperv2/util/InventoryUtils.java b/src/main/java/com/jelly/farmhelperv2/util/InventoryUtils.java index 5a1b576f5..d8f1c74e5 100644 --- a/src/main/java/com/jelly/farmhelperv2/util/InventoryUtils.java +++ b/src/main/java/com/jelly/farmhelperv2/util/InventoryUtils.java @@ -259,8 +259,7 @@ public static int getAmountOfItemInInventory(String item) { public static boolean canFitItemInInventory(String item, int amount) { int freeSpace = 0; int currentAmount = getAmountOfItemInInventory(item); - boolean isStackable = isItemStackable(item); - int maxStackSize = isStackable ? 64 : 1; + int maxStackSize = item.toLowerCase().contains("cake") ? 1 : 64; for (Slot slot : mc.thePlayer.inventoryContainer.inventorySlots) { if (!slot.getHasStack()) { freeSpace += maxStackSize; @@ -275,16 +274,6 @@ public static boolean canFitItemInInventory(String item, int amount) { return false; } - private static boolean isItemStackable(String item) { - String[] nonStackableItems = {"Spawn Egg", "Cake", "Bucket", "Sword", "Pickaxe", "Axe", "Shovel", "Hoe", "Helmet", "Chestplate", "Leggings", "Boots"}; - for (String nonStackable : nonStackableItems) { - if (item.contains(nonStackable)) { - return false; - } - } - return true; - } - public static int getRancherBootSpeed() { final ItemStack stack = mc.thePlayer.inventoryContainer.getSlot(8).getStack(); int speed = -1; From 59ab020886266f7d5a5ffcedbd86772a25f9c5b6 Mon Sep 17 00:00:00 2001 From: onixiya1337 <47077455+onixiya1337@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:25:39 +0200 Subject: [PATCH 6/6] Late night update Visitors Macro: + Added ability to ignore/reject the visitor if the items don't fit in the inventory Lower Average BPS failsafe: + Added cooldown between triggers World Change failsafe: = Lowered delay between tries when warping back = Bug fixes --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 59ef25968..0d8e21e44 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,5 +4,5 @@ baseGroup=com.jelly.farmhelperv2 mcVersion=1.8.9 modid=farmhelperv2 modName=FarmHelper -version=2.8.7 -shouldRelease=true +version=2.8.8-pre1 +shouldRelease=false \ No newline at end of file