replicating red/yellow/gray nodes

moving green/purple/orange nodes
master
Izzy 2020-03-15 14:36:55 -06:00
parent ab580188fe
commit 26e85ab2b4
1 changed files with 333 additions and 0 deletions

333
init.lua
View File

@ -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,
})