• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Часть функционала BaseFinder exp 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2024
Сообщения
114
Реакции
0
Выберите загрузчик игры
  1. Vanilla
  2. Forge
Привет, в дельту уже добнули и прошло время так что сливаю. Летает по кордам фт ищет игроков и записывает корды ник в блокнот на рабочем столе, можете доделать чтобы прям на экране показывало
СС снизу будет
package expensive.modules.impl.misc;

import expensive.modules.api.Category;
import expensive.modules.api.Function;
import expensive.modules.api.FunctionRegister;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.StringTextComponent;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;

@FunctionRegister(name = "PlayerFinder", type = Category.Misc)
public class PlayerFinder extends Function {

private final List<PlayerRecord> foundPlayers = new ArrayList<>();
private volatile boolean isScanning = false;
private BlockPos currentTarget;
private final int minCoord = -2500;
private final int maxCoord = 2500;
private final Random random = new Random();
private ScheduledExecutorService scheduler;
private ScheduledFuture<?> scanTask;
private boolean isFirstRun = true;
private long lastFireworkTime = 0;
private final int targetHeight = 120;
private final int fireworkInterval = 5000;
private boolean reachedTargetHeight = false;
private long startTime;
private boolean elytraEquipped = false;
private boolean isWaitingForElytra = false;

private static class PlayerRecord {
final String name;
final BlockPos position;
final Date foundTime;

PlayerRecord(String name, BlockPos position) {
this.name = name;
this.position = position;
this.foundTime = new Date();
}
}

@Override
public void onEnable() {
super.onEnable();

if (isScanning) return;

foundPlayers.clear();
isScanning = true;
isFirstRun = true;
reachedTargetHeight = false;
elytraEquipped = false;
isWaitingForElytra = false;
startTime = System.currentTimeMillis();

scheduler = Executors.newSingleThreadScheduledExecutor();

scanTask = scheduler.scheduleAtFixedRate(() -> {
try {
if (!isScanning || mc.player == null || mc.world == null) return;

if (!elytraEquipped) {
if (!hasElytraEquipped()) {
if (!isWaitingForElytra) {
equipElytra();
isWaitingForElytra = true;
startTime = System.currentTimeMillis();
}
return;
} else {
elytraEquipped = true;
startTime = System.currentTimeMillis();
sendMessage("§a[PlayerFinder] Элитра надета, готовимся к взлету...");
return;
}
}

if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
mc.player.jump();
mc.player.jump();
return;
}

if (!reachedTargetHeight) {
climbToTargetHeight();
return;
}

checkForPlayers();
maintainAltitude();
avoidCollisions();

if (isFirstRun || currentTarget == null || isAtTarget()) {
isFirstRun = false;
setRandomTarget();
}

flyToTarget();

} catch (Exception e) {
e.printStackTrace();
sendMessage("§c[PlayerFinder] Ошибка: " + e.getMessage());
}
}, 0, 50, TimeUnit.MILLISECONDS);

sendMessage("§a[PlayerFinder] Сканирование начато. Проверка элитры...");
}

@Override
public void onDisable() {
super.onDisable();

if (!isScanning) return;

isScanning = false;

try {
if (scanTask != null) {
scanTask.cancel(true);
}

saveResultsToFile();

if (scheduler != null) {
scheduler.shutdownNow();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
scanTask = null;
scheduler = null;
currentTarget = null;
}

sendMessage("§c[PlayerFinder] Сканирование остановлено.");
}

private boolean hasElytraEquipped() {
ItemStack chestplate = mc.player.getItemStackFromSlot(EquipmentSlotType.CHEST);
return chestplate.getItem() == Items.ELYTRA && chestplate.getDamage() < chestplate.getMaxDamage() - 10;
}

private void equipElytra() {
ItemStack currentChestplate = mc.player.getItemStackFromSlot(EquipmentSlotType.CHEST);
boolean hasChestplate = !currentChestplate.isEmpty() && currentChestplate.getItem() != Items.ELYTRA;

for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == Items.ELYTRA && stack.getDamage() < stack.getMaxDamage() - 10) {

if (hasChestplate) {
int emptySlot = -1;
for (int j = 0; j < mc.player.inventory.getSizeInventory(); j++) {
if (mc.player.inventory.getStackInSlot(j).isEmpty()) {
emptySlot = j;
break;
}
}

if (emptySlot != -1) {
mc.playerController.windowClick(
mc.player.openContainer.windowId,
38,
emptySlot < 9 ? emptySlot + 36 : emptySlot,
ClickType.SWAP,
mc.player
);
}
}

mc.playerController.windowClick(
mc.player.openContainer.windowId,
i < 9 ? i + 36 : i,
38,
ClickType.SWAP,
mc.player
);
sendMessage("§a[PlayerFinder] Элитра надета автоматически");
return;
}
}

sendMessage("§c[PlayerFinder] В инвентаре нет пригодной элитры!");
super.onDisable();
}

private void climbToTargetHeight() {
if (mc.player.getPosY() < targetHeight) {
mc.player.rotationPitch = -45;

if (System.currentTimeMillis() - lastFireworkTime > 1000) {
useFirework();
lastFireworkTime = System.currentTimeMillis();
}
} else {
reachedTargetHeight = true;
mc.player.rotationPitch = 0;
sendMessage("§a[PlayerFinder] Достигнута нужная высота 120 блоков");
}
}

private void maintainAltitude() {
if (!mc.player.isElytraFlying()) return;

if (mc.player.getPosY() < targetHeight - 5) {
mc.player.rotationPitch = -15;
} else if (mc.player.getPosY() > targetHeight + 5) {
mc.player.rotationPitch = 5;
} else {
mc.player.rotationPitch = 0;
}
}

