0

我已将问题缩小到以下范围,我需要将字符串转换为项目识别器。

例子:

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

这将解决将镐识别为镐。你怎么能做到这一点?

4

3 回答 3

0

通常我会为这种字符串到对象的查找推荐一个枚举,但我也知道我的世界中有大量的项目会随着游戏更新而改变。这意味着将大约 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;
  }  
}
于 2013-09-24T08:23:41.177 回答
0

这是我制作的快速而肮脏的课程。您应该知道,此代码很可能会生成一个不包含每个项目的哈希图,因为最有可能的项目具有相同的 getItemDisplayName() 字符串值,因此 Item.itemsList[] 中的最后一个将是一个在哈希图中。另请注意,如果您使用不同的 MC 语言,它将生成不同的列表,因为 getItemDisplayName() 获取本地化字符串。

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);
    }
}
于 2013-09-25T20:37:51.317 回答
0

我认为您要使用的是哈希图

在您的代码中,您可以创建您的对象

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

然后稍后您可以使用

items.get("pickaxe");
于 2013-09-24T08:13:57.417 回答