• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Визуальная часть Xray Expensive 3.1 ready

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Апр 2024
Сообщения
16
Реакции
0
Выберите загрузчик игры
  1. Прочие моды
увидел тему https://yougame.biz/threads/328582/ (noad) и решил переделать,очень сильно хавало производительность,потому что сам xray перебирал около 10 миллионов блоков,я добавил настройки(теперь можно выбирать какие руды будут подсвечены),изменение радиуса и плотности,ss ниже,не бейте палками если увидите говнокод,его было много в той теме.
выфвфвыф:
Expand Collapse Copy
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
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.functions.settings.impl.ModeListSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import net.optifine.render.RenderUtils;

import java.awt.*;
import java.util.*;
import java.util.List;

@FunctionRegister(name = "Xray", type = Category.Render)
public class Xray extends Function {

    private final SliderSetting radius = new SliderSetting("Радиус", 32f, 16f, 100f, 1f);
    private final SliderSetting density = new SliderSetting("Плотность", 1f, 1f, 4f, 1f);
    private final List<BooleanSetting> oreSettings = Arrays.asList(
            new BooleanSetting("Уголь", true),
            new BooleanSetting("Железо", true),
            new BooleanSetting("Золото", false),
            new BooleanSetting("Алмазы", false),
            new BooleanSetting("Изумруды", false),
            new BooleanSetting("Редстоун", true),
            new BooleanSetting("Лазурит", true),
            new BooleanSetting("Обломки", false),
            new BooleanSetting("Кварц", false)
    );
    final ModeListSetting orts = new ModeListSetting("Руды", oreSettings.toArray(new BooleanSetting[0]));

    private final Map<Block, Integer> ores = new HashMap<>();
    private final Map<Block, String> blockToNameMap = new HashMap<>();

    public Xray() {
        addSettings(orts, radius, density);
        initOreColors();
        initBlockMappings();
    }

    private void initOreColors() {
        ores.put(Blocks.COAL_ORE, new Color(0, 0, 0).getRGB());
        ores.put(Blocks.IRON_ORE, new Color(200, 200, 200).getRGB());
        ores.put(Blocks.GOLD_ORE, new Color(255, 215, 0).getRGB());
        ores.put(Blocks.DIAMOND_ORE, new Color(0, 191, 255).getRGB());
        ores.put(Blocks.EMERALD_ORE, new Color(0, 255, 0).getRGB());
        ores.put(Blocks.REDSTONE_ORE, new Color(255, 0, 0).getRGB());
        ores.put(Blocks.LAPIS_ORE, new Color(0, 0, 255).getRGB());
        ores.put(Blocks.ANCIENT_DEBRIS, new Color(68, 33, 18).getRGB());
        ores.put(Blocks.NETHER_QUARTZ_ORE, new Color(255, 255, 255).getRGB());
    }

    private void initBlockMappings() {
        blockToNameMap.put(Blocks.COAL_ORE, "Уголь");
        blockToNameMap.put(Blocks.IRON_ORE, "Железо");
        blockToNameMap.put(Blocks.GOLD_ORE, "Золото");
        blockToNameMap.put(Blocks.DIAMOND_ORE, "Алмазы");
        blockToNameMap.put(Blocks.EMERALD_ORE, "Изумруды");
        blockToNameMap.put(Blocks.REDSTONE_ORE, "Редстоун");
        blockToNameMap.put(Blocks.LAPIS_ORE, "Лазурит");
        blockToNameMap.put(Blocks.ANCIENT_DEBRIS, "Обломки");
        blockToNameMap.put(Blocks.NETHER_QUARTZ_ORE, "Кварц");
    }

    [USER=1474073]@Subscribe[/USER]
    private void onRender(WorldEvent e) {
        ClientWorld world = mc.world;
        if (world == null) return;

        int radiusValue = radius.get("").intValue();
        int step = density.get("").intValue();
        BlockPos playerPos = mc.player.getPosition();

        int minX = playerPos.getX() - radiusValue;
        int maxX = playerPos.getX() + radiusValue;
        int minZ = playerPos.getZ() - radiusValue;
        int maxZ = playerPos.getZ() + radiusValue;
        int minY = Math.max(0, playerPos.getY() - radiusValue);
        int maxY = Math.min(world.getHeight(), playerPos.getY() + radiusValue);

        double radiusSq = radiusValue * radiusValue;

        for (int x = minX; x <= maxX; x += step) {
            for (int z = minZ; z <= maxZ; z += step) {
                double distX = x - playerPos.getX();
                double distZ = z - playerPos.getZ();
                double distSq = distX * distX + distZ * distZ;

                if (distSq > radiusSq) continue;

                for (int y = minY; y <= maxY; y++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    Block block = world.getBlockState(pos).getBlock();

                    if (shouldRenderBlock(block)) {
                        double distY = y - playerPos.getY();
                        if (distX * distX + distY * distY + distZ * distZ > radiusSq) continue;

                        RenderUtils.drawBlockBox(pos, ores.get(block));
                    }
                }
            }
        }
    }

    private boolean shouldRenderBlock(Block block) {
        if (!ores.containsKey(block)) return false;

        String settingName = blockToNameMap.get(block);
        if (settingName == null) return false;

        for (BooleanSetting setting : oreSettings) {
            if (setting.getName().equals(settingName)) {
                Boolean value = setting.get("");
                return value != null && value;
            }
        }
        return false;
    }
}

2025-06-03_19-14-42.png
 
