-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Функция которая само наводится на противника и стреляет в него из арбалета, данная функция работает до 50 блоков сделал там изменение растояния, там нужно добавить ещё моды там на друзей т.д. но думаю пастеры разберутся и схавают это говно
Java:
package fun.relax.functions.impl.combat;
import com.google.common.eventbus.Subscribe;
import fun.relax.functions.api.Category;
import fun.relax.functions.api.Function;
import fun.relax.functions.api.FunctionRegister;
import fun.relax.events.EventUpdate;
import fun.relax.functions.settings.impl.SliderSetting;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.CrossbowItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.Hand;
@FunctionRegister(name = "CrossBowHelper", type = Category.Combat)
public class CrossBowHelper extends Function {
private final Minecraft mc = Minecraft.getInstance();
private final SliderSetting attackRange = new SliderSetting("Дистанция атаки", 10.0f, 3.0f, 50.0f, 0.1f);
public CrossBowHelper() {
addSettings(attackRange);
}
@Subscribe
public void onUpdate(EventUpdate event) {
if (isHoldingCrossbow()) {
LivingEntity target = findTarget();
if (target != null) {
updateRotation(target);
if (isCrossbowCharged()) {
shoot();
}
}
}
}
private boolean isHoldingCrossbow() {
ItemStack stack = mc.player.getHeldItem(Hand.MAIN_HAND);
return stack.getItem() instanceof CrossbowItem;
}
private LivingEntity findTarget() {
double range = attackRange.get();
LivingEntity closestEntity = null;
double closestDistance = range;
for (LivingEntity entity : mc.world.getEntitiesWithinAABB(LivingEntity.class, mc.player.getBoundingBox().grow(range))) {
if (entity != mc.player && entity.isAlive()) {
double distance = mc.player.getDistance(entity);
if (distance < closestDistance) {
closestDistance = distance;
closestEntity = entity;
}
}
}
return closestEntity;
}
private void updateRotation(LivingEntity target) {
Vector3d targetPos = target.getPositionVec().add(0, target.getEyeHeight() * 0.75, 0);
Vector3d playerPos = mc.player.getEyePosition(1.0F);
Vector3d direction = targetPos.subtract(playerPos);
double distance = MathHelper.sqrt(direction.x * direction.x + direction.z * direction.z);
double heightDifference = targetPos.y - playerPos.y;
float yaw = (float) Math.toDegrees(Math.atan2(direction.z, direction.x)) - 90;
float pitch = (float) (-Math.toDegrees(Math.atan2(heightDifference, distance)));
mc.player.rotationYaw = yaw;
mc.player.rotationPitch = pitch;
}
private boolean isCrossbowCharged() {
ItemStack stack = mc.player.getHeldItem(Hand.MAIN_HAND);
return stack.getItem() instanceof CrossbowItem && CrossbowItem.isCharged(stack);
}
private void shoot() {
ItemStack stack = mc.player.getHeldItem(Hand.MAIN_HAND);
if (CrossbowItem.isCharged(stack)) {
mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
}
}
}