mirror of
https://notabug.org/TenPlus1/lucky_block.git
synced 2024-11-20 08:23:44 +01:00
200 lines
4.3 KiB
Lua
200 lines
4.3 KiB
Lua
|
|
-- well block (player stands near and it triggers drops)
|
|
minetest.register_node("lucky_block:well_block", {
|
|
description = "Well Block",
|
|
tiles = {"default_glass.png"},
|
|
light_source = 5,
|
|
groups = {not_in_creative_inventory = 1, unbreakable = 1},
|
|
on_blast = function() end,
|
|
drop = {}
|
|
})
|
|
|
|
|
|
-- wishing well schematic layout
|
|
local stb = {name = "default:steelblock", param1 = 255}
|
|
local sbr = {name = "default:stonebrick", param1 = 255}
|
|
local fwd = {name = "default:fence_wood", param1 = 255}
|
|
local slb = {name = "stairs:slab_stonebrick", param1 = 255}
|
|
local wbl = {name = "lucky_block:well_block", param1 = 255}
|
|
local gla = {name = "default:glass", param1 = 255}
|
|
local wat = {name = "default:water_source", param1 = 255}
|
|
local air = {name = "air"}
|
|
|
|
local wishing_well = {
|
|
size = {x = 3, y = 5, z = 3},
|
|
data = {
|
|
stb,sbr,stb,
|
|
sbr,sbr,sbr,
|
|
fwd,air,fwd,
|
|
fwd,air,fwd,
|
|
slb,slb,slb,
|
|
|
|
sbr,wbl,sbr,
|
|
sbr,wat,sbr,
|
|
air,air,air,
|
|
air,air,air,
|
|
slb,gla,slb,
|
|
|
|
stb,sbr,stb,
|
|
sbr,sbr,sbr,
|
|
fwd,air,fwd,
|
|
fwd,air,fwd,
|
|
slb,slb,slb
|
|
}
|
|
}
|
|
|
|
|
|
-- add schematic to list
|
|
lucky_block:add_schematics({
|
|
{"wishingwell", wishing_well, {x = 1, y = 1, z = 1}}
|
|
})
|
|
|
|
|
|
-- Global list containing well blocks that can be dropped
|
|
lucky_block.wellblocks = {}
|
|
|
|
|
|
-- helper function
|
|
local add_wblock = function(list)
|
|
|
|
for s = 1, #list do
|
|
table.insert(lucky_block.wellblocks, list[s])
|
|
end
|
|
end
|
|
|
|
|
|
if lucky_block.mod_def then
|
|
|
|
add_wblock({
|
|
{"default:ice", 5},
|
|
{"default:bronzeblock", 2},
|
|
{"default:lava_source", 7},
|
|
{"default:coalblock", 4},
|
|
{"default:sand", 7},
|
|
{"default:goldblock", 2},
|
|
{"default:cactus", 5},
|
|
{"default:cobble", 5},
|
|
{"default:brick", 5},
|
|
{"fire:permanent_flame", 7},
|
|
{"default:desert_sand", 7},
|
|
{"default:grass_5", 7},
|
|
{"default:obsidian", 4},
|
|
{"default:diamondblock", 2},
|
|
{"default:dirt", 7},
|
|
{"default:clay", 5},
|
|
{"default:copperblock", 2},
|
|
{"default:mese", 2},
|
|
{"default:silver_sand", 7},
|
|
{"default:snowblock", 7},
|
|
{"default:mossycobble", 5},
|
|
{"default:lava_source", 5},
|
|
{"default:blueberry_bush_leaves_with_berries", 4},
|
|
{"default:coral_skeleton", 4},
|
|
{"default:coral_orange", 4},
|
|
{"default:coral_brown", 4},
|
|
{"default:gravel", 5},
|
|
{"default:permafrost_with_moss", 4},
|
|
{"default:stone_with_diamond", 4},
|
|
{"default:stone_with_gold", 4},
|
|
{"default:stone_with_copper", 4},
|
|
{"default:lava_source", 4},
|
|
{"default:stone_with_mese", 4},
|
|
{"default:stone_with_coal", 4},
|
|
{"default:stone_with_tin", 4},
|
|
{"default:stone_with_iron", 4},
|
|
{"fire:permanent_flame", 7}
|
|
})
|
|
end
|
|
|
|
if minetest.get_modpath("tnt") then
|
|
|
|
add_wblock({
|
|
{"tnt:tnt_burning", 8},
|
|
{"tnt:tnt_burning", 4},
|
|
{"tnt:tnt_burning", 8}
|
|
})
|
|
end
|
|
|
|
if minetest.get_modpath("ethereal") then
|
|
|
|
add_wblock({
|
|
{"ethereal:crystal_block", 2}
|
|
})
|
|
end
|
|
|
|
if minetest.get_modpath("bones") then
|
|
|
|
add_wblock({
|
|
{"bones:bones", 4}
|
|
})
|
|
end
|
|
|
|
if lucky_block.mod_mcl then
|
|
|
|
add_wblock({
|
|
{"mcl_core:diamondblock", 4},
|
|
{"mcl_core:goldblock", 4},
|
|
{"mcl_core:lava_source", 4},
|
|
{"mcl_core:water_source", 4},
|
|
{"mcl_core:sand", 7},
|
|
{"mcl_core:gravel", 7},
|
|
{"mcl_core:obsidian", 4},
|
|
{"mcl_core:ironblock", 4},
|
|
{"mcl_core:sandstone", 7},
|
|
{"mcl_core:snow", 7}
|
|
})
|
|
end
|
|
|
|
|
|
-- abm function to detect player and trigger drops
|
|
minetest.register_abm({
|
|
label = "Lucky Block Wishing Well Block",
|
|
nodenames = {"lucky_block:well_block"},
|
|
interval = 2,
|
|
chance = 1,
|
|
catch_up = false,
|
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
|
|
for _,object in pairs(minetest.get_objects_inside_radius(pos, 1.2)) do
|
|
|
|
if object and object:is_player() then
|
|
|
|
minetest.swap_node(pos, {name = lucky_block.def_glass})
|
|
|
|
minetest.sound_play("default_tool_breaks", {
|
|
pos = pos, gain = 1.0, max_hear_distance = 5}, true)
|
|
|
|
local b_no = math.random(#lucky_block.wellblocks)
|
|
local item = lucky_block.wellblocks[b_no][1]
|
|
|
|
for n = 1, lucky_block.wellblocks[b_no][2] do
|
|
|
|
local nod = table.copy(minetest.registered_nodes[item])
|
|
|
|
if nod then
|
|
|
|
local obj = minetest.add_entity({
|
|
x = pos.x + math.random(-7, 7),
|
|
y = pos.y + 7,
|
|
z = pos.z + math.random(-7, 7)
|
|
}, "__builtin:falling_node")
|
|
|
|
if obj then
|
|
|
|
local ent = obj:get_luaentity()
|
|
|
|
if ent then
|
|
nod.param2 = 1 -- set default rotation
|
|
ent:set_node(nod)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
break
|
|
end
|
|
end
|
|
end
|
|
})
|