Skip to content

Commit

Permalink
Utils:
Browse files Browse the repository at this point in the history
 = Fix for 'Your spawnpoint is obstructed!'

Pet Swapper:
 = Fixes

Pests Destroyer:
 = Small tweaks

Game State:
 = Always hold W in water fixes

Others:
 + Added Patcher's mixin for removing log spam in console
 + Added timer on top of the screen for the next tp (in case of pests destroyer 'You can't travel while in combat' etc)
 = Spawn and rewarp points' visibility is based on distance and doesn't draw if further than 50 blocks. Small performance tweak
  • Loading branch information
May2Beez committed Mar 9, 2024
1 parent fb4a7b4 commit c323136
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 23 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ baseGroup=com.jelly.farmhelperv2
mcVersion=1.8.9
modid=farmhelperv2
modName=FarmHelper
version=2.4.5-pre28
version=2.4.5-pre29
shouldRelease=true
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ public void onTickExecute(TickEvent.ClientTickEvent event) {
KeyBindUtils.stopMovement();

if (PlayerUtils.isPlayerSuffocating() || !BlockUtils.canFlyHigher(5)) {
LogUtils.sendDebug("[Pests Destroyer] The player is suffocating and/or it can't fly higher. Going back to spawnpoint.");
LogUtils.sendWarning("[Pests Destroyer] The player is suffocating and/or it can't fly higher. Going back to spawnpoint.");
delayClock.schedule(1_000 + Math.random() * 500);
MacroHandler.getInstance().triggerWarpGarden(true, false);
state = States.CHECKING_SPAWN;
Expand All @@ -493,8 +493,10 @@ public void onTickExecute(TickEvent.ClientTickEvent event) {
if (MacroHandler.getInstance().isTeleporting()) return;

if (!BlockUtils.canFlyHigher(4)) {
LogUtils.sendError("[Pests Destroyer] Your spawnpoint is obstructed! Make sure there is no block above your spawnpoint!");
LogUtils.sendError("[Pests Destroyer] Your spawnpoint is obstructed! Make sure there is no block above your spawnpoint! Disabling Pests Destroyer!");
stop();
FarmHelperConfig.enablePestsDestroyer = false;
finishMacro();
} else {
state = States.GET_CLOSEST_PLOT;
LogUtils.sendDebug("[Pests Destroyer] Spawnpoint is not obstructed");
Expand Down Expand Up @@ -574,9 +576,13 @@ public void onTickExecute(TickEvent.ClientTickEvent event) {
return;
}

if (hasBlocksAround()) {
if (!mc.thePlayer.capabilities.isFlying) {
fly();
break;
}
if (hasBlocksAround()) {
KeyBindUtils.holdThese(mc.gameSettings.keyBindJump);
break;
} else {
if (mc.gameSettings.keyBindJump.isKeyDown()) {
KeyBindUtils.stopMovement();
Expand Down
48 changes: 35 additions & 13 deletions src/main/java/com/jelly/farmhelperv2/feature/impl/PetSwapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public class PetSwapper implements IFeature {
List<ItemStack> inventory;
@Setter
private boolean enabled;
private boolean dontEnableUntilEndOfContest = false;

public static PetSwapper getInstance() {
if (instance == null) {
Expand Down Expand Up @@ -74,19 +75,23 @@ public void stop() {
if (enabled)
LogUtils.sendWarning("[Pet Swapper] Disabled!");
enabled = false;
resetStatesAfterMacroDisabled();
inventory = null;
currentState = State.NONE;
delayClock.reset();
PlayerUtils.closeScreen();
KeyBindUtils.stopMovement();
if (MacroHandler.getInstance().isMacroToggled()) {
MacroHandler.getInstance().resumeMacro();
}
}

@Override
public void resetStatesAfterMacroDisabled() {
currentState = State.NONE;
delayClock.reset();
previousPet = null;
getPreviousPet = false;
hasPetChangedDuringThisContest = false;
inventory = null;
dontEnableUntilEndOfContest = false;
}

@Override
Expand All @@ -102,10 +107,13 @@ public boolean shouldCheckForFailsafes() {
public void start(boolean getPreviousPet) {
if (enabled) return;
PlayerUtils.closeScreen();
LogUtils.sendDebug("[Pet Swapper] Starting...");
LogUtils.sendWarning("[Pet Swapper] Starting...");
currentState = State.STARTING;
enabled = true;
PetSwapper.getPreviousPet = getPreviousPet;
if (MacroHandler.getInstance().isMacroToggled()) {
MacroHandler.getInstance().pauseMacro();
}
}

@SubscribeEvent
Expand All @@ -117,7 +125,20 @@ public void onTickShouldEnable(TickEvent.ClientTickEvent event) {
if (GameStateHandler.getInstance().getCookieBuffState() != GameStateHandler.BuffState.ACTIVE) return;
if (!MacroHandler.getInstance().isMacroToggled()) return;
if (FeatureManager.getInstance().isAnyOtherFeatureEnabled(this)) return;
if (!GameStateHandler.getInstance().inJacobContest()) return;
if (dontEnableUntilEndOfContest) {
if (!GameStateHandler.getInstance().inJacobContest()) {
dontEnableUntilEndOfContest = false;
} else {
return;
}
}
if (!GameStateHandler.getInstance().inJacobContest()) {
if (hasPetChangedDuringThisContest) {
hasPetChangedDuringThisContest = false;
start(true);
}
return;
}
if (hasPetChangedDuringThisContest) return;
if (FarmHelperConfig.petSwapperName.trim().isEmpty()) {
LogUtils.sendError("[Pet Swapper] You have not set a pet name in the settings! Disabling this feature...");
Expand Down Expand Up @@ -163,13 +184,13 @@ public void onTickEnabled(TickEvent.ClientTickEvent event) {
if (getPreviousPet) {
if (petName.toLowerCase().trim().contains(previousPet.toLowerCase())) {
LogUtils.sendDebug("[Pet Swapper] found previous pet: " + petName);
InventoryUtils.clickSlot(InventoryUtils.getSlotIdOfItemInContainer(petName), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
InventoryUtils.clickContainerSlot(InventoryUtils.getSlotIdOfItemInContainer(petName), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
currentState = State.WAITING_FOR_SPAWN;
delayClock.schedule(FarmHelperConfig.petSwapperDelay);
return;
}
if (petName.toLowerCase().contains("next page")) {
InventoryUtils.clickSlot(InventoryUtils.getSlotIdOfItemInContainer("next page"), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
InventoryUtils.clickContainerSlot(InventoryUtils.getSlotIdOfItemInContainer("next page"), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
delayClock.schedule(FarmHelperConfig.petSwapperDelay);
return;
}
Expand All @@ -179,6 +200,7 @@ public void onTickEnabled(TickEvent.ClientTickEvent event) {
if (petName.toLowerCase().trim().contains(FarmHelperConfig.petSwapperName.toLowerCase())) {
LogUtils.sendError("The current pet is already the one we want! The pet won't be swapped at the end of this contest.");
hasPetChangedDuringThisContest = false;
dontEnableUntilEndOfContest = true;
PlayerUtils.closeScreen();
stop();
return;
Expand All @@ -187,12 +209,10 @@ public void onTickEnabled(TickEvent.ClientTickEvent event) {
LogUtils.sendDebug("[Pet Swapper] previous pet: " + previousPet);
currentState = State.FIND_NEW;
delayClock.schedule(FarmHelperConfig.petSwapperDelay);
PlayerUtils.closeScreen();
mc.thePlayer.sendChatMessage("/pets");
break;
}
if (petName.toLowerCase().contains("next page")) {
InventoryUtils.clickSlot(InventoryUtils.getSlotIdOfItemInContainer("next page"), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
InventoryUtils.clickContainerSlot(InventoryUtils.getSlotIdOfItemInContainer("next page"), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
delayClock.schedule(FarmHelperConfig.petSwapperDelay);
return;
}
Expand All @@ -219,13 +239,13 @@ public void onTickEnabled(TickEvent.ClientTickEvent event) {
}
if (petName.toLowerCase().trim().contains(FarmHelperConfig.petSwapperName.toLowerCase())) {
LogUtils.sendDebug("[Pet Swapper] found new pet: " + petName);
InventoryUtils.clickSlot(InventoryUtils.getSlotIdOfItemInContainer(petName), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
InventoryUtils.clickContainerSlot(InventoryUtils.getSlotIdOfItemInContainer(petName), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
currentState = State.WAITING_FOR_SPAWN;
delayClock.schedule(FarmHelperConfig.petSwapperDelay);
return;
}
if (petName.toLowerCase().contains("next page")) {
InventoryUtils.clickSlot(InventoryUtils.getSlotIdOfItemInContainer("next page"), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
InventoryUtils.clickContainerSlot(InventoryUtils.getSlotIdOfItemInContainer("next page"), InventoryUtils.ClickType.LEFT, InventoryUtils.ClickMode.PICKUP);
delayClock.schedule(FarmHelperConfig.petSwapperDelay);
return;
}
Expand All @@ -252,12 +272,14 @@ public void onChatMessageReceived(ClientChatReceivedEvent event) {
String spawnMessage = "you summoned your " + (getPreviousPet ? previousPet : FarmHelperConfig.petSwapperName).toLowerCase();
if (msg.toLowerCase().contains(spawnMessage)) {
if (!isRunning() || currentState != State.WAITING_FOR_SPAWN) {
hasPetChangedDuringThisContest = false;
return;
}
currentState = State.NONE;
LogUtils.sendDebug("[Pet Swapper] pet spawned");
delayClock.schedule(1000);
if (GameStateHandler.getInstance().inJacobContest()) {
hasPetChangedDuringThisContest = true;
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -451,18 +451,24 @@ public boolean hasPassedSinceStopped() {
}

public boolean notMoving() {
return (dx < 0.01 && dz < 0.01 && dyIsRest() && mc.currentScreen == null) || (!holdingKeybindIsWalkable() && mc.thePlayer != null && (playerIsInFlowingWater(0) || playerIsInFlowingWater(1)) && mc.thePlayer.isInWater());
if ((dx < 0.01 && dz < 0.01 && dyIsRest() && mc.currentScreen == null)) {
return true;
}
return !holdingKeybindIsWalkable() && (playerIsInFlowingWater(0) || playerIsInFlowingWater(1)) && mc.thePlayer.isInWater();
}

private boolean dyIsRest() {
return dy < 0.05 || dy <= 0.079 && dy >= 0.078; // weird calculation of motionY being -0.0784000015258789 while resting at block and 0.0 is while flying for some reason
}

private boolean playerIsInFlowingWater(int y) {
public boolean playerIsInFlowingWater(int y) {
IBlockState state = mc.theWorld.getBlockState(BlockUtils.getRelativeBlockPos(0, y, 0));
if (!state.getBlock().equals(Blocks.water)) return false;
int level = state.getValue(BlockLiquid.LEVEL);
if (level == 0) {
if (FarmHelperConfig.alwaysHoldW) {
return false;
}
double motionX = mc.thePlayer.motionX;
double motionZ = mc.thePlayer.motionZ;
return motionX > 0.01 || motionX < -0.01 || motionZ > 0.01 || motionZ < -0.01;
Expand Down
24 changes: 21 additions & 3 deletions src/main/java/com/jelly/farmhelperv2/handler/MacroHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -360,16 +360,22 @@ public void onRenderWorldLast(RenderWorldLastEvent event) {

if (FarmHelperConfig.highlightRewarp && FarmHelperConfig.rewarpList != null && GameStateHandler.getInstance().inGarden()) {
Color chroma = Color.getHSBColor((float) ((System.currentTimeMillis() / 10) % 2000) / 2000, 1, 1);
Color chromaLowerAlpha = new Color(chroma.getRed(), chroma.getGreen(), chroma.getBlue(), 120);

for (Rewarp rewarp : FarmHelperConfig.rewarpList) {
RenderUtils.drawBlockBox(new BlockPos(rewarp.x, rewarp.y, rewarp.z), chromaLowerAlpha);
double distance = mc.thePlayer.getDistance(rewarp.x, rewarp.y, rewarp.z);
Color chromaLowerAlpha = new Color(chroma.getRed(), chroma.getGreen(), chroma.getBlue(), 120 - (int) (distance * 2));
if (distance < 50) {
RenderUtils.drawBlockBox(new BlockPos(rewarp.x, rewarp.y, rewarp.z), chromaLowerAlpha);
}
}
}

if (FarmHelperConfig.drawSpawnLocation && PlayerUtils.isSpawnLocationSet() && GameStateHandler.getInstance().inGarden()) {
BlockPos spawnLocation = new BlockPos(PlayerUtils.getSpawnLocation());
RenderUtils.drawBlockBox(spawnLocation, new Color(Color.orange.getRed(), Color.orange.getGreen(), Color.orange.getBlue(), 80));
double distance = mc.thePlayer.getDistance(spawnLocation.getX(), spawnLocation.getY(), spawnLocation.getZ());
if (distance < 50) {
RenderUtils.drawBlockBox(spawnLocation, new Color(Color.orange.getRed(), Color.orange.getGreen(), Color.orange.getBlue(), 80 - (int) (distance * 1.6)));
}
}

if (!isMacroToggled()) {
Expand All @@ -386,6 +392,16 @@ public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) {
if (!isMacroToggled()) {
return;
}

if (currentMacro.isPresent() && currentMacro.get().getRewarpState().equals(AbstractMacro.RewarpState.TELEPORTING)) {
long timeLeft = MacroHandler.getInstance().getLastTpTry() + 5_000 - System.currentTimeMillis();
if (timeLeft < 0) {
timeLeft = 0;
}
String formattedTime = LogUtils.formatTime(timeLeft);
RenderUtils.drawCenterTopText("Retrying to teleport in: " + formattedTime, event, Color.orange, 1.5f);
}

currentMacro.ifPresent(m -> {
if (!m.isEnabledAndNoFeature()) return;
m.onOverlayRender(event);
Expand Down Expand Up @@ -461,8 +477,10 @@ private void checkForTeleport() {
if (rewarpTeleport) {
cm.setRewarpState(AbstractMacro.RewarpState.TELEPORTED);
cm.actionAfterTeleport();
LogUtils.sendDebug("Teleporting to spawn point. Doing actions");
} else {
cm.setRewarpState(AbstractMacro.RewarpState.NONE);
LogUtils.sendDebug("Teleporting to spawn point. Not doing actions");
}
});
beforeTeleportationPos = Optional.empty();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.jelly.farmhelperv2.mixin.client;

import net.minecraft.scoreboard.ScoreObjective;
import net.minecraft.scoreboard.ScorePlayerTeam;
import net.minecraft.scoreboard.Scoreboard;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.Map;

// Patcher's fix for the scoreboard log spam

@Mixin(Scoreboard.class)
public abstract class MixinScoreboard {
@Shadow
public abstract ScorePlayerTeam getTeam(String p_96508_1_);

@Inject(method = "removeTeam", at = @At("HEAD"), cancellable = true)
private void patcher$checkIfTeamIsNull(ScorePlayerTeam team, CallbackInfo ci) {
if (team == null) ci.cancel();
}

@Redirect(method = "removeTeam", at = @At(value = "INVOKE", target = "Ljava/util/Map;remove(Ljava/lang/Object;)Ljava/lang/Object;", ordinal = 0, remap = false))
private <K, V> V patcher$checkIfRegisteredNameIsNull(Map<K, V> instance, K o) {
if (o != null) return instance.remove(o);
return null;
}

@Inject(method = "removeObjective", at = @At("HEAD"), cancellable = true)
private void patcher$checkIfObjectiveIsNull(ScoreObjective objective, CallbackInfo ci) {
if (objective == null) ci.cancel();
}

@Redirect(method = "removeObjective", at = @At(value = "INVOKE", target = "Ljava/util/Map;remove(Ljava/lang/Object;)Ljava/lang/Object;", ordinal = 0, remap = false))
private <K, V> V patcher$checkIfNameIsNull(Map<K, V> instance, K o) {
if (o != null) return instance.remove(o);
return null;
}

@Inject(method = "createTeam", at = @At(value = "CONSTANT", args = "stringValue=A team with the name '"), cancellable = true)
private void patcher$returnExistingTeam(String name, CallbackInfoReturnable<ScorePlayerTeam> cir) {
cir.setReturnValue(this.getTeam(name));
}

@Inject(method = "removePlayerFromTeam", at = @At(value = "CONSTANT", args = "stringValue=Player is either on another team or not on any team. Cannot remove from team '"), cancellable = true)
private void patcher$silenceException(CallbackInfo ci) {
ci.cancel();
}
}
3 changes: 2 additions & 1 deletion src/main/java/com/jelly/farmhelperv2/util/BlockUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -357,8 +357,9 @@ public static boolean canWalkThroughDoor(BlockPos blockPos, Direction direction)
};

public static boolean canFlyHigher(int distance) {
Vec3 vec = mc.thePlayer.getPositionEyes(1);
BlockPos blockPos = getRelativeBlockPos(0, 1, 0);
for (Vec3 vec3 : BLOCK_SIDE_MULTIPLIERS) {
Vec3 vec = new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5);
MovingObjectPosition mop = mc.theWorld.rayTraceBlocks(vec.add(vec3), vec.addVector(0, distance, 0).add(vec3), false, true, false);
if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
return false;
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/mixins.farmhelperv2.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"client.MixinChunk",
"client.MixinEntity",
"client.MixinMouse",
"client.MixinScoreboard",
"fml.MixinFMLHandshakeMessage",
"network.MixinNetworkManager",
"pathfinder.MixinChunkProviderClient",
Expand Down

0 comments on commit c323136

Please sign in to comment.