Исходник CrystalTap | AutoCrystal | Zenith Recode 1.21.4

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
18 Май 2025
Сообщения
52
Реакции
1
Выберите загрузчик игры
  1. Vanilla
  2. Fabric
Код:
Expand Collapse Copy
package zenith.pl.client.modules.impl.combat;

import com.darkmagician6.eventapi.EventTarget;
import net.minecraft.block.Blocks;
import net.minecraft.entity.Entity;
import net.minecraft.entity.decoration.EndCrystalEntity;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.hit.EntityHitResult;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3d;
import zenith.pl.base.events.impl.player.EventUpdate;
import zenith.pl.client.modules.api.Category;
import zenith.pl.client.modules.api.Module;
import zenith.pl.client.modules.api.ModuleAnnotation;
import zenith.pl.client.modules.api.setting.impl.BooleanSetting;
import zenith.pl.client.modules.api.setting.impl.NumberSetting;

@ModuleAnnotation(name = "CrystalTap", category = Category.COMBAT, description = "Мигом взывает кристал")
public class CrystalTap extends Module {
    public static final CrystalTap INSTANCE = new CrystalTap();
    public static final BooleanSetting autoAddCrystal = new BooleanSetting("Автоматически ставить крисстал", true);
    public static final NumberSetting addCooldown = new NumberSetting("Задержка на ставку крисстала", 0,0,5,1);
    public static final NumberSetting attackCooldown = new NumberSetting("Задержка на атаку крисстала", 0,0,5,1);

    int attackCrystalCooldown;
    int addCrystalCooldown;

    private void addCrystal() {
        if (mc.crosshairTarget instanceof BlockHitResult obsidianTarget) {
            if (mc.world.getBlockState(obsidianTarget.getBlockPos()).getBlock() == Blocks.OBSIDIAN) {

                for (Entity entity : mc.world.getEntities()) {
                    if (entity instanceof EndCrystalEntity crystal) {
                        if (crystal.getBlockPos().down().equals(obsidianTarget.getBlockPos())) return;
                    }
                }

                Direction side = obsidianTarget.getSide();
                BlockHitResult crystalHit = new BlockHitResult(obsidianTarget.getPos(), side, obsidianTarget.getBlockPos(), true);

                if (mc.player.getMainHandStack().getItem() != Items.END_CRYSTAL) return;
                if (addCrystalCooldown <= addCooldown.getCurrent()) {
                    mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, crystalHit);
                    addCrystalCooldown = 0;
                } else addCrystalCooldown++;
            }
        }
    }

    @EventTarget
    public void onUpdate(EventUpdate event) {
        if (autoAddCrystal.isEnabled()) addCrystal();

        for (Entity entity : mc.world.getEntities()) {
            if (entity instanceof EndCrystalEntity crystal) {

                if (mc.crosshairTarget instanceof EntityHitResult hitResult) {

                    if (hitResult.getEntity() instanceof EndCrystalEntity) {
                        if (attackCrystalCooldown >= attackCooldown.getCurrent()) {
                            mc.interactionManager.attackEntity(mc.player, hitResult.getEntity());
                            mc.player.swingHand(Hand.MAIN_HAND);

                            attackCrystalCooldown = 0;
                        } else attackCrystalCooldown++;
                    }
                }
            }
        }
    }
}

upd:
+ настройка "авто ставить крисстал"
+ сделал чтоб не было жалоб от ач "dublication place"
+ минимальная задержка

очень мощная функция

Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Назад
Сверху Снизу