Вопрос Проблемы с Eva-клиентами

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2022
Сообщения
69
Реакции
0

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Проблема с модулями
Сделал новый модуль ходел добавить
зашел в модуль менеждер вписал все как надо
private TrapESP TrapESP;
TrapESP = new TrapESP();
В клик гуи нету, через .bind тоже не кодируется пробовал с разными модулями результат 1
Мб проблема в самом модуле?( приложу ниже )


Claude code:
Expand Collapse Copy
package biz.chipa.modules.impl.render;

import biz.chipa.chipa;
import biz.chipa.events.DEngineEvent;
import biz.chipa.events.EventChangeWorld;
import biz.chipa.modules.api.Category;
import biz.chipa.modules.api.Module;
import biz.chipa.modules.api.ModuleRegister;
import biz.chipa.modules.settings.impl.BooleanSetting;
import biz.chipa.modules.settings.impl.SliderSetting;
import biz.chipa.utils.client.IMinecraft;
import biz.chipa.utils.client.TimerUtility;
import biz.chipa.utils.render.RectUtility;
import biz.chipa.utils.render.color.ColorUtils;
import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;

import lombok.Getter;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import org.lwjgl.opengl.GL11;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@ModuleRegister(name = "TrapESP", category = Category.Render, description = "ESP для отображения ловушек от Трапки")
public class TrapESP extends Module {

    private final List<TrapLocation> traps = new CopyOnWriteArrayList<>();
    private final ResourceLocation pickaxeTexture = new ResourceLocation("minecraft", "textures/item/netherite_pickaxe.png");

    // Настройки
    private final SliderSetting maxDistance = new SliderSetting("Дистанция", 100, 10, 200, 5);
    private final SliderSetting trapLifetime = new SliderSetting("Время жизни", 30, 5, 120, 5);
    private final BooleanSetting showDistance = new BooleanSetting("Показывать расстояние", true);
    private final BooleanSetting showPlayerName = new BooleanSetting("Показывать игрока", true);
    private final BooleanSetting showOutline = new BooleanSetting("Контур блока", true);
    private final BooleanSetting showIcon = new BooleanSetting("Показывать иконку", true);

    // Переменные для отслеживания
    private boolean wasUsingItem = false;
    private int lastUseTime = 0;

    public TrapESP() {
        addSettings(maxDistance, trapLifetime, showDistance, showPlayerName, showOutline, showIcon);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        return false;
    }

    @Override
    public boolean onDisable() {
        super.onDisable();
        traps.clear();
        return false;
    }

    @Subscribe
    public void onChange(EventChangeWorld e) {
        traps.clear();
    }

    @Subscribe
    public void onRender(DEngineEvent event) {
        ClientPlayerEntity player = IMinecraft.mc.player;
        if (player == null) return;

        // Проверяем использование предмета
        checkTrapUsage(player);

        if (traps.isEmpty()) return;

        MatrixStack matrix = event.getMatrix();
        Vector3d playerPos = player.getPositionVec();

        // Удаляем старые или далекие ловушки
        traps.removeIf(trap ->
                trap.isExpired(trapLifetime.get().intValue() * 1000) ||
                        trap.getDistanceTo(playerPos) > maxDistance.get().intValue()
        );

        if (traps.isEmpty()) return;

        boolean lightEnabled = GL11.glIsEnabled(GL11.GL_LIGHTING);

        RenderSystem.pushMatrix();
        matrix.push();

        setupRenderState(lightEnabled);

        for (TrapLocation trap : traps) {
            double distance = trap.getDistanceTo(playerPos);
            if (distance <= maxDistance.get().intValue()) {
                renderTrap(matrix, trap, player, distance);
            }
        }

        cleanupRenderState(lightEnabled, matrix);
    }

