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

Помогите Как добавить в свой рейепт крафта свои предметы

Тема в разделе "Разработка плагинов для новичков", создана пользователем Skeletonfirework, 4 янв 2019.

Метки:
  1. Автор темы
    Skeletonfirework

    Skeletonfirework Ньюби

    Баллы:
    1
    Помогите, как добавить в свой крафт предмет которого нет в ванильном майнкрафте, то есть предмет который был создан с помощью метода:

    ItemStack item = new ItemStack(Material.STICK);
    ItemMeta meta = item.getItemMeta();

    Метод крафта:
    ShapedRecipe s = new ShapedRecipe(item);
    S.shape(new String[] {"A ", "A ", "A "});
    S.setIngredient('A', Material.STICK);
    Bukkit.getserver().addRecipe(s):

    Как в выделеной строке в пункте выбора материала добавить свой предмет, например предмет item?
     
  2. alexandrage

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

    Баллы:
    173
    Код:
        public static void addRecipe(Plugin plugin, ItemStack stack, ItemStack[] istack) {
            ShapedRecipe rc = new ShapedRecipe(new NamespacedKey(plugin, UUID.randomUUID().toString()), stack);
            rc.shape("012", "345", "678");
            for (int i = 0; i < 9; i++) {
                if (istack[i] != null && istack[i].getType() != Material.AIR)
                    rc.setIngredient(String.valueOf(i).toCharArray()[0], istack[i].getType());
            }
            Bukkit.getServer().addRecipe(rc);
        }
     
  3. Автор темы
    Skeletonfirework

    Skeletonfirework Ньюби

    Баллы:
    1
    Пожалуйста, объясните за что отвечает каждая строка
     
  4. alexandrage

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

    Баллы:
    173
    Первый предмет результат, масив сетка крафта. Универсальный метод для заполнения из конфига.
     
  5. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Что за костыли, вместо
    for (int i = 0; i < 9; i++)
    можно прогнать
    for (char c = '0'; c < '9'; c++)
     
  6. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Нет костыльного преобразования цифры в char - String.valueOf(i).toCharArray()[0]
     
  7. Alastar

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

    Баллы:
    173
    > Читаешь книжку про Java
    > Создаешь сайт, ставишь шаблон из паблика, из портфолио только прочитанные книжки по Java
    > Все вокруг теперь пользуют костыли
    > Даже если видишь i++, кричишь, что это костыли, ведь есть ++i
     
  8. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    К чему ты это написал?
     
  9. Alastar

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

    Баллы:
    173
    К твоему высеру
     
  10. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Как сайт и ост. относится к этому?
    Высер тут только твой виден, я за чистоту кода.
     
  11. Alastar

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

    Баллы:
    173
    По твоему цикл по char - это чистый код? МОжет ты еще в плюсах будешь к элементам массива через i[array] обращаться?
     
  12. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    И что же тебя смущает в цикле из чаров?)
     
  13. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    В каком месте char преобразовывается в int? char это численный тип, его можно инкрементить, он не будет преобразовываться при этом в int.
     
  14. Alastar

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

    Баллы:
    173
    Во время чтения это похоже на магию. А никто не любит читать магию, всем нужен понятный код. Первый варик никак не является костылем, просто потому, что он подробнее и понятнее при беглом чтении. Так что оставь свой низкий флекс при себе.
     
  15. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Чет бред написал, никакой магии там нет, нормально се читается, это уже твои комплексы. Даже если там интовый for, то преобразование через String.valueOf(i).toCharArray()[0] это все равно костыль, нужно использовать
    Character.digit(i, 10).
     
  16. alexandrage

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

    Баллы:
    173
    А это варик. Так короче. Сяпки.

    Код:
        public static void addRecipe(Plugin plugin, ItemStack stack, ItemStack[] istack) {
            ShapedRecipe rc = new ShapedRecipe(new NamespacedKey(plugin, UUID.randomUUID().toString()), stack);
            rc.shape("012", "345", "678");
            for (int i = 0; i < 9; i++) {
                if (istack[i] != null && istack[i].getType() != Material.AIR)
                    rc.setIngredient(Character.forDigit(i, 10), istack[i].getType());
            }
            Bukkit.getServer().addRecipe(rc);
        }
     
  17. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну да, forDigit, digit это наоборот из чара в инт.
     

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