Java:Minecraft:可变类型转换

时间:2013-09-24 08:02:01

标签: java variables minecraft

我已将问题范围缩小到以下,我需要将String转换为Item Identifyer。

示例:

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

这将决定识别选择作为镐。你怎么能这样做?

3 个答案:

答案 0 :(得分:0)

我认为你想要使用的是Hash Map

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

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

然后您可以使用

检索您的项目
items.get("pickaxe");

答案 1 :(得分: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;
  }  
}

答案 2 :(得分:0)

这是我烹饪的一个快速而又脏的课程。您应该知道此代码很可能会产生一个不包含每个项目的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);
    }
}