ExtendedAE_Plus/src/main/java/com/extendedae_plus/util/GuiUtil.java

80 lines
2.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.extendedae_plus.util;
import appeng.api.crafting.PatternDetailsHelper;
import appeng.api.stacks.GenericStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.world.item.ItemStack;
/**
* GUI工具类提供样板获取、绘制等通用功能
*/
public class GuiUtil {
private GuiUtil() {throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");}
/**
* 从样板中获取输出数量文本
*
* @param pattern 样板物品
* @return 格式化后的数量文本
*/
public static String getPatternOutputText(ItemStack pattern) {
if (pattern.isEmpty()) {
return "";
}
var details = PatternDetailsHelper.decodePattern(pattern, Minecraft.getInstance().level, false);
if (details == null || details.getOutputs().length == 0) {
return "";
}
GenericStack out = details.getOutputs()[0];
long amount = out.amount();
long perUnit = out.what().getAmountPerUnit();
if (amount <= 0 || perUnit <= 0) {
return "";
}
// 计算实际单位数量,支持小数
double units = (double) amount / perUnit;
if (units <= 0) {
return "";
}
// 自动判断是否为流体,避免重复后缀
String autoSuffix = "";
if (perUnit > 1) {
// 如果每单位数量大于1说明是流体如1000mB = 1B
autoSuffix = "B";
}
return NumberFormatUtil.formatNumberWithDecimal(units) + autoSuffix;
}
/**
* 在槽位右下角绘制数量文本
* @param guiGraphics GUI图形上下文
* @param font 字体
* @param text 要绘制的文本
* @param slotX 槽位X坐标
* @param slotY 槽位Y坐标
* @param scale 缩放比例
*/
public static void drawAmountText(GuiGraphics guiGraphics, Font font, String text, int slotX, int slotY, float scale) {
if (text.isEmpty()) {
return;
}
// 计算缩放后的字体宽度,确保右对齐
int scaledWidth = (int)(font.width(text) * scale);
int textX = slotX + 16 - scaledWidth;
int textY = slotY + 11; // 右下角显示
guiGraphics.pose().pushPose();
guiGraphics.pose().translate(0, 0, 300); // 提升 Z确保在最上层
guiGraphics.pose().scale(scale, scale, 1.0f); // 缩小字体
guiGraphics.drawString(font, text, (int)(textX / scale), (int)(textY / scale), 0xFFFFFFFF, true);
guiGraphics.pose().popPose();
}
}