Хочешь узнать как пользоваться модом
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();