mirror of
https://git.minetest.land/MineClone2/MineClone2.git
synced 2025-01-09 01:57:29 +01:00
96 lines
2.7 KiB
Lua
96 lines
2.7 KiB
Lua
-- Firework Star
|
|
core.register_craft({ -- temporary
|
|
type = "shapeless",
|
|
output = "vl_fireworks:firework_star",
|
|
recipe = {"mcl_mobitems:gunpowder", "mcl_core:clay_lump"}
|
|
})
|
|
core.register_craft({ -- temporary
|
|
type = "shapeless",
|
|
output = "vl_fireworks:firework_star",
|
|
recipe = {"mcl_mobitems:gunpowder", "mcl_core:clay_lump", "mcl_fire:fire_charge"}
|
|
})
|
|
core.register_craft({ -- temporary
|
|
type = "shapeless",
|
|
output = "vl_fireworks:firework_star",
|
|
recipe = {"mcl_mobitems:gunpowder", "mcl_core:clay_lump", "mcl_end:crystal"}
|
|
})
|
|
|
|
local function craft_star(itemstack, player, old_grid)
|
|
if itemstack:get_name() ~= "vl_fireworks:firework_star" then return end
|
|
local size = 1
|
|
|
|
-- analyze the recipe used
|
|
for _, item in pairs(old_grid) do
|
|
if item:get_name() == "mcl_fire:fire_charge" then
|
|
size = 2
|
|
break
|
|
end
|
|
if item:get_name() == "mcl_end:crystal" then
|
|
size = 3
|
|
break
|
|
end
|
|
end
|
|
|
|
local effect = {
|
|
fn = "generic",
|
|
size = size
|
|
}
|
|
itemstack:get_meta():set_string("vl_fireworks:star_effect", core.serialize(effect))
|
|
tt.reload_itemstack_description(itemstack)
|
|
return itemstack
|
|
end
|
|
core.register_craft_predict(craft_star)
|
|
core.register_on_craft(craft_star)
|
|
|
|
-- Firework Rocket
|
|
local function register_firework_crafts()
|
|
local r1 = {"mcl_core:paper"}
|
|
local r2 = table.copy(r1)
|
|
table.insert(r2, "vl_fireworks:firework_star") -- TODO replace with a loop or such to allow more stars
|
|
for i=1, 3 do
|
|
table.insert(r1, "mcl_mobitems:gunpowder")
|
|
table.insert(r2, "mcl_mobitems:gunpowder")
|
|
core.register_craft({
|
|
type = "shapeless",
|
|
output = "vl_fireworks:rocket 3",
|
|
recipe = r1,
|
|
})
|
|
core.register_craft({
|
|
type = "shapeless",
|
|
output = "vl_fireworks:rocket 3",
|
|
recipe = r2,
|
|
})
|
|
end
|
|
end
|
|
register_firework_crafts()
|
|
|
|
local function craft_firework(itemstack, player, old_grid)
|
|
if itemstack:get_name() ~= "vl_fireworks:rocket" then return end
|
|
local gp = 0 -- gunpowder
|
|
local stars = {}
|
|
|
|
-- analyze the recipe used
|
|
for _, item in pairs(old_grid) do
|
|
if item:get_name() == "mcl_mobitems:gunpowder" then gp = gp + 1 end
|
|
if item:get_name() == "vl_fireworks:firework_star" then
|
|
local effect = item:get_meta():get("vl_fireworks:star_effect")
|
|
or core.serialize({fn="generic"})
|
|
table.insert(stars, effect)
|
|
end
|
|
end
|
|
|
|
-- determine duration and force from the amount of gunpowder used
|
|
local tbl = vl_fireworks.firework_def._vl_fireworks_std_durs_forces[gp]
|
|
local meta = itemstack:get_meta()
|
|
meta:set_float("vl_fireworks:duration", tbl[1])
|
|
meta:set_int("vl_fireworks:force", tbl[2])
|
|
|
|
-- write star effects into metadata
|
|
meta:set_string("vl_fireworks:stars", core.serialize(stars))
|
|
|
|
tt.reload_itemstack_description(itemstack)
|
|
return itemstack
|
|
end
|
|
core.register_craft_predict(craft_firework)
|
|
core.register_on_craft(craft_firework)
|