123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- 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)
|