Files
BobBlocks/blocks.lua
Vanessa Ezekowitz 8f085b2c7f Rewrote the mod to use the new param2 color method
New dependency on Unified Dyes.

This change comes with a few neutral-to-positive side effects:

1) Minor recipe changes were necessary since there are only two blocks and
   two poles now.
2) All recipes, node names, etc. were updated to current minetest API.
3) Where recipes called for leaves or sticks, I used groups.
4) the "wavy" (formerly "grey") block and fence/pole can now be
   colored as well.
5) Inside the conversion LBM, some of the original colors were re-mapped
   to the closest Unified Dyes equivalents, to try to keep the on-screen
   appearance mostly the same after conversion.
6) Aside from "BTM" and "Health", all block and pole nodes can take on the
   entire Unified Dyes palette instead of just the 9 originally offered.

Mod works the same as others that depend on Unified Dyes - craft and place
a block or pole, then right-click on it with dye to colorize it.
2017-01-28 12:40:11 -05:00

322 lines
9.0 KiB
Lua

-- BobBlocks mod by RabbiBob
-- State Changes
bobblocks = {}
bobblocks.old_static_nodes = {}
bobblocks.colorlist = {
"red",
"orange",
"yellow",
"green",
"blue",
"indigo",
"violet",
"white",
"grey"
}
bobblocks.update_bobblock = function (pos, node)
local newnode = node
if string.find(newnode.name, "_off") then
newnode.name = string.sub(newnode.name, 1, -5)
else
newnode.name = newnode.name.."_off"
end
minetest.swap_node(pos, newnode)
minetest.sound_play("bobblocks_glassblock",
{pos = pos, gain = 1.0, max_hear_distance = 32,})
end
-- Nodes
minetest.register_node("bobblocks:block", {
description = "Bobblocks Plain Block",
drawtype = "glasslike",
tiles = {"bobblocks_block.png"},
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette.png",
sunlight_propagates = true,
is_ground_content = true,
sounds = default.node_sound_glass_defaults(),
light_source = LIGHT_MAX-0,
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
mesecons = {conductor={
state = mesecon.state.on,
offstate = "bobblocks:block_off"
}
},
on_punch = bobblocks.update_bobblock,
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "bobblocks:block", false)
end
})
minetest.register_node("bobblocks:block_off", {
description = "Bobblocks Plain Block (off)",
tiles = {"bobblocks_block.png"},
paramtype2 = "color",
palette = "unifieddyes_palette.png",
is_ground_content = true,
alpha = WATER_ALPHA,
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
drop = 'bobblocks:redblock',
mesecons = {conductor={
state = mesecon.state.off,
onstate = "bobblocks:block"
}
},
on_punch = bobblocks.update_bobblock,
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "bobblocks:block_off", false)
end
})
-- Block Poles
minetest.register_node("bobblocks:pole", {
description = "Bobblocks Pole",
drawtype = "fencelike",
tiles = {"bobblocks_block.png"},
inventory_image = ("bobblocks_pole_inv.png"),
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette.png",
sunlight_propagates = true,
is_ground_content = true,
sounds = default.node_sound_glass_defaults(),
light_source = LIGHT_MAX-0,
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
mesecons = {conductor={
state = mesecon.state.on,
offstate = "bobblocks:pole_off"
}
},
on_punch = bobblocks.update_bobblock,
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "bobblocks:pole", false)
end
})
minetest.register_node("bobblocks:pole_off", {
description = "Bobblocks Pole (off)",
drawtype = "fencelike",
tiles = {"bobblocks_block.png"},
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette.png",
sunlight_propagates = true,
is_ground_content = true,
sounds = default.node_sound_glass_defaults(),
light_source = LIGHT_MAX-10,
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
drop = 'bobblocks:redpole',
mesecons = {conductor={
state = mesecon.state.off,
onstate = "bobblocks:pole"
}
},
on_punch = bobblocks.update_bobblock,
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "bobblocks:pole_off", false)
end
})
-- old static nodes grandfathered-in because they have a different texture or usage than the colored ones.
minetest.register_node("bobblocks:btm", {
description = "Bobs TransMorgifier v5",
tiles = {"bobblocks_btm_sides.png", "bobblocks_btm_sides.png", "bobblocks_btm_sides.png",
"bobblocks_btm_sides.png", "bobblocks_btm_sides.png", "bobblocks_btm.png"},
inventory_image = "bobblocks_btm.png",
paramtype2 = "facedir",
material = minetest.digprop_dirtlike(1.0),
legacy_facedir_simple = true,
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
})
minetest.register_node("bobblocks:wavyblock", {
description = "Bobblocks Wavy-textured Block",
drawtype = "glasslike",
tiles = {"bobblocks_wavyblock.png"},
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette.png",
sunlight_propagates = true,
is_ground_content = true,
sounds = default.node_sound_glass_defaults(),
light_source = LIGHT_MAX-0,
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
mesecons = {conductor=
{
state = mesecon.state.on,
offstate = "bobblocks:wavyblock_off"
}
},
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "bobblocks:wavyblock", false)
end
})
minetest.register_node("bobblocks:wavyblock_off", {
description = "Bobblocks Wavy-textured Block (off)",
tiles = {"bobblocks_wavyblock.png"},
paramtype2 = "color",
palette = "unifieddyes_palette.png",
is_ground_content = true,
alpha = WATER_ALPHA,
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
drop = 'bobblocks:wavyblock',
mesecons = {conductor=
{
state = mesecon.state.off,
onstate = "bobblocks:wavyblock"
}
},
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "bobblocks:wavyblock_off", false)
end
})
minetest.register_node("bobblocks:wavypole", {
description = "Wavy-textured Pole",
drawtype = "fencelike",
tiles = {"bobblocks_wavyblock.png"},
inventory_image = ("bobblocks_wavypole_inv.png"),
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette.png",
sunlight_propagates = true,
is_ground_content = true,
sounds = default.node_sound_glass_defaults(),
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "bobblocks:wavypole", false)
end
--light_source = LIGHT_MAX-0,
})
-- Crafts
minetest.register_craft({
output = "bobblocks:btm",
type = "shapeless",
recipe = {
"default:glass",
"default:torch",
"group:leaves",
"default:mese_crystal",
"default:diamond"
},
})
minetest.register_craft({
output = "bobblocks:block 2",
recipe = {
{ "default:glass", "default:torch", "default:cobble" },
},
})
minetest.register_craft({
output = "bobblocks:pole",
recipe = {
{ "bobblocks:block", "group:stick" },
}
})
minetest.register_craft({
output = "bobblocks:wavyblock 2",
type = "shapeless",
recipe = {
"bobblocks:block",
"bobblocks:block"
},
})
minetest.register_craft({
output = "bobblocks:wavypole",
recipe = {
{ "bobblocks:wavyblock", "group:stick" },
}
})
-- Convert old static nodes to the param2 scheme
for _, i in ipairs(bobblocks.colorlist) do
table.insert(bobblocks.old_static_nodes, "bobblocks:"..i.."block")
table.insert(bobblocks.old_static_nodes, "bobblocks:"..i.."block_off")
table.insert(bobblocks.old_static_nodes, "bobblocks:"..i.."pole")
table.insert(bobblocks.old_static_nodes, "bobblocks:"..i.."pole_off")
end
minetest.register_lbm({
name = "bobblocks:convert",
label = "Convert bobblocks nodes to use param2 color",
run_at_every_load = true,
nodenames = bobblocks.old_static_nodes,
action = function(pos, node)
local basename = node.name
local color = string.sub(node.name, 11) -- delete the mod name
if string.find(color, "_off") then -- delete "_off" if it exists
color = string.sub(color, 1, -5)
end
if string.find(color, "pole") then
color = string.sub(color, 1, -5) -- delete "pole"...
else
color = string.sub(color, 1, -6) -- or delete "block"
end
local newcolor = "medium_"..color -- the result of the above should be just the hue
-- custom re-mappings to use unified dyes' colors that are most similar to the originals
if color == "blue" then
newcolor = "medium_skyblue"
end
if color == "indigo" then
newcolor = "light_violet"
end
if color == "violet" then
newcolor = "violet_s50"
end
if color == "white" then
newcolor = "light_grey"
end
local paletteidx, _ = unifieddyes.getpaletteidx("unifieddyes:"..newcolor, false)
local newnode = "bobblocks:block"
if string.find(basename, "grey") then
paletteidx, _ = unifieddyes.getpaletteidx("unifieddyes:grey", false)
if string.find(basename, "pole") then
newnode = "bobblocks:wavypole"
else
newnode = "bobblocks:wavyblock"
end
else
if string.find(basename, "pole") then
newnode = "bobblocks:pole"
end
end
local meta = minetest.get_meta(pos)
minetest.set_node(pos, { name = newnode, param2 = paletteidx })
meta:set_string("dye", "unifieddyes:"..newcolor)
end
})