увидел тему https://yougame.biz/threads/328582/ (noad) и решил переделать,очень сильно хавало производительность,потому что сам xray перебирал около 10 миллионов блоков,я добавил настройки(теперь можно выбирать какие руды будут подсвечены),изменение радиуса и плотности,ss ниже,не бейте палками если увидите говнокод,его было много в той теме.
выфвфвыф:
Expand Collapse Copy
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
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.functions.settings.impl.ModeListSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import net.optifine.render.RenderUtils;

import java.awt.*;
import java.util.*;
import java.util.List;

@FunctionRegister(name = "Xray", type = Category.Render)
public class Xray extends Function {

    private final SliderSetting radius = new SliderSetting("Радиус", 32f, 16f, 100f, 1f);
    private final SliderSetting density = new SliderSetting("Плотность", 1f, 1f, 4f, 1f);
    private final List<BooleanSetting> oreSettings = Arrays.asList(
            new BooleanSetting("Уголь", true),
            new BooleanSetting("Железо", true),
            new BooleanSetting("Золото", false),
            new BooleanSetting("Алмазы", false),
            new BooleanSetting("Изумруды", false),
            new BooleanSetting("Редстоун", true),
            new BooleanSetting("Лазурит", true),
            new BooleanSetting("Обломки", false),
            new BooleanSetting("Кварц", false)
    );
    final ModeListSetting orts = new ModeListSetting("Руды", oreSettings.toArray(new BooleanSetting[0]));

    private final Map<Block, Integer> ores = new HashMap<>();
    private final Map<Block, String> blockToNameMap = new HashMap<>();

    public Xray() {
        addSettings(orts, radius, density);
        initOreColors();
        initBlockMappings();
    }

    private void initOreColors() {
        ores.put(Blocks.COAL_ORE, new Color(0, 0, 0).getRGB());
        ores.put(Blocks.IRON_ORE, new Color(200, 200, 200).getRGB());
        ores.put(Blocks.GOLD_ORE, new Color(255, 215, 0).getRGB());
        ores.put(Blocks.DIAMOND_ORE, new Color(0, 191, 255).getRGB());
        ores.put(Blocks.EMERALD_ORE, new Color(0, 255, 0).getRGB());
        ores.put(Blocks.REDSTONE_ORE, new Color(255, 0, 0).getRGB());
        ores.put(Blocks.LAPIS_ORE, new Color(0, 0, 255).getRGB());
        ores.put(Blocks.ANCIENT_DEBRIS, new Color(68, 33, 18).getRGB());
        ores.put(Blocks.NETHER_QUARTZ_ORE, new Color(255, 255, 255).getRGB());
    }

    private void initBlockMappings() {
        blockToNameMap.put(Blocks.COAL_ORE, "Уголь");
        blockToNameMap.put(Blocks.IRON_ORE, "Железо");
        blockToNameMap.put(Blocks.GOLD_ORE, "Золото");
        blockToNameMap.put(Blocks.DIAMOND_ORE, "Алмазы");
        blockToNameMap.put(Blocks.EMERALD_ORE, "Изумруды");
        blockToNameMap.put(Blocks.REDSTONE_ORE, "Редстоун");
        blockToNameMap.put(Blocks.LAPIS_ORE, "Лазурит");
        blockToNameMap.put(Blocks.ANCIENT_DEBRIS, "Обломки");
        blockToNameMap.put(Blocks.NETHER_QUARTZ_ORE, "Кварц");
    }

    [USER=1474073]@Subscribe[/USER]
    private void onRender(WorldEvent e) {
        ClientWorld world = mc.world;
        if (world == null) return;

        int radiusValue = radius.get("").intValue();
        int step = density.get("").intValue();
        BlockPos playerPos = mc.player.getPosition();

        int minX = playerPos.getX() - radiusValue;
        int maxX = playerPos.getX() + radiusValue;
        int minZ = playerPos.getZ() - radiusValue;
        int maxZ = playerPos.getZ() + radiusValue;
        int minY = Math.max(0, playerPos.getY() - radiusValue);
        int maxY = Math.min(world.getHeight(), playerPos.getY() + radiusValue);

        double radiusSq = radiusValue * radiusValue;

        for (int x = minX; x <= maxX; x += step) {
            for (int z = minZ; z <= maxZ; z += step) {
                double distX = x - playerPos.getX();
                double distZ = z - playerPos.getZ();
                double distSq = distX * distX + distZ * distZ;

                if (distSq > radiusSq) continue;

                for (int y = minY; y <= maxY; y++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    Block block = world.getBlockState(pos).getBlock();

                    if (shouldRenderBlock(block)) {
                        double distY = y - playerPos.getY();
                        if (distX * distX + distY * distY + distZ * distZ > radiusSq) continue;

                        RenderUtils.drawBlockBox(pos, ores.get(block));
                    }
                }
            }
        }
    }

    private boolean shouldRenderBlock(Block block) {
        if (!ores.containsKey(block)) return false;

        String settingName = blockToNameMap.get(block);
        if (settingName == null) return false;

        for (BooleanSetting setting : oreSettings) {
            if (setting.getName().equals(settingName)) {
                Boolean value = setting.get("");
                return value != null && value;
            }
        }
        return false;
    }
}

Посмотреть вложение 307821
/del
 
BlockESP курит в сторонке
 
