Создание
Первая, "живая", функциональная сущность

Шаблон
Здесь указаны все возможные настройки, которые есть при создании НИПа
val npcID by NPCEntity.creating {
// Базовые параметры
name = "НИП"
model = "mod_id:path/to/models.gltf"
pos = pos(0.5, 64.0, 0.5)
// Дополнительные параметры
textures["gltf_models_model_layer_0_gltf"] =
"mod_id:path/to/texture.png"
// или
skin("Hlebobulka_")
animations[AnimationType.IDLE] = "idleDance"
attributes = Attributes(
"generic.movement_speed" to 2f
)
size = 1f to 2f
showName = false
transform = Transform(
tX = 1f, tY = 1f, tZ = 1f,
rX = 0f, rY = 180f, rZ = 0f,
sX = 1f, sY = 1f, sZ = 1f
)
swirchHeadRot = false
world = "overworld"
rotation = vec(-45f, 15f)
subModel = SubModel(
model = "mod_id:path/to/model.gltf",
layers = mutableListOf(
AnimationLayer(
animation = "animationName",
layerMode = LayerMode.ADD,
playMode = PlayMode.LOOPED,
speed = 1f
)
)
)
}
Если вы вдруг что-то не совсем поняли, то можете попросить помощи у "Виталика" ниже.
- У меня есть вопросы!
- Параметр: name
- Параметр: model
- Параметр: textures
- Параметр: animations
- Параметр: attributes
- Параметр: size
- Параметр: showName
- Параметр: transform
- Параметр: switchHeadRot
- Параметры: world, pos и rotation
- subModel
Если вдруг остались вопросы по настройкам, то эти вкладки созданы, чтобы решить их!
name: String
------------
name = "Имя"
Данное имя будет отображаться над головой НПС (как у игроков ники) и в чате, когда он что-то говорит.
name = "НПС"
model: ResourceLocation
-----------------------------------
models: "mod_id:path/to/model.gltf"
Указываешь путь до модели в формате 'ResourceLocation'
/* Модель лежит в папке 'assets/hollowengine/models/entity/mexican.gltf' */
model = "hollowengine:models/entity/mexican.gltf"
/* или */
/* Модель лежит в папке 'assets/city/petrov.gltf' */
model = "city:humans/petrov.gltf"
textures: HashMap<String, ResourceLocation>
----------------------------------------------------
textures["textureName"] = "mod_id:path/to/texture.png"
В [] (квадратных скобках) ты указываешь имя текстуры, которая есть на модели.
Все текстуры можно узнать через команду /hollowengine model <путь к модели>.
'/Команды':

После указывает путь к текстуре в формате ResourceLocation.
animations: HashMap<String, String>
------------------------------------------------
animations[AnimationType.TYPE] = "animationName"
AnimationType - тип анимации. Есть несколько видов и посмотреть можно здесь.
animationName - название анимации, котора уже есть в модели.
animations[AnimationType.IDLE] = "levitation"
attributes: Attributes( Map<String, Float> = mapOf() )
------------------------------------------------------
attributes = Attributes( "attributeName" to Float )
attributeName - название атрибута. Узнать можно из команды /attributes <target: Entity> где после вам будет показан список всех существующих атрибутов.
Float - значение силы атрибута.
Вы хотите указать больше 1-го атрибута - пишите через запятую ,!
attributes = Attributes(
"generic.movement_speed" to 2f,
"generic.attack_speed" to 3f
)
size: Map(Float, Float)
-----------------------
size = Float to Float
Размер хитбокса. Ширина, Высота.
size = 2f to 2f
showName: Boolean
-----------------
showName = Boolean
Отвечает за отображение Имени НИПа над его головой.
Если значение стоит true - отображать имя

Если же false - скрывать имя

transform: Transform
------------------------------------------------------------------------------------------------------------------------
transform = Transform(tX: Float, tY: Float, tZ: Float, rX: Float, rY: Float, rZ: Float, sX: Float, sY: Float, sZ: Float)
transform = Transform(
... // Твои параметры
)
Список всех параметров приведёт в таблице:
| X | Y | Z | Тип |
|---|---|---|---|
| tX | tY | tZ | Смещение |
| rX | rY | rZ | Поворот |
| sX | sY | sZ | Размер |
Все значения должны быть типа Float.
transform = Transform(
sX = 0.5f, sZ = 0.24f
)
Хочешь указать больше параметров? Не забывай про ,!
switchHeadRot: Boolean
----------------------
switchHeadRot = Boolean
Может помочь исправить не правильный поворот головы (как у меня к примеру, ай).
Разные программы по-разному рассчитывают поворот объектов/костей.
Так что если вдруг у твоей модели голова поворачивается не в ту сторону, то просто поставить switchHeadRot = true,
а если же наоборот всё хорошо, то не нужно использовать этот параметр.
world: World
pos: BlockPos
rotation: Vec2
--------------
world = String
pos = pos(x: Int, y: Int, z: Int) /* ИЛИ */ pos(x: Double, y: Double, z: Double)
rotation = vec(pitch, yaw)
world:
id измерения, в котором нужно заспавнить НИПа. Пишутся эти id через mod_id:dimenssion_id.
/*
* Если этот мир из Ванильного майнкрафта,
* то не обязательно указывать 'modID',
* можно просто пропустить это и указать только 'dimensionID'
*/
world = "overworld"
// или же
world = "the_nether"
/*
* Если же это измерение из какого-то мода,
* то 'modID' указывать нужно обязательно!
*/
world = "hollowengine:storyteller_world"
Кстати. все dimensionID ты можешь узнать через команду /execute in и там будет список.
pos:
Позиция в мире, на которых появится НПС.
Берём этот pos и записываем в него координаты через метод pos(x: Int, y: Int, z: Int) или pos(x: Double, y: Double, z: Double). Да только 1 тип параметров. Никаких Int, Double, Int и т.д.!
pos = pos(10.354, 64.532, -24.323)
rotation:
Просто повернуть НИПа.
rotation = vec(10f, 24.6f)
Подробнее можно узнать ЗДЕСЬ
Примеры
- Базовый НИП
- Кастомный НИП
Для спавна Базового НПИа хватило бы и одного параметра pos, то будет интереснее если у НИПа будет ещё и своё имя.
val npc by NPCEntity.creating {
name = "НИП"
pos = pos(-9.5, 64.0, 307.5)
}
НПС будет заспавнен с именем "НИП" и на координатах "x: -9.5, y: 64.0, z: 307.5"

Чтобы добиться кастомного уровня, можно использовать больше параметров при настройке НИПа.
val npc by NPCEntity.creating {
name = "НИП"
model = "models:amogus_model.gltf"
animations[AnimationType.IDLE] = "defAnim.walk"
transform = Transform(
sX = 2f, sY = 2f, sZ = 2f
)
pos = pos(-9.5, 64.0, 307.5)
}
НПС будет заспавнен с именем "НИП", со своей моделью, своя стандартная анимация, Видоизменённый и на координатах "x: -9.5, y: 64.0, z: 307.5"
