Исходник AutoDuel Expensive 2.0 ready for RealyWorld

Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2022
Сообщения
190
Реакции[?]
5
Поинты[?]
2K
зачем переделывать ивенты, если ты спокойно на моих мог это сделать?

зачем добавлять Counter если у тебя есть TimerHelper?


Зачем менять сеттинг если опять же, все можно было сделать на моих?
значит так надо было
 
Начинающий
Статус
Оффлайн
Регистрация
13 Июн 2023
Сообщения
149
Реакции[?]
19
Поинты[?]
1K
Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2022
Сообщения
190
Реакции[?]
5
Поинты[?]
2K
;-; я реверсер
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2021
Сообщения
425
Реакции[?]
103
Поинты[?]
32K
недавно спастил AutoDuel с Excellent Client и решил слить вам тема для тех кто вообще не умеет пастить и не понимает сути что и как откуда береться
AutoDuel:
package wtf.expensive.modules.impl.util;

import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import net.minecraft.client.network.play.NetworkPlayerInfo;
import net.minecraft.inventory.container.ChestContainer;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.network.IPacket;
import net.minecraft.network.play.server.SChatPacket;
import wtf.expensive.event2.Listener;
import wtf.expensive.events.Event;
import wtf.expensive.events.impl.packet.EventPacket;
import wtf.expensive.events.impl.player.EventUpdate;
import wtf.expensive.modules.Function;
import wtf.expensive.modules.FunctionAnnotation;
import wtf.expensive.modules.Type;
import wtf.expensive.modules.settings.imp.BooleanOption;
import wtf.expensive.modules.settings.imp.MultiBoxSetting;
import wtf.expensive.util.Counter;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

@FunctionAnnotation(name = "Auto Duel", type = Type.Util)
public class AutoDuel extends Function {

    private static final Pattern pattern = Pattern.compile("^\\w{3,16}$");

    private final MultiBoxSetting mode = new MultiBoxSetting("Mode",
            new BooleanOption("Шары", true),
            new BooleanOption("Щит", false),
            new BooleanOption("Шипы 3", false),
            new BooleanOption("Незеритка", false),
            new BooleanOption("Читерский рай", false),
            new BooleanOption("Лук", false),
            new BooleanOption("Классик", false),
            new BooleanOption("Тотемы", false),
            new BooleanOption("Нодебафф", false)
    );
    private double lastPosX, lastPosY, lastPosZ;
    public AutoDuel() {
        addSettings(mode);
    }


    private final List<String> sent = Lists.newArrayList();

    private final Counter counter = Counter.create();
    private final Counter counter2 = Counter.create();
    private final Counter counterChoice = Counter.create();
    private final Counter counterTo = Counter.create();


    private final Listener<EventUpdate> onUpdate = event -> {
        final List<String> players = getOnlinePlayers();

        double distance = Math.sqrt(Math.pow(lastPosX - mc.player.getPosX(), 2)
                + Math.pow(lastPosY - mc.player.getPosY(), 2)
                + Math.pow(lastPosZ - mc.player.getPosZ(), 2));

        if (distance > 500) {
            toggle();
        }
    
        lastPosX = mc.player.getPosX();
        lastPosY = mc.player.getPosY();
        lastPosZ = mc.player.getPosZ();



        if (counter2.hasReached(800L * players.size())) {
            sent.clear();
            counter2.reset();
        }

        for (final String player : players) {
            if (!sent.contains(player) && !player.equals(mc.session.getProfile().getName())) {
                if (counter.hasReached(1000)) {
                    mc.player.sendChatMessage("/duel " + player);
                    sent.add(player);
                    counter.reset();
                }
            }
        }


        if (mc.player.openContainer instanceof ChestContainer chest) {
            if (mc.currentScreen.getTitle().getString().contains("Выбор набора (1/1)")) {
                for (int i = 0; i < chest.getLowerChestInventory().getSizeInventory(); i++) {
                    final List<Integer> slotsID = new ArrayList<>();

                    int index = 0;

                    for (BooleanOption value : mode.getValues()) {
                        if (!value.getValue()) {
                            index++;
                            continue;
                        }

                        slotsID.add(index);
                        index++;
                    }


                    Collections.shuffle(slotsID);
                    final int slotID = slotsID.get(0);

                    if (counterChoice.hasReached(150)) {
                        mc.playerController.windowClick(chest.windowId, slotID, 0, ClickType.QUICK_MOVE, mc.player);
                        counterChoice.reset();
                    }
                }
            } else if (mc.currentScreen.getTitle().getString().contains("Настройка поединка")) {
                if (counterTo.hasReached(150)) {
                    mc.playerController.windowClick(chest.windowId, 0, 0, ClickType.QUICK_MOVE, mc.player);
                    counterTo.reset();
                }
            }
        }


    };

