331 lines
11 KiB
Lua
331 lines
11 KiB
Lua
christmas = {}
|
|
christmas.players = {}
|
|
christmas.path = minetest.get_modpath("christmas")
|
|
christmas.rewards = {}
|
|
local mod_storage = minetest.get_mod_storage()
|
|
dofile(christmas.path.."/functions.lua" )
|
|
dofile(christmas.path.."/crafting.lua")
|
|
local data = christmas.data
|
|
|
|
|
|
------------------------------------ Craft Items ------------------------------------
|
|
minetest.register_craftitem("christmas:candy_cane", {
|
|
description = "Candy Cane",
|
|
inventory_image = "christmas_candy_cane.png",
|
|
on_use = christmas.eat_candy(1)
|
|
})
|
|
minetest.register_craftitem("christmas:mince_pie", {
|
|
description = "Mince Pie",
|
|
inventory_image = "christmas_mincepie.png",
|
|
on_use = minetest.item_eat(6)
|
|
})
|
|
minetest.register_craftitem("christmas:sugar", {
|
|
description = "Sugar",
|
|
inventory_image = "christmas_sugar.png",
|
|
})
|
|
|
|
minetest.register_craftitem("christmas:gingerbread_man", {
|
|
description = "Gingerbread Man",
|
|
inventory_image = "christmas_gingerbread_man.png",
|
|
on_use = minetest.item_eat(4)
|
|
})
|
|
|
|
minetest.register_craftitem("christmas:bauble_red", {
|
|
description = "Bauble (Red)",
|
|
inventory_image = "christmas_bauble_red.png",
|
|
groups = {tree_bauble=1},
|
|
colour_code = 1,--Future support
|
|
})
|
|
minetest.register_craftitem("christmas:star", {
|
|
description = "Star",
|
|
inventory_image = "christmas_star_inv.png",
|
|
groups = {tree_topper=1},
|
|
})
|
|
|
|
|
|
------------------------------------ Nodes ------------------------------------
|
|
minetest.register_node("christmas:eggnog", {
|
|
description = "Eggnog",
|
|
drawtype = "plantlike",
|
|
tiles = {"christmas_eggnog.png"},
|
|
inventory_image = "christmas_eggnog.png",
|
|
on_use = minetest.item_eat(10),
|
|
groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
|
|
})
|
|
minetest.register_node("christmas:present", {
|
|
description = "Christmas present",
|
|
tiles = {"christmas_present.png"},
|
|
drawtype = "mesh",
|
|
paramtype = "light",
|
|
mesh = "christmas_present.obj",
|
|
groups = {oddly_breakable_by_hand = 3, attached_node = 1},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.3125, -0.5, -0.3125, 0.3125, 0.125, 0.3125},
|
|
}
|
|
},
|
|
on_construct = function(pos, itemstack, placer, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("infotext", "Christmas Present")
|
|
meta:set_string("owner", "")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("main", 1)
|
|
end,
|
|
can_dig = function(pos,player)
|
|
local meta = minetest.get_meta(pos);
|
|
local inv = meta:get_inventory()
|
|
return inv:is_empty("main")
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner", placer:get_player_name() or "")
|
|
meta:set_string("infotext", "Present from ".. meta:get_string("owner"))
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
minetest.after(0.2,
|
|
minetest.show_formspec,
|
|
player:get_player_name(),
|
|
"christmas:present",
|
|
christmas.get_present_formspec(pos))
|
|
end,
|
|
})
|
|
minetest.register_node("christmas:stocking", {
|
|
description = "Christmas Stocking",
|
|
drawtype = "signlike",
|
|
tiles = {"christmas_stocking.png"},
|
|
inventory_image = "christmas_stocking.png",
|
|
paramtype = "light",
|
|
paramtype2 = "wallmounted",
|
|
sunlight_propagates = true,
|
|
selection_box = {
|
|
type = "wallmounted",
|
|
},
|
|
groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 3, attached_node = 1},
|
|
walkable = false,
|
|
on_construct = function(pos, itemstack, placer, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("infotext", "Stocking: No owner")
|
|
meta:set_string("owner", "")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("main", 3)
|
|
end,
|
|
after_place_node = function(pos, player, itemstack, pointed_thing)
|
|
local name = player:get_player_name()
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
local stocking_pos = mod_storage:get_string(name.."_stocking_pos")
|
|
local spos = minetest.string_to_pos(stocking_pos)
|
|
if (spos and minetest.get_node(spos).name ~= "christmas:stocking") or stocking_pos == (nil or "") then
|
|
mod_storage:set_string(name.."_stocking_pos", minetest.pos_to_string(pos))
|
|
elseif spos and minetest.get_node(spos).name == "christmas:stocking" then
|
|
minetest.set_node(pos, {name="air"})
|
|
minetest.chat_send_player(name, "You already have a stocking at: ".. stocking_pos)
|
|
return itemstack
|
|
end
|
|
meta:set_string("infotext", player:get_player_name().."'s Stocking")
|
|
meta:set_string("owner", player:get_player_name())
|
|
local timer = minetest.get_node_timer(pos)
|
|
timer:start(5400)
|
|
end,
|
|
on_destruct = function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
local owner = meta:get_string("owner")
|
|
local stocking_pos = mod_storage:get_string(owner.."_stocking_pos")
|
|
local spos = minetest.string_to_pos(stocking_pos)
|
|
|
|
if minetest.string_to_pos(stocking_pos) == pos then
|
|
mod_storage:set_string(owner.."_stocking_pos", " ")
|
|
end
|
|
end,
|
|
on_timer = function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
local owner = meta:get_string("owner")
|
|
minetest.chat_send_player(owner, "Your stocking has refilled")--Hooray
|
|
local inv = meta:get_inventory()
|
|
inv:set_stack("main", 1, christmas.random_reward())
|
|
inv:set_stack("main", 2, christmas.random_reward())
|
|
inv:set_stack("main", 3, christmas.random_reward())
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
local timer = minetest.get_node_timer(pos)
|
|
local owner = meta:get_string("owner")
|
|
local playerinv = player:get_inventory()
|
|
if player:get_player_name() ~= owner then
|
|
minetest.chat_send_player(player:get_player_name(), "This isn't your stocking")--Imposter!!
|
|
return itemstack
|
|
end
|
|
local inv = meta:get_inventory()
|
|
if inv:is_empty("main") then
|
|
local time = christmas.to_time(math.floor(timer:get_timeout() - timer:get_elapsed()))
|
|
minetest.chat_send_player(owner, "Your stocking is empty. (refill in: "..time..")")--Whyyyyyyy??? 😭
|
|
elseif not inv:is_empty("main") then
|
|
local item1 = inv:get_stack("main", 1)
|
|
playerinv:add_item("main", item1)
|
|
local item2 = inv:get_stack("main", 2)
|
|
playerinv:add_item("main", item2)
|
|
local item3 = inv:get_stack("main", 3)
|
|
playerinv:add_item("main", item3)
|
|
inv:set_stack("main", 1 ,'')
|
|
inv:set_stack("main", 2 ,'')
|
|
inv:set_stack("main", 3 ,'')
|
|
timer:start(5400)
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("christmas:lights", {
|
|
description = "Christmas lights",
|
|
drawtype = "signlike",
|
|
tiles = {
|
|
{
|
|
name = "christmas_lights_animated.png",
|
|
backface_culling = false,
|
|
animation = {
|
|
type = "vertical_frames",
|
|
aspect_w = 16,
|
|
aspect_h = 16,
|
|
length = 2.0,
|
|
},
|
|
},
|
|
},
|
|
inventory_image = "christmas_lights.png",
|
|
wield_image = "christmas_lights.png",
|
|
paramtype = "light",
|
|
paramtype2 = "wallmounted",
|
|
light_source = 3,
|
|
selection_box = {
|
|
type = "wallmounted",
|
|
},
|
|
groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 3, attached_node = 1},
|
|
walkable = false,
|
|
})
|
|
|
|
------------------------------------ Christmas tree ------------------------------------
|
|
minetest.register_node("christmas:tree", {
|
|
description = "Christmas Tree",
|
|
tiles = {
|
|
"christmas_tree_leaves.png"
|
|
},
|
|
inventory_image = "christmas_tree_inv.png",
|
|
drawtype = "mesh",
|
|
paramtype = "light",
|
|
mesh = "christmas_tree.obj",
|
|
groups = {snappy = 2, attached_node = 1},
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = {-0.625, -0.5, -0.625, 0.625, 2, 0.625},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.75, -0.5, -0.75, 0.75, 2.3125, 0.75},
|
|
},
|
|
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
|
local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
|
|
local pos2 = {x=pos.x, y=pos.y+2, z=pos.z}
|
|
local node1 = minetest.get_node(pos1)
|
|
local node2 = minetest.get_node(pos2)
|
|
if node1.name ~= "air" or node2.name ~= "air" then
|
|
minetest.set_node(pos, {name="air"})
|
|
minetest.chat_send_player(placer:get_player_name(), "You need a 3 block tall space to place the tree")
|
|
return itemstack
|
|
end
|
|
end,
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local item = minetest.registered_items[itemstack:get_name()]
|
|
if item.groups.tree_bauble ~= nil then
|
|
local pos2 = {x=pos.x, y=pos.y+1, z=pos.z}
|
|
local name = minetest.get_node(pos2).name
|
|
if minetest.registered_nodes[name].buildable_to then
|
|
minetest.set_node(pos2, {name="christmas:ornament"})
|
|
end
|
|
itemstack:take_item()
|
|
elseif item.groups.tree_topper ~= nil then
|
|
local pos2 = {x=pos.x, y=pos.y+2, z=pos.z}
|
|
local name = minetest.get_node(pos2).name
|
|
if minetest.registered_nodes[name].buildable_to then
|
|
minetest.set_node(pos2, {name="christmas:topper"})
|
|
end
|
|
itemstack:take_item()
|
|
end
|
|
end,
|
|
on_destruct = function(pos)
|
|
local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
|
|
local pos2 = {x=pos.x, y=pos.y+2, z=pos.z}
|
|
local name = minetest.get_node(pos1).name
|
|
local name2 = minetest.get_node(pos2).name
|
|
minetest.after(0.01, function()
|
|
if name == "christmas:ornament" then
|
|
minetest.set_node(pos1, {name="air"})
|
|
minetest.add_item(pos1, "christmas:bauble_red")
|
|
end
|
|
if name2 == "christmas:topper" then
|
|
minetest.set_node(pos2, {name="air"})
|
|
minetest.add_item(pos2, "christmas:star")
|
|
end
|
|
end)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("christmas:ornament", {
|
|
description = "Bauble",
|
|
tiles = {
|
|
"christmas_bauble.png"
|
|
},
|
|
drawtype = "mesh",
|
|
paramtype = "light",
|
|
paramtype2 = "color",
|
|
color = "red",
|
|
mesh = "christmas_tree_balls.obj",
|
|
groups = {not_in_creative_inventory = 1},
|
|
walkable = false,
|
|
pointable = false,
|
|
on_construct = function(pos)
|
|
local npos = {x=pos.x, y=pos.y-1, z=pos.z}
|
|
local name = minetest.get_node(npos).name
|
|
if name ~= "christmas:tree" then
|
|
minetest.set_node(pos, {name="air"})
|
|
end
|
|
end,
|
|
})
|
|
minetest.register_node("christmas:topper", {
|
|
description = "Topper",
|
|
tiles = {
|
|
"christmas_star.png"
|
|
},
|
|
drawtype = "mesh",
|
|
paramtype = "light",
|
|
light_source = 8,
|
|
paramtype2 = "color",
|
|
color = "yellow",
|
|
mesh = "christmas_star.obj",
|
|
groups = {not_in_creative_inventory = 1},
|
|
walkable = false,
|
|
pointable = false,
|
|
on_construct = function(pos)
|
|
local npos = {x=pos.x, y=pos.y-2, z=pos.z}
|
|
local name = minetest.get_node(npos).name
|
|
if name ~= "christmas:tree" then
|
|
minetest.set_node(pos, {name="air"})
|
|
end
|
|
end,
|
|
})
|
|
|
|
|
|
|
|
christmas.register_reward("christmas:lights", {min=1, max=5}, 0.5)
|
|
christmas.register_reward("christmas:candy_cane", {min=3, max=15}, 0.15)
|
|
christmas.register_reward("christmas:eggnog", {min=1, max=3}, 0.15)
|
|
christmas.register_reward("christmas:gingerbread_man", {min=1, max=9}, 0.5)
|
|
christmas.register_reward("christmas:mince_pie", {min=6, max=12}, 0.3)
|
|
christmas.register_reward("christmas:tree", {min=0, max=1}, 0.15)
|
|
christmas.register_reward("christmas:bauble_red", {min=0, max=1}, 0.15)
|
|
christmas.register_reward("christmas:star", {min=0, max=1}, 0.1)
|
|
christmas.register_reward("christmas:sugar", {min=1, max=7}, 0.36)
|
|
christmas.register_reward("christmas:present", {min=1, max=2}, 0.26)
|
|
|
|
|
|
|
|
|