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

Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2022
Сообщения
190
Реакции[?]
5
Поинты[?]
2K
недавно спастил 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;
    }
}
не стеснйтесь спрашивайте если какие то у вас ошибки сдесь в дс не буду помогать
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
8 Май 2023
Сообщения
407
Реакции[?]
5
Поинты[?]
6K
недавно спастил 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;
    }
}
не стеснйтесь спрашивайте если какие то у вас ошибки сдесь в дс не буду помогать
1700981675280.png
что делать? + в Counter вначале вместо setter надо Setter
 
Начинающий
Статус
Оффлайн
Регистрация
30 Июн 2023
Сообщения
96
Реакции[?]
1
Поинты[?]
3K
гениально 23 год люди читать не умееют ну по факту так и есть АХАХАХХ
Бро Listener ты сделал неправильно, т.к это под базу excellent а тут по другому пишется event так что listener не нужны в базе expensive
И так же MultiBoxSettings уже есть в базе expensive просто название другое
 
Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2022
Сообщения
190
Реакции[?]
5
Поинты[?]
2K
Бро Listener ты сделал неправильно, т.к это под базу excellent а тут по другому пишется event так что listener не нужны в базе expensive
И так же MultiBoxSettings уже есть в базе expensive просто название другое
ебать дурак читать научись сначала о чем я пишу
Counter:
    [USER=1132491]@setter[/USER]
да и ещё, что это?
[/QUOTE]
[/QUOTE]-это ответ на форуме АХХАХАХ
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
8 Май 2023
Сообщения
407
Реакции[?]
5
Поинты[?]
6K
ну посмотрим умник как у тебя по своему заработает у меня все идеально работает

да и ещё, что это?
[/QUOTE]-это ответ на форуме АХХАХАХ
[/QUOTE]
Так можешь помочь я выше писал
 
Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2022
Сообщения
190
Реакции[?]
5
Поинты[?]
2K
-это ответ на форуме АХХАХАХ
[/QUOTE]
Так можешь помочь я выше писал
[/QUOTE]
ща я тему изменю
Посмотреть вложение 264606
что делать? + в Counter вначале вместо setter надо Setter
добавил в тему BooleanOption это исправит
стереть все и оставить setter
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
30 Июн 2023
Сообщения
96
Реакции[?]
1
Поинты[?]
3K
ебать дурак читать научись сначала о чем я пишу

да и ещё, что это?
[/QUOTE]-это ответ на форуме АХХАХАХ
[/QUOTE]
Чел какой я дурак , дурак это тот кто выставляет MultiBoxSettings, BooleanOption которые есть но название другое...
 
Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2022
Сообщения
190
Реакции[?]
5
Поинты[?]
2K
-это ответ на форуме АХХАХАХ
[/QUOTE]
Чел какой я дурак , дурак это тот кто выставляет MultiBoxSettings, BooleanOption которые есть но название другое...
[/QUOTE]
они переделанные читать научись по этому и дурак я не писал что их нету я написал что в них добавлено
 
Expensive Client
Пользователь
Статус
Оффлайн
Регистрация
12 Ноя 2022
Сообщения
140
Реакции[?]
39
Поинты[?]
39K
зачем переделывать ивенты, если ты спокойно на моих мог это сделать?

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


Зачем менять сеттинг если опять же, все можно было сделать на моих?
 
Сверху Снизу