    private final Listener<EventPacket> onPacket = event -> {
        if (event.isReceivePacket()) {
            IPacket<?> packet = event.getPacket();

            if (packet instanceof SChatPacket chat) {
                final String text = chat.getChatComponent().getString().toLowerCase();
                if ((text.contains("начало") && text.contains("через") && text.contains("секунд!")) || (text.equals("дуэли » во время поединка запрещено использовать команды"))) {
                    toggle();
                }
            }
        }
    };

    private List<String> getOnlinePlayers() {
        return mc.player.connection.getPlayerInfoMap().stream()
                .map(NetworkPlayerInfo::getGameProfile)
                .map(GameProfile::getName)
                .filter(profileName -> pattern.matcher(profileName).matches())
                .collect(Collectors.toList());
    }

    @Override
    public void onEvent(Event event) {
        if (event instanceof EventUpdate) {
            onUpdate.onEvent((EventUpdate) event);
        } else if (event instanceof EventPacket) {
            onPacket.onEvent((EventPacket) event);
        }
    }
}
и так что же понадобиться еще для работо спосбоности AutoDuel нам понадобиться переделаный Listener
Listener:
package wtf.expensive.event;

import wtf.expensive.events.Event;

public interface Listener<T extends Event> {
    void onEvent(T event);
}
так же нам нужен Counter без изменений вот и он
Counter:
package wtf.expensive.util;

import lombok.Setter;

public class Counter {

   [USER=1132491]@setter[/USER]
    private long lastMS;

    private Counter() {
        reset();
    }

    public static Counter create() {
        return new Counter();
    }

    public void reset() {
        lastMS = System.currentTimeMillis();
    }

    public long elapsedTime() {
        return System.currentTimeMillis() - lastMS;
    }

    public boolean hasReached(long time) {
        return elapsedTime() >= time;
    }

    public boolean hasReached(long time, boolean reset) {
        boolean hasElapsed = elapsedTime() >= time;
        if (hasElapsed && reset) {
            reset();
        }
        return hasElapsed;
    }

    public boolean hasReached(double ms) {
        return elapsedTime() >= ms;
    }

    public boolean delay(long ms) {
        boolean hasDelayElapsed = elapsedTime() - ms >= 0;
        if (hasDelayElapsed) {
            reset();
        }
        return hasDelayElapsed;
    }
}
завершающая деталь по моему будут ошибки пишите сюда если что переделаю тему и так вот MultiBoxSetting завершающая часть с getValues-getValue вот код
MultiBoxSetting:
package wtf.expensive.modules.settings.imp;

import wtf.expensive.modules.settings.Setting;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.function.Supplier;
import java.util.stream.Collectors;

public class MultiBoxSetting extends Setting {
    public List<BooleanOption> options;
    public int index;
    public float animation;

    public MultiBoxSetting(String name, BooleanOption... options) {
        super(name);
        this.options = List.of(options);
    }

    public boolean get(String name) {
        return Objects.requireNonNull(this.options.stream().filter((option) -> option.getName().equalsIgnoreCase(name)).findFirst().orElse(null)).get();
    }

