Исходник Esp с двумя видео боксами и индикацией сфер и талисманов

Забаненный
Статус
Оффлайн
Регистрация
10 Май 2023
Сообщения
825
Реакции[?]
9
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
.
Давно хотел залить что-то на югейм так вот взял есп от Leo и немного переделал
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.

так давайте пройдемся что я добавил/изменил
Поменял фришты в индикации сфер ( работает везде )
Добавил индикацию талисманов ( работает везде кроме фт )
Изменил нейм тег
вроде-бы все :)


Код:
package im.Manloxx.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import im.Manloxx.command.friends.FriendStorage;
import im.Manloxx.events.EventDisplay;
import im.Manloxx.functions.api.Category;
import im.Manloxx.functions.api.Function;
import im.Manloxx.functions.api.FunctionRegister;
import im.Manloxx.functions.impl.combat.AntiBot;
import im.Manloxx.functions.settings.impl.*;
import im.Manloxx.utils.math.MathUtil;
import im.Manloxx.utils.math.Vector4i;
import im.Manloxx.utils.projections.ProjectionUtil;
import im.Manloxx.utils.render.ColorUtils;
import im.Manloxx.utils.render.DisplayUtils;
import im.Manloxx.utils.render.font.Fonts;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
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.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.EffectUtils;
import net.minecraft.scoreboard.Score;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector4f;
import net.minecraft.util.text.*;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static net.minecraft.client.renderer.WorldRenderer.frustum;
import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glTranslatef;

/**
*@author Ieo117 + manloxx
*@since 24.06.2024
*/

@FunctionRegister(name = "ESP", type = Category.VISUAL)
public class ESP extends Function {
    public ModeListSetting remove = new ModeListSetting("Отоброжать",
            new BooleanSetting("Полоску хп", false),
            new BooleanSetting("Эффекты", false),
            new BooleanSetting("Предметы", false),
            new BooleanSetting("Текст хп", false),
            new BooleanSetting("Зачарования", false),
            new BooleanSetting("Боксы", true),
            new BooleanSetting("Сферы", true),
            new BooleanSetting("Талисманы", true)
    );
    public ModeSetting boxMode = new ModeSetting("Вид боксов", "По углам", "По углам", "Бокс").setVisible(() -> remove.getValueByName("Боксы").get());



    public ESP() {
        toggle();
        addSettings(remove, boxMode);
    }

    private final HashMap<Entity, Vector4f> positions = new HashMap<>();
    @Subscribe
    public void onDisplay(EventDisplay e) {
        if (mc.world == null || e.getType() != EventDisplay.Type.PRE) {
            return;
        }
        positions.clear();
        Vector4i colors = new Vector4i(HUD.getColor(0, 1), HUD.getColor(90, 1), HUD.getColor(180, 1), HUD.getColor(270, 1));
        Vector4i friendColors = new Vector4i(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0));//,ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 180, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 270, 1));
        int friendColorInt = FriendStorage.getColor();
        int colorInt = HUD.getColor(270);

        for (Entity entity : mc.world.getAllEntities()) {
            if (!isValid(entity)) continue;
            if (!(entity instanceof PlayerEntity || entity instanceof ItemEntity)) continue;
            if (entity == mc.player && (mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON)) continue;

            double x = MathUtil.interpolate(entity.getPosX(), entity.lastTickPosX, e.getPartialTicks());
            double y = MathUtil.interpolate(entity.getPosY(), entity.lastTickPosY, e.getPartialTicks());
            double z = MathUtil.interpolate(entity.getPosZ(), entity.lastTickPosZ, e.getPartialTicks());
            Vector3d size = new Vector3d(entity.getBoundingBox().maxX - entity.getBoundingBox().minX, entity.getBoundingBox().maxY - entity.getBoundingBox().minY, entity.getBoundingBox().maxZ - entity.getBoundingBox().minZ);
            AxisAlignedBB aabb = new AxisAlignedBB(x - size.x / 2f, y, z - size.z / 2f, x + size.x / 2f, y + size.y, z + size.z / 2f);
            Vector4f position = null;
            for (int i = 0; i < 8; i++) {
                Vector2f vector = ProjectionUtil.project(i % 2 == 0 ? aabb.minX : aabb.maxX, (i / 2) % 2 == 0 ? aabb.minY : aabb.maxY, (i / 4) % 2 == 0 ? aabb.minZ : aabb.maxZ);
                if (position == null) {
                    position = new Vector4f(vector.x, vector.y, 1, 1.0f);
                } else {
                    position.x = Math.min(vector.x, position.x);
                    position.y = Math.min(vector.y, position.y);
                    position.z = Math.max(vector.x, position.z);
                    position.w = Math.max(vector.y, position.w);
                }
            }

            positions.put(entity, position);
        }

        RenderSystem.enableBlend();
        RenderSystem.disableTexture();
        RenderSystem.defaultBlendFunc();
        RenderSystem.shadeModel(7425);

        buffer.begin(7, DefaultVertexFormats.POSITION_COLOR);

        for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
            Vector4f position = entry.getValue();

