init (accidently [doxxed myself](https://github.com/JannisX11/blockbench/issues/1322))
This commit is contained in:
commit
cd8cc594ec
20 changed files with 2363 additions and 0 deletions
98
scripts/nameplate.lua
Normal file
98
scripts/nameplate.lua
Normal file
|
@ -0,0 +1,98 @@
|
|||
local g = require("scripts.libs.gradient")
|
||||
|
||||
---@class ColoredText
|
||||
---@field text string
|
||||
---@field color string
|
||||
|
||||
---@param name string
|
||||
---@param gradient Gradient
|
||||
---@param count number number of gradients to be present in the span
|
||||
---@param phase_shift number shift of the gradient
|
||||
---@returns string
|
||||
local function render_gradient_name(name, gradient, count, phase_shift)
|
||||
local string_width = client.getTextWidth(name) / count;
|
||||
local string_width_chars = {};
|
||||
for i = 1, #name do
|
||||
string_width_chars[i] = client.getTextWidth(name:sub(i, i))
|
||||
end
|
||||
|
||||
---@type ColoredText[]
|
||||
local result = {}
|
||||
|
||||
local acc = 0;
|
||||
for i = 1, #name do
|
||||
local offset = acc + string_width_chars[i];
|
||||
local color = gradient:at((offset / string_width) + phase_shift);
|
||||
acc = offset
|
||||
|
||||
result[i] = {
|
||||
text = name:sub(i, i),
|
||||
color = color:toHex(true, false)
|
||||
}
|
||||
end
|
||||
|
||||
return toJson(result)
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@param gradient Gradient
|
||||
---@param nameplates Nameplate | Nameplate[] where to use the animated name
|
||||
---@param count number number of gradients to be present in the span
|
||||
---@param phase_shift_rate number how fast to shift the gradient
|
||||
---@returns fun():void # function to unregister
|
||||
local function animate_gradient_name(name, gradient, nameplates, count, phase_shift_rate)
|
||||
if type(nameplates) ~= "table" then
|
||||
nameplates = {nameplates}
|
||||
end
|
||||
|
||||
local phase_shift = 0;
|
||||
local function render()
|
||||
if client.isPaused() then
|
||||
return
|
||||
end
|
||||
|
||||
phase_shift = phase_shift + phase_shift_rate
|
||||
|
||||
local result = render_gradient_name(name, gradient, count, phase_shift)
|
||||
for _, nameplate in pairs(nameplates) do
|
||||
nameplate:setText(result)
|
||||
end
|
||||
end
|
||||
|
||||
events.render:register(render)
|
||||
return function ()
|
||||
events.render:remove(render)
|
||||
end
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@param gradient Gradient
|
||||
---@param nameplates Nameplate | Nameplate[] where to use the static name
|
||||
---@param count number number of gradients to be present in the span
|
||||
---@param phase_shift number shift of the gradient
|
||||
local function static_gradient_name(name, gradient, nameplates, count, phase_shift)
|
||||
if type(nameplates) ~= "table" then
|
||||
nameplates = {nameplates}
|
||||
end
|
||||
|
||||
local result = render_gradient_name(name, gradient, count, phase_shift);
|
||||
for _, nameplate in pairs(nameplates) do
|
||||
nameplate:setText(result)
|
||||
end
|
||||
end
|
||||
|
||||
local name = "reidlab!"
|
||||
local gradient_count = 1
|
||||
local gradient = g.SimpleGradientBuilder.new()
|
||||
:add({ "#d87b5a", "#e0ab91" })
|
||||
:reflect(false)
|
||||
:build()
|
||||
|
||||
animate_gradient_name(name, gradient, {
|
||||
nameplate.ENTITY,
|
||||
nameplate.LIST
|
||||
}, gradient_count, 0.005)
|
||||
|
||||
static_gradient_name(name, gradient, {
|
||||
nameplate.CHAT
|
||||
}, gradient_count, 0)
|
Loading…
Add table
Add a link
Reference in a new issue