private void avoidCollisions() {
if (!mc.player.isElytraFlying()) return;

Vector3d lookVec = mc.player.getLookVec();
BlockPos checkPos = new BlockPos(
mc.player.getPosX() + lookVec.x * 15,
mc.player.getPosY() + lookVec.y * 15,
mc.player.getPosZ() + lookVec.z * 15
);

if (!mc.world.getBlockState(checkPos).isAir()) {
mc.player.rotationYaw += 45;
sendMessage("§e[PlayerFinder] Обход препятствия");
}
}

private boolean isAtTarget() {
if (mc.player == null || currentTarget == null) return true;
BlockPos playerPos = mc.player.getPosition();
return playerPos.withinDistance(currentTarget, 15);
}

private void setRandomTarget() {
int x = Math.min(maxCoord, Math.max(minCoord, random.nextInt(maxCoord - minCoord) + minCoord));
int z = Math.min(maxCoord, Math.max(minCoord, random.nextInt(maxCoord - minCoord) + minCoord));
currentTarget = new BlockPos(x, targetHeight, z);
sendMessage("§b[PlayerFinder] Летим к: X: " + x + " Z: " + z);
}

private void flyToTarget() {
if (currentTarget == null || !mc.player.isElytraFlying()) return;

Vector3d targetVec = Vector3d.copyCentered(currentTarget);
Vector3d playerVec = mc.player.getPositionVec();
Vector3d direction = targetVec.subtract(playerVec).normalize();

float yaw = (float) Math.toDegrees(Math.atan2(direction.z, direction.x)) - 90;
mc.player.rotationYaw = yaw;

if (System.currentTimeMillis() - lastFireworkTime > fireworkInterval) {
useFirework();
lastFireworkTime = System.currentTimeMillis();
}
}

private void useFirework() {
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == Items.FIREWORK_ROCKET) {
int prevSlot = mc.player.inventory.currentItem;
mc.player.inventory.currentItem = i;
mc.gameSettings.keyBindUseItem.setPressed(true);
scheduler.schedule(() -> mc.gameSettings.keyBindUseItem.setPressed(false), 100, TimeUnit.MILLISECONDS);
mc.player.inventory.currentItem = prevSlot;
return;
}
}
sendMessage("§c[PlayerFinder] Нет фейерверков в горячей панели!");
}

private void checkForPlayers() {
if (mc.world == null) return;

synchronized (foundPlayers) {
for (PlayerEntity player : mc.world.getPlayers()) {
if (player == mc.player) continue;

boolean exists = foundPlayers.stream()
.anyMatch(r -> r.name.equals(player.getName().getString()));

if (!exists) {
PlayerRecord record = new PlayerRecord(
player.getName().getString(),
player.getPosition()
);
foundPlayers.add(record);

String msg = String.format("§6[PlayerFinder] Найден игрок: §e%s §6в координатах §bX: %d Y: %d Z: %d",
record.name, record.position.getX(), record.position.getY(), record.position.getZ());
sendMessage(msg);
}
}
}
}

private void saveResultsToFile() {
String desktop = System.getProperty("user.home") + "/Desktop/";
String filename = "Eternall_" + new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date()) + ".txt";

synchronized (foundPlayers) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(desktop + filename))) {
writer.write("Найденные игроки - " + new Date() + "\n\n");

for (PlayerRecord record : foundPlayers) {
writer.write(String.format(
"Игрок: %-16s | Координаты: X: %-6d Y: %-4d Z: %-6d | Время: %s\n",
record.name,
record.position.getX(),
record.position.getY(),
record.position.getZ(),
new SimpleDateFormat("HH:mm:ss").format(record.foundTime)
));
}

sendMessage("§a[PlayerFinder] Результаты сохранены в файл: §e" + filename);
} catch (IOException e) {
sendMessage("§c[PlayerFinder] Ошибка сохранения: " + e.getMessage());
}
}
}

private void sendMessage(String message) {
if (mc.player != null) {
mc.player.sendMessage(new StringTextComponent(message), mc.player.getUniqueID());
}
}
}

IMG_20250715_003748_806.jpg

Удачного пользования ☺
 
ну годно
 
Привет, в дельту уже добнули и прошло время так что сливаю. Летает по кордам фт ищет игроков и записывает корды ник в блокнот на рабочем столе, можете доделать чтобы прям на экране показывало
СС снизу будет


Посмотреть вложение 311021
Удачного пользования ☺
классно, иду pazzztitь
 
шлак от джпт
 
Good хз как на фт робит , банится ли но в оденочно гуд полный
 
Ну тогда ладно , но честно код не доработан в плане обхода припядствей но думаю если кому-то надо будет то он сам доработает
Поставить высоту 160 я не думаю что это сложно
 
уже бегу пастить
 
фикс полета на элитрах?
ты просишь фикс?
если да то у меня для тебя плохая некто дебе фикс просто так не даст ну если напишешь пж дайте мб а просто так нет сделай сам сложно что ли
 
ты просишь фикс?
если да то у меня для тебя плохая некто дебе фикс просто так не даст ну если напишешь пж дайте мб а просто так нет сделай сам сложно что ли
хахаахахах, типок, перечитай весь разговор. речь про фикс с бейсфайндера с серверной стороны
самое интересное, что ты пишешь "сделай сам, сложно что-ли" и одновременно "ну если напишешь пж дайте мб"
 

Похожие темы

Назад
Сверху Снизу