Помогите Материал из конфига

  • Автор темы Автор темы AlexMor
  • Дата начала Дата начала

AlexMor

Активный участник
Пользователь
Баллы
76
Здравствуйте, как правильно взять материал из конфига и засунуть его в переменную?
Мне нужно засунуть DAIMOND_HOE:1 в Material mat; .
Мой способ был таков, брать значение String из material в конфиге и с помощью
Material mat = Material.getMaterial(nameMat);
присваивать mat значение Material.DAIMOND_HOE:1
Но при загрузке плагина выдовал ошибку и ругался на строчку
ItemStack item - new ItemStack(mat);
Потом попробовал без ":1" таже фигня, затем решил попробовать не через getMaterial(String) а через getMaterial(int) но ошибку стал выдавать сразу в редакторе :
"
Description Resource Path Location Type
The method getMaterial(int) from the type Material is deprecated Handler.java /RPGinventory/src/ru/alexmor/rpginventory line 32 Java Problem
"
И вот не могу найти ответ, как доставать из конфига материал и присваивать его переменной mat.

Спасибо за внимание.
 
Код:
package Example.sfg;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.enchantments.Enchantment;
import org.*********ventory.ItemFlag;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;

public class Stack {
    private String material;
    private int amount;
    private int date;
    private String customname;
    private List<String> lore;
    private Map<String, Integer> enchant;
    private List<String> flags;
    private boolean unbreak;

    @SuppressWarnings("unchecked")
    public Stack(ConfigurationSection config) {
        this.material = config.getString("material");
        this.amount = config.getInt("amount");
        this.date = config.getInt("date");
        this.customname = config.getString("customname");
        this.lore = (List<String>) config.get("lore");
        for (Map<?, ?> enchs : config.getMapList("enchant")) {
            for (Entry<?, ?> ench : enchs.entrySet()) {
                enchant = new HashMap<String, Integer>();
                enchant.put((String) ench.getKey(), (int) ench.getValue());
            }
        }
        this.flags = (List<String>) config.get("flags");
        this.unbreak = config.getBoolean("unbreak");
    }

    public ItemStack getStack() {
        ItemStack stack = new ItemStack(Material.valueOf(material.toUpperCase()), amount, (short) date);
        ItemMeta meta = stack.getItemMeta();
        if (customname != null) {
            meta.setDisplayName(customname);
        }
        if (lore != null) {
            meta.setLore(lore);
        }
        if (enchant != null) {
            for (String ench : enchant.keySet()) {
                meta.addEnchant(Enchantment.getByName(ench.toUpperCase()), enchant.get(ench), true);
            }
        }
        if (flags != null) {
            for (String flag : flags) {
                Set<ItemFlag> f = meta.getItemFlags();
                f.add(ItemFlag.valueOf(flag));
            }
        }
        if (unbreak) {
            meta.setUnbreakable(true);
        }
        stack.setItemMeta(meta);
        return stack;
    }
}

Код:
  material: "STONE"
  amount: 20
  date: 0
  customname: "Камень"
  lore:
  - "Цена 100"
  enchant:
  - PROTECTION_FIRE: 2
  flags:
  - "HIDE_ATTRIBUTES"
  unbreak: true
 
И почему бы сразу не записать его в конфиг, а не пользоваться твоим, без преувеличения, гениальным кодом?
Как только ваш ItemStack ConfigurationSerializable научится восстанавливать ItemFlag, гениальность кончится. Но в целом ТС-у может и подойдет такой варик, если не надумает юзать тот же HIDE_ATTRIBUTES.
 
Код:
package Example.sfg;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.enchantments.Enchantment;
import org.*********ventory.ItemFlag;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;

public class Stack {
    private String material;
    private int amount;
    private int date;
    private String customname;
    private List<String> lore;
    private Map<String, Integer> enchant;
    private List<String> flags;
    private boolean unbreak;

    @SuppressWarnings("unchecked")
    public Stack(ConfigurationSection config) {
        this.material = config.getString("material");
        this.amount = config.getInt("amount");
        this.date = config.getInt("date");
        this.customname = config.getString("customname");
        this.lore = (List<String>) config.get("lore");
        for (Map<?, ?> enchs : config.getMapList("enchant")) {
            for (Entry<?, ?> ench : enchs.entrySet()) {
                enchant = new HashMap<String, Integer>();
                enchant.put((String) ench.getKey(), (int) ench.getValue());
            }
        }
        this.flags = (List<String>) config.get("flags");
        this.unbreak = config.getBoolean("unbreak");
    }

    public ItemStack getStack() {
        ItemStack stack = new ItemStack(Material.valueOf(material.toUpperCase()), amount, (short) date);
        ItemMeta meta = stack.getItemMeta();
        if (customname != null) {
            meta.setDisplayName(customname);
        }
        if (lore != null) {
            meta.setLore(lore);
        }
        if (enchant != null) {
            for (String ench : enchant.keySet()) {
                meta.addEnchant(Enchantment.getByName(ench.toUpperCase()), enchant.get(ench), true);
            }
        }
        if (flags != null) {
            for (String flag : flags) {
                Set<ItemFlag> f = meta.getItemFlags();
                f.add(ItemFlag.valueOf(flag));
            }
        }
        if (unbreak) {
            meta.setUnbreakable(true);
        }
        stack.setItemMeta(meta);
        return stack;
    }
}

Код:
  material: "STONE"
  amount: 20
  date: 0
  customname: "Камень"
  lore:
  - "Цена 100"
  enchant:
  - PROTECTION_FIRE: 2
  flags:
  - "HIDE_ATTRIBUTES"
  unbreak: true
Спасибо! это гениально!
 
Назад
Верх