首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java: Minecraft:变量类型转换

Java: Minecraft:变量类型转换
EN

Stack Overflow用户
提问于 2013-09-24 16:02:01
回答 3查看 296关注 0票数 0

我已经将我的问题缩小到以下范围,我需要将一个字符串转换为一个项目标识符。

示例:

代码语言:javascript
复制
String str = "pickaxe";
Item pick = str;

这将决定将pick识别为十字叉。你怎么能这样做呢?

EN

回答 3

Stack Overflow用户

发布于 2013-09-24 16:13:57

我想你要用的是一个Hash Map

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

代码语言:javascript
复制
Item pickaxe = new Pickaxe();
Hashmap<String, Item> items = new HashMap<String, Item>();
items.add("pickaxe", pickaxe);

然后,您可以使用以下命令检索项目

代码语言:javascript
复制
items.get("pickaxe");
票数 0
EN

Stack Overflow用户

发布于 2013-09-24 16:23:41

通常我会推荐一个枚举来进行这种从字符串到对象的查找,但我也知道在“我的世界”中有一个巨大的项目列表,这些项目会随着游戏的更新而发生变化。这意味着将这些around 370 items放到枚举中是一项大量的工作。

我的建议是:将它们存储在数据库或其他不是您的源码的地方。然后将其加载到HashMap或列表等结构中,第一个结构更容易查找短名称,就像joey.enfield建议的那样。使用list时,您必须遍历整个列表才能找到具有匹配名称的项。

编辑:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-09-26 04:37:51

这是我做的一个又快又脏的类。您应该知道,这段代码很可能会生成一个不包含每一项的散列映射,因为最有可能存在的项具有相同的getItemDisplayName()字符串值,因此Item.itemsList[]中的最后一个项将是散列映射中的项。还要注意,如果您使用不同的MC语言,它将生成一个不同的列表,因为getItemDisplayName()会获取本地化的字符串。

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18976054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档