79 lines
1.9 KiB
Lua
79 lines
1.9 KiB
Lua
-- Thanks Minecraft wiki! https://minecraft.wiki/w/Note_Block
|
|
local NOTES = {
|
|
{2^(-12/12), "#77D700"},
|
|
{2^(-11/12), "#95C000"},
|
|
{2^(-10/12), "#B2A500"},
|
|
{2^(-9/12), "#CC8600"},
|
|
{2^(-8/12), "#E26500"},
|
|
{2^(-7/12), "#F34100"},
|
|
{2^(-6/12), "#FC1E00"},
|
|
{2^(-5/12), "#FE000F"},
|
|
{2^(-4/12), "#F70033"},
|
|
{2^(-3/12), "#E8005A"},
|
|
{2^(-2/12), "#CF0083"},
|
|
{2^(-1/12), "#AE00A9"},
|
|
{2^(0/12), "#8600CC"},
|
|
{2^(1/12), "#5B00E7"},
|
|
{2^(2/12), "#2D00F9"},
|
|
{2^(3/12), "#020AFE"},
|
|
{2^(4/12), "#0037F6"},
|
|
{2^(5/12), "#0068E0"},
|
|
{2^(6/12), "#009ABC"},
|
|
{2^(7/12), "#00C68D"},
|
|
{2^(8/12), "#00E958"},
|
|
{2^(9/12), "#00FC21"},
|
|
{2^(10/12), "#1FFC00"},
|
|
{2^(11/12), "#59E800"},
|
|
{2^(12/12), "#94C100"},
|
|
}
|
|
|
|
local NOTE_POSITION_KEY = "pitch_position"
|
|
|
|
local function after_place_node(pos)
|
|
local meta = core.get_meta(pos)
|
|
|
|
meta:set_int(NOTE_POSITION_KEY, #NOTES)
|
|
end
|
|
|
|
local function play_sound(pos)
|
|
local meta = core.get_meta(pos)
|
|
local opts = NOTES[meta:get_int(NOTE_POSITION_KEY)]
|
|
local pitch = opts[1]
|
|
|
|
core.sound_play("pyutest-note", {
|
|
pos = pos,
|
|
gain = 0.5,
|
|
pitch = pitch
|
|
})
|
|
|
|
math.randomseed(os.time())
|
|
core.add_particle({
|
|
texture = "pyutest-note.png^[multiply:"..opts[2],
|
|
pos = pos + vector.new(0, 1, 0),
|
|
velocity = vector.new(0, 0.45, 0),
|
|
expirationtime = 1,
|
|
size = 2,
|
|
vertical = true,
|
|
})
|
|
end
|
|
|
|
PyuTest.make_electricity_device("pyutest_electricity:note_block", "Note Block", {
|
|
choppy = PyuTest.BLOCK_FAST
|
|
}, {"pyutest-note-block.png"}, nil, {
|
|
after_place_node = after_place_node,
|
|
on_rightclick = function (pos, node, clicker)
|
|
local meta = core.get_meta(pos)
|
|
local ppos = meta:get_int(NOTE_POSITION_KEY)
|
|
|
|
if ppos == #NOTES then
|
|
meta:set_int(NOTE_POSITION_KEY, 1)
|
|
else
|
|
meta:set_int(NOTE_POSITION_KEY, ppos + 1)
|
|
end
|
|
|
|
play_sound(pos)
|
|
end
|
|
}, function (pos, node, sender_pos)
|
|
play_sound(pos)
|
|
end)
|