(+5.305,30.00)

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

Автор: Mr Fobos
Как пользоваться 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();
    1. ТруЪ Плагинщик

      2 января 2024 20:23

      +1

      для модпаков 10/10 мод
      1. Saudade Studio

        2 января 2024 22:32

        0

        Буду надеяться, что его хоть кто-то использовать будет :)
        1. Олдфаги

          3 января 2024 04:18

          -15

          Ну это точно не буду я.
          Потому-что мне не нужен "CraftTweaker" в моём Мод-Паке
          1. Просто хорошие люди

            3 января 2024 13:56

            +2

            Ну не буш и не буш, зачем обозначать это-то?
            1. Просто хорошие люди

              4 января 2024 21:02

              +1

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

                4 января 2024 21:03

                0

                Ты эт про кого?
    2. Просто хорошие люди

      4 января 2024 21:06

      0

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

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

    Название темы
    Статистика
    Последнее сообщение
    НАБОР В ПЕРСОНАЛ

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

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

    Ответов: 15

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

    Ответов: 592