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

Стартап [ПЕРЕВОД] Собственные модели предметов в 1.9 и выше

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

?

Переводить ли статьи со spigotmc дальше?

Голосование закрыто 3 июн 2017.
  1. Да — это нужно русскому сообществу разработчиков.

    3 голосов
    75,0%
  2. Да — статью на русском читать легче, чем на английском.

    0 голосов
    0,0%
  3. Нет — это уже неактуально и является "баяном".

    0 голосов
    0,0%
  4. Нет — подавляющее большинство разработчиков знают английский.

    0 голосов
    0,0%
  5. Да — другое.

    1 голосов
    25,0%
  6. Нет — другое.

    0 голосов
    0,0%
Можно выбрать сразу несколько вариантов.
  1. Автор темы
    Dexel

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

    Баллы:
    76
    Оригинал

    ЦЕЛЬ
    Одна из самых классных вещей в 1.9 заключается в том, что предметы могут иметь различные модели в зависимости от их прочности. Предположительно, таким образом вы можете показать, что предметы изношены, но в то же время мы можем использовать это, чтобы добавить тысячи новых предметов в Minecraft!

    Например, всё, что показано здесь, является деревянной мотыгой с разными значениями прочности:
    [​IMG]

    КОД
    Эта часть банально проста. Возьмите предмет с прочностью (например, инструмент) и создайте ItemStack для этого предмета с установленной прочностью. Давайте для примера используем прочность 1:
    Код:
    ItemStack customItem = new ItemStack(Material.WOOD_HOE, 1, (short)1);
    Этот код даст нам немного поломанную деревянную мотыгу. Как-то так:
    [​IMG]
    Но, естественно, мы не хотим, чтобы показывалась полоска прочности предмета, и не хотим, чтобы прочность изменялась, когда предмет используется как инструмент. К счастью, для этого есть тег!

    Код:
    ItemStack customItem = new ItemStack(Material.WOOD_HOE, 1, (short)1);
    ItemMeta meta = customItem.getItemMeta();
    meta.setUnbreakable(true); // Для версий 1.11 и выше
    customItem.setItemMeta(meta);
    Этот код даёт нам следующий предмет:
    [​IMG]

    Хорошо, больше нет полоски прочности! Но если мы создаём свой предмет, вероятно, мы не захотим всего этого "ванильного" описания. К счастью, и для этого есть API! Вы можете добавить флаг предмету на скрытие описания, как-то так:
    Код:
    ItemStack customItem = new ItemStack(Material.WOOD_HOE, 1, (short)1);
    ItemMeta meta = customItem.getItemMeta();
    meta.setUnbreakable(true);
    meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE);
    customItem.setItemMeta(meta);
    [​IMG]

    Прекрасно, теперь у нас есть предмет с установленной прочностью, которая не будет меняться, и в описании нет ничего странного.

    На этом часть кода заканчивается! Возможно, вы захотите установить название предмета или добавить описание, но я оставлю это вам.

    Этот предмет готов стать собственным предметом вашей мечты... ему просто нужна новая текстура.


    РЕСУРСПАК
    Здесь всё немного сложнее. Если у вас нет опыта в создании ресурспака, это будет довольно сложно. Создайте новую пустую папку и положите в неё файл pack.mcmeta, он будет выглядеть как-то так:
    Код:
    {
      "pack": {
        "pack_format": 3,
        "description": "Официальный Магический Ресурспак от elMakers"
      }
    }
    !!! Для Minecraft 1.10 и ниже используйте pack_format: 2

    Затем добавьте все подпапки, идущие вплоть до "assets/minecraft/models/item".

    В папке предмета создайте новый файл под названием wooden_hoe.json. Он будет "хранилищем" для всех ваших собственных предметов. Он говорит клиенту, какие модели использовать при определённой прочности деревянной мотыги.

    Этот файл будет выглядеть как-то так:


    Код:
    {
      "parent": "item/handheld",
      "textures": {
        "layer0": "items/wood_hoe"
      },
      "overrides": [
        {"predicate": {"damaged": 0, "damage": 0.01666666666667}, "model": "item/my_cool_custom_item"}
      ]
    }
    Хорошо, давайте на этом остановимся.

    Мы перезаписываем деревянную мотыгу, но исходя из базовой версии. "parent" и "textures" указывают клиенту использовать мотыгу по умолчанию. Это значит, что мотыга без повреждений будет нормально смотреться.

    Теперь для новой вещи - блок "overrides" позволяет вам указывать разные модели для использования в зависимости от определённых параметров предмета. Эти параметры называются "predicades", в нашем случае сфокусируемся на параметре "damage".

    Модель предмета будет варьироваться в зависимости от повреждения в виде какого-то процента от 0 до 1. Таким образом, значение "0.016666" исходит из соотношения "1/60" - потому что я хочу применить свою модель для мотыги с повреждением 1, а максимальная прочность деревянной мотыги - 60.

    Посетите Minecraft вики, чтобы увидеть список прочностей предметов: https://minecraft-ru.gamepedia.com/Мотыга


    Вы можете добавлять сколько угодно моделей, вплоть до максимальной прочности предмета - просто для каждой делайте "x/60".

    Также вы можете использовать этот сайт, чтобы автоматически сгенерировать шаблон указанного вида инструмента без математических рассчётов:
    http://accidentalgames.com/media/durabilityModels.php

    Сохранение "ванильных" предметов
    Если вы хотите по-прежнему использовать "ванильные" предметы с работающей прочностью, это можно реализовать!
    Добавьте ещё одну запись в ваш файл с моделью, чтобы конец этого файла в итоге выглядел примерно так:
    Код:
    {
      "parent": "item/handheld",
      "textures": {
        "layer0": "items/wood_hoe"
      },
      "overrides": [
        {"predicate": {"damaged": 0, "damage": 0.01666666666667}, "model": "item/my_cool_custom_item"},
        {"predicate": {"damaged": 1, "damage": 0}, "model": "item/wooden_hoe"}
      ]
    }
    Это заставит повреждённые версии предмета продолжить использовать основную модель. Обратите внимание, если вы использовали этот JSON-генератор, вам придётся изменить последнюю запись - она должна обращаться к названию модели, например, wooden_hoe вместо wood_hoe.

    И, наконец, положите модель предмета в папку "item" в ресурспаке, в данном случае модель будет называться "my_cool_custom_item.json". (Создание собственных моделей предметов не является целью данного туториала, я думаю, в Интернете полно видеоуроков по этой теме. Или, в конце концов, можете использовать Cubik).

    Заархивируйте ваш ресурспак в формате .zip в папку <minecraft>/resourcepacks. После этого вы сможете поставить этот ресурспак и увидеть ваш предмет!
    [​IMG]

    Если что-то не получилось, посмотрите структуру ресурспака из этого туториала на GitHub:
    https://github.com/elBukkit/MagicPlugin/tree/master/Magic/src/resource-pack/default

    ФИНАЛЬНЫЕ АККОРДЫ
    Когда у вас всё получилось, вы можете рассмотреть следующие вещи:
    • Чем выше максимальная прочность предмета, тем больше моделей вы сможете сделать. У алмазной мотыги максимальная прочность - 1,562 (!)
    • Когда настало время отправлять ресурспак игрокам, вам нужно будет где-то разместить его! Я думаю, Dropbox подойдёт, просто получите прямую ссылку и добавьте её в файл server.properties.
    • Если вы собираетесь обновлять ресурспак, имейте в виду, что вам также придётся добавить хэш SHA1 в ваш server.properties. Или для каждого "обновления" переименовывать ресурспак. Иначе клиенты не станут заново загружать его.
    • В 1.9 есть ещё одна крутая вещь - предметы можно носить как шапки, и они будут показываться в игре! Для этого нужно добавить блок отображения "head" в json-файл модели. Короче, https://github.com/elBukkit/MagicPl...ecraft/models/item/custom/magic_hat.json#L587
    Я надеюсь, эта статья поможет вам. Просьба в личных сообщениях указать на смысловые или ошибки в переводе.
     
    Последнее редактирование: 27 май 2017
  2. demkom

    demkom Guest

    Знал про эту тему уже давно, узнал почти сразу как вышла 1.9.
    В целом неплохо, но жаль прочность убивается. А обрабатывать её вручную не хочется...
    По переводу нареканий вроде нету.
     
  3. alexandrage

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

    Баллы:
    173
    Не актуально же для школодюпосирвиров. Там обычно гибридпротокол 1.8++. Школота быстрее повесится, чем обновит сервер до 1.9 и выше и уберет протоколсапорт или виаверсион.
     
  4. Автор темы
    Dexel

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

    Баллы:
    76
    Всегда искренне надеюсь, что школота или поумнеет (UPD: как произошло со мной - года 3 назад я сидел только на 1.7.2, потом только на 1.5.2, потом только на 1.8, а уже потом пошёл на новизну), или бросит эту тему.
     
    Последнее редактирование: 27 май 2017
  5. _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    А возможно сделать разные текстуры в зависимости от дисплейнейма (кастомного)?
     
  6. thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Даже если от лора. Только не знаю как.
     
  7. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Оптифайн
     
  8. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    В этом деле нужно, чтобы у игрока был OptiFine. Нагугли ресурспак ItemBound, там много предметов, да и в целом понятно что-как делать.
     
  9. _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Окей, тогда... Возможно ли как-то не пускать игрока на сервер (без модов, spigot), если у него нет Optifine?
     
  10. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Ставить Cauldron/Sponge как ядро (извращение, правда?)
     
  11. _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Да)
     
  12. thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    А это без оптифайна делается?
     
  13. thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Можно свой клиент делать, и проверку файлов. Но нахрена правда? Это если там ZombieMod/Шутеры, но уже надо онлайн большой(
     
  14. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Сама тема создана без оптифайна. Но у ванильного майна возможностей ресурспаком изменить модель - мало.
     
  15. thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Вообщем если это понадобится для минигеймов надо делать лаунчер. Это говно.
     
  16. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Можно попробовать написать sp614x чтобы добавил свой плагин-мод канал. Тогда бы и проверку есть ли мод на клиенте можно делать.
    (хз как работает кастомный канал, просто идея)
     
  17. thematdev

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

    Баллы:
    46
    Имя в Minecraft:
    thematdev
    Я не даун, знаю)
     

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