-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Как и обещал . В серьёз не воспринимать... Хотя мб норм
Код:
package ru.test.functions.impl.combat;
import com.google.common.eventbus.Subscribe;
import ru.test.events.WorldEvent;
import ru.test.functions.api.Category;
import ru.test.functions.api.Function;
import ru.wery.functions.api.FunctionRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EnderPearlEntity;
import net.minecraft.item.Items;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.Hand;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import java.util.List;
import java.util.stream.Collectors;
@FunctionRegister(name = "TargetPearl", type = Category.Render)
public class TargetPearl extends Function {
private long lastPearlThrowTime = 0;
private static final int PEARL_THROW_DELAY = 350; // Задержка броска перла в миллисекундах
@Subscribe
public void onRender(WorldEvent event) {
if (System.currentTimeMillis() - lastPearlThrowTime < PEARL_THROW_DELAY) {
return; // Если задержка ещё не прошла, выходим из метода
}
List<EnderPearlEntity> enderPearls = mc.world.getAllEntities().stream()
.filter(entity -> entity instanceof EnderPearlEntity)
.map(entity -> (EnderPearlEntity) entity)
.filter(pearl -> !isOwnEnderPearl(pearl))
.collect(Collectors.toList());
for (EnderPearlEntity pearl : enderPearls) {
Vector3d targetPos = predictPearlLanding(pearl);
if (targetPos != null) {
aimAtPosition(targetPos);
throwPearl();
lastPearlThrowTime = System.currentTimeMillis();
break; // Бросаем только один перл за цикл
}
}
}
private void aimAtPosition(Vector3d targetPos) {
Vector3d playerPos = mc.player.getPositionVec().add(0, mc.player.getEyeHeight(), 0);
Vector3d direction = targetPos.subtract(playerPos).normalize();
float pitch = (float) -Math.toDegrees(Math.asin(direction.y));
float yaw = (float) Math.toDegrees(Math.atan2(direction.z, direction.x)) - 90;
mc.player.rotationPitch = pitch;
mc.player.rotationYaw = yaw;
}
private void throwPearl() {
if (mc.player.getCooldownTracker().hasCooldown(Items.ENDER_PEARL)) {
return; // Если перл на перезарядке, не бросаем
}
if (mc.player.getHeldItemMainhand().getItem() != Items.ENDER_PEARL) {
// Если в основной руке нет перла, пытаемся найти его в инвентаре
int pearlSlot = findItemInHotbar(Items.ENDER_PEARL);
if (pearlSlot != -1) {
mc.player.inventory.currentItem = pearlSlot;
} else {
return; // Если перлов нет, выходим из метода
}
}
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));
mc.player.swingArm(Hand.MAIN_HAND);
}
private int findItemInHotbar(Item item) {
for (int i = 0; i < 9; i++) {
if (mc.player.inventory.getStackInSlot(i).getItem() == item) {
return i;
}
}
return -1; // Предмет не найден
}
private Vector3d predictPearlLanding(EnderPearlEntity pearl) {
Vector3d position = pearl.getPositionVec();
Vector3d motion = pearl.getMotion();
RayTraceContext context = new RayTraceContext(
position,
position.add(motion.scale(50)), // Прогнозируем на расстояние 50 блоков
RayTraceContext.BlockMode.COLLIDER,
RayTraceContext.FluidMode.NONE,
pearl
);
BlockRayTraceResult result = mc.world.rayTraceBlocks(context);
if (result.getType() == RayTraceResult.Type.BLOCK) {
return result.getHitVec(); // Возвращаем точку столкновения с блоком
}
return null; // Если столкновения нет, возвращаем null
}
private boolean isOwnEnderPearl(EnderPearlEntity pearl) {
return pearl.getThrowerId() != null && pearl.getThrowerId().equals(mc.player.getUniqueID());
}
}