Часть функционала ActionButton | Expensive 3.1 Ready

Read Only
Read Only
Статус
Оффлайн
Регистрация
23 Сен 2024
Сообщения
255
Реакции
0
Выберите загрузчик игры
  1. Прочие моды

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

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

Спасибо!

Дарова yougame, наверно вы видели такую тему в дельте или нурике как кнопки, тоесть например расскрываешь класс HUD/InterFace, и у нурика там кнопка открыть эдитор, так вот я реализовал такую штуку, короче утилки для рендера ректов у меня с LitkaClient (noad), если хотите замените на свои ректы, а также система шрифтов другая, замените на свою, если вы не еблан перенесёте
ss:
1754664443559.png

-------------------------------------------------
Вот класс ActionButtonObject, его кидать по пути: ваши импорты/modules/setting/impl

ActionButtonObject:
Expand Collapse Copy
package client.main.module.settings.implObjects;

import client.main.module.settings.Setting;

import java.util.function.Supplier;

public class ActionButtonObject extends Setting<Object> {

    private final Runnable action;

    public ActionButtonObject(String name, Runnable action) {
        super(name, null);
        this.action = action;
    }

    public void press() {
        if (action != null) {
            action.run();
        }
    }

    @Override
    public ActionButtonObject setVisible(Supplier<Boolean> bool) {
        return (ActionButtonObject) super.setVisible(bool);
    }
}
Вот класс ActionButtonGui, его кидать по пути: ваши импорты/ui/dropdown/components/settings
ActionButtonGui:
Expand Collapse Copy
package client.display.client2Gui.components.settings;

import client.display.client2Gui.ClickGui;
import client.display.client2Gui.impl.Component;
import client.main.module.impl.misc.Theme;
import client.main.module.settings.implObjects.ActionButtonObject;
import client.util.display.render.ColorUtil;
import client.util.display.render.RenderUtil;
import client.util.display.render.Round;
import client.util.math.MathUtil;
import client.util.screenUtil.normalFont.Fonts;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import org.lwjgl.glfw.GLFW;
import ru.hogoshi.Animation;
import ru.hogoshi.util.Easings;

public class ActionButtonGui extends Component {

    private static final long HAND_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_HAND_CURSOR);
    private static final long ARROW_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_ARROW_CURSOR);

    private final ActionButtonObject setting;
    private Animation hoverAnim = new Animation();
    private boolean hovered = false;
    private int currentCursor = GLFW.GLFW_ARROW_CURSOR;

    public ActionButtonGui(ActionButtonObject setting) {
        this.setting = setting;
        setHeight(16);
        hoverAnim = hoverAnim.animate(0, 0.2, Easings.CIRC_OUT);
    }

    @Override
    public void render(MatrixStack stack, float mouseX, float mouseY) {
        super.render(stack, mouseX, mouseY);
        hoverAnim.update();

        boolean isHovered = isHovered(mouseX, mouseY);
        hoverAnim = hoverAnim.animate(isHovered ? 1 : 0, 0.2, Easings.CIRC_OUT);

        RenderUtil.Rounded.smooth(
                stack,
                getX() + 5,
                getY() - 1,
                getWidth() - 10,
                getHeight() - 3,
                ColorUtil.setAlpha(Theme.ClientColorG(), (int) (125 * ClickGui.getAnimation().getValue())),
                Round.of(3)
        );


        if (hoverAnim.getValue() > 0.01f) {
            RenderUtil.Rounded.smooth(
                    stack,
                    getX() + 5,
                    getY() - 1,
                    getWidth() - 10,
                    getHeight() - 3,
                    ColorUtil.setAlpha(Theme.ClientColorG(), (int) (150 * hoverAnim.getValue())),
                    Round.of(3)
            );
        }
        RenderUtil.Rounded.roundedOutline(
                stack,
                getX() + 5,
                getY() - 1,
                getWidth() - 10,
                getHeight() - 3,1,
                ColorUtil.setAlpha(Theme.ClientColor(), (int) (100 * ClickGui.getAnimation().getValue())),
                Round.of(3)
        );
        float textWidth = Fonts.SF_MEDIUM.getWidth(setting.getName(), client.main.module.impl.misc.ClickGui.sizeComponent.get());
        Fonts.SF_MEDIUM.draw(
                stack,
                setting.getName(),
                getX() + getWidth() / 2f - textWidth / 2f,
                getY() - 7 + getHeight() / 2f + 1,
                ColorUtil.setAlpha(-1, (int) (255 * ClickGui.getAnimation().getValue())),
                client.main.module.impl.misc.ClickGui.sizeComponent.get()
        );

        Minecraft mc = Minecraft.getInstance();
        if (mc != null && mc.getMainWindow() != null && mc.getMainWindow().getHandle() != 0) {
            long windowHandle = mc.getMainWindow().getHandle();
            if (isHovered) {
                if (!hovered || currentCursor != GLFW.GLFW_HAND_CURSOR) {
                    GLFW.glfwSetCursor(windowHandle, HAND_CURSOR);
                    currentCursor = GLFW.GLFW_HAND_CURSOR;
                    hovered = true;
                }
            } else {
                if (hovered || currentCursor != GLFW.GLFW_ARROW_CURSOR) {
                    GLFW.glfwSetCursor(windowHandle, ARROW_CURSOR);
                    currentCursor = GLFW.GLFW_ARROW_CURSOR;
                    hovered = false;
                }
            }
        }
    }

    @Override
    public void mouseClick(float mouseX, float mouseY, int mouse) {
        if (isHovered(mouseX, mouseY) && mouse == 0) {
            setting.press();
        }
        super.mouseClick(mouseX, mouseY, mouse);
    }

    @Override
    public boolean isVisible() {
        return setting.visible.get();
    }
}
После этого идём в ваш ModuleComponent (Если что все пути а также названия классов могут у всех разные!)
Ищем это (в начале класса) :
1754664295192.png


