Добавляем новый предмет
Всё ниже написанное пишется в методе 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
.
И если создал предмет с
ID
cool_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"
}