我已经将我的问题缩小到以下范围,我需要将一个字符串转换为一个项目标识符。
示例:
String str = "pickaxe";
Item pick = str;这将决定将pick识别为十字叉。你怎么能这样做呢?
发布于 2013-09-24 16:13:57
我想你要用的是一个Hash Map
在您的代码中,您可以创建对象
Item pickaxe = new Pickaxe();
Hashmap<String, Item> items = new HashMap<String, Item>();
items.add("pickaxe", pickaxe);然后,您可以使用以下命令检索项目
items.get("pickaxe");发布于 2013-09-24 16:23:41
通常我会推荐一个枚举来进行这种从字符串到对象的查找,但我也知道在“我的世界”中有一个巨大的项目列表,这些项目会随着游戏的更新而发生变化。这意味着将这些around 370 items放到枚举中是一项大量的工作。
我的建议是:将它们存储在数据库或其他不是您的源码的地方。然后将其加载到HashMap或列表等结构中,第一个结构更容易查找短名称,就像joey.enfield建议的那样。使用list时,您必须遍历整个列表才能找到具有匹配名称的项。
编辑:
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-26 04:37:51
这是我做的一个又快又脏的类。您应该知道,这段代码很可能会生成一个不包含每一项的散列映射,因为最有可能存在的项具有相同的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);
}
}https://stackoverflow.com/questions/18976054
复制相似问题