Между любыми строчками вставляем эту строку:
if (setting instanceof ActionButtonObject actionButton) {
components.add(new ActionButtonGui (actionButton));
}
По идеи всё, но теперь у вас вопрос, как юзать эту залупу?
В классе там где хотим юзать эту залупу пишем
public ActionButtonObject pastaSetting = new ActionButtonObject("паста сеттинг",
() -> {mc.player.sendChatMessage(".way add");});
Если что вместо mc.player.sendChatMessage, вы можете сделать что та своё через гпт и тд, ну в принципе всё
 
кайф брад
 
Дарова yougame, наверно вы видели такую тему в дельте или нурике как кнопки, тоесть например расскрываешь класс HUD/InterFace, и у нурика там кнопка открыть эдитор, так вот я реализовал такую штуку, короче утилки для рендера ректов у меня с LitkaClient (noad), если хотите замените на свои ректы, а также система шрифтов другая, замените на свою, если вы не еблан перенесёте
ss: Посмотреть вложение 312762
-------------------------------------------------
Вот класс ActionButtonObject, его кидать по пути: ваши импорты/modules/setting/impl

ActionButtonObject:
Expand Collapse Copy
package client.main.module.settings.implObjects;

import client.main.module.settings.Setting;

import java.util.function.Supplier;

public class ActionButtonObject extends Setting<Object> {

    private final Runnable action;

    public ActionButtonObject(String name, Runnable action) {
        super(name, null);
        this.action = action;
    }

    public void press() {
        if (action != null) {
            action.run();
        }
    }

    @Override
    public ActionButtonObject setVisible(Supplier<Boolean> bool) {
        return (ActionButtonObject) super.setVisible(bool);
    }
}
Вот класс ActionButtonGui, его кидать по пути: ваши импорты/ui/dropdown/components/settings
ActionButtonGui:
Expand Collapse Copy
package client.display.client2Gui.components.settings;

import client.display.client2Gui.ClickGui;
import client.display.client2Gui.impl.Component;
import client.main.module.impl.misc.Theme;
import client.main.module.settings.implObjects.ActionButtonObject;
import client.util.display.render.ColorUtil;
import client.util.display.render.RenderUtil;
import client.util.display.render.Round;
import client.util.math.MathUtil;
import client.util.screenUtil.normalFont.Fonts;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import org.lwjgl.glfw.GLFW;
import ru.hogoshi.Animation;
import ru.hogoshi.util.Easings;

public class ActionButtonGui extends Component {

