1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Пустота в крафтах

Тема в разделе "Разработка плагинов для новичков", создана пользователем IcedwinterZ, 2 фев 2017.

  1. Автор темы
    IcedwinterZ

    IcedwinterZ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Есть крафт в конфиге

    line1: '0 5 0'
    line2: '0 5 0'
    line1: '5 5 5'

    Но ноль - воздух, а в верстаке то воздух просто так не лежит, т.е крафт не получается, что использовать вместо 0?
     
  2. Mabus

    Mabus Активный участник Пользователь

    Баллы:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    Почему не лежит? =\
     
  3. Автор темы
    IcedwinterZ

    IcedwinterZ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Потому что там null, а не AIR
     
  4. Forest_SD

    Forest_SD Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Forest_SD
    Попробуй только доставай из конфига dirt.shape
    Код:
    ShapedRecipe dirt = new ShapedRecipe(result);
            dirt.shape(
                    "BAB",
                    "BAB",
                    "AAA");
            dirt.setIngredient('A',Material.APPLE);
            dirt.setIngredient('B',Material.AIR);
     
  5. Автор темы
    IcedwinterZ

    IcedwinterZ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    В том то и дело что из воздуха не крафтится... Воздух просто не лежит там
    Код:
    public static void onCraft(int id, String dname, FileConfiguration c, String one, String two, String three){
            List<String> lore = new ArrayList<String>();
            ItemStack item = new ItemStack(Material.getMaterial(id));
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(dname);
            meta.setLore(lore);
            meta.addEnchant(Enchantment.DURABILITY, 1, true);
            item.setItemMeta(meta);
          
            String[] splitOne = one.split(" ");
            id1 = Integer.parseInt(splitOne[0]);
            id2 = Integer.parseInt(splitOne[1]);
            id3 = Integer.parseInt(splitOne[2]);
            String[] splitTwo = two.split(" ");
            id4 = Integer.parseInt(splitTwo[0]);
            id5 = Integer.parseInt(splitTwo[1]);
            id6 = Integer.parseInt(splitTwo[2]);
            String[] splitThree = three.split(" ");
            id7 = Integer.parseInt(splitThree[0]);
            id8 = Integer.parseInt(splitThree[1]);
            id9 = Integer.parseInt(splitThree[2]);
          
            ShapedRecipe r = new ShapedRecipe(item);
            r.shape(new String[] {"ABC","DEF","JHK"});
            r.setIngredient('A', Material.getMaterial(id1));
            r.setIngredient('B', Material.getMaterial(id2));
            r.setIngredient('C', Material.getMaterial(id3));
            r.setIngredient('D', Material.getMaterial(id4));
            r.setIngredient('E', Material.getMaterial(id5));
            r.setIngredient('F', Material.getMaterial(id6));
            r.setIngredient('J', Material.getMaterial(id7));
            r.setIngredient('H', Material.getMaterial(id8));
            r.setIngredient('K', Material.getMaterial(id9));
            Bukkit.addRecipe(r);
        }
    Вот так это работает, выглядит как гавно - правда? Кто поправит?)
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Разве там нет символа пропуска или пробел, где ничего не нужно?
     
  7. Автор темы
    IcedwinterZ

    IcedwinterZ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    А как материалы парсить тогда?
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну ифку поставь да и все, если 0 пропустить.
     
  9. Автор темы
    IcedwinterZ

    IcedwinterZ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Я их как ID храню
     
  10. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Храни рецепты в таком виде
    Код:
    cobble_pickaxe:
        recipe: "ccc; s ; s "
        ingedients:
            c: COBBLESTONE
            s: STICK
        result:
            material: APPLE
            amount: 1
            damage: 0
            name: ""
            lore: []
            enchantaments: []
    В итоге код становится намного короче и проще:
    Код:
    public final void registerCrafts(MemorySection config) {
        MemorySection section;
        for (String key : config.getKeys(false)) {
            section = (MemorySection) config.get(key);
            Material material;
            try {
                material = Material.valueOf(section.getString("result.material"));
            } catch (Exception ex) {
                //Your material is sux
                continue;
            }
            ItemStack result = new ItemStack(
                    material, section.getInt("result.amount"), 
                    (short) section.getInt("result.damage")
            );
            //TODO: ItemMeta
    
            String[] shape = section.getString("recipe").split(";");
            MemorySection ingredients = (MemorySection) section.get("ingredients");
    
            ShapedRecipe recipe = new ShapedRecipe(result);
            recipe.shape(shape);
            for (String character : ingredients.getKeys(false)) {
                try {
                    material = Material.valueOf(ingredients.getString(character));
                } catch (Exception ex) {
                    //Your material is sux
                    continue;
                }
                recipe.setIngredient(character.toCharArray()[0], material);
            }
    
            try {
                Bukkit.addRecipe(recipe);
            } catch (Exception ex) {
                //Ur recipe is sux.
            }
        }
    
     
    Последнее редактирование: 2 фев 2017
  11. Автор темы
    IcedwinterZ

    IcedwinterZ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Ребят, пытаюсь парсить, не понимаю как, натолкните на пример, или дайте код =)
    А, все, понял уже...
     
  12. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Обновил пост.
     
  13. Автор темы
    IcedwinterZ

    IcedwinterZ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    (short) section.getInt("result.damage") Вот так вот дамаг можно в итем записывать?
     
  14. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ну да. Читай доки по ItemStack.
     

Поделиться этой страницей