Добавляем новый предмет

Всё ниже написанное пишется в методе init():
fun init() {
// Тут всё ниже написанное //
}
Создание регистратора предметов
Для начала нужно создать регистратор, чтоб в последующем создавать новые предметы и добавлять их в игру.
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries
val ITEMS = DefferedRegister.create(ForgeRegistries.ITEMS, modId: String)
modId- это куда будет добавлятся предмет. Можно вписать сюда"hollowengine"и тогда все предметы будут из модаHollowEngine.
Создание предмета
Финальная реuистрация всех предметов
Теперь для регистрации всех созданных предметов в конце приписываем следующее:
ITEMS.register(MOD_BUS)
Ресурсы для предмета
Модель
Теперь если вам вдруг не понравился красивый и сочый куб с фиолетово-чёрными четверть
кадратиками, то нужно поместить модель с именем, который вы указали в скрипте newItemId сюда:
assets/<modID>/models/item/<newItemId>.json, где за место<modId>должна стоять папка с именем, который вы указали при создании регистратора.
Если регистраторе указан
best_mod:DefferedRegister.create(ForgeRegistries.ITEMS, "best_mod")то за место
modId- ставлюbest_mod:assets/best_mod/models/item.
И если создал предмет с
IDcool_item:ITEMS.register("cool_item") {...}то имя модели должно быть именно
cool_item.json:assets/best_mod/models/item/cool_item.json.
Текстура
Текстуру вы можеет размещать где угодно, всё потому что путь к текстуре указывается в файле
модели предмета. Так что если вдруг модель встала, а текстуры нету (вы всё равно выдете
фиолетово-чёрные четверть квадратики на модели) - то проверье, что текстура правильно определила
свои META-данные:

Если вдруг META-данные вдруг не соответствуют, то сначала сохраните текстуру там, где вам
нужно, а уже после уже - сохраните модель.
Если и после META-данные не изменились, то придётся вам изменять вручную.
Имя: Убедитесь что имя текстуры, совпадает с именем файла текстуры,
Папка: Убедитесь что папка указана правильно, где находита текстура (путь указывается относительно папки
modId),
Пространство имён: это
modId. Убедитесь что оно указано правильно и совпадает с указаннымmodIdкоторый вы указали в регистратореDefferedRegister.
Результат (Пример)
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack
import net.minecraft.world.entity.player.Player
import net.minecraft.world.InteractionHand
import net.minecraft.world.InteractionResultHolder
import net.minecraft.world.level.Level
import net.minecraft.network.chat.Component
import ru.hollowhorizon.hollowengine.common.tabs.HOLLOWENGINE_TAB
fun init() {
val ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, "test")
ITEMS.register("amogus") {
object: Item(Item.Properties()
.stacksTo(8)
.tab(HOLLOWENGINE_TAB)
) {
override fun use(
pLevel: Level,
pPlayer: Player,
pUseHand: InteractionHand
): InteractionResultHolder<ItemStack> {
if(pLevel.isClientSide && pUseHand == InteractionHand.MAIN_HAND)
pPlayer.sendSystemMessage(Component.literal("*Писк*"))
return super.use(pLevel, pPlayer, pUseHand)
}
}
}
ITEMS.register(MOD_BUS)
}

Перевод предмета

Если вас вдруг не устраивает такое имя предмета, то это легко решается.
Создайте файл
ru_ru.json- для Русского языка, или(и)en_us.json- для Англиского языка по следующему пути:assets/<modId>/lang/*и впишите в эти файлы следующее:lang/ru_ru.json и lang/en_us.json{
"item.<modId>.<newItemId>": "<TranslationText>"
}Где за место
<modID>- вставтеidвашего мода (в моём случает - этоtest) и за место<newItemId>-idпредмета, который вы добавили (в моём случае - этоamogus).

У меня получилось так:
В ru_ru.json{
"item.test.amogus": "Амогус"
}В en_us.json{
"item.test.amogus": "Amogus"
}