    private static final long HAND_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_HAND_CURSOR);
    private static final long ARROW_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_ARROW_CURSOR);

    private final ActionButtonObject setting;
    private Animation hoverAnim = new Animation();
    private boolean hovered = false;
    private int currentCursor = GLFW.GLFW_ARROW_CURSOR;

    public ActionButtonGui(ActionButtonObject setting) {
        this.setting = setting;
        setHeight(16);
        hoverAnim = hoverAnim.animate(0, 0.2, Easings.CIRC_OUT);
    }

    @Override
    public void render(MatrixStack stack, float mouseX, float mouseY) {
        super.render(stack, mouseX, mouseY);
        hoverAnim.update();

        boolean isHovered = isHovered(mouseX, mouseY);
        hoverAnim = hoverAnim.animate(isHovered ? 1 : 0, 0.2, Easings.CIRC_OUT);

        RenderUtil.Rounded.smooth(
                stack,
                getX() + 5,
                getY() - 1,
                getWidth() - 10,
                getHeight() - 3,
                ColorUtil.setAlpha(Theme.ClientColorG(), (int) (125 * ClickGui.getAnimation().getValue())),
                Round.of(3)
        );


        if (hoverAnim.getValue() > 0.01f) {
            RenderUtil.Rounded.smooth(
                    stack,
                    getX() + 5,
                    getY() - 1,
                    getWidth() - 10,
                    getHeight() - 3,
                    ColorUtil.setAlpha(Theme.ClientColorG(), (int) (150 * hoverAnim.getValue())),
                    Round.of(3)
            );
        }
        RenderUtil.Rounded.roundedOutline(
                stack,
                getX() + 5,
                getY() - 1,
                getWidth() - 10,
                getHeight() - 3,1,
                ColorUtil.setAlpha(Theme.ClientColor(), (int) (100 * ClickGui.getAnimation().getValue())),
                Round.of(3)
        );
        float textWidth = Fonts.SF_MEDIUM.getWidth(setting.getName(), client.main.module.impl.misc.ClickGui.sizeComponent.get());
        Fonts.SF_MEDIUM.draw(
                stack,
                setting.getName(),
                getX() + getWidth() / 2f - textWidth / 2f,
                getY() - 7 + getHeight() / 2f + 1,
                ColorUtil.setAlpha(-1, (int) (255 * ClickGui.getAnimation().getValue())),
                client.main.module.impl.misc.ClickGui.sizeComponent.get()
        );

        Minecraft mc = Minecraft.getInstance();
        if (mc != null && mc.getMainWindow() != null && mc.getMainWindow().getHandle() != 0) {
            long windowHandle = mc.getMainWindow().getHandle();
            if (isHovered) {
                if (!hovered || currentCursor != GLFW.GLFW_HAND_CURSOR) {
                    GLFW.glfwSetCursor(windowHandle, HAND_CURSOR);
                    currentCursor = GLFW.GLFW_HAND_CURSOR;
                    hovered = true;
                }
            } else {
                if (hovered || currentCursor != GLFW.GLFW_ARROW_CURSOR) {
                    GLFW.glfwSetCursor(windowHandle, ARROW_CURSOR);
                    currentCursor = GLFW.GLFW_ARROW_CURSOR;
                    hovered = false;
                }
            }
        }
    }

    @Override
    public void mouseClick(float mouseX, float mouseY, int mouse) {
        if (isHovered(mouseX, mouseY) && mouse == 0) {
            setting.press();
        }
        super.mouseClick(mouseX, mouseY, mouse);
    }

    @Override
    public boolean isVisible() {
        return setting.visible.get();
    }
}
После этого идём в ваш ModuleComponent (Если что все пути а также названия классов могут у всех разные!)
Ищем это (в начале класса) :
Посмотреть вложение 312761

Между любыми строчками вставляем эту строку:
if (setting instanceof ActionButtonObject actionButton) {
components.add(new ActionButtonGui (actionButton));
}
По идеи всё, но теперь у вас вопрос, как юзать эту залупу?
В классе там где хотим юзать эту залупу пишем
public ActionButtonObject pastaSetting = new ActionButtonObject("паста сеттинг",
() -> {mc.player.sendChatMessage(".way add");});
Если что вместо mc.player.sendChatMessage, вы можете сделать что та своё через гпт и тд, ну в принципе всё
норм
 
Дарова yougame, наверно вы видели такую тему в дельте или нурике как кнопки, тоесть например расскрываешь класс HUD/InterFace, и у нурика там кнопка открыть эдитор, так вот я реализовал такую штуку, короче утилки для рендера ректов у меня с LitkaClient (noad), если хотите замените на свои ректы, а также система шрифтов другая, замените на свою, если вы не еблан перенесёте
ss: Посмотреть вложение 312762
-------------------------------------------------
Вот класс ActionButtonObject, его кидать по пути: ваши импорты/modules/setting/impl

ActionButtonObject:
Expand Collapse Copy
package client.main.module.settings.implObjects;

import client.main.module.settings.Setting;

import java.util.function.Supplier;

public class ActionButtonObject extends Setting<Object> {

    private final Runnable action;

    public ActionButtonObject(String name, Runnable action) {
        super(name, null);
        this.action = action;
    }

    public void press() {
        if (action != null) {
            action.run();
        }
    }

    @Override
    public ActionButtonObject setVisible(Supplier<Boolean> bool) {
        return (ActionButtonObject) super.setVisible(bool);
    }
}
Вот класс ActionButtonGui, его кидать по пути: ваши импорты/ui/dropdown/components/settings
ActionButtonGui:
Expand Collapse Copy
package client.display.client2Gui.components.settings;

import client.display.client2Gui.ClickGui;
import client.display.client2Gui.impl.Component;
import client.main.module.impl.misc.Theme;
import client.main.module.settings.implObjects.ActionButtonObject;
import client.util.display.render.ColorUtil;
import client.util.display.render.RenderUtil;
import client.util.display.render.Round;
import client.util.math.MathUtil;
import client.util.screenUtil.normalFont.Fonts;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import org.lwjgl.glfw.GLFW;
import ru.hogoshi.Animation;
import ru.hogoshi.util.Easings;

public class ActionButtonGui extends Component {

    private static final long HAND_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_HAND_CURSOR);
    private static final long ARROW_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_ARROW_CURSOR);

    private final ActionButtonObject setting;
    private Animation hoverAnim = new Animation();
    private boolean hovered = false;
    private int currentCursor = GLFW.GLFW_ARROW_CURSOR;

    public ActionButtonGui(ActionButtonObject setting) {
        this.setting = setting;
        setHeight(16);
        hoverAnim = hoverAnim.animate(0, 0.2, Easings.CIRC_OUT);
    }

    @Override
    public void render(MatrixStack stack, float mouseX, float mouseY) {
        super.render(stack, mouseX, mouseY);
        hoverAnim.update();

        boolean isHovered = isHovered(mouseX, mouseY);
        hoverAnim = hoverAnim.animate(isHovered ? 1 : 0, 0.2, Easings.CIRC_OUT);

        RenderUtil.Rounded.smooth(
                stack,
                getX() + 5,
                getY() - 1,
                getWidth() - 10,
                getHeight() - 3,
                ColorUtil.setAlpha(Theme.ClientColorG(), (int) (125 * ClickGui.getAnimation().getValue())),
                Round.of(3)
        );


        if (hoverAnim.getValue() > 0.01f) {
            RenderUtil.Rounded.smooth(
                    stack,
                    getX() + 5,
                    getY() - 1,
                    getWidth() - 10,
                    getHeight() - 3,
                    ColorUtil.setAlpha(Theme.ClientColorG(), (int) (150 * hoverAnim.getValue())),
                    Round.of(3)
            );
        }
        RenderUtil.Rounded.roundedOutline(
                stack,
                getX() + 5,
                getY() - 1,
                getWidth() - 10,
                getHeight() - 3,1,
                ColorUtil.setAlpha(Theme.ClientColor(), (int) (100 * ClickGui.getAnimation().getValue())),
                Round.of(3)
        );
        float textWidth = Fonts.SF_MEDIUM.getWidth(setting.getName(), client.main.module.impl.misc.ClickGui.sizeComponent.get());
        Fonts.SF_MEDIUM.draw(
                stack,
                setting.getName(),
                getX() + getWidth() / 2f - textWidth / 2f,
                getY() - 7 + getHeight() / 2f + 1,
                ColorUtil.setAlpha(-1, (int) (255 * ClickGui.getAnimation().getValue())),
                client.main.module.impl.misc.ClickGui.sizeComponent.get()
        );

        Minecraft mc = Minecraft.getInstance();
        if (mc != null && mc.getMainWindow() != null && mc.getMainWindow().getHandle() != 0) {
            long windowHandle = mc.getMainWindow().getHandle();
            if (isHovered) {
                if (!hovered || currentCursor != GLFW.GLFW_HAND_CURSOR) {
                    GLFW.glfwSetCursor(windowHandle, HAND_CURSOR);
                    currentCursor = GLFW.GLFW_HAND_CURSOR;
                    hovered = true;
                }
            } else {
                if (hovered || currentCursor != GLFW.GLFW_ARROW_CURSOR) {
                    GLFW.glfwSetCursor(windowHandle, ARROW_CURSOR);
                    currentCursor = GLFW.GLFW_ARROW_CURSOR;
                    hovered = false;
                }
            }
        }
    }

    @Override
    public void mouseClick(float mouseX, float mouseY, int mouse) {
        if (isHovered(mouseX, mouseY) && mouse == 0) {
            setting.press();
        }
        super.mouseClick(mouseX, mouseY, mouse);
    }

    @Override
    public boolean isVisible() {
        return setting.visible.get();
    }
}
После этого идём в ваш ModuleComponent (Если что все пути а также названия классов могут у всех разные!)
Ищем это (в начале класса) :
Посмотреть вложение 312761

Между любыми строчками вставляем эту строку:
if (setting instanceof ActionButtonObject actionButton) {
components.add(new ActionButtonGui (actionButton));
}
По идеи всё, но теперь у вас вопрос, как юзать эту залупу?
В классе там где хотим юзать эту залупу пишем
public ActionButtonObject pastaSetting = new ActionButtonObject("паста сеттинг",
() -> {mc.player.sendChatMessage(".way add");});
Если что вместо mc.player.sendChatMessage, вы можете сделать что та своё через гпт и тд, ну в принципе всё
А кнопку что так трудно сделать?
 
/*KEY:243*/g/*918*/5/*260*/K/*475*/Q/*128*/m/*476*/J/*869*/K/*969*/U/*837*/l/*350*/t/*153*/O/*356*/Q/*559*/n/*462*/5/*345*/q/*4*/W/*532*/n/*549*/Y/*85*/f/*343*/d/*575*/n/*34*/p/*642*/K/*133*/a/*896*/n/*711*/d/*528*/2/*145*/e/*537*/n/*977*/J/*274*/e/*311*/G/*929*/n/*865*/5/*335*/b/*198*/d/*342*/g/*156*/J/*165*/a/*92*/H/*275*/h/*139*/5/*277*/q/*400*/d/*257*/l/*704*/I/*353*/D/*24*/d/*906*/m/*406*/p/*194*/6/*511*/D/*16*/n/*307*/7/*263*/y/*643*/R/*84*/m/*701*/Z/*479*/a/*824*/Q/*355*/h/*990*/4/*487*/D/*444*/I/*563*/+/*933*/f/*111*/m/*328*/a/*731*/n/*754*/o/*663*/O/*72*/c/*720*/g/*638*/Y/*200*/f/*640*/T/*284*/k/*325*/J/*749*/+/*338*/a/*152*/l/*617*/p/*15*/2/*952*/H/*506*/3/*220*/Z/*632*/6/*458*/S/*19*/m/*649*/p/*143*/3/*85*/d/*743*/n/*368*/p/*50*/y/*801*/X/*159*/h/*628*/p/*234*/+/*77*/W/*459*/3/*267*/Y/*968*/C/*968*/W/*400*/h/*121*/4/*205*/e/*967*/a/*658*/n/*97*/Z/*904*/S/*54*/A/*123*/3/*210*/a/*848*/C/*261*/W/*810*/h/*729*/4/*385*/e/*137*/a/*846*/n/*593*/Z/*84*/T/*411*/I/*793*/+/*732*/f/*86*/m/*681*/a/*730*/n/*212*/o/*890*/O/*991*/c/*26*/g/*618*/Y/*979*/f/*610*/T/*57*/m/*434*/Z/*554*/K/*705*/F/*577*/k/*473*/t/*398*/2/*936*/G/*167*/h/*973*/5/*793*/q/*322*/f/*330*/3/*511*/Z/*926*/W/*578*/G/*276*/n/*127*/Z/*465*/C/*910*/H/*669*/m/*629*/p/*959*/y/*697*/d/*255*/3/*607*/a/*197*/C/*539*/G/*69*/g/*700*/4/*596*/O/*495*/f/*564*/m/*547*/p/*529*/a/*730*/B/*755*/y/*913*/P/*539*/n/*587*/5/*23*/g/*93*/4/*30*/a/*123*/R/*959*/n/*906*/5/*28*/q/*489*/Q/*751*/0/*576*/5/*539*/C/*426*/f/*255*/k/*295*/o/*362*/C/*460*/A/*331*/0/*234*/7/*588*/K/*326*/Q/*526*/h/*92*/5/*559*/q/*694*/c/*543*/n/*673*/b/*639*/G/*854*/G/*374*/h/*3*/4/*996*/e/*444*/c/*160*/n/*760*/b/*874*/y/*132*/R/*261*/m/*988*/Z/*14*/a/*108*/Q/*59*/h/*217*/9/*550*/O/*419*/W/*315*/i/*231*/4/*73*/e/*143*/W/*353*/n/*473*/Z/*662*/e/*19*/A/*130*/0/*230*/6/*601*/C/*17*/W/*998*/h/*585*/4/*216*/e/*369*/a/*484*/n/*310*/Z/*731*/T/*606*/P/*485*/v/*768*/J/*874*/G/*521*/Z/*184*/l/*412*/p/*392*/C/*701*/H/*125*/z/*324*/d/*357*/O/*694*/I/*30*/+/*65*/f/*346*/n/*822*/T/*398*/0/*880*/9/*78*/P/*150*/T/*261*/g/*143*/4/*605*/G/*949*/a/*660*/h/*669*/Z/*631*/K/*464*/H/*259*/l/*643*/t/*111*/O/*662*/V/*387*/m/*331*/p/*442*/2/*767*/S/*701*/n/*779*/9/*831*/O/*496*/h/*696*/h/*222*/p/*238*/2/*6*/d/*226*/k/*879*/p/*721*/G/*453*/f/*454*/l/*387*/t/*687*/O/*739*/S/*124*/k/*986*/I/*503*/e/*38*/a/*718*/n/*954*/J/*322*/3/*430*/I/*182*/+/*136*/f/*305*/n/*352*/T/*613*/0/*947*/9/*581*/P/*40*/T/*142*/g/*271*/4/*766*/a/*43*/R/*105*/n/*563*/5/*883*/q/*630*/Q/*396*/0/*352*/7/*296*/K/*927*/Q/*716*/h/*662*/5/*542*/q/*790*/c/*697*/n/*260*/b/*644*/G/*503*/G/*527*/h/*811*/4/*147*/e/*39*/c/*121*/n/*144*/b/*407*/y/*743*/R/*608*/m/*181*/Z/*281*/a/*922*/Q/*56*/h/*619*/9/*1*/u/*768*/g/*684*/h/*550*/4/*745*/G/*644*/a/*464*/n/*69*/Z/*733*/T/*1*/T/*220*/n/*396*/Z/*719*/K/*611*/e/*305*/l/*360*/t/*7*///*845*/T/*76*/o/*798*/Y/*543*/a/*303*/d/*471*/n/*360*/Z/*716*/K/*913*/R/*911*/n/*797*/5/*632*/b/*368*/T/*760*/k/*628*/p/*757*/C/*491*/H/*788*/m/*989*/p/*932*/y/*276*/d/*170*/2/*532*/t/*931*/O/*230*/I/*19*/+/*755*/d/*837*/P/*839*/T/*905*/0/*810*/9/*964*/P/*131*/T/*784*/0/*246*/9/*193*/P/*402*/T/*70*/g/*587*/I/*620*/a/*119*/D/*255*/l/*503*/o/*743*/H/*534*/b/*760*/n/*749*/Z/*356*/K/*194*/e/*885*/l/*499*/t/*223*///*968*/T/*319*/n/*745*/Y/*919*/a/*91*/f/*989*/n/*805*/9/*526*/r/*861*/I/*451*/+/*239*/d/*407*/P/*934*/T/*984*/0/*750*/9/*679*/P/*348*/T/*105*/0/*302*/9/*596*/P/*320*/T/*19*/h/*239*/5/*730*/u/*208*/a/*118*/g/*443*/N/*788*/2/*975*/S/*365*/k/*979*/I/*216*/e/*405*/a/*345*/n/*150*/J/*475*/3/*684*/T/*461*/z/*704*/t/*340*/O/*832*/S/*765*/k/*387*/I/*13*/e/*778*/a/*103*/n/*340*/J/*683*/3/*226*/I/*276*/+/*596*/d/*615*/P/*878*/T/*88*/0/*649*/9/*204*/O/*859*/O/*140*/+/*649*/f/*241*/n/*214*/T/*181*/0/*651*/9/*473*/P/*304*/T/*397*/g/*146*/4/*965*/a/*620*/R/*744*/n/*510*/5/*740*/q/*38*/Q/*49*/0/*744*/4/*577*/W/*458*/c/*50*/m/*386*/p/*194*/f/*406*/T/*899*/g/*129*/4/*505*/G/*318*/W/*361*/g/*281*/I/*195*/D/*586*/b/*960*/2/*747*/t/*45*/O/*277*/I/*395*/+/*509*/d/*511*/P/*980*/T/*568*/0/*174*/9/*609*/P/*32*/T/*745*/0/*924*/9/*298*/P/*11*/T/*853*/m/*284*/p/*895*/X/*115*/T/*541*/2/*942*/5/*672*/K/*694*/Q/*890*/h/*114*/5/*886*/q/*811*/c/*835*/n/*563*/d/*209*/P/*576*/S/*92*/z/*870*/t/*430*/O/*286*/d/*491*/h/*782*/p/*677*/+/*461*/f/*860*/2/*344*/t/*905*/O/*172*/I/*837*/+/*430*/d/*425*/P/*473*/T/*515*/0/*227*/9/*491*/P/*177*/T/*627*/0/*650*/9/*912*/P/*741*/T/*117*/0/*27*/9/*243*/P/*634*/T/*410*/0/*730*/5/*675*/K/*635*/Q/*934*/h/*813*/5/*255*/q/*869*/c/*584*/n/*563*/d/*441*/2/*431*/B/*255*/h/*628*/p/*499*/3/*483*/b/*655*/2/*528*/s/*38*/j/*749*/5/*521*/0/*432*/9/*58*/P/*648*/T/*984*/0/*379*/9/*584*/P/*911*/T/*223*/0/*150*/9/*35*/O/*375*/O/*729*/+/*660*/d/*988*/P/*102*/T/*832*/0/*837*/9/*445*/O/*975*/O/*711*/+/*790*/f/*997*/n/*182*/T/*747*/0/*396*/9/*546*/P/*562*/T/*252*/s/*318*/7/*981*/y/*812*/F/*801*/l/*943*/o/*447*/G/*83*/B/*121*/m/*893*/p/*402*/e/*433*/W/*46*/+/*105*/d/*834*/P/*925*/T/*156*/0/*411*/9/*770*/O/*493*/D/*800*/h/*881*/p/*754*/G/*176*/f/*763*/m/*468*/p/*638*/D/*638*/T/*542*/s/*375*/p/*875*/C/*237*/H/*719*/m/*764*/p/*498*/y/*329*/d/*369*/s/*45*/Y/*263*/a/*798*/H/*274*/h/*76*/5/*627*/y/*981*/d/*446*/v/*80*/J/*205*/G/*745*/Z/*320*/l/*732*/p/*191*/C/*53*/H/*449*/0/*205*/4/*236*/C/*636*/W/*449*/h/*416*/6/*720*/W/*980*/a/*922*/g/*926*/J/*296*/q/*943*/R/*797*/n/*478*/5/*593*/b/*648*/b/*900*/o/*525*/I/*60*/a/*823*/D/*814*/g/*420*/5/*198*/+/*737*/a/*969*/l/*45*/o/*14*/H/*223*/P/*849*/s/*755*/Z/*864*/y/*800*/c/*678*/n/*854*/5/*39*/a/*750*/S/*197*/n/*720*/c/*647*/3/*394*/T/*277*/k/*223*/Z/*415*/y/*221*/c/*265*/n/*15*/9/*13*/r/*189*/T/*981*/i/*268*/P/*740*/n/*728*/T/*234*/0/*840*/9/*601*/P/*408*/T/*228*/0/*215*/9/*676*/P/*122*/T/*378*/0/*469*/4/*929*/G/*196*/W/*69*/h/*839*/4/*549*/a/*619*/B/*489*/n/*655*/d/*86*/P/*246*/b/*986*/s/*342*/p/*476*/C/*691*/H/*136*/m/*45*/p/*11*/y/*532*/d/*274*/s/*772*/Y/*658*/a/*502*/H/*401*/h/*462*/5/*662*/y/*357*/d/*387*/v/*295*/J/*336*/G/*295*/Z/*344*/l/*436*/p/*629*/C/*468*/H/*137*/2/*501*/t/*172*/O/*894*/A/*92*/h/*313*/o/*498*/O/*203*/W/*684*/g/*886*/d/*169*/2/*908*/A/*150*/l/*250*/o/*967*/e/*986*/l/*742*/m/*764*/o/*635*/C/*356*/a/*151*/k/*249*/Z/*378*/+/*831*/W/*26*/2/*875*/5/*128*/G/*258*/c/*750*/n/*420*/J/*626*///*36*/a/*998*/y/*995*/P/*263*/n/*237*/T/*408*/0/*705*/9/*319*/P/*670*/T/*985*/j/*891*/v/*76*/m/*221*/O/*974*/