    private void checkTrapUsage(ClientPlayerEntity player) {
        // Проверяем, держит ли игрок незеритовую кирку
        boolean holdingPickaxe = player.getHeldItemMainhand().getItem() == Items.NETHERITE_PICKAXE ||
                player.getHeldItemOffhand().getItem() == Items.NETHERITE_PICKAXE;

        if (!holdingPickaxe) {
            wasUsingItem = false;
            return;
        }

        // Проверяем использование предмета разными способами
        boolean isUsingItem = false;

        // Способ 1: проверка активности руки
        if (player.isHandActive()) {
            isUsingItem = true;
        }

        // Способ 2: проверка через свинг анимацию
        if (player.isSwingInProgress) {
            isUsingItem = true;
        }

        // Способ 3: проверка через правую кнопку мыши (если доступно)
        if (IMinecraft.mc.gameSettings != null && IMinecraft.mc.gameSettings.keyBindUseItem.isPressed()) {
            isUsingItem = true;
        }

        // Если предмет начал использоваться
        if (isUsingItem && !wasUsingItem) {
            int currentTime = player.ticksExisted;
            if (currentTime - lastUseTime > 20) { // Защита от спама (1 секунда)
                BlockPos pos = player.getPosition();
                String playerName = player.getName().getString();

                traps.add(new TrapLocation(pos, playerName));
                lastUseTime = currentTime;

                // Выводим сообщение в чат (опционально)
            }
        }

        wasUsingItem = isUsingItem;
    }

    // Метод для ручного добавления ловушки (можно вызвать из команды или хоткея)


    // Метод для очистки всех ловушек


    private void setupRenderState(boolean lightEnabled) {
        RenderSystem.enableBlend();
        RenderSystem.disableAlphaTest();
        RenderSystem.depthMask(false);
        RenderSystem.disableCull();

        if (lightEnabled) {
            RenderSystem.disableLighting();
        }

        GL11.glShadeModel(GL11.GL_SMOOTH);
        RenderSystem.blendFuncSeparate(
                GlStateManager.SourceFactor.SRC_ALPHA,
                GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA,
                GlStateManager.SourceFactor.ONE,
                GlStateManager.DestFactor.ZERO
        );
    }

    private void renderTrap(MatrixStack matrix, TrapLocation trap, ClientPlayerEntity player, double distance) {
        Vector3d trapPos = new Vector3d(trap.position.getX() + 0.5, trap.position.getY() + 1.5, trap.position.getZ() + 0.5);

        // Рендерим текст
        renderTrapText(matrix, trapPos, trap, distance);

        // Рендерим иконку
        if (showIcon.get()) {
            renderTrapIcon(matrix, trapPos);
        }

        // Рендерим контур блока
        if (showOutline.get()) {
            renderTrapOutline(matrix, trap.position);
        }
    }

    private void renderTrapText(MatrixStack matrix, Vector3d pos, TrapLocation trap, double distance) {
        matrix.push();
        RectUtility.setupOrientationMatrix(matrix, (float) pos.x, (float) pos.y, (float) pos.z);
        matrix.rotate(IMinecraft.mc.getRenderManager().getCameraOrientation());
        matrix.scale(-0.025F, -0.025F, 0.025F);

        FontRenderer font = IMinecraft.mc.fontRenderer;

        // Подготавливаем текст
        String trapText = "§c§lТРАПКА";
        String distanceText = showDistance.get() ? String.format("§f%.1fm", distance) : "";
        String playerText = showPlayerName.get() ? "§7" + trap.playerName : "";

        // Вычисляем размеры
        int trapWidth = font.getStringWidth(trapText);
        int distWidth = showDistance.get() ? font.getStringWidth(distanceText) : 0;
        int playerWidth = showPlayerName.get() ? font.getStringWidth(playerText) : 0;
        int maxWidth = Math.max(Math.max(trapWidth, distWidth), playerWidth);

        // Считаем высоту фона
        int lines = 1; // Основной текст
        if (showDistance.get()) lines++;
        if (showPlayerName.get()) lines++;
        int bgHeight = lines * 10;

        // Рисуем фон
        int bgColor = ColorUtils.reAlphaInt(0x000000, 128);
        RectUtility.drawRect(matrix, -maxWidth/2 - 4, -5, maxWidth/2 + 4, bgHeight + 5,
                bgColor, bgColor, bgColor, bgColor, false, false);

        int yOffset = 0;

        // Рендерим текст трапки
        font.drawStringWithShadow(matrix, trapText, -trapWidth/2, yOffset, 0xFFFF5555);
        yOffset += 10;

        // Рендерим расстояние
        if (showDistance.get()) {
            font.drawStringWithShadow(matrix, distanceText, -distWidth/2, yOffset, 0xFFFFFFFF);
            yOffset += 10;
        }

        // Рендерим имя игрока
        if (showPlayerName.get()) {
            font.drawStringWithShadow(matrix, playerText, -playerWidth/2, yOffset, 0xFFAAAAAA);
        }

        matrix.pop();
    }

