HUD Icon Lib
A lightweight Minecraft Fabric library mod that enables other mods to display customizable graphical icons with optional text on the user interface.
截图
介绍
What is HUD Icon Library?
HUD Icon Library is a utility mod that provides a simple API for other Fabric mods to display icons on your screen. This is commonly used for:
- Status **indicators (health, mana, stamina)**
- Buff/debuff notifications (speed boost, strength, etc.)
- Quest markers and objectives
- Custom HUD elements
- Temporary notifications with timers
Features
✨ Multiple Icons: Display multiple icons simultaneously
⏱️ Timer Support: Icons can be permanent or auto-remove after a set duration
🎯 Flexible Positioning: Position icons anywhere on screen (default: top-left)
📐 Customizable Size: Default 16×16 pixels (inventory item size), fully adjustable
🖼️ Image Support: PNG and JPG formats
📝 Text Display: Optional text labels next to icons
⚙️ Code-Based Configuration: Simple API, no config files needed
🪶 Lightweight: No additional dependencies beyond Fabric API
Integration Guide
This guide explains how to integrate the HUD Icon Library into your existing Fabric mod.
Table of Contents
Adding the Dependency
Option 1: Using the Compiled JAR
- Download the JAR file to the libs/ folder in your mod
- Add it to your mod’s
build.gradle:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
// ... other dependencies
// Add the HUD Icon Library
modImplementation project(':hudiconlib')
include project(':hudiconlib')
}
Declaring the Dependency
Add the library to your fabric.mod.json dependencies:
{
"depends": {
"fabricloader": ">=0.15.0",
"minecraft": "~1.20.1",
"hudiconlib": "*"
}
}
Basic Usage
Importing the API
import net.cookiebrain.hudiconlib.HudIconLib;
import net.cookiebrain.hudiconlib.Icon;
Creating and Registering Icons
Simple Icon (Always Visible)
// Create an identifier for your texture
Identifier iconTexture = new Identifier("mymod", "textures/gui/icon.png");
// Create an icon at default position (top-left)
Icon myIcon = HudIconLib.createIcon(
"mymod:my_icon", // Unique ID
iconTexture, // Identifier to texture
10, 10, 16, 16 // X, Y, Width, Height
);
// Optionally add text
myIcon.setText("My Icon");
// Register the icon
HudIconLib.registerIcon(myIcon);
Custom Position and Size
Identifier customTexture = new Identifier("mymod", "textures/gui/custom.png");
Icon customIcon = HudIconLib.createIcon(
"mymod:custom_icon",
customTexture,
100, // X position
50, // Y position
24, // Width
24 // Height
);
HudIconLib.registerIcon(customIcon);
Timed Icon (Auto-Remove After Duration)
Identifier buffTexture = new Identifier("mymod", "textures/gui/buff.png");
Icon timedIcon = HudIconLib.createIcon(
"mymod:timed_icon",
buffTexture,
10, 10, 16, 16
);
timedIcon.setText("Buff Active!");
timedIcon.setTextColor(0x00FF00); // Green text
timedIcon.setDuration(30); // 30 seconds
HudIconLib.registerIcon(timedIcon);
Quick Start Example
Here’s a complete example for your mod’s initialization:
package com.example.mymod;
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.util.Identifier;
import net.cookiebrain.hudiconlib.HudIconLib;
import net.cookiebrain.hudiconlib.Icon;
public class MyModClient implements ClientModInitializer {
private static final String MOD_ID = "mymod";
@Override
public void onInitializeClient() {
// Initialize your mod...
// Add icons during initialization
setupIcons();
}
private void setupIcons() {
// Example 1: Permanent health icon
Identifier heartTexture = new Identifier(MOD_ID, "textures/gui/heart.png");
Icon healthIcon = HudIconLib.createIcon(
"mymod:health",
heartTexture,
10, 10, 16, 16
);
healthIcon.setText("❤ 20");
healthIcon.setTextColor(0xFF0000); // Red
HudIconLib.registerIcon(healthIcon);
// Example 2: Timer-based buff icon
Identifier speedTexture = new Identifier(MOD_ID, "textures/gui/speed.png");
Icon buffIcon = HudIconLib.createIcon(
"mymod:speed_buff",
speedTexture,
10, 30, 16, 16
);
buffIcon.setText("Speed Boost");
buffIcon.setDuration(60); // 60 seconds
HudIconLib.registerIcon(buffIcon);
}
// You can add/remove icons at any time
public void showCustomIcon(String message, int duration) {
Identifier infoTexture = new Identifier(MOD_ID, "textures/gui/info.png");
Icon notification = HudIconLib.createIcon(
"mymod:notification_" + System.currentTimeMillis(),
infoTexture,
10, 50, 16, 16
);
notification.setText(message);
notification.setDuration(duration);
HudIconLib.registerIcon(notification);
}
}
Advanced Usage
Using the Builder Pattern
Identifier advancedTexture = new Identifier("mymod", "textures/gui/advanced.png");
HudIconLib.builder("mymod:advanced_icon", advancedTexture)
.position(150, 100)
.size(32, 32)
.text("Advanced Icon")
.textColor(0xFFAA00)
.duration(45)
.alpha(0.8f)
.buildAndRegister();
Dynamic Icon Management
// Show/hide icons
HudIconLib.hideIcon("mymod:my_icon");
HudIconLib.showIcon("mymod:my_icon");
// Remove icons
HudIconLib.removeIcon("mymod:my_icon");
// Check if icon exists
if (HudIconLib.hasIcon("mymod:my_icon")) {
// Do something
}
// Update existing icon
Icon icon = HudIconLib.getIcon("mymod:my_icon");
if (icon != null) {
icon.setText("Updated text");
icon.setAlpha(0.5f);
}
// Clear all icons
HudIconLib.clearAllIcons();
Responding to Game Events
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
public class MyModClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
// Update icons on player tick
ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (client.player != null) {
updatePlayerIcons(client.player);
}
});
}
private void updatePlayerIcons(PlayerEntity player) {
// Update health display
Icon healthIcon = HudIconLib.getIcon("mymod:health");
if (healthIcon != null) {
int health = (int) player.getHealth();
healthIcon.setText("❤ " + health);
}
// Show low health warning
if (player.getHealth() < 6.0f) {
if (!HudIconLib.hasIcon("mymod:low_health_warning")) {
Identifier warningTexture = new Identifier("mymod", "textures/gui/warning.png");
Icon warning = HudIconLib.createIcon(
"mymod:low_health_warning",
warningTexture,
10, 50, 16, 16
);
warning.setText("Low Health!");
warning.setTextColor(0xFF0000);
HudIconLib.registerIcon(warning);
}
} else {
HudIconLib.removeIcon("mymod:low_health_warning");
}
}
}
Best Practices
1. Icon File Organization
Store your icon files in a predictable location:
src/main/resources/
assets/
yourmod/
textures/
gui/
icon1.png
icon2.png
2. Use Namespaced IDs
Always prefix your icon IDs with your mod ID:
// Good
HudIconLib.createIcon("mymod:health_icon", ...)
// Bad - could conflict with other mods
HudIconLib.createIcon("health_icon", ...)
3. Clean Up Timed Icons
For short-lived icons, always use .setDuration() so they auto-remove:
icon.setDuration(30); // Auto-removes after 30 seconds
4. Check for Existing Icons
Before creating duplicate icons:
if (!HudIconLib.hasIcon("mymod:my_icon")) {
Icon icon = HudIconLib.createIcon(...);
HudIconLib.registerIcon(icon);
}
5. Handle Null Safely
When getting icons:
Icon icon = HudIconLib.getIcon("mymod:my_icon");
if (icon != null) {
// Update icon
}
6. Performance Considerations
- Limit the number of simultaneous icons (recommended: < 20)
- Use appropriate icon sizes (16×16 recommended, avoid large images)
- Remove icons when no longer needed
7. Text Formatting
Use Minecraft color codes for colored text:
icon.setTextColor(0xFFFFFF); // White
icon.setTextColor(0xFF0000); // Red
icon.setTextColor(0x00FF00); // Green
icon.setTextColor(0x0000FF); // Blue
icon.setTextColor(0xFFAA00); // Orange
Troubleshooting
Icons Not Appearing
- Check file path: Ensure the texture path is correct and the file exists
- Check visibility: Make sure
icon.isVisible()returns true - Check registration: Verify the icon was successfully registered
Icons Flickering
- Don’t create/remove icons every frame
- Use
hideIcon()/showIcon()instead of removing and re-creating
Performance Issues
- Reduce the number of simultaneous icons
- Use smaller texture files
- Remove unused icons with
removeIcon()orclearAllIcons()
Example Project Structure
your-mod/
├── build.gradle
├── src/main/
│ ├── java/com/yourmod/
│ │ ├── YourMod.java
│ │ └── YourModClient.java
│ └── resources/
│ ├── fabric.mod.json
│ └── assets/
│ └── yourmod/
│ └── textures/
│ └── gui/
│ ├── icon1.png
│ └── icon2.png
└── libs/
└── hudiconlib-0.2.0.jar
常见问题
HUD Icon Lib 支持哪些 Minecraft 版本?
HUD Icon Lib 支持 Minecraft Java 版 1.20.1,可用的加载器:Fabric。下载时注意选择和你游戏版本一致的文件。
HUD Icon Lib 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:客户端和服务端都要装。
TheChickenHulk 的其他作品
查看全部 →
You Need Bait!
Dive into a deeper fishing experience with this mod, featuring fully custom 3D models and unique animations for every new fish you catch. Gear up with a specialized fishing rod that supports powerful modifiers to boost your haul.
You Need Bait!
Dive into a deeper fishing experience with this mod, featuring fully custom 3D models and unique animations for every new fish you catch. Gear up with a specialized fishing rod that supports powerful modifiers to boost your haul.
评论
登录后评论和评分