Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Minecraft:变量类型转换_Java_Variables_Minecraft - Fatal编程技术网

Java:Minecraft:变量类型转换

Java:Minecraft:变量类型转换,java,variables,minecraft,Java,Variables,Minecraft,我已经将问题缩小到以下方面,我需要将字符串转换为项标识符 例如: String str = "pickaxe"; Item pick = str; 这将决定将鹤嘴锄识别为鹤嘴锄。你怎么能做到这一点呢?我想你想用的是 在代码中可以创建对象 Item pickaxe = new Pickaxe(); Hashmap<String, Item> items = new HashMap<String, Item>(); items.add("pickaxe", pickaxe)

我已经将问题缩小到以下方面,我需要将字符串转换为项标识符

例如:

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

这将决定将鹤嘴锄识别为鹤嘴锄。你怎么能做到这一点呢?

我想你想用的是

在代码中可以创建对象

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

通常我会为这种字符串到对象的查找推荐一个枚举,但我也知道在minecraft中有一个巨大的项目列表,它会随着游戏的更新而变化。这意味着将它们放入枚举是一项艰巨的工作

我的建议是:将它们存储在数据库或其他非源代码的地方。然后将其加载到一个结构中,如HashMap或List,第一个结构更容易查找短名称,正如joey.enfield建议的那样。对于一个列表,您必须遍历整个过程才能找到具有匹配名称的项

编辑:


这是我编的一堂又快又脏的课。您应该知道,此代码很可能会生成一个hashmap,该hashmap不包含所有项,因为最有可能的项具有与getItemDisplayName()相同的字符串值,因此item.itemsList[]中的最后一个项将是hashmap中的项。还请注意,如果使用不同的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);
    }
}
import java.util.HashMap;
导入java.util.Map;
导入net.minecraft.item.item;
导入net.minecraft.item.ItemStack;
公共类ItemListByString
{
私有地图项目地图;
私有静态ItemListByString实例=新建ItemListByString();
私有ItemListByString()
{
itemMap=newhashmap();
用于(项:项。项列表)
如果(项!=null)
itemMap.put(item.getItemDisplayName(新的ItemStack(item,1,0)),item);
}
公共项getItemByString(字符串s)
{
返回instance.itemMap.get;
}
}

您必须更加具体才能得到更好的答案。据我所知,您需要枚举吗?项是您编写的类吗?很抱歉问这个问题,但我不知道minecraft api。如果不是你的类别,请告诉我们商品的包装对不起,不够具体。我不做Minecraft的所有项目,只有20个左右。你能详细说明一下枚举吗?你会把items.get(“鹤嘴锄”);将鹤嘴锄作为物品返回?如果您像我在示例开头所示创建对象。老实说,你没有提供任何真实的信息。你在使用minecraft API吗?你是在做一个雷击机的克隆人吗。你到底在做什么?使用minecraft api和forge api
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;
  }  
}
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);
    }
}