feat(mod): scripted HoldMyItems on LuaJ (hand/item/model scripts, addons, vanilla overrides, particles, camera)

Claude-Session: https://claude.ai/code/session_01F1M1Jic1wTSn4igUENynmZ
This commit is contained in:
loki5512344 2026-10-02 09:47:30 +02:00
parent 44353e893c
commit 0504be5b57
Signed by: boba
GPG key ID: 253067914055423B
21 changed files with 750 additions and 139 deletions

View file

@ -0,0 +1,9 @@
-- LoVisual HoldMyItems: поза руки относительно сцены (после hand_pose).
-- Пример: при смене предмета рука чуть "отъезжает" в сторону. Свои флаги ванили:
-- V:cancelEquip(true) отключить ванильный подъём предмета (его заменяет скрипт)
-- V:cancelSwing(true) отключить ванильный свинг
local side = rightArm and 1 or -1
if equipProgress > 0 then
M:moveX(0.12 * equipProgress * side)
M:rotateZ(-10 * equipProgress * side)
end

View file

@ -0,0 +1,7 @@
-- LoVisual HoldMyItems: анимация частей (квадов) модели предмета.
-- animator:rotateX/Y/Z(from, to, deg, px, py, pz) вращение квадов с индексами from..to вокруг pivot (в пикселях)
-- animator:moveX/Y/Z(from, to, pixels), animator:scale(from, to, k, px, py, pz); quadCount = число квадов.
-- Пример: мечи слегка "дышат" клинком.
if I:isSword() and quadCount > 0 then
animator:rotateZ(0, quadCount, M:sin(time * 2.0) * 1.5, 8, 0, 8)
end

View file

@ -16,3 +16,13 @@ end
if usingItem and (I:getUseAction() == 'eat' or I:getUseAction() == 'drink') then
M:rotateZ(M:sin(useDuration * 1.1) * 3)
end
-- искры у зачарованных предметов: Lua-частицы (координаты в системе руки, колбэк tick на каждый тик)
if I:isEnchanted() and M:sin(time * 9) > 0.96 then
particleManager:addParticle({
x = 0.0, y = 0.2, z = -0.3,
vx = 0.0, vy = 0.01, vz = 0.0,
lifetime = 14, size = 0.02, color = 0xFFB66CFF, gravity = -0.001,
tick = function(p) p.size = p.size * 0.96 end
})
end

View file

@ -3341,6 +3341,7 @@
"setting.autorespawn.delay": "Delay",
"module.deathcoords.description": "Sends the coordinates of your latest death to the chat.",
"setting.deathcoords.show_dimension": "Show dimension",
"setting.holdmyitems.always_hands": "Always render both hands",
"setting.holdmyitems.mode": "Mode",
"setting.holdmyitems.mode.option.Dynamics": "Dynamics (Java)",
"setting.holdmyitems.mode.option.Scripts": "Scripts (Lua)",

View file

@ -3136,6 +3136,7 @@
"setting.autorespawn.delay": "Задержка",
"module.deathcoords.description": "Отправляет в чат координаты вашей последней смерти.",
"setting.deathcoords.show_dimension": "Показывать измерение",
"setting.holdmyitems.always_hands": "Всегда рисовать обе руки",
"setting.holdmyitems.mode": "Режим",
"setting.holdmyitems.mode.option.Dynamics": "Динамика (Java)",
"setting.holdmyitems.mode.option.Scripts": "Скрипты (Lua)",

View file

@ -156,8 +156,10 @@
"render.item.EquipmentLayerRendererMixin",
"render.item.ItemFeatureRendererMixin",
"render.item.ItemInHandAlwaysVisibleMixin",
"render.item.model.ItemModelAnimatorMixin",
"render.item.ItemInHandRendererMixin",
"render.level.CameraMixin",
"render.level.CameraScriptMixin",
"render.level.particles.FireworkParticlesStarterMixin",
"render.level.LevelRendererMixin",
"render.level.particles.ParticleManagerMixin",