Начинающий
- Статус
- Оффлайн
- Регистрация
- 18 Апр 2025
- Сообщения
- 107
- Реакции
- 1
- Выберите загрузчик игры
- Vanilla
без сс
Автоматически кидает дуэль игрокам
Автоматически кидает дуэль игрокам
AutoDuel:
package im.expensive.functions.impl.misc;
import com.google.common.collect.Lists;
import com.google.common.eventbus.Subscribe;
import com.mojang.authlib.GameProfile;
import im.expensive.events.EventUpdate;
import im.expensive.events.EventPacket;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.utils.math.StopWatch;
import net.minecraft.client.network.play.NetworkPlayerInfo;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.inventory.container.ChestContainer;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.network.IPacket;
import net.minecraft.network.play.server.SChatPacket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@FunctionRegister(name = "AutoDuelHelper", type = Category.Misc)
public class AutoDuel extends Function {
private static final Pattern pattern = Pattern.compile("^\\w{3,16}$");
private final ModeSetting gameMode = new ModeSetting("Мод", "Funtime", "Funtime", "ReallyWorld");
private final ModeSetting Armor = new ModeSetting("Броня соперника", "Незеритовая", "Незеритовая", "Алмазная")
.setVisible(() -> gameMode.is("Funtime"));
private final ModeSetting mode = new ModeSetting("Режим", "Шары",
"Шары", "Щит", "Шипы 3", "Незеритка", "Читерский рай", "Лук", "Классик", "Тотемы", "Нодебафф")
.setVisible(() -> gameMode.is("ReallyWorld"));
private double lastPosX, lastPosY, lastPosZ;
public AutoDuel() {
addSettings(gameMode, mode, Armor);
}
private final List<String> sent = Lists.newArrayList();
private int currentPlayerIndex = 0;
private final StopWatch counter = new StopWatch();
private final StopWatch counter2 = new StopWatch();
private final StopWatch counterChoice = new StopWatch();
private final StopWatch counterTo = new StopWatch();
[USER=1474073]@Subscribe[/USER]
private void OnUpdate(EventUpdate e) {
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.isReached(800L * players.size())) {
sent.clear();
currentPlayerIndex = 0;
counter2.reset();
}
if (gameMode.is("ReallyWorld")) {
if (!players.isEmpty()) {
if (counter.isReached(1000)) {
if (currentPlayerIndex >= players.size()) {
currentPlayerIndex = 0;
}
String player = players.get(currentPlayerIndex);
if (!sent.contains(player) && !player.equals(mc.session.getProfile().getName())) {
mc.player.sendChatMessage("/duel " + player);
sent.add(player);
}
currentPlayerIndex++;
counter.reset();
}
if (mc.player.openContainer instanceof ChestContainer chest) {
if (mc.currentScreen.getTitle().getString().contains("Выбор набора (1/1)")) {
if (counterChoice.isReached(150)) {
if (mode.is("Щит")) {
mc.playerController.windowClick(chest.windowId, 0, 0, ClickType.QUICK_MOVE, mc.player);
} else if (mode.is("Шипы 3")) {
mc.playerController.windowClick(chest.windowId, 1, 0, ClickType.QUICK_MOVE, mc.player);
} else if (mode.is("Лук")) {
mc.playerController.windowClick(chest.windowId, 2, 0, ClickType.QUICK_MOVE, mc.player);
} else if (mode.is("Тотемы")) {
mc.playerController.windowClick(chest.windowId, 3, 0, ClickType.QUICK_MOVE, mc.player);
} else if (mode.is("Нодебафф")) {
mc.playerController.windowClick(chest.windowId, 4, 0, ClickType.QUICK_MOVE, mc.player);
} else if (mode.is("Шары")) {
mc.playerController.windowClick(chest.windowId, 5, 0, ClickType.QUICK_MOVE, mc.player);
} else if (mode.is("Классик")) {
mc.playerController.windowClick(chest.windowId, 6, 0, ClickType.QUICK_MOVE, mc.player);
} else if (mode.is("Читерский рай")) {
mc.playerController.windowClick(chest.windowId, 7, 0, ClickType.QUICK_MOVE, mc.player);
} else if (mode.is("Незеритка")) {
mc.playerController.windowClick(chest.windowId, 8, 0, ClickType.QUICK_MOVE, mc.player);
}
counterChoice.reset();
}
} else if (mc.currentScreen.getTitle().getString().contains("Настройка поединка")) {
if (counterTo.isReached(150)) {
mc.playerController.windowClick(chest.windowId, 0, 0, ClickType.QUICK_MOVE, mc.player);
counterTo.reset();
}
}
}
}
} else if (gameMode.is("Funtime")) {
final List<String> filteredPlayers = getOnlinePlayersWithArmorFilter();
for (final String player : filteredPlayers) {
if (!sent.contains(player) && !player.equals(mc.session.getProfile().getName())) {
if (counter.isReached(1000)) {
mc.player.sendChatMessage("/duel invite " + player);
sent.add(player);
counter.reset();
}
}
}
}
}
[USER=1474073]@Subscribe[/USER]
private void onPacket(EventPacket event) {
if (event.isReceive()) {
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());
}
private List<String> getOnlinePlayersWithArmorFilter() {
List<String> onlinePlayers = getOnlinePlayers();
List<String> filteredPlayers = new ArrayList<>();
for (PlayerEntity player : mc.world.getPlayers()) {
String playerName = player.getGameProfile().getName();
if (!onlinePlayers.contains(playerName) || playerName.equals(mc.session.getProfile().getName())) {
continue;
}
double distance = mc.player.getDistance(player);
if (distance > 250) {
continue;
}
boolean matchesArmor = false;
if (Armor.is("Незеритовая")) {
matchesArmor = hasNetheriteArmor(player);
} else if (Armor.is("Алмазная")) {
matchesArmor = hasDiamondArmor(player);
}
if (matchesArmor) {
filteredPlayers.add(playerName);
}
}
return filteredPlayers;
}
private boolean hasNetheriteArmor(PlayerEntity player) {
for (EquipmentSlotType slot : new EquipmentSlotType[]{EquipmentSlotType.CHEST, EquipmentSlotType.LEGS,
EquipmentSlotType.HEAD, EquipmentSlotType.FEET}) {
ItemStack armor = player.getItemStackFromSlot(slot);
if (armor.getItem() instanceof ArmorItem armorItem) {
if (armorItem.getArmorMaterial() == net.minecraft.item.ArmorMaterial.NETHERITE) {
return true;
}
}
}
return false;
}
private boolean hasDiamondArmor(PlayerEntity player) {
for (EquipmentSlotType slot : new EquipmentSlotType[]{EquipmentSlotType.CHEST, EquipmentSlotType.LEGS,
EquipmentSlotType.HEAD, EquipmentSlotType.FEET}) {
ItemStack armor = player.getItemStackFromSlot(slot);
if (armor.getItem() instanceof ArmorItem armorItem) {
if (armorItem.getArmorMaterial() == net.minecraft.item.ArmorMaterial.DIAMOND) {
return true;
}
}
}
return false;
}
}