увидел тему https://yougame.biz/threads/328582/ (noad) и решил переделать,очень сильно хавало производительность,потому что сам xray перебирал около 10 миллионов блоков,я добавил настройки(теперь можно выбирать какие руды будут подсвечены),изменение радиуса и плотности,ss ниже,не бейте палками если увидите говнокод,его было много в той теме.
выфвфвыф:
Expand Collapse Copy
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
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.functions.settings.impl.ModeListSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import net.optifine.render.RenderUtils;

import java.awt.*;
import java.util.*;
import java.util.List;

@FunctionRegister(name = "Xray", type = Category.Render)
public class Xray extends Function {

    private final SliderSetting radius = new SliderSetting("Радиус", 32f, 16f, 100f, 1f);
    private final SliderSetting density = new SliderSetting("Плотность", 1f, 1f, 4f, 1f);
    private final List<BooleanSetting> oreSettings = Arrays.asList(
            new BooleanSetting("Уголь", true),
            new BooleanSetting("Железо", true),
            new BooleanSetting("Золото", false),
            new BooleanSetting("Алмазы", false),
            new BooleanSetting("Изумруды", false),
            new BooleanSetting("Редстоун", true),
            new BooleanSetting("Лазурит", true),
            new BooleanSetting("Обломки", false),
            new BooleanSetting("Кварц", false)
    );
    final ModeListSetting orts = new ModeListSetting("Руды", oreSettings.toArray(new BooleanSetting[0]));

    private final Map<Block, Integer> ores = new HashMap<>();
    private final Map<Block, String> blockToNameMap = new HashMap<>();

    public Xray() {
        addSettings(orts, radius, density);
        initOreColors();
        initBlockMappings();
    }

    private void initOreColors() {
        ores.put(Blocks.COAL_ORE, new Color(0, 0, 0).getRGB());
        ores.put(Blocks.IRON_ORE, new Color(200, 200, 200).getRGB());
        ores.put(Blocks.GOLD_ORE, new Color(255, 215, 0).getRGB());
        ores.put(Blocks.DIAMOND_ORE, new Color(0, 191, 255).getRGB());
        ores.put(Blocks.EMERALD_ORE, new Color(0, 255, 0).getRGB());
        ores.put(Blocks.REDSTONE_ORE, new Color(255, 0, 0).getRGB());
        ores.put(Blocks.LAPIS_ORE, new Color(0, 0, 255).getRGB());
        ores.put(Blocks.ANCIENT_DEBRIS, new Color(68, 33, 18).getRGB());
        ores.put(Blocks.NETHER_QUARTZ_ORE, new Color(255, 255, 255).getRGB());
    }

    private void initBlockMappings() {
        blockToNameMap.put(Blocks.COAL_ORE, "Уголь");
        blockToNameMap.put(Blocks.IRON_ORE, "Железо");
        blockToNameMap.put(Blocks.GOLD_ORE, "Золото");
        blockToNameMap.put(Blocks.DIAMOND_ORE, "Алмазы");
        blockToNameMap.put(Blocks.EMERALD_ORE, "Изумруды");
        blockToNameMap.put(Blocks.REDSTONE_ORE, "Редстоун");
        blockToNameMap.put(Blocks.LAPIS_ORE, "Лазурит");
        blockToNameMap.put(Blocks.ANCIENT_DEBRIS, "Обломки");
        blockToNameMap.put(Blocks.NETHER_QUARTZ_ORE, "Кварц");
    }

    [USER=1474073]@Subscribe[/USER]
    private void onRender(WorldEvent e) {
        ClientWorld world = mc.world;
        if (world == null) return;

        int radiusValue = radius.get("").intValue();
        int step = density.get("").intValue();
        BlockPos playerPos = mc.player.getPosition();

        int minX = playerPos.getX() - radiusValue;
        int maxX = playerPos.getX() + radiusValue;
        int minZ = playerPos.getZ() - radiusValue;
        int maxZ = playerPos.getZ() + radiusValue;
        int minY = Math.max(0, playerPos.getY() - radiusValue);
        int maxY = Math.min(world.getHeight(), playerPos.getY() + radiusValue);

        double radiusSq = radiusValue * radiusValue;

        for (int x = minX; x <= maxX; x += step) {
            for (int z = minZ; z <= maxZ; z += step) {
                double distX = x - playerPos.getX();
                double distZ = z - playerPos.getZ();
                double distSq = distX * distX + distZ * distZ;

                if (distSq > radiusSq) continue;

                for (int y = minY; y <= maxY; y++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    Block block = world.getBlockState(pos).getBlock();

                    if (shouldRenderBlock(block)) {
                        double distY = y - playerPos.getY();
                        if (distX * distX + distY * distY + distZ * distZ > radiusSq) continue;

                        RenderUtils.drawBlockBox(pos, ores.get(block));
                    }
                }
            }
        }
    }

    private boolean shouldRenderBlock(Block block) {
        if (!ores.containsKey(block)) return false;

        String settingName = blockToNameMap.get(block);
        if (settingName == null) return false;

        for (BooleanSetting setting : oreSettings) {
            if (setting.getName().equals(settingName)) {
                Boolean value = setting.get("");
                return value != null && value;
            }
        }
        return false;
    }
}

Посмотреть вложение 307821
норм
 
увидел тему https://yougame.biz/threads/328582/ (noad) и решил переделать,очень сильно хавало производительность,потому что сам xray перебирал около 10 миллионов блоков,я добавил настройки(теперь можно выбирать какие руды будут подсвечены),изменение радиуса и плотности,ss ниже,не бейте палками если увидите говнокод,его было много в той теме.
выфвфвыф:
Expand Collapse Copy
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
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.functions.settings.impl.ModeListSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import net.optifine.render.RenderUtils;

