Как пользоваться SDM Bestiary [Guide]

Как пользоваться SDM Bestiary [Guide]

Хочешь узнать как пользоваться модом SDM Bestiary? Начнём с того, что вам потребуется мод CraftTweaker.

Для начала вам нужно импортировать все пакеты. Я импортирую все, чтобы потом не отвлекаться на это.
import mods.sdm.bestiary.BestiaryUtils;
import mods.sdm.bestiary.api.content.tab.TextTab;
import crafttweaker.api.text.Component;
import mods.sdm.bestiary.api.content.InfoContent;
import mods.sdm.bestiary.api.content.info.HeaderInfo;
import mods.sdm.bestiary.api.content.info.TextInfo;
import mods.sdm.bestiary.api.content.info.ImageInfo;
import mods.sdm.bestiary.api.content.info.ButtonInfo;
import mods.sdm.bestiary.api.content.info.ButtonItemInfo;
import mods.sdm.bestiary.api.content.tab.ItemTab;
import mods.sdm.bestiary.api.content.tab.TextFieldTab;
import mods.sdm.bestiary.api.content.tab.Group;
import mods.sdm.bestiary.api.content.graphics.DrawColor;
import mods.sdm.bestiary.api.content.graphics.DrawReact;
import mods.sdm.bestiary.api.content.info.EntityInfo;


Теперь нам нужно создать вкладку. На данный момент мы можем создать только 2 вида вкладок.
  • Предметная - Вкладка в которой будет отображаться предмет и при наведении будет отображаться он же.
  • Текстовая - Пустая по реализации вкладка. В ней вы должны сами добавлять иконку и отображение при наведении

// new ItemTab(Название, Предмет, ID);
// ID - Нужно будет для создания ссылок на эту вкладку
var itemTab = new ItemTab(Component.literal("Золотой Слиток"), <item:minecraft:gold_ingot>, "goldOre");

//new TextTab(Название, ID)
var textTab = new TextTab(Component.literal("Золотой Слиток"), "goldIngot");


Теперь создадим само окно в котором будет находиться информация при открытии вкладки.
var InfoPanel = new InfoContent(panel => {});


