From 1f89eb9a8042d59a1bd81dad3ee69907d602cddb Mon Sep 17 00:00:00 2001 From: May2Beez Date: Tue, 23 Apr 2024 22:19:50 +0200 Subject: [PATCH] + Optimizations Auto Bazaar: = Fixed issue of getting stuck randomly Auto God Pot: + Added tp do Elizabeth directly (for bits shop) = Won't stuck while opening Elizabeth shop = Possible fix for buying multiple god pots if user has high ping Auto Repellent: + Added retry to use repellent if it wasn't used for the past 3 seconds of trying Failsafes: = Jacob fixed (i hope so, lmk) = Should always detect limbo (not sure why it didn't detect sometimes) = Lower avg bps being counted in other features fixed Pests Destroyer: + Faster Vacuum scanner - Credits to Skyhanni lol PDOTT: + Won't trigger during scheduler break (oops) Visitors Macro: + Improved by a lot, need further testing - Removed some console logs to improve a little performance --- gradle.properties | 2 +- .../com/jelly/farmhelperv2/FarmHelper.java | 2 - .../farmhelperv2/config/FarmHelperConfig.java | 2 +- .../failsafe/FailsafeManager.java | 2 +- .../failsafe/impl/DirtFailsafe.java | 9 +- .../failsafe/impl/JacobFailsafe.java | 9 +- .../failsafe/impl/LowerAvgBpsFailsafe.java | 3 +- .../farmhelperv2/feature/FeatureManager.java | 26 +- .../jelly/farmhelperv2/feature/IFeature.java | 12 +- .../farmhelperv2/feature/impl/AntiStuck.java | 2 + .../farmhelperv2/feature/impl/AutoBazaar.java | 16 +- .../farmhelperv2/feature/impl/AutoCookie.java | 3 + .../farmhelperv2/feature/impl/AutoGodPot.java | 143 +++---- .../feature/impl/AutoPestExchange.java | 5 +- .../feature/impl/AutoReconnect.java | 2 + .../feature/impl/AutoRepellent.java | 7 +- .../farmhelperv2/feature/impl/AutoSell.java | 2 + .../feature/impl/AutoSprayonator.java | 2 + .../farmhelperv2/feature/impl/BanInfoWS.java | 3 +- .../feature/impl/DesyncChecker.java | 2 + .../farmhelperv2/feature/impl/Freelook.java | 2 + .../feature/impl/LagDetector.java | 3 +- .../farmhelperv2/feature/impl/LeaveTimer.java | 2 + .../feature/impl/MovRecPlayer.java | 2 + .../feature/impl/PerformanceMode.java | 2 + .../feature/impl/PestsDestroyer.java | 84 +++- .../impl/PestsDestroyerOnTheTrack.java | 7 +- .../farmhelperv2/feature/impl/PetSwapper.java | 2 + .../farmhelperv2/feature/impl/PiPMode.java | 2 + .../feature/impl/PlotCleaningHelper.java | 2 + .../feature/impl/ProfitCalculator.java | 2 + .../farmhelperv2/feature/impl/Scheduler.java | 2 + .../feature/impl/UngrabMouse.java | 2 + .../feature/impl/VisitorsMacro.java | 378 +++++++++--------- .../handler/GameStateHandler.java | 11 +- .../farmhelperv2/handler/MacroHandler.java | 12 - .../farmhelperv2/handler/RotationHandler.java | 4 +- .../com/jelly/farmhelperv2/hud/DebugHUD.java | 13 +- .../farmhelperv2/macro/AbstractMacro.java | 7 +- .../pathfinder/FlyPathFinderExecutor.java | 41 -- .../jelly/farmhelperv2/util/PlayerUtils.java | 12 +- 41 files changed, 423 insertions(+), 423 deletions(-) diff --git a/gradle.properties b/gradle.properties index a56c9eece..11d101eba 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.6.1 +version=2.6.2 shouldRelease=true diff --git a/src/main/java/com/jelly/farmhelperv2/FarmHelper.java b/src/main/java/com/jelly/farmhelperv2/FarmHelper.java index 2641da5c6..973b5995e 100644 --- a/src/main/java/com/jelly/farmhelperv2/FarmHelper.java +++ b/src/main/java/com/jelly/farmhelperv2/FarmHelper.java @@ -20,7 +20,6 @@ import com.jelly.farmhelperv2.util.*; import com.jelly.farmhelperv2.util.helper.AudioManager; import com.jelly.farmhelperv2.util.helper.BaritoneEventListener; -import com.jelly.farmhelperv2.util.helper.FlyPathfinder; import com.jelly.farmhelperv2.util.helper.TickTask; import net.minecraft.client.Minecraft; import net.minecraftforge.client.ClientCommandHandler; @@ -114,7 +113,6 @@ private void initializeListeners() { MinecraftForge.EVENT_BUS.register(DiscordBotHandler.getInstance()); MinecraftForge.EVENT_BUS.register(AudioManager.getInstance()); MinecraftForge.EVENT_BUS.register(RotationHandler.getInstance()); - MinecraftForge.EVENT_BUS.register(FlyPathfinder.getInstance()); MinecraftForge.EVENT_BUS.register(FlyPathFinderExecutor.getInstance()); MinecraftForge.EVENT_BUS.register(new TablistUtils()); MinecraftForge.EVENT_BUS.register(new ScoreboardUtils()); diff --git a/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java b/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java index deea7856e..4b5d7b6c0 100644 --- a/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java +++ b/src/main/java/com/jelly/farmhelperv2/config/FarmHelperConfig.java @@ -2090,7 +2090,7 @@ public FarmHelperConfig() { registerKeyBind(openGuiKeybind, this::openGui); registerKeyBind(toggleMacro, () -> MacroHandler.getInstance().toggleMacro()); registerKeyBind(debugKeybind, () -> { -// mc.thePlayer.sendChatMessage("ยง"); + AutoGodPot.getInstance().start(); }); registerKeyBind(freelookKeybind, () -> Freelook.getInstance().toggle()); registerKeyBind(plotCleaningHelperKeybind, () -> PlotCleaningHelper.getInstance().toggle()); diff --git a/src/main/java/com/jelly/farmhelperv2/failsafe/FailsafeManager.java b/src/main/java/com/jelly/farmhelperv2/failsafe/FailsafeManager.java index b069f6d59..afe351f01 100644 --- a/src/main/java/com/jelly/farmhelperv2/failsafe/FailsafeManager.java +++ b/src/main/java/com/jelly/farmhelperv2/failsafe/FailsafeManager.java @@ -175,7 +175,7 @@ public void onChatDetection(ClientChatReceivedEvent event) { if (event.message == null) return; if (!MacroHandler.getInstance().isMacroToggled()) return; if (triggeredFailsafe.isPresent()) return; - if (FeatureManager.getInstance().shouldIgnoreFalseCheck()) return; +// if (FeatureManager.getInstance().shouldIgnoreFalseCheck()) return; failsafes.forEach(failsafe -> failsafe.onChatDetection(event)); } diff --git a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/DirtFailsafe.java b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/DirtFailsafe.java index a5a0b0fe3..af2368efe 100644 --- a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/DirtFailsafe.java +++ b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/DirtFailsafe.java @@ -1,6 +1,5 @@ package com.jelly.farmhelperv2.failsafe.impl; -import baritone.api.pathing.goals.GoalBlock; import com.jelly.farmhelperv2.config.FarmHelperConfig; import com.jelly.farmhelperv2.config.page.CustomFailsafeMessagesPage; import com.jelly.farmhelperv2.config.page.FailsafeNotificationsPage; @@ -11,8 +10,8 @@ import com.jelly.farmhelperv2.handler.BaritoneHandler; import com.jelly.farmhelperv2.handler.GameStateHandler; import com.jelly.farmhelperv2.handler.MacroHandler; +import com.jelly.farmhelperv2.pathfinder.FlyPathFinderExecutor; import com.jelly.farmhelperv2.util.*; -import com.jelly.farmhelperv2.util.helper.FlyPathfinder; import com.jelly.farmhelperv2.util.helper.Rotation; import com.jelly.farmhelperv2.util.helper.RotationConfiguration; import net.minecraft.init.Blocks; @@ -193,7 +192,7 @@ else if (BlockUtils.getRelativeBlock(1, 1, 0).equals(Blocks.dirt)) MovRecPlayer.getInstance().playRandomRecording(tempRecordingName); maxReactions--; } else { - FlyPathfinder.getInstance().getPathTo(new GoalBlock(positionBeforeReacting.getX(), positionBeforeReacting.getY() + 3, positionBeforeReacting.getZ())); + FlyPathFinderExecutor.getInstance().findPath(new Vec3(positionBeforeReacting.getX() + 0.5, positionBeforeReacting.getY() + 3, positionBeforeReacting.getZ() + 0.5), true, true); dirtCheckState = DirtCheckState.GO_BACK_END; } FailsafeManager.getInstance().scheduleRandomDelay(500, 1000); @@ -203,7 +202,7 @@ else if (BlockUtils.getRelativeBlock(1, 1, 0).equals(Blocks.dirt)) break; if (FailsafeManager.getInstance().swapItemDuringRecording) FailsafeManager.getInstance().swapItemDuringRecording = false; - if (FlyPathfinder.getInstance().isRunning()) + if (FlyPathFinderExecutor.getInstance().isRunning()) break; if (mc.thePlayer.getPosition().distanceSq(positionBeforeReacting) < 1) { dirtCheckState = DirtCheckState.ROTATE_TO_POS_BEFORE; @@ -213,7 +212,7 @@ else if (BlockUtils.getRelativeBlock(1, 1, 0).equals(Blocks.dirt)) dirtCheckState = DirtCheckState.GO_BACK_END; break; case GO_BACK_END: - if (FlyPathfinder.getInstance().isRunning()) + if (FlyPathFinderExecutor.getInstance().isRunning()) break; if (BaritoneHandler.isWalkingToGoalBlock()) { LogUtils.sendDebug("Distance difference: " + mc.thePlayer.getPosition().distanceSq(positionBeforeReacting)); diff --git a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/JacobFailsafe.java b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/JacobFailsafe.java index 346d3d04d..7e97138f1 100644 --- a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/JacobFailsafe.java +++ b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/JacobFailsafe.java @@ -16,6 +16,7 @@ public class JacobFailsafe extends Failsafe { private static JacobFailsafe instance; + public static JacobFailsafe getInstance() { if (instance == null) { instance = new JacobFailsafe(); @@ -105,11 +106,9 @@ public void duringFailsafeTrigger() { if (!MacroHandler.getInstance().isCurrentMacroPaused()) { LogUtils.sendFailsafeMessage("[Failsafe] Paused the macro because of extended Jacob's Content!", false); MacroHandler.getInstance().pauseMacro(); - } else { - if (!GameStateHandler.getInstance().inJacobContest()) { - LogUtils.sendFailsafeMessage("[Failsafe] Resuming the macro because Jacob's Contest is over!", false); - endOfFailsafeTrigger(); - } + } else if (!GameStateHandler.getInstance().inJacobContest()) { + LogUtils.sendFailsafeMessage("[Failsafe] Resuming the macro because Jacob's Contest is over!", false); + endOfFailsafeTrigger(); } } else { // leave 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 edf30a312..5db3b412c 100644 --- a/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java +++ b/src/main/java/com/jelly/farmhelperv2/failsafe/impl/LowerAvgBpsFailsafe.java @@ -4,6 +4,7 @@ import com.jelly.farmhelperv2.config.page.FailsafeNotificationsPage; import com.jelly.farmhelperv2.failsafe.Failsafe; import com.jelly.farmhelperv2.failsafe.FailsafeManager; +import com.jelly.farmhelperv2.feature.FeatureManager; import com.jelly.farmhelperv2.feature.impl.ProfitCalculator; import com.jelly.farmhelperv2.handler.GameStateHandler; import com.jelly.farmhelperv2.handler.MacroHandler; @@ -56,7 +57,7 @@ public boolean shouldAltTab() { @Override public void onTickDetection(TickEvent.ClientTickEvent event) { - if (MacroHandler.getInstance().isCurrentMacroPaused()) { + if (MacroHandler.getInstance().isCurrentMacroPaused() || FeatureManager.getInstance().shouldPauseMacroExecution()) { bpsQueue.clear(); lastTimeCheckedBPS = System.currentTimeMillis(); return; diff --git a/src/main/java/com/jelly/farmhelperv2/feature/FeatureManager.java b/src/main/java/com/jelly/farmhelperv2/feature/FeatureManager.java index 788e13f9a..8f79d9328 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/FeatureManager.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/FeatureManager.java @@ -2,10 +2,10 @@ import com.jelly.farmhelperv2.feature.impl.*; import com.jelly.farmhelperv2.util.LogUtils; +import lombok.Getter; +import lombok.Setter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; public class FeatureManager { private static FeatureManager instance; @@ -18,6 +18,10 @@ public static FeatureManager getInstance() { return instance; } + @Getter + @Setter + private Set pauseExecutionFeatures = new HashSet<>(); + public List fillFeatures() { List featuresList = Arrays.asList( AutoBazaar.getInstance(), @@ -50,12 +54,7 @@ public List fillFeatures() { } public boolean shouldPauseMacroExecution() { - return features.stream().anyMatch(feature -> { - if (feature.isToggled() && feature.isRunning()) { - return feature.shouldPauseMacroExecution(); - } - return false; - }); + return !pauseExecutionFeatures.isEmpty(); } public void disableAll() { @@ -65,12 +64,14 @@ public void disableAll() { LogUtils.sendDebug("Disabled feature: " + feature.getName()); } }); + pauseExecutionFeatures.clear(); } public void disableAllExcept(IFeature... sender) { features.forEach(feature -> { if (feature.isToggled() && feature.isRunning() && !Arrays.asList(sender).contains(feature)) { feature.stop(); + pauseExecutionFeatures.remove(feature); LogUtils.sendDebug("Disabled feature: " + feature.getName()); } }); @@ -80,8 +81,13 @@ public void resetAllStates() { features.forEach(IFeature::resetStatesAfterMacroDisabled); } + public boolean isAnyOtherFeatureEnabled(IFeature sender) { + return pauseExecutionFeatures.stream().anyMatch(f -> f != sender); + } + public boolean isAnyOtherFeatureEnabled(IFeature... sender) { - return features.stream().anyMatch(feature -> feature.shouldPauseMacroExecution() && feature.isRunning() && !Arrays.asList(sender).contains(feature)); + return pauseExecutionFeatures.stream().anyMatch(f -> !Arrays.asList(sender).contains(f)); +// return features.stream().anyMatch(feature -> feature.shouldPauseMacroExecution() && feature.isRunning() && !Arrays.asList(sender).contains(feature)); } public boolean shouldIgnoreFalseCheck() { diff --git a/src/main/java/com/jelly/farmhelperv2/feature/IFeature.java b/src/main/java/com/jelly/farmhelperv2/feature/IFeature.java index c9c8096ef..1782b7924 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/IFeature.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/IFeature.java @@ -9,9 +9,15 @@ public interface IFeature { boolean shouldStartAtMacroStart(); - void start(); - - void stop(); + default void start() { + if (!shouldPauseMacroExecution()) return; + FeatureManager.getInstance().getPauseExecutionFeatures().add(this); + } + + default void stop() { + if (!shouldPauseMacroExecution()) return; + FeatureManager.getInstance().getPauseExecutionFeatures().remove(this); + } void resetStatesAfterMacroDisabled(); diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AntiStuck.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AntiStuck.java index c2d9d8e03..0fde77d75 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AntiStuck.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AntiStuck.java @@ -87,6 +87,7 @@ public void start() { enabled = true; unstuckState = UnstuckState.NONE; KeyBindUtils.stopMovement(); + IFeature.super.start(); } @Override @@ -104,6 +105,7 @@ public void stop() { intersectingBlockPos = null; directionBlockPos = null; unstuckTries++; + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoBazaar.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoBazaar.java index d0394e24f..9788a26fd 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoBazaar.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoBazaar.java @@ -78,9 +78,9 @@ public boolean shouldStartAtMacroStart() { return false; } - // Cant use this prob idk @Override public void start() { + IFeature.super.start(); } @Override @@ -96,6 +96,7 @@ public void stop() { this.maxSpendLimit = 0; log("Disabling"); + IFeature.super.stop(); } @Override @@ -135,6 +136,7 @@ public void buy(String itemName, int amount, int maxSpendLimit) { this.maxSpendLimit = maxSpendLimit; log("Enabling"); + start(); } public void sell(Integer... sellTypes) { @@ -276,7 +278,7 @@ private void handleBuyFromBz() { Slot customAmount = InventoryUtils.getSlotOfItemInContainer("Custom Amount"); if (customAmount != null && customAmount.getHasStack()) { this.buyState = BuyState.OPEN_SIGN; - this.buyNowButtonSlot = 13; + this.buyNowButtonSlot = -1; LogUtils.sendDebug("[Auto Bazaar] Buying custom amount"); return; } @@ -337,6 +339,16 @@ private void handleBuyFromBz() { case CLICK_BUY: if (!this.hasTimerEnded()) return; + if (buyNowButtonSlot == -1) { + Slot customAmount = InventoryUtils.getSlotOfItemInContainer("Custom Amount"); + if (customAmount != null && customAmount.getHasStack()) { + this.buyNowButtonSlot = customAmount.slotNumber; + } else { + System.out.println("Slot is null 2"); + return; + } + } + Slot slot = InventoryUtils.getSlotOfIdInContainer(buyNowButtonSlot); if (slot == null || !slot.getHasStack()) { System.out.println("Slot is null"); diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoCookie.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoCookie.java index a3e5e06d5..b3fb327ff 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoCookie.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoCookie.java @@ -81,6 +81,7 @@ public void start() { timeoutClock.schedule(7_500); if (MacroHandler.getInstance().isMacroToggled()) MacroHandler.getInstance().pauseMacro(); + IFeature.super.start(); } @Override @@ -99,6 +100,7 @@ public void stop() { KeyBindUtils.stopMovement(); if (MacroHandler.getInstance().isMacroToggled()) MacroHandler.getInstance().resumeMacro(); + IFeature.super.stop(); } @Override @@ -263,6 +265,7 @@ public void onTickUpdate(TickEvent.ClientTickEvent event) { break; } + mc.thePlayer.swingItem(); mc.playerController.interactWithEntitySendPacket(mc.thePlayer, bazaarNpc.get()); setBazaarState(BazaarState.CLICK_ODDITIES); autoCookieDelay.schedule(getRandomDelay()); diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoGodPot.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoGodPot.java index d1a38f81c..096f98fd5 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoGodPot.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoGodPot.java @@ -29,6 +29,7 @@ import net.minecraftforge.fml.common.gameevent.TickEvent; import java.util.ArrayList; +import java.util.Comparator; import java.util.Objects; import java.util.Optional; import java.util.concurrent.TimeUnit; @@ -44,8 +45,6 @@ public class AutoGodPot implements IFeature { private final RotationHandler rotation = RotationHandler.getInstance(); private final Vec3 ahLocation1 = new Vec3(-17.5, 72, -91.5); private final Vec3 ahLocation2 = new Vec3(-30.5, 73, -87.5); - private final Vec3 bitsShopLocation1 = new Vec3(5.5, 72, -97.5); - private final Vec3 bitsShopLocation2 = new Vec3(1.5, 72, -100.5); private final ArrayList badItems = new ArrayList<>(); private final AxisAlignedBB ahArea = new AxisAlignedBB(-31, 75, -87, -33, 70, -89); private boolean shouldTpToGarden = true; @@ -129,16 +128,21 @@ public void start() { } LogUtils.sendWarning("[Auto God Pot] Enabled!"); stuckClock.schedule(STUCK_DELAY); + IFeature.super.start(); } @Override public void stop() { resetStates(); + PlayerUtils.closeScreen(); LogUtils.sendWarning("[Auto God Pot] Disabled!"); - if (shouldTpToGarden) { + if (shouldTpToGarden && !GameStateHandler.getInstance().inGarden()) { MacroHandler.getInstance().triggerWarpGarden(true, true); + } else { + MacroHandler.getInstance().resumeMacro(); } tries = 0; + IFeature.super.stop(); } private void resetStates() { @@ -170,7 +174,7 @@ public boolean isToggled() { @Override public boolean shouldCheckForFailsafes() { return goingToAHState != GoingToAHState.NONE && bitsShopState != BitsShopState.NONE - && goingToAHState != GoingToAHState.TELEPORT_TO_HUB && bitsShopState != BitsShopState.TELEPORT_TO_HUB; + && goingToAHState != GoingToAHState.TELEPORT_TO_HUB && bitsShopState != BitsShopState.TELEPORT_TO_ELIZABETH; } @SubscribeEvent @@ -203,6 +207,7 @@ public void onTickShouldEnable(TickEvent.ClientTickEvent event) { @SubscribeEvent public void onTickUpdate(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.START) return; if (mc.thePlayer == null || mc.theWorld == null) return; if (!isToggled()) return; if (!enabled) return; @@ -293,10 +298,11 @@ private void onAhState(boolean rightClick) { delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; } + setAhState(AhState.OPEN_BROWSER); } else { - mc.thePlayer.sendChatMessage("/ah"); + mc.thePlayer.sendChatMessage("/ahs God Potion"); + setAhState(AhState.SORT_ITEMS); } - setAhState(AhState.OPEN_BROWSER); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; case OPEN_BROWSER: @@ -803,112 +809,58 @@ private void onBitsShop() { stop(); return; } - setBitsShopState(BitsShopState.TELEPORT_TO_HUB); + setBitsShopState(BitsShopState.TELEPORT_TO_ELIZABETH); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; - case TELEPORT_TO_HUB: + case TELEPORT_TO_ELIZABETH: if (mc.currentScreen != null) { PlayerUtils.closeScreen(); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; } - mc.thePlayer.sendChatMessage("/hub"); - setBitsShopState(BitsShopState.ROTATE_TO_BITS_SHOP_1); - delayClock.schedule(5_000); - break; - case ROTATE_TO_BITS_SHOP_1: - if (GameStateHandler.getInstance().getLocation() != GameStateHandler.Location.HUB) { - setBitsShopState(BitsShopState.TELEPORT_TO_HUB); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - break; - } - KeyBindUtils.stopMovement(); - long randomTime = FarmHelperConfig.getRandomRotationTime(); - Rotation rot = rotation.getRotation(bitsShopLocation1); - rotation.easeTo( - new RotationConfiguration(new Rotation(rot.getYaw(), rot.getPitch()), randomTime, null - )); - delayClock.schedule(randomTime + 150); - setBitsShopState(BitsShopState.GO_TO_BITS_SHOP_1); + mc.thePlayer.sendChatMessage("/warp elizabeth"); + setBitsShopState(BitsShopState.OPEN_BITS_SHOP); + delayClock.schedule(1_500); break; - case GO_TO_BITS_SHOP_1: + case OPEN_BITS_SHOP: if (mc.currentScreen != null) { - KeyBindUtils.stopMovement(); - setBitsShopState(BitsShopState.ROTATE_TO_BITS_SHOP_1); + PlayerUtils.closeScreen(); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; } if (rotation.isRotating()) break; - if (mc.thePlayer.getPositionVector().distanceTo(bitsShopLocation1) < 1.5) { - KeyBindUtils.stopMovement(); - setBitsShopState(BitsShopState.ROTATE_TO_BITS_SHOP_2); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - break; - } - KeyBindUtils.holdThese(mc.gameSettings.keyBindSprint, mc.gameSettings.keyBindForward); - stuckClock.schedule(STUCK_DELAY); - break; - case ROTATE_TO_BITS_SHOP_2: - if (GameStateHandler.getInstance().getLocation() != GameStateHandler.Location.HUB) { - setBitsShopState(BitsShopState.TELEPORT_TO_HUB); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - break; + + Entity elizabethArmorStand = mc.theWorld.loadedEntityList.stream().filter(e -> { + if (!(e instanceof EntityArmorStand)) return false; + String name = StringUtils.stripControlCodes(e.getCustomNameTag()); + return name != null && name.equals("Elizabeth"); + }).min(Comparator.comparingDouble(e -> mc.thePlayer.getDistanceToEntity(e))).orElse(null); + + if (elizabethArmorStand == null) { + return; } - KeyBindUtils.stopMovement(); - long randomTime2 = FarmHelperConfig.getRandomRotationTime(); - Rotation rot2 = rotation.getRotation(bitsShopLocation2); - rotation.easeTo( - new RotationConfiguration(new Rotation(rot2.getYaw(), rot2.getPitch()), randomTime2, null - )); - delayClock.schedule(randomTime2 + 150); - setBitsShopState(BitsShopState.GO_TO_BITS_SHOP_2); - break; - case GO_TO_BITS_SHOP_2: - if (mc.currentScreen != null) { - KeyBindUtils.stopMovement(); - setBitsShopState(BitsShopState.ROTATE_TO_BITS_SHOP_2); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - break; + + Entity elizabethCharacter = PlayerUtils.getEntityCuttingOtherEntity(elizabethArmorStand, e -> !(e instanceof EntityArmorStand)); + if (elizabethCharacter == null) { + return; } - if (rotation.isRotating()) break; - if (mc.thePlayer.getPositionVector().distanceTo(bitsShopLocation2) < 1.5) { + + Rotation rot = rotation.getRotation(elizabethCharacter); + if (RotationHandler.getInstance().shouldRotate(rot, 5)) { KeyBindUtils.stopMovement(); - setBitsShopState(BitsShopState.ROTATE_TO_BITS_SHOP); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); + rotation.easeTo(new RotationConfiguration(new Rotation(rot.getYaw(), rot.getPitch()), 500, null)); break; } - KeyBindUtils.holdThese(mc.gameSettings.keyBindSprint, mc.gameSettings.keyBindForward); - stuckClock.schedule(STUCK_DELAY); - break; - case ROTATE_TO_BITS_SHOP: - if (GameStateHandler.getInstance().getLocation() != GameStateHandler.Location.HUB) { - setBitsShopState(BitsShopState.TELEPORT_TO_HUB); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); + + if (mc.thePlayer.getDistanceToEntity(elizabethCharacter) > 3) { + KeyBindUtils.holdThese(mc.gameSettings.keyBindForward); + stuckClock.schedule(STUCK_DELAY); break; } - Optional elizabeth = mc.theWorld.loadedEntityList.stream().filter(entity -> entity instanceof EntityArmorStand).filter(entity -> entity.getDisplayName().getUnformattedText().contains("Elizabeth")).findFirst(); - if (!elizabeth.isPresent()) { - LogUtils.sendError("[Auto God Pot] Could not find Elizabeth! Trying again!"); - setBitsShopState(BitsShopState.TELEPORT_TO_HUB); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - return; - } + KeyBindUtils.stopMovement(); - long randomTime3 = FarmHelperConfig.getRandomRotationTime(); - Rotation rot3 = rotation.getRotation(elizabeth.get()); - rotation.easeTo( - new RotationConfiguration(new Rotation(rot3.getYaw(), rot3.getPitch()), randomTime3, null - )); - delayClock.schedule(randomTime3 + 150); - setBitsShopState(BitsShopState.OPEN_BITS_SHOP); - break; - case OPEN_BITS_SHOP: - if (mc.currentScreen != null) { - PlayerUtils.closeScreen(); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - break; - } - KeyBindUtils.rightClick(); + mc.thePlayer.swingItem(); + mc.playerController.interactWithEntitySendPacket(mc.thePlayer, elizabethCharacter); setBitsShopState(BitsShopState.BITS_SHOP_TAB); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; @@ -1102,7 +1054,7 @@ private boolean checkIfWrongInventory(String inventoryNameStartsWith) { return true; } if (InventoryUtils.getInventoryName() == null) - return true; + return false; if (!InventoryUtils.getInventoryName().startsWith(inventoryNameStartsWith)) { LogUtils.sendError("[Auto God Pot] Opened wrong Auction Menu! Restarting..."); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); @@ -1174,12 +1126,7 @@ enum BackpackState { enum BitsShopState { NONE, - TELEPORT_TO_HUB, - ROTATE_TO_BITS_SHOP_1, - GO_TO_BITS_SHOP_1, - ROTATE_TO_BITS_SHOP_2, - GO_TO_BITS_SHOP_2, - ROTATE_TO_BITS_SHOP, + TELEPORT_TO_ELIZABETH, OPEN_BITS_SHOP, BITS_SHOP_TAB, CHECK_CONFIRM, diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoPestExchange.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoPestExchange.java index c4bd9c251..d3fa6edab 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoPestExchange.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoPestExchange.java @@ -3,7 +3,6 @@ import com.jelly.farmhelperv2.config.FarmHelperConfig; import com.jelly.farmhelperv2.feature.FeatureManager; import com.jelly.farmhelperv2.feature.IFeature; -import com.jelly.farmhelperv2.handler.BaritoneHandler; import com.jelly.farmhelperv2.handler.GameStateHandler; import com.jelly.farmhelperv2.handler.MacroHandler; import com.jelly.farmhelperv2.handler.RotationHandler; @@ -102,6 +101,7 @@ public void start() { enabled = true; newState = NewState.NONE; LogUtils.sendWarning("[Auto Pest Exchange] Starting..."); + IFeature.super.start(); } @Override @@ -111,8 +111,9 @@ public void stop() { KeyBindUtils.stopMovement(); resetStatesAfterMacroDisabled(); FlyPathFinderExecutor.getInstance().stop(); - BaritoneHandler.stopPathing(); +// BaritoneHandler.stopPathing(); manuallyStarted = false; + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoReconnect.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoReconnect.java index b20b5dece..1c5d18561 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoReconnect.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoReconnect.java @@ -96,6 +96,7 @@ public void start() { } state = State.CONNECTING; LogUtils.sendDebug("[Reconnect] Reconnecting to the server..."); + IFeature.super.start(); } @Override @@ -117,6 +118,7 @@ public void stop() { } } } + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoRepellent.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoRepellent.java index b241d2399..91a3e8dca 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoRepellent.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoRepellent.java @@ -68,6 +68,7 @@ public void start() { LogUtils.sendWarning("[Auto Repellent] Enabled!"); delay.reset(); MacroHandler.getInstance().pauseMacro(); + IFeature.super.start(); } @Override @@ -82,6 +83,7 @@ public void stop() { MacroHandler.getInstance().resumeMacro(); enabled = false; }, 500, TimeUnit.MILLISECONDS); + IFeature.super.stop(); } @Override @@ -318,12 +320,15 @@ public void onTickExecution(TickEvent.ClientTickEvent event) { } state = State.WAIT_FOR_REPELLENT; KeyBindUtils.rightClick(); - delay.schedule(300 + (long) (Math.random() * 300)); + delay.schedule(2_500 + (long) (Math.random() * 1_000)); break; case OPEN_SKYMART: case CLICK_REPELLENT: case CONFIRM_BUY: case WAIT_FOR_REPELLENT: + if (!delay.passed()) break; + LogUtils.sendError("[Auto Repellent] Repellent hasn't been used. Trying to use again."); + state = State.USE_REPELLENT; case END: break; } diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoSell.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoSell.java index 85dfa4510..fc488e3b3 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoSell.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoSell.java @@ -109,6 +109,7 @@ public boolean shouldStartAtMacroStart() { @Override public void start() { this.enable(false); + IFeature.super.start(); } @Override @@ -131,6 +132,7 @@ public void stop() { } if (FarmHelperConfig.enableScheduler && !VisitorsMacro.getInstance().isRunning()) Scheduler.getInstance().resume(); + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoSprayonator.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoSprayonator.java index 2d5e03988..49a69ad9d 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoSprayonator.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/AutoSprayonator.java @@ -113,6 +113,7 @@ public void start() { sprayState = AUTO_SPRAYONATOR_STATE.WAITING_FOR_PLOT; } sprayonatorDelay.schedule(100); + IFeature.super.start(); } @Override @@ -126,6 +127,7 @@ public void stop() { if (MacroHandler.getInstance().isMacroToggled()) Multithreading.schedule(() -> MacroHandler.getInstance().resumeMacro(), 1_500, TimeUnit.MILLISECONDS); running = false; + IFeature.super.stop(); } @Override 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 444aef8b3..a447f381c 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/BanInfoWS.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/BanInfoWS.java @@ -1,7 +1,6 @@ package com.jelly.farmhelperv2.feature.impl; import cc.polyfrost.oneconfig.utils.Multithreading; -import cc.polyfrost.oneconfig.utils.Notifications; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -465,6 +464,8 @@ private void collectMods(JsonObject obj) { farmHelper.addProperty("crop", MacroHandler.getInstance().getCrop().name()); farmHelper.addProperty("macroType", FarmHelperConfig.getMacro().name()); farmHelper.addProperty("fastBreak", FarmHelperConfig.fastBreak); + farmHelper.addProperty("autoCookie", FarmHelperConfig.autoCookie); + farmHelper.addProperty("autoGodPot", FarmHelperConfig.autoGodPot); extraData.add("farmHelper", farmHelper); obj.add("extraData", extraData); } diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/DesyncChecker.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/DesyncChecker.java index 5e2ff8c9d..4aef2599e 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/DesyncChecker.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/DesyncChecker.java @@ -59,11 +59,13 @@ public boolean shouldStartAtMacroStart() { @Override public void start() { clickedBlocks.clear(); + IFeature.super.start(); } @Override public void stop() { clickedBlocks.clear(); + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/Freelook.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/Freelook.java index fcca34421..c9deabf2f 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/Freelook.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/Freelook.java @@ -73,6 +73,7 @@ public void start() { UngrabMouse.getInstance().regrabMouse(); mouseWasGrabbed = true; } + IFeature.super.start(); } @Override @@ -85,6 +86,7 @@ public void stop() { UngrabMouse.getInstance().ungrabMouse(); } mouseWasGrabbed = false; + IFeature.super.stop(); } diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/LagDetector.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/LagDetector.java index fad3832a9..0b580ce03 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/LagDetector.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/LagDetector.java @@ -54,11 +54,12 @@ public boolean shouldStartAtMacroStart() { @Override public void start() { + IFeature.super.start(); } @Override public void stop() { - + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/LeaveTimer.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/LeaveTimer.java index 05462d63f..eb0289839 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/LeaveTimer.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/LeaveTimer.java @@ -55,11 +55,13 @@ public boolean shouldStartAtMacroStart() { @Override public void start() { leaveClock.schedule(FarmHelperConfig.leaveTime * 60 * 1000L); + IFeature.super.start(); } @Override public void stop() { leaveClock.reset(); + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/MovRecPlayer.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/MovRecPlayer.java index a5288e0d2..b201d007c 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/MovRecPlayer.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/MovRecPlayer.java @@ -204,11 +204,13 @@ public void start() { // LogUtils.sendSuccess("movement.yaw: " + movement.yaw + " yawDifference: " + yawDifference); // LogUtils.sendSuccess("easeTo: " + (movement.yaw + yawDifference)); rotateBeforePlaying.easeTo(movement.yaw + yawDifference, movement.pitch, 500); + IFeature.super.start(); } @Override public void stop() { KeyBindUtils.stopMovement(); + IFeature.super.stop(); if (isRunning()) { LogUtils.sendDebug("[Movement Recorder] Playing has been stopped."); return; diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/PerformanceMode.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/PerformanceMode.java index 12115d39d..315acec58 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/PerformanceMode.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/PerformanceMode.java @@ -48,6 +48,7 @@ public void start() { mc.gameSettings.renderDistanceChunks = 1; mc.gameSettings.limitFramerate = FarmHelperConfig.performanceModeMaxFPS; mc.addScheduledTask(() -> mc.renderGlobal.loadRenderers()); + IFeature.super.start(); } @Override @@ -58,6 +59,7 @@ public void stop() { renderDistanceBefore = 0; maxFpsBefore = 0; mc.addScheduledTask(() -> mc.renderGlobal.loadRenderers()); + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/PestsDestroyer.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/PestsDestroyer.java index 74d595386..18c6e7edb 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/PestsDestroyer.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/PestsDestroyer.java @@ -11,7 +11,10 @@ import com.jelly.farmhelperv2.handler.RotationHandler; import com.jelly.farmhelperv2.pathfinder.FlyPathFinderExecutor; import com.jelly.farmhelperv2.util.*; -import com.jelly.farmhelperv2.util.helper.*; +import com.jelly.farmhelperv2.util.helper.Clock; +import com.jelly.farmhelperv2.util.helper.Rotation; +import com.jelly.farmhelperv2.util.helper.RotationConfiguration; +import com.jelly.farmhelperv2.util.helper.Target; import lombok.Getter; import lombok.Setter; import net.minecraft.block.Block; @@ -81,7 +84,6 @@ public class PestsDestroyer implements IFeature { @Getter private EscapeState escapeState = EscapeState.NONE; private Optional preTpBlockPos = Optional.empty(); - private Optional lastFireworkLocation = Optional.empty(); private long lastFireworkTime = 0; private int getLocationTries = 0; private int flyPathfinderTries = 0; @@ -155,6 +157,7 @@ public void start() { LogUtils.sendWarning("[Pests Destroyer] Starting killing shitters!"); LogUtils.webhookLog("[Pests Destroyer]\\nStarting killing shitters!"); }, MacroHandler.getInstance().isMacroToggled() ? (800 + (long) (Math.random() * 500)) : 0, TimeUnit.MILLISECONDS); + IFeature.super.start(); } @Override @@ -168,7 +171,7 @@ public void stop() { } PlayerUtils.closeScreen(); currentEntityTarget = Optional.empty(); - lastFireworkLocation = Optional.empty(); + resetFireworkInfo(); preTpBlockPos = Optional.empty(); delayBetweenBackTaps.reset(); delayBetweenFireworks.reset(); @@ -180,11 +183,10 @@ public void stop() { lastFireworkTime = 0; getLocationTries = 0; flyPathfinderTries = 0; - FlyPathfinder.getInstance().stuckCounterWithMotion = 0; - FlyPathfinder.getInstance().stuckCounterWithoutMotion = 0; state = States.IDLE; FlyPathFinderExecutor.getInstance().stop(); KeyBindUtils.stopMovement(); + IFeature.super.stop(); } @Override @@ -620,7 +622,7 @@ public void onTickExecute(TickEvent.ClientTickEvent event) { } } - lastFireworkLocation = Optional.empty(); + resetFireworkInfo(); lastFireworkTime = System.currentTimeMillis(); MovingObjectPosition mop = mc.objectMouseOver; if (RotationHandler.getInstance().isRotating()) break; @@ -667,7 +669,7 @@ public void onTickExecute(TickEvent.ClientTickEvent event) { break; } - if (lastFireworkLocation.isPresent()) { + if (lastLocation != null) { if (lastFireworkTime + 250 < System.currentTimeMillis()) { RotationHandler.getInstance().reset(); state = States.FLY_TO_PEST; @@ -693,7 +695,7 @@ public void onTickExecute(TickEvent.ClientTickEvent event) { Entity closestPest = getClosestPest(); if (closestPest == null) { - if (!lastFireworkLocation.isPresent()) { + if (lastLocation == null) { LogUtils.sendDebug("[Pests Destroyer] No firework location found. Looking for a firework."); state = States.GET_LOCATION; break; @@ -705,7 +707,7 @@ public void onTickExecute(TickEvent.ClientTickEvent event) { } if (!FlyPathFinderExecutor.getInstance().isRunning()) { - Vec3 firework = new Vec3(lastFireworkLocation.get().xCoord, Math.min(mc.thePlayer.posY + 1, 80), lastFireworkLocation.get().zCoord); + Vec3 firework = calculateWaypoint(); state = States.GET_LOCATION; if (mc.thePlayer.getDistance(firework.xCoord, firework.yCoord, firework.zCoord) < 2) { int y = 150; @@ -1162,15 +1164,16 @@ public void onEntityDeath(LivingDeathEvent event) { killedEntities.add(nameEntity); } } - RotationHandler.getInstance().reset(); - FlyPathFinderExecutor.getInstance().stop(); - lastFireworkLocation = Optional.empty(); + if (isRunning()) + FlyPathFinderExecutor.getInstance().stop(); + resetFireworkInfo(); lastFireworkTime = 0; currentEntityTarget.ifPresent(e -> { if (!e.equals(event.entity)) { return; } - KeyBindUtils.stopMovement(); + if (isRunning()) + KeyBindUtils.stopMovement(); currentEntityTarget = Optional.empty(); stuckClock.reset(); }); @@ -1184,6 +1187,13 @@ public void onEntityDeath(LivingDeathEvent event) { killedPestsFrom.add(plot.number); } + private int particles = 0; + private final List locations = new ArrayList<>(); + private Vec3 firstLocation = null; + private Vec3 secondLocation = null; + private Vec3 lastLocation = null; + + // Skyhanni credits @SubscribeEvent(receiveCanceled = true) public void onFirework(SpawnParticleEvent event) { if (mc.thePlayer == null || mc.theWorld == null) return; @@ -1194,18 +1204,52 @@ public void onFirework(SpawnParticleEvent event) { EnumParticleTypes type = event.getParticleTypes(); if (type != EnumParticleTypes.REDSTONE) return; - if (lastFireworkLocation.isPresent()) { - if (lastFireworkLocation.get().distanceTo(event.getPos()) > 5) { - return; - } + if (particles > 5) return; + if (firstLocation == null) { + if (mc.thePlayer.getPositionVector().distanceTo(event.getPos()) > 5) return; + firstLocation = event.getPos(); + } else if (secondLocation == null) { + secondLocation = event.getPos(); + lastLocation = event.getPos(); + locations.add(event.getPos()); } else { - if (mc.thePlayer.getPositionVector().distanceTo(event.getPos()) > 5) { + double distanceFromFirst = secondLocation.distanceTo(event.getPos()); + double distance = lastLocation.distanceTo(event.getPos()); + if (Math.abs(distanceFromFirst - distance) > 0.1) { return; } + lastLocation = event.getPos(); + lastFireworkTime = System.currentTimeMillis(); + locations.add(event.getPos()); } + ++particles; + } + + private void resetFireworkInfo() { + particles = 0; + locations.clear(); + firstLocation = null; + secondLocation = null; + lastLocation = null; + lastFireworkTime = 0; + } + + private Vec3 calculateWaypoint() { + if (firstLocation == null) return null; + Vec3 pos = new Vec3(0, 0, 0); + for (int i = 0; i < locations.size(); i++) { + Vec3 particle = locations.get(i); + pos = pos.add(divideVec(particle.subtract(firstLocation), i + 1.0)); + } + return firstLocation.add(multiplyVec(pos, 120.0 / locations.size())); + } + + private Vec3 divideVec(Vec3 vec, double div) { + return new Vec3(vec.xCoord / div, vec.yCoord / div, vec.zCoord / div); + } - lastFireworkTime = System.currentTimeMillis(); - lastFireworkLocation = Optional.of(event.getPos()); + private Vec3 multiplyVec(Vec3 vec, double mul) { + return new Vec3(vec.xCoord * mul, vec.yCoord * mul, vec.zCoord * mul); } @SubscribeEvent diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/PestsDestroyerOnTheTrack.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/PestsDestroyerOnTheTrack.java index 30e3b70f3..043539061 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/PestsDestroyerOnTheTrack.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/PestsDestroyerOnTheTrack.java @@ -1,6 +1,7 @@ package com.jelly.farmhelperv2.feature.impl; import com.jelly.farmhelperv2.config.FarmHelperConfig; +import com.jelly.farmhelperv2.feature.FeatureManager; import com.jelly.farmhelperv2.feature.IFeature; import com.jelly.farmhelperv2.handler.GameStateHandler; import com.jelly.farmhelperv2.handler.MacroHandler; @@ -78,6 +79,7 @@ public void start() { PestsDestroyer.getInstance().getVacuum(currentItem); LogUtils.sendWarning("[" + getName() + "] Started!"); stuckTimer.schedule(FarmHelperConfig.pestsDestroyerOnTheTrackStuckTimer); + IFeature.super.start(); } @Override @@ -91,6 +93,7 @@ public void stop() { delayStart.reset(); stuckTimer.reset(); noPestTimer.reset(); + IFeature.super.stop(); } @Override @@ -114,6 +117,8 @@ public boolean shouldCheckForFailsafes() { public void onTickShouldEnable(TickEvent.PlayerTickEvent event) { if (mc.thePlayer == null) return; if (!MacroHandler.getInstance().isMacroToggled()) return; + if (FeatureManager.getInstance().shouldPauseMacroExecution()) return; + if (MacroHandler.getInstance().isCurrentMacroPaused()) return; if (PestsDestroyer.getInstance().isRunning()) return; if (GameStateHandler.getInstance().inJacobContest() && FarmHelperConfig.dontKillPestsOnTrackDuringJacobsContest) return; @@ -179,7 +184,7 @@ public void onTickExecution(TickEvent.PlayerTickEvent event) { noPestTimer.schedule(500); } if (noPestTimer.isScheduled() && noPestTimer.passed()) { - LogUtils.sendWarning("[" + getName() + "] Pest left your range, stopping!"); + LogUtils.sendWarning("[" + getName() + "] No pests found, stopping!"); stop(); } } diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/PetSwapper.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/PetSwapper.java index 581244f29..8ad54029c 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/PetSwapper.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/PetSwapper.java @@ -68,6 +68,7 @@ public boolean shouldStartAtMacroStart() { @Override public void start() { start(false); + IFeature.super.start(); } @Override @@ -83,6 +84,7 @@ public void stop() { if (MacroHandler.getInstance().isMacroToggled()) { MacroHandler.getInstance().resumeMacro(); } + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/PiPMode.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/PiPMode.java index 79c846be9..e6a696080 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/PiPMode.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/PiPMode.java @@ -70,6 +70,7 @@ public void start() { LogUtils.sendDebug("[PiPMode] Enabled."); setPiPMode(true); enabled = true; + IFeature.super.start(); } @Override @@ -77,6 +78,7 @@ public void stop() { LogUtils.sendDebug("[PiPMode] Disabled."); setPiPMode(false); enabled = false; + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/PlotCleaningHelper.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/PlotCleaningHelper.java index fc8dcb9cc..8dc72d3fd 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/PlotCleaningHelper.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/PlotCleaningHelper.java @@ -86,6 +86,7 @@ public void start() { lastBlockBroken = 0; stuckClock.schedule(7_000); LogUtils.sendSuccess("[Plot Cleaning Helper] Enabled."); + IFeature.super.start(); } @Override @@ -95,6 +96,7 @@ public void stop() { longBreakTarget = null; target = null; LogUtils.sendSuccess("[Plot Cleaning Helper] Disabled."); + stop(); } public void toggle() { diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/ProfitCalculator.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/ProfitCalculator.java index b1b1665a2..e2bdc984c 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/ProfitCalculator.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/ProfitCalculator.java @@ -185,11 +185,13 @@ public void start() { if (ProfitCalculatorHUD.resetStatsBetweenDisabling) { resetProfits(); } + IFeature.super.start(); } @Override public void stop() { updateClock.reset(); + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/Scheduler.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/Scheduler.java index d7c3e04b7..2981e0845 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/Scheduler.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/Scheduler.java @@ -68,12 +68,14 @@ public void start() { if (FarmHelperConfig.pauseSchedulerDuringJacobsContest && GameStateHandler.getInstance().inJacobContest()) { schedulerClock.pause(); } + IFeature.super.start(); } @Override public void stop() { schedulerState = SchedulerState.NONE; schedulerClock.reset(); + IFeature.super.stop(); } @Override diff --git a/src/main/java/com/jelly/farmhelperv2/feature/impl/UngrabMouse.java b/src/main/java/com/jelly/farmhelperv2/feature/impl/UngrabMouse.java index 0282a3432..0b16d9366 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/UngrabMouse.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/UngrabMouse.java @@ -82,6 +82,7 @@ public void start() { } catch (Exception e) { e.printStackTrace(); } + IFeature.super.start(); } @Override @@ -91,6 +92,7 @@ public void stop() { } catch (Exception e) { e.printStackTrace(); } + IFeature.super.stop(); } @Override 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 9fc2f836a..88db309f5 100644 --- a/src/main/java/com/jelly/farmhelperv2/feature/impl/VisitorsMacro.java +++ b/src/main/java/com/jelly/farmhelperv2/feature/impl/VisitorsMacro.java @@ -160,6 +160,7 @@ public void start() { ignoredNPCs.clear(); profitNpc = false; LogUtils.webhookLog("[Visitors Macro]\\nVisitors Macro started"); + IFeature.super.start(); } @Override @@ -177,6 +178,7 @@ public void stop() { servedCustomers.clear(); ignoredNPCs.clear(); }, 5_000, TimeUnit.MILLISECONDS); + IFeature.super.stop(); } @Override @@ -625,32 +627,9 @@ private void onVisitorsState() { delayClock.schedule(getRandomDelay()); return; } - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); + setVisitorsState(VisitorsState.SELECT_NEW_VISITOR); break; - case ROTATE_TO_VISITOR: - if (mc.currentScreen != null) { - PlayerUtils.closeScreen(); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - break; - } -// if (BaritoneHandler.isWalkingToGoalBlock()) { -// return; -// } - if (FlyPathFinderExecutor.getInstance().isRunning()) { - if (!RotationHandler.getInstance().isRotating() && currentCharacter.isPresent()) { - RotationHandler.getInstance().easeTo( - new RotationConfiguration( - new Target(currentCharacter.get()), - FarmHelperConfig.getRandomRotationTime(), - null - ).followTarget(true) - ); - } - return; - } - if (PlayerUtils.getFarmingTool(MacroHandler.getInstance().getCrop(), true, true) != -1) { - mc.thePlayer.inventory.currentItem = PlayerUtils.getFarmingTool(MacroHandler.getInstance().getCrop(), true, true); - } + case SELECT_NEW_VISITOR: if (!getVisitors().findAny().isPresent()) { if (FarmHelperConfig.visitorsMacroAfkInfiniteMode) { enabled = false; @@ -662,6 +641,7 @@ private void onVisitorsState() { } return; } + Entity closest = getClosestVisitor(); if (closest == null) { System.out.println("[Visitors Macro] Couldn't find the closest visitor, waiting..."); @@ -677,39 +657,58 @@ private void onVisitorsState() { return; } LogUtils.sendDebug("Position of visitor: " + result.entityCharacter.getPositionEyes(1)); - if (mc.thePlayer.getDistanceToEntity(result.entityCharacter) > 3) { - Vec3 closestVec = PlayerUtils.getClosestVecAround(result.entityCharacter, 1.25, 90, 45); + currentVisitor = Optional.of(result.nameArmorStand); + currentCharacter = Optional.of(result.entityCharacter); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); + break; + case GET_CLOSE_TO_VISITOR: + if (mc.currentScreen != null) { + PlayerUtils.closeScreen(); + delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); + break; + } +// if (BaritoneHandler.isWalkingToGoalBlock()) { +// return; +// } + if (FlyPathFinderExecutor.getInstance().isRunning()) { + if (!RotationHandler.getInstance().isRotating() && currentCharacter.isPresent()) { + RotationHandler.getInstance().easeTo( + new RotationConfiguration( + new Target(currentCharacter.get()), + FarmHelperConfig.getRandomRotationTime(), + null + ).followTarget(true) + ); + } + return; + } + if (PlayerUtils.getFarmingTool(MacroHandler.getInstance().getCrop(), true, true) != -1) { + mc.thePlayer.inventory.currentItem = PlayerUtils.getFarmingTool(MacroHandler.getInstance().getCrop(), true, true); + } + + assert currentCharacter.isPresent(); + if (mc.thePlayer.getDistanceToEntity(currentCharacter.get()) > 3) { + Vec3 closestVec = PlayerUtils.getClosestVecAround(currentCharacter.get(), 1.25, 90, 45); closestVec = noClosestVecFallback(closestVec); if (closestVec == null) return; - // BaritoneHandler.walkCloserToBlockPos(result.entityCharacter.getPosition(), 1); + // BaritoneHandler.walkCloserToBlockPos(currentCharacter.get().getPosition(), 1); FlyPathFinderExecutor.getInstance().setSprinting(false); FlyPathFinderExecutor.getInstance().setDontRotate(true); FlyPathFinderExecutor.getInstance().findPath(closestVec.addVector(0, 1.8, 0), false, true); - RotationHandler.getInstance().easeTo( - new RotationConfiguration( - new Target(result.entityCharacter), - FarmHelperConfig.getRandomRotationTime(), - null - ).followTarget(true) - ); - setVisitorsState(VisitorsState.OPEN_VISITOR); - } else { - RotationHandler.getInstance().easeTo( - new RotationConfiguration( - new Target(result.entityCharacter), - FarmHelperConfig.getRandomRotationTime(), - null - ).followTarget(true) - ); - setVisitorsState(VisitorsState.OPEN_VISITOR); } - currentVisitor = Optional.of(result.nameArmorStand); - currentCharacter = Optional.of(result.entityCharacter); + RotationHandler.getInstance().easeTo( + new RotationConfiguration( + new Target(currentCharacter.get()), + FarmHelperConfig.getRandomRotationTime(), + null + ).followTarget(true) + ); + setVisitorsState(VisitorsState.OPEN_VISITOR); break; case OPEN_VISITOR: if (mc.currentScreen != null) { RotationHandler.getInstance().reset(); - setVisitorsState(VisitorsState.GET_LIST); + setVisitorsState(VisitorsState.CHECK_VISITOR); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; } @@ -718,7 +717,7 @@ private void onVisitorsState() { } if (currentCharacter.isPresent() && mc.thePlayer.getDistanceToEntity(currentCharacter.get()) > 3) { LogUtils.sendDebug("[Visitors Macro] Walking closer to visitor"); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); break; } assert currentVisitor.isPresent(); @@ -729,7 +728,7 @@ private void onVisitorsState() { if (result2.nameArmorStand.equals(currentVisitor.get()) || result2.entityCharacter.equals(currentCharacter.get()) || entity.equals(result2.entityClickStand)) { LogUtils.sendDebug("[Visitors Macro] Looking at Visitor"); - delayClock.schedule(250); + delayClock.schedule(250 + Math.random() * 200); KeyBindUtils.leftClick(); } else { LogUtils.sendDebug("[Visitors Macro] Looking at something else"); @@ -741,14 +740,22 @@ private void onVisitorsState() { if (moveAwayIfPlayerTooClose()) return; LogUtils.sendDebug("[Visitors Macro] Looking at nothing"); LogUtils.sendDebug("[Visitors Macro] Distance: " + mc.thePlayer.getDistanceToEntity(currentCharacter.get())); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); break; - case GET_LIST: + case CHECK_VISITOR: if (mc.currentScreen == null) { setVisitorsState(VisitorsState.OPEN_VISITOR); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; } + + if (!itemsToBuy.isEmpty() && itemsToBuy.stream().allMatch(pair -> InventoryUtils.getAmountOfItemInInventory(pair.getLeft()) >= pair.getRight())) { + LogUtils.sendDebug("[Visitors Macro] Have items in sack or enough items in inventory"); + setVisitorsState(VisitorsState.FINISH_VISITOR); + delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); + break; + } + Slot npcSlot = InventoryUtils.getSlotOfIdInContainer(13); if (npcSlot == null) break; ItemStack npcItemStack = npcSlot.getStack(); @@ -760,7 +767,7 @@ private void onVisitorsState() { String npcName = isNpc ? StringUtils.stripControlCodes(npcSlot.getStack().getDisplayName()) : ""; if (npcName.isEmpty()) { LogUtils.sendError("[Visitors Macro] Opened wrong NPC."); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); PlayerUtils.closeScreen(); delayClock.schedule(getRandomDelay()); break; @@ -924,7 +931,7 @@ private void onVisitorsState() { if (ignoredNPCs.contains(currentVisitor.get())) { LogUtils.sendWarning("[Visitors Macro] Ignoring NPC: " + npcName); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); PlayerUtils.closeScreen(); delayClock.schedule(getRandomDelay()); break; @@ -940,7 +947,8 @@ private void onVisitorsState() { case CLOSE_VISITOR: if (rejectVisitor) { if (mc.currentScreen == null) { - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); +// setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); delayClock.schedule(FarmHelperConfig.getRandomRotationTime()); break; } @@ -956,108 +964,108 @@ private void onVisitorsState() { case BUY_STATE: onBuyState(); break; - case ROTATE_TO_VISITOR_2: - if (mc.currentScreen != null) { - PlayerUtils.closeScreen(); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - break; - } - if (FlyPathFinderExecutor.getInstance().isRunning()) { - if (!RotationHandler.getInstance().isRotating() && currentCharacter.isPresent()) { - RotationHandler.getInstance().easeTo( - new RotationConfiguration( - new Target(currentCharacter.get()), - FarmHelperConfig.getRandomRotationTime(), - null - ) - ); - } - return; - } - if (RotationHandler.getInstance().isRotating()) - RotationHandler.getInstance().reset(); - if (PlayerUtils.getFarmingTool(MacroHandler.getInstance().getCrop(), true, true) != -1) { - mc.thePlayer.inventory.currentItem = PlayerUtils.getFarmingTool(MacroHandler.getInstance().getCrop(), true, true); - } - assert currentVisitor.isPresent(); - assert currentCharacter.isPresent(); - - if (mc.objectMouseOver != null && mc.objectMouseOver.entityHit != null) { - Entity entity = mc.objectMouseOver.entityHit; - VisitorEntities result2 = getVisitorEntities(entity); - if (result2 == null) break; - - if (result2.entityCharacter.equals(currentVisitor.get()) || result2.entityCharacter.equals(currentCharacter.get()) || entity.equals(result2.entityClickStand)) { - RotationHandler.getInstance().reset(); - LogUtils.sendDebug("[Visitors Macro] Looking at Visitor"); - setVisitorsState(VisitorsState.OPEN_VISITOR_2); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - break; - } - } - LogUtils.sendDebug("Position of visitor: " + currentCharacter.get().getPositionEyes(1)); - if (mc.thePlayer.getDistanceToEntity(currentCharacter.get()) > 3) { - Vec3 closestVec = PlayerUtils.getClosestVecAround(currentCharacter.get(), 1.25, 90, 45); - closestVec = noClosestVecFallback(closestVec); - if (closestVec == null) return; -// BaritoneHandler.walkCloserToBlockPos(currentCharacter.get().getPosition(), 1); - FlyPathFinderExecutor.getInstance().setSprinting(false); - FlyPathFinderExecutor.getInstance().setDontRotate(true); - FlyPathFinderExecutor.getInstance().findPath(closestVec.addVector(0, 1.8, 0), false, true); - RotationHandler.getInstance().easeTo( - new RotationConfiguration( - new Target(currentCharacter.get()), - FarmHelperConfig.getRandomRotationTime(), - null - ).followTarget(true) - ); - } else { - RotationHandler.getInstance().easeTo( - new RotationConfiguration( - new Target(currentCharacter.get()), - FarmHelperConfig.getRandomRotationTime(), - null - ).easeOutBack(Math.random() > 0.5) - ); - setVisitorsState(VisitorsState.OPEN_VISITOR_2); - } - break; - case OPEN_VISITOR_2: - if (mc.currentScreen != null) { - RotationHandler.getInstance().reset(); - setVisitorsState(VisitorsState.FINISH_VISITOR); - delayClock.schedule(getRandomDelay()); - break; - } -// if (BaritoneHandler.isWalkingToGoalBlock()) return; - assert currentVisitor.isPresent(); - assert currentCharacter.isPresent(); - if (mc.objectMouseOver != null && mc.objectMouseOver.entityHit != null) { - Entity entity = mc.objectMouseOver.entityHit; - VisitorEntities result2 = getVisitorEntities(entity); - if (result2 == null) break; - - if (result2.nameArmorStand.equals(currentVisitor.get()) || result2.entityCharacter.equals(currentCharacter.get()) || entity.equals(result2.entityClickStand)) { - LogUtils.sendDebug("[Visitors Macro] Looking at Visitor"); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - KeyBindUtils.leftClick(); - } else { - LogUtils.sendDebug("[Visitors Macro] Looking at something else"); - LogUtils.sendDebug("[Visitors Macro] Looking at: " + entity.getName()); - if (!RotationHandler.getInstance().isRotating()) - moveSideways(); - } - break; - } - if (RotationHandler.getInstance().isRotating()) return; - if (moveAwayIfPlayerTooClose()) return; - LogUtils.sendDebug("[Visitors Macro] Looking at nothing"); - LogUtils.sendDebug("[Visitors Macro] Distance: " + mc.thePlayer.getDistanceToEntity(currentCharacter.get())); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); - break; +// case ROTATE_TO_VISITOR_2: +// if (mc.currentScreen != null) { +// PlayerUtils.closeScreen(); +// delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); +// break; +// } +// if (FlyPathFinderExecutor.getInstance().isRunning()) { +// if (!RotationHandler.getInstance().isRotating() && currentCharacter.isPresent()) { +// RotationHandler.getInstance().easeTo( +// new RotationConfiguration( +// new Target(currentCharacter.get()), +// FarmHelperConfig.getRandomRotationTime(), +// null +// ) +// ); +// } +// return; +// } +// if (RotationHandler.getInstance().isRotating()) +// RotationHandler.getInstance().reset(); +// if (PlayerUtils.getFarmingTool(MacroHandler.getInstance().getCrop(), true, true) != -1) { +// mc.thePlayer.inventory.currentItem = PlayerUtils.getFarmingTool(MacroHandler.getInstance().getCrop(), true, true); +// } +// assert currentVisitor.isPresent(); +// assert currentCharacter.isPresent(); +// +// if (mc.objectMouseOver != null && mc.objectMouseOver.entityHit != null) { +// Entity entity = mc.objectMouseOver.entityHit; +// VisitorEntities result2 = getVisitorEntities(entity); +// if (result2 == null) break; +// +// if (result2.entityCharacter.equals(currentVisitor.get()) || result2.entityCharacter.equals(currentCharacter.get()) || entity.equals(result2.entityClickStand)) { +// RotationHandler.getInstance().reset(); +// LogUtils.sendDebug("[Visitors Macro] Looking at Visitor"); +// setVisitorsState(VisitorsState.OPEN_VISITOR_2); +// delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); +// break; +// } +// } +// LogUtils.sendDebug("Position of visitor: " + currentCharacter.get().getPositionEyes(1)); +// if (mc.thePlayer.getDistanceToEntity(currentCharacter.get()) > 3) { +// Vec3 closestVec = PlayerUtils.getClosestVecAround(currentCharacter.get(), 1.25, 90, 45); +// closestVec = noClosestVecFallback(closestVec); +// if (closestVec == null) return; +//// BaritoneHandler.walkCloserToBlockPos(currentCharacter.get().getPosition(), 1); +// FlyPathFinderExecutor.getInstance().setSprinting(false); +// FlyPathFinderExecutor.getInstance().setDontRotate(true); +// FlyPathFinderExecutor.getInstance().findPath(closestVec.addVector(0, 1.8, 0), false, true); +// RotationHandler.getInstance().easeTo( +// new RotationConfiguration( +// new Target(currentCharacter.get()), +// FarmHelperConfig.getRandomRotationTime(), +// null +// ).followTarget(true) +// ); +// } else { +// RotationHandler.getInstance().easeTo( +// new RotationConfiguration( +// new Target(currentCharacter.get()), +// FarmHelperConfig.getRandomRotationTime(), +// null +// ).easeOutBack(Math.random() > 0.5) +// ); +// setVisitorsState(VisitorsState.OPEN_VISITOR_2); +// } +// break; +// case OPEN_VISITOR_2: +// if (mc.currentScreen != null) { +// RotationHandler.getInstance().reset(); +// setVisitorsState(VisitorsState.FINISH_VISITOR); +// delayClock.schedule(getRandomDelay()); +// break; +// } +//// if (BaritoneHandler.isWalkingToGoalBlock()) return; +// assert currentVisitor.isPresent(); +// assert currentCharacter.isPresent(); +// if (mc.objectMouseOver != null && mc.objectMouseOver.entityHit != null) { +// Entity entity = mc.objectMouseOver.entityHit; +// VisitorEntities result2 = getVisitorEntities(entity); +// if (result2 == null) break; +// +// if (result2.nameArmorStand.equals(currentVisitor.get()) || result2.entityCharacter.equals(currentCharacter.get()) || entity.equals(result2.entityClickStand)) { +// LogUtils.sendDebug("[Visitors Macro] Looking at Visitor"); +// delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); +// KeyBindUtils.leftClick(); +// } else { +// LogUtils.sendDebug("[Visitors Macro] Looking at something else"); +// LogUtils.sendDebug("[Visitors Macro] Looking at: " + entity.getName()); +// if (!RotationHandler.getInstance().isRotating()) +// moveSideways(); +// } +// break; +// } +// if (RotationHandler.getInstance().isRotating()) return; +// if (moveAwayIfPlayerTooClose()) return; +// LogUtils.sendDebug("[Visitors Macro] Looking at nothing"); +// LogUtils.sendDebug("[Visitors Macro] Distance: " + mc.thePlayer.getDistanceToEntity(currentCharacter.get())); +// setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); +// break; case FINISH_VISITOR: if (mc.currentScreen == null) { - setVisitorsState(VisitorsState.OPEN_VISITOR_2); + setVisitorsState(VisitorsState.OPEN_VISITOR); delayClock.schedule(getRandomDelay()); break; } @@ -1073,7 +1081,7 @@ private void onVisitorsState() { } if (currentVisitor.isPresent() && !currentVisitor.get().getCustomNameTag().contains(inventoryName)) { PlayerUtils.closeScreen(); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); delayClock.schedule(getRandomDelay()); break; } @@ -1114,7 +1122,7 @@ private void onVisitorsState() { currentVisitor.ifPresent(servedCustomers::add); currentRewards.clear(); profitNpc = false; - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); + setVisitorsState(VisitorsState.SELECT_NEW_VISITOR); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); break; case END: @@ -1287,7 +1295,7 @@ private void rejectCurrentVisitor() { currentVisitor.ifPresent(servedCustomers::add); currentRewards.clear(); delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); profitNpc = false; } @@ -1326,32 +1334,12 @@ private void onBuyState() { case WAIT_FOR_AUTOBAZAAR_FINISH: if (AutoBazaar.getInstance().wasPriceManipulated()) { LogUtils.sendDebug("[Visitors Macro] Price manipulation detected, skipping..."); - if (profitNpc) { - LogUtils.sendDebug("[Visitors Macro] The visitor is profitable, adding to ignore list..."); - ignoredNPCs.add(currentVisitor.get()); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); - } else { - rejectVisitor = true; - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); - } - setBuyState(BuyState.NONE); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - PlayerUtils.closeScreen(); + manipulatedPriceFallback(); break; } if (AutoBazaar.getInstance().hasNotFoundOnBZ()) { LogUtils.sendDebug("[Visitors Macro] Couldn't find " + itemsToBuy.get(0).getLeft() + " amount " + itemsToBuy.get(0).getRight() + ", skipping..."); - if (profitNpc) { - LogUtils.sendDebug("[Visitors Macro] The visitor is profitable, adding to ignore list..."); - ignoredNPCs.add(currentVisitor.get()); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); - } else { - rejectVisitor = true; - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); - } - setBuyState(BuyState.NONE); - delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); - PlayerUtils.closeScreen(); + manipulatedPriceFallback(); break; } if (AutoBazaar.getInstance().hasFailed()) { @@ -1371,11 +1359,28 @@ private void onBuyState() { break; case END: setBuyState(BuyState.NONE); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); +// setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); break; } } + private void manipulatedPriceFallback() { + if (profitNpc) { + LogUtils.sendDebug("[Visitors Macro] The visitor is profitable, adding to ignore list..."); + currentVisitor.ifPresent(ignoredNPCs::add); +// setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); + setVisitorsState(VisitorsState.SELECT_NEW_VISITOR); + } else { + rejectVisitor = true; +// setVisitorsState(VisitorsState.ROTATE_TO_VISITOR_2); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); + } + setBuyState(BuyState.NONE); + delayClock.schedule(FarmHelperConfig.getRandomGUIMacroDelay()); + PlayerUtils.closeScreen(); + } + private long getRandomDelay() { return (long) (500 + Math.random() * 500); } @@ -1454,7 +1459,7 @@ public void onReceiveChat(ClientChatReceivedEvent event) { LogUtils.sendWarning("[Visitors Macro] Bought item probably got compacted! Ignoring that visitor..."); servedCustomers.remove(currentVisitor.get()); ignoredNPCs.add(currentVisitor.get()); - setVisitorsState(VisitorsState.ROTATE_TO_VISITOR); + setVisitorsState(VisitorsState.GET_CLOSE_TO_VISITOR); PlayerUtils.closeScreen(); delayClock.schedule(getRandomDelay()); } @@ -1492,13 +1497,14 @@ enum CompactorState { enum VisitorsState { NONE, - ROTATE_TO_VISITOR, + SELECT_NEW_VISITOR, + GET_CLOSE_TO_VISITOR, OPEN_VISITOR, - GET_LIST, + CHECK_VISITOR, CLOSE_VISITOR, BUY_STATE, - ROTATE_TO_VISITOR_2, - OPEN_VISITOR_2, + // ROTATE_TO_VISITOR_2, +// OPEN_VISITOR_2, FINISH_VISITOR, END } diff --git a/src/main/java/com/jelly/farmhelperv2/handler/GameStateHandler.java b/src/main/java/com/jelly/farmhelperv2/handler/GameStateHandler.java index 36dfbc52f..e04b21de7 100644 --- a/src/main/java/com/jelly/farmhelperv2/handler/GameStateHandler.java +++ b/src/main/java/com/jelly/farmhelperv2/handler/GameStateHandler.java @@ -4,6 +4,7 @@ import com.jelly.farmhelperv2.event.*; import com.jelly.farmhelperv2.failsafe.FailsafeManager; import com.jelly.farmhelperv2.failsafe.impl.DirtFailsafe; +import com.jelly.farmhelperv2.failsafe.impl.JacobFailsafe; import com.jelly.farmhelperv2.feature.impl.AutoRepellent; import com.jelly.farmhelperv2.feature.impl.PestsDestroyer; import com.jelly.farmhelperv2.util.*; @@ -642,11 +643,15 @@ public boolean inGarden() { } public boolean inJacobContest() { - if (FarmHelperConfig.jacobContestCurrentCropsOnly) { - return isInJacobContest && (!jacobsContestCrop.isPresent() || jacobsContestCrop.get() == MacroHandler.getInstance().getCrop()); - } else { + if (FailsafeManager.getInstance().triggeredFailsafe.isPresent() && FailsafeManager.getInstance().triggeredFailsafe.get().equals(JacobFailsafe.getInstance())) { return isInJacobContest; } + if (FarmHelperConfig.jacobContestCurrentCropsOnly) { + if (jacobsContestCrop.isPresent()) { + return isInJacobContest && jacobsContestCrop.get() == MacroHandler.getInstance().getCrop(); + } + } + return isInJacobContest; } public boolean isGuestOnGarden() { diff --git a/src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java b/src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java index 93112d218..4799c8f99 100644 --- a/src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java +++ b/src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java @@ -1,6 +1,5 @@ package com.jelly.farmhelperv2.handler; -import baritone.api.BaritoneAPI; import cc.polyfrost.oneconfig.utils.Multithreading; import com.jelly.farmhelperv2.config.FarmHelperConfig; import com.jelly.farmhelperv2.config.struct.Rewarp; @@ -20,7 +19,6 @@ import com.jelly.farmhelperv2.util.RenderUtils; import com.jelly.farmhelperv2.util.helper.AudioManager; import com.jelly.farmhelperv2.util.helper.Clock; -import com.jelly.farmhelperv2.util.helper.FlyPathfinder; import com.jelly.farmhelperv2.util.helper.Timer; import lombok.AllArgsConstructor; import lombok.Getter; @@ -122,11 +120,6 @@ public void toggleMacro() { if (isMacroToggled()) { this.disableMacro(); } else { - if (FlyPathfinder.getInstance().isRunning()) { - FlyPathfinder.getInstance().stop(); - } else { - BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().cancelEverything(); - } if (FlyPathFinderExecutor.getInstance().isRunning()) FlyPathFinderExecutor.getInstance().stop(); if (VisitorsMacro.getInstance().isRunning() || FarmHelperConfig.visitorsMacroAfkInfiniteMode) { @@ -246,11 +239,6 @@ public void disableMacro() { UngrabMouse.getInstance().stop(); disableCurrentMacro(); setCurrentMacro(Optional.empty()); - if (FlyPathfinder.getInstance().isRunning()) { - FlyPathfinder.getInstance().stop(); - } else { - BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().cancelEverything(); - } } public void pauseMacro(boolean scheduler) { diff --git a/src/main/java/com/jelly/farmhelperv2/handler/RotationHandler.java b/src/main/java/com/jelly/farmhelperv2/handler/RotationHandler.java index faad44b41..9d34bc4f2 100644 --- a/src/main/java/com/jelly/farmhelperv2/handler/RotationHandler.java +++ b/src/main/java/com/jelly/farmhelperv2/handler/RotationHandler.java @@ -266,8 +266,8 @@ public void onRender(RenderWorldLastEvent event) { if (shouldRotate(targetRotation, 0.1f)) { float needYaw = (targetRotation.getYaw() - currentYaw); float needPitch = (targetRotation.getPitch() - currentPitch); - needYaw *= (float) (0.08f + Math.random() * 0.08f); - needPitch *= (float) (0.08f + Math.random() * 0.08f); + needYaw *= (float) (0.04f + Math.random() * 0.04f); + needPitch *= (float) (0.04f + Math.random() * 0.04f); float scaledFps = 60f / Minecraft.getDebugFPS(); needYaw *= scaledFps; needPitch *= scaledFps; diff --git a/src/main/java/com/jelly/farmhelperv2/hud/DebugHUD.java b/src/main/java/com/jelly/farmhelperv2/hud/DebugHUD.java index 8b71ec0fb..23d83df16 100644 --- a/src/main/java/com/jelly/farmhelperv2/hud/DebugHUD.java +++ b/src/main/java/com/jelly/farmhelperv2/hud/DebugHUD.java @@ -11,7 +11,6 @@ import com.jelly.farmhelperv2.feature.impl.*; import com.jelly.farmhelperv2.handler.GameStateHandler; import com.jelly.farmhelperv2.handler.MacroHandler; -import com.jelly.farmhelperv2.util.helper.FlyPathfinder; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; @@ -122,6 +121,7 @@ protected void getLines(List lines, boolean example) { lines.add(" Clock: " + AutoGodPot.getInstance().getDelayClock().getRemainingTime()); } if (!FeatureManager.getInstance().getCurrentRunningFeatures().isEmpty()) { + lines.add("Blocking Main Thread: " + FeatureManager.getInstance().getPauseExecutionFeatures().size()); lines.add("Running Features:"); FeatureManager.getInstance().getCurrentRunningFeatures().forEach(feature -> lines.add(" " + feature.getName())); } @@ -136,17 +136,6 @@ protected void getLines(List lines, boolean example) { String.format(" Current Entity Target: %.2f %.2f %.2f", target.getPositionVector().xCoord, target.getPositionVector().yCoord, target.getPositionVector().zCoord)) ); } - if (FlyPathfinder.getInstance().isRunning()) { - lines.add("FlyPathfinder"); - lines.add(" Path size: " + FlyPathfinder.getInstance().getPathBlocks().size()); - lines.add(String.format(" Player speed: %.2f", FlyPathfinder.getInstance().getPlayerSpeed())); - lines.add(" Goal: " + FlyPathfinder.getInstance().getGoal()); - lines.add(" Deceleration:"); - lines.add(" Left: " + FlyPathfinder.getInstance().isDeceleratingLeft); - lines.add(" Right: " + FlyPathfinder.getInstance().isDeceleratingRight); - lines.add(" Forward: " + FlyPathfinder.getInstance().isDeceleratingForward); - lines.add(" Backward: " + FlyPathfinder.getInstance().isDeceleratingBackward); - } if (AutoSprayonator.getInstance().isRunning()) { lines.add("Auto Sprayonator"); lines.add(" Enable Delay: " + AutoSprayonator.getInstance().getEnableDelay().getRemainingTime()); diff --git a/src/main/java/com/jelly/farmhelperv2/macro/AbstractMacro.java b/src/main/java/com/jelly/farmhelperv2/macro/AbstractMacro.java index d2e7b5b3c..475f3fd84 100644 --- a/src/main/java/com/jelly/farmhelperv2/macro/AbstractMacro.java +++ b/src/main/java/com/jelly/farmhelperv2/macro/AbstractMacro.java @@ -175,7 +175,7 @@ public void onTick() { MacroHandler.getInstance().setCrop(crop); } } - + if (rewarpDelay.isScheduled() && !rewarpDelay.passed()) { return; } @@ -232,11 +232,6 @@ public void onTick() { return; } -// if (LagDetector.getInstance().isLagging()) { -// LogUtils.sendDebug("Blocking changing movement due to lag!"); -// return; -// } - PlayerUtils.getTool(); // Update or invoke state, based on if player is moving or not diff --git a/src/main/java/com/jelly/farmhelperv2/pathfinder/FlyPathFinderExecutor.java b/src/main/java/com/jelly/farmhelperv2/pathfinder/FlyPathFinderExecutor.java index a9a6adf51..5e8d60591 100644 --- a/src/main/java/com/jelly/farmhelperv2/pathfinder/FlyPathFinderExecutor.java +++ b/src/main/java/com/jelly/farmhelperv2/pathfinder/FlyPathFinderExecutor.java @@ -366,7 +366,6 @@ public void onTickNeededYaw(TickEvent.ClientTickEvent event) { } Vec3 lastElem = copyPath.get(copyPath.size() - 1); if (targetEntity != null) { - float velocity = (float) Math.sqrt(mc.thePlayer.motionX * mc.thePlayer.motionX + mc.thePlayer.motionZ * mc.thePlayer.motionZ); if (targetEntity instanceof EntityArmorStand) { Entity properEntity = PlayerUtils.getEntityCuttingOtherEntity(targetEntity, e -> !(e instanceof EntityArmorStand)); if (properEntity != null) { @@ -380,12 +379,7 @@ public void onTickNeededYaw(TickEvent.ClientTickEvent event) { } float distance = (float) mc.thePlayer.getPositionVector().distanceTo(targetPos); float distancePath = (float) mc.thePlayer.getPositionVector().distanceTo(lastElem); - System.out.println("Velo: " + velocity); - System.out.println("TargetPos: " + targetPos); - System.out.println("Distance: " + distance); - System.out.println("EntityVelo: " + entityVelocity); if (willArriveAtDestinationAfterStopping(lastElem) && entityVelocity < 0.15) { - System.out.println("Will arrive"); stop(); return; } @@ -394,7 +388,6 @@ public void onTickNeededYaw(TickEvent.ClientTickEvent event) { return; } } else if (willArriveAtDestinationAfterStopping(lastElem) || mc.thePlayer.getDistance(lastElem.xCoord, lastElem.yCoord, lastElem.zCoord) < 0.3) { - System.out.println("stopping"); stop(); return; } @@ -459,20 +452,16 @@ else if (this.neededYaw != Integer.MIN_VALUE) { if (fly(next, current)) return; if (verticalDirection.equals(VerticalDirection.HIGHER)) { keyBindings.add(mc.gameSettings.keyBindJump); - System.out.println("Raising 1"); loweringRaisingDelay.schedule(750); } else if (verticalDirection.equals(VerticalDirection.LOWER)) { keyBindings.add(mc.gameSettings.keyBindSneak); - System.out.println("Lowering 1"); loweringRaisingDelay.schedule(750); } else if (loweringRaisingDelay.passed() && (getBlockUnder() instanceof BlockCactus || distanceY > 0.5) && (((EntityPlayerAccessor) mc.thePlayer).getFlyToggleTimer() == 0 || mc.gameSettings.keyBindJump.isKeyDown())) { keyBindings.add(mc.gameSettings.keyBindJump); - System.out.println("Raising 2"); } else if (loweringRaisingDelay.passed() && distanceY < -0.5) { Block blockUnder = getBlockUnder(); if (!mc.thePlayer.onGround && mc.thePlayer.capabilities.isFlying && !(blockUnder instanceof BlockCactus) && !(blockUnder instanceof BlockSoulSand)) { keyBindings.add(mc.gameSettings.keyBindSneak); - System.out.println("Lowering 2"); } } } else { // only walking @@ -482,7 +471,6 @@ else if (this.neededYaw != Integer.MIN_VALUE) { } if (sprinting) { -// mc.thePlayer.setSprinting(FarmHelperConfig.sprintWhileFlying && neededKeys.contains(mc.gameSettings.keyBindForward) && !neededKeys.contains(mc.gameSettings.keyBindSneak) && current.distanceTo(new Vec3(next.xCoord, current.yCoord, next.zCoord)) > 6); keyBindings.add(mc.gameSettings.keyBindSprint); } @@ -510,35 +498,6 @@ private Vec3 predictStoppingPosition() { return new Vec3(playerSimulation.posX, playerSimulation.posY, playerSimulation.posZ); } - private void stopAndDecelerate() { - float velocity = (float) Math.sqrt(mc.thePlayer.motionX * mc.thePlayer.motionX + mc.thePlayer.motionZ * mc.thePlayer.motionZ); - LogUtils.sendDebug("Stopping and decelerating. Velocity: " + velocity); - if (Math.abs(velocity) < 0.2) { - LogUtils.sendSuccess("Arrived at destination"); - stop(); - } else { - state = State.DECELERATING; - if (this.target == null) { - LogUtils.sendDebug("????????"); - stop(); - return; - } - - float rotationBasedOnMotion = (float) Math.toDegrees(Math.atan2(mc.thePlayer.motionZ, mc.thePlayer.motionX)) - 90; - LogUtils.sendDebug("Decelerating. Rotation based on motion: " + rotationBasedOnMotion); - neededYaw = rotationBasedOnMotion; - mc.thePlayer.setSprinting(false); - if (FarmHelperConfig.flyPathfinderOringoCompatible) { - List keyBindings = new ArrayList<>(KeyBindUtils.getOppositeKeys(KeyBindUtils.getNeededKeyPresses(neededYaw))); - keyBindings.add(mc.gameSettings.keyBindUseItem.isKeyDown() ? mc.gameSettings.keyBindUseItem : null); - keyBindings.add(mc.gameSettings.keyBindAttack.isKeyDown() ? mc.gameSettings.keyBindAttack : null); - KeyBindUtils.holdThese(keyBindings.toArray(new KeyBinding[0])); - } else { - KeyBindUtils.holdThese(mc.gameSettings.keyBindBack, mc.gameSettings.keyBindUseItem.isKeyDown() ? mc.gameSettings.keyBindUseItem : null, mc.gameSettings.keyBindAttack.isKeyDown() ? mc.gameSettings.keyBindAttack : null); - } - } - } - private Block getBlockUnder() { Vec3 current = mc.thePlayer.getPositionVector(); Vec3 direction = current.addVector(0, 0.5, 0); diff --git a/src/main/java/com/jelly/farmhelperv2/util/PlayerUtils.java b/src/main/java/com/jelly/farmhelperv2/util/PlayerUtils.java index c2e1f3d9a..ed8411f97 100644 --- a/src/main/java/com/jelly/farmhelperv2/util/PlayerUtils.java +++ b/src/main/java/com/jelly/farmhelperv2/util/PlayerUtils.java @@ -51,7 +51,7 @@ public static FarmHelperConfig.CropEnum getFarmingCrop() { if (!foundCropUnderMouse) { for (int x = -3; x < 3; x++) { for (int y = -1; y < 5; y++) { - for (int z = -1; z < 3; z++) { + for (int z = 0; z < 3; z++) { float yaw; if (MacroHandler.getInstance().getCurrentMacro().isPresent()) { yaw = MacroHandler.getInstance().getCurrentMacro().get().getClosest90Deg().orElse(AngleUtils.getClosest()); @@ -67,7 +67,7 @@ public static FarmHelperConfig.CropEnum getFarmingCrop() { if (!(block instanceof BlockCrops || block instanceof BlockReed || block instanceof BlockCocoa || block instanceof BlockNetherWart || block instanceof BlockMelon || block instanceof BlockPumpkin || block instanceof BlockMushroom || block instanceof BlockCactus)) continue; - if (closestCrop == null || mc.thePlayer.getPosition().distanceSq(pos.getX(), pos.getY(), pos.getZ()) < mc.thePlayer.getPosition().distanceSq(closestCrop.getRight().getX(), closestCrop.getRight().getY(), closestCrop.getRight().getZ())) { + if (closestCrop == null || mc.thePlayer.getPositionVector().distanceTo(new Vec3(pos.getX() + 0.5f, pos.getY(), pos.getZ() + 0.5f)) < mc.thePlayer.getPositionVector().distanceTo(new Vec3(closestCrop.getRight().getX() + 0.5f, closestCrop.getRight().getY(), closestCrop.getRight().getZ() + 0.5f))) { closestCrop = Pair.of(block, pos); } } @@ -239,16 +239,16 @@ public static boolean isStandingOnRewarpLocation() { if (FarmHelperConfig.rewarpList.isEmpty()) return false; Rewarp closest = null; double closestDistance = Double.MAX_VALUE; + BlockPos playerPos = BlockUtils.getRelativeBlockPos(0, 0, 0); for (Rewarp rewarp : FarmHelperConfig.rewarpList) { - double distance = rewarp.getDistance(new BlockPos(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ)); + double distance = rewarp.getDistance(playerPos); if (distance < closestDistance) { closest = rewarp; closestDistance = distance; } } if (closest == null) return false; - BlockPos playerPos = BlockUtils.getRelativeBlockPos(0, 0, 0); - return playerPos.distanceSqToCenter(closest.getX() + 0.5, closest.getY() + 0.5, closest.getZ() + 0.5) < 1; + return closest.isTheSameAs(playerPos); } public static boolean shouldPushBack() { @@ -307,7 +307,7 @@ public static boolean isSpawnLocationSet() { public static boolean isStandingOnSpawnPoint() { BlockPos pos = BlockUtils.getRelativeBlockPos(0, 0, 0); BlockPos spawnPoint = new BlockPos(FarmHelperConfig.spawnPosX + 0.5, FarmHelperConfig.spawnPosY + 0.5, FarmHelperConfig.spawnPosZ + 0.5); - return pos.distanceSqToCenter(spawnPoint.getX(), spawnPoint.getY(), spawnPoint.getZ()) < 1; + return pos.equals(spawnPoint); } public static Vec3 getSpawnLocation() {