Проверка, является ли предмет мечём, топором или луком (в т.ч. из мода)

Версия Minecraft
1.12.2
API
Forge
198
1
24
В моде, который я сейчас делаю, есть возможность зачарить предмет с помощью особого ритуала. Т.е., предмет ложится в ячейку в GUI алтаря, вокруг ставятся определённые блоки, и, если боги к игроку благосклонны, предмет получает зачар. Как наложить зачар - понятно, а вот как определить, является ли предмет мечём, топором или луком, и соответственно наложить "заговор огня" или "горящую стрелу"? Желательно не просто сравнить предмет со ванильными мечами, топорами и луком, а определять и модовые тоже.
 
У меня есть сомнения в том что, данный мод пишешь ты, но вообще если создатель другого мода не лютый костыльщик то обычного

lol:
ItemStack itemstack = получаем айтемстак;
if(itemstack != null && itemstack.getItem() instanceof ItemSword){
    //логика
}

в полне хватит
 
А если кастомные чарки из модов? Сами чарки должны выбирать, могут ли они применяться кконкретному предмету
 
Если чарки не ванильные то их ID будет разным в зависимости от того, какие ещё моды стоят
Какая разница? Ты просто по айди зачарования достаешь объект Enchantment из массива всех зачарований и вызываешь у него метод canApply. Всё.
Если не доходит - ContainerRepair (наковальня) тебе в помощь.

А потом из-за таких вот костылей в модах появляются баги и дюпы которые приходится фиксить работягам на своих проектах :cautious:
 
А потом из-за таких вот костылей в модах появляются баги и дюпы которые приходится фиксить работягам на своих проектах :cautious:
Если бы все делали моды хорошо, то эти работяги не имели бы этой работы. Поэтому ТС надо похвалить, ибо он создает рабочие места)
 
У меня есть сомнения в том что, данный мод пишешь ты, но вообще если создатель другого мода не лютый костыльщик то обычного

lol:
ItemStack itemstack = получаем айтемстак;
if(itemstack != null && itemstack.getItem() instanceof ItemSword){
    //логика
}

в полне хватит
на 1.12 нет null итемстака. Там теперь всегда ItemStack.EMPTY.
И проверяется: !itemstack.isEmpty()
 
Назад
Сверху