    private void renderTrapIcon(MatrixStack matrix, Vector3d pos) {
        matrix.push();
        RectUtility.setupOrientationMatrix(matrix, (float) pos.x, (float) pos.y + 0.3f, (float) pos.z);
        matrix.rotate(IMinecraft.mc.getRenderManager().getCameraOrientation());
        matrix.scale(0.3F, 0.3F, 0.3F);

        // Рендерим иконку кирки
        RectUtility.bindTexture(pickaxeTexture);

        int color = ColorUtils.reAlphaInt(0xFF5555, 200);
        RectUtility.drawRect(matrix, -0.5f, -0.5f, 0.5f, 0.5f, color, color, color, color, true, true);

        matrix.pop();
    }

    private void renderTrapOutline(MatrixStack matrix, BlockPos pos) {
        matrix.push();

        // Настройки для линий
        RenderSystem.lineWidth(2.0F);
        RenderSystem.disableTexture();

        double x = pos.getX();
        double y = pos.getY();
        double z = pos.getZ();

        // Цвет контура - красный с прозрачностью
        int outlineColor = ColorUtils.reAlphaInt(0xFF5555, 150);
        float red = ((outlineColor >> 16) & 0xFF) / 255.0f;
        float green = ((outlineColor >> 8) & 0xFF) / 255.0f;
        float blue = (outlineColor & 0xFF) / 255.0f;
        float alpha = ((outlineColor >> 24) & 0xFF) / 255.0f;

        RenderSystem.color4f(red, green, blue, alpha);

        GL11.glBegin(GL11.GL_LINES);

        // Куб контур
        // Нижние линии
        GL11.glVertex3d(x, y, z); GL11.glVertex3d(x + 1, y, z);
        GL11.glVertex3d(x + 1, y, z); GL11.glVertex3d(x + 1, y, z + 1);
        GL11.glVertex3d(x + 1, y, z + 1); GL11.glVertex3d(x, y, z + 1);
        GL11.glVertex3d(x, y, z + 1); GL11.glVertex3d(x, y, z);

        // Верхние линии
        GL11.glVertex3d(x, y + 1, z); GL11.glVertex3d(x + 1, y + 1, z);
        GL11.glVertex3d(x + 1, y + 1, z); GL11.glVertex3d(x + 1, y + 1, z + 1);
        GL11.glVertex3d(x + 1, y + 1, z + 1); GL11.glVertex3d(x, y + 1, z + 1);
        GL11.glVertex3d(x, y + 1, z + 1); GL11.glVertex3d(x, y + 1, z);

        // Вертикальные линии
        GL11.glVertex3d(x, y, z); GL11.glVertex3d(x, y + 1, z);
        GL11.glVertex3d(x + 1, y, z); GL11.glVertex3d(x + 1, y + 1, z);
        GL11.glVertex3d(x + 1, y, z + 1); GL11.glVertex3d(x + 1, y + 1, z + 1);
        GL11.glVertex3d(x, y, z + 1); GL11.glVertex3d(x, y + 1, z + 1);

        GL11.glEnd();

        RenderSystem.enableTexture();
        RenderSystem.lineWidth(1.0F);
        RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);

