Начинающий
- Статус
- Оффлайн
- Регистрация
- 16 Янв 2025
- Сообщения
- 888
- Реакции
- 3
- Выберите загрузчик игры
- Vanilla
- Прочие моды
Пр я щас делаю свой гпт клиент сделал AutoFarm с помощью мотыги на тросник работает все но кроме автопочинки ну она работает но плохо работает а точнее очень плохо
ss -
code:
модеры не ебу что с кодом но в интелку норм переноситься
ss -
Код:
package org.excellent.client.managers.module.impl.player;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.item.HoeItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.play.client.*;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import org.excellent.client.api.events.orbit.EventHandler;
import org.excellent.client.managers.component.impl.rotation.Rotation;
import org.excellent.client.managers.component.impl.rotation.SmoothRotationComponent;
import org.excellent.client.managers.events.player.UpdateEvent;
import org.excellent.client.managers.module.Category;
import org.excellent.client.managers.module.Module;
import org.excellent.client.managers.module.ModuleInfo;
import org.excellent.client.utils.other.Instance;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleInfo(name = "AutoFarm", category = Category.PLAYER)
public class AutoFarm extends Module {
public static AutoFarm getInstance() {
return Instance.get(AutoFarm.class);
}
BlockPos targetSugarCane = null;
long lastActionTime = 0;
long lastRightClickTime = 0;
long lastExpThrowTime = 0;
int oldSlot = -1;
int savedHoeSlot = -1;
boolean isRepairing = false;
boolean isGrowing = false;
boolean isHarvesting = false;
@Override
protected void onDisable() {
targetSugarCane = null;
lastRightClickTime = 0;
lastExpThrowTime = 0;
savedHoeSlot = -1;
isGrowing = false;
isHarvesting = false;
isRepairing = false;
restoreSlot();
}
@EventHandler
public void onUpdate(UpdateEvent e) {
if (mc.player == null || mc.world == null) {
return;
}
long now = System.currentTimeMillis();
if (now - lastActionTime < 1f) {
return;
}
if (handleToolRepair()) {
if (isRepairing) {
return;
}
}
if (!isValidSugarCane(targetSugarCane)) {
targetSugarCane = findSugarCane();
}
if (targetSugarCane == null) {
isGrowing = false;
isHarvesting = false;
restoreSlot();
return;
}
if (rotateToBlock(targetSugarCane)) {
}
int height = getSugarCaneHeight(targetSugarCane);
if (height == 1) {
growSugarCane(targetSugarCane);
} else if (height >= 2 && height < 4) {
growSugarCane(targetSugarCane);
} else if (height >= 4) {
harvestSugarCane(targetSugarCane);
}
lastActionTime = now;
}
private boolean handleToolRepair() {
ItemStack mainHandItem = mc.player.getHeldItemMainhand();
ItemStack offHandItem = mc.player.getHeldItemOffhand();
ItemStack hoeToCheck = null;
boolean hoeInOffHand = false;
if (mainHandItem.getItem() instanceof HoeItem && mainHandItem.isDamaged()) {
hoeToCheck = mainHandItem;
hoeInOffHand = false;
} else if (offHandItem.getItem() instanceof HoeItem && offHandItem.isDamaged()) {
hoeToCheck = offHandItem;
hoeInOffHand = true;
}
if (hoeToCheck != null) {
float durabilityPercent = ((float) (hoeToCheck.getMaxDamage() - hoeToCheck.getDamage()) / hoeToCheck.getMaxDamage()) * 100;
if (durabilityPercent <= 10 && !isRepairing) {
startRepair();
} else if (durabilityPercent >= 80 && isRepairing) {
finishRepair();
} else if (isRepairing) {
throwExperience();
}
}
return true;
}
private void startRepair() {
isRepairing = true;
savedHoeSlot = mc.player.inventory.currentItem;
int expBottleSlot = findExpBottles();
if (expBottleSlot != -1) {
mc.player.inventory.currentItem = expBottleSlot;
mc.player.connection.sendPacket(new CHeldItemChangePacket(expBottleSlot));
moveHoeToOffHand();
}
}
private void finishRepair() {
isRepairing = false;
if (savedHoeSlot != -1) {
mc.player.inventory.currentItem = savedHoeSlot;
mc.player.connection.sendPacket(new CHeldItemChangePacket(savedHoeSlot));
clearOffHand();
}
savedHoeSlot = -1;
}
private void throwExperience() {
long now = System.currentTimeMillis();
if (now - lastExpThrowTime < 300) {
return;
}
ItemStack mainHand = mc.player.getHeldItemMainhand();
if (mainHand.getItem() == Items.EXPERIENCE_BOTTLE) {
float oldPitch = mc.player.rotationPitch;
mc.player.rotationPitch = 90.0f; // Смотрим вниз
mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
mc.player.rotationPitch = oldPitch;
lastExpThrowTime = now;
}
}
private void moveHoeToOffHand() {
if (savedHoeSlot != -1) {
mc.player.connection.sendPacket(new CClickWindowPacket(
mc.player.openContainer.windowId,
savedHoeSlot + 36,
0,
ClickType.PICKUP,
ItemStack.EMPTY,
mc.player.openContainer.getNextTransactionID(mc.player.inventory)
));
mc.player.connection.sendPacket(new CClickWindowPacket(
mc.player.openContainer.windowId,
45,
0,
ClickType.PICKUP,
ItemStack.EMPTY,
mc.player.openContainer.getNextTransactionID(mc.player.inventory)
));
}
}
private void clearOffHand() {
if (savedHoeSlot != -1) {
mc.player.connection.sendPacket(new CClickWindowPacket(
mc.player.openContainer.windowId,
45,
0,
ClickType.PICKUP,
ItemStack.EMPTY,
mc.player.openContainer.getNextTransactionID(mc.player.inventory)
));
mc.player.connection.sendPacket(new CClickWindowPacket(
mc.player.openContainer.windowId,
savedHoeSlot + 36,
0,
ClickType.PICKUP,
ItemStack.EMPTY,
mc.player.openContainer.getNextTransactionID(mc.player.inventory)
));
}
}
private BlockPos findSugarCane() {
List<BlockPos> sugarCanes = new ArrayList<>();
int r = (int) Math.ceil(2);
BlockPos playerPos = mc.player.getPosition();
for (int x = -r; x <= r; x++) {
for (int y = -r; y <= r; y++) {
for (int z = -r; z <= r; z++) {
BlockPos pos = playerPos.add(x, y, z);
if (mc.player.getDistanceSq(Vector3d.copyCentered(pos)) <= 2 * 2) {
if (isValidSugarCane(pos)) {
sugarCanes.add(pos);
}
}
}
}
}
if (sugarCanes.isEmpty()) {
return null;
}
sugarCanes.sort(Comparator.comparingDouble(pos ->
mc.player.getDistanceSq(Vector3d.copyCentered(pos))));
return sugarCanes.get(0);
}
private boolean isValidSugarCane(BlockPos pos) {
if (pos == null) return false;
BlockState state = mc.world.getBlockState(pos);
if (state.getBlock() != Blocks.SUGAR_CANE) {
return false;
}
return mc.world.getBlockState(pos.down()).getBlock() != Blocks.SUGAR_CANE;
}
private int getSugarCaneHeight(BlockPos basePos) {
if (basePos == null) return 0;
int height = 0;
BlockPos current = basePos;
while (mc.world.getBlockState(current).getBlock() == Blocks.SUGAR_CANE) {
height++;
current = current.up();
}
return height;
}
private void growSugarCane(BlockPos pos) {
BlockRayTraceResult rayTrace = new BlockRayTraceResult(
Vector3d.copyCentered(pos),
Direction.UP,
pos,
false
);
mc.player.connection.sendPacket(new CPlayerTryUseItemOnBlockPacket(
Hand.MAIN_HAND,
rayTrace
));
long now = System.currentTimeMillis();
if (now - lastRightClickTime > 200) {
mc.player.connection.sendPacket(new CAnimateHandPacket(Hand.MAIN_HAND));
lastRightClickTime = now;
}
isGrowing = true;
}
private void harvestSugarCane(BlockPos pos) {
if (!isRepairing) {
int hoeSlot = findBestHoe();
if (hoeSlot != -1 && mc.player.inventory.currentItem != hoeSlot) {
if (oldSlot == -1) {
oldSlot = mc.player.inventory.currentItem;
}
mc.player.inventory.currentItem = hoeSlot;
mc.player.connection.sendPacket(new CHeldItemChangePacket(hoeSlot));
}
}
BlockPos harvestPos = pos.up();
mc.player.connection.sendPacket(new CPlayerDiggingPacket(
CPlayerDiggingPacket.Action.START_DESTROY_BLOCK,
harvestPos,
Direction.UP
));
mc.player.connection.sendPacket(new CPlayerDiggingPacket(
CPlayerDiggingPacket.Action.STOP_DESTROY_BLOCK,
harvestPos,
Direction.UP
));
mc.player.connection.sendPacket(new CAnimateHandPacket(Hand.MAIN_HAND));
isHarvesting = true;
if (mc.world.getBlockState(harvestPos).getBlock() != Blocks.SUGAR_CANE) {
BlockPos current = harvestPos.up();
while (mc.world.getBlockState(current).getBlock() == Blocks.SUGAR_CANE) {
mc.player.connection.sendPacket(new CPlayerDiggingPacket(
CPlayerDiggingPacket.Action.START_DESTROY_BLOCK,
current,
Direction.UP
));
mc.player.connection.sendPacket(new CPlayerDiggingPacket(
CPlayerDiggingPacket.Action.STOP_DESTROY_BLOCK,
current,
Direction.UP
));
mc.player.connection.sendPacket(new CAnimateHandPacket(Hand.MAIN_HAND));
current = current.up();
}
targetSugarCane = null;
isHarvesting = false;
}
}
private boolean rotateToBlock(BlockPos pos) {
Vector3d eyePos = mc.player.getEyePosition(mc.getRenderPartialTicks());
Vector3d blockCenter = Vector3d.copyCentered(pos);
Vector3d dir = blockCenter.subtract(eyePos).normalize();
float yaw = (float) Math.toDegrees(Math.atan2(-dir.x, dir.z));
float pitch = (float) MathHelper.clamp(-Math.toDegrees(Math.atan2(dir.y, Math.hypot(dir.x, dir.z))), -90, 90);
SmoothRotationComponent.update(
new Rotation(yaw, pitch),
5.0F, 4.0F,
2F, 2F,
1, 3, false);
return true;
}
private int findBestHoe() {
int best = -1;
float bestScore = -1f;
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() instanceof HoeItem) {
float score = 1000f;
Item item = stack.getItem();
if (item == Items.NETHERITE_HOE) {
score += 500f;
} else if (item == Items.DIAMOND_HOE) {
score += 400f;
} else if (item == Items.IRON_HOE) {
score += 300f;
} else if (item == Items.STONE_HOE) {
score += 200f;
} else if (item == Items.WOODEN_HOE) {
score += 100f;
}
score += EnchantmentHelper.getEnchantmentLevel(Enchantments.EFFICIENCY, stack) * 50f;
score += EnchantmentHelper.getEnchantmentLevel(Enchantments.UNBREAKING, stack) * 30f;
score += EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, stack) * 40f;
if (stack.isDamaged()) {
float durabilityPercent = ((float) (stack.getMaxDamage() - stack.getDamage()) / stack.getMaxDamage());
score *= durabilityPercent;
}
if (score > bestScore) {
bestScore = score;
best = i;
}
}
}
return best;
}
private int findExpBottles() {
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == Items.EXPERIENCE_BOTTLE) {
return i;
}
}
return -1;
}
private void restoreSlot() {
if (oldSlot != -1 && mc.player != null && !isRepairing) {
mc.player.inventory.currentItem = oldSlot;
mc.player.connection.sendPacket(new CHeldItemChangePacket(oldSlot));
oldSlot = -1;
}
}
}
[CODE]