    public void set(String name, boolean value) {
        Objects.requireNonNull(this.options.stream().filter((option) -> option.getName().equalsIgnoreCase(name)).findFirst().orElse(null)).set(value);
    }

    public List<BooleanOption> getToggled() {
        return this.options.stream().filter(BooleanOption::get).collect(Collectors.toList());
    }

    public String get() {
        List<String> includedOptions = new ArrayList<>();
        for (BooleanOption option : options) {
            if (option.get()) {
                includedOptions.add(option.getName());
            }
        }
        return String.join(", ", includedOptions);
    }

    public void set(int index, boolean value) {
        this.options.get(index).set(value);
    }

    public boolean get(int index) {
        return this.options.get(index).get();
    }

    public MultiBoxSetting setVisible(Supplier<Boolean> bool) {
        this.visible = bool;
        return this;
    }

    public List<BooleanOption> getValues() {
        return this.options;
    }

    public boolean getValue() {
        if (this.index >= 0 && this.index < this.options.size()) {
            return this.options.get(this.index).getValue();
        }
        return false;
    }

    public void setValue(int index) {
        this.index = index;
    }

    @Override
    public SettingType getType() {
        return SettingType.MULTI_BOX_SETTING;
    }
}
вот завершающий код BooleanOption
BooleanOption:
package wtf.expensive.modules.settings.imp;


import wtf.expensive.modules.settings.Setting;

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

public class BooleanOption extends Setting {
    private boolean value;
    private String desc;
    public float anim;

    public BooleanOption(String name, boolean value) {
        super(name);
        this.value = value;
    }

    public BooleanOption(String name, String desc, boolean value) {
        super(name);
        this.value = value;
        this.desc = desc;
    }

    public String getDesc() {
        return desc;
    }

    public boolean get() {
        return value;
    }

    public void toggle() {
        value = !value;
    }

    public void set(boolean value) {
        this.value = value;
    }

    public BooleanOption setVisible(Supplier<Boolean> bool) {
        visible = bool;
        return this;
    }

    @Override
    public SettingType getType() {
        return SettingType.BOOLEAN_OPTION;
    }

    public List<BooleanOption> getValues() {
        return Arrays.asList(this);
    }

    public boolean getValue() {
        return value;
    }
}
не стеснйтесь спрашивайте если какие то у вас ошибки сдесь в дс не буду помогать
ПАСТА
 
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2023
Сообщения
7
Реакции[?]
0
Поинты[?]
0
Ниче се здесь пастеров, я не про вас ребята metafaze, void33x и другие. Боже, как можно приходить на форум по Java даже основ не зная. Я уверен на 100% то что после первого вопроса по основам Java я отфильтрую yougame от мега "селфкодеров" например которые не знаю что такое Lombok (перевод на пастрерский: ну ээээ, этаа штука @setur @geter которая у меня не работает и там красным горит).
 
Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2022
Сообщения
190
Реакции[?]
5
Поинты[?]
2K
Ниче се здесь пастеров, я не про вас ребята metafaze, void33x и другие. Боже, как можно приходить на форум по Java даже основ не зная. Я уверен на 100% то что после первого вопроса по основам Java я отфильтрую yougame от мега "селфкодеров" например которые не знаю что такое Lombok (перевод на пастрерский: ну ээээ, этаа штука @setur @geter которая у меня не работает и там красным горит).
а в каком месте void33x селфкодер если он сам нечего сделать не может
 
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2023
Сообщения
7
Реакции[?]
0
Поинты[?]
0
а в каком месте void33x селфкодер если он сам нечего сделать не может
Типо ты можешь)))). На счет void33x не знаю точно, но это хорошо что он вам пастерам потихоньку самооценку понижает.
 
Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2022
Сообщения
190
Реакции[?]
5
Поинты[?]
2K
Типо ты можешь)))). На счет void33x не знаю точно, но это хорошо что он вам пастерам потихоньку самооценку понижает.
да я много чего сам написал пошли в дс покажу
 
Сверху Снизу