Toame
我把物品堆强制用字符串的方式储存到了yml里面 有办法根据字符串获取到物品堆么 求大佬解答

故丶梦
本帖最后由 南笙又emo啦 于 2022-7-24 23:52 编辑

自己写方法获取对应的类型,代码示例如下

  1.     public static ItemStack createItem(String display, int amount, String material, byte data, List<String> lore) {
  2.         ItemStack item = new ItemStack(Material.valueOf(material.toUpperCase()));
  3.         MaterialData materialData = new MaterialData(Material.getMaterial(material), data);
  4.         ItemMeta meta = item.getItemMeta();
  5.         List<String> replacedLore = new ArrayList<>();
  6.         item.setAmount(amount);
  7.         meta.setDisplayName(StringUtils.replaceColorChar(display));
  8.         for (String line : lore) {
  9.             line = StringUtils.replaceColorChar(line);
  10.             replacedLore.add(line);
  11.         }
  12.         meta.setLore(replacedLore);
  13.         item.setDurability(data);
  14.         item.setItemMeta(meta);
  15.         return item;
  16.     }
复制代码

具体使用方法如下

  1.                              for (String path : GemItemConfiguration.yamlConfiguration.getConfigurationSection("GemItem").getKeys(false)) {
  2.                                  if (path.equals(strings[1])) {
  3.                                      String gemName = GemItemConfiguration.yamlConfiguration.getString("GemItem." + path + ".Display");
  4.                                      String gemMaterial = GemItemConfiguration.yamlConfiguration.getString("GemItem." + path + ".Material");
  5.                                      byte gemData = (byte) GemItemConfiguration.yamlConfiguration.getInt("GemItem." + path + ".Data");
  6.                                      List<String> gemLore = GemItemConfiguration.yamlConfiguration.getStringList("GemItem." + path + ".Lore");
  7.                                      ItemStack gemItem = ItemUtils.createItem(gemName, 1, gemMaterial, gemData, gemLore);commandSender.sendMessage(StringUtils.replaceColorChar(GemMessageConfiguration.getPrefix() + GemMessageConfiguration.getItemElement("GetGem"))
  8.                                              .replace("{name}", strings[1]).replace("{amount}", "1"));
  9.                                      player.getInventory().addItem(gemItem);
  10.                                      break;
  11.                                  }
复制代码

以下为我配置文件,GemItemSetting.yml的内容

  1. GemItem:
  2.   宝石项目:
  3.     Display: '&a宝石项目 - 测试宝石'
  4.     Material: 'RED_SANDSTONE'
  5.     Data: 0
  6.     Lore:
  7.       - '&a测试的宝石项目'
  8.       - '&a镶嵌后可增加攻击力'
复制代码

再见阳光
(ItemStack) getList(路径) 或者 (ArrayList<ItemStack>) get(路径)

美味的曲奇
怎么进去怎么出来

光说 '物品堆强制用字符串的方式储存到了yml里面 ' 没说怎么储存的,
是yml序列化,是nbt序列化,还是硬set进去的

Neige
按你这个情况,应该不是自己写的序列化方法。如果你是通过set的方式把一个ItemStack塞到了配置里,那你可以通过getItemStack从配置里再把这个物品掏出来

ImCur_
bukkit配置文件实例有个方法 getItemStack(String s)
如果是用set存进去的 可以直接get出来

怎么存的 怎么读取

147125403
直接序列反序列 或者重写自己物品类的反序列化方法