            if (entry.getKey() instanceof LivingEntity entity) {
                if (remove.getValueByName("Боксы").get() && boxMode.is("Бокс")) {
                    DisplayUtils.drawBox(position.x - 0.5f, position.y - 0.5f, position.z + 0.5f, position.w + 0.5f, 2, ColorUtils.rgba(0, 0, 0, 128));
                    DisplayUtils.drawBoxTest(position.x, position.y, position.z, position.w, 1, FriendStorage.isFriend(entity.getName().getString()) ? friendColors : colors);
                }
                float sect = 10;
                float lineWidth = 1;
                double playerX = mc.player.getPosX();
                double playerY = mc.player.getPosY();
                double playerZ = mc.player.getPosZ();
                double entityX = position.x;
                double entityY = position.y;
                double entityZ = position.z;
                double distance = Math.sqrt(Math.pow(playerX - entityX, 2) + Math.pow(playerY - entityY, 2) + Math.pow(playerZ - entityZ, 2));
                float sectChange = (float) (distance / 10.0);
                float calcSect = sect - sectChange;
                calcSect = Math.max(3, calcSect);

                if (remove.getValueByName("Боксы").get() && boxMode.is("По углам")) {
                    double x = position.x;
                    double y = position.y;
                    double endX = position.z;
                    double endY = position.w;
                    int back = ColorUtils.rgba(0, 0, 0, 128);

                    double size = 1f;
                    int getColor = FriendStorage.isFriend(entity.getName().getString()) ? friendColorInt : colorInt;
                    drawMcRect(x - 0.5F, y - 0.5F, x + calcSect, y + 1, getColor);
                    drawMcRect(endX - calcSect, y - 0.5F, endX + 1, y + 1, getColor);
                    drawMcRect(x - 0.5F, endY - 0.5F, x + calcSect, endY + 1, getColor);
                    drawMcRect(endX - calcSect, endY - 0.5F, endX + 1, endY + 1, getColor);

                    drawMcRect(x - 0.5F, y + 1, x + 1, y + calcSect, getColor);
                    drawMcRect(x - 0.5F, endY - calcSect, x + 1, endY, getColor);
                    drawMcRect(endX - 0.5F, y + 1, endX + 1, y + calcSect, getColor);
                    drawMcRect(endX - 0.5F, endY - calcSect, endX + 1, endY, getColor);
                
                }

                float hpOffset = 3f;
                float out = 0.5f;
                if (remove.getValueByName("Полоску хп").get()) {
                    String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
                    DisplayUtils.drawRectBuilding(position.x - hpOffset - out, position.y - out, position.x - hpOffset + 1 + out, position.w + out, ColorUtils.rgba(0, 0, 0, 128));
                    DisplayUtils.drawRectBuilding(position.x - hpOffset, position.y, position.x - hpOffset + 1, position.w, ColorUtils.rgba(0, 0, 0, 128));
                    Score score = mc.world.getScoreboard().getOrCreateScore(entity.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
                    float hp = entity.getHealth();
                    float maxHp = entity.getMaxHealth();
                    if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
                        hp = score.getScorePoints();
                        maxHp = 20;
                    }
                    DisplayUtils.drawMCVerticalBuilding(position.x - hpOffset, position.y + (position.w - position.y) * (1 - MathHelper.clamp(hp / maxHp, 0, 1)), position.x - hpOffset + 1, position.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.w : colors.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.x : colors.x);
                }
            }
        }
        Tessellator.getInstance().draw();
        RenderSystem.shadeModel(7424);
        RenderSystem.enableTexture();
        RenderSystem.disableBlend();

        for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
            Entity entity = entry.getKey();
            if (entity instanceof LivingEntity living) {
                Score score = mc.world.getScoreboard().getOrCreateScore(living.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
                float hp = living.getHealth();
                float maxHp = living.getMaxHealth();
                String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
                if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
                    hp = score.getScorePoints();
                    maxHp = 20;
                }
                Vector4f position = entry.getValue();
                float width = position.z - position.x;
                String hpText = (int) hp + "HP";
                float hpWidth = Fonts.consolas.getWidth(hpText, 6);
                float hpPercent = MathHelper.clamp(hp / maxHp, 0, 1);
                float hpPosY = position.y + (position.w - position.y) * (1 - hpPercent);
                if (remove.getValueByName("Текст хп").get()) {
                    Fonts.consolas.drawText(e.getMatrixStack(), hpText, position.x - hpWidth - 6, hpPosY, -1, 6, 0.05f);
                }
                String hptext1 =  (int) hp + "Ники игроков";
                String friendPrefix = FriendStorage.isFriend(entity.getName().getString()) ? TextFormatting.GREEN + "[F] " : "";
                ITextComponent text = entity.getDisplayName();
                TextComponent name = (TextComponent)text;
                name.append(new StringTextComponent(" [" + TextFormatting.RED + (int) hp + TextFormatting.WHITE + "]"));
                float length = mc.fontRenderer.getStringPropertyWidth(name);
                GL11.glPushMatrix();
                glCenteredScale(position.x + width / 2f - length / 2f, position.y - 7, length, 10, 0.5f);
                if(FriendStorage.isFriend(entity.getName().getString())) {
                    DisplayUtils.drawRoundedRect(position.x - 2 + width / 2.0F - length / 1.9f, position.y - 16, length + 8, 14, 2, ColorUtils.rgba(21, 21, 21, 205));
                }else {
                    DisplayUtils.drawRoundedRect(position.x - 2 + width / 2.0F - length / 1.9f , position.y - 16, length + 8, 14, 2, ColorUtils.rgba(21, 21, 21, 205));
                }
                mc.fontRenderer.func_243246_a(e.getMatrixStack(), name, position.x + width/2.0f - length / 2f , position.y - 13, -1);
                if(entity instanceof PlayerEntity player){
                    if(remove.getValueByName("Сферы").get()){
                        ItemStack stack = player.getHeldItemOffhand();
                        String nameS = "";

                        String itemName = stack.getDisplayName().getString();
                        if(stack.getItem() == Items.PLAYER_HEAD) {
                            CompoundNBT tag = stack.getTag();

                            if (tag != null && tag.contains("display", 10)) {
                                CompoundNBT display = tag.getCompound("display");

                                if (display.contains("Lore", 9)) {
                                    ListNBT lore = display.getList("Lore", 8);

                                    if (!lore.isEmpty()) {
                                        String firstLore = lore.getString(0);

                                        int levelIndex = firstLore.indexOf("Уровень");
                                        if (levelIndex != -1) {
                                            String levelString = firstLore.substring(levelIndex + "Уровень".length()).trim();
                                            String gat = levelString;
                                            if(gat.contains("1/3")){
                                                nameS = "- 1/3]";
                                            } else if (gat.contains("2/3")) {
                                                nameS = "- 2/3]";
                                            } else if (gat.contains("MAX")) {
                                                nameS = "- MAX]";
                                            } else{
                                                nameS = "";
                                            }
                                        }
                                    }
                                }
                            }
                            if(itemName.contains("Пандо")){
                                itemName = "[PANDORA ";
                            } else if (itemName.contains("Аполл")) {
                                itemName = "[APOLLON ";
                            } else if (itemName.contains("Тит")) {
                                itemName = "[TITANA ";
                            } else if (itemName.contains("Осир")) {
                                itemName = "[OSIRIS ";
                            } else if (itemName.contains("Андро")) {
                                itemName = "[ANDROMEDA";
                            } else if (itemName.contains("Хим")) {
                                itemName = "[XIMERA ";
                            } else if (itemName.contains("Астр")) {
                                itemName = "[ASTREYA ";
                            }
                            Fonts.sfui.drawText(e.getMatrixStack(), itemName + nameS, (float) position.x - 30, position.y - 60, ColorUtils.rgb(255, 16, 16), 12.5f, 0.0001f);
                        }
                    }
                }
                if(entity instanceof PlayerEntity player){
                    if(remove.getValueByName("Талисманы").get()){
                        ItemStack stack = player.getHeldItemOffhand();
                        String nameS = "";

                        String itemName = stack.getDisplayName().getString();
                        if(stack.getItem() == Items.TOTEM_OF_UNDYING) {
                            CompoundNBT tag = stack.getTag();

                            if (tag != null && tag.contains("display", 10)) {
                                CompoundNBT display = tag.getCompound("display");

                                if (display.contains("Lore", 9)) {
                                    ListNBT lore = display.getList("Lore", 8);

                                    if (!lore.isEmpty()) {
                                        String firstLore = lore.getString(0);

                                        int levelIndex = firstLore.indexOf("Уровень");
                                        if (levelIndex != -1) {
                                            String levelString = firstLore.substring(levelIndex + "Уровень".length()).trim();
                                            String gat = levelString;
                                            if(gat.contains("1/3")){
                                                nameS = "- 1/3]";
                                            } else if (gat.contains("2/3")) {
                                                nameS = "- 2/3]";
                                            } else if (gat.contains("MAX")) {
                                                nameS = "- MAX]";
                                            } else{
                                                nameS = "";
                                            }
                                        }
                                    }
                                }
                            }
                            if(itemName.contains("Талисман Ехидны")){
                                itemName = "[EXIDNA ";
                            } else if (itemName.contains("Талисман Гармонии")) {
                                itemName = "[GARMONIYA ";
                            } else if (itemName.contains("Талисма Крушителя")) {
                                itemName = "[KRUSH ";
                            } else if (itemName.contains("Талисман Карателя")) {
                                itemName = "[KARATELYA ";
                            } else if (itemName.contains("Талисман Грани")) {
                                itemName = "[GRANI ";
                            } else if (itemName.contains("Талисман Тритона")) {
                                itemName = "[TRITONA ";
                            } else if (itemName.contains("Талисман Феникса")) {
                                itemName = "[FENIKSA ";
                            }
                            Fonts.sfui.drawText(e.getMatrixStack(), itemName + nameS, (float) position.x - 30, position.y - 60, ColorUtils.rgb(255, 16, 16), 12.5f, 0.0001f);
                        }
                    }
                }
                GL11.glPopMatrix();
                if (remove.getValueByName("Эффекты").get()) {
                    drawPotions(e.getMatrixStack(), living, position.z + 2, position.y);
                }
                drawItems(e.getMatrixStack(), living, (int) (position.x + width / 2f), (int) (position.y - 20));
            } else if (entity instanceof ItemEntity item) {
                Vector4f position = entry.getValue();
                float width = position.z - position.x;
                float length = mc.fontRenderer.getStringPropertyWidth(entity.getDisplayName());
                GL11.glPushMatrix();
                glCenteredScale(position.x + width / 2f - length / 2f, position.y - 7, length, 10, 0.5f);
                if(remove.getValueByName("Предметы").get()) {
                    String tag = (item.getItem().getDisplayName().getString() +
                            (item.getItem().getCount() < 1 ? "" : " x" + item.getItem().getCount()));
                    mc.fontRenderer.func_243246_a(e.getMatrixStack(),ITextComponent.getTextComponentOrEmpty(tag), position.x + width / 2f - length / 2f, position.y - 7, tag.contains("[★]") ? ColorUtils.rgb(255, 16, 16) : -1);
                }
                GL11.glPopMatrix();
            }
        }
    }

    public boolean isInView(Entity ent) {
        if (mc.getRenderViewEntity() == null) {
            return false;
        }
        frustum.setCameraPosition(mc.getRenderManager().info.getProjectedView().x, mc.getRenderManager().info.getProjectedView().y, mc.getRenderManager().info.getProjectedView().z);
        return frustum.isBoundingBoxInFrustum(ent.getBoundingBox()) || ent.ignoreFrustumCheck;
    }

    private void drawPotions(MatrixStack matrixStack, LivingEntity entity, float posX, float posY) {
        for (EffectInstance pot : entity.getActivePotionEffects()) {
            int amp = pot.getAmplifier();
            String ampStr = "";
            if (amp >= 1 && amp <= 9) {
                ampStr = " " + I18n.format("enchantment.level." + (amp + 1));
            }
            String text = I18n.format(pot.getEffectName()) + ampStr + " - " + EffectUtils.getPotionDurationString(pot, 1);
            Fonts.consolas.drawText(matrixStack, text, posX, posY, -1, 6, 0.05f);
            posY += Fonts.consolas.getHeight(6);
        }
    }

    private void drawItems(MatrixStack matrixStack, LivingEntity entity, int posX, int posY) {
        int size = 8;
        int padding = 6;
        float fontHeight = Fonts.consolas.getHeight(6);
        List<ItemStack> items = new ArrayList<>();
        ItemStack mainStack = entity.getHeldItemMainhand();
        if (!mainStack.isEmpty()) {
            items.add(mainStack);
        }
        for (ItemStack itemStack : entity.getArmorInventoryList()) {
            if (itemStack.isEmpty()) continue;
            items.add(itemStack);
        }
        ItemStack offStack = entity.getHeldItemOffhand();
        if (!offStack.isEmpty()) {
            items.add(offStack);
        }
        posX -= (items.size() * (size + padding)) / 2f;
        for (ItemStack itemStack : items) {
            if (itemStack.isEmpty()) continue;
            GL11.glPushMatrix();
            glCenteredScale(posX, posY, size / 2f, size / 2f, 0.5f);
            mc.getItemRenderer().renderItemAndEffectIntoGUI(itemStack, posX, posY);
            mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, posX, posY, null);
            GL11.glPopMatrix();
            if (itemStack.isEnchanted() && remove.getValueByName("Зачарования").get()) {
                int ePosY = (int) (posY - fontHeight);
                Map<Enchantment, Integer> enchantmentsMap = EnchantmentHelper.getEnchantments(itemStack);
                for (Enchantment enchantment : enchantmentsMap.keySet()) {
                    int level = enchantmentsMap.get(enchantment);
                    if (level < 1 || !enchantment.canApply(itemStack)) continue;
                    IFormattableTextComponent iformattabletextcomponent = new TranslationTextComponent(enchantment.getName());
                    String enchText = iformattabletextcomponent.getString().substring(0, 2) + level;
                    Fonts.consolas.drawText(matrixStack, enchText, posX, ePosY, -1, 6, 0.05f);
                    ePosY -= (int) fontHeight;
                }
            }
            posX += size + padding;
        }
    }
    public boolean isValid(Entity e) {
        if (AntiBot.isBot(e)) return false;

        return isInView(e);
    }
    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);
    }
    public static void drawMcRect(
            double left,
            double top,
            double right,
            double bottom,
            int color) {
        if (left < right) {
            double i = left;
            left = right;
            right = i;
        }

        if (top < bottom) {
            double j = top;
            top = bottom;
            bottom = j;
        }

        float f3 = (float) (color >> 24 & 255) / 255.0F;
        float f = (float) (color >> 16 & 255) / 255.0F;
        float f1 = (float) (color >> 8 & 255) / 255.0F;
        float f2 = (float) (color & 255) / 255.0F;
        BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer();

        bufferbuilder.pos(left, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(right, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(right, top, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(left, top, 1.0F).color(f, f1, f2, f3).endVertex();

    }
}
[/QUOTE
/del сливали 3 раза
 
Начинающий
Статус
Оффлайн
Регистрация
25 Фев 2024
Сообщения
509
Реакции[?]
0
Поинты[?]
0
что . ?
И да где я тебя пытаюсь хуесосить? Ты сам себе выдумываешь, я тебя а том сообщение не хуесосил и не выставлял себя выше других, ты просто обиделся на то что я написал про то что ты уходил и бекнулся. По твоему мнению я тебя захуесосил, бро что с твоей логикой?
на прошлых темах пиздел, да хз мне скучно
 
Начинающий
Статус
Оффлайн
Регистрация
25 Фев 2024
Сообщения
509
Реакции[?]
0
Поинты[?]
0
Забаненный
Статус
Оффлайн
Регистрация
10 Май 2023
Сообщения
825
Реакции[?]
9
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Давно хотел залить что-то на югейм так вот взял есп от Leo и немного переделал
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.

так давайте пройдемся что я добавил/изменил
Поменял фришты в индикации сфер ( работает везде )
Добавил индикацию талисманов ( работает везде кроме фт )
Изменил нейм тег
вроде-бы все :)


Код:
package im.Manloxx.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import im.Manloxx.command.friends.FriendStorage;
import im.Manloxx.events.EventDisplay;
import im.Manloxx.functions.api.Category;
import im.Manloxx.functions.api.Function;
import im.Manloxx.functions.api.FunctionRegister;
import im.Manloxx.functions.impl.combat.AntiBot;
import im.Manloxx.functions.settings.impl.*;
import im.Manloxx.utils.math.MathUtil;
import im.Manloxx.utils.math.Vector4i;
import im.Manloxx.utils.projections.ProjectionUtil;
import im.Manloxx.utils.render.ColorUtils;
import im.Manloxx.utils.render.DisplayUtils;
import im.Manloxx.utils.render.font.Fonts;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
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.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.EffectUtils;
import net.minecraft.scoreboard.Score;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector4f;
import net.minecraft.util.text.*;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static net.minecraft.client.renderer.WorldRenderer.frustum;
import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glTranslatef;

/**
*@author Ieo117 + manloxx
*@since 24.06.2024
*/

@FunctionRegister(name = "ESP", type = Category.VISUAL)
public class ESP extends Function {
    public ModeListSetting remove = new ModeListSetting("Отоброжать",
            new BooleanSetting("Полоску хп", false),
            new BooleanSetting("Эффекты", false),
            new BooleanSetting("Предметы", false),
            new BooleanSetting("Текст хп", false),
            new BooleanSetting("Зачарования", false),
            new BooleanSetting("Боксы", true),
            new BooleanSetting("Сферы", true),
            new BooleanSetting("Талисманы", true)
    );
    public ModeSetting boxMode = new ModeSetting("Вид боксов", "По углам", "По углам", "Бокс").setVisible(() -> remove.getValueByName("Боксы").get());



    public ESP() {
        toggle();
        addSettings(remove, boxMode);
    }

    private final HashMap<Entity, Vector4f> positions = new HashMap<>();
    @Subscribe
    public void onDisplay(EventDisplay e) {
        if (mc.world == null || e.getType() != EventDisplay.Type.PRE) {
            return;
        }
        positions.clear();
        Vector4i colors = new Vector4i(HUD.getColor(0, 1), HUD.getColor(90, 1), HUD.getColor(180, 1), HUD.getColor(270, 1));
        Vector4i friendColors = new Vector4i(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0));//,ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 180, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 270, 1));
        int friendColorInt = FriendStorage.getColor();
        int colorInt = HUD.getColor(270);

        for (Entity entity : mc.world.getAllEntities()) {
            if (!isValid(entity)) continue;
            if (!(entity instanceof PlayerEntity || entity instanceof ItemEntity)) continue;
            if (entity == mc.player && (mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON)) continue;

            double x = MathUtil.interpolate(entity.getPosX(), entity.lastTickPosX, e.getPartialTicks());
            double y = MathUtil.interpolate(entity.getPosY(), entity.lastTickPosY, e.getPartialTicks());
            double z = MathUtil.interpolate(entity.getPosZ(), entity.lastTickPosZ, e.getPartialTicks());
            Vector3d size = new Vector3d(entity.getBoundingBox().maxX - entity.getBoundingBox().minX, entity.getBoundingBox().maxY - entity.getBoundingBox().minY, entity.getBoundingBox().maxZ - entity.getBoundingBox().minZ);
            AxisAlignedBB aabb = new AxisAlignedBB(x - size.x / 2f, y, z - size.z / 2f, x + size.x / 2f, y + size.y, z + size.z / 2f);
            Vector4f position = null;
            for (int i = 0; i < 8; i++) {
                Vector2f vector = ProjectionUtil.project(i % 2 == 0 ? aabb.minX : aabb.maxX, (i / 2) % 2 == 0 ? aabb.minY : aabb.maxY, (i / 4) % 2 == 0 ? aabb.minZ : aabb.maxZ);
                if (position == null) {
                    position = new Vector4f(vector.x, vector.y, 1, 1.0f);
                } else {
                    position.x = Math.min(vector.x, position.x);
                    position.y = Math.min(vector.y, position.y);
                    position.z = Math.max(vector.x, position.z);
                    position.w = Math.max(vector.y, position.w);
                }
            }

            positions.put(entity, position);
        }

        RenderSystem.enableBlend();
        RenderSystem.disableTexture();
        RenderSystem.defaultBlendFunc();
        RenderSystem.shadeModel(7425);

        buffer.begin(7, DefaultVertexFormats.POSITION_COLOR);

        for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
            Vector4f position = entry.getValue();

            if (entry.getKey() instanceof LivingEntity entity) {
                if (remove.getValueByName("Боксы").get() && boxMode.is("Бокс")) {
                    DisplayUtils.drawBox(position.x - 0.5f, position.y - 0.5f, position.z + 0.5f, position.w + 0.5f, 2, ColorUtils.rgba(0, 0, 0, 128));
                    DisplayUtils.drawBoxTest(position.x, position.y, position.z, position.w, 1, FriendStorage.isFriend(entity.getName().getString()) ? friendColors : colors);
                }
                float sect = 10;
                float lineWidth = 1;
                double playerX = mc.player.getPosX();
                double playerY = mc.player.getPosY();
                double playerZ = mc.player.getPosZ();
                double entityX = position.x;
                double entityY = position.y;
                double entityZ = position.z;
                double distance = Math.sqrt(Math.pow(playerX - entityX, 2) + Math.pow(playerY - entityY, 2) + Math.pow(playerZ - entityZ, 2));
                float sectChange = (float) (distance / 10.0);
                float calcSect = sect - sectChange;
                calcSect = Math.max(3, calcSect);

                if (remove.getValueByName("Боксы").get() && boxMode.is("По углам")) {
                    double x = position.x;
                    double y = position.y;
                    double endX = position.z;
                    double endY = position.w;
                    int back = ColorUtils.rgba(0, 0, 0, 128);

                    double size = 1f;
                    int getColor = FriendStorage.isFriend(entity.getName().getString()) ? friendColorInt : colorInt;
                    drawMcRect(x - 0.5F, y - 0.5F, x + calcSect, y + 1, getColor);
                    drawMcRect(endX - calcSect, y - 0.5F, endX + 1, y + 1, getColor);
                    drawMcRect(x - 0.5F, endY - 0.5F, x + calcSect, endY + 1, getColor);
                    drawMcRect(endX - calcSect, endY - 0.5F, endX + 1, endY + 1, getColor);

                    drawMcRect(x - 0.5F, y + 1, x + 1, y + calcSect, getColor);
                    drawMcRect(x - 0.5F, endY - calcSect, x + 1, endY, getColor);
                    drawMcRect(endX - 0.5F, y + 1, endX + 1, y + calcSect, getColor);
                    drawMcRect(endX - 0.5F, endY - calcSect, endX + 1, endY, getColor);
                
                }

                float hpOffset = 3f;
                float out = 0.5f;
                if (remove.getValueByName("Полоску хп").get()) {
                    String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
                    DisplayUtils.drawRectBuilding(position.x - hpOffset - out, position.y - out, position.x - hpOffset + 1 + out, position.w + out, ColorUtils.rgba(0, 0, 0, 128));
                    DisplayUtils.drawRectBuilding(position.x - hpOffset, position.y, position.x - hpOffset + 1, position.w, ColorUtils.rgba(0, 0, 0, 128));
                    Score score = mc.world.getScoreboard().getOrCreateScore(entity.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
                    float hp = entity.getHealth();
                    float maxHp = entity.getMaxHealth();
                    if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
                        hp = score.getScorePoints();
                        maxHp = 20;
                    }
                    DisplayUtils.drawMCVerticalBuilding(position.x - hpOffset, position.y + (position.w - position.y) * (1 - MathHelper.clamp(hp / maxHp, 0, 1)), position.x - hpOffset + 1, position.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.w : colors.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.x : colors.x);
                }
            }
        }
        Tessellator.getInstance().draw();
        RenderSystem.shadeModel(7424);
        RenderSystem.enableTexture();
        RenderSystem.disableBlend();

        for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
            Entity entity = entry.getKey();
            if (entity instanceof LivingEntity living) {
                Score score = mc.world.getScoreboard().getOrCreateScore(living.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
                float hp = living.getHealth();
                float maxHp = living.getMaxHealth();
                String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
                if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
                    hp = score.getScorePoints();
                    maxHp = 20;
                }
                Vector4f position = entry.getValue();
                float width = position.z - position.x;
                String hpText = (int) hp + "HP";
                float hpWidth = Fonts.consolas.getWidth(hpText, 6);
                float hpPercent = MathHelper.clamp(hp / maxHp, 0, 1);
                float hpPosY = position.y + (position.w - position.y) * (1 - hpPercent);
                if (remove.getValueByName("Текст хп").get()) {
                    Fonts.consolas.drawText(e.getMatrixStack(), hpText, position.x - hpWidth - 6, hpPosY, -1, 6, 0.05f);
                }
                String hptext1 =  (int) hp + "Ники игроков";
                String friendPrefix = FriendStorage.isFriend(entity.getName().getString()) ? TextFormatting.GREEN + "[F] " : "";
                ITextComponent text = entity.getDisplayName();
                TextComponent name = (TextComponent)text;
                name.append(new StringTextComponent(" [" + TextFormatting.RED + (int) hp + TextFormatting.WHITE + "]"));
                float length = mc.fontRenderer.getStringPropertyWidth(name);
                GL11.glPushMatrix();
                glCenteredScale(position.x + width / 2f - length / 2f, position.y - 7, length, 10, 0.5f);
                if(FriendStorage.isFriend(entity.getName().getString())) {
                    DisplayUtils.drawRoundedRect(position.x - 2 + width / 2.0F - length / 1.9f, position.y - 16, length + 8, 14, 2, ColorUtils.rgba(21, 21, 21, 205));
                }else {
                    DisplayUtils.drawRoundedRect(position.x - 2 + width / 2.0F - length / 1.9f , position.y - 16, length + 8, 14, 2, ColorUtils.rgba(21, 21, 21, 205));
                }
                mc.fontRenderer.func_243246_a(e.getMatrixStack(), name, position.x + width/2.0f - length / 2f , position.y - 13, -1);
                if(entity instanceof PlayerEntity player){
                    if(remove.getValueByName("Сферы").get()){
                        ItemStack stack = player.getHeldItemOffhand();
                        String nameS = "";

                        String itemName = stack.getDisplayName().getString();
                        if(stack.getItem() == Items.PLAYER_HEAD) {
                            CompoundNBT tag = stack.getTag();

                            if (tag != null && tag.contains("display", 10)) {
                                CompoundNBT display = tag.getCompound("display");

                                if (display.contains("Lore", 9)) {
                                    ListNBT lore = display.getList("Lore", 8);

                                    if (!lore.isEmpty()) {
                                        String firstLore = lore.getString(0);

                                        int levelIndex = firstLore.indexOf("Уровень");
                                        if (levelIndex != -1) {
                                            String levelString = firstLore.substring(levelIndex + "Уровень".length()).trim();
                                            String gat = levelString;
                                            if(gat.contains("1/3")){
                                                nameS = "- 1/3]";
                                            } else if (gat.contains("2/3")) {
                                                nameS = "- 2/3]";
                                            } else if (gat.contains("MAX")) {
                                                nameS = "- MAX]";
                                            } else{
                                                nameS = "";
                                            }
                                        }
                                    }
                                }
                            }
                            if(itemName.contains("Пандо")){
                                itemName = "[PANDORA ";
                            } else if (itemName.contains("Аполл")) {
                                itemName = "[APOLLON ";
                            } else if (itemName.contains("Тит")) {
                                itemName = "[TITANA ";
                            } else if (itemName.contains("Осир")) {
                                itemName = "[OSIRIS ";
                            } else if (itemName.contains("Андро")) {
                                itemName = "[ANDROMEDA";
                            } else if (itemName.contains("Хим")) {
                                itemName = "[XIMERA ";
                            } else if (itemName.contains("Астр")) {
                                itemName = "[ASTREYA ";
                            }
                            Fonts.sfui.drawText(e.getMatrixStack(), itemName + nameS, (float) position.x - 30, position.y - 60, ColorUtils.rgb(255, 16, 16), 12.5f, 0.0001f);
                        }
                    }
                }
                if(entity instanceof PlayerEntity player){
                    if(remove.getValueByName("Талисманы").get()){
                        ItemStack stack = player.getHeldItemOffhand();
                        String nameS = "";

                        String itemName = stack.getDisplayName().getString();
                        if(stack.getItem() == Items.TOTEM_OF_UNDYING) {
                            CompoundNBT tag = stack.getTag();

                            if (tag != null && tag.contains("display", 10)) {
                                CompoundNBT display = tag.getCompound("display");

                                if (display.contains("Lore", 9)) {
                                    ListNBT lore = display.getList("Lore", 8);

                                    if (!lore.isEmpty()) {
                                        String firstLore = lore.getString(0);

                                        int levelIndex = firstLore.indexOf("Уровень");
                                        if (levelIndex != -1) {
                                            String levelString = firstLore.substring(levelIndex + "Уровень".length()).trim();
                                            String gat = levelString;
                                            if(gat.contains("1/3")){
                                                nameS = "- 1/3]";
                                            } else if (gat.contains("2/3")) {
                                                nameS = "- 2/3]";
                                            } else if (gat.contains("MAX")) {
                                                nameS = "- MAX]";
                                            } else{
                                                nameS = "";
                                            }
                                        }
                                    }
                                }
                            }
                            if(itemName.contains("Талисман Ехидны")){
                                itemName = "[EXIDNA ";
                            } else if (itemName.contains("Талисман Гармонии")) {
                                itemName = "[GARMONIYA ";
                            } else if (itemName.contains("Талисма Крушителя")) {
                                itemName = "[KRUSH ";
                            } else if (itemName.contains("Талисман Карателя")) {
                                itemName = "[KARATELYA ";
                            } else if (itemName.contains("Талисман Грани")) {
                                itemName = "[GRANI ";
                            } else if (itemName.contains("Талисман Тритона")) {
                                itemName = "[TRITONA ";
                            } else if (itemName.contains("Талисман Феникса")) {
                                itemName = "[FENIKSA ";
                            }
                            Fonts.sfui.drawText(e.getMatrixStack(), itemName + nameS, (float) position.x - 30, position.y - 60, ColorUtils.rgb(255, 16, 16), 12.5f, 0.0001f);
                        }
                    }
                }
                GL11.glPopMatrix();
                if (remove.getValueByName("Эффекты").get()) {
                    drawPotions(e.getMatrixStack(), living, position.z + 2, position.y);
                }
                drawItems(e.getMatrixStack(), living, (int) (position.x + width / 2f), (int) (position.y - 20));
            } else if (entity instanceof ItemEntity item) {
                Vector4f position = entry.getValue();
                float width = position.z - position.x;
                float length = mc.fontRenderer.getStringPropertyWidth(entity.getDisplayName());
                GL11.glPushMatrix();
                glCenteredScale(position.x + width / 2f - length / 2f, position.y - 7, length, 10, 0.5f);
                if(remove.getValueByName("Предметы").get()) {
                    String tag = (item.getItem().getDisplayName().getString() +
                            (item.getItem().getCount() < 1 ? "" : " x" + item.getItem().getCount()));
                    mc.fontRenderer.func_243246_a(e.getMatrixStack(),ITextComponent.getTextComponentOrEmpty(tag), position.x + width / 2f - length / 2f, position.y - 7, tag.contains("[★]") ? ColorUtils.rgb(255, 16, 16) : -1);
                }
                GL11.glPopMatrix();
            }
        }
    }

    public boolean isInView(Entity ent) {
        if (mc.getRenderViewEntity() == null) {
            return false;
        }
        frustum.setCameraPosition(mc.getRenderManager().info.getProjectedView().x, mc.getRenderManager().info.getProjectedView().y, mc.getRenderManager().info.getProjectedView().z);
        return frustum.isBoundingBoxInFrustum(ent.getBoundingBox()) || ent.ignoreFrustumCheck;
    }

    private void drawPotions(MatrixStack matrixStack, LivingEntity entity, float posX, float posY) {
        for (EffectInstance pot : entity.getActivePotionEffects()) {
            int amp = pot.getAmplifier();
            String ampStr = "";
            if (amp >= 1 && amp <= 9) {
                ampStr = " " + I18n.format("enchantment.level." + (amp + 1));
            }
            String text = I18n.format(pot.getEffectName()) + ampStr + " - " + EffectUtils.getPotionDurationString(pot, 1);
            Fonts.consolas.drawText(matrixStack, text, posX, posY, -1, 6, 0.05f);
            posY += Fonts.consolas.getHeight(6);
        }
    }

    private void drawItems(MatrixStack matrixStack, LivingEntity entity, int posX, int posY) {
        int size = 8;
        int padding = 6;
        float fontHeight = Fonts.consolas.getHeight(6);
        List<ItemStack> items = new ArrayList<>();
        ItemStack mainStack = entity.getHeldItemMainhand();
        if (!mainStack.isEmpty()) {
            items.add(mainStack);
        }
        for (ItemStack itemStack : entity.getArmorInventoryList()) {
            if (itemStack.isEmpty()) continue;
            items.add(itemStack);
        }
        ItemStack offStack = entity.getHeldItemOffhand();
        if (!offStack.isEmpty()) {
            items.add(offStack);
        }
        posX -= (items.size() * (size + padding)) / 2f;
        for (ItemStack itemStack : items) {
            if (itemStack.isEmpty()) continue;
            GL11.glPushMatrix();
            glCenteredScale(posX, posY, size / 2f, size / 2f, 0.5f);
            mc.getItemRenderer().renderItemAndEffectIntoGUI(itemStack, posX, posY);
            mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, posX, posY, null);
            GL11.glPopMatrix();
            if (itemStack.isEnchanted() && remove.getValueByName("Зачарования").get()) {
                int ePosY = (int) (posY - fontHeight);
                Map<Enchantment, Integer> enchantmentsMap = EnchantmentHelper.getEnchantments(itemStack);
                for (Enchantment enchantment : enchantmentsMap.keySet()) {
                    int level = enchantmentsMap.get(enchantment);
                    if (level < 1 || !enchantment.canApply(itemStack)) continue;
                    IFormattableTextComponent iformattabletextcomponent = new TranslationTextComponent(enchantment.getName());
                    String enchText = iformattabletextcomponent.getString().substring(0, 2) + level;
                    Fonts.consolas.drawText(matrixStack, enchText, posX, ePosY, -1, 6, 0.05f);
                    ePosY -= (int) fontHeight;
                }
            }
            posX += size + padding;
        }
    }
    public boolean isValid(Entity e) {
        if (AntiBot.isBot(e)) return false;

        return isInView(e);
    }
    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);
    }
    public static void drawMcRect(
            double left,
            double top,
            double right,
            double bottom,
            int color) {
        if (left < right) {
            double i = left;
            left = right;
            right = i;
        }

        if (top < bottom) {
            double j = top;
            top = bottom;
            bottom = j;
        }

        float f3 = (float) (color >> 24 & 255) / 255.0F;
        float f = (float) (color >> 16 & 255) / 255.0F;
        float f1 = (float) (color >> 8 & 255) / 255.0F;
        float f2 = (float) (color & 255) / 255.0F;
        BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer();

        bufferbuilder.pos(left, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(right, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(right, top, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(left, top, 1.0F).color(f, f1, f2, f3).endVertex();

    }
}
типо вам блять реально сложно сделать Ctrl + c Ctrl + v и сделать также но в виде талисманов? /del pls
 
Забаненный
Статус
Оффлайн
Регистрация
10 Май 2023
Сообщения
825
Реакции[?]
9
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
але а смысл вообще делать клиент если его задекомпить на изи можно, по твоей логике ты должен просто ренеймить экспу 3.1 и выдавать за найтли
Посмотреть вложение 284725
а если типу не нравится играть с деф экспенсивом или пастами экспы, и он хочет добнуть что-то свое или с юга, почему ему нельзя это сделать?
 
Read Only
Статус
Оффлайн
Регистрация
19 Июл 2024
Сообщения
207
Реакции[?]
0
Поинты[?]
0
Давно хотел залить что-то на югейм так вот взял есп от Leo и немного переделал
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.

так давайте пройдемся что я добавил/изменил
Поменял фришты в индикации сфер ( работает везде )
Добавил индикацию талисманов ( работает везде кроме фт )
Изменил нейм тег
вроде-бы все :)


Код:
package im.Manloxx.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import im.Manloxx.command.friends.FriendStorage;
import im.Manloxx.events.EventDisplay;
import im.Manloxx.functions.api.Category;
import im.Manloxx.functions.api.Function;
import im.Manloxx.functions.api.FunctionRegister;
import im.Manloxx.functions.impl.combat.AntiBot;
import im.Manloxx.functions.settings.impl.*;
import im.Manloxx.utils.math.MathUtil;
import im.Manloxx.utils.math.Vector4i;
import im.Manloxx.utils.projections.ProjectionUtil;
import im.Manloxx.utils.render.ColorUtils;
import im.Manloxx.utils.render.DisplayUtils;
import im.Manloxx.utils.render.font.Fonts;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
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.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.EffectUtils;
import net.minecraft.scoreboard.Score;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector4f;
import net.minecraft.util.text.*;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static net.minecraft.client.renderer.WorldRenderer.frustum;
import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glTranslatef;

/**
*@author Ieo117 + manloxx
*@since 24.06.2024
*/

@FunctionRegister(name = "ESP", type = Category.VISUAL)
public class ESP extends Function {
    public ModeListSetting remove = new ModeListSetting("Отоброжать",
            new BooleanSetting("Полоску хп", false),
            new BooleanSetting("Эффекты", false),
            new BooleanSetting("Предметы", false),
            new BooleanSetting("Текст хп", false),
            new BooleanSetting("Зачарования", false),
            new BooleanSetting("Боксы", true),
            new BooleanSetting("Сферы", true),
            new BooleanSetting("Талисманы", true)
    );
    public ModeSetting boxMode = new ModeSetting("Вид боксов", "По углам", "По углам", "Бокс").setVisible(() -> remove.getValueByName("Боксы").get());



    public ESP() {
        toggle();
        addSettings(remove, boxMode);
    }

    private final HashMap<Entity, Vector4f> positions = new HashMap<>();
    @Subscribe
    public void onDisplay(EventDisplay e) {
        if (mc.world == null || e.getType() != EventDisplay.Type.PRE) {
            return;
        }
        positions.clear();
        Vector4i colors = new Vector4i(HUD.getColor(0, 1), HUD.getColor(90, 1), HUD.getColor(180, 1), HUD.getColor(270, 1));
        Vector4i friendColors = new Vector4i(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0));//,ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 180, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 270, 1));
        int friendColorInt = FriendStorage.getColor();
        int colorInt = HUD.getColor(270);

        for (Entity entity : mc.world.getAllEntities()) {
            if (!isValid(entity)) continue;
            if (!(entity instanceof PlayerEntity || entity instanceof ItemEntity)) continue;
            if (entity == mc.player && (mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON)) continue;

            double x = MathUtil.interpolate(entity.getPosX(), entity.lastTickPosX, e.getPartialTicks());
            double y = MathUtil.interpolate(entity.getPosY(), entity.lastTickPosY, e.getPartialTicks());
            double z = MathUtil.interpolate(entity.getPosZ(), entity.lastTickPosZ, e.getPartialTicks());
            Vector3d size = new Vector3d(entity.getBoundingBox().maxX - entity.getBoundingBox().minX, entity.getBoundingBox().maxY - entity.getBoundingBox().minY, entity.getBoundingBox().maxZ - entity.getBoundingBox().minZ);
            AxisAlignedBB aabb = new AxisAlignedBB(x - size.x / 2f, y, z - size.z / 2f, x + size.x / 2f, y + size.y, z + size.z / 2f);
            Vector4f position = null;
            for (int i = 0; i < 8; i++) {
                Vector2f vector = ProjectionUtil.project(i % 2 == 0 ? aabb.minX : aabb.maxX, (i / 2) % 2 == 0 ? aabb.minY : aabb.maxY, (i / 4) % 2 == 0 ? aabb.minZ : aabb.maxZ);
                if (position == null) {
                    position = new Vector4f(vector.x, vector.y, 1, 1.0f);
                } else {
                    position.x = Math.min(vector.x, position.x);
                    position.y = Math.min(vector.y, position.y);
                    position.z = Math.max(vector.x, position.z);
                    position.w = Math.max(vector.y, position.w);
                }
            }

            positions.put(entity, position);
        }

        RenderSystem.enableBlend();
        RenderSystem.disableTexture();
        RenderSystem.defaultBlendFunc();
        RenderSystem.shadeModel(7425);

        buffer.begin(7, DefaultVertexFormats.POSITION_COLOR);

        for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
            Vector4f position = entry.getValue();

            if (entry.getKey() instanceof LivingEntity entity) {
                if (remove.getValueByName("Боксы").get() && boxMode.is("Бокс")) {
                    DisplayUtils.drawBox(position.x - 0.5f, position.y - 0.5f, position.z + 0.5f, position.w + 0.5f, 2, ColorUtils.rgba(0, 0, 0, 128));
                    DisplayUtils.drawBoxTest(position.x, position.y, position.z, position.w, 1, FriendStorage.isFriend(entity.getName().getString()) ? friendColors : colors);
                }
                float sect = 10;
                float lineWidth = 1;
                double playerX = mc.player.getPosX();
                double playerY = mc.player.getPosY();
                double playerZ = mc.player.getPosZ();
                double entityX = position.x;
                double entityY = position.y;
                double entityZ = position.z;
                double distance = Math.sqrt(Math.pow(playerX - entityX, 2) + Math.pow(playerY - entityY, 2) + Math.pow(playerZ - entityZ, 2));
                float sectChange = (float) (distance / 10.0);
                float calcSect = sect - sectChange;
                calcSect = Math.max(3, calcSect);

                if (remove.getValueByName("Боксы").get() && boxMode.is("По углам")) {
                    double x = position.x;
                    double y = position.y;
                    double endX = position.z;
                    double endY = position.w;
                    int back = ColorUtils.rgba(0, 0, 0, 128);

                    double size = 1f;
                    int getColor = FriendStorage.isFriend(entity.getName().getString()) ? friendColorInt : colorInt;
                    drawMcRect(x - 0.5F, y - 0.5F, x + calcSect, y + 1, getColor);
                    drawMcRect(endX - calcSect, y - 0.5F, endX + 1, y + 1, getColor);
                    drawMcRect(x - 0.5F, endY - 0.5F, x + calcSect, endY + 1, getColor);
                    drawMcRect(endX - calcSect, endY - 0.5F, endX + 1, endY + 1, getColor);

                    drawMcRect(x - 0.5F, y + 1, x + 1, y + calcSect, getColor);
                    drawMcRect(x - 0.5F, endY - calcSect, x + 1, endY, getColor);
                    drawMcRect(endX - 0.5F, y + 1, endX + 1, y + calcSect, getColor);
                    drawMcRect(endX - 0.5F, endY - calcSect, endX + 1, endY, getColor);
                
                }

                float hpOffset = 3f;
                float out = 0.5f;
                if (remove.getValueByName("Полоску хп").get()) {
                    String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
                    DisplayUtils.drawRectBuilding(position.x - hpOffset - out, position.y - out, position.x - hpOffset + 1 + out, position.w + out, ColorUtils.rgba(0, 0, 0, 128));
                    DisplayUtils.drawRectBuilding(position.x - hpOffset, position.y, position.x - hpOffset + 1, position.w, ColorUtils.rgba(0, 0, 0, 128));
                    Score score = mc.world.getScoreboard().getOrCreateScore(entity.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
                    float hp = entity.getHealth();
                    float maxHp = entity.getMaxHealth();
                    if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
                        hp = score.getScorePoints();
                        maxHp = 20;
                    }
                    DisplayUtils.drawMCVerticalBuilding(position.x - hpOffset, position.y + (position.w - position.y) * (1 - MathHelper.clamp(hp / maxHp, 0, 1)), position.x - hpOffset + 1, position.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.w : colors.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.x : colors.x);
                }
            }
        }
        Tessellator.getInstance().draw();
        RenderSystem.shadeModel(7424);
        RenderSystem.enableTexture();
        RenderSystem.disableBlend();

        for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
            Entity entity = entry.getKey();
            if (entity instanceof LivingEntity living) {
                Score score = mc.world.getScoreboard().getOrCreateScore(living.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
                float hp = living.getHealth();
                float maxHp = living.getMaxHealth();
                String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
                if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
                    hp = score.getScorePoints();
                    maxHp = 20;
                }
                Vector4f position = entry.getValue();
                float width = position.z - position.x;
                String hpText = (int) hp + "HP";
                float hpWidth = Fonts.consolas.getWidth(hpText, 6);
                float hpPercent = MathHelper.clamp(hp / maxHp, 0, 1);
                float hpPosY = position.y + (position.w - position.y) * (1 - hpPercent);
                if (remove.getValueByName("Текст хп").get()) {
                    Fonts.consolas.drawText(e.getMatrixStack(), hpText, position.x - hpWidth - 6, hpPosY, -1, 6, 0.05f);
                }
                String hptext1 =  (int) hp + "Ники игроков";
                String friendPrefix = FriendStorage.isFriend(entity.getName().getString()) ? TextFormatting.GREEN + "[F] " : "";
                ITextComponent text = entity.getDisplayName();
                TextComponent name = (TextComponent)text;
                name.append(new StringTextComponent(" [" + TextFormatting.RED + (int) hp + TextFormatting.WHITE + "]"));
                float length = mc.fontRenderer.getStringPropertyWidth(name);
                GL11.glPushMatrix();
                glCenteredScale(position.x + width / 2f - length / 2f, position.y - 7, length, 10, 0.5f);
                if(FriendStorage.isFriend(entity.getName().getString())) {
                    DisplayUtils.drawRoundedRect(position.x - 2 + width / 2.0F - length / 1.9f, position.y - 16, length + 8, 14, 2, ColorUtils.rgba(21, 21, 21, 205));
                }else {
                    DisplayUtils.drawRoundedRect(position.x - 2 + width / 2.0F - length / 1.9f , position.y - 16, length + 8, 14, 2, ColorUtils.rgba(21, 21, 21, 205));
                }
                mc.fontRenderer.func_243246_a(e.getMatrixStack(), name, position.x + width/2.0f - length / 2f , position.y - 13, -1);
                if(entity instanceof PlayerEntity player){
                    if(remove.getValueByName("Сферы").get()){
                        ItemStack stack = player.getHeldItemOffhand();
                        String nameS = "";

                        String itemName = stack.getDisplayName().getString();
                        if(stack.getItem() == Items.PLAYER_HEAD) {
                            CompoundNBT tag = stack.getTag();

                            if (tag != null && tag.contains("display", 10)) {
                                CompoundNBT display = tag.getCompound("display");

                                if (display.contains("Lore", 9)) {
                                    ListNBT lore = display.getList("Lore", 8);

                                    if (!lore.isEmpty()) {
                                        String firstLore = lore.getString(0);

                                        int levelIndex = firstLore.indexOf("Уровень");
                                        if (levelIndex != -1) {
                                            String levelString = firstLore.substring(levelIndex + "Уровень".length()).trim();
                                            String gat = levelString;
                                            if(gat.contains("1/3")){
                                                nameS = "- 1/3]";
                                            } else if (gat.contains("2/3")) {
                                                nameS = "- 2/3]";
                                            } else if (gat.contains("MAX")) {
                                                nameS = "- MAX]";
                                            } else{
                                                nameS = "";
                                            }
                                        }
                                    }
                                }
                            }
                            if(itemName.contains("Пандо")){
                                itemName = "[PANDORA ";
                            } else if (itemName.contains("Аполл")) {
                                itemName = "[APOLLON ";
                            } else if (itemName.contains("Тит")) {
                                itemName = "[TITANA ";
                            } else if (itemName.contains("Осир")) {
                                itemName = "[OSIRIS ";
                            } else if (itemName.contains("Андро")) {
                                itemName = "[ANDROMEDA";
                            } else if (itemName.contains("Хим")) {
                                itemName = "[XIMERA ";
                            } else if (itemName.contains("Астр")) {
                                itemName = "[ASTREYA ";
                            }
                            Fonts.sfui.drawText(e.getMatrixStack(), itemName + nameS, (float) position.x - 30, position.y - 60, ColorUtils.rgb(255, 16, 16), 12.5f, 0.0001f);
                        }
                    }
                }
                if(entity instanceof PlayerEntity player){
                    if(remove.getValueByName("Талисманы").get()){
                        ItemStack stack = player.getHeldItemOffhand();
                        String nameS = "";

                        String itemName = stack.getDisplayName().getString();
                        if(stack.getItem() == Items.TOTEM_OF_UNDYING) {
                            CompoundNBT tag = stack.getTag();

                            if (tag != null && tag.contains("display", 10)) {
                                CompoundNBT display = tag.getCompound("display");

                                if (display.contains("Lore", 9)) {
                                    ListNBT lore = display.getList("Lore", 8);

                                    if (!lore.isEmpty()) {
                                        String firstLore = lore.getString(0);

                                        int levelIndex = firstLore.indexOf("Уровень");
                                        if (levelIndex != -1) {
                                            String levelString = firstLore.substring(levelIndex + "Уровень".length()).trim();
                                            String gat = levelString;
                                            if(gat.contains("1/3")){
                                                nameS = "- 1/3]";
                                            } else if (gat.contains("2/3")) {
                                                nameS = "- 2/3]";
                                            } else if (gat.contains("MAX")) {
                                                nameS = "- MAX]";
                                            } else{
                                                nameS = "";
                                            }
                                        }
                                    }
                                }
                            }
                            if(itemName.contains("Талисман Ехидны")){
                                itemName = "[EXIDNA ";
                            } else if (itemName.contains("Талисман Гармонии")) {
                                itemName = "[GARMONIYA ";
                            } else if (itemName.contains("Талисма Крушителя")) {
                                itemName = "[KRUSH ";
                            } else if (itemName.contains("Талисман Карателя")) {
                                itemName = "[KARATELYA ";
                            } else if (itemName.contains("Талисман Грани")) {
                                itemName = "[GRANI ";
                            } else if (itemName.contains("Талисман Тритона")) {
                                itemName = "[TRITONA ";
                            } else if (itemName.contains("Талисман Феникса")) {
                                itemName = "[FENIKSA ";
                            }
                            Fonts.sfui.drawText(e.getMatrixStack(), itemName + nameS, (float) position.x - 30, position.y - 60, ColorUtils.rgb(255, 16, 16), 12.5f, 0.0001f);
                        }
                    }
                }
                GL11.glPopMatrix();
                if (remove.getValueByName("Эффекты").get()) {
                    drawPotions(e.getMatrixStack(), living, position.z + 2, position.y);
                }
                drawItems(e.getMatrixStack(), living, (int) (position.x + width / 2f), (int) (position.y - 20));
            } else if (entity instanceof ItemEntity item) {
                Vector4f position = entry.getValue();
                float width = position.z - position.x;
                float length = mc.fontRenderer.getStringPropertyWidth(entity.getDisplayName());
                GL11.glPushMatrix();
                glCenteredScale(position.x + width / 2f - length / 2f, position.y - 7, length, 10, 0.5f);
                if(remove.getValueByName("Предметы").get()) {
                    String tag = (item.getItem().getDisplayName().getString() +
                            (item.getItem().getCount() < 1 ? "" : " x" + item.getItem().getCount()));
                    mc.fontRenderer.func_243246_a(e.getMatrixStack(),ITextComponent.getTextComponentOrEmpty(tag), position.x + width / 2f - length / 2f, position.y - 7, tag.contains("[★]") ? ColorUtils.rgb(255, 16, 16) : -1);
                }
                GL11.glPopMatrix();
            }
        }
    }

    public boolean isInView(Entity ent) {
        if (mc.getRenderViewEntity() == null) {
            return false;
        }
        frustum.setCameraPosition(mc.getRenderManager().info.getProjectedView().x, mc.getRenderManager().info.getProjectedView().y, mc.getRenderManager().info.getProjectedView().z);
        return frustum.isBoundingBoxInFrustum(ent.getBoundingBox()) || ent.ignoreFrustumCheck;
    }

    private void drawPotions(MatrixStack matrixStack, LivingEntity entity, float posX, float posY) {
        for (EffectInstance pot : entity.getActivePotionEffects()) {
            int amp = pot.getAmplifier();
            String ampStr = "";
            if (amp >= 1 && amp <= 9) {
                ampStr = " " + I18n.format("enchantment.level." + (amp + 1));
            }
            String text = I18n.format(pot.getEffectName()) + ampStr + " - " + EffectUtils.getPotionDurationString(pot, 1);
            Fonts.consolas.drawText(matrixStack, text, posX, posY, -1, 6, 0.05f);
            posY += Fonts.consolas.getHeight(6);
        }
    }

    private void drawItems(MatrixStack matrixStack, LivingEntity entity, int posX, int posY) {
        int size = 8;
        int padding = 6;
        float fontHeight = Fonts.consolas.getHeight(6);
        List<ItemStack> items = new ArrayList<>();
        ItemStack mainStack = entity.getHeldItemMainhand();
        if (!mainStack.isEmpty()) {
            items.add(mainStack);
        }
        for (ItemStack itemStack : entity.getArmorInventoryList()) {
            if (itemStack.isEmpty()) continue;
            items.add(itemStack);
        }
        ItemStack offStack = entity.getHeldItemOffhand();
        if (!offStack.isEmpty()) {
            items.add(offStack);
        }
        posX -= (items.size() * (size + padding)) / 2f;
        for (ItemStack itemStack : items) {
            if (itemStack.isEmpty()) continue;
            GL11.glPushMatrix();
            glCenteredScale(posX, posY, size / 2f, size / 2f, 0.5f);
            mc.getItemRenderer().renderItemAndEffectIntoGUI(itemStack, posX, posY);
            mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, posX, posY, null);
            GL11.glPopMatrix();
            if (itemStack.isEnchanted() && remove.getValueByName("Зачарования").get()) {
                int ePosY = (int) (posY - fontHeight);
                Map<Enchantment, Integer> enchantmentsMap = EnchantmentHelper.getEnchantments(itemStack);
                for (Enchantment enchantment : enchantmentsMap.keySet()) {
                    int level = enchantmentsMap.get(enchantment);
                    if (level < 1 || !enchantment.canApply(itemStack)) continue;
                    IFormattableTextComponent iformattabletextcomponent = new TranslationTextComponent(enchantment.getName());
                    String enchText = iformattabletextcomponent.getString().substring(0, 2) + level;
                    Fonts.consolas.drawText(matrixStack, enchText, posX, ePosY, -1, 6, 0.05f);
                    ePosY -= (int) fontHeight;
                }
            }
            posX += size + padding;
        }
    }
    public boolean isValid(Entity e) {
        if (AntiBot.isBot(e)) return false;

        return isInView(e);
    }
    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);
    }
    public static void drawMcRect(
            double left,
            double top,
            double right,
            double bottom,
            int color) {
        if (left < right) {
            double i = left;
            left = right;
            right = i;
        }

        if (top < bottom) {
            double j = top;
            top = bottom;
            bottom = j;
        }

        float f3 = (float) (color >> 24 & 255) / 255.0F;
        float f = (float) (color >> 16 & 255) / 255.0F;
        float f1 = (float) (color >> 8 & 255) / 255.0F;
        float f2 = (float) (color & 255) / 255.0F;
        BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer();

        bufferbuilder.pos(left, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(right, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(right, top, 1.0F).color(f, f1, f2, f3).endVertex();
        bufferbuilder.pos(left, top, 1.0F).color(f, f1, f2, f3).endVertex();

    }
}
манлох который косит под дезза который косит под туска и еще у него база експа 3.1 , он это не отрицает
пастерок просто перезалил чужую тему
 
Начинающий
Статус
Оффлайн
Регистрация
31 Июл 2023
Сообщения
227
Реакции[?]
1
Поинты[?]
1K
Начинающий
Статус
Оффлайн
Регистрация
25 Фев 2024
Сообщения
509
Реакции[?]
0
Поинты[?]
0
манлох который косит под дезза который косит под туска и еще у него база експа 3.1 , он это не отрицает
пастерок просто перезалил чужую тему
где я перезалил? я написал мини реворк... где я под деза кошусь? я кто такой тускич в душе не ебу.
 
Начинающий
Статус
Оффлайн
Регистрация
25 Фев 2024
Сообщения
509
Реакции[?]
0
Поинты[?]
0
Начинающий
Статус
Оффлайн
Регистрация
25 Фев 2024
Сообщения
509
Реакции[?]
0
Поинты[?]
0
Read Only
Статус
Оффлайн
Регистрация
19 Июл 2024
Сообщения
207
Реакции[?]
0
Поинты[?]
0
Сверху Снизу