2013-09-24 82 views
0

我已經將我的問題縮小到以下內容,我需要將字符串轉換爲項目標識符。Java:Minecraft:變量類型轉換

例子:

String str = "pickaxe"; 
Item pick = str; 

這將解決以確定截齒鎬。你怎麼能這樣做?

+0

您必須更具體地獲得更好的答案。從我的理解你需要一個枚舉? – SrikanthLingala

+0

是你寫的一個類嗎?對於這個問題抱歉,但我不知道這個minecraft-api。請告訴我們,如果它不是你的班級,請告訴我們包裹 –

回答

0

我想你想使用的是一個Hash Map

在你的代碼,你可以創建你的對象

Item pickaxe = new Pickaxe(); 
Hashmap<String, Item> items = new HashMap<String, Item>(); 
items.add("pickaxe", pickaxe); 

後來的後來,你可以用

items.get("pickaxe"); 
+0

Would items.get(「pickaxe」);返回鎬作爲一個項目? – bjm904

+0

如果您創建的對象像我在示例的開始處顯示的那樣。說實話你還沒有提供任何真實的信息。你在使用Minecraft API嗎?你在製作一個我的世界克隆嗎?你到底在做什麼? –

+0

使用我的世界api和僞造api – bjm904

0

通常我找回您的物品會爲這種字符串到對象的查找推薦一個枚舉,但我也知道,我的世界中有大量的項目將從遊戲更新更改爲下一個。這意味着將這些around 370 items放入一個枚舉是很多工作。

我的建議:將它們存儲在數據庫或其他不是源代碼的東西中。然後將其加載到像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; 
    } 
} 
+0

對不起,不夠具體。我沒有做Minecraft中的所有物品,只有20個左右。你能詳細說明枚舉嗎? – bjm904

+0

我更新了答案。 – f1sh

0

這裏是一個快速和骯髒的I類熟起來。您應該知道,這段代碼很可能會生成一個不包含EVERY項目的hashmap,因爲最有可能的項目對於getItemDisplayName()具有相同的String值,因此Item.itemsList []中的最後一個將是在hashmap中。另請注意,如果您使用不同的MC語言,它將生成不同的列表,因爲getItemDisplayName()獲取本地化的String。

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); 
    } 
}