import java.awt.*;
import java.util.*;
import java.util.List;

@FunctionRegister(name = "Xray", type = Category.Render)
public class Xray extends Function {

    private final SliderSetting radius = new SliderSetting("Радиус", 32f, 16f, 100f, 1f);
    private final SliderSetting density = new SliderSetting("Плотность", 1f, 1f, 4f, 1f);
    private final List<BooleanSetting> oreSettings = Arrays.asList(
            new BooleanSetting("Уголь", true),
            new BooleanSetting("Железо", true),
            new BooleanSetting("Золото", false),
            new BooleanSetting("Алмазы", false),
            new BooleanSetting("Изумруды", false),
            new BooleanSetting("Редстоун", true),
            new BooleanSetting("Лазурит", true),
            new BooleanSetting("Обломки", false),
            new BooleanSetting("Кварц", false)
    );
    final ModeListSetting orts = new ModeListSetting("Руды", oreSettings.toArray(new BooleanSetting[0]));

    private final Map<Block, Integer> ores = new HashMap<>();
    private final Map<Block, String> blockToNameMap = new HashMap<>();

    public Xray() {
        addSettings(orts, radius, density);
        initOreColors();
        initBlockMappings();
    }

    private void initOreColors() {
        ores.put(Blocks.COAL_ORE, new Color(0, 0, 0).getRGB());
        ores.put(Blocks.IRON_ORE, new Color(200, 200, 200).getRGB());
        ores.put(Blocks.GOLD_ORE, new Color(255, 215, 0).getRGB());
        ores.put(Blocks.DIAMOND_ORE, new Color(0, 191, 255).getRGB());
        ores.put(Blocks.EMERALD_ORE, new Color(0, 255, 0).getRGB());
        ores.put(Blocks.REDSTONE_ORE, new Color(255, 0, 0).getRGB());
        ores.put(Blocks.LAPIS_ORE, new Color(0, 0, 255).getRGB());
        ores.put(Blocks.ANCIENT_DEBRIS, new Color(68, 33, 18).getRGB());
        ores.put(Blocks.NETHER_QUARTZ_ORE, new Color(255, 255, 255).getRGB());
    }

    private void initBlockMappings() {
        blockToNameMap.put(Blocks.COAL_ORE, "Уголь");
        blockToNameMap.put(Blocks.IRON_ORE, "Железо");
        blockToNameMap.put(Blocks.GOLD_ORE, "Золото");
        blockToNameMap.put(Blocks.DIAMOND_ORE, "Алмазы");
        blockToNameMap.put(Blocks.EMERALD_ORE, "Изумруды");
        blockToNameMap.put(Blocks.REDSTONE_ORE, "Редстоун");
        blockToNameMap.put(Blocks.LAPIS_ORE, "Лазурит");
        blockToNameMap.put(Blocks.ANCIENT_DEBRIS, "Обломки");
        blockToNameMap.put(Blocks.NETHER_QUARTZ_ORE, "Кварц");
    }

    [USER=1474073]@Subscribe[/USER]
    private void onRender(WorldEvent e) {
        ClientWorld world = mc.world;
        if (world == null) return;

        int radiusValue = radius.get("").intValue();
        int step = density.get("").intValue();
        BlockPos playerPos = mc.player.getPosition();

        int minX = playerPos.getX() - radiusValue;
        int maxX = playerPos.getX() + radiusValue;
        int minZ = playerPos.getZ() - radiusValue;
        int maxZ = playerPos.getZ() + radiusValue;
        int minY = Math.max(0, playerPos.getY() - radiusValue);
        int maxY = Math.min(world.getHeight(), playerPos.getY() + radiusValue);

        double radiusSq = radiusValue * radiusValue;

        for (int x = minX; x <= maxX; x += step) {
            for (int z = minZ; z <= maxZ; z += step) {
                double distX = x - playerPos.getX();
                double distZ = z - playerPos.getZ();
                double distSq = distX * distX + distZ * distZ;

                if (distSq > radiusSq) continue;

                for (int y = minY; y <= maxY; y++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    Block block = world.getBlockState(pos).getBlock();

                    if (shouldRenderBlock(block)) {
                        double distY = y - playerPos.getY();
                        if (distX * distX + distY * distY + distZ * distZ > radiusSq) continue;

                        RenderUtils.drawBlockBox(pos, ores.get(block));
                    }
                }
            }
        }
    }

    private boolean shouldRenderBlock(Block block) {
        if (!ores.containsKey(block)) return false;

        String settingName = blockToNameMap.get(block);
        if (settingName == null) return false;

        for (BooleanSetting setting : oreSettings) {
            if (setting.getName().equals(settingName)) {
                Boolean value = setting.get("");
                return value != null && value;
            }
        }
        return false;
    }
}

Посмотреть вложение 307821
зачем это?Это на всех базах есть /del?
 
увидел тему https://yougame.biz/threads/328582/ (noad) и решил переделать,очень сильно хавало производительность,потому что сам xray перебирал около 10 миллионов блоков,я добавил настройки(теперь можно выбирать какие руды будут подсвечены),изменение радиуса и плотности,ss ниже,не бейте палками если увидите говнокод,его было много в той теме.
выфвфвыф:
Expand Collapse Copy
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
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.functions.settings.impl.ModeListSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import net.optifine.render.RenderUtils;

import java.awt.*;
import java.util.*;
import java.util.List;

