Начинающий
- Статус
- Оффлайн
- Регистрация
- 22 Сен 2024
- Сообщения
- 60
- Реакции
- 2
- Выберите загрузчик игры
- Vanilla
- Прочие моды
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Кароче работает но с удочкой которую словил 50/50
SS -
cкоро будет слив крутой (может) базы
SS -
Код:
public class AutoFish extends Module {
private final StopWatch delay = new StopWatch();
private boolean isHooked = false;
private boolean needToCast = true;
private boolean waitingForDiscardPhase = false;
private boolean performingDiscard = false;
private boolean returningRod = false;
private int lastRodSlot = -1;
private int discardCheckAttempts = 0;
private final int MAX_DISCARD_ATTEMPTS = 5;
private final BooleanSetting enableDiscard = new BooleanSetting("Включить выбрасывание", false);
private final BooleanSetting debugMode = new BooleanSetting("Режим отладки", false);
public final ModeListSetting discardItems = new ModeListSetting("Выбрасывать предметы",
new BooleanSetting("Тропическая рыба", false),
new BooleanSetting("Треска", false),
new BooleanSetting("Лосось", false),
new BooleanSetting("Иглобрюх", false),
new BooleanSetting("Мертвый Куст", false),
new BooleanSetting("Кристалл Энда", false),
new BooleanSetting("Кувшинка", false),
new BooleanSetting("Палка", false),
new BooleanSetting("Кожаная Броня", false),
new BooleanSetting("Гнилая Плоть", false),
new BooleanSetting("Нить", false),
new BooleanSetting("Удочка (рыбалка)", false),
new BooleanSetting("Саженец Берёзы", false),
new BooleanSetting("Раковина Наутилуса", false),
new BooleanSetting("Седло", false),
new BooleanSetting("Лук", false),
new BooleanSetting("Миска", false),
new BooleanSetting("Кожа", false),
new BooleanSetting("Бутылка Воды (пустая)", false),
new BooleanSetting("Кость", false),
new BooleanSetting("Чернильный Мешок", false),
new BooleanSetting("Натяжной Датчик", false),
new BooleanSetting("Бамбук", false),
new BooleanSetting("Бутылка Воды (полная)", false)
);
public AutoFish() {
addSettings(enableDiscard, discardItems, debugMode);
}
[USER=1367676]@override[/USER]
public boolean onEnable() {
super.onEnable();
resetState();
log("AutoFish: Модуль включен. Начинаю с заброса удочки.");
return false;
}
[USER=1367676]@override[/USER]
public void onDisable() {
super.onDisable();
log("AutoFish: Модуль выключен.");
if (lastRodSlot != -1 && mc.player.inventory.currentItem != lastRodSlot) {
mc.player.inventory.currentItem = lastRodSlot;
mc.player.connection.sendPacket(new CHeldItemChangePacket(lastRodSlot));
}
resetState();
}
private void resetState() {
delay.reset();
isHooked = false;
needToCast = true;
waitingForDiscardPhase = false;
performingDiscard = false;
returningRod = false;
lastRodSlot = -1;
discardCheckAttempts = 0;
}
private void log(String message) {
if (debugMode.get()) {
System.out.println("[AutoFish Debug] " + message);
}
}
[USER=1474073]@Subscribe[/USER]
private void onUpdate(EventUpdate e) {
boolean hasRodInHand = mc.player.getHeldItemMainhand().getItem() == Items.FISHING_ROD ||
mc.player.getHeldItemOffhand().getItem() == Items.FISHING_ROD;
if (!hasRodInHand && !waitingForDiscardPhase && !performingDiscard && !returningRod) {
if (needToCast || isHooked) {
log("AutoFish: Удочки нет в руке в неожиданной фазе. Сброс состояния.");
resetState();
needToCast = false;
}
return;
}
if (isHooked && delay.isReached(700)) {
log("AutoFish: Вытягиваю удочку.");
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));
isHooked = false;
delay.reset();
if (enableDiscard.get()) {
waitingForDiscardPhase = true;
if (mc.player.getHeldItemMainhand().getItem() == Items.FISHING_ROD || mc.player.getHeldItemOffhand().getItem() == Items.FISHING_ROD) {
lastRodSlot = mc.player.inventory.currentItem;
} else {
lastRodSlot = findRodInInventory();
}
discardCheckAttempts = 0;
log("AutoFish: Переход к фазе 'ожидание выброса'. Слот удочки: " + lastRodSlot);
} else {
needToCast = true;
log("AutoFish: Выбрасывание отключено. Переход к фазе 'нужно забросить'.");
}
return;
}
if (waitingForDiscardPhase && delay.isReached(200)) {
if (discardCheckAttempts >= MAX_DISCARD_ATTEMPTS) {
log("AutoFish: Превышено максимальное количество попыток найти рыбу. Переход к забросу.");
waitingForDiscardPhase = false;
needToCast = true;
delay.reset();
return;
}
log("AutoFish: Ищу предмет для выбрасывания (попытка " + (discardCheckAttempts + 1) + "/" + MAX_DISCARD_ATTEMPTS + ").");
int itemToDiscardSlot = findItemToDiscard();
if (itemToDiscardSlot != -1) {
log("AutoFish: Найдена рыба в слоте " + itemToDiscardSlot + ". Переключаюсь на слот.");
mc.player.inventory.currentItem = itemToDiscardSlot;
mc.player.connection.sendPacket(new CHeldItemChangePacket(itemToDiscardSlot));
performingDiscard = true;
waitingForDiscardPhase = false;
} else {
log("AutoFish: Рыба для выбрасывания не найдена. Повторяю поиск.");
discardCheckAttempts++;
}
delay.reset();
return;
}
if (performingDiscard && delay.isReached(300)) {
log("AutoFish: Выполняю выбрасывание.");
int currentActiveSlot = mc.player.inventory.currentItem;
ItemStack stackInHand = mc.player.inventory.getStackInSlot(currentActiveSlot);
boolean isDiscardableItemInHand = isDiscardable(stackInHand);
if (stackInHand.isEmpty() || !isDiscardableItemInHand) {
log("AutoFish: Предмет в текущем слоте не является выбрасываемым или слот пуст. Ищу следующий.");
int nextItemToDiscardSlot = findItemToDiscard();
if (nextItemToDiscardSlot != -1) {
log("AutoFish: Найдена следующая рыба в слоте " + nextItemToDiscardSlot + ". Переключаюсь.");
mc.player.inventory.currentItem = nextItemToDiscardSlot;
mc.player.connection.sendPacket(new CHeldItemChangePacket(nextItemToDiscardSlot));
delay.reset();
return;
} else {
log("AutoFish: Вся рыба выброшена. Переход к фазе 'возврат удочки'.");
performingDiscard = false;
returningRod = true;
delay.reset();
return;
}
} else {
log("AutoFish: Выбрасываю предмет из слота " + currentActiveSlot + " путем отправки пакета Q.");
mc.player.connection.sendPacket(new CPlayerDiggingPacket(CPlayerDiggingPacket.Action.DROP_ITEM, BlockPos.ZERO, Direction.DOWN));
delay.reset();
return;
}
}
if (returningRod && delay.isReached(250)) {
log("AutoFish: Возвращаю удочку в слот " + lastRodSlot);
if (lastRodSlot != -1 && mc.player.inventory.currentItem != lastRodSlot) {
mc.player.inventory.currentItem = lastRodSlot;
mc.player.connection.sendPacket(new CHeldItemChangePacket(lastRodSlot));
}
returningRod = false;
needToCast = true;
delay.reset();
return;
}
if (needToCast && !isHooked && !waitingForDiscardPhase && !performingDiscard && !returningRod && delay.isReached(400)) {
log("AutoFish: Забрасываю удочку.");
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));
needToCast = false;
delay.reset();
}
}
[USER=1474073]@Subscribe[/USER]
private void onPacket(EventPacket e) {
if (e.getPacket() instanceof SPlaySoundEffectPacket p) {
if (p.getSound().getName().getPath().equals("entity.fishing_bobber.splash")) {
double soundX = p.getX();
double soundY = p.getY();
double soundZ = p.getZ();
FishingBobberEntity bobber = mc.player.fishingBobber;
if (bobber != null) {
double distance = Math.sqrt(
Math.pow(soundX - bobber.getPosX(), 2) +
Math.pow(soundY - bobber.getPosY(), 2) +
Math.pow(soundZ - bobber.getPosZ(), 2)
);
if (distance <= 1.0) {
log("AutoFish: Обнаружена поклевка.");
isHooked = true;
needToCast = false;
waitingForDiscardPhase = false;
performingDiscard = false;
returningRod = false;
delay.reset();
}
}
}
}
}
private boolean isDiscardable(ItemStack stack) {
if (stack.isEmpty()) return false;
int index = 0;
if (discardItems.get().get(index++).get() && stack.getItem() == Items.TROPICAL_FISH) { // Тропическая рыба
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.COD) { // Треска
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.SALMON) { // Лосось
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.PUFFERFISH) { // Иглобрюх (Pufferfish)
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.DEAD_BUSH) { // Мертвый Куст
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.END_CRYSTAL) { // Кристалл Энда
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.LILY_PAD) { // Кувшинка
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.STICK) { // Палка
return true;
}
if (discardItems.get().get(index++).get()) { // Кожаная Броня
if (stack.getItem() == Items.LEATHER_HELMET ||
stack.getItem() == Items.LEATHER_CHESTPLATE ||
stack.getItem() == Items.LEATHER_LEGGINGS ||
stack.getItem() == Items.LEATHER_BOOTS) {
return true;
}
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.ROTTEN_FLESH) { // Гнилая Плоть
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.STRING) { // Нить
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.FISHING_ROD) { // Удочка (рыбалка)
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.BIRCH_SAPLING) { // Саженец Берёзы
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.NAUTILUS_SHELL) { // Раковина Наутилуса
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.SADDLE) { // Седло
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.BOW) { // Лук
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.BOWL) { // Миска
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.LEATHER) { // Кожа
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.GLASS_BOTTLE) { // Бутылка Воды (пустая)
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.BONE) { // Кость
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.INK_SAC) { // Чернильный Мешок
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.TRIPWIRE_HOOK) { // Натяжной Датчик
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.BAMBOO) { // Бамбук
return true;
}
if (discardItems.get().get(index++).get() && stack.getItem() == Items.POTION) { // Бутылка Воды (полная, зелье воды)
if (stack.hasTag() && stack.getOrCreateTag().getString("Potion").equals("minecraft:water")) {
return true;
}
}
return false;
}
private int findItemToDiscard() {
for (int i = 0; i < mc.player.inventory.mainInventory.size(); ++i) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (isDiscardable(stack)) {
return i;
}
}
return -1;
}
private int findRodInInventory() {
for (int i = 0; i < mc.player.inventory.mainInventory.size(); ++i) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == Items.FISHING_ROD) {
log("AutoFish: Найдена удочка в слоте " + i);
return i;
}
}
log("AutoFish: Удочка не найдена в инвентаре.");
return -1;
}
}
Последнее редактирование: