Гайд Добавление тегов к модулям | Expensive 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
31 Дек 2023
Сообщения
7
Реакции
1
Сделано для пастеров которые это хотят добавить в свой Halal Client/Recode/Release

Сделано на основе этой темы Кликай

Короче:

1) Создаем в functions/api Новый класс FunctionGroup с этой хуетой:
FunctionGroup:
Expand Collapse Copy
package im.expensive.functions.api;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.awt.*;

@Getter
@AllArgsConstructor
public enum FunctionGroup {

    RW("RW", new Color(0xFFA600)),
    FT("FT", new Color(0xFF243D)),
    HW("HW", new Color(0x24E5FF)),
    PREMIUM("PREMIUM", new Color(0x002991)),
    NO("", new Color(0x0024E5FF, true));

    private final String name;
    private final Color color;



    public static Color getColorByGroupName(String groupName) {
        for (FunctionGroup group : values()) {
            if (group.getName().equals(groupName)) {
                return group.getColor();
            }
        }
        return Color.WHITE;
    }
}

2) Регаем в FunctionRegister


FunctionRegister:
Expand Collapse Copy
package im.expensive.functions.api;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(value = RetentionPolicy.RUNTIME)
public @interface FunctionRegister {
    String name();
    FunctionGroup group();
    int key() default 0;
    Category type();
}

3) Регаем в Function

Function:
Expand Collapse Copy
package im.expensive.functions.api;

import im.expensive.Expensive;
import im.expensive.functions.impl.misc.ClientSounds;
import im.expensive.functions.settings.Setting;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
import net.minecraft.util.text.TextFormatting;
import ru.hogoshi.Animation;
import ru.hogoshi.util.Easings;


import java.util.List;

@FieldDefaults(level = AccessLevel.PRIVATE)
@Getter
public abstract class Function implements IMinecraft {

    final String name;
    final Category category;
    final FunctionGroup group;
    boolean state;
    @Setter
    int bind;
    final List<Setting<?>> settings = new ObjectArrayList<>();

    final Animation animation = new Animation();

    public Function() {
        this.name = getClass().getAnnotation(FunctionRegister.class).name();
        this.category = getClass().getAnnotation(FunctionRegister.class).type();
        this.bind = getClass().getAnnotation(FunctionRegister.class).key();
        this.group = getClass().getAnnotation(FunctionRegister.class).group();
    }

    public Function(String name, FunctionGroup group) {
        this.name = name;
        this.category = Category.Combat;
        this.group = group;
    }

    public void addSettings(Setting<?>... settings) {
        this.settings.addAll(List.of(settings));
    }

    public void onEnable() {
        animation.animate(1, 0.25f, Easings.CIRC_OUT);
        Expensive.getInstance().getEventBus().register(this);
    }

    public void onDisable() {
        animation.animate(0, 0.25f, Easings.CIRC_OUT);
        Expensive.getInstance().getEventBus().unregister(this);
    }


    public final void toggle() {
        setState(!state, false);
    }

    public final void setState(boolean newState, boolean config) {
        if (state == newState) {
            return;
        }

        state = newState;

        try {
            if (state) {
                onEnable();
            } else {
                onDisable();
            }
            if (!config) {
                FunctionRegistry functionRegistry = Expensive.getInstance().getFunctionRegistry();
                ClientSounds clientSounds = functionRegistry.getClientSounds();

                if (clientSounds != null && clientSounds.isState()) {
                    String fileName = clientSounds.getFileName(state);
                    float volume = clientSounds.volume.get();
                    ClientUtil.playSound(fileName, volume, false);
                }
            }
        } catch (Exception e) {
            handleException(state ? "onEnable" : "onDisable", e);
        }

    }