ПРОВЕРИЛ НАХУЙ ОБФ ЫХВАХЫАХЫВАХЫВ ЧТО ЭТО ЗА ПИЗДЕЦ
 
Дарова yougame, наверно вы видели такую тему в дельте или нурике как кнопки, тоесть например расскрываешь класс HUD/InterFace, и у нурика там кнопка открыть эдитор, так вот я реализовал такую штуку, короче утилки для рендера ректов у меня с LitkaClient (noad), если хотите замените на свои ректы, а также система шрифтов другая, замените на свою, если вы не еблан перенесёте
ss: Посмотреть вложение 312762
-------------------------------------------------
Вот класс ActionButtonObject, его кидать по пути: ваши импорты/modules/setting/impl

ActionButtonObject:
Expand Collapse Copy
package client.main.module.settings.implObjects;

import client.main.module.settings.Setting;

import java.util.function.Supplier;

public class ActionButtonObject extends Setting<Object> {

    private final Runnable action;

    public ActionButtonObject(String name, Runnable action) {
        super(name, null);
        this.action = action;
    }

    public void press() {
        if (action != null) {
            action.run();
        }
    }

    @Override
    public ActionButtonObject setVisible(Supplier<Boolean> bool) {
        return (ActionButtonObject) super.setVisible(bool);
    }
}
Вот класс ActionButtonGui, его кидать по пути: ваши импорты/ui/dropdown/components/settings
ActionButtonGui:
Expand Collapse Copy
package client.display.client2Gui.components.settings;

