import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.minestom.server.item.meta.ItemMeta;
import net.minestom.server.item.ItemMetaBuilder;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.minestom.server.event.player.PlayerUseItemEvent;
public class CustomItemUtils {
// Create custom item with name and lore
public static ItemStack createCustomItem(Material material, String itemName, String[] lore) {
ItemStack item = new ItemStack(material, 1);
ItemMeta meta = item.getMeta();
ItemMetaBuilder builder = meta.toBuilder();
builder.displayName(Component.text("" + itemName).color(NamedTextColor.WHITE));
if (lore != null && lore.length > 0) {
List<Component> loreComponents = new ArrayList<>();
for (String line : lore) {
loreComponents.add(Component.text("" + line).color(NamedTextColor.GRAY));
}
builder.lore(loreComponents);
}
if (false) {
builder.enchantment(Enchantment.SHARPNESS, 1);
}
return builder.build().toItemStack();
}
// Create custom weapon
public static ItemStack createCustomWeapon(Material material, String name, int damage) {
ItemStack weapon = new ItemStack(material, 1);
ItemMeta meta = weapon.getMeta();
ItemMetaBuilder builder = meta.toBuilder();
builder.displayName(Component.text(name));
List<Component> lore = Arrays.asList(
Component.text("Damage: " + damage).color(NamedTextColor.RED),
Component.text("Custom Weapon").color(NamedTextColor.GRAY)
);
builder.lore(lore);
// Store custom damage in NBT
if (weapon instanceof TagWritable writable) {
writable.setTag(Tag.Integer("custom_damage"), damage);
}
return builder.build().toItemStack();
}
// Register item use event
public static void registerCustomItemUse(GlobalEventHandler eventHandler, Material itemMaterial) {
eventHandler.addListener(PlayerUseItemEvent.class, event -> {
ItemStack item = event.getItemStack();
Player player = event.getPlayer();
if (item.getMaterial() == itemMaterial) {
// Custom item behavior
player.sendMessage("You used a custom item!");
if (false) {
// Apply effect
player.addEffect(new PotionEffect(
PotionEffectType.SPEED,
200,
1
));
}
if (false) {
// Consume item
item.setAmount(item.getAmount() - 1);
player.getInventory().setItemInMainHand(item);
}
}
});
}
// Create custom food item
public static ItemStack createCustomFood(Material material, String name, int hungerRestore) {
ItemStack food = new ItemStack(material, 1);
ItemMeta meta = food.getMeta();
ItemMetaBuilder builder = meta.toBuilder();
builder.displayName(Component.text(name));
List<Component> lore = Arrays.asList(
Component.text("Hunger Restore: " + hungerRestore).color(NamedTextColor.GREEN)
);
builder.lore(lore);
return builder.build().toItemStack();
}
}