lucky_block/init.lua

750 lines
15 KiB
Lua
Raw Normal View History

2015-09-21 12:55:29 +02:00
lucky_block = {}
lucky_schems = {}
-- Load support for intllib.
local MP = minetest.get_modpath(minetest.get_current_modname())
2020-08-25 10:28:46 +02:00
local S = minetest.get_translator and minetest.get_translator("lucky_block") or
dofile(MP .. "/intllib.lua")
2015-11-23 17:12:39 +01:00
-- default blocks
2015-09-21 12:55:29 +02:00
local lucky_list = {
{"nod", "lucky_block:super_lucky_block", 0},
}
2015-09-21 12:55:29 +02:00
-- ability to add new blocks to list
function lucky_block:add_blocks(list)
2016-06-06 16:11:55 +02:00
2015-09-21 12:55:29 +02:00
for s = 1, #list do
table.insert(lucky_list, list[s])
end
end
2015-09-30 12:19:47 +02:00
-- call to purge the block list
function lucky_block:purge_block_list()
2015-11-23 17:12:39 +01:00
lucky_list = {
{"nod", "lucky_block:super_lucky_block", 0}
}
2015-09-30 12:19:47 +02:00
end
-- add schematics to global list
function lucky_block:add_schematics(list)
2016-06-06 16:11:55 +02:00
for s = 1, #list do
table.insert(lucky_schems, list[s])
end
end
2016-02-01 19:55:23 +01:00
-- import schematics and default blocks
2016-06-06 16:11:55 +02:00
dofile(minetest.get_modpath("lucky_block") .. "/schems.lua")
dofile(minetest.get_modpath("lucky_block") .. "/blocks.lua")
2015-09-21 12:55:29 +02:00
2015-09-21 12:55:29 +02:00
-- for random colour selection
local all_colours = {
"grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta",
"orange", "violet", "brown", "pink", "dark_grey", "dark_green", "white"
}
-- default items in chests
local chest_stuff = {
{name = "default:apple", max = 3},
{name = "default:steel_ingot", max = 2},
{name = "default:gold_ingot", max = 2, chance = 2},
{name = "default:diamond", max = 1, chance = 3},
{name = "default:pick_steel", max = 1, chance = 2},
{name = "default:mese_crystal_fragment", max = 3, chance = 3},
2015-09-21 12:55:29 +02:00
}
2015-09-30 12:19:47 +02:00
-- call to purge the chest items list
function lucky_block:purge_chest_items()
chest_stuff = {}
end
-- ability to add to chest items list
2015-09-30 12:19:47 +02:00
function lucky_block:add_chest_items(list)
2016-06-06 16:11:55 +02:00
2015-09-30 12:19:47 +02:00
for s = 1, #list do
table.insert(chest_stuff, list[s])
end
end
2015-09-21 12:55:29 +02:00
-- particle effects
local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow)
radius = radius or 2
gravity = gravity or -10
2016-06-06 16:11:55 +02:00
2015-09-21 12:55:29 +02:00
minetest.add_particlespawner({
amount = amount,
time = 0.25,
minpos = pos,
maxpos = pos,
minvel = {x = -radius, y = -radius, z = -radius},
maxvel = {x = radius, y = radius, z = radius},
minacc = {x = 0, y = gravity, z = 0},
maxacc = {x = 0, y = gravity, z = 0},
minexptime = 0.1,
maxexptime = 1,
2018-10-05 19:39:29 +02:00
minsize = min_size or 0.5,
maxsize = max_size or 1.0,
2015-09-21 12:55:29 +02:00
texture = texture,
2018-10-05 19:39:29 +02:00
glow = glow or 0,
2015-09-21 12:55:29 +02:00
})
end
-- temp entity for mob damage
minetest.register_entity("lucky_block:temp", {
physical = true,
collisionbox = {0, 0, 0, 0, 0, 0},
visual_size = {x = 0, y = 0},
visual = "sprite",
textures = {"tnt_smoke.png"},
on_step = function(self, dtime)
self.timer = (self.timer or 0) + dtime
if self.timer > 0.5 then
self.object:remove()
end
end
})
-- modified from TNT mod to deal entity damage only
local function entity_physics(pos, radius)
2015-11-05 12:43:56 +01:00
2015-09-21 12:55:29 +02:00
radius = radius * 2
2015-11-05 12:43:56 +01:00
2015-09-21 12:55:29 +02:00
local objs = minetest.get_objects_inside_radius(pos, radius)
2015-11-05 12:43:56 +01:00
local obj_pos, dist
-- add temp entity to cause damage
local tmp_ent = minetest.add_entity(pos, "lucky_block:temp")
2016-06-06 16:11:55 +02:00
for n = 1, #objs do
2015-11-05 12:43:56 +01:00
2017-10-09 16:13:23 +02:00
obj_pos = objs[n]:get_pos()
2016-06-06 16:11:55 +02:00
dist = vector.distance(pos, obj_pos)
2018-10-05 19:39:29 +02:00
2016-06-06 16:11:55 +02:00
if dist < 1 then dist = 1 end
2015-11-05 12:43:56 +01:00
local damage = math.floor((4 / dist) * radius)
2016-06-06 16:11:55 +02:00
local ent = objs[n]:get_luaentity()
2016-06-06 16:11:55 +02:00
if objs[n]:is_player() then
objs[n]:set_hp(objs[n]:get_hp() - damage)
else --if ent.health then
objs[n]:punch(tmp_ent, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = damage},
2017-09-08 10:08:57 +02:00
}, pos)
end
2015-09-21 12:55:29 +02:00
end
end
-- fill chest with random items from list
local function fill_chest(pos, items)
2015-11-05 12:43:56 +01:00
2015-09-21 12:55:29 +02:00
local stacks = items or {}
2016-06-06 16:11:55 +02:00
local inv = minetest.get_meta(pos):get_inventory()
2015-11-05 12:43:56 +01:00
2015-09-21 12:55:29 +02:00
inv:set_size("main", 8 * 4)
for i = 0, 2, 1 do
2018-10-05 19:39:29 +02:00
2015-09-21 12:55:29 +02:00
local stuff = chest_stuff[math.random(1, #chest_stuff)]
2018-10-05 19:39:29 +02:00
table.insert(stacks, {name = stuff.name, max = stuff.max})
2015-09-21 12:55:29 +02:00
end
for s = 1, #stacks do
2018-10-05 19:39:29 +02:00
2015-09-21 12:55:29 +02:00
if not inv:contains_item("main", stacks[s]) then
if not stacks[s].chance
or math.random(1, stacks[s].chance) == 1 then
inv:set_stack("main", math.random(1, 32), {
name = stacks[s].name,
count = math.random(1, stacks[s].max)
})
end
2015-09-21 12:55:29 +02:00
end
end
end
-- explosion with protection check
local function explode(pos, radius, sound)
sound = sound or "tnt_explode"
if minetest.get_modpath("tnt") and tnt and tnt.boom
and not minetest.is_protected(pos, "") then
tnt.boom(pos, {
radius = radius,
damage_radius = radius,
sound = sound,
})
else
minetest.sound_play(sound, {pos = pos, gain = 1.0,
max_hear_distance = 32})
entity_physics(pos, radius)
effect(pos, 32, "tnt_smoke.png", radius * 3, radius * 5, radius, 1, 0)
end
end
2018-10-05 19:39:29 +02:00
local lb_schematic = function(pos, digger, def)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
if #lucky_schems == 0 then
print ("[lucky block] No schematics")
return
end
2018-10-05 19:39:29 +02:00
local schem = def[2]
local switch = def[3] or 0
local force = def[4]
local reps = def[5] or {}
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
if switch == 1 then
pos = vector.round(digger:get_pos())
end
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
for i = 1, #lucky_schems do
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
if schem == lucky_schems[i][1] then
2018-10-05 19:39:29 +02:00
local p1 = vector.subtract(pos, lucky_schems[i][3])
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
minetest.place_schematic(p1, lucky_schems[i][2], "", reps, force)
break
2015-09-21 12:55:29 +02:00
end
2018-10-05 19:39:29 +02:00
end
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
if switch == 1 then
digger:set_pos(pos, false)
end
end
2018-10-05 19:39:29 +02:00
local lb_node = function(pos, digger, def)
2018-10-05 19:39:29 +02:00
local nod = def[2]
local switch = def[3]
local items = def[4]
2018-10-05 19:39:29 +02:00
if switch == 1 then
pos = digger:get_pos()
end
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
if not minetest.registered_nodes[nod] then
nod = "default:goldblock"
end
2018-10-05 19:39:29 +02:00
effect(pos, 25, "tnt_smoke.png", 8, 8, 2, 1, 0)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
minetest.set_node(pos, {name = nod})
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
if nod == "default:chest" then
fill_chest(pos, items)
end
end
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local lb_spawn = function(pos, digger, def)
2016-06-06 16:11:55 +02:00
2018-10-05 19:39:29 +02:00
local pos2 = {}
local num = def[3] or 1
local tame = def[4]
local own = def[5]
local range = def[6] or 5
local name = def[7]
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
for i = 1, num do
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
pos2.x = pos.x + math.random(-range, range)
pos2.y = pos.y + 1
pos2.z = pos.z + math.random(-range, range)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local nod = minetest.get_node(pos2)
local nodef = minetest.registered_nodes[nod.name]
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
if nodef and nodef.walkable == false then
2015-11-05 12:43:56 +01:00
local entity
-- select between random or single entity
if type(def[2]) == "table" then
entity = def[2][math.random(1, #def[2])]
else
entity = def[2]
end
2017-08-04 11:33:10 +02:00
2018-10-05 19:39:29 +02:00
-- coloured sheep
if entity == "mobs:sheep" then
local colour = "_" .. all_colours[math.random(#all_colours)]
entity = "mobs:sheep" .. colour
end
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
-- has entity been registered?
if minetest.registered_entities[entity] then
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local ent = minetest.add_entity(pos2, entity):get_luaentity()
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
if tame then
ent.tamed = true
2015-09-21 12:55:29 +02:00
end
2018-10-05 19:39:29 +02:00
if own then
ent.owner = digger:get_player_name()
end
2018-10-05 19:39:29 +02:00
if name then
ent.nametag = name
ent.object:set_properties({
nametag = name,
nametag_color = "#FFFF00"
})
2015-09-21 12:55:29 +02:00
end
2018-10-05 19:39:29 +02:00
else
print ("[lucky_block] " .. entity .. " could not be spawned")
2015-09-21 12:55:29 +02:00
end
end
2018-10-05 19:39:29 +02:00
end
end
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
local lb_explode = function(pos, def)
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
local rad = def[2] or 2
local snd = def[3] or "tnt_explode"
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
explode(pos, rad, snd)
end
2018-10-05 19:39:29 +02:00
local lb_teleport = function(pos, digger, def)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local xz_range = def[2] or 10
local y_range = def[3] or 5
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
pos.x = pos.x + math.random(-xz_range, xz_range)
pos.x = pos.y + math.random(-y_range, y_range)
pos.x = pos.z + math.random(-xz_range, xz_range)
2018-10-05 19:39:29 +02:00
effect(pos, 25, "tnt_smoke.png", 8, 8, 1, -10, 0)
2018-10-05 19:39:29 +02:00
digger:set_pos(pos, false)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
effect(pos, 25, "tnt_smoke.png", 8, 8, 1, -10, 0)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
minetest.chat_send_player(digger:get_player_name(),
2018-10-17 13:12:25 +02:00
minetest.get_color_escape_sequence("#1eff00") .. S("Random Teleport!"))
2018-10-05 19:39:29 +02:00
end
2018-10-05 19:39:29 +02:00
local lb_drop = function(pos, digger, def)
2018-10-05 19:39:29 +02:00
local num = def[3] or 1
local colours = def[4]
local items = #def[2]
2018-10-05 19:39:29 +02:00
-- drop multiple different items or colours
if items > 1 or colours then
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
for i = 1, num do
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local item = def[2][math.random(1, items)]
2018-10-05 19:39:29 +02:00
if colours then
item = item .. all_colours[math.random(#all_colours)]
2015-09-21 12:55:29 +02:00
end
2015-11-05 12:43:56 +01:00
if not minetest.registered_items[item] then
2018-10-05 19:39:29 +02:00
item = "default:coal_lump"
2016-10-30 22:41:22 +01:00
end
local obj = minetest.add_item(pos, item)
2015-11-05 12:43:56 +01:00
2015-09-21 12:55:29 +02:00
if obj then
2018-07-02 17:09:07 +02:00
obj:set_velocity({
2016-06-06 16:11:55 +02:00
x = math.random(-10, 10) / 9,
y = 5,
2016-06-06 16:11:55 +02:00
z = math.random(-10, 10) / 9,
2015-09-21 12:55:29 +02:00
})
end
end
2018-10-05 19:39:29 +02:00
else -- drop single item in a stack
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local item = def[2][1]
2018-10-05 19:39:29 +02:00
if not minetest.registered_items[item] then
item = ItemStack("default:coal_lump " .. tonumber(num))
else
item = ItemStack(item .. " " .. tonumber(num))
end
2018-10-05 19:39:29 +02:00
local obj = minetest.add_item(pos, item)
if obj then
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
obj:set_velocity({
x = math.random(-10, 10) / 9,
y = 5,
z = math.random(-10, 10) / 9,
})
end
2018-10-05 19:39:29 +02:00
end
end
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local lb_lightning = function(pos, digger, def)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local nod = def[2]
2018-10-05 19:39:29 +02:00
if not minetest.registered_nodes[nod] then
nod = "fire:basic_flame"
end
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
pos = digger:get_pos()
2015-11-05 12:43:56 +01:00
local bnod = minetest.get_node_or_nil(pos)
local bref = bnod and minetest.registered_items[bnod.name]
if bref and bref.buildable_to then
2018-10-05 19:39:29 +02:00
minetest.set_node(pos, {name = nod})
end
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
minetest.add_particle({
pos = pos,
velocity = {x = 0, y = 0, z = 0},
acceleration = {x = 0, y = 0, z = 0},
expirationtime = 1.0,
collisiondetection = false,
texture = "lucky_lightning.png",
size = math.random(100, 150),
glow = 15,
})
entity_physics(pos, 2)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
minetest.sound_play("lightning", {
pos = pos,
gain = 1.0,
max_hear_distance = 25
})
end
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local lb_falling = function(pos, digger, def)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local nods = def[2]
local switch = def[3]
local spread = def[4]
local range = def[5] or 5
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
if switch == 1 then
pos = digger:get_pos()
end
if spread then
pos.y = pos.y + 10
else
pos.y = pos.y + #nods
end
2018-10-05 19:39:29 +02:00
minetest.remove_node(pos)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local pos2 = {x = pos.x, y = pos.y, z = pos.z}
2017-09-08 10:08:57 +02:00
2018-10-05 19:39:29 +02:00
for s = 1, #nods do
2017-09-08 10:08:57 +02:00
2018-10-05 19:39:29 +02:00
minetest.after(0.5 * s, function()
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
if spread then
pos2.x = pos.x + math.random(-range, range)
pos2.z = pos.z + math.random(-range, range)
end
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local n = minetest.registered_nodes[nods[s]]
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
if n then
local obj = minetest.add_entity(pos2, "__builtin:falling_node")
obj:get_luaentity():set_node(n)
end
end)
end
end
local lb_troll = function(pos, def)
local nod = def[2]
local snd = def[3]
local exp = def[4]
minetest.set_node(pos, {name = nod})
if snd then
minetest.sound_play(snd, {
pos = pos,
gain = 1.0,
max_hear_distance = 10
})
end
if not minetest.registered_nodes[nod] then
nod = "default:goldblock"
end
minetest.after(2.0, function()
if exp then
minetest.set_node(pos, {name = "air"})
explode(pos, 2)
else
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
minetest.set_node(pos, {name = "air"})
minetest.sound_play("default_hard_footstep", {
2015-09-21 12:55:29 +02:00
pos = pos,
gain = 1.0,
max_hear_distance = 10
})
end
2018-10-05 19:39:29 +02:00
end)
end
2015-11-05 12:43:56 +01:00
2016-10-30 22:41:22 +01:00
2018-10-05 19:39:29 +02:00
local lb_floor = function(pos, def)
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
local size = def[2] or 1
local nods = def[3] or {"default:dirt"}
local offs = def[4] or 0
local num = 1
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
for x = 0, size - 1 do
for z = 0, size - 1 do
2018-10-05 19:39:29 +02:00
minetest.after(0.5 * num, function()
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
minetest.set_node({
x = (pos.x + x) - offs,
y = pos.y - 1,
z = (pos.z + z) - offs
}, {name = nods[math.random(#nods)]})
2015-11-05 12:43:56 +01:00
2018-10-05 19:39:29 +02:00
minetest.sound_play("default_place_node", {
2015-09-21 12:55:29 +02:00
pos = pos,
gain = 1.0,
max_hear_distance = 10
})
2018-10-05 19:39:29 +02:00
end)
2015-09-21 12:55:29 +02:00
2018-10-05 19:39:29 +02:00
num = num + 1
end
end
end
-- this is what happens when you dig a lucky block
function lucky_block:open(pos, digger, blocks_list)
-- check for custom blocks list or use default
blocks_list = blocks_list or lucky_list
2018-10-05 19:39:29 +02:00
-- make sure it's really random
math.randomseed(minetest.get_timeofday() + pos.x + pos.z - os.time())
local luck = math.random(1, #blocks_list) ; --luck = 1
local action = blocks_list[luck][1]
-- print ("luck ["..luck.." of "..#blocks_list.."]", action)
2018-10-05 19:39:29 +02:00
-- place schematic
if action == "sch" then
lb_schematic(pos, digger, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- place node (if chest then fill chest)
elseif action == "nod" then
lb_node(pos, digger, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- place entity
elseif action == "spw" then
lb_spawn(pos, digger, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- explosion
elseif action == "exp" then
lb_explode(pos, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- teleport
elseif action == "tel" then
lb_teleport(pos, digger, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- drop items
elseif action == "dro" then
lb_drop(pos, digger, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- lightning strike
elseif action == "lig" then
lb_lightning(pos, digger, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- falling nodes
elseif action == "fal" then
lb_falling(pos, digger, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- troll block, disappears or explodes after 2 seconds
elseif action == "tro" then
lb_troll(pos, blocks_list[luck])
2018-10-05 19:39:29 +02:00
-- floor paint
elseif action == "flo" then
lb_floor(pos, blocks_list[luck])
2016-09-30 14:25:00 +02:00
-- custom function
elseif action == "cus" then
local func = blocks_list[luck][2]
2016-09-30 14:25:00 +02:00
if func then func(pos, digger) end
2015-09-21 12:55:29 +02:00
end
end
2015-09-21 12:55:29 +02:00
-- lucky block itself
minetest.register_node("lucky_block:lucky_block", {
description = S("Lucky Block"),
2015-11-25 13:09:19 +01:00
tiles = {{
2016-06-06 16:11:55 +02:00
name = "lucky_block_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1
},
2015-11-25 13:09:19 +01:00
}},
2015-09-21 12:55:29 +02:00
inventory_image = minetest.inventorycube("lucky_block.png"),
sunlight_propagates = false,
is_ground_content = false,
2016-06-06 16:11:55 +02:00
paramtype = "light",
2015-09-21 12:55:29 +02:00
light_source = 3,
2018-10-24 17:43:43 +02:00
groups = {oddly_breakable_by_hand = 3, unbreakable = 1},
2018-07-27 19:26:28 +02:00
drop = {},
2015-09-21 12:55:29 +02:00
sounds = default.node_sound_wood_defaults(),
2015-11-05 12:43:56 +01:00
2015-09-21 12:55:29 +02:00
on_dig = function(pos, node, digger)
minetest.set_node(pos, {name = "air"})
lucky_block:open(pos, digger)
2015-09-21 12:55:29 +02:00
end,
2017-08-04 11:33:10 +02:00
on_blast = function() end,
2015-09-21 12:55:29 +02:00
})
minetest.register_craft({
output = "lucky_block:lucky_block",
recipe = {
{"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"},
{"default:gold_ingot", "default:chest", "default:gold_ingot"},
{"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}
}
})
2015-09-21 12:55:29 +02:00
-- super lucky block
minetest.register_node("lucky_block:super_lucky_block", {
description = S("Super Lucky Block (use pick)"),
2015-11-25 13:09:19 +01:00
tiles = {{
2018-10-05 19:39:29 +02:00
name = "lucky_block_super_animated.png",
2016-06-06 16:11:55 +02:00
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1
},
2015-11-25 13:09:19 +01:00
}},
2015-09-21 12:55:29 +02:00
inventory_image = minetest.inventorycube("lucky_block_super.png"),
sunlight_propagates = false,
is_ground_content = false,
2016-06-06 16:11:55 +02:00
paramtype = "light",
2018-10-24 17:43:43 +02:00
groups = {cracky = 1, level = 2, unbreakable = 1},
2018-07-27 19:26:28 +02:00
drop = {},
2015-09-21 12:55:29 +02:00
sounds = default.node_sound_stone_defaults(),
2015-11-05 12:43:56 +01:00
2015-09-21 12:55:29 +02:00
on_construct = function(pos)
2018-10-05 19:39:29 +02:00
2015-09-21 12:55:29 +02:00
local meta = minetest.get_meta(pos)
2018-10-05 19:39:29 +02:00
2015-09-21 12:55:29 +02:00
meta:set_string("infotext", "Super Lucky Block")
end,
2015-11-05 12:43:56 +01:00
2015-09-21 12:55:29 +02:00
on_dig = function(pos)
2015-11-05 12:43:56 +01:00
2016-06-06 16:11:55 +02:00
if math.random(1, 10) < 8 then
2015-11-05 12:43:56 +01:00
2016-06-06 16:11:55 +02:00
minetest.set_node(pos, {name = "air"})
2015-11-05 12:43:56 +01:00
effect(pos, 25, "tnt_smoke.png", 8, 8, 1, -10, 0)
2016-06-06 16:11:55 +02:00
minetest.sound_play("fart1", {
pos = pos,
gain = 1.0,
max_hear_distance = 10
})
if math.random(1, 5) == 1 then
pos.y = pos.y + 0.5
2017-08-04 11:33:10 +02:00
minetest.add_item(pos, "default:goldblock " .. math.random(1, 5))
end
2016-06-06 16:11:55 +02:00
else
minetest.set_node(pos, {name = "lucky_block:lucky_block"})
end
2015-09-21 12:55:29 +02:00
end,
2017-08-04 11:33:10 +02:00
on_blast = function() end,
2015-09-21 12:55:29 +02:00
})
minetest.after(0, function()
print (S("[MOD] Lucky Blocks loaded (@1 in total)", #lucky_list))
end)