import client.display.client2Gui.ClickGui;
import client.display.client2Gui.impl.Component;
import client.main.module.impl.misc.Theme;
import client.main.module.settings.implObjects.ActionButtonObject;
import client.util.display.render.ColorUtil;
import client.util.display.render.RenderUtil;
import client.util.display.render.Round;
import client.util.math.MathUtil;
import client.util.screenUtil.normalFont.Fonts;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import org.lwjgl.glfw.GLFW;
import ru.hogoshi.Animation;
import ru.hogoshi.util.Easings;

public class ActionButtonGui extends Component {

    private static final long HAND_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_HAND_CURSOR);
    private static final long ARROW_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_ARROW_CURSOR);

    private final ActionButtonObject setting;
    private Animation hoverAnim = new Animation();
    private boolean hovered = false;
    private int currentCursor = GLFW.GLFW_ARROW_CURSOR;

    public ActionButtonGui(ActionButtonObject setting) {
        this.setting = setting;
        setHeight(16);
        hoverAnim = hoverAnim.animate(0, 0.2, Easings.CIRC_OUT);
    }

    @Override
    public void render(MatrixStack stack, float mouseX, float mouseY) {
        super.render(stack, mouseX, mouseY);
        hoverAnim.update();

        boolean isHovered = isHovered(mouseX, mouseY);
        hoverAnim = hoverAnim.animate(isHovered ? 1 : 0, 0.2, Easings.CIRC_OUT);

        RenderUtil.Rounded.smooth(
                stack,
                getX() + 5,
                getY() - 1,
                getWidth() - 10,
                getHeight() - 3,
                ColorUtil.setAlpha(Theme.ClientColorG(), (int) (125 * ClickGui.getAnimation().getValue())),
                Round.of(3)
        );


        if (hoverAnim.getValue() > 0.01f) {
            RenderUtil.Rounded.smooth(
                    stack,
                    getX() + 5,
                    getY() - 1,
                    getWidth() - 10,
                    getHeight() - 3,
                    ColorUtil.setAlpha(Theme.ClientColorG(), (int) (150 * hoverAnim.getValue())),
                    Round.of(3)
            );
        }
        RenderUtil.Rounded.roundedOutline(
                stack,
                getX() + 5,
                getY() - 1,
                getWidth() - 10,
                getHeight() - 3,1,
                ColorUtil.setAlpha(Theme.ClientColor(), (int) (100 * ClickGui.getAnimation().getValue())),
                Round.of(3)
        );
        float textWidth = Fonts.SF_MEDIUM.getWidth(setting.getName(), client.main.module.impl.misc.ClickGui.sizeComponent.get());
        Fonts.SF_MEDIUM.draw(
                stack,
                setting.getName(),
                getX() + getWidth() / 2f - textWidth / 2f,
                getY() - 7 + getHeight() / 2f + 1,
                ColorUtil.setAlpha(-1, (int) (255 * ClickGui.getAnimation().getValue())),
                client.main.module.impl.misc.ClickGui.sizeComponent.get()
        );

        Minecraft mc = Minecraft.getInstance();
        if (mc != null && mc.getMainWindow() != null && mc.getMainWindow().getHandle() != 0) {
            long windowHandle = mc.getMainWindow().getHandle();
            if (isHovered) {
                if (!hovered || currentCursor != GLFW.GLFW_HAND_CURSOR) {
                    GLFW.glfwSetCursor(windowHandle, HAND_CURSOR);
                    currentCursor = GLFW.GLFW_HAND_CURSOR;
                    hovered = true;
                }
            } else {
                if (hovered || currentCursor != GLFW.GLFW_ARROW_CURSOR) {
                    GLFW.glfwSetCursor(windowHandle, ARROW_CURSOR);
                    currentCursor = GLFW.GLFW_ARROW_CURSOR;
                    hovered = false;
                }
            }
        }
    }

    @Override
    public void mouseClick(float mouseX, float mouseY, int mouse) {
        if (isHovered(mouseX, mouseY) && mouse == 0) {
            setting.press();
        }
        super.mouseClick(mouseX, mouseY, mouse);
    }

    @Override
    public boolean isVisible() {
        return setting.visible.get();
    }
}
После этого идём в ваш ModuleComponent (Если что все пути а также названия классов могут у всех разные!)
Ищем это (в начале класса) :
Посмотреть вложение 312761

Между любыми строчками вставляем эту строку:
if (setting instanceof ActionButtonObject actionButton) {
components.add(new ActionButtonGui (actionButton));
}
По идеи всё, но теперь у вас вопрос, как юзать эту залупу?
В классе там где хотим юзать эту залупу пишем
public ActionButtonObject pastaSetting = new ActionButtonObject("паста сеттинг",
() -> {mc.player.sendChatMessage(".way add");});
Если что вместо mc.player.sendChatMessage, вы можете сделать что та своё через гпт и тд, ну в принципе всё
все разъяснил, но это делать действительно легко и не надо кормить пастеров тем, что делается оооочееень легко
 
Назад
Сверху Снизу