    private void handleException(String methodName, Exception e) {
        if (mc.player != null) {
            print("[" + name + "] Произошла ошибка в методе " + TextFormatting.RED + methodName + TextFormatting.WHITE
                    + "() Предоставьте это сообщение разработчику: " + TextFormatting.GRAY + e.getMessage());
            e.printStackTrace();
        } else {
            System.out.println("[" + name + " Error" + methodName + "() Message: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
4) Пиздуем в ModuleComponent и в drawText хуярим это:

ModuleComponent:
Expand Collapse Copy
Fonts.sfMedium.drawText(stack, function.getGroup().getName(),
getX() + getWidth() - 6.5f - 6 - Fonts.sfMedium.getWidth(function.getGroup().getName(), 7.7f, 0),
getY() + 6,
FunctionGroup.getColorByGroupName(function.getGroup().getName()).getRGB(), 7.7f, 0);

В итоге мы получаем такое:
dwdwdwdw.png


Нужна будет помощь - пишите.
 
Последнее редактирование:
В чём отличие от оригинальной темы то?
 
Сделано для пастеров которые это хотят добавить в свой Halal Client/Recode/Release

Сделано на основе этой темы Кликай

Короче:

1) Создаем в functions/api Новый класс FunctionGroup с этой хуетой:
FunctionGroup:
Expand Collapse Copy
package im.expensive.functions.api;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.awt.*;

@Getter
@AllArgsConstructor
public enum FunctionGroup {

    RW("RW", new Color(0xFFA600)),
    FT("FT", new Color(0xFF243D)),
    HW("HW", new Color(0x24E5FF)),
    PREMIUM("PREMIUM", new Color(0x002991)),
    NO("", new Color(0x0024E5FF, true));

    private final String name;
    private final Color color;



    public static Color getColorByGroupName(String groupName) {
        for (FunctionGroup group : values()) {
            if (group.getName().equals(groupName)) {
                return group.getColor();
            }
        }
        return Color.WHITE;
    }
}

2) Регаем в FunctionRegister


FunctionRegister:
Expand Collapse Copy
package im.expensive.functions.api;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(value = RetentionPolicy.RUNTIME)
public @interface FunctionRegister {
    String name();
    FunctionGroup group();
    int key() default 0;
    Category type();
}

3) Регаем в Function

Function:
Expand Collapse Copy
package im.expensive.functions.api;

import im.expensive.Expensive;
import im.expensive.functions.impl.misc.ClientSounds;
import im.expensive.functions.settings.Setting;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
import net.minecraft.util.text.TextFormatting;
import ru.hogoshi.Animation;
import ru.hogoshi.util.Easings;


import java.util.List;

@FieldDefaults(level = AccessLevel.PRIVATE)
@Getter
public abstract class Function implements IMinecraft {

    final String name;
    final Category category;
    final FunctionGroup group;
    boolean state;
    @Setter
    int bind;
    final List<Setting<?>> settings = new ObjectArrayList<>();

    final Animation animation = new Animation();

    public Function() {
        this.name = getClass().getAnnotation(FunctionRegister.class).name();
        this.category = getClass().getAnnotation(FunctionRegister.class).type();
        this.bind = getClass().getAnnotation(FunctionRegister.class).key();
        this.group = getClass().getAnnotation(FunctionRegister.class).group();
    }

    public Function(String name, FunctionGroup group) {
        this.name = name;
        this.category = Category.Combat;
        this.group = group;
    }

    public void addSettings(Setting<?>... settings) {
        this.settings.addAll(List.of(settings));
    }

    public void onEnable() {
        animation.animate(1, 0.25f, Easings.CIRC_OUT);
        Expensive.getInstance().getEventBus().register(this);
    }

    public void onDisable() {
        animation.animate(0, 0.25f, Easings.CIRC_OUT);
        Expensive.getInstance().getEventBus().unregister(this);
    }


    public final void toggle() {
        setState(!state, false);
    }

    public final void setState(boolean newState, boolean config) {
        if (state == newState) {
            return;
        }

        state = newState;

        try {
            if (state) {
                onEnable();
            } else {
                onDisable();
            }
            if (!config) {
                FunctionRegistry functionRegistry = Expensive.getInstance().getFunctionRegistry();
                ClientSounds clientSounds = functionRegistry.getClientSounds();

                if (clientSounds != null && clientSounds.isState()) {
                    String fileName = clientSounds.getFileName(state);
                    float volume = clientSounds.volume.get();
                    ClientUtil.playSound(fileName, volume, false);
                }
            }
        } catch (Exception e) {
            handleException(state ? "onEnable" : "onDisable", e);
        }

    }

    private void handleException(String methodName, Exception e) {
        if (mc.player != null) {
            print("[" + name + "] Произошла ошибка в методе " + TextFormatting.RED + methodName + TextFormatting.WHITE
                    + "() Предоставьте это сообщение разработчику: " + TextFormatting.GRAY + e.getMessage());
            e.printStackTrace();
        } else {
            System.out.println("[" + name + " Error" + methodName + "() Message: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
4) Пиздуем в ModuleComponent и в drawText хуярим это:

ModuleComponent:
Expand Collapse Copy
Fonts.sfMedium.drawText(stack, function.getGroup().getName(),
getX() + getWidth() - 6.5f - 6 - Fonts.sfMedium.getWidth(function.getGroup().getName(), 7.7f, 0),
getY() + 6,
FunctionGroup.getColorByGroupName(function.getGroup().getName()).getRGB(), 7.7f, 0);

В итоге мы получаем такое: Посмотреть вложение 316999

Нужна будет помощь - пишите.
А смысл?
Хотя как объянение пойдёт (Можно сделать на другие базы). Просто я хз кто сейчас на експе сидит
 
Назад
Сверху Снизу