        matrix.pop();
    }

    private void cleanupRenderState(boolean lightEnabled, MatrixStack matrix) {
        RenderSystem.blendFuncSeparate(
                GlStateManager.SourceFactor.SRC_ALPHA,
                GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA,
                GlStateManager.SourceFactor.ONE,
                GlStateManager.DestFactor.ZERO
        );

        GlStateManager.clearCurrentColor();
        GL11.glShadeModel(GL11.GL_FLAT);

        if (lightEnabled) {
            RenderSystem.enableLighting();
        }

        RenderSystem.enableCull();
        RenderSystem.depthMask(true);
        RenderSystem.enableAlphaTest();
        matrix.pop();
        RenderSystem.popMatrix();
    }

    // Геттеры для внешнего доступа
    public List<TrapLocation> getTraps() {
        return traps;
    }

    public int getTrapsCount() {
        return traps.size();
    }

    @Getter
    public static class TrapLocation {
        private final BlockPos position;
        private final long createTime;
        private final String playerName;
        private final TimerUtility timer = new TimerUtility();

        public TrapLocation(BlockPos pos, String playerName) {
            this.position = pos;
            this.createTime = System.currentTimeMillis();
            this.playerName = playerName;
            this.timer.reset();
        }

        public boolean isExpired(int lifetimeMs) {
            return timer.isReached(lifetimeMs);
        }

        public double getDistanceTo(Vector3d playerPos) {
            double dx = position.getX() + 0.5 - playerPos.x;
            double dy = position.getY() + 0.5 - playerPos.y;
            double dz = position.getZ() + 0.5 - playerPos.z;
            return Math.sqrt(dx * dx + dy * dy + dz * dz);
        }
    }
}
 
Проблема с модулями
Сделал новый модуль ходел добавить
зашел в модуль менеждер вписал все как надо
private TrapESP TrapESP;
TrapESP = new TrapESP();
В клик гуи нету, через .bind тоже не кодируется пробовал с разными модулями результат 1
Мб проблема в самом модуле?( приложу ниже )


Claude code:
Expand Collapse Copy
package biz.chipa.modules.impl.render;

import biz.chipa.chipa;
import biz.chipa.events.DEngineEvent;
import biz.chipa.events.EventChangeWorld;
import biz.chipa.modules.api.Category;
import biz.chipa.modules.api.Module;
import biz.chipa.modules.api.ModuleRegister;
import biz.chipa.modules.settings.impl.BooleanSetting;
import biz.chipa.modules.settings.impl.SliderSetting;
import biz.chipa.utils.client.IMinecraft;
import biz.chipa.utils.client.TimerUtility;
import biz.chipa.utils.render.RectUtility;
import biz.chipa.utils.render.color.ColorUtils;
import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;

import lombok.Getter;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import org.lwjgl.opengl.GL11;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@ModuleRegister(name = "TrapESP", category = Category.Render, description = "ESP для отображения ловушек от Трапки")
public class TrapESP extends Module {

    private final List<TrapLocation> traps = new CopyOnWriteArrayList<>();
    private final ResourceLocation pickaxeTexture = new ResourceLocation("minecraft", "textures/item/netherite_pickaxe.png");

    // Настройки
    private final SliderSetting maxDistance = new SliderSetting("Дистанция", 100, 10, 200, 5);
    private final SliderSetting trapLifetime = new SliderSetting("Время жизни", 30, 5, 120, 5);
    private final BooleanSetting showDistance = new BooleanSetting("Показывать расстояние", true);
    private final BooleanSetting showPlayerName = new BooleanSetting("Показывать игрока", true);
    private final BooleanSetting showOutline = new BooleanSetting("Контур блока", true);
    private final BooleanSetting showIcon = new BooleanSetting("Показывать иконку", true);

    // Переменные для отслеживания
    private boolean wasUsingItem = false;
    private int lastUseTime = 0;

