-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
недавно спастил AutoDuel с Excellent Client и решил слить вам тема для тех кто вообще не умеет пастить и не понимает сути что и как откуда береться
и так что же понадобиться еще для работо спосбоности AutoDuel нам понадобиться переделаный Listener
так же нам нужен Counter без изменений вот и он
завершающая деталь по моему будут ошибки пишите сюда если что переделаю тему и так вот MultiBoxSetting завершающая часть с getValues-getValue вот код
вот завершающий код BooleanOption
не стеснйтесь спрашивайте если какие то у вас ошибки сдесь в дс не буду помогать
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);
}
}
}
Listener:
package wtf.expensive.event;
import wtf.expensive.events.Event;
public interface Listener<T extends Event> {
void onEvent(T event);
}
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:
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:
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;
}
}
Последнее редактирование: