Исходник Простые неймтаги от чат гпт exp 3.1 ready

Начинающий
Статус
Оффлайн
Регистрация
31 Май 2023
Сообщения
2
Реакции[?]
0
Поинты[?]
0

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

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

Спасибо!

Nametags.java:
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.utils.projections.ProjectionUtil;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.vector.Vector2f;
import org.lwjgl.opengl.GL11;

import java.util.HashMap;

import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glTranslatef;

@FunctionRegister(name = "Nametags", type = Category.Render)
public class Nametags extends Function {
    private final HashMap<Entity, Vector4i> positions = new HashMap<>();
    private final BooleanSetting showHealth = new BooleanSetting("Показывать ХП", true);
    private final BooleanSetting showArmor = new BooleanSetting("Показывать броню", true); // Переключатель для отображения брони
    private final BooleanSetting hideNametagNearPlayer = new BooleanSetting("Убирать неймтег рядом", true); // New setting to control this behavior
    private final BooleanSetting showItemName = new BooleanSetting("Показывать имя предмета", true); // Переключатель для отображения имени предмета

    public Nametags() {
        addSettings(showHealth, showArmor, hideNametagNearPlayer, showItemName);
    }

    @Subscribe
    public void onDisplay(EventDisplay e) {
        if (mc.world == null || e.getType() != EventDisplay.Type.PRE) return;

        positions.clear();

        // Отображаем неймтеги для игроков
        for (Entity entity : mc.world.getAllEntities()) {
            if (!(entity instanceof PlayerEntity)) continue;

            // Check if the player is a bot (to skip rendering)
            if (isBot(entity)) {
                continue;
            }

            double x = entity.getPosX();
            double y = entity.getPosY() + entity.getHeight() + 0.5; // Adjust position
            double z = entity.getPosZ();

            AxisAlignedBB aabb = entity.getBoundingBox();
            Vector4i position = projectAABB(aabb, x, y, z);

            if (position != null) {
                positions.put(entity, position);
            }
        }

        // Отображаем неймтеги для предметов
        for (Entity entity : mc.world.getAllEntities()) {
            if (!(entity instanceof ItemEntity)) continue;

            double x = entity.getPosX();
            double y = entity.getPosY() + entity.getHeight() + 0.5; // Adjust position
            double z = entity.getPosZ();

            AxisAlignedBB aabb = entity.getBoundingBox();
            Vector4i position = projectAABB(aabb, x, y, z);

            if (position != null) {
                positions.put(entity, position);
            }
        }

        // Рендеринг игроков
        for (Entity entity : positions.keySet()) {
            if (entity instanceof LivingEntity living) {
                // Calculate distance from the player
                double distance = mc.player.getDistanceSq(entity);

                // Only render the nametag if we are far enough away (6 blocks = 36 squared)
                if (hideNametagNearPlayer.get() && distance < 36.0) { // 36 is the squared distance for 6 blocks
                    continue; // Skip rendering nametag if too close
                }

                // Render armor first (above HP)
                if (showArmor.get()) {
                    renderArmor(e.getMatrixStack(), living, positions.get(entity));
                }

                // Then render name and health
                renderNametag(e.getMatrixStack(), living, positions.get(entity));
            }
        }

        // Рендеринг предметов
        for (Entity entity : positions.keySet()) {
            if (entity instanceof ItemEntity itemEntity) {
                // Отображаем неймтег предмета, если активирован соответствующий параметр
                if (showItemName.get()) {
                    renderItemNametag(e.getMatrixStack(), itemEntity, positions.get(entity));
                }
            }
        }
    }

    private boolean isBot(Entity entity) {
        // Simple check to determine if the player is a bot
        return entity.getName().getString().equals("NPC") || entity instanceof PlayerEntity && ((PlayerEntity) entity).isSpectator();
    }

