Начинающий
- Статус
- Оффлайн
- Регистрация
- 12 Мар 2026
- Сообщения
- 8
- Реакции
- 0
- Выберите загрузчик игры
- Vanilla
- OptiFine
Знаю, что выглядит не оч, но я и не старался, может кому понадобиться
ss -
code -
ss -
code -
Java:
package im.expensive.ui.display.impl;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.events.EventDisplay;
import im.expensive.ui.display.ElementRenderer;
import im.expensive.utils.drag.Dragging;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.Scissor;
import im.expensive.utils.render.font.Fonts;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.gui.AbstractGui;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.I18n;
import net.minecraft.potion.Effect;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.EffectUtils;
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class PotionRenderer implements ElementRenderer {
final Dragging dragging;
float width = 110;
float height = 40;
@Override
public void render(EventDisplay eventDisplay) {
MatrixStack ms = eventDisplay.getMatrixStack();
float posX = dragging.getX();
float posY = dragging.getY();
float fontSize = 7.5f;
float padding = 8;
float headerHeight = 24;
int accentColor = ColorUtils.rgba(255, 140, 150, 255);
int textColor = ColorUtils.rgba(230, 230, 230, 255);
int darkGray = ColorUtils.rgba(100, 100, 100, 255);
int glassBgColor = ColorUtils.rgba(15, 15, 15, 150);
int headerBgColor = ColorUtils.rgba(10, 10, 10, 180);
glassBgColor = ColorUtils.rgba(15, 15, 15, 100);
DisplayUtils.drawShadow(posX, posY, width, height, 12, ColorUtils.rgba(0, 0, 0, 120), ColorUtils.rgba(0, 0, 0, 120));
DisplayUtils.drawRoundedRect(posX, posY, width, height, 5, glassBgColor);
Scissor.push();
Scissor.setFromComponentCoordinates(posX, posY, width, headerHeight);
DisplayUtils.drawRoundedRect(posX, posY, width, headerHeight + 5, 5, headerBgColor);
Scissor.unset();
Scissor.pop();
if (!mc.player.getActivePotionEffects().isEmpty()) {
float lineThickness = 1.5f;
int lineColor = ColorUtils.rgba(80, 80, 80, 180);
DisplayUtils.drawRoundedRect(posX, posY + headerHeight, width, lineThickness, 0.5f, lineColor); // ИСПРАВЛЕННАЯ
}
Scissor.push();
Scissor.setFromComponentCoordinates(posX, posY, width, height);
Fonts.sfui.drawText(ms, "Potions", posX + padding, posY + 8.5f, -1, 8.5f);
float currentY = posY + headerHeight + 7;
float maxWidth = 120;
for (EffectInstance ef : mc.player.getActivePotionEffects()) {
Effect effect = ef.getPotion();
String nameText = I18n.format(effect.getName());
int amp = ef.getAmplifier() + 1;
String ampText = String.valueOf(amp);
String durationText = EffectUtils.getPotionDurationString(ef, 1);
float nameWidth = Fonts.sfMedium.getWidth(nameText, fontSize);
float ampWidth = Fonts.sfMedium.getWidth(ampText, fontSize);
float durationWidth = Fonts.sfMedium.getWidth(durationText, fontSize);
float iconSize = 9;
TextureAtlasSprite sprite = mc.getPotionSpriteUploader().getSprite(effect);
mc.getTextureManager().bindTexture(sprite.getAtlasTexture().getTextureLocation());
GlStateManager.enableBlend();
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
AbstractGui.blit(ms, (int)(posX + padding), (int)(currentY), 0, (int)iconSize, (int)iconSize, sprite);
GlStateManager.disableBlend();
float chevronX = posX + padding + iconSize + 4;
Fonts.sfMedium.drawText(ms, ">", chevronX, currentY + 1.5f, darkGray, fontSize);
float textX = chevronX + Fonts.sfMedium.getWidth(">", fontSize) + 4;
Fonts.sfMedium.drawText(ms, nameText, textX, currentY + 1.5f, textColor, fontSize);
Fonts.sfMedium.drawText(ms, " " + ampText, textX + nameWidth, currentY + 1.5f, accentColor, fontSize);
Fonts.sfMedium.drawText(ms, durationText, posX + width - padding - durationWidth, currentY + 1.5f, accentColor, fontSize);
float rowWidth = (textX - posX) + nameWidth + ampWidth + durationWidth + 25;
if (rowWidth > maxWidth) {
maxWidth = rowWidth;
}
currentY += 13;
}
Scissor.unset();
Scissor.pop();
width = maxWidth;
height = mc.player.getActivePotionEffects().isEmpty() ? headerHeight : (currentY - posY + 4);
dragging.setWidth(width);
dragging.setHeight(height);
}
}