    public TrapESP() {
        addSettings(maxDistance, trapLifetime, showDistance, showPlayerName, showOutline, showIcon);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        return false;
    }

    @Override
    public boolean onDisable() {
        super.onDisable();
        traps.clear();
        return false;
    }

    @Subscribe
    public void onChange(EventChangeWorld e) {
        traps.clear();
    }

    @Subscribe
    public void onRender(DEngineEvent event) {
        ClientPlayerEntity player = IMinecraft.mc.player;
        if (player == null) return;

        // Проверяем использование предмета
        checkTrapUsage(player);

        if (traps.isEmpty()) return;

        MatrixStack matrix = event.getMatrix();
        Vector3d playerPos = player.getPositionVec();

        // Удаляем старые или далекие ловушки
        traps.removeIf(trap ->
                trap.isExpired(trapLifetime.get().intValue() * 1000) ||
                        trap.getDistanceTo(playerPos) > maxDistance.get().intValue()
        );

        if (traps.isEmpty()) return;

        boolean lightEnabled = GL11.glIsEnabled(GL11.GL_LIGHTING);

        RenderSystem.pushMatrix();
        matrix.push();

        setupRenderState(lightEnabled);

        for (TrapLocation trap : traps) {
            double distance = trap.getDistanceTo(playerPos);
            if (distance <= maxDistance.get().intValue()) {
                renderTrap(matrix, trap, player, distance);
            }
        }

        cleanupRenderState(lightEnabled, matrix);
    }

    private void checkTrapUsage(ClientPlayerEntity player) {
        // Проверяем, держит ли игрок незеритовую кирку
        boolean holdingPickaxe = player.getHeldItemMainhand().getItem() == Items.NETHERITE_PICKAXE ||
                player.getHeldItemOffhand().getItem() == Items.NETHERITE_PICKAXE;

        if (!holdingPickaxe) {
            wasUsingItem = false;
            return;
        }

        // Проверяем использование предмета разными способами
        boolean isUsingItem = false;

        // Способ 1: проверка активности руки
        if (player.isHandActive()) {
            isUsingItem = true;
        }

        // Способ 2: проверка через свинг анимацию
        if (player.isSwingInProgress) {
            isUsingItem = true;
        }

        // Способ 3: проверка через правую кнопку мыши (если доступно)
        if (IMinecraft.mc.gameSettings != null && IMinecraft.mc.gameSettings.keyBindUseItem.isPressed()) {
            isUsingItem = true;
        }

        // Если предмет начал использоваться
        if (isUsingItem && !wasUsingItem) {
            int currentTime = player.ticksExisted;
            if (currentTime - lastUseTime > 20) { // Защита от спама (1 секунда)
                BlockPos pos = player.getPosition();
                String playerName = player.getName().getString();

                traps.add(new TrapLocation(pos, playerName));
                lastUseTime = currentTime;

                // Выводим сообщение в чат (опционально)
            }
        }

        wasUsingItem = isUsingItem;
    }

    // Метод для ручного добавления ловушки (можно вызвать из команды или хоткея)


    // Метод для очистки всех ловушек


    private void setupRenderState(boolean lightEnabled) {
        RenderSystem.enableBlend();
        RenderSystem.disableAlphaTest();
        RenderSystem.depthMask(false);
        RenderSystem.disableCull();

        if (lightEnabled) {
            RenderSystem.disableLighting();
        }

        GL11.glShadeModel(GL11.GL_SMOOTH);
        RenderSystem.blendFuncSeparate(
                GlStateManager.SourceFactor.SRC_ALPHA,
                GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA,
                GlStateManager.SourceFactor.ONE,
                GlStateManager.DestFactor.ZERO
        );
    }

