Начинающий
- Статус
- Оффлайн
- Регистрация
- 26 Дек 2024
- Сообщения
- 49
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Сделал ServerHelperHUD криво, но все же хотя бы работает. Если надо, сами дорабатывайте, фонс сами найдете.
ServerHelperHUD.java:
package rich.screens.hud;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.ItemStack;
import org.lwjgl.glfw.GLFW;
import rich.Initialization;
import rich.client.draggables.AbstractHudElement;
import rich.modules.impl.misc.ServerHelper;
import rich.modules.impl.render.Hud;
import rich.util.ColorUtil;
import rich.util.render.Render2D;
import rich.util.render.font.Fonts;
import rich.util.render.item.ItemRender;
import java.awt.*;
public class ServerHelperHUD extends AbstractHudElement {
public ServerHelperHUD() {
super("ServerHelper", 200, 200, 18, 18, true);
}
@Override
public void drawDraggable(DrawContext context, int alpha) {
if (!Hud.getInstance().interfaceSettings.isSelected("ServerHelper")) return;
ServerHelper serverHelper = Initialization.getInstance().getManager().getModuleProvider().get(ServerHelper.class);
if (serverHelper == null || !serverHelper.isState() || mc.player == null) return;
float startX = getX();
float y = getY();
float x = startX;
float spacing = 6;
float size = 18;
for (ServerHelper.KeyBind bind : serverHelper.getKeyBindings()) {
if (bind.setting().getKey() <= 0 || !bind.setting().getVisible().get() || !hasCustomItem(bind)) {
continue;
}
Render2D.rect(x, y, size, size, ColorUtil.getColor(15, 15, 15, (int)(alpha * 0.8f)), 4);
String keyName = getEnglishKeyName(bind.setting().getKey());
float fontSize = 6f;
float textWidth = Fonts.SFPRO_REGULAR.getWidth(keyName, fontSize);
float rectW = Math.max(8, textWidth + 3);
float rectH = 6.5f;
float rectX = x + size - rectW + 1.5f;
float rectY = y + size - rectH + 0.5f;
Render2D.rect(rectX, rectY, rectW, rectH, ColorUtil.getColor(200, 30, 30, (int)(alpha * 0.7f)), 2);
ItemStack stack = new ItemStack(bind.item());
float itemScale = 0.65f;
if (ItemRender.needsContextRender(stack)) {
ItemRender.drawItemCenteredWithContext(context, stack, x + size / 2f, y + size / 2f - 1.2f, itemScale, alpha / 255f);
} else {
ItemRender.drawItemCentered(stack, x + size / 2f, y + size / 2f - 1.2f, itemScale, alpha / 255f);
}
x += size + spacing;
}
x = startX;
for (ServerHelper.KeyBind bind : serverHelper.getKeyBindings()) {
if (bind.setting().getKey() <= 0 || !bind.setting().getVisible().get() || !hasCustomItem(bind)) {
continue;
}
String keyName = getEnglishKeyName(bind.setting().getKey());
float fontSize = 5.5f;
float textWidth = Fonts.SFPRO_REGULAR.getWidth(keyName, fontSize);
float rectW = Math.max(8, textWidth + 3);
float rectH = 6.5f;
float rectX = x + size - rectW + 1.5f;
float rectY = y + size - rectH + 0.5f;
int textColor = ColorUtil.getColor(255, 255, 255, (int)(alpha * 0.8f));
Fonts.SFPRO_REGULAR.draw(keyName, rectX + (rectW / 2f) - (textWidth / 2f), rectY + 0.8f, fontSize, textColor);
x += size + spacing;
}
setWidth((int) (x - getX()));
setHeight((int) size);
}
private String getEnglishKeyName(int key) {
if (key >= GLFW.GLFW_MOUSE_BUTTON_1 && key <= GLFW.GLFW_MOUSE_BUTTON_8) {
return "M" + (key + 1);
}
return switch (key) {
case GLFW.GLFW_KEY_A -> "A"; case GLFW.GLFW_KEY_B -> "B"; case GLFW.GLFW_KEY_C -> "C";
case GLFW.GLFW_KEY_D -> "D"; case GLFW.GLFW_KEY_E -> "E"; case GLFW.GLFW_KEY_F -> "F";
case GLFW.GLFW_KEY_G -> "G"; case GLFW.GLFW_KEY_H -> "H"; case GLFW.GLFW_KEY_I -> "I";
case GLFW.GLFW_KEY_J -> "J"; case GLFW.GLFW_KEY_K -> "K"; case GLFW.GLFW_KEY_L -> "L";
case GLFW.GLFW_KEY_M -> "M"; case GLFW.GLFW_KEY_N -> "N"; case GLFW.GLFW_KEY_O -> "O";
case GLFW.GLFW_KEY_P -> "P"; case GLFW.GLFW_KEY_Q -> "Q"; case GLFW.GLFW_KEY_R -> "R";
case GLFW.GLFW_KEY_S -> "S"; case GLFW.GLFW_KEY_T -> "T"; case GLFW.GLFW_KEY_U -> "U";
case GLFW.GLFW_KEY_V -> "V"; case GLFW.GLFW_KEY_W -> "W"; case GLFW.GLFW_KEY_X -> "X";
case GLFW.GLFW_KEY_Y -> "Y"; case GLFW.GLFW_KEY_Z -> "Z";
case GLFW.GLFW_KEY_LEFT_SHIFT -> "LS"; case GLFW.GLFW_KEY_TAB -> "TAB";
case GLFW.GLFW_KEY_SPACE -> "SPC";
default -> {
String name = GLFW.glfwGetKeyName(key, 0);
yield (name != null ? name.toUpperCase() : "B" + key);
}
};
}
private boolean hasCustomItem(ServerHelper.KeyBind bind) {
if (mc.player == null) return false;
String targetName = bind.setting().getName();
for (int i = 0; i < mc.player.getInventory().size(); i++) {
ItemStack stack = mc.player.getInventory().getStack(i);
if (!stack.isEmpty() && stack.getItem() == bind.item()) {
if (!stack.getComponents().contains(DataComponentTypes.CUSTOM_NAME)) return true;
if (stack.getName().getString().contains(targetName)) return true;
}
}
ItemStack offhand = mc.player.getOffHandStack();
if (offhand.getItem() == bind.item()) {
if (!offhand.getComponents().contains(DataComponentTypes.CUSTOM_NAME) || offhand.getName().getString().contains(targetName)) return true;
}
return false;
}
@Override
public boolean visible() {
return Hud.getInstance().interfaceSettings.isSelected(getName());
}
}