@FunctionRegister(name = "Xray", type = Category.Render)
public class Xray extends Function {

    private final SliderSetting radius = new SliderSetting("Радиус", 32f, 16f, 100f, 1f);
    private final SliderSetting density = new SliderSetting("Плотность", 1f, 1f, 4f, 1f);
    private final List<BooleanSetting> oreSettings = Arrays.asList(
            new BooleanSetting("Уголь", true),
            new BooleanSetting("Железо", true),
            new BooleanSetting("Золото", false),
            new BooleanSetting("Алмазы", false),
            new BooleanSetting("Изумруды", false),
            new BooleanSetting("Редстоун", true),
            new BooleanSetting("Лазурит", true),
            new BooleanSetting("Обломки", false),
            new BooleanSetting("Кварц", false)
    );
    final ModeListSetting orts = new ModeListSetting("Руды", oreSettings.toArray(new BooleanSetting[0]));

    private final Map<Block, Integer> ores = new HashMap<>();
    private final Map<Block, String> blockToNameMap = new HashMap<>();

    public Xray() {
        addSettings(orts, radius, density);
        initOreColors();
        initBlockMappings();
    }

    private void initOreColors() {
        ores.put(Blocks.COAL_ORE, new Color(0, 0, 0).getRGB());
        ores.put(Blocks.IRON_ORE, new Color(200, 200, 200).getRGB());
        ores.put(Blocks.GOLD_ORE, new Color(255, 215, 0).getRGB());
        ores.put(Blocks.DIAMOND_ORE, new Color(0, 191, 255).getRGB());
        ores.put(Blocks.EMERALD_ORE, new Color(0, 255, 0).getRGB());
        ores.put(Blocks.REDSTONE_ORE, new Color(255, 0, 0).getRGB());
        ores.put(Blocks.LAPIS_ORE, new Color(0, 0, 255).getRGB());
        ores.put(Blocks.ANCIENT_DEBRIS, new Color(68, 33, 18).getRGB());
        ores.put(Blocks.NETHER_QUARTZ_ORE, new Color(255, 255, 255).getRGB());
    }

    private void initBlockMappings() {
        blockToNameMap.put(Blocks.COAL_ORE, "Уголь");
        blockToNameMap.put(Blocks.IRON_ORE, "Железо");
        blockToNameMap.put(Blocks.GOLD_ORE, "Золото");
        blockToNameMap.put(Blocks.DIAMOND_ORE, "Алмазы");
        blockToNameMap.put(Blocks.EMERALD_ORE, "Изумруды");
        blockToNameMap.put(Blocks.REDSTONE_ORE, "Редстоун");
        blockToNameMap.put(Blocks.LAPIS_ORE, "Лазурит");
        blockToNameMap.put(Blocks.ANCIENT_DEBRIS, "Обломки");
        blockToNameMap.put(Blocks.NETHER_QUARTZ_ORE, "Кварц");
    }

    [USER=1474073]@Subscribe[/USER]
    private void onRender(WorldEvent e) {
        ClientWorld world = mc.world;
        if (world == null) return;

        int radiusValue = radius.get("").intValue();
        int step = density.get("").intValue();
        BlockPos playerPos = mc.player.getPosition();

        int minX = playerPos.getX() - radiusValue;
        int maxX = playerPos.getX() + radiusValue;
        int minZ = playerPos.getZ() - radiusValue;
        int maxZ = playerPos.getZ() + radiusValue;
        int minY = Math.max(0, playerPos.getY() - radiusValue);
        int maxY = Math.min(world.getHeight(), playerPos.getY() + radiusValue);

        double radiusSq = radiusValue * radiusValue;

        for (int x = minX; x <= maxX; x += step) {
            for (int z = minZ; z <= maxZ; z += step) {
                double distX = x - playerPos.getX();
                double distZ = z - playerPos.getZ();
                double distSq = distX * distX + distZ * distZ;

                if (distSq > radiusSq) continue;

                for (int y = minY; y <= maxY; y++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    Block block = world.getBlockState(pos).getBlock();

                    if (shouldRenderBlock(block)) {
                        double distY = y - playerPos.getY();
                        if (distX * distX + distY * distY + distZ * distZ > radiusSq) continue;

                        RenderUtils.drawBlockBox(pos, ores.get(block));
                    }
                }
            }
        }
    }

    private boolean shouldRenderBlock(Block block) {
        if (!ores.containsKey(block)) return false;

        String settingName = blockToNameMap.get(block);
        if (settingName == null) return false;

        for (BooleanSetting setting : oreSettings) {
            if (setting.getName().equals(settingName)) {
                Boolean value = setting.get("");
                return value != null && value;
            }
        }
        return false;
    }
}