Теперь начинаем создавать контент в этой вкладке.
var InfoPanel = new InfoContent(panel => {
   panel.space = 10;

   //Добавление Заголовка
   panel.addContent(new HeaderInfo(header => {
      //Текст Заголовка
      header.text = Component.literal("Золотой Слиток").withStyle(<constant:minecraft:formatting:gold>);
      //Изменение позиции виджета относительно 0 точки и пробелов
      header.addPos(51, -8);
      //Включает границы для белее удобной настройки
      header.isDrawBackGround = true;
      //Размеры границ
      header.setSize(83, 8);
   }));  

});

  • space - Расстояние отступов. Рекомендую ставить значение равное 0, если хотите создать что-то большее чем строки текста.
  • addContent(content as IInfoContent) - Добавляет виджеты окну.

    Выше мы добавили заголовок, думаю принцип добавления понятен. Чтобы зарегистрировать нашу вкладу, нужно сделать следующие.
    //Добавление окна к вкладке
    textTab.addInfoContent(InfoPanel);
    //Регистрация Вкладки
    BestiaryUtils.createGroup(textTab);


    Теперь я распишу все виджеты которые возможны.

    Чтобы получить иконку у нас есть несколько методов
    BestiaryUtils.createIcon(ResourceLocation id) - Можно вводить путь до текстуры
    BestiaryUtils.createIcon(String id) - Можно вводить путь до текстуры
    BestiaryUtils.createIcon(IItemStack id){


    Изображение
    new ImageInfo(image => {
        //Иконка
        image.icon = BestiaryUtils.createIcon(<item:minecraft:gold_ingot>);
        //Включает границы для белее удобной настройки
        image.isDrawBackGround = false;
        //Размеры
        image.weight = 48;
        image.height = 48;
         //Изменение позиции виджета относительно 0 точки и пробелов
        image.addPos(1,1);
    }));


    Многострочный текст. Позволяет добавлять множество строк текста.
    
    new TextInfo(textInfo => {
       //Добавление строки
       textInfo.addLine(Component.literal("Один из ценнейших материалов, который имеет превосходную"));
       textInfo.addLine(Component.literal("проводимость и магический потенциал."));
       textInfo.addLine(Component.literal("В некоторых измерениях используется как валюта."));
       //Изменение позиции виджета относительно 0 точки и пробелов
       textInfo.addPos(51, -6);
       //Включает границы для белее удобной настройки
       textInfo.isDrawBackGround = false;
       //Размеры границ
       textInfo.setSize(400, 35);
    })
    


    Предметная кнопка. Будет отображаться как предмет.
    
    new ButtonItemInfo(button => {
       //Предмет
       button.item = <item:minecraft:raw_gold>;
       /*
          Суда нужно писать 
          id вкладки на которую будет переключаться при нажатии или URL адрес
       */
       button.clickURL = "goldIngot";
       //Ширина кнопки
       button.w = 70;
       //Высота кнопки
       button.h = 70;
       //Изменение позиции виджета относительно 0 точки и пробелов
       button.addPos(1, -10);
       //Текст который будет отображаться при наведении
       button.componentText.add(<item:minecraft:raw_gold>.hoverName);
       button.componentText.add(Component.literal("Привет"));
    })
    


    Текстовая кнопка, таже что и у вкладок
    
    new ButtonInfo(button => {
       //Текст кнопки
       button.text = Component.literal("Какой-то текст");
       //Иконка которую будет иметь кнопка, можете переделать воздух чтобы было пустое значение
       button.icon = BestiaryUtils.createIcon(<item:minecraft:diamond_sword>);
       /*
          Суда нужно писать 
          id вкладки на которую будет переключаться при нажатии или URL адрес
       */
       button.clickURL = "goldIngot";
       //Ширина кнопки
       button.w = 70;
       //Высота кнопки
       button.h = 70;
       //Изменение позиции виджета относительно 0 точки и пробелов
       button.addPos(1, -10);
    })
    


    Существо. Будет рендерить любое Существо на экране
    
    new EntityInfo(entity => {
       //Существо, в данном случае это ведьма
       entity.entityType = <entitytype:minecraft:witch>;
       //Размер модельки
       entity.size = 20;
       //Изменение позиции виджета относительно 0 точки и пробелов
       entity.addPos(20, 100);
       //Поворот модельки
       entity.yaw = -30;
    })
    


    Отрисовка или же заливка.
    new DrawColor(color => {
       //Цвет, Red, Green, Blue
       color.setColor(44,38,54);
       //Размер
       color.setSize(258,30);
       //Изменение позиции виджета относительно 0 точки и пробелов
       color.addPos(50,14);
    })
    


    Создание обводки
    new DrawReact(color => {
       //Цвет, Red, Green, Blue
       color.setColor(139, 0, 139);
       //Размер
       color.setSize(258,30);
       //Изменение позиции виджета относительно 0 точки и пробелов
       color.addPos(50,14);
    })
    


    Полный код кому нужно
    import mods.sdm.bestiary.BestiaryUtils;
    import mods.sdm.bestiary.api.content.tab.TextTab;
    import crafttweaker.api.text.Component;
    import mods.sdm.bestiary.api.content.InfoContent;
    import mods.sdm.bestiary.api.content.info.HeaderInfo;
    import mods.sdm.bestiary.api.content.info.TextInfo;
    import mods.sdm.bestiary.api.content.info.ImageInfo;
    import mods.sdm.bestiary.api.content.info.ButtonInfo;
    import mods.sdm.bestiary.api.content.info.ButtonItemInfo;
    import mods.sdm.bestiary.api.content.tab.ItemTab;
    import mods.sdm.bestiary.api.content.tab.TextFieldTab;
    import mods.sdm.bestiary.api.content.tab.Group;
    import mods.sdm.bestiary.api.content.graphics.DrawColor;
    import mods.sdm.bestiary.api.content.graphics.DrawReact;
    import mods.sdm.bestiary.api.content.info.EntityInfo;
    
    public class goldResources{
    
        public static goldOre() as void{
            var goldOreGroup = new ItemTab(Component.literal("Рудное Золото"), <item:minecraft:raw_gold>, "goldOre");
            goldOreGroup.setIcon(BestiaryUtils.createIcon(<item:minecraft:raw_gold>));
            var goldOreInfo = new InfoContent(panel => {
                panel.space = 10;
                panel.addContent(new ImageInfo(image => {
                    image.icon = BestiaryUtils.createIcon(<resource:ftbteams:textures/accept.png>);
                    image.isDrawBackGround = false;
                    image.weight = 48;
                    image.height = 48;
                    image.addPos(1,1);
                }));
                panel.addContent(new HeaderInfo(header => {
                    header.text = Component.literal("Рудное Золото.").withStyle(<constant:minecraft:formatting:gold>);
                    header.addPos(51, -8);
                    header.isDrawBackGround = false;
                    header.setSize(83, 8);
                }));  
    
                panel.addContent(new TextInfo(textInfo => {
                    textInfo.addLine(Component.literal("Ресурс который сам по себе не бесполезен."));
                    textInfo.addLine(Component.literal("Чтобы использовать его нужно обработать."));
                    textInfo.addPos(51, -6);
                    textInfo.isDrawBackGround = false;
                    textInfo.setSize(400, 35);
                }));
    
                panel.addContent(new HeaderInfo(header => {
                    header.text = Component.literal("Способ получения").withStyle(<constant:minecraft:formatting:gold>);
                    header.addPos(2, 0);
                    header.isDrawBackGround = false;
                    header.setSize(48, 8);
                })); 
    
                panel.addContent(new ButtonItemInfo(button => {
                    button.item = <item:minecraft:gold_ore>;
                    button.clickURL = "1";
                    button.w = 70;
                    button.addPos(1, 0);
                    button.componentText.add(<item:minecraft:gold_ore>.hoverName);
                }));
                panel.addContent(new ButtonItemInfo(button => {
                    button.item = <item:minecraft:deepslate_gold_ore>;
                    button.clickURL = "1";
                    button.addPos(85, -26);
                    button.componentText.add(<item:minecraft:deepslate_gold_ore>.hoverName);
                }));
                panel.addContent(new HeaderInfo(header => {
                    header.text = Component.literal("Используется").withStyle(<constant:minecraft:formatting:gold>);
                    header.addPos(2, -34);
                    header.isDrawBackGround = false;
                    header.setSize(58, 8);
                })); 
    
                panel.addContent(new ButtonItemInfo(button => {
                    button.item = <item:minecraft:gold_ingot>;
                    button.clickURL = "goldIngot";
                    button.w = 70;
                    button.addPos(1, -35);
                    button.componentText.add(<item:minecraft:gold_ingot>.hoverName);
                }));
                panel.addContent(new ButtonItemInfo(button => {
                    button.item = <item:minecraft:raw_gold_block>;
                    button.clickURL = "1";
                    button.addPos(92, -61);
                    button.componentText.add(<item:minecraft:raw_gold_block>.hoverName);
                }));
    
            });
    
            goldOreGroup.addInfoContent(goldOreInfo);
            BestiaryUtils.createGroup(goldOreGroup);
        }
    
        public static goldIngot() as void{
            var goldOreGroup = new TextTab(Component.literal("Золотой Слиток"), "goldIngot");
            var goldOreInfo = new InfoContent(panel => {
                panel.space = 10;
    
    
                // panel.addContent(new DrawColor(color => {
                //     color.setColor(20,80,20);
                //     color.setSize(400,500);
                //     color.addPos(5,5);
                // }));
                panel.addContent(new DrawColor(color => {
                    color.setColor(44,38,54);
                    color.setSize(258,30);
                    color.addPos(50,14);
                }));
                panel.addContent(new DrawReact(color => {
                    color.setColor(139, 0, 139);
                    color.setSize(258,30);
                    color.addPos(50,14);
                }));
    
                panel.addContent(new ImageInfo(image => {
                    image.icon = BestiaryUtils.createIcon(<item:minecraft:gold_ingot>);
                    image.isDrawBackGround = false;
                    image.weight = 48;
                    image.height = 48;
                    image.addPos(1,1);
                }));
                panel.addContent(new HeaderInfo(header => {
                    header.text = Component.literal("Золотой Слиток").withStyle(<constant:minecraft:formatting:gold>);
                    header.addPos(51, -8);
                    header.isDrawBackGround = false;
                    header.setSize(83, 8);
                }));  
    
                panel.addContent(new TextInfo(textInfo => {
                    textInfo.addLine(Component.literal("Один из ценнейших материалов, который имеет превосходную"));
                    textInfo.addLine(Component.literal("проводимость и магический потенциал."));
                    textInfo.addLine(Component.literal("В некоторых измерениях используется как валюта."));
                    textInfo.addPos(51, -6);
                    textInfo.isDrawBackGround = false;
                    textInfo.setSize(400, 35);
                }));
    
                panel.addContent(new HeaderInfo(header => {
                    header.text = Component.literal("Способ получения").withStyle(<constant:minecraft:formatting:gold>);
                    header.addPos(2, -10);
                    header.isDrawBackGround = false;
                    header.setSize(48, 8);
                })); 
    
                panel.addContent(new ButtonItemInfo(button => {
                    button.item = <item:minecraft:raw_gold>;
                    button.clickURL = "goldOre";
                    button.w = 70;
                    button.addPos(1, -10);
                    button.componentText.add(<item:minecraft:raw_gold>.hoverName);
                }));
                panel.addContent(new HeaderInfo(header => {
                    header.text = Component.literal("Используется").withStyle(<constant:minecraft:formatting:gold>);
                    header.addPos(2, -18);
                    header.isDrawBackGround = false;
                    header.setSize(58, 8);
                })); 
    
                panel.addContent(new ButtonItemInfo(button => {
                    button.item = <item:minecraft:golden_sword>;
                    button.clickURL = "1";
                    button.w = 70;
                    button.addPos(1, -19);
                    button.componentText.add(<item:minecraft:golden_sword>.hoverName);
                }));
                panel.addContent(new ButtonItemInfo(button => {
                    button.item = <item:minecraft:golden_pickaxe>;
                    button.clickURL = "1";
                    button.addPos(92, -45);
                    button.componentText.add(<item:minecraft:golden_pickaxe>.hoverName);
                }));
    
            });
            goldOreGroup.addInfoContent(goldOreInfo);
            BestiaryUtils.createGroup(goldOreGroup);
        }
    
        public static test() as void{
            var groupGP = new Group(group => {
                group.component = Component.literal("Hello");
                group.id = "testID";
            });
            var goldOreGroup = new TextTab(Component.literal("У меня своё название"), "sdmTeam");
            goldOreGroup.group = groupGP;
            var goldOreInfo = new InfoContent(panel => {
                panel.space = 0;
    
                panel.addContent(new EntityInfo(entity => {
                    entity.entityType = <entitytype:minecraft:witch>;
                    entity.size = 20;
                    entity.addPos(20, 100);
                    entity.yaw = -30;
                }));
    
                panel.addContent(new EntityInfo(entity => {
                    entity.entityType = <entitytype:minecraft:witch>;
                    entity.size = 20;
                    entity.addPos(50, 100);
                    entity.yaw = 30;
                }));
    
                panel.addContent(new ImageInfo(image => {
                    image.icon = BestiaryUtils.createIcon(<item:minecraft:diamond_sword>.withTag({Enchantments: [{lvl: 1, id: "minecraft:knockback"}]}));
                    image.isDrawBackGround = false;
                    image.weight = 48;
                    image.height = 48;
                    image.addPos(1,1);
                }));
                panel.addContent(new HeaderInfo(header => {
                    header.text = Component.literal("test").withStyle(<constant:minecraft:formatting:gold>);
                    header.addPos(51, 1);
                    header.isDrawBackGround = false;
                    header.setSize(83, 8);
                }));  
    
                panel.addContent(new TextInfo(textInfo => {
                    textInfo.addLine(Component.literal("Один из ценнейших материалов, который имеет превосходную"));
                    textInfo.addLine(Component.literal("проводимость и магический потенциал."));
                    textInfo.addLine(Component.literal("В некоторых измерениях используется как валюта."));
                    textInfo.addPos(51, 10);
                    textInfo.isDrawBackGround = false;
                    textInfo.setSize(400, 39);
                }));
    
            });
            goldOreGroup.addInfoContent(goldOreInfo);
            BestiaryUtils.createGroup(goldOreGroup);
        }
    
    
    
        public static init() as void{
            BestiaryUtils.isHideTittle(true);
            BestiaryUtils.setTittle(Component.literal("Привет это заголовок !"));
            goldOre();
            goldIngot();
            test();
        }
    }
    
    goldResources.init();


    Голосуй за новость:
    (+5.305,30.00)
    • Просмотров: 520
    • Комментариев: 7
  • Рекомендуемое для Вас:

    1. ТруЪ Плагинщик
      Зарегистрирован: 28.07.2023
      Репутация
      (+238.02380.0)
      Xarta | Пользователь offline | (2 января 2024 20:23) | Комментариев: 259 | Новостей: 12 |
      • +1

      для модпаков 10/10 мод
      -----------------------------------------------------------------------------
      Шоколадные конфеты являются самым мощным известным на данный момент нейростимулятором


      1. Saudade Studio
        Зарегистрирован: 16.02.2022
        Репутация
        (+18.918,90.0)
        Mr Fobos | Пользователь offline | (2 января 2024 22:32) | Комментариев: 25 | Новостей: 8 |
        • 0

        Буду надеяться, что его хоть кто-то использовать будет :)
        -----------------------------------------------------------------------------
        Глава SDM Team


        1. Олдфаги
          Зарегистрирован: 16.08.2022
          Репутация
          (+64.833,1-31.7)
          OneCatPlaton | Пользователь offline | (3 января 2024 04:18) | Комментариев: 467 | Новостей: 10 |
          • -6

          Ну это точно не буду я.
          Потому-что мне не нужен "CraftTweaker" в моём Мод-Паке
          -----------------------------------------------------------------------------
          Единственный нормальный человек, который против таких русских...
          Которые ТЕБЯ оскорбляют и унижают!


          1. Просто хорошие люди
            Зарегистрирован: 19.06.2021
            Репутация
            (+627.3624,2-3.1)
            cat1967 | Пользователь offline | (3 января 2024 13:56) | Комментариев: 971 | Новостей: 5 |
            • +2

            Ну не буш и не буш, зачем обозначать это-то?
            -----------------------------------------------------------------------------
            ▶▸▶ RuBeta - Сервер Beta 1.7.3 с самодельными модами ◀◂◀


            1. Просто хорошие люди
              Зарегистрирован: 20.12.2022
              Репутация
              (+24.823,3-1.5)
              Reliq | Пользователь offline | (4 января 2024 21:02) | Комментариев: 45 | Новостей: 3 |
              • +1

              Злой и ворчливый он как дед, че с него взять то...


              1. Просто хорошие люди
                Зарегистрирован: 19.06.2021
                Репутация
                (+627.3624,2-3.1)
                cat1967 | Пользователь offline | (4 января 2024 21:03) | Комментариев: 971 | Новостей: 5 |
                • 0

                Ты эт про кого?
                -----------------------------------------------------------------------------
                ▶▸▶ RuBeta - Сервер Beta 1.7.3 с самодельными модами ◀◂◀


    2. Просто хорошие люди
      Зарегистрирован: 20.12.2022
      Репутация
      (+24.823,3-1.5)
      Reliq | Пользователь offline | (4 января 2024 21:06) | Комментариев: 45 | Новостей: 3 |
      • 0

      cat1967, про платона)

    Для написания комментария зарегистрируйся на сайте, это займет всего пару минут, голосуй за новости, зарабатывай репутацию.

    Последние сообщения с форума

    Название темы Автор Статистика Последнее сообщение
    Давайте тряснем прошлым!

    Тема в разделе: Новости

    zubkanov

    Просмотров: 183

    Ответов: 2

    Автор: cat1967

    Сегодня, 05:30

    Низкий фпс на 1.20.4 фабрик с содиумом.

    Тема в разделе: Техническая поддержка сайта

    JacksonPts

    Просмотров: 441

    Ответов: 2

    Автор: JacksonPts

    Вчера, 23:19

    Age of Knights: Exilon | 1.16.5 | RP | Средневековье

    Тема в разделе: Проекты

    shahy

    Просмотров: 110

    Ответов: 1

    Автор: DutyFrity

    Вчера, 22:41

    Форумная игра "Слово на последнюю букву"

    Тема в разделе: Форумные игры

    Смит 3.0

    Просмотров: 2369

    Ответов: 32

    Автор: DutyFrity

    Вчера, 22:41

    Как скомпилировать мод

    Тема в разделе: Моддинг

    soyali

    Просмотров: 5414

    Ответов: 7

    Автор: DutyFrity

    Вчера, 22:37