Upload
59
LICENSE.TXT
Normal file
@ -0,0 +1,59 @@
|
||||
License of source code
|
||||
----------------------
|
||||
|
||||
The MIT License (MIT)
|
||||
Copyright (C) 2019 Extex
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
software and associated documentation files (the "Software"), to deal in the Software
|
||||
without restriction, including without limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more details:
|
||||
https://opensource.org/licenses/MIT
|
||||
|
||||
|
||||
Licenses of media (texture)
|
||||
--------------------------------------
|
||||
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
Copyright (C) 2019 Extex
|
||||
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format.
|
||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
|
||||
Under the following terms:
|
||||
|
||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||
that suggests the licensor endorses you or your use.
|
||||
|
||||
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
||||
your contributions under the same license as the original.
|
||||
|
||||
No additional restrictions — You may not apply legal terms or technological measures that
|
||||
legally restrict others from doing anything the license permits.
|
||||
|
||||
Notices:
|
||||
|
||||
You do not have to comply with the license for elements of the material in the public
|
||||
domain or where your use is permitted by an applicable exception or limitation.
|
||||
No warranties are given. The license may not give you all of the permissions necessary
|
||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||
rights may limit how you use the material.
|
||||
|
||||
For more details:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
68
crafting.lua
Normal file
@ -0,0 +1,68 @@
|
||||
local depends = {}
|
||||
depends.default = minetest.get_modpath("default")
|
||||
depends.farming = minetest.get_modpath("farming")
|
||||
depends.wool = minetest.get_modpath("wool")
|
||||
depends.dye = minetest.get_modpath("dye")
|
||||
|
||||
if depends.default then
|
||||
if depends.farming then
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "christmas:mince_pie 3",
|
||||
recipe = {
|
||||
"default:blueberries",
|
||||
"farming:flour",
|
||||
"default:apple",
|
||||
"default:blueberries",
|
||||
"christmas:sugar"
|
||||
},
|
||||
})
|
||||
end
|
||||
minetest.register_craft({
|
||||
output = "christmas:present",
|
||||
recipe = {
|
||||
{"default:paper","default:paper","default:paper"},
|
||||
{"default:paper","","default:paper"},
|
||||
{"default:paper","default:paper","default:paper"},
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "default:paper 8",
|
||||
recipe = {
|
||||
{"christmas:present"},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
|
||||
if depends.wool then
|
||||
minetest.register_craft({
|
||||
output = "christmas:stocking",
|
||||
recipe = {
|
||||
{"","wool:white","wool:white"},
|
||||
{"default:gold_ingot","wool:red","wool:red"},
|
||||
{"wool:red","wool:red","wool:red"},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
if depends.dye then
|
||||
minetest.register_craft({
|
||||
output = "christmas:candy_cane 12",
|
||||
recipe = {
|
||||
{"dye:red","christmas:sugar","dye:white"},
|
||||
{"christmas:sugar","dye:white","christmas:sugar"},
|
||||
{"christmas:sugar","dye:red",""},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "christmas:tree",
|
||||
recipe = {
|
||||
{"group:leaves","group:leaves","group:leaves"},
|
||||
{"group:leaves","group:leaves","group:leaves"},
|
||||
{"group:leaves","group:tree","group:leaves"},
|
||||
},
|
||||
})
|
BIN
crafting.png
Normal file
After Width: | Height: | Size: 45 KiB |
4
depends.txt
Normal file
@ -0,0 +1,4 @@
|
||||
farming?
|
||||
default?
|
||||
wool?
|
||||
dye?
|
146
functions.lua
Normal file
@ -0,0 +1,146 @@
|
||||
local function xplayer(player)
|
||||
if not player:is_player() then
|
||||
return
|
||||
end
|
||||
local name = player:get_player_name()
|
||||
return christmas.players[name]
|
||||
end
|
||||
|
||||
function christmas.get_present_formspec(pos)--Taken from default chest
|
||||
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
|
||||
local formspec =
|
||||
"size[8,9]" ..
|
||||
"list[nodemeta:" .. spos .. ";main;3.5,2.5;1,1;]" ..
|
||||
"list[current_player;main;0,4.85;8,1;]" ..
|
||||
"list[current_player;main;0,6.08;8,3;8]" ..
|
||||
"listring[nodemeta:" .. spos .. ";main]" ..
|
||||
"listring[current_player;main]"
|
||||
return formspec
|
||||
end
|
||||
|
||||
function christmas.to_time(time)
|
||||
local remaining = time % 86400
|
||||
remaining = remaining % 3600
|
||||
local minutes = math.floor(remaining/60)
|
||||
remaining = remaining % 60
|
||||
local seconds = remaining
|
||||
if (minutes < 10) then
|
||||
minutes = "0" .. tostring(minutes)
|
||||
end
|
||||
if (seconds < 10) then
|
||||
seconds = "0" .. tostring(seconds)
|
||||
end
|
||||
answer = minutes..':'..seconds
|
||||
return answer
|
||||
end
|
||||
|
||||
function christmas.register_reward(item, quantity, rarity)
|
||||
table.insert(christmas.rewards, {item=item, quantity=quantity, rarity=rarity})
|
||||
end
|
||||
|
||||
function christmas.random_reward()--Adapted from Dungeontest room selection "dungeon_rooms.random_roomdata"
|
||||
local pool = christmas.rewards
|
||||
|
||||
local candidates = {}
|
||||
local raresum = 0
|
||||
|
||||
for i=1, #pool do
|
||||
local reward = pool[i]
|
||||
table.insert(candidates, pool)
|
||||
raresum = raresum + reward.rarity
|
||||
end
|
||||
|
||||
local rarepick = math.random() * raresum
|
||||
local rarecount = 0
|
||||
|
||||
for c=1, #candidates do
|
||||
local rewards = candidates[c]
|
||||
rarecount = rarecount + christmas.rewards[c].rarity
|
||||
local q = christmas.rewards[c].quantity
|
||||
local quantity = math.random(q.min, q.max)
|
||||
if rarecount >= rarepick then
|
||||
--return christmas.rewards[c].item
|
||||
return ItemStack(christmas.rewards[c].item.." "..quantity)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function christmas.eat_candy(hp_change, replace_with_item)
|
||||
return function(itemstack, user, pointed_thing)
|
||||
local name = user:get_player_name()
|
||||
local p = xplayer(user)
|
||||
christmas.players[name].candy = p.candy +1
|
||||
|
||||
if p.candy == 8 then
|
||||
p.time = 60
|
||||
p.hud.ui = user:hud_add({
|
||||
hud_elem_type = "image",
|
||||
position = {x = 0.2, y = 0.2},
|
||||
offset = {x = 0, y = 0},
|
||||
text = "christmas_powerup_ui.png",
|
||||
scale = { x = 10, y = 10},
|
||||
alignment = { x = 0, y = 0 },
|
||||
})
|
||||
p.hud.icon = user:hud_add({
|
||||
hud_elem_type = "image",
|
||||
position = {x = 0.2, y = 0.2},
|
||||
offset = {x = 0, y = 0},
|
||||
text = "christmas_candy_cane.png",
|
||||
scale = { x = 10, y = 10},
|
||||
alignment = { x = 0, y = 0 },
|
||||
})
|
||||
p.hud.time = user:hud_add({
|
||||
hud_elem_type = "text",
|
||||
position = {x = 0.2, y = 0.2},
|
||||
offset = {x = 0, y = 0},
|
||||
text = "SUGAR RUSH!!\n"..christmas.to_time (p.time),
|
||||
number = 0xffffff,
|
||||
scale = { x = 10, y = 10},
|
||||
alignment = { x = 0, y = 0 },
|
||||
})
|
||||
end
|
||||
if p.time > 0 then
|
||||
p.time = p.time + 3
|
||||
end
|
||||
return minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
christmas.players[name] = {}
|
||||
christmas.players[name].candy = 0
|
||||
christmas.players[name].hud = {}
|
||||
christmas.players[name].time = 0
|
||||
end)
|
||||
|
||||
local t = 0
|
||||
minetest.register_globalstep (function(dtime)
|
||||
t = t + dtime
|
||||
if t > 1 then
|
||||
t = 0
|
||||
end
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
local p = xplayer(player)
|
||||
if p.time > 0 and t > 1-dtime then
|
||||
p.time = p.time - 1
|
||||
player:hud_change(p.hud.time, "text", "SUGAR RUSH!!\n~~"..christmas.to_time(p.time).."~~")
|
||||
elseif math.floor(p.time) == 1 then
|
||||
p.candy = 0
|
||||
end
|
||||
if p.time > 0 then
|
||||
player:set_physics_override({
|
||||
speed = 2.5,
|
||||
})
|
||||
end
|
||||
--minetest.chat_send_all(p.candy)
|
||||
if p.time == 0 then
|
||||
player:set_physics_override({
|
||||
speed = 1,
|
||||
})
|
||||
player:hud_remove(p.hud.ui)
|
||||
player:hud_remove(p.hud.icon)
|
||||
player:hud_remove(p.hud.time)
|
||||
end
|
||||
end
|
||||
end)
|
330
init.lua
Normal file
@ -0,0 +1,330 @@
|
||||
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",
|
||||
"christmas_present_top.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)
|
||||
local leftover1 = playerinv:add_item("main", item1)
|
||||
local item2 = inv:get_stack("main", 2)
|
||||
local leftover2 = playerinv:add_item("main", item2)
|
||||
local item3 = inv:get_stack("main", 3)
|
||||
local leftover3 = playerinv:add_item("main", item3)
|
||||
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)
|
||||
|
||||
|
||||
|
||||
|
2
mod.conf
Normal file
@ -0,0 +1,2 @@
|
||||
name = christmas
|
||||
description = Mod that adds festive christmas items to minetest.
|
80
models/christmas_present.obj
Normal file
@ -0,0 +1,80 @@
|
||||
# Blender v2.70 (sub 0) OBJ File: ''
|
||||
# www.blender.org
|
||||
o model
|
||||
v 0.312500 0.125000 0.312500
|
||||
v 0.312500 0.125000 -0.312500
|
||||
v -0.312500 0.125000 -0.312500
|
||||
v -0.312500 0.125000 0.312500
|
||||
v 0.312500 -0.500000 -0.312500
|
||||
v 0.312500 -0.500000 0.312500
|
||||
v -0.312500 -0.500000 0.312500
|
||||
v -0.312500 -0.500000 -0.312500
|
||||
v -0.062194 0.119289 0.002570
|
||||
v -0.062194 0.139334 -0.154991
|
||||
v 0.062194 0.139334 -0.154991
|
||||
v 0.062194 0.119289 0.002570
|
||||
v -0.062194 0.240666 -0.094237
|
||||
v -0.062194 0.260711 -0.251798
|
||||
v 0.062194 0.260711 -0.251798
|
||||
v 0.062194 0.240666 -0.094237
|
||||
v 0.062194 0.119289 -0.002570
|
||||
v 0.062194 0.139334 0.154991
|
||||
v -0.062194 0.139334 0.154990
|
||||
v -0.062194 0.119289 -0.002570
|
||||
v 0.062194 0.240666 0.094238
|
||||
v 0.062194 0.260711 0.251798
|
||||
v -0.062194 0.260711 0.251797
|
||||
v -0.062194 0.240666 0.094237
|
||||
v -0.060931 0.120726 0.002517
|
||||
v -0.060931 0.140363 -0.151842
|
||||
v 0.060931 0.140363 -0.151842
|
||||
v 0.060931 0.120726 0.002517
|
||||
v -0.060931 0.239636 -0.092323
|
||||
v -0.060931 0.259274 -0.246682
|
||||
v 0.060931 0.259274 -0.246682
|
||||
v 0.060931 0.239636 -0.092323
|
||||
v 0.060931 0.120726 -0.002517
|
||||
v 0.060931 0.140363 0.151842
|
||||
v -0.060931 0.140363 0.151842
|
||||
v -0.060931 0.120726 -0.002518
|
||||
v 0.060931 0.239636 0.092323
|
||||
v 0.060931 0.259274 0.246682
|
||||
v -0.060931 0.259274 0.246682
|
||||
v -0.060931 0.239636 0.092323
|
||||
vt 0.000000 0.000000
|
||||
vt 0.500000 0.000000
|
||||
vt 0.500000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 1.000000 -0.000000
|
||||
vt 1.000000 1.000000
|
||||
vt 0.999999 -0.000001
|
||||
vt 1.000001 0.999999
|
||||
vt 0.500001 1.000001
|
||||
vt 0.499999 0.000001
|
||||
vt 0.700000 0.900000
|
||||
vt 0.700000 0.600000
|
||||
vt 0.800000 0.600000
|
||||
vt 0.800000 0.900000
|
||||
s off
|
||||
f 1/1 2/2 3/3 4/4
|
||||
f 5/1 6/2 7/3 8/4
|
||||
f 1/3 6/2 5/5 2/6
|
||||
f 7/7 4/8 3/9 8/10
|
||||
f 8/7 3/8 2/9 5/10
|
||||
f 6/7 1/8 4/9 7/10
|
||||
f 14/11 15/12 11/13 10/14
|
||||
f 16/14 13/11 9/12 12/13
|
||||
f 9/14 10/11 11/12 12/13
|
||||
f 16/11 15/12 14/13 13/14
|
||||
f 22/11 23/12 19/13 18/14
|
||||
f 24/14 21/11 17/12 20/13
|
||||
f 17/14 18/11 19/12 20/13
|
||||
f 24/11 23/12 22/13 21/14
|
||||
f 30/11 26/12 27/13 31/14
|
||||
f 32/13 28/14 25/11 29/12
|
||||
f 25/14 28/11 27/12 26/13
|
||||
f 32/11 29/12 30/13 31/14
|
||||
f 38/11 34/12 35/13 39/14
|
||||
f 40/13 36/14 33/11 37/12
|
||||
f 33/14 36/11 35/12 34/13
|
||||
f 40/11 37/12 38/13 39/14
|
36
models/christmas_star.obj
Normal file
@ -0,0 +1,36 @@
|
||||
# Blender v2.70 (sub 0) OBJ File: 'christmas_tree.blend'
|
||||
# www.blender.org
|
||||
o Cube_Cube.001
|
||||
v -0.139980 0.202010 -0.002398
|
||||
v -0.143371 0.400000 0.195563
|
||||
v -0.139979 0.597990 -0.002398
|
||||
v -0.136588 0.400000 -0.200359
|
||||
v 0.139979 0.202010 0.002398
|
||||
v 0.136588 0.400000 0.200359
|
||||
v 0.139980 0.597990 0.002398
|
||||
v 0.143371 0.400000 -0.195563
|
||||
v 0.000000 0.260000 0.197990
|
||||
v -0.197990 0.260000 0.000000
|
||||
v -0.000000 0.260000 -0.197990
|
||||
v 0.197990 0.260000 -0.000000
|
||||
v 0.000000 0.540000 0.197990
|
||||
v -0.197990 0.540000 0.000000
|
||||
v -0.000000 0.540000 -0.197990
|
||||
v 0.197990 0.540000 -0.000000
|
||||
vt 0.000000 0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
s off
|
||||
f 5/1 6/2 2/3 1/4
|
||||
f 6/1 7/2 3/3 2/4
|
||||
f 7/1 8/2 4/3 3/4
|
||||
f 8/1 5/2 1/3 4/4
|
||||
f 1/1 2/2 3/3 4/4
|
||||
f 8/1 7/2 6/3 5/4
|
||||
f 13/1 14/2 10/3 9/4
|
||||
f 14/1 15/2 11/3 10/4
|
||||
f 15/1 16/2 12/3 11/4
|
||||
f 16/1 13/2 9/3 12/4
|
||||
f 9/1 10/2 11/3 12/4
|
||||
f 16/1 15/2 14/3 13/4
|
5469
models/christmas_tree.obj
Normal file
184
models/christmas_tree_balls.obj
Normal file
@ -0,0 +1,184 @@
|
||||
# Blender v2.70 (sub 0) OBJ File: ''
|
||||
# www.blender.org
|
||||
o Cube.001_Cube.002
|
||||
v 0.745683 -0.680000 0.585688
|
||||
v 0.745683 -0.680000 0.745688
|
||||
v 0.585683 -0.680000 0.745688
|
||||
v 0.585683 -0.680000 0.585688
|
||||
v 0.745683 -0.520000 0.585688
|
||||
v 0.745683 -0.520000 0.745688
|
||||
v 0.585683 -0.520000 0.745688
|
||||
v 0.585683 -0.520000 0.585688
|
||||
v 0.585687 -0.680000 -0.745683
|
||||
v 0.745687 -0.680000 -0.745683
|
||||
v 0.745687 -0.680000 -0.585683
|
||||
v 0.585687 -0.680000 -0.585683
|
||||
v 0.585687 -0.520000 -0.745683
|
||||
v 0.745687 -0.520000 -0.745683
|
||||
v 0.745687 -0.520000 -0.585683
|
||||
v 0.585687 -0.520000 -0.585683
|
||||
v -0.745684 -0.680000 -0.585686
|
||||
v -0.745684 -0.680000 -0.745686
|
||||
v -0.585684 -0.680000 -0.745686
|
||||
v -0.585684 -0.680000 -0.585686
|
||||
v -0.745684 -0.520000 -0.585686
|
||||
v -0.745684 -0.520000 -0.745686
|
||||
v -0.585684 -0.520000 -0.745686
|
||||
v -0.585684 -0.520000 -0.585687
|
||||
v -0.778823 -0.680000 0.665685
|
||||
v -0.665686 -0.680000 0.552548
|
||||
v -0.552549 -0.680000 0.665685
|
||||
v -0.665686 -0.680000 0.778822
|
||||
v -0.778823 -0.520000 0.665685
|
||||
v -0.665686 -0.520000 0.552548
|
||||
v -0.552549 -0.520000 0.665685
|
||||
v -0.665686 -0.520000 0.778822
|
||||
v -0.353555 0.520000 0.240414
|
||||
v -0.240418 0.520000 0.353552
|
||||
v -0.353556 0.520000 0.466688
|
||||
v -0.466693 0.520000 0.353551
|
||||
v -0.353555 0.680000 0.240414
|
||||
v -0.240418 0.680000 0.353552
|
||||
v -0.353556 0.680000 0.466688
|
||||
v -0.466693 0.680000 0.353551
|
||||
v 0.240415 0.520000 0.353555
|
||||
v 0.353552 0.520000 0.240418
|
||||
v 0.466689 0.520000 0.353556
|
||||
v 0.353551 0.520000 0.466692
|
||||
v 0.240415 0.680000 0.353555
|
||||
v 0.353552 0.680000 0.240418
|
||||
v 0.466689 0.680000 0.353556
|
||||
v 0.353551 0.680000 0.466692
|
||||
v 0.353554 0.520000 -0.240415
|
||||
v 0.240418 0.520000 -0.353552
|
||||
v 0.353555 0.520000 -0.466689
|
||||
v 0.466692 0.520000 -0.353551
|
||||
v 0.353554 0.680000 -0.240415
|
||||
v 0.240418 0.680000 -0.353552
|
||||
v 0.353555 0.680000 -0.466689
|
||||
v 0.466692 0.680000 -0.353552
|
||||
v -0.240415 0.520000 -0.353554
|
||||
v -0.353553 0.520000 -0.240417
|
||||
v -0.466689 0.520000 -0.353555
|
||||
v -0.353552 0.520000 -0.466692
|
||||
v -0.240415 0.680000 -0.353554
|
||||
v -0.353553 0.680000 -0.240417
|
||||
v -0.466689 0.680000 -0.353555
|
||||
v -0.353552 0.680000 -0.466692
|
||||
v 0.720000 -0.180000 0.080000
|
||||
v 0.720000 -0.180000 -0.080000
|
||||
v 0.880000 -0.180000 -0.080000
|
||||
v 0.880000 -0.180000 0.080000
|
||||
v 0.720000 -0.020000 0.080000
|
||||
v 0.720000 -0.020000 -0.080000
|
||||
v 0.880000 -0.020000 -0.080000
|
||||
v 0.880000 -0.020000 0.080000
|
||||
v -0.080001 -0.180000 0.880000
|
||||
v -0.080001 -0.180000 0.720000
|
||||
v 0.079999 -0.180000 0.720000
|
||||
v 0.079999 -0.180000 0.880000
|
||||
v -0.080001 -0.020000 0.880000
|
||||
v -0.080001 -0.020000 0.720000
|
||||
v 0.079999 -0.020000 0.720000
|
||||
v 0.079999 -0.020000 0.880000
|
||||
v -0.720000 -0.180000 -0.080001
|
||||
v -0.720000 -0.180000 0.079999
|
||||
v -0.880000 -0.180000 0.079998
|
||||
v -0.880000 -0.180000 -0.080002
|
||||
v -0.720000 -0.020000 -0.080001
|
||||
v -0.720000 -0.020000 0.079999
|
||||
v -0.880000 -0.020000 0.079998
|
||||
v -0.880000 -0.020000 -0.080002
|
||||
v 0.080002 -0.180000 -0.720000
|
||||
v -0.079998 -0.180000 -0.720000
|
||||
v -0.079998 -0.180000 -0.880000
|
||||
v 0.080002 -0.180000 -0.880000
|
||||
v 0.080002 -0.020000 -0.720000
|
||||
v -0.079998 -0.020000 -0.720000
|
||||
v -0.079998 -0.020000 -0.880000
|
||||
v 0.080002 -0.020000 -0.880000
|
||||
vt 0.000000 1.000000
|
||||
vt -0.000000 0.000000
|
||||
vt 1.000000 -0.000000
|
||||
vt 1.000000 1.000000
|
||||
vt 0.999999 1.000001
|
||||
vt 1.000001 0.000001
|
||||
vt 0.000001 -0.000001
|
||||
vt -0.000001 0.999999
|
||||
vt 0.999999 -0.000001
|
||||
vt 1.000001 0.999999
|
||||
vt 0.000001 1.000001
|
||||
vt -0.000001 0.000001
|
||||
s off
|
||||
f 5/1 6/2 2/3 1/4
|
||||
f 6/1 7/2 3/3 2/4
|
||||
f 7/1 8/2 4/3 3/4
|
||||
f 8/1 5/2 1/3 4/4
|
||||
f 1/1 2/2 3/3 4/4
|
||||
f 8/1 7/2 6/3 5/4
|
||||
f 13/1 14/2 10/3 9/4
|
||||
f 14/1 15/2 11/3 10/4
|
||||
f 15/1 16/2 12/3 11/4
|
||||
f 16/1 13/2 9/3 12/4
|
||||
f 9/1 10/2 11/3 12/4
|
||||
f 16/1 15/2 14/3 13/4
|
||||
f 21/1 22/2 18/3 17/4
|
||||
f 22/1 23/2 19/3 18/4
|
||||
f 23/1 24/2 20/3 19/4
|
||||
f 24/1 21/2 17/3 20/4
|
||||
f 17/1 18/2 19/3 20/4
|
||||
f 24/1 23/2 22/3 21/4
|
||||
f 29/1 30/2 26/3 25/4
|
||||
f 30/1 31/2 27/3 26/4
|
||||
f 31/1 32/2 28/3 27/4
|
||||
f 32/1 29/2 25/3 28/4
|
||||
f 25/1 26/2 27/3 28/4
|
||||
f 32/1 31/2 30/3 29/4
|
||||
f 37/1 38/2 34/3 33/4
|
||||
f 38/1 39/2 35/3 34/4
|
||||
f 39/1 40/2 36/3 35/4
|
||||
f 40/1 37/2 33/3 36/4
|
||||
f 33/1 34/2 35/3 36/4
|
||||
f 40/1 39/2 38/3 37/4
|
||||
f 45/5 46/6 42/7 41/8
|
||||
f 46/9 47/10 43/11 42/12
|
||||
f 47/9 48/10 44/11 43/12
|
||||
f 48/9 45/10 41/11 44/12
|
||||
f 41/1 42/2 43/3 44/4
|
||||
f 48/1 47/2 46/3 45/4
|
||||
f 53/1 54/2 50/3 49/4
|
||||
f 54/1 55/2 51/3 50/4
|
||||
f 55/1 56/2 52/3 51/4
|
||||
f 56/1 53/2 49/3 52/4
|
||||
f 49/1 50/2 51/3 52/4
|
||||
f 56/1 55/2 54/3 53/4
|
||||
f 61/1 62/2 58/3 57/4
|
||||
f 62/1 63/2 59/3 58/4
|
||||
f 63/1 64/2 60/3 59/4
|
||||
f 64/1 61/2 57/3 60/4
|
||||
f 57/1 58/2 59/3 60/4
|
||||
f 64/1 63/2 62/3 61/4
|
||||
f 69/1 70/2 66/3 65/4
|
||||
f 70/1 71/2 67/3 66/4
|
||||
f 71/1 72/2 68/3 67/4
|
||||
f 72/1 69/2 65/3 68/4
|
||||
f 65/1 66/2 67/3 68/4
|
||||
f 72/1 71/2 70/3 69/4
|
||||
f 77/1 78/2 74/3 73/4
|
||||
f 78/1 79/2 75/3 74/4
|
||||
f 79/1 80/2 76/3 75/4
|
||||
f 80/1 77/2 73/3 76/4
|
||||
f 73/1 74/2 75/3 76/4
|
||||
f 80/1 79/2 78/3 77/4
|
||||
f 85/1 86/2 82/3 81/4
|
||||
f 86/1 87/2 83/3 82/4
|
||||
f 87/1 88/2 84/3 83/4
|
||||
f 88/1 85/2 81/3 84/4
|
||||
f 81/1 82/2 83/3 84/4
|
||||
f 88/1 87/2 86/3 85/4
|
||||
f 93/1 94/2 90/3 89/4
|
||||
f 94/1 95/2 91/3 90/4
|
||||
f 95/1 96/2 92/3 91/4
|
||||
f 96/1 93/2 89/3 92/4
|
||||
f 89/1 90/2 91/3 92/4
|
||||
f 96/1 95/2 94/3 93/4
|
BIN
screenshot.png
Normal file
After Width: | Height: | Size: 306 KiB |
BIN
textures/Todo/christmas_bauble_blue.png
Normal file
After Width: | Height: | Size: 365 B |
BIN
textures/Todo/christmas_bauble_cyan.png
Normal file
After Width: | Height: | Size: 390 B |
BIN
textures/Todo/christmas_bauble_green.png
Normal file
After Width: | Height: | Size: 419 B |
BIN
textures/Todo/christmas_bauble_orange.png
Normal file
After Width: | Height: | Size: 430 B |
BIN
textures/Todo/christmas_bauble_pink.png
Normal file
After Width: | Height: | Size: 428 B |
BIN
textures/Todo/christmas_bauble_purple.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
textures/Todo/christmas_bauble_white.png
Normal file
After Width: | Height: | Size: 418 B |
BIN
textures/Todo/christmas_bauble_yellow.png
Normal file
After Width: | Height: | Size: 428 B |
BIN
textures/Todo/christmas_cracker.png
Normal file
After Width: | Height: | Size: 260 B |
BIN
textures/christmas_bauble.png
Normal file
After Width: | Height: | Size: 117 B |
BIN
textures/christmas_bauble_pallete.png
Normal file
After Width: | Height: | Size: 396 B |
BIN
textures/christmas_bauble_red.png
Normal file
After Width: | Height: | Size: 410 B |
BIN
textures/christmas_candy_cane.png
Normal file
After Width: | Height: | Size: 204 B |
BIN
textures/christmas_eggnog.png
Normal file
After Width: | Height: | Size: 432 B |
BIN
textures/christmas_gingerbread_man.png
Normal file
After Width: | Height: | Size: 481 B |
BIN
textures/christmas_lights.png
Normal file
After Width: | Height: | Size: 314 B |
BIN
textures/christmas_lights_animated.png
Normal file
After Width: | Height: | Size: 228 B |
BIN
textures/christmas_mincepie.png
Normal file
After Width: | Height: | Size: 319 B |
BIN
textures/christmas_powerup_ui.png
Normal file
After Width: | Height: | Size: 791 B |
BIN
textures/christmas_present.png
Normal file
After Width: | Height: | Size: 246 B |
BIN
textures/christmas_star.png
Normal file
After Width: | Height: | Size: 136 B |
BIN
textures/christmas_star_inv.png
Normal file
After Width: | Height: | Size: 403 B |
BIN
textures/christmas_stocking.png
Normal file
After Width: | Height: | Size: 318 B |
BIN
textures/christmas_sugar.png
Normal file
After Width: | Height: | Size: 229 B |
BIN
textures/christmas_tree_inv.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
textures/christmas_tree_leaves.png
Normal file
After Width: | Height: | Size: 993 B |
195
textures/init.lua~
Normal file
@ -0,0 +1,195 @@
|
||||
christmas = {}
|
||||
christmas.players = {}
|
||||
christmas.data = minetest.get_mod_storage("christmas")
|
||||
|
||||
local function xplayer(player)
|
||||
if not player:is_player() then
|
||||
return
|
||||
end
|
||||
local name = player:get_player_name()
|
||||
return christmas.players[name]
|
||||
end
|
||||
|
||||
function christmas.get_present_formspec(pos)--Taken from default chest
|
||||
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
|
||||
local formspec =
|
||||
"size[8,9]" ..
|
||||
"list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
|
||||
"list[current_player;main;0,4.85;8,1;]" ..
|
||||
"list[current_player;main;0,6.08;8,3;8]" ..
|
||||
"listring[nodemeta:" .. spos .. ";main]" ..
|
||||
"listring[current_player;main]"
|
||||
return formspec
|
||||
end
|
||||
|
||||
local function to_time(time)
|
||||
local remaining = time % 86400
|
||||
remaining = remaining % 3600
|
||||
local minutes = math.floor(remaining/60)
|
||||
remaining = remaining % 60
|
||||
local seconds = remaining
|
||||
if (minutes < 10) then
|
||||
minutes = "0" .. tostring(minutes)
|
||||
end
|
||||
if (seconds < 10) then
|
||||
seconds = "0" .. tostring(seconds)
|
||||
end
|
||||
answer = minutes..':'..seconds
|
||||
return answer
|
||||
end
|
||||
|
||||
function christmas.eat_candy(hp_change, replace_with_item)
|
||||
return function(itemstack, user, pointed_thing)
|
||||
local name = user:get_player_name()
|
||||
local p = xplayer(user)
|
||||
christmas.players[name].candy = p.candy +1
|
||||
if p.candy == 8 then
|
||||
p.time = 60
|
||||
p.hud.ui = user:hud_add({
|
||||
hud_elem_type = "image",
|
||||
position = {x = 0.1, y = 0.5},
|
||||
offset = {x = -220, y = -260},
|
||||
text = "christmas_powerup_ui.png",
|
||||
scale = { x = 16, y = 17},
|
||||
alignment = { x = 1, y = 0 },
|
||||
})
|
||||
p.hud.icon = user:hud_add({
|
||||
hud_elem_type = "image",
|
||||
position = {x = 0.1, y = 0.5},
|
||||
offset = {x = -90, y = -251},
|
||||
text = "christmas_candy_cane.png",
|
||||
scale = { x = 16, y = 16},
|
||||
alignment = { x = 1, y = 0 },
|
||||
})
|
||||
p.hud.time = user:hud_add({
|
||||
hud_elem_type = "text",
|
||||
position = {x = 0.1, y = 0.5},
|
||||
offset = {x = 10, y = -10},
|
||||
text = to_time (p.time),
|
||||
number = 0xffffff,
|
||||
scale = { x = 16, y = 16},
|
||||
alignment = { x = 0, y = 0 },
|
||||
})
|
||||
end
|
||||
if p.time > 0 then
|
||||
p.time = p.time + 3
|
||||
end
|
||||
return minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||
end
|
||||
end
|
||||
|
||||
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(2)
|
||||
})
|
||||
minetest.register_craftitem("christmas:gingerbread_man", {
|
||||
description = "Gingerbread Man",
|
||||
inventory_image = "christmas_gingerbread_man.png",
|
||||
on_use = minetest.item_eat(2)
|
||||
})
|
||||
minetest.register_craftitem("christmas:cracker", {
|
||||
description = "Christmas Cracker\n (To be shared with a friend)",
|
||||
inventory_image = "christmas_cracker.png",
|
||||
on_use = minetest.item_eat(2)
|
||||
})
|
||||
|
||||
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",
|
||||
"christmas_present_top.png"
|
||||
},
|
||||
drawtype = "mesh",
|
||||
paramtype = "light",
|
||||
mesh = "christmas_present.obj",
|
||||
groups = {oddly_breakable_by_hand = 3, attached_node = 1},
|
||||
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,
|
||||
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},
|
||||
walkable = false,
|
||||
on_construct = function(pos, itemstack, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", player:get_player_name().."'s Stocking")
|
||||
end,
|
||||
})
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
christmas.players[name] = {}
|
||||
christmas.players[name].candy = 0
|
||||
christmas.players[name].hud = {}
|
||||
christmas.players[name].time = 0
|
||||
end)
|
||||
|
||||
local t = 0
|
||||
minetest.register_globalstep (function(dtime)
|
||||
t = t + dtime
|
||||
if t > 1 then
|
||||
t = 0
|
||||
end
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
local p = xplayer(player)
|
||||
if p.time > 0 and t > 1-dtime then
|
||||
p.time = p.time - 1
|
||||
player:hud_change(p.hud.time, "text", to_time(p.time))
|
||||
elseif math.floor(p.time) == 1 then
|
||||
p.candy = 0
|
||||
end
|
||||
if p.time > 0 then
|
||||
player:set_physics_override({
|
||||
speed = 2.5,
|
||||
})
|
||||
end
|
||||
--minetest.chat_send_all(p.candy)
|
||||
if p.time == 0 then
|
||||
player:set_physics_override({
|
||||
speed = 1,
|
||||
})
|
||||
player:hud_remove(p.hud.ui)
|
||||
player:hud_remove(p.hud.icon)
|
||||
player:hud_remove(p.hud.time)
|
||||
end
|
||||
end
|
||||
end)
|