    private Vector4i projectAABB(AxisAlignedBB aabb, double x, double y, double z) {
        Vector4i position = null;
        for (int i = 0; i < 8; i++) {
            Vector2f vector = ProjectionUtil.project(
                    (i & 1) == 0 ? aabb.minX : aabb.maxX,
                    (i & 2) == 0 ? aabb.minY : aabb.maxY,
                    (i & 4) == 0 ? aabb.minZ : aabb.maxZ
            );

            if (position == null) {
                position = new Vector4i(vector.x, vector.y, vector.x, vector.y);
            } else {
                position.x = Math.min(position.x, vector.x);
                position.y = Math.min(position.y, vector.y);
                position.z = Math.max(position.z, vector.x);
                position.w = Math.max(position.w, vector.y);
            }
        }
        return position;
    }

    private void renderNametag(MatrixStack stack, LivingEntity entity, Vector4i position) {
        String name = entity.getName().getString();

        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y;

        // Уменьшаем размер фона
        float nameWidth = Fonts.consolas.getWidth(name, 8);
        GL11.glPushMatrix();
        DisplayUtils.drawRect(stack, midX - nameWidth / 2f - 1, yOffset - 10, // Меньше отступы
                midX + nameWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
        GL11.glPopMatrix();

        // Увеличиваем размер шрифта
        Fonts.consolas.drawText(stack, name, midX - nameWidth / 2f, yOffset - 8, -1, 8, 0.05f);
        yOffset -= 12;

        if (showHealth.get()) {
            float health = entity.getHealth();
            String healthText = String.format("HP: %.1f", health);
            float healthWidth = Fonts.consolas.getWidth(healthText, 6);

            GL11.glPushMatrix();
            DisplayUtils.drawRect(stack, midX - healthWidth / 2f - 1, yOffset - 10, // Меньше отступы
                    midX + healthWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
            GL11.glPopMatrix();

            Fonts.consolas.drawText(stack, healthText, midX - healthWidth / 2f, yOffset - 8, 0xFF00FF00, 6, 0.05f);
            yOffset -= 12;
        }
    }

    private void renderArmor(MatrixStack stack, LivingEntity entity, Vector4i position) {
        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y - 36; // Move armor rendering higher than HP

        int size = 10;
        int padding = 4;

        float posX = midX - (size * 4 + padding * 3) / 2f; // Start from the leftmost position

        for (ItemStack armorItem : entity.getArmorInventoryList()) {
            if (armorItem.isEmpty()) continue;

            GL11.glPushMatrix();
            glCenteredScale(posX, yOffset, size, size, 0.5f);
            mc.getItemRenderer().renderItemAndEffectIntoGUI(armorItem, (int) posX, (int) yOffset);
            mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, armorItem, (int) posX, (int) yOffset, null);
            GL11.glPopMatrix();

            posX += size + padding; // Move to the next armor slot
        }
    }

    private void renderItemNametag(MatrixStack stack, ItemEntity itemEntity, Vector4i position) {
        String name = itemEntity.getItem().getDisplayName().getString(); // Получаем имя предмета
        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y;

        // Уменьшаем размер фона для имени предмета
        float nameWidth = Fonts.consolas.getWidth(name, 8);
        GL11.glPushMatrix();
        DisplayUtils.drawRect(stack, midX - nameWidth / 2f - 1, yOffset - 10, // Меньше отступы
                midX + nameWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
        GL11.glPopMatrix();

        // Увеличиваем размер шрифта для имени предмета
        Fonts.consolas.drawText(stack, name, midX - nameWidth / 2f, yOffset - 8, -1, 8, 0.05f);
    }

    private static class Vector4i {
        public float x, y, z, w;

        public Vector4i(float x, float y, float z, float w) {
            this.x = x;
            this.y = y;
            this.z = z;
            this.w = w;
        }
    }

    // Helper function for scaling and centering
    public void glCenteredScale(final float x, final float y, final float w, final float h, final float f) {
        glTranslatef(x + w / 2, y + h / 2, 0);
        glScalef(f, f, 1);
        glTranslatef(-x - w / 2, -y - h / 2, 0);
    }
}
ss:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
4 Май 2023
Сообщения
92
Реакции[?]
0
Поинты[?]
0
Nametags.java:
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.utils.projections.ProjectionUtil;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.vector.Vector2f;
import org.lwjgl.opengl.GL11;

import java.util.HashMap;

import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glTranslatef;

@FunctionRegister(name = "Nametags", type = Category.Render)
public class Nametags extends Function {
    private final HashMap<Entity, Vector4i> positions = new HashMap<>();
    private final BooleanSetting showHealth = new BooleanSetting("Показывать ХП", true);
    private final BooleanSetting showArmor = new BooleanSetting("Показывать броню", true); // Переключатель для отображения брони
    private final BooleanSetting hideNametagNearPlayer = new BooleanSetting("Убирать неймтег рядом", true); // New setting to control this behavior
    private final BooleanSetting showItemName = new BooleanSetting("Показывать имя предмета", true); // Переключатель для отображения имени предмета

    public Nametags() {
        addSettings(showHealth, showArmor, hideNametagNearPlayer, showItemName);
    }

    @Subscribe
    public void onDisplay(EventDisplay e) {
        if (mc.world == null || e.getType() != EventDisplay.Type.PRE) return;

        positions.clear();

        // Отображаем неймтеги для игроков
        for (Entity entity : mc.world.getAllEntities()) {
            if (!(entity instanceof PlayerEntity)) continue;

            // Check if the player is a bot (to skip rendering)
            if (isBot(entity)) {
                continue;
            }

            double x = entity.getPosX();
            double y = entity.getPosY() + entity.getHeight() + 0.5; // Adjust position
            double z = entity.getPosZ();

            AxisAlignedBB aabb = entity.getBoundingBox();
            Vector4i position = projectAABB(aabb, x, y, z);

            if (position != null) {
                positions.put(entity, position);
            }
        }

        // Отображаем неймтеги для предметов
        for (Entity entity : mc.world.getAllEntities()) {
            if (!(entity instanceof ItemEntity)) continue;

            double x = entity.getPosX();
            double y = entity.getPosY() + entity.getHeight() + 0.5; // Adjust position
            double z = entity.getPosZ();

            AxisAlignedBB aabb = entity.getBoundingBox();
            Vector4i position = projectAABB(aabb, x, y, z);

            if (position != null) {
                positions.put(entity, position);
            }
        }

        // Рендеринг игроков
        for (Entity entity : positions.keySet()) {
            if (entity instanceof LivingEntity living) {
                // Calculate distance from the player
                double distance = mc.player.getDistanceSq(entity);

                // Only render the nametag if we are far enough away (6 blocks = 36 squared)
                if (hideNametagNearPlayer.get() && distance < 36.0) { // 36 is the squared distance for 6 blocks
                    continue; // Skip rendering nametag if too close
                }

                // Render armor first (above HP)
                if (showArmor.get()) {
                    renderArmor(e.getMatrixStack(), living, positions.get(entity));
                }

                // Then render name and health
                renderNametag(e.getMatrixStack(), living, positions.get(entity));
            }
        }

        // Рендеринг предметов
        for (Entity entity : positions.keySet()) {
            if (entity instanceof ItemEntity itemEntity) {
                // Отображаем неймтег предмета, если активирован соответствующий параметр
                if (showItemName.get()) {
                    renderItemNametag(e.getMatrixStack(), itemEntity, positions.get(entity));
                }
            }
        }
    }

    private boolean isBot(Entity entity) {
        // Simple check to determine if the player is a bot
        return entity.getName().getString().equals("NPC") || entity instanceof PlayerEntity && ((PlayerEntity) entity).isSpectator();
    }

    private Vector4i projectAABB(AxisAlignedBB aabb, double x, double y, double z) {
        Vector4i position = null;
        for (int i = 0; i < 8; i++) {
            Vector2f vector = ProjectionUtil.project(
                    (i & 1) == 0 ? aabb.minX : aabb.maxX,
                    (i & 2) == 0 ? aabb.minY : aabb.maxY,
                    (i & 4) == 0 ? aabb.minZ : aabb.maxZ
            );

            if (position == null) {
                position = new Vector4i(vector.x, vector.y, vector.x, vector.y);
            } else {
                position.x = Math.min(position.x, vector.x);
                position.y = Math.min(position.y, vector.y);
                position.z = Math.max(position.z, vector.x);
                position.w = Math.max(position.w, vector.y);
            }
        }
        return position;
    }

    private void renderNametag(MatrixStack stack, LivingEntity entity, Vector4i position) {
        String name = entity.getName().getString();

        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y;

        // Уменьшаем размер фона
        float nameWidth = Fonts.consolas.getWidth(name, 8);
        GL11.glPushMatrix();
        DisplayUtils.drawRect(stack, midX - nameWidth / 2f - 1, yOffset - 10, // Меньше отступы
                midX + nameWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
        GL11.glPopMatrix();

        // Увеличиваем размер шрифта
        Fonts.consolas.drawText(stack, name, midX - nameWidth / 2f, yOffset - 8, -1, 8, 0.05f);
        yOffset -= 12;

        if (showHealth.get()) {
            float health = entity.getHealth();
            String healthText = String.format("HP: %.1f", health);
            float healthWidth = Fonts.consolas.getWidth(healthText, 6);

            GL11.glPushMatrix();
            DisplayUtils.drawRect(stack, midX - healthWidth / 2f - 1, yOffset - 10, // Меньше отступы
                    midX + healthWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
            GL11.glPopMatrix();

            Fonts.consolas.drawText(stack, healthText, midX - healthWidth / 2f, yOffset - 8, 0xFF00FF00, 6, 0.05f);
            yOffset -= 12;
        }
    }

    private void renderArmor(MatrixStack stack, LivingEntity entity, Vector4i position) {
        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y - 36; // Move armor rendering higher than HP

        int size = 10;
        int padding = 4;

        float posX = midX - (size * 4 + padding * 3) / 2f; // Start from the leftmost position

        for (ItemStack armorItem : entity.getArmorInventoryList()) {
            if (armorItem.isEmpty()) continue;

            GL11.glPushMatrix();
            glCenteredScale(posX, yOffset, size, size, 0.5f);
            mc.getItemRenderer().renderItemAndEffectIntoGUI(armorItem, (int) posX, (int) yOffset);
            mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, armorItem, (int) posX, (int) yOffset, null);
            GL11.glPopMatrix();

            posX += size + padding; // Move to the next armor slot
        }
    }

    private void renderItemNametag(MatrixStack stack, ItemEntity itemEntity, Vector4i position) {
        String name = itemEntity.getItem().getDisplayName().getString(); // Получаем имя предмета
        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y;

        // Уменьшаем размер фона для имени предмета
        float nameWidth = Fonts.consolas.getWidth(name, 8);
        GL11.glPushMatrix();
        DisplayUtils.drawRect(stack, midX - nameWidth / 2f - 1, yOffset - 10, // Меньше отступы
                midX + nameWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
        GL11.glPopMatrix();

        // Увеличиваем размер шрифта для имени предмета
        Fonts.consolas.drawText(stack, name, midX - nameWidth / 2f, yOffset - 8, -1, 8, 0.05f);
    }

    private static class Vector4i {
        public float x, y, z, w;

        public Vector4i(float x, float y, float z, float w) {
            this.x = x;
            this.y = y;
            this.z = z;
            this.w = w;
        }
    }

    // Helper function for scaling and centering
    public void glCenteredScale(final float x, final float y, final float w, final float h, final float f) {
        glTranslatef(x + w / 2, y + h / 2, 0);
        glScalef(f, f, 1);
        glTranslatef(-x - w / 2, -y - h / 2, 0);
    }
}
ss:
Пожалуйста, авторизуйтесь для просмотра ссылки.
фу, щас пойду в толчок рыгать
 
Начинающий
Статус
Оффлайн
Регистрация
28 Сен 2024
Сообщения
35
Реакции[?]
0
Поинты[?]
1K
Nametags.java:
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.utils.projections.ProjectionUtil;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.vector.Vector2f;
import org.lwjgl.opengl.GL11;

import java.util.HashMap;

import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glTranslatef;

@FunctionRegister(name = "Nametags", type = Category.Render)
public class Nametags extends Function {
    private final HashMap<Entity, Vector4i> positions = new HashMap<>();
    private final BooleanSetting showHealth = new BooleanSetting("Показывать ХП", true);
    private final BooleanSetting showArmor = new BooleanSetting("Показывать броню", true); // Переключатель для отображения брони
    private final BooleanSetting hideNametagNearPlayer = new BooleanSetting("Убирать неймтег рядом", true); // New setting to control this behavior
    private final BooleanSetting showItemName = new BooleanSetting("Показывать имя предмета", true); // Переключатель для отображения имени предмета

    public Nametags() {
        addSettings(showHealth, showArmor, hideNametagNearPlayer, showItemName);
    }

    @Subscribe
    public void onDisplay(EventDisplay e) {
        if (mc.world == null || e.getType() != EventDisplay.Type.PRE) return;

        positions.clear();

        // Отображаем неймтеги для игроков
        for (Entity entity : mc.world.getAllEntities()) {
            if (!(entity instanceof PlayerEntity)) continue;

            // Check if the player is a bot (to skip rendering)
            if (isBot(entity)) {
                continue;
            }

            double x = entity.getPosX();
            double y = entity.getPosY() + entity.getHeight() + 0.5; // Adjust position
            double z = entity.getPosZ();

            AxisAlignedBB aabb = entity.getBoundingBox();
            Vector4i position = projectAABB(aabb, x, y, z);

            if (position != null) {
                positions.put(entity, position);
            }
        }

        // Отображаем неймтеги для предметов
        for (Entity entity : mc.world.getAllEntities()) {
            if (!(entity instanceof ItemEntity)) continue;

            double x = entity.getPosX();
            double y = entity.getPosY() + entity.getHeight() + 0.5; // Adjust position
            double z = entity.getPosZ();

            AxisAlignedBB aabb = entity.getBoundingBox();
            Vector4i position = projectAABB(aabb, x, y, z);

            if (position != null) {
                positions.put(entity, position);
            }
        }

        // Рендеринг игроков
        for (Entity entity : positions.keySet()) {
            if (entity instanceof LivingEntity living) {
                // Calculate distance from the player
                double distance = mc.player.getDistanceSq(entity);

                // Only render the nametag if we are far enough away (6 blocks = 36 squared)
                if (hideNametagNearPlayer.get() && distance < 36.0) { // 36 is the squared distance for 6 blocks
                    continue; // Skip rendering nametag if too close
                }

                // Render armor first (above HP)
                if (showArmor.get()) {
                    renderArmor(e.getMatrixStack(), living, positions.get(entity));
                }

                // Then render name and health
                renderNametag(e.getMatrixStack(), living, positions.get(entity));
            }
        }

        // Рендеринг предметов
        for (Entity entity : positions.keySet()) {
            if (entity instanceof ItemEntity itemEntity) {
                // Отображаем неймтег предмета, если активирован соответствующий параметр
                if (showItemName.get()) {
                    renderItemNametag(e.getMatrixStack(), itemEntity, positions.get(entity));
                }
            }
        }
    }

    private boolean isBot(Entity entity) {
        // Simple check to determine if the player is a bot
        return entity.getName().getString().equals("NPC") || entity instanceof PlayerEntity && ((PlayerEntity) entity).isSpectator();
    }

    private Vector4i projectAABB(AxisAlignedBB aabb, double x, double y, double z) {
        Vector4i position = null;
        for (int i = 0; i < 8; i++) {
            Vector2f vector = ProjectionUtil.project(
                    (i & 1) == 0 ? aabb.minX : aabb.maxX,
                    (i & 2) == 0 ? aabb.minY : aabb.maxY,
                    (i & 4) == 0 ? aabb.minZ : aabb.maxZ
            );

            if (position == null) {
                position = new Vector4i(vector.x, vector.y, vector.x, vector.y);
            } else {
                position.x = Math.min(position.x, vector.x);
                position.y = Math.min(position.y, vector.y);
                position.z = Math.max(position.z, vector.x);
                position.w = Math.max(position.w, vector.y);
            }
        }
        return position;
    }

    private void renderNametag(MatrixStack stack, LivingEntity entity, Vector4i position) {
        String name = entity.getName().getString();

        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y;

        // Уменьшаем размер фона
        float nameWidth = Fonts.consolas.getWidth(name, 8);
        GL11.glPushMatrix();
        DisplayUtils.drawRect(stack, midX - nameWidth / 2f - 1, yOffset - 10, // Меньше отступы
                midX + nameWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
        GL11.glPopMatrix();

        // Увеличиваем размер шрифта
        Fonts.consolas.drawText(stack, name, midX - nameWidth / 2f, yOffset - 8, -1, 8, 0.05f);
        yOffset -= 12;

        if (showHealth.get()) {
            float health = entity.getHealth();
            String healthText = String.format("HP: %.1f", health);
            float healthWidth = Fonts.consolas.getWidth(healthText, 6);

            GL11.glPushMatrix();
            DisplayUtils.drawRect(stack, midX - healthWidth / 2f - 1, yOffset - 10, // Меньше отступы
                    midX + healthWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
            GL11.glPopMatrix();

            Fonts.consolas.drawText(stack, healthText, midX - healthWidth / 2f, yOffset - 8, 0xFF00FF00, 6, 0.05f);
            yOffset -= 12;
        }
    }

    private void renderArmor(MatrixStack stack, LivingEntity entity, Vector4i position) {
        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y - 36; // Move armor rendering higher than HP

        int size = 10;
        int padding = 4;

        float posX = midX - (size * 4 + padding * 3) / 2f; // Start from the leftmost position

        for (ItemStack armorItem : entity.getArmorInventoryList()) {
            if (armorItem.isEmpty()) continue;

            GL11.glPushMatrix();
            glCenteredScale(posX, yOffset, size, size, 0.5f);
            mc.getItemRenderer().renderItemAndEffectIntoGUI(armorItem, (int) posX, (int) yOffset);
            mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, armorItem, (int) posX, (int) yOffset, null);
            GL11.glPopMatrix();

            posX += size + padding; // Move to the next armor slot
        }
    }

    private void renderItemNametag(MatrixStack stack, ItemEntity itemEntity, Vector4i position) {
        String name = itemEntity.getItem().getDisplayName().getString(); // Получаем имя предмета
        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y;

        // Уменьшаем размер фона для имени предмета
        float nameWidth = Fonts.consolas.getWidth(name, 8);
        GL11.glPushMatrix();
        DisplayUtils.drawRect(stack, midX - nameWidth / 2f - 1, yOffset - 10, // Меньше отступы
                midX + nameWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
        GL11.glPopMatrix();

        // Увеличиваем размер шрифта для имени предмета
        Fonts.consolas.drawText(stack, name, midX - nameWidth / 2f, yOffset - 8, -1, 8, 0.05f);
    }

    private static class Vector4i {
        public float x, y, z, w;

        public Vector4i(float x, float y, float z, float w) {
            this.x = x;
            this.y = y;
            this.z = z;
            this.w = w;
        }
    }

    // Helper function for scaling and centering
    public void glCenteredScale(final float x, final float y, final float w, final float h, final float f) {
        glTranslatef(x + w / 2, y + h / 2, 0);
        glScalef(f, f, 1);
        glTranslatef(-x - w / 2, -y - h / 2, 0);
    }
}
ss:
Пожалуйста, авторизуйтесь для просмотра ссылки.
/del даже мой кот лучше сделает...
 
Начинающий
Статус
Онлайн
Регистрация
10 Ноя 2023
Сообщения
155
Реакции[?]
0
Поинты[?]
0
/del даже мой кот лучше сделает...
хз чел даже написал что это не он делал а чат лгбт
/del даже мой кот лучше сделает...
они полностью написаны с помощью чат лгбт
/del даже мой кот лучше сделает...
они полностью написаны с помощью чат лгбт
 
Read Only
Статус
Онлайн
Регистрация
29 Апр 2023
Сообщения
842
Реакции[?]
4
Поинты[?]
5K
Nametags.java:
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.utils.projections.ProjectionUtil;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.vector.Vector2f;
import org.lwjgl.opengl.GL11;

import java.util.HashMap;

import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glTranslatef;

@FunctionRegister(name = "Nametags", type = Category.Render)
public class Nametags extends Function {
    private final HashMap<Entity, Vector4i> positions = new HashMap<>();
    private final BooleanSetting showHealth = new BooleanSetting("Показывать ХП", true);
    private final BooleanSetting showArmor = new BooleanSetting("Показывать броню", true); // Переключатель для отображения брони
    private final BooleanSetting hideNametagNearPlayer = new BooleanSetting("Убирать неймтег рядом", true); // New setting to control this behavior
    private final BooleanSetting showItemName = new BooleanSetting("Показывать имя предмета", true); // Переключатель для отображения имени предмета

    public Nametags() {
        addSettings(showHealth, showArmor, hideNametagNearPlayer, showItemName);
    }

    @Subscribe
    public void onDisplay(EventDisplay e) {
        if (mc.world == null || e.getType() != EventDisplay.Type.PRE) return;

        positions.clear();

        // Отображаем неймтеги для игроков
        for (Entity entity : mc.world.getAllEntities()) {
            if (!(entity instanceof PlayerEntity)) continue;

            // Check if the player is a bot (to skip rendering)
            if (isBot(entity)) {
                continue;
            }

            double x = entity.getPosX();
            double y = entity.getPosY() + entity.getHeight() + 0.5; // Adjust position
            double z = entity.getPosZ();

            AxisAlignedBB aabb = entity.getBoundingBox();
            Vector4i position = projectAABB(aabb, x, y, z);

            if (position != null) {
                positions.put(entity, position);
            }
        }

        // Отображаем неймтеги для предметов
        for (Entity entity : mc.world.getAllEntities()) {
            if (!(entity instanceof ItemEntity)) continue;

            double x = entity.getPosX();
            double y = entity.getPosY() + entity.getHeight() + 0.5; // Adjust position
            double z = entity.getPosZ();

            AxisAlignedBB aabb = entity.getBoundingBox();
            Vector4i position = projectAABB(aabb, x, y, z);

            if (position != null) {
                positions.put(entity, position);
            }
        }

        // Рендеринг игроков
        for (Entity entity : positions.keySet()) {
            if (entity instanceof LivingEntity living) {
                // Calculate distance from the player
                double distance = mc.player.getDistanceSq(entity);

                // Only render the nametag if we are far enough away (6 blocks = 36 squared)
                if (hideNametagNearPlayer.get() && distance < 36.0) { // 36 is the squared distance for 6 blocks
                    continue; // Skip rendering nametag if too close
                }

                // Render armor first (above HP)
                if (showArmor.get()) {
                    renderArmor(e.getMatrixStack(), living, positions.get(entity));
                }

                // Then render name and health
                renderNametag(e.getMatrixStack(), living, positions.get(entity));
            }
        }

        // Рендеринг предметов
        for (Entity entity : positions.keySet()) {
            if (entity instanceof ItemEntity itemEntity) {
                // Отображаем неймтег предмета, если активирован соответствующий параметр
                if (showItemName.get()) {
                    renderItemNametag(e.getMatrixStack(), itemEntity, positions.get(entity));
                }
            }
        }
    }

    private boolean isBot(Entity entity) {
        // Simple check to determine if the player is a bot
        return entity.getName().getString().equals("NPC") || entity instanceof PlayerEntity && ((PlayerEntity) entity).isSpectator();
    }

    private Vector4i projectAABB(AxisAlignedBB aabb, double x, double y, double z) {
        Vector4i position = null;
        for (int i = 0; i < 8; i++) {
            Vector2f vector = ProjectionUtil.project(
                    (i & 1) == 0 ? aabb.minX : aabb.maxX,
                    (i & 2) == 0 ? aabb.minY : aabb.maxY,
                    (i & 4) == 0 ? aabb.minZ : aabb.maxZ
            );

            if (position == null) {
                position = new Vector4i(vector.x, vector.y, vector.x, vector.y);
            } else {
                position.x = Math.min(position.x, vector.x);
                position.y = Math.min(position.y, vector.y);
                position.z = Math.max(position.z, vector.x);
                position.w = Math.max(position.w, vector.y);
            }
        }
        return position;
    }

    private void renderNametag(MatrixStack stack, LivingEntity entity, Vector4i position) {
        String name = entity.getName().getString();

        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y;

        // Уменьшаем размер фона
        float nameWidth = Fonts.consolas.getWidth(name, 8);
        GL11.glPushMatrix();
        DisplayUtils.drawRect(stack, midX - nameWidth / 2f - 1, yOffset - 10, // Меньше отступы
                midX + nameWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
        GL11.glPopMatrix();

        // Увеличиваем размер шрифта
        Fonts.consolas.drawText(stack, name, midX - nameWidth / 2f, yOffset - 8, -1, 8, 0.05f);
        yOffset -= 12;

        if (showHealth.get()) {
            float health = entity.getHealth();
            String healthText = String.format("HP: %.1f", health);
            float healthWidth = Fonts.consolas.getWidth(healthText, 6);

            GL11.glPushMatrix();
            DisplayUtils.drawRect(stack, midX - healthWidth / 2f - 1, yOffset - 10, // Меньше отступы
                    midX + healthWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
            GL11.glPopMatrix();

            Fonts.consolas.drawText(stack, healthText, midX - healthWidth / 2f, yOffset - 8, 0xFF00FF00, 6, 0.05f);
            yOffset -= 12;
        }
    }

    private void renderArmor(MatrixStack stack, LivingEntity entity, Vector4i position) {
        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y - 36; // Move armor rendering higher than HP

        int size = 10;
        int padding = 4;

        float posX = midX - (size * 4 + padding * 3) / 2f; // Start from the leftmost position

        for (ItemStack armorItem : entity.getArmorInventoryList()) {
            if (armorItem.isEmpty()) continue;

            GL11.glPushMatrix();
            glCenteredScale(posX, yOffset, size, size, 0.5f);
            mc.getItemRenderer().renderItemAndEffectIntoGUI(armorItem, (int) posX, (int) yOffset);
            mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, armorItem, (int) posX, (int) yOffset, null);
            GL11.glPopMatrix();

            posX += size + padding; // Move to the next armor slot
        }
    }

    private void renderItemNametag(MatrixStack stack, ItemEntity itemEntity, Vector4i position) {
        String name = itemEntity.getItem().getDisplayName().getString(); // Получаем имя предмета
        float midX = (position.x + position.z) / 2f;
        float yOffset = position.y;

        // Уменьшаем размер фона для имени предмета
        float nameWidth = Fonts.consolas.getWidth(name, 8);
        GL11.glPushMatrix();
        DisplayUtils.drawRect(stack, midX - nameWidth / 2f - 1, yOffset - 10, // Меньше отступы
                midX + nameWidth / 2f + 1, yOffset + 2, 0x90000000); // Меньше отступы
        GL11.glPopMatrix();

        // Увеличиваем размер шрифта для имени предмета
        Fonts.consolas.drawText(stack, name, midX - nameWidth / 2f, yOffset - 8, -1, 8, 0.05f);
    }

    private static class Vector4i {
        public float x, y, z, w;

        public Vector4i(float x, float y, float z, float w) {
            this.x = x;
            this.y = y;
            this.z = z;
            this.w = w;
        }
    }

    // Helper function for scaling and centering
    public void glCenteredScale(final float x, final float y, final float w, final float h, final float f) {
        glTranslatef(x + w / 2, y + h / 2, 0);
        glScalef(f, f, 1);
        glTranslatef(-x - w / 2, -y - h / 2, 0);
    }
}
ss:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Можно сделать проще,и красивее
Просто заменить mc.fontrenderer на fonts.sfbold☠
 
Начинающий
Статус
Оффлайн
Регистрация
27 Май 2024
Сообщения
53
Реакции[?]
0
Поинты[?]
0
че ты ему пишешь что бы он такое писал?
ДАРОООВААА БРАТАНЧИК нука быстренько выучил expensive api forge Vac baypas и пошел делать мне нейм таги и главное чтобы работало на экспенсиве
 
Начинающий
Статус
Оффлайн
Регистрация
17 Апр 2023
Сообщения
222
Реакции[?]
2
Поинты[?]
0
ДАРОООВААА БРАТАНЧИК нука быстренько выучил expensive api forge Vac baypas и пошел делать мне нейм таги и главное чтобы работало на экспенсиве
1732296906860.png
вот, что он мне выдал по этому промпту :roflanEbalo:
 
Сверху Снизу