Создание
Первая, "живая", функциональная сущность
Шаблон
Здесь указаны все возможные настройки, которые есть при создании НИПа
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"