Minecraft item data, textures, and translations for React and Vue applications with multi-version support.
# From GitHub
pnpm add github:bafv4/mcitems
# Or with a specific tag
pnpm add github:bafv4/mcitems#v2.0.0- Multi-Version Support: Separate modules for different Minecraft versions
- Item Data: Complete list of Minecraft items organized by Creative Inventory categories
- Textures: PNG textures for all items and blocks
- Translations: All 125 official Minecraft languages (en_us + ja_jp bundled, others loadable on demand)
- React Component:
MinecraftItemIconfor displaying item icons - Vue Component:
MinecraftItemIconfor Vue 3 applications - Potion Effects: Full support for potion effect variants
- Framework Independent: React and Vue are optional peer dependencies
| Version | Import Path | Status |
|---|---|---|
| 1.16.x | @bafv4/mcitems/1.16 | Supported |
| 1.20.x | @bafv4/mcitems/1.20 | Coming Soon |
| 1.21.x | @bafv4/mcitems/1.21 | Coming Soon |
import{MinecraftItemIcon,getAllItems}from'@bafv4/mcitems/1.16/react';// Basic usage<MinecraftItemIconitemId="minecraft:diamond_sword"size={48}/>// With potion effect<MinecraftItemIconitemId="minecraft:potion"nbtData={{Potion: 'minecraft:fire_resistance'}}size={32}/>// With custom texture base URL<MinecraftItemIconitemId="minecraft:iron_pickaxe"textureBaseUrl="/assets/mcitems"size={48}/>// Using data functionsconstitems=getAllItems();<script setup lang="ts">import { MinecraftItemIcon, getAllItems } from'@bafv4/mcitems/1.16/vue';const items =getAllItems();</script>
<template>
<!-- Basic usage -->
<MinecraftItemIcon itemId="minecraft:diamond_sword" :size="48" />
<!-- With potion effect -->
<MinecraftItemIcon
itemId="minecraft:potion"
:nbtData="{ Potion: 'minecraft:fire_resistance' }"
:size="32"
/>
<!-- With custom texture base URL -->
<MinecraftItemIcon
itemId="minecraft:iron_pickaxe"
textureBaseUrl="/assets/mcitems"
:size="48"
/>
</template>import{getAllItems,formatItemName,MINECRAFT_VERSION}from'@bafv4/mcitems/1.16';console.log(MINECRAFT_VERSION);// "1.16"constitems=getAllItems();constname=formatItemName('minecraft:diamond_sword');import{getAllItems,getItemsByCategory,getCraftableItems,searchItems,formatItemName,ITEM_CATEGORIES,}from'@bafv4/mcitems/1.16';// Get all itemsconstitems=getAllItems();// Get items by categoryconsttools=getItemsByCategory('tools');// Get craftable items only (for recipe search)constcraftable=getCraftableItems();// Search items (by ID or display name in the given language)constresults=searchItems('diamond');constjaResults=searchItems('ダイヤ');// Japanese works too// Format item name (Japanese by default)constname=formatItemName('minecraft:diamond_sword');// => 'ダイヤモンドの剣'// Available categoriesITEM_CATEGORIES.forEach(cat=>{console.log(cat.id,cat.name);});Item names are available in every official Minecraft language. en_us and ja_jp
are bundled; other languages are loaded at runtime or bundled explicitly.
import{getItemName,formatItemName,loadLang,registerLang,isLangLoaded,getCategoryName,getEffectName,AVAILABLE_LANGS,// all 125 language codesBUNDLED_LANGS,// ['en_us', 'ja_jp']}from'@bafv4/mcitems/1.16';// Bundled languages work synchronously out of the boxgetItemName('minecraft:diamond_sword','ja_jp');// => 'ダイヤモンドの剣'getItemName('minecraft:diamond_sword');// => 'Diamond Sword' (en_us)// Potion variant IDs resolve to full vanilla namesgetItemName('minecraft:splash_potion.fire_resistance','ja_jp');// => '耐火のスプラッシュポーション'// Load any other language at runtime (see "Language File Setup" below)awaitloadLang('de_de','/mcitems');getItemName('minecraft:diamond_sword','de_de');// => 'Diamantschwert'// formatItemName always returns a string (lang → en_us → Title Case fallback)formatItemName('minecraft:diamond_sword','de_de');// => 'Diamantschwert'// Category (creative tab) and status effect namesgetCategoryName('brewing','ja_jp');// => '醸造'getEffectName('minecraft:night_vision','en_us');// => 'Night Vision'Alternatively, bundle a language into your app instead of fetching it:
// Bundlers (Vite / webpack / Next.js) handle the JSON import as-is:importkoKrfrom'@bafv4/mcitems/1.16/lang/ko_kr';// Plain Node.js ESM requires the import attribute instead:// import koKr from '@bafv4/mcitems/1.16/lang/ko_kr' with { type: 'json' };import{registerLang,getItemName}from'@bafv4/mcitems/1.16';registerLang('ko_kr',koKr);getItemName('minecraft:diamond_sword','ko_kr');// => '다이아몬드 검'Typical language-switching pattern (e.g. reacting to a user setting):
asyncfunctionsetLanguage(lang: string){awaitloadLang(lang,LANG_BASE_URL);// no-op if already loadedrerender();// all getItemName/formatItemName calls are now synchronous}import{POTION_EFFECTS,getPotionEffectInfo,formatPotionName,formatPotionEffect,}from'@bafv4/mcitems/1.16';// Get potion infoconstinfo=getPotionEffectInfo('minecraft:fire_resistance');// => { id: 'minecraft:fire_resistance', name: '火炎耐性', variant: 12, duration: '3:00' }// Format potion name (official vanilla names, language-aware)constname=formatPotionName('minecraft:splash_potion','minecraft:fire_resistance');// => '耐火のスプラッシュポーション'formatPotionName('minecraft:splash_potion','minecraft:fire_resistance','en_us');// => 'Splash Potion of Fire Resistance'// Format effect with durationconsteffect=formatPotionEffect('minecraft:long_fire_resistance');// => '火炎耐性 (8:00)'formatPotionEffect('minecraft:strong_leaping','en_us');// => 'Jump Boost (3:00)'Textures are included in dist/textures/ after building. You need to serve them statically:
Copy textures to public/ folder:
cp -r node_modules/@bafv4/mcitems/dist/textures public/mcitemsThen use with textureBaseUrl:
<MinecraftItemIconitemId="minecraft:diamond"textureBaseUrl="/mcitems"/>Add to vite.config.ts:
import{viteStaticCopy}from'vite-plugin-static-copy';exportdefaultdefineConfig({plugins: [viteStaticCopy({targets: [{src: 'node_modules/@bafv4/mcitems/dist/textures',dest: 'assets',},],}),],});Copy textures to public/ folder:
cp -r node_modules/@bafv4/mcitems/dist/textures public/mcitemsThen use with textureBaseUrl:
<MinecraftItemIcon
itemId="minecraft:diamond"
textureBaseUrl="/mcitems"
/>Only en_us and ja_jp are bundled in the JS build. To use loadLang(), serve
the language files from dist/1.16/lang/ statically (same approach as textures).
loadLang(code, baseUrl) fetches ${baseUrl}/1.16/lang/${code}.json.
mkdir -p public/mcitems/1.16
cp -r node_modules/@bafv4/mcitems/dist/1.16/lang public/mcitems/1.16/langawaitloadLang('de_de','/mcitems');import{viteStaticCopy}from'vite-plugin-static-copy';exportdefaultdefineConfig({plugins: [viteStaticCopy({targets: [{src: 'node_modules/@bafv4/mcitems/dist/1.16/lang',dest: 'mcitems/1.16'},],}),],});awaitloadLang('de_de','/mcitems');pnpm run gen-lang # downloads official 1.16.5 lang files from Mojang and rebuilds src/assets/lang/| ID | Name |
|---|---|
all | すべて |
building_blocks | 建築ブロック |
decorations | 装飾ブロック |
redstone | レッドストーン |
transportation | 交通 |
miscellaneous | 雑貨 |
foodstuffs | 食料 |
tools | 道具 |
combat | 戦闘 |
brewing | 醸造 |
MinecraftItemIcon(React) - React component for displaying item icons (@bafv4/mcitems/1.16/react)MinecraftItemIcon(Vue) - Vue 3 component for displaying item icons (@bafv4/mcitems/1.16/vue)
getAllItems()- Get all item IDsgetItemsByCategory(category)- Get items by categorygetCraftableItems()- Get craftable items onlygetCraftableItemsByCategory(category)- Get craftable items by categorysearchItems(query, lang?)- Search items by ID or display nameformatItemName(itemId, lang?)- Format item ID to display name (default: Japanese)getItemName(itemId, lang?)- Get item display name (default: en_us, falls back to en_us)getEffectName(effectId, lang?)- Get status effect display namegetCategoryName(category, lang?)- Get creative tab display nameloadLang(code, baseUrl?)- Fetch and register a language at runtimeregisterLang(code, dict)- Register an imported language dictionaryisLangLoaded(code)- Whether a language is ready for synchronous lookupgetLangUrl(code, baseUrl?)- Get language file URLgetItemNameJa(itemId)- Get Japanese translation (deprecated: usegetItemName(id, 'ja_jp'))getTextureUrl(itemId, nbtData, baseUrl)- Get texture URLgetPotionEffectInfo(effect)- Get potion effect infoformatPotionName(itemId, effect, lang?)- Format potion display nameformatPotionEffect(effect, lang?)- Format effect with duration
MINECRAFT_VERSION- Version string (e.g., "1.16")TEXTURE_PATH- Texture path pattern (e.g., "1.16.1/items")LANG_PATH- Language file path pattern ("1.16/lang")AVAILABLE_LANGS- All 125 language codesBUNDLED_LANGS- Languages bundled in the JS build (['en_us', 'ja_jp'])MINECRAFT_ITEMS- Items organized by categoryITEM_CATEGORIES- Category definitionsPOTION_EFFECTS- Potion effect data
ItemCategory- Category type unionMinecraftItem- Item interfaceNBTItem- NBT item structurePotionEffectInfo- Potion effect info interfaceLangDict- Language dictionary (Record<string, string>)
To add support for a new Minecraft version:
- Create a new version folder:
src/versions/1.20/ - Copy and modify the data files (items.ts, potionEffects.ts, translations.ts)
- Update
TEXTURE_PATHconstant for the new version - Add entry points to
tsup.config.ts - Add exports to
package.json
MIT