Как создать свою зачарованную книгу? Очень мало инфы в инете

Версия Minecraft
1.7.10
API
Forge
Надо сделать книгу которую можно будет зачарить на шлем, нагрудник, ботинки или штаны и потом моему моду чтоб проверять есть ли этот зачар там, ну тип именно хочу сделать чтоб если на броне есть эта зачарка то в них можно было бы стрейфить комбинацией клавишей, рывки делать тип.

Как создать свою книгу для зачарки желательно со своей текстуркой айтема но не обязательно
 
Решение
Ну во 1, если тебе нужна таже зачарованная книга, но со своей текстурой - попробуй сделать свой Item, который будет наследовать ItemEnchantedBook и переопредели getIconFromDamage, чтобы была своя текстура. Если ещё нужно будет выключить свечение (типо свечение от зачарованности) у книжки - переопределишь на false метод hasEffect.
Во 2, тебе по любому нужно добавить свой энчант. Тут уже немножно костыльно, но не сложно. Сначала стоит понять, что все энчанты хранятся в массиве Enchantment.enchantmentsList, размер которого 256. Из-за других модов там уже может быть превышен размер, по этому с помощь AccessTransformes снимаешь final модификатор и в коде делаешь что-то вроде
Регистрация чара, способ 1:
public static final Enchantment myEnchantment;//Тут будет твой...
окей, допустим создать книгу по туториалам я смог, но как теперь изменить название вместо дефолтного для всех книг, переместить в другую вкладку в креативе (не обязательно)
 
236
4
22
Ну во 1, если тебе нужна таже зачарованная книга, но со своей текстурой - попробуй сделать свой Item, который будет наследовать ItemEnchantedBook и переопредели getIconFromDamage, чтобы была своя текстура. Если ещё нужно будет выключить свечение (типо свечение от зачарованности) у книжки - переопределишь на false метод hasEffect.
Во 2, тебе по любому нужно добавить свой энчант. Тут уже немножно костыльно, но не сложно. Сначала стоит понять, что все энчанты хранятся в массиве Enchantment.enchantmentsList, размер которого 256. Из-за других модов там уже может быть превышен размер, по этому с помощь AccessTransformes снимаешь final модификатор и в коде делаешь что-то вроде
Регистрация чара, способ 1:
public static final Enchantment myEnchantment;//Тут будет твой чар, инициализировать сразу не советую

//Вот этот код где-то в инициализации можно разместить
boolean found = false;
for(int i = 0; i < Enchantment.enchantmentsList.lenght; i++) {
Enchantment e = Enchantment.enchantmentsList[i];
if(e == null) {
//Нашлась не занятая ячейка.
found = true;
myEnchantment = new ....(i, вес[I]чара, тип[/I]чара); //Тут твой класс чара, наследующий Enchantment, т.к. конструктор защищённый
break;
}
}
if(!found) {
//Если не нашлось места - копируешь массив имеющийся с раширением на +1 слот и суёшь в последний слот свой чар
Enchantment[] newArray = new Enchantment[Enchantment.enchantmentsList.lenght + 1];
System.arraycopy(Enchantment.enchantmentsList, 0, newArray, 0, t.length);
myEnchantment = new ....(t.length, вес[I]чара, тип[/I]чара); //Тут твой класс чара, наследующий Enchantment, т.к. конструктор защищённый
//Если будет вопрос по типу, почему мы не положили чар в массив - то ответ: в конструкторе чара объект сам вставится по id конструктора в массив.
}
Регистрация чара, способ 2:
//С помощь Configuration требуешь индекс твоего чара (так многие моды делают)
//А в коде просто сразу статично инициализируешь
public static final Enchantment myEnchantment = new ....(config.getInt("enchantID"), вес[I]чара, тип[/I]чара); //Тут твой класс чара, наследующий Enchantment, т.к. конструктор защищённый;
//Было бы также не плохо перед инициализацией добавить проверки длины массива и его расширение при необходимости, как в первом способе. Также стоит учесть, что если попытаться добавить чар по уже занятому индексу в этом способе - игра крашнется и отобразит 2 чара, которые меж собой конфликтуют по ID.
//

После создания своего чара в своём классе чара переопределяешь методы, например canApply и canApplyTogether, чтобы настроить конфликтуемость чаров (как например удача и шёлк, если ванилу смотреть). Также, по дефолту твой чар будет НЕДОСТУПЕН к наложению на обычную чаренную книгу. По этому либо Enchantment.addToBookList(твой чар);, но в таком случае можно будет чарить обычные книги из ванилы, либо реализуешь свою механику зачара именно твоей книги с помощью ItemТвоейКниги.addEnchantment(айтемКниги, EnchantmentData/в ней уровень чара и сам чар/);

Ну и наконец, чтобы твой чар что-то делал - просто слушаешь ивенты и при каких-либо событиях проверяешь, зачарен ли твой инструмент или что-либо ещё на этот чар через if(EnchantmentHelper.getEnchantmentLevel(myEnchantment.effectId, твой_айтем_для_проверки) > 0) {айтем зачарен, делаем чо-то.}
 
236
4
22
окей, допустим создать книгу по туториалам я смог, но как теперь изменить название вместо дефолтного для всех книг, переместить в другую вкладку в креативе (не обязательно)
Переместить в другую вкладку креатива - опять же создавай свой айтем (как я написал выше) и в конструкторе своего айтема вызови this.setCreativeTab(вкладка_креатива);//Все ванильные вкладки находятся в полях класса CreativeTabs
 
Сверху