parent
ab580188fe
commit
26e85ab2b4
333
init.lua
333
init.lua
|
@ -358,3 +358,336 @@ minetest.register_abm({
|
|||
end,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("weirding:green_node", {
|
||||
description = "green node",
|
||||
tiles = {
|
||||
"default_dirt.png^[colorize:green:120",
|
||||
},
|
||||
groups = {cracky = 1, oddly_breakable_by_hand = 3},
|
||||
is_ground_content = false,
|
||||
-- paramtype2 = "facedir",
|
||||
-- on_place = minetest.rotate_node,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_glass_footstep", gain = 0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("weirding:purple_node", {
|
||||
description = "purple node",
|
||||
tiles = {
|
||||
"default_dirt.png^[colorize:purple:120",
|
||||
},
|
||||
groups = {cracky = 1, oddly_breakable_by_hand = 3},
|
||||
is_ground_content = false,
|
||||
-- paramtype2 = "facedir",
|
||||
-- on_place = minetest.rotate_node,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_glass_footstep", gain = 0.25},
|
||||
}),
|
||||
})
|
||||
minetest.register_node("weirding:orange_node", {
|
||||
description = "orange node",
|
||||
tiles = {
|
||||
"default_dirt.png^[colorize:orange:120",
|
||||
},
|
||||
groups = {cracky = 1, oddly_breakable_by_hand = 3},
|
||||
is_ground_content = false,
|
||||
-- paramtype2 = "facedir",
|
||||
-- on_place = minetest.rotate_node,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_glass_footstep", gain = 0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_node("weirding:red_node", {
|
||||
description = "red node",
|
||||
tiles = {
|
||||
"default_dirt.png^[colorize:red:120",
|
||||
},
|
||||
groups = {cracky = 1, oddly_breakable_by_hand = 3},
|
||||
is_ground_content = false,
|
||||
-- paramtype2 = "facedir",
|
||||
-- on_place = minetest.rotate_node,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_glass_footstep", gain = 0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("weirding:yellow_node", {
|
||||
description = "yellow node",
|
||||
tiles = {
|
||||
"default_dirt.png^[colorize:yellow:120",
|
||||
},
|
||||
groups = {cracky = 1, oddly_breakable_by_hand = 3},
|
||||
is_ground_content = false,
|
||||
-- paramtype2 = "facedir",
|
||||
-- on_place = minetest.rotate_node,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_glass_footstep", gain = 0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("weirding:gray_node", {
|
||||
description = "gray node",
|
||||
tiles = {
|
||||
"default_dirt.png^[colorize:gray:120",
|
||||
},
|
||||
groups = {cracky = 1, oddly_breakable_by_hand = 3},
|
||||
is_ground_content = false,
|
||||
-- paramtype2 = "facedir",
|
||||
-- on_place = minetest.rotate_node,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_glass_footstep", gain = 0.25},
|
||||
}),
|
||||
|
||||
on_timer = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local n = meta:get_string("name")
|
||||
if n ~= "" then
|
||||
minetest.set_node(pos, {
|
||||
name = n,
|
||||
param2 = meta:get_int("param2"),
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
|
||||
local function set_later(pos, name)
|
||||
local n = name
|
||||
local p = {x=pos.x, y=pos.y, z=pos.z}
|
||||
minetest.after(1, function()
|
||||
minetest.set_node(p, {name=n})
|
||||
end)
|
||||
end
|
||||
local function set_now(pos, name)
|
||||
minetest.set_node(pos, {name=name})
|
||||
end
|
||||
|
||||
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"weirding:red_node"},
|
||||
neighbors = {"weirding:red_node"},
|
||||
interval = 2,
|
||||
chance = 1,
|
||||
-- catch_up = true,
|
||||
action = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name ~= "weirding:red_node" then return end
|
||||
|
||||
-- local bhash = minetest.hash_node_position(pos)
|
||||
-- if weirding.just_placed[bhash] == true then
|
||||
-- return
|
||||
-- end
|
||||
-- weirding.just_placed[bhash] = true
|
||||
|
||||
local red_nodes = minetest.find_nodes_in_area(
|
||||
{x=pos.x - 1, y=pos.y - 1, z=pos.z - 1},
|
||||
{x=pos.x + 1, y=pos.y + 1, z=pos.z + 1},
|
||||
{"weirding:red_node"}
|
||||
)
|
||||
|
||||
-- if #red_nodes >= 4 then
|
||||
-- minetest.set_node(pos, {name="weirding:green_node"})
|
||||
-- return
|
||||
-- end
|
||||
|
||||
for _,rnp in ipairs(red_nodes) do
|
||||
|
||||
-- local bhash = minetest.hash_node_position(rnp)
|
||||
-- if weirding.just_placed[bhash] == true then
|
||||
-- return
|
||||
-- end
|
||||
-- weirding.just_placed[bhash] = true
|
||||
|
||||
local d = vector.subtract(pos, rnp);
|
||||
local opp = vector.add(pos, d);
|
||||
|
||||
local on = minetest.get_node(opp)
|
||||
if on ~= nil and (on.name == "air" or minetest.registered_nodes[on.name].buildable_to) then
|
||||
-- minetest.set_node(rnp, {name="air"})
|
||||
set_later(opp, "weirding:red_node")
|
||||
end
|
||||
end
|
||||
--
|
||||
-- minetest.set_node(pos, {name="weirding:red_node"})
|
||||
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"weirding:yellow_node"},
|
||||
neighbors = {"weirding:red_node"},
|
||||
interval = 2,
|
||||
chance = 1,
|
||||
-- catch_up = true,
|
||||
action = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name ~= "weirding:yellow_node" then return end
|
||||
|
||||
local red_nodes = minetest.find_nodes_in_area(
|
||||
{x=pos.x - 1, y=pos.y - 1, z=pos.z - 1},
|
||||
{x=pos.x + 1, y=pos.y + 1, z=pos.z + 1},
|
||||
{"weirding:red_node"}
|
||||
)
|
||||
|
||||
for _,rnp in ipairs(red_nodes) do
|
||||
|
||||
local bhash = minetest.hash_node_position(rnp)
|
||||
if weirding.just_placed[bhash] == true then
|
||||
return
|
||||
end
|
||||
weirding.just_placed[bhash] = true
|
||||
|
||||
local d = vector.subtract(pos, rnp);
|
||||
local opp = vector.add(pos, d);
|
||||
|
||||
local on = minetest.get_node(opp)
|
||||
if on ~= nil and on.name ~= "air" then
|
||||
-- minetest.set_node(rnp, {name="air"})
|
||||
minetest.set_node(rnp, {name="weirding:gray_node"})
|
||||
local meta = minetest.get_meta(rnp)
|
||||
meta:set_string("name", on.name)
|
||||
meta:set_int("param2", on.param2)
|
||||
|
||||
local t = minetest.get_node_timer(rnp)
|
||||
t:start(10)
|
||||
end
|
||||
end
|
||||
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"weirding:gray_node"},
|
||||
neighbors = {"weirding:red_node"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
-- catch_up = true,
|
||||
action = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name ~= "weirding:gray_node" then return end
|
||||
|
||||
local nmeta = minetest.get_meta(pos)
|
||||
local param2 = nmeta:get_int("param2")
|
||||
local name = nmeta:get_string("name")
|
||||
|
||||
local red_nodes = minetest.find_nodes_in_area(
|
||||
{x=pos.x - 1, y=pos.y - 1, z=pos.z - 1},
|
||||
{x=pos.x + 1, y=pos.y + 1, z=pos.z + 1},
|
||||
{"weirding:red_node"}
|
||||
)
|
||||
|
||||
for _,rnp in ipairs(red_nodes) do
|
||||
|
||||
-- minetest.set_node(rnp, {name="air"})
|
||||
minetest.set_node(rnp, {name="weirding:gray_node"})
|
||||
local meta = minetest.get_meta(rnp)
|
||||
meta:set_string("name", name)
|
||||
meta:set_int("param2", param2)
|
||||
|
||||
local t = minetest.get_node_timer(rnp)
|
||||
t:start(10)
|
||||
end
|
||||
|
||||
end,
|
||||
})
|
||||
|
||||
-- clear
|
||||
minetest.register_abm({
|
||||
nodenames = {"weirding:green_node", "weirding:red_node"},
|
||||
interval = 100000000,
|
||||
chance = 1,
|
||||
-- catch_up = true,
|
||||
action = function(pos)
|
||||
-- minetest.set_node(pos, {name="air"})
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"weirding:green_node"},
|
||||
neighbors = {"weirding:purple_node"},
|
||||
interval = 2,
|
||||
chance = 1,
|
||||
-- catch_up = true,
|
||||
action = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name ~= "weirding:green_node" then
|
||||
-- minetest.set_node(pos, {name="air"})
|
||||
return
|
||||
end
|
||||
|
||||
local bhash = minetest.hash_node_position(pos)
|
||||
if weirding.just_placed[bhash] == true then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local purple_nodes = minetest.find_nodes_in_area(
|
||||
{x=pos.x - 1, y=pos.y - 1, z=pos.z - 1},
|
||||
{x=pos.x + 1, y=pos.y + 1, z=pos.z + 1},
|
||||
{"weirding:purple_node"}
|
||||
)
|
||||
|
||||
if #purple_nodes ~= 1 then
|
||||
minetest.set_node(pos, {name="default:glass"})
|
||||
return
|
||||
end
|
||||
|
||||
local pu_pos = purple_nodes[1]
|
||||
|
||||
local orange_nodes = minetest.find_nodes_in_area(
|
||||
{x=pu_pos.x - 1, y=pu_pos.y - 1, z=pu_pos.z - 1},
|
||||
{x=pu_pos.x + 1, y=pu_pos.y + 1, z=pu_pos.z + 1},
|
||||
{"weirding:orange_node"}
|
||||
)
|
||||
if #orange_nodes ~= 1 then
|
||||
minetest.set_node(pos, {name="default:glass"})
|
||||
return
|
||||
end
|
||||
|
||||
local or_pos = orange_nodes[1]
|
||||
local mvdir = vector.subtract(pos, pu_pos)
|
||||
|
||||
local or_next_pos = vector.add(or_pos, mvdir)
|
||||
local orn = minetest.get_node(or_next_pos)
|
||||
if orn and not minetest.registered_nodes[orn.name].buildable_to then
|
||||
minetest.set_node(pos, {name="default:glass"})
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
|
||||
local dir = vector.subtract(pu_pos, or_pos)
|
||||
-- local inv_dir = vector.multiply(dir, -1)
|
||||
|
||||
-- from the corner to behind
|
||||
local source_pos_a = vector.add(pos, mvdir)
|
||||
local target_pos_a = vector.add(source_pos_a, dir)
|
||||
|
||||
local src_a = minetest.get_node(source_pos_a)
|
||||
local tar_a = minetest.get_node(target_pos_a)
|
||||
minetest.swap_node(source_pos_a, tar_a)
|
||||
minetest.swap_node(target_pos_a, src_a)
|
||||
|
||||
|
||||
local mvdir = vector.subtract(pos, pu_pos)
|
||||
minetest.set_node(pu_pos, {name="air"})
|
||||
minetest.set_node(or_pos, {name="air"})
|
||||
minetest.set_node(pos, {name="air"})
|
||||
set_now(vector.add(pu_pos, mvdir), "weirding:purple_node")
|
||||
set_now(vector.add(or_pos, mvdir), "weirding:orange_node")
|
||||
set_now(vector.add(pos, mvdir), "weirding:green_node")
|
||||
|
||||
weirding.just_placed[minetest.hash_node_position(vector.add(pos, mvdir))] = true
|
||||
|
||||
|
||||
end,
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue