ceiling clinging crystals in caves and swapping wand focus
This commit is contained in:
parent
21f97b52f9
commit
0403167162
38
crystals.lua
38
crystals.lua
@ -146,6 +146,7 @@ function magicalities.register_crystal(element, description, color)
|
||||
use_texture_alpha = true,
|
||||
mesh = "crystal.obj",
|
||||
paramtype = "light",
|
||||
paramtype2 = "wallmounted",
|
||||
drawtype = "mesh",
|
||||
light_source = 4,
|
||||
_element = element,
|
||||
@ -206,16 +207,19 @@ function magicalities.register_crystal(element, description, color)
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
-- Crystal clusters as ores
|
||||
minetest.register_ore({
|
||||
ore_type = "scatter",
|
||||
ore = "magicalities:crystal_cluster_"..element,
|
||||
wherein = "default:stone",
|
||||
clust_scarcity = 19 * 19 * 19,
|
||||
clust_num_ores = 1,
|
||||
clust_size = 1,
|
||||
y_max = -30,
|
||||
y_min = -31000,
|
||||
-- Register cave crystal appearances
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = "default:stone",
|
||||
sidelen = 16,
|
||||
|
||||
y_max = -30,
|
||||
y_min = -31000,
|
||||
flags = "all_floors, all_ceilings",
|
||||
|
||||
fill_ratio = 0.0008,
|
||||
|
||||
decoration = "magicalities:crystal_cluster_"..element,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -278,3 +282,17 @@ minetest.register_abm({
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_on_generated(function (minp, maxp)
|
||||
local clusters = minetest.find_nodes_in_area(minp, maxp, "group:crystal_cluster")
|
||||
for _, pos in pairs(clusters) do
|
||||
local stone = minetest.find_node_near(pos, 1, "default:stone")
|
||||
if stone then
|
||||
local param2 = minetest.dir_to_wallmounted(vector.direction(pos, stone))
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
node.param2 = param2
|
||||
minetest.set_node(pos, node)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
74
focuses.lua
74
focuses.lua
@ -39,3 +39,77 @@ minetest.register_craftitem("magicalities:focus_teleport", {
|
||||
return itemstack
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_craftitem("magicalities:focus_swap", {
|
||||
description = "Wand Focus of Swapping",
|
||||
groups = {wand_focus = 1},
|
||||
inventory_image = "magicalities_focus_swap.png",
|
||||
stack_max = 1,
|
||||
_wand_requirements = {
|
||||
["earth"] = 1
|
||||
},
|
||||
_wand_use = function (itemstack, user, pointed_thing)
|
||||
local meta = itemstack:get_meta()
|
||||
local tnode = meta:get_string("swapnode")
|
||||
local pname = user:get_player_name()
|
||||
if tnode == "" or pointed_thing.type ~= "node" then return itemstack end
|
||||
|
||||
local pos = pointed_thing.under
|
||||
|
||||
if minetest.is_protected(pos, pname) then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local node = minetest.get_node_or_nil(pos)
|
||||
if not node or node.name == tnode then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local place_node_itm = ItemStack(tnode)
|
||||
local inv = user:get_inventory()
|
||||
|
||||
local ndef = minetest.registered_nodes[tnode]
|
||||
if not inv:contains_item("main", place_node_itm) then
|
||||
minetest.chat_send_player(pname, ("You don't have enough %s in your inventory."):format(ndef.description))
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local drops = minetest.get_node_drops(pos)
|
||||
|
||||
if ndef.can_dig ~= nil and not ndef.can_dig(pos, user) then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.remove_node(pos)
|
||||
|
||||
itemstack = magicalities.wands.wand_take_contents(itemstack, {earth = 1})
|
||||
magicalities.wands.update_wand_desc(itemstack)
|
||||
|
||||
inv:remove_item("main", place_node_itm)
|
||||
|
||||
for _, stk in pairs(drops) do
|
||||
if inv:room_for_item("main", stk) then
|
||||
inv:add_item("main", stk)
|
||||
else
|
||||
minetest.item_drop(ItemStack(stk), user, vector.add(pos, {x=0,y=1,z=0}))
|
||||
end
|
||||
end
|
||||
|
||||
minetest.place_node(pos, {name = tnode})
|
||||
|
||||
return itemstack
|
||||
end,
|
||||
_wand_node = function (pos, node, placer, itemstack, pointed_thing)
|
||||
if not node or node.name == "air" or node.name == "ignore" then return itemstack end
|
||||
local meta = itemstack:get_meta()
|
||||
local tnode = meta:get_string("swapnode")
|
||||
|
||||
if tnode == node.name then return itemstack end
|
||||
meta:set_string("swapnode", node.name)
|
||||
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
minetest.chat_send_player(placer:get_player_name(), "Selected replacement node " .. ndef.description)
|
||||
|
||||
return itemstack
|
||||
end
|
||||
})
|
||||
|
@ -3,10 +3,10 @@ magicalities.arcane = {}
|
||||
magicalities.arcane.recipes = {}
|
||||
|
||||
local fmspecelems = {
|
||||
["earth"] = {3, 0.15},
|
||||
["earth"] = {2.98, 0.15},
|
||||
["water"] = {1, 1},
|
||||
["air"] = {5, 1},
|
||||
["fire"] = {3, 4.85},
|
||||
["fire"] = {2.98, 4.85},
|
||||
["light"] = {1, 4},
|
||||
["dark"] = {5, 4}
|
||||
}
|
||||
|
BIN
textures/magicalities_focus_swap.png
Normal file
BIN
textures/magicalities_focus_swap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 34 KiB |
Loading…
Reference in New Issue
Block a user