    private void renderTrap(MatrixStack matrix, TrapLocation trap, ClientPlayerEntity player, double distance) {
        Vector3d trapPos = new Vector3d(trap.position.getX() + 0.5, trap.position.getY() + 1.5, trap.position.getZ() + 0.5);

        // Рендерим текст
        renderTrapText(matrix, trapPos, trap, distance);

        // Рендерим иконку
        if (showIcon.get()) {
            renderTrapIcon(matrix, trapPos);
        }

        // Рендерим контур блока
        if (showOutline.get()) {
            renderTrapOutline(matrix, trap.position);
        }
    }

    private void renderTrapText(MatrixStack matrix, Vector3d pos, TrapLocation trap, double distance) {
        matrix.push();
        RectUtility.setupOrientationMatrix(matrix, (float) pos.x, (float) pos.y, (float) pos.z);
        matrix.rotate(IMinecraft.mc.getRenderManager().getCameraOrientation());
        matrix.scale(-0.025F, -0.025F, 0.025F);

        FontRenderer font = IMinecraft.mc.fontRenderer;

        // Подготавливаем текст
        String trapText = "§c§lТРАПКА";
        String distanceText = showDistance.get() ? String.format("§f%.1fm", distance) : "";
        String playerText = showPlayerName.get() ? "§7" + trap.playerName : "";

        // Вычисляем размеры
        int trapWidth = font.getStringWidth(trapText);
        int distWidth = showDistance.get() ? font.getStringWidth(distanceText) : 0;
        int playerWidth = showPlayerName.get() ? font.getStringWidth(playerText) : 0;
        int maxWidth = Math.max(Math.max(trapWidth, distWidth), playerWidth);

        // Считаем высоту фона
        int lines = 1; // Основной текст
        if (showDistance.get()) lines++;
        if (showPlayerName.get()) lines++;
        int bgHeight = lines * 10;

        // Рисуем фон
        int bgColor = ColorUtils.reAlphaInt(0x000000, 128);
        RectUtility.drawRect(matrix, -maxWidth/2 - 4, -5, maxWidth/2 + 4, bgHeight + 5,
                bgColor, bgColor, bgColor, bgColor, false, false);

        int yOffset = 0;

        // Рендерим текст трапки
        font.drawStringWithShadow(matrix, trapText, -trapWidth/2, yOffset, 0xFFFF5555);
        yOffset += 10;

        // Рендерим расстояние
        if (showDistance.get()) {
            font.drawStringWithShadow(matrix, distanceText, -distWidth/2, yOffset, 0xFFFFFFFF);
            yOffset += 10;
        }

        // Рендерим имя игрока
        if (showPlayerName.get()) {
            font.drawStringWithShadow(matrix, playerText, -playerWidth/2, yOffset, 0xFFAAAAAA);
        }

        matrix.pop();
    }

    private void renderTrapIcon(MatrixStack matrix, Vector3d pos) {
        matrix.push();
        RectUtility.setupOrientationMatrix(matrix, (float) pos.x, (float) pos.y + 0.3f, (float) pos.z);
        matrix.rotate(IMinecraft.mc.getRenderManager().getCameraOrientation());
        matrix.scale(0.3F, 0.3F, 0.3F);

        // Рендерим иконку кирки
        RectUtility.bindTexture(pickaxeTexture);

        int color = ColorUtils.reAlphaInt(0xFF5555, 200);
        RectUtility.drawRect(matrix, -0.5f, -0.5f, 0.5f, 0.5f, color, color, color, color, true, true);

        matrix.pop();
    }