Посмотреть вложение 307821
Бляяяя почему это одобряют а темы с тандер хаком где пару обходов и автодуэльки нет модерация ((((
 
имба для тех кому лень качать рп
 
увидел тему https://yougame.biz/threads/328582/ (noad) и решил переделать,очень сильно хавало производительность,потому что сам xray перебирал около 10 миллионов блоков,я добавил настройки(теперь можно выбирать какие руды будут подсвечены),изменение радиуса и плотности,ss ниже,не бейте палками если увидите говнокод,его было много в той теме.
выфвфвыф:
Expand Collapse Copy
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
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.functions.settings.impl.ModeListSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import net.optifine.render.RenderUtils;

import java.awt.*;
import java.util.*;
import java.util.List;

@FunctionRegister(name = "Xray", type = Category.Render)
public class Xray extends Function {

    private final SliderSetting radius = new SliderSetting("Радиус", 32f, 16f, 100f, 1f);
    private final SliderSetting density = new SliderSetting("Плотность", 1f, 1f, 4f, 1f);
    private final List<BooleanSetting> oreSettings = Arrays.asList(
            new BooleanSetting("Уголь", true),
            new BooleanSetting("Железо", true),
            new BooleanSetting("Золото", false),
            new BooleanSetting("Алмазы", false),
            new BooleanSetting("Изумруды", false),
            new BooleanSetting("Редстоун", true),
            new BooleanSetting("Лазурит", true),
            new BooleanSetting("Обломки", false),
            new BooleanSetting("Кварц", false)
    );
    final ModeListSetting orts = new ModeListSetting("Руды", oreSettings.toArray(new BooleanSetting[0]));

    private final Map<Block, Integer> ores = new HashMap<>();
    private final Map<Block, String> blockToNameMap = new HashMap<>();

    public Xray() {
        addSettings(orts, radius, density);
        initOreColors();
        initBlockMappings();
    }

    private void initOreColors() {
        ores.put(Blocks.COAL_ORE, new Color(0, 0, 0).getRGB());
        ores.put(Blocks.IRON_ORE, new Color(200, 200, 200).getRGB());
        ores.put(Blocks.GOLD_ORE, new Color(255, 215, 0).getRGB());
        ores.put(Blocks.DIAMOND_ORE, new Color(0, 191, 255).getRGB());
        ores.put(Blocks.EMERALD_ORE, new Color(0, 255, 0).getRGB());
        ores.put(Blocks.REDSTONE_ORE, new Color(255, 0, 0).getRGB());
        ores.put(Blocks.LAPIS_ORE, new Color(0, 0, 255).getRGB());
        ores.put(Blocks.ANCIENT_DEBRIS, new Color(68, 33, 18).getRGB());
        ores.put(Blocks.NETHER_QUARTZ_ORE, new Color(255, 255, 255).getRGB());
    }

    private void initBlockMappings() {
        blockToNameMap.put(Blocks.COAL_ORE, "Уголь");
        blockToNameMap.put(Blocks.IRON_ORE, "Железо");
        blockToNameMap.put(Blocks.GOLD_ORE, "Золото");
        blockToNameMap.put(Blocks.DIAMOND_ORE, "Алмазы");
        blockToNameMap.put(Blocks.EMERALD_ORE, "Изумруды");
        blockToNameMap.put(Blocks.REDSTONE_ORE, "Редстоун");
        blockToNameMap.put(Blocks.LAPIS_ORE, "Лазурит");
        blockToNameMap.put(Blocks.ANCIENT_DEBRIS, "Обломки");
        blockToNameMap.put(Blocks.NETHER_QUARTZ_ORE, "Кварц");
    }

    [USER=1474073]@Subscribe[/USER]
    private void onRender(WorldEvent e) {
        ClientWorld world = mc.world;
        if (world == null) return;

        int radiusValue = radius.get("").intValue();
        int step = density.get("").intValue();
        BlockPos playerPos = mc.player.getPosition();

        int minX = playerPos.getX() - radiusValue;
        int maxX = playerPos.getX() + radiusValue;
        int minZ = playerPos.getZ() - radiusValue;
        int maxZ = playerPos.getZ() + radiusValue;
        int minY = Math.max(0, playerPos.getY() - radiusValue);
        int maxY = Math.min(world.getHeight(), playerPos.getY() + radiusValue);

        double radiusSq = radiusValue * radiusValue;

        for (int x = minX; x <= maxX; x += step) {
            for (int z = minZ; z <= maxZ; z += step) {
                double distX = x - playerPos.getX();
                double distZ = z - playerPos.getZ();
                double distSq = distX * distX + distZ * distZ;

                if (distSq > radiusSq) continue;

                for (int y = minY; y <= maxY; y++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    Block block = world.getBlockState(pos).getBlock();

                    if (shouldRenderBlock(block)) {
                        double distY = y - playerPos.getY();
                        if (distX * distX + distY * distY + distZ * distZ > radiusSq) continue;

                        RenderUtils.drawBlockBox(pos, ores.get(block));
                    }
                }
            }
        }
    }

    private boolean shouldRenderBlock(Block block) {
        if (!ores.containsKey(block)) return false;

        String settingName = blockToNameMap.get(block);
        if (settingName == null) return false;

        for (BooleanSetting setting : oreSettings) {
            if (setting.getName().equals(settingName)) {
                Boolean value = setting.get("");
                return value != null && value;
            }
        }
        return false;
    }
}

Посмотреть вложение 307821
И смысл от этого? BlockEsp для чего придумали?
 
/del пиздец...
 
/del надо искать блоки явно не каждый тик РЕНДЕРА БЛЯТЬ и в отдельном потоке и ограничить по времени ( выполнять поиск каждую секунду например)/или по event по типу EventChunkAdd или EventUpdateBlockState
 
/del надо искать блоки явно не каждый тик РЕНДЕРА БЛЯТЬ и в отдельном потоке и ограничить по времени ( выполнять поиск каждую секунду например)/или по event по типу EventChunkAdd или EventUpdateBlockState
ты описание читал? я лишь кинул улучшение той темы,весь говнокод с нее
 
ты описание читал? я лишь кинул улучшение той темы,весь говнокод с нее
Ну а чел рассказал тебе о проблемах, и как это можно улучшить ещё сильнее
(Да и shouldRenderBlock тоже написан всрато что пиздец, можно объекты по Identity сравнивать а не стринги по equals в стд коллекциях)
 
увидел тему https://yougame.biz/threads/328582/ (noad) и решил переделать,очень сильно хавало производительность,потому что сам xray перебирал около 10 миллионов блоков,я добавил настройки(теперь можно выбирать какие руды будут подсвечены),изменение радиуса и плотности,ss ниже,не бейте палками если увидите говнокод,его было много в той теме.
выфвфвыф:
Expand Collapse Copy
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
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.functions.settings.impl.ModeListSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import net.optifine.render.RenderUtils;

import java.awt.*;
import java.util.*;
import java.util.List;

@FunctionRegister(name = "Xray", type = Category.Render)
public class Xray extends Function {

    private final SliderSetting radius = new SliderSetting("Радиус", 32f, 16f, 100f, 1f);
    private final SliderSetting density = new SliderSetting("Плотность", 1f, 1f, 4f, 1f);
    private final List<BooleanSetting> oreSettings = Arrays.asList(
            new BooleanSetting("Уголь", true),
            new BooleanSetting("Железо", true),
            new BooleanSetting("Золото", false),
            new BooleanSetting("Алмазы", false),
            new BooleanSetting("Изумруды", false),
            new BooleanSetting("Редстоун", true),
            new BooleanSetting("Лазурит", true),
            new BooleanSetting("Обломки", false),
            new BooleanSetting("Кварц", false)
    );
    final ModeListSetting orts = new ModeListSetting("Руды", oreSettings.toArray(new BooleanSetting[0]));

    private final Map<Block, Integer> ores = new HashMap<>();
    private final Map<Block, String> blockToNameMap = new HashMap<>();

    public Xray() {
        addSettings(orts, radius, density);
        initOreColors();
        initBlockMappings();
    }

    private void initOreColors() {
        ores.put(Blocks.COAL_ORE, new Color(0, 0, 0).getRGB());
        ores.put(Blocks.IRON_ORE, new Color(200, 200, 200).getRGB());
        ores.put(Blocks.GOLD_ORE, new Color(255, 215, 0).getRGB());
        ores.put(Blocks.DIAMOND_ORE, new Color(0, 191, 255).getRGB());
        ores.put(Blocks.EMERALD_ORE, new Color(0, 255, 0).getRGB());
        ores.put(Blocks.REDSTONE_ORE, new Color(255, 0, 0).getRGB());
        ores.put(Blocks.LAPIS_ORE, new Color(0, 0, 255).getRGB());
        ores.put(Blocks.ANCIENT_DEBRIS, new Color(68, 33, 18).getRGB());
        ores.put(Blocks.NETHER_QUARTZ_ORE, new Color(255, 255, 255).getRGB());
    }

    private void initBlockMappings() {
        blockToNameMap.put(Blocks.COAL_ORE, "Уголь");
        blockToNameMap.put(Blocks.IRON_ORE, "Железо");
        blockToNameMap.put(Blocks.GOLD_ORE, "Золото");
        blockToNameMap.put(Blocks.DIAMOND_ORE, "Алмазы");
        blockToNameMap.put(Blocks.EMERALD_ORE, "Изумруды");
        blockToNameMap.put(Blocks.REDSTONE_ORE, "Редстоун");
        blockToNameMap.put(Blocks.LAPIS_ORE, "Лазурит");
        blockToNameMap.put(Blocks.ANCIENT_DEBRIS, "Обломки");
        blockToNameMap.put(Blocks.NETHER_QUARTZ_ORE, "Кварц");
    }

    [USER=1474073]@Subscribe[/USER]
    private void onRender(WorldEvent e) {
        ClientWorld world = mc.world;
        if (world == null) return;

        int radiusValue = radius.get("").intValue();
        int step = density.get("").intValue();
        BlockPos playerPos = mc.player.getPosition();

        int minX = playerPos.getX() - radiusValue;
        int maxX = playerPos.getX() + radiusValue;
        int minZ = playerPos.getZ() - radiusValue;
        int maxZ = playerPos.getZ() + radiusValue;
        int minY = Math.max(0, playerPos.getY() - radiusValue);
        int maxY = Math.min(world.getHeight(), playerPos.getY() + radiusValue);

        double radiusSq = radiusValue * radiusValue;

        for (int x = minX; x <= maxX; x += step) {
            for (int z = minZ; z <= maxZ; z += step) {
                double distX = x - playerPos.getX();
                double distZ = z - playerPos.getZ();
                double distSq = distX * distX + distZ * distZ;

                if (distSq > radiusSq) continue;

                for (int y = minY; y <= maxY; y++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    Block block = world.getBlockState(pos).getBlock();

                    if (shouldRenderBlock(block)) {
                        double distY = y - playerPos.getY();
                        if (distX * distX + distY * distY + distZ * distZ > radiusSq) continue;

                        RenderUtils.drawBlockBox(pos, ores.get(block));
                    }
                }
            }
        }
    }

    private boolean shouldRenderBlock(Block block) {
        if (!ores.containsKey(block)) return false;

        String settingName = blockToNameMap.get(block);
        if (settingName == null) return false;

        for (BooleanSetting setting : oreSettings) {
            if (setting.getName().equals(settingName)) {
                Boolean value = setting.get("");
                return value != null && value;
            }
        }
        return false;
    }
}

Посмотреть вложение 307821
можно просто было сделать через евент рендер блока и это было бы намного оптимизированнее
 
увидел тему https://yougame.biz/threads/328582/ (noad) и решил переделать,очень сильно хавало производительность,потому что сам xray перебирал около 10 миллионов блоков,я добавил настройки(теперь можно выбирать какие руды будут подсвечены),изменение радиуса и плотности,ss ниже,не бейте палками если увидите говнокод,его было много в той теме.
выфвфвыф:
Expand Collapse Copy
package im.expensive.functions.impl.render;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
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.functions.settings.impl.ModeListSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import net.optifine.render.RenderUtils;

import java.awt.*;
import java.util.*;
import java.util.List;

@FunctionRegister(name = "Xray", type = Category.Render)
public class Xray extends Function {

    private final SliderSetting radius = new SliderSetting("Радиус", 32f, 16f, 100f, 1f);
    private final SliderSetting density = new SliderSetting("Плотность", 1f, 1f, 4f, 1f);
    private final List<BooleanSetting> oreSettings = Arrays.asList(
            new BooleanSetting("Уголь", true),
            new BooleanSetting("Железо", true),
            new BooleanSetting("Золото", false),
            new BooleanSetting("Алмазы", false),
            new BooleanSetting("Изумруды", false),
            new BooleanSetting("Редстоун", true),
            new BooleanSetting("Лазурит", true),
            new BooleanSetting("Обломки", false),
            new BooleanSetting("Кварц", false)
    );
    final ModeListSetting orts = new ModeListSetting("Руды", oreSettings.toArray(new BooleanSetting[0]));

    private final Map<Block, Integer> ores = new HashMap<>();
    private final Map<Block, String> blockToNameMap = new HashMap<>();

    public Xray() {
        addSettings(orts, radius, density);
        initOreColors();
        initBlockMappings();
    }

    private void initOreColors() {
        ores.put(Blocks.COAL_ORE, new Color(0, 0, 0).getRGB());
        ores.put(Blocks.IRON_ORE, new Color(200, 200, 200).getRGB());
        ores.put(Blocks.GOLD_ORE, new Color(255, 215, 0).getRGB());
        ores.put(Blocks.DIAMOND_ORE, new Color(0, 191, 255).getRGB());
        ores.put(Blocks.EMERALD_ORE, new Color(0, 255, 0).getRGB());
        ores.put(Blocks.REDSTONE_ORE, new Color(255, 0, 0).getRGB());
        ores.put(Blocks.LAPIS_ORE, new Color(0, 0, 255).getRGB());
        ores.put(Blocks.ANCIENT_DEBRIS, new Color(68, 33, 18).getRGB());
        ores.put(Blocks.NETHER_QUARTZ_ORE, new Color(255, 255, 255).getRGB());
    }

    private void initBlockMappings() {
        blockToNameMap.put(Blocks.COAL_ORE, "Уголь");
        blockToNameMap.put(Blocks.IRON_ORE, "Железо");
        blockToNameMap.put(Blocks.GOLD_ORE, "Золото");
        blockToNameMap.put(Blocks.DIAMOND_ORE, "Алмазы");
        blockToNameMap.put(Blocks.EMERALD_ORE, "Изумруды");
        blockToNameMap.put(Blocks.REDSTONE_ORE, "Редстоун");
        blockToNameMap.put(Blocks.LAPIS_ORE, "Лазурит");
        blockToNameMap.put(Blocks.ANCIENT_DEBRIS, "Обломки");
        blockToNameMap.put(Blocks.NETHER_QUARTZ_ORE, "Кварц");
    }

    [USER=1474073]@Subscribe[/USER]
    private void onRender(WorldEvent e) {
        ClientWorld world = mc.world;
        if (world == null) return;

        int radiusValue = radius.get("").intValue();
        int step = density.get("").intValue();
        BlockPos playerPos = mc.player.getPosition();

        int minX = playerPos.getX() - radiusValue;
        int maxX = playerPos.getX() + radiusValue;
        int minZ = playerPos.getZ() - radiusValue;
        int maxZ = playerPos.getZ() + radiusValue;
        int minY = Math.max(0, playerPos.getY() - radiusValue);
        int maxY = Math.min(world.getHeight(), playerPos.getY() + radiusValue);

        double radiusSq = radiusValue * radiusValue;

        for (int x = minX; x <= maxX; x += step) {
            for (int z = minZ; z <= maxZ; z += step) {
                double distX = x - playerPos.getX();
                double distZ = z - playerPos.getZ();
                double distSq = distX * distX + distZ * distZ;

                if (distSq > radiusSq) continue;

                for (int y = minY; y <= maxY; y++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    Block block = world.getBlockState(pos).getBlock();

                    if (shouldRenderBlock(block)) {
                        double distY = y - playerPos.getY();
                        if (distX * distX + distY * distY + distZ * distZ > radiusSq) continue;

                        RenderUtils.drawBlockBox(pos, ores.get(block));
                    }
                }
            }
        }
    }

    private boolean shouldRenderBlock(Block block) {
        if (!ores.containsKey(block)) return false;

        String settingName = blockToNameMap.get(block);
        if (settingName == null) return false;

        for (BooleanSetting setting : oreSettings) {
            if (setting.getName().equals(settingName)) {
                Boolean value = setting.get("");
                return value != null && value;
            }
        }
        return false;
    }
}

Посмотреть вложение 307821
@Subscribe выдает ошибку кто знает помогите плис
 

Похожие темы

Назад
Сверху Снизу