問題を次のように絞り込みました。文字列をアイテム識別子に変換する必要があります。
例:
String str = "pickaxe";
Item pick = str;
それはピックをツルハシとして識別することに解決されます。どうすればこれを行うことができますか?
通常、この種の文字列からオブジェクトへのルックアップには列挙型をお勧めしますが、Minecraft には、ゲームの更新ごとに変更されるアイテムの膨大なリストがあることも知っています。つまり、約 370 個の項目を列挙型に入れるのは大変な作業です。
私の提案:データベースまたはソースコードではない何かに保存してください。次に、それを HashMap や List などの構造にロードします。最初のものは、joey.enfield が示唆したように、短い名前を簡単に検索できます。リストを使用すると、一致する名前のアイテムを見つけるために全体を反復処理する必要があります。
編集:
public enum Item {
PICKAXE("pickaxe"),
SHOVEL("shovel"),
BOW("bow");
private String m_shortID;
Item(String shortID){
m_shortID = shortID;
)
static Item lookupByShortID(String shortID){
for(Item i:values()){
if(i.m_shortID.equals(shortID)){
return i;
}
}
return null;
}
}
これは、私が作成した簡単で汚いクラスです。getItemDisplayName() の同じ String 値を持つアイテムが存在する可能性が最も高いため、このコードはすべてのアイテムを含まないハッシュマップを生成する可能性が高いことに注意してください。ハッシュマップで。getItemDisplayName() はローカライズされた文字列を取得するため、別の MC 言語を使用すると、別のリストが生成されることにも注意してください。
import java.util.HashMap;
import java.util.Map;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public class ItemListByString
{
private Map<String, Item> itemMap;
private static ItemListByString instance = new ItemListByString();
private ItemListByString()
{
itemMap = new HashMap<String, Item>();
for (Item item : Item.itemsList)
if (item != null)
itemMap.put(item.getItemDisplayName(new ItemStack(item, 1, 0)), item);
}
public Item getItemByString(String s)
{
return instance.itemMap.get(s);
}
}