    private void renderTrapOutline(MatrixStack matrix, BlockPos pos) {
        matrix.push();

        // Настройки для линий
        RenderSystem.lineWidth(2.0F);
        RenderSystem.disableTexture();

        double x = pos.getX();
        double y = pos.getY();
        double z = pos.getZ();

        // Цвет контура - красный с прозрачностью
        int outlineColor = ColorUtils.reAlphaInt(0xFF5555, 150);
        float red = ((outlineColor >> 16) & 0xFF) / 255.0f;
        float green = ((outlineColor >> 8) & 0xFF) / 255.0f;
        float blue = (outlineColor & 0xFF) / 255.0f;
        float alpha = ((outlineColor >> 24) & 0xFF) / 255.0f;

        RenderSystem.color4f(red, green, blue, alpha);

        GL11.glBegin(GL11.GL_LINES);

        // Куб контур
        // Нижние линии
        GL11.glVertex3d(x, y, z); GL11.glVertex3d(x + 1, y, z);
        GL11.glVertex3d(x + 1, y, z); GL11.glVertex3d(x + 1, y, z + 1);
        GL11.glVertex3d(x + 1, y, z + 1); GL11.glVertex3d(x, y, z + 1);
        GL11.glVertex3d(x, y, z + 1); GL11.glVertex3d(x, y, z);

        // Верхние линии
        GL11.glVertex3d(x, y + 1, z); GL11.glVertex3d(x + 1, y + 1, z);
        GL11.glVertex3d(x + 1, y + 1, z); GL11.glVertex3d(x + 1, y + 1, z + 1);
        GL11.glVertex3d(x + 1, y + 1, z + 1); GL11.glVertex3d(x, y + 1, z + 1);
        GL11.glVertex3d(x, y + 1, z + 1); GL11.glVertex3d(x, y + 1, z);

        // Вертикальные линии
        GL11.glVertex3d(x, y, z); GL11.glVertex3d(x, y + 1, z);
        GL11.glVertex3d(x + 1, y, z); GL11.glVertex3d(x + 1, y + 1, z);
        GL11.glVertex3d(x + 1, y, z + 1); GL11.glVertex3d(x + 1, y + 1, z + 1);
        GL11.glVertex3d(x, y, z + 1); GL11.glVertex3d(x, y + 1, z + 1);

        GL11.glEnd();

        RenderSystem.enableTexture();
        RenderSystem.lineWidth(1.0F);
        RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);

        matrix.pop();
    }

    private void cleanupRenderState(boolean lightEnabled, MatrixStack matrix) {
        RenderSystem.blendFuncSeparate(
                GlStateManager.SourceFactor.SRC_ALPHA,
                GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA,
                GlStateManager.SourceFactor.ONE,
                GlStateManager.DestFactor.ZERO
        );

        GlStateManager.clearCurrentColor();
        GL11.glShadeModel(GL11.GL_FLAT);

        if (lightEnabled) {
            RenderSystem.enableLighting();
        }

        RenderSystem.enableCull();
        RenderSystem.depthMask(true);
        RenderSystem.enableAlphaTest();
        matrix.pop();
        RenderSystem.popMatrix();
    }

    // Геттеры для внешнего доступа
    public List<TrapLocation> getTraps() {
        return traps;
    }

    public int getTrapsCount() {
        return traps.size();
    }

    @Getter
    public static class TrapLocation {
        private final BlockPos position;
        private final long createTime;
        private final String playerName;
        private final TimerUtility timer = new TimerUtility();

        public TrapLocation(BlockPos pos, String playerName) {
            this.position = pos;
            this.createTime = System.currentTimeMillis();
            this.playerName = playerName;
            this.timer.reset();
        }

        public boolean isExpired(int lifetimeMs) {
            return timer.isReached(lifetimeMs);
        }

        public double getDistanceTo(Vector3d playerPos) {
            double dx = position.getX() + 0.5 - playerPos.x;
            double dy = position.getY() + 0.5 - playerPos.y;
            double dz = position.getZ() + 0.5 - playerPos.z;
            return Math.sqrt(dx * dx + dy * dy + dz * dz);
        }
    }
}
ну смотри евавар понял что ты эту функцию сделал через чат гпт и поэтому отказывается её регать в модулях, это как твоя имунная система против вирусов сражается
 
ну смотри евавар понял что ты эту функцию сделал через чат гпт и поэтому отказывается её регать в модулях, это как твоя имунная система против вирусов сражается
не ври не в чат гпт а в клауде :pepe14:
 
Назад
Сверху Снизу