2013-09-24 86 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); 
    } 
}