营养工具提示
基本信息
| 属性 |
值 |
| 事件 |
net.minecraftforge.event.entity.player.ItemTooltipEvent |
| 触发类 |
ca.wescook.nutrition.events.EventTooltip |
| 触发开关 |
NutritionConfig.gui.enableTooltips = true(默认) |
| 所需重启 |
RequiresMcRestart |
功能
在任意食物的 tooltip 末尾追加一行 Nutrients: <nutrient list> (<calc>%),告诉玩家该食物含有哪些 Nutrient 以及按当前配置能获得多少营养值。
实现
@SubscribeEvent
public void tooltipEvent(ItemTooltipEvent event) {
ItemStack itemStack = event.itemStack;
String tooltip = null;
// Get out if not a food item
if (!AppleCoreAPI.accessor.isFood(itemStack)) return;
// Create readable list of nutrients
StringJoiner stringJoiner = new StringJoiner(", ");
List<Nutrient> foundNutrients = NutrientUtils.getFoodNutrients(itemStack);
for (Nutrient nutrient : foundNutrients)
if (nutrient.visible) stringJoiner.add(I18n.format("nutrient." + "nutrition" + ":" + nutrient.name));
String nutrientString = stringJoiner.toString();
float nutritionValue;
if (event.entityPlayer != null) {
FoodValues foodValues = AppleCoreAPI.accessor.getFoodValuesForPlayer(itemStack, event.entityPlayer);
nutritionValue = NutrientUtils.calculateNutrition(foodValues, foundNutrients);
} else {
nutritionValue = NutrientUtils.getNutrientValue(1, foundNutrients.size());
}
if (!nutrientString.equals("")) {
tooltip = I18n.format("tooltip." + "nutrition" + ":nutrients") + " "
+ EnumChatFormatting.DARK_GREEN
+ nutrientString
+ EnumChatFormatting.DARK_AQUA
+ " ("
+ String.format("%.1f", nutritionValue)
+ "%)";
}
if (tooltip != null) event.toolTip.add(tooltip);
}
行为
- 非食物 → 直接 return
- 食物没匹配任何 Nutrient →
nutrientString 为空,不追加 tooltip 行
- 食物匹配 Nutrient 但所有 Nutrient 都
visible=false → 同上,不显示
- 使用
String.format("%.1f", nutritionValue) 保留 1 位小数
数值来源差异
event.entityPlayer |
数据源 |
| 非 null |
AppleCoreAPI.accessor.getFoodValuesForPlayer(itemStack, player) —— 考虑玩家个体 FoodValues(如饥饿修饰、Talisman of Nourishment 等) |
| null |
NutrientUtils.getNutrientValue(1, foundNutrients.size()) —— 用 hunger=1 占位,仅显示 Nutrient 数量 |
输出样式
Nutrients: <DARK_GREEN>Dairy, Fruit, Grain<DARK_AQUA> (4.5%)
DARK_GREEN:营养组名字段
DARK_AQUA:百分比字段
- 本地化 key:
tooltip.nutrition:nutrients(前置提示文本)+ nutrient.nutrition:<name>(每个营养组)
相关条目