NMS Datav1.0.0已發布

NMS 物品組件系統

NMS Data Component

操作 Minecraft 1.21 DataComponentType 物品組件系統,讀寫 CustomData、MaxStackSize、Enchantments 等組件(Paper NMS + Mojang mappings)。

nmsdata-componentitemcustomdataenchantmentsmojang-mapped
更新:2026年4月30日GitHub

NMS Data Component

目的

操作 Minecraft 1.21 引入的 DataComponentType 物品組件系統,直接讀寫 CustomDataMaxStackSizeEnchantmentsAttributeModifiers 等組件,取代舊版 NBT getTag()/setTag() 模式。


平台需求

  • Paper 1.21 – 1.21.3(DataComponent 為 1.20.5+ 新增)
  • Paperweight userdev 1.7.2+
  • Mojang mappings(Paper 1.20.5+ 原生支援)
  • Java 21

產生的代碼

ItemComponentUtil.java

// 讀取 MaxStackSize 組件
Optional<Integer> maxStack = ItemComponentUtil.get(item, DataComponents.MAX_STACK_SIZE);

// 設定 Unbreakable 組件(回傳新 ItemStack,原物不變)
ItemStack unbreakable = ItemComponentUtil.set(item, DataComponents.UNBREAKABLE,
    new Unbreakable(true));

// 移除組件
ItemStack clean = ItemComponentUtil.remove(item, DataComponents.CUSTOM_DATA);

CustomDataHelper.java(自定義 NBT 組件)

// 寫入自定義字串資料
ItemStack tagged = CustomDataHelper.setString(item, "rarity", "legendary");

// 讀取自定義整數資料
int level = CustomDataHelper.getInt(item, "weapon-level", 0);

// 檢查是否有指定鍵
boolean hasTag = CustomDataHelper.has(item, "owner-uuid");

執行緒安全

  • ItemComponentUtil 操作 NMS Copy,可在任意執行緒呼叫
  • 套用修改後的 ItemStack 至玩家物品欄須在主執行緒完成