updated digistuff, homedecor, roads, moreblocks, moretrees, quartz,
rgblightstone, simple streetlights, steel, technic, titanium, plantlife, unified inventory, and worldedit. Add tenplus1's bakedclay and cblocks mods
18
bakedclay/README.md
Normal file
@ -0,0 +1,18 @@
|
||||
Baked Clay
|
||||
|
||||
This mod lets the player bake clay into hardened blocks and colour them with
|
||||
dye (8x baked clay and 1x dye in centre), stairs and slabs are also available.
|
||||
|
||||
https://forum.minetest.net/viewtopic.php?id=8890
|
||||
|
||||
Changelog:
|
||||
|
||||
- 0.7 - Added support for stairsplus so that stairs are registered properly
|
||||
- 0.6 - Added 3 new flowers and a new grass that are used for missing dyes
|
||||
- 0.5 - Now using minecraft recipe to colour baked clay (8x baked clay, 1x dye in centre)
|
||||
- 0.4 - Code tweak and tidy
|
||||
- 0.3 - Added Stairs and Slabs for each colour
|
||||
- 0.2 - Any colour of baked clay can be re-dyed into another colour
|
||||
- 0.1 - Initial Release
|
||||
|
||||
Lucky Blocks: 8
|
4
bakedclay/depends.txt
Normal file
@ -0,0 +1,4 @@
|
||||
default
|
||||
stairs
|
||||
moreblocks?
|
||||
lucky_block?
|
1
bakedclay/description.txt
Normal file
@ -0,0 +1 @@
|
||||
Adds the ability to bake clay into blocks and colour them with dye.
|
270
bakedclay/init.lua
Normal file
@ -0,0 +1,270 @@
|
||||
|
||||
-- Baked Clay by TenPlus1
|
||||
|
||||
local clay = {
|
||||
{"white", "White"},
|
||||
{"grey", "Grey"},
|
||||
{"black", "Black"},
|
||||
{"red", "Red"},
|
||||
{"yellow", "Yellow"},
|
||||
{"green", "Green"},
|
||||
{"cyan", "Cyan"},
|
||||
{"blue", "Blue"},
|
||||
{"magenta", "Magenta"},
|
||||
{"orange", "Orange"},
|
||||
{"violet", "Violet"},
|
||||
{"brown", "Brown"},
|
||||
{"pink", "Pink"},
|
||||
{"dark_grey", "Dark Grey"},
|
||||
{"dark_green", "Dark Green"},
|
||||
}
|
||||
|
||||
local stairs_mod = minetest.get_modpath("stairs")
|
||||
local stairsplus_mod = minetest.get_modpath("moreblocks")
|
||||
and minetest.global_exists("stairsplus")
|
||||
|
||||
for _, clay in pairs(clay) do
|
||||
|
||||
-- node definition
|
||||
|
||||
minetest.register_node("bakedclay:" .. clay[1], {
|
||||
description = clay[2] .. " Baked Clay",
|
||||
tiles = {"baked_clay_" .. clay[1] ..".png"},
|
||||
groups = {cracky = 3, bakedclay = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
-- craft from dye and any baked clay
|
||||
|
||||
minetest.register_craft({
|
||||
output = "bakedclay:" .. clay[1] .. " 8",
|
||||
recipe = {
|
||||
{"group:bakedclay", "group:bakedclay", "group:bakedclay"},
|
||||
{"group:bakedclay", "dye:" .. clay[1], "group:bakedclay"},
|
||||
{"group:bakedclay", "group:bakedclay", "group:bakedclay"}
|
||||
},
|
||||
})
|
||||
|
||||
-- register stairsplus stairs if found
|
||||
if stairsplus_mod then
|
||||
|
||||
stairsplus:register_all("bakedclay", "baked_clay_" .. clay[1], "bakedclay:" .. clay[1], {
|
||||
description = clay[2] .. " Baked Clay",
|
||||
tiles = {"baked_clay_" .. clay[1] .. ".png"},
|
||||
groups = {cracky = 3},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
stairsplus:register_alias_all("bakedclay", clay[1], "bakedclay", "baked_clay_" .. clay[1])
|
||||
minetest.register_alias("stairs:slab_bakedclay_".. clay[1], "bakedclay:slab_baked_clay_" .. clay[1])
|
||||
minetest.register_alias("stairs:stair_bakedclay_".. clay[1], "bakedclay:stair_baked_clay_" .. clay[1])
|
||||
|
||||
-- register all stair types for stairs redo
|
||||
elseif stairs_mod and stairs.mod then
|
||||
|
||||
stairs.register_all("bakedclay_" .. clay[1], "bakedclay:" .. clay[1],
|
||||
{cracky = 3},
|
||||
{"baked_clay_" .. clay[1] .. ".png"},
|
||||
clay[2] .. " Baked Clay",
|
||||
default.node_sound_stone_defaults())
|
||||
|
||||
-- register stair and slab using default stairs
|
||||
elseif stairs_mod then
|
||||
|
||||
stairs.register_stair_and_slab("bakedclay_".. clay[1], "bakedclay:".. clay[1],
|
||||
{cracky = 3},
|
||||
{"baked_clay_" .. clay[1] .. ".png"},
|
||||
clay[2] .. " Baked Clay Stair",
|
||||
clay[2] .. " Baked Clay Slab",
|
||||
default.node_sound_stone_defaults())
|
||||
end
|
||||
end
|
||||
|
||||
-- cook clay block into white baked clay
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "bakedclay:white",
|
||||
recipe = "default:clay",
|
||||
})
|
||||
|
||||
-- register a few extra dye colour options
|
||||
|
||||
minetest.register_craft( {
|
||||
type = "shapeless",
|
||||
output = "dye:dark_grey 3",
|
||||
recipe = {"dye:black", "dye:black", "dye:white"}
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
type = "shapeless",
|
||||
output = "dye:grey 3",
|
||||
recipe = {"dye:black", "dye:white", "dye:white"}
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
type = "shapeless",
|
||||
output = "dye:green 4",
|
||||
recipe = {"default:cactus"}
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
type = "shapeless",
|
||||
output = "dye:black 4",
|
||||
recipe = {"default:coal_lump"}
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
type = "shapeless",
|
||||
output = "dye:brown 4",
|
||||
recipe = {"default:dry_shrub"}
|
||||
})
|
||||
|
||||
-- 2x2 red bakedclay makes 16x clay brick
|
||||
minetest.register_craft( {
|
||||
output = "default:clay_brick 16",
|
||||
recipe = {
|
||||
{"bakedclay:red", "bakedclay:red"},
|
||||
{"bakedclay:red", "bakedclay:red"},
|
||||
}
|
||||
})
|
||||
|
||||
-- register some new flowers to fill in missing dye colours
|
||||
-- flower registration (borrowed from default game)
|
||||
|
||||
local function add_simple_flower(name, desc, box, f_groups)
|
||||
|
||||
f_groups.snappy = 3
|
||||
f_groups.flower = 1
|
||||
f_groups.flora = 1
|
||||
f_groups.attached_node = 1
|
||||
|
||||
minetest.register_node("bakedclay:" .. name, {
|
||||
description = desc,
|
||||
drawtype = "plantlike",
|
||||
waving = 1,
|
||||
tiles = {"baked_clay_" .. name .. ".png"},
|
||||
inventory_image = "baked_clay_" .. name .. ".png",
|
||||
wield_image = "baked_clay_" .. name .. ".png",
|
||||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
stack_max = 99,
|
||||
groups = f_groups,
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = box
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
local flowers = {
|
||||
{"delphinium", "Blue Delphinium", {-0.15, -0.5, -0.15, 0.15, 0.3, 0.15}, {color_cyan = 1}},
|
||||
{"thistle", "Thistle", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_magenta = 1}},
|
||||
{"lazarus", "Lazarus Bell", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_pink = 1}},
|
||||
{"mannagrass", "Reed Mannagrass", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_dark_green = 1}},
|
||||
}
|
||||
|
||||
for _,item in pairs(flowers) do
|
||||
add_simple_flower(unpack(item))
|
||||
end
|
||||
|
||||
-- mapgen for new flowers
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0,
|
||||
scale = 0.004,
|
||||
spread = {x = 100, y = 100, z = 100},
|
||||
seed = 7133,
|
||||
octaves = 3,
|
||||
persist = 0.6
|
||||
},
|
||||
y_min = 10,
|
||||
y_max = 90,
|
||||
decoration = "bakedclay:delphinium",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = {"default:dirt_with_grass", "default:dirt_with_dry_grass"},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0,
|
||||
scale = 0.004,
|
||||
spread = {x = 100, y = 100, z = 100},
|
||||
seed = 7134,
|
||||
octaves = 3,
|
||||
persist = 0.6
|
||||
},
|
||||
y_min = 15,
|
||||
y_max = 90,
|
||||
decoration = "bakedclay:thistle",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0,
|
||||
scale = 0.01,
|
||||
spread = {x = 100, y = 100, z = 100},
|
||||
seed = 7135,
|
||||
octaves = 3,
|
||||
persist = 0.6
|
||||
},
|
||||
y_min = 1,
|
||||
y_max = 90,
|
||||
decoration = "bakedclay:lazarus",
|
||||
spawn_by = "default:jungletree",
|
||||
num_spawn_by = 1,
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = {"default:dirt_with_grass", "default:sand"},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0,
|
||||
scale = 0.009,
|
||||
spread = {x = 100, y = 100, z = 100},
|
||||
seed = 7136,
|
||||
octaves = 3,
|
||||
persist = 0.6
|
||||
},
|
||||
y_min = 1,
|
||||
y_max = 15,
|
||||
decoration = "bakedclay:mannagrass",
|
||||
spawn_by = "group:water",
|
||||
num_spawn_by = 1,
|
||||
})
|
||||
|
||||
-- add lucky blocks
|
||||
|
||||
if minetest.get_modpath("lucky_block") then
|
||||
local p = "bakedclay:"
|
||||
lucky_block:add_blocks({
|
||||
{"dro", {"bakedclay:"}, 10, true},
|
||||
{"fal", {p.."black", p.."blue", p.."brown", p.."cyan", p.."dark_green",
|
||||
p.."dark_grey", p.."green", p.."grey", p.."magenta", p.."orange",
|
||||
p.."pink", p.."red", p.."violet", p.."white", p.."yellow"}, 0},
|
||||
{"fal", {p.."black", p.."blue", p.."brown", p.."cyan", p.."dark_green",
|
||||
p.."dark_grey", p.."green", p.."grey", p.."magenta", p.."orange",
|
||||
p.."pink", p.."red", p.."violet", p.."white", p.."yellow"}, 0, true},
|
||||
{"dro", {p.."delphinium"}, 5},
|
||||
{"dro", {p.."lazarus"}, 5},
|
||||
{"dro", {p.."mannagrass"}, 5},
|
||||
{"dro", {p.."thistle"}, 6},
|
||||
{"flo", 5, {p.."black", p.."blue", p.."brown", p.."cyan", p.."dark_green",
|
||||
p.."dark_grey", p.."green", p.."grey", p.."magenta", p.."orange",
|
||||
p.."pink", p.."red", p.."violet", p.."white", p.."yellow"}, 2},
|
||||
})
|
||||
end
|
||||
|
||||
print ("[MOD] Baked Clay loaded")
|
21
bakedclay/license.txt
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 TenPlus1
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
1
bakedclay/mod.conf
Normal file
@ -0,0 +1 @@
|
||||
name = bakedclay
|
BIN
bakedclay/screenshot.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
bakedclay/textures/baked_clay_black.png
Normal file
After Width: | Height: | Size: 189 B |
BIN
bakedclay/textures/baked_clay_blue.png
Normal file
After Width: | Height: | Size: 257 B |
BIN
bakedclay/textures/baked_clay_brown.png
Normal file
After Width: | Height: | Size: 258 B |
BIN
bakedclay/textures/baked_clay_cyan.png
Normal file
After Width: | Height: | Size: 289 B |
BIN
bakedclay/textures/baked_clay_dark_green.png
Normal file
After Width: | Height: | Size: 287 B |
BIN
bakedclay/textures/baked_clay_dark_grey.png
Normal file
After Width: | Height: | Size: 226 B |
BIN
bakedclay/textures/baked_clay_delphinium.png
Normal file
After Width: | Height: | Size: 214 B |
BIN
bakedclay/textures/baked_clay_green.png
Normal file
After Width: | Height: | Size: 351 B |
BIN
bakedclay/textures/baked_clay_grey.png
Normal file
After Width: | Height: | Size: 211 B |
BIN
bakedclay/textures/baked_clay_lazarus.png
Normal file
After Width: | Height: | Size: 170 B |
BIN
bakedclay/textures/baked_clay_magenta.png
Normal file
After Width: | Height: | Size: 341 B |
BIN
bakedclay/textures/baked_clay_mannagrass.png
Normal file
After Width: | Height: | Size: 201 B |
BIN
bakedclay/textures/baked_clay_orange.png
Normal file
After Width: | Height: | Size: 421 B |
BIN
bakedclay/textures/baked_clay_pink.png
Normal file
After Width: | Height: | Size: 289 B |
BIN
bakedclay/textures/baked_clay_red.png
Normal file
After Width: | Height: | Size: 425 B |
BIN
bakedclay/textures/baked_clay_thistle.png
Normal file
After Width: | Height: | Size: 154 B |
BIN
bakedclay/textures/baked_clay_violet.png
Normal file
After Width: | Height: | Size: 332 B |
BIN
bakedclay/textures/baked_clay_white.png
Normal file
After Width: | Height: | Size: 255 B |
BIN
bakedclay/textures/baked_clay_yellow.png
Normal file
After Width: | Height: | Size: 361 B |
14
cblocks/README.md
Normal file
@ -0,0 +1,14 @@
|
||||
CBlocks (Coloured Blocks) mod for Minetest
|
||||
|
||||
This mod adds coloured wood and stonebrick blocks to the game without the need for any additional textures. To craft place 2 wood or stonebrick blocks and then 1 coloured dye.
|
||||
|
||||
https://forum.minetest.net/viewtopic.php?f=9&t=13303
|
||||
|
||||
|
||||
Change log:
|
||||
|
||||
- 0.1 - Initial release
|
||||
- 0.2 - Added coloured glass and fixed violet
|
||||
- 0.3 - Added stairsplus and stairs mod support
|
||||
|
||||
Lucky Blocks: 4
|
4
cblocks/depends.txt
Normal file
@ -0,0 +1,4 @@
|
||||
default
|
||||
lucky_block?
|
||||
stairs?
|
||||
moreblocks?
|
1
cblocks/description.txt
Normal file
@ -0,0 +1 @@
|
||||
Adds coloured wood, glass and stone blocks.
|
146
cblocks/init.lua
Normal file
@ -0,0 +1,146 @@
|
||||
|
||||
local colours = {
|
||||
{"black", "Black", "#000000b0"},
|
||||
{"blue", "Blue", "#015dbb70"},
|
||||
{"brown", "Brown", "#a78c4570"},
|
||||
{"cyan", "Cyan", "#01ffd870"},
|
||||
{"dark_green", "Dark Green", "#005b0770"},
|
||||
{"dark_grey", "Dark Grey", "#303030b0"},
|
||||
{"green", "Green", "#61ff0170"},
|
||||
{"grey", "Grey", "#5b5b5bb0"},
|
||||
{"magenta", "Magenta", "#ff05bb70"},
|
||||
{"orange", "Orange", "#ff840170"},
|
||||
{"pink", "Pink", "#ff65b570"},
|
||||
{"red", "Red", "#ff000070"},
|
||||
{"violet", "Violet", "#2000c970"},
|
||||
{"white", "White", "#abababc0"},
|
||||
{"yellow", "Yellow", "#e3ff0070"},
|
||||
}
|
||||
|
||||
local stairs_mod = minetest.get_modpath("stairs")
|
||||
local stairsplus_mod = minetest.get_modpath("moreblocks")
|
||||
and minetest.global_exists("stairsplus")
|
||||
|
||||
local function cblocks_stairs(nodename, def)
|
||||
|
||||
minetest.register_node(nodename, def)
|
||||
|
||||
if stairs_mod or stairsplus_mod then
|
||||
|
||||
local mod, name = nodename:match("(.*):(.*)")
|
||||
|
||||
for groupname, value in pairs(def.groups) do
|
||||
|
||||
if groupname ~= "cracky"
|
||||
and groupname ~= "choppy"
|
||||
and groupname ~="flammable"
|
||||
and groupname ~="crumbly"
|
||||
and groupname ~="snappy" then
|
||||
def.groups.groupname = nil
|
||||
end
|
||||
end
|
||||
|
||||
if stairsplus_mod then
|
||||
|
||||
stairsplus:register_all(mod, name, nodename, {
|
||||
description = def.description,
|
||||
tiles = def.tiles,
|
||||
groups = def.groups,
|
||||
sounds = def.sounds,
|
||||
})
|
||||
--[[
|
||||
elseif stairs_mod and stairs.mod then
|
||||
|
||||
stairs.register_all(name, nodename,
|
||||
def.groups,
|
||||
def.tiles,
|
||||
def.description,
|
||||
def.sounds,
|
||||
def.alpha
|
||||
)
|
||||
]]
|
||||
elseif stairs_mod and not stairs.mod then
|
||||
|
||||
stairs.register_stair_and_slab(name, nodename,
|
||||
def.groups,
|
||||
def.tiles,
|
||||
("%s Stair"):format(def.description),
|
||||
("%s Slab"):format(def.description),
|
||||
def.sounds
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, #colours, 1 do
|
||||
|
||||
-- wood
|
||||
|
||||
cblocks_stairs("cblocks:wood_" .. colours[i][1], {
|
||||
description = colours[i][2] .. " Wooden Planks",
|
||||
tiles = {"default_wood.png^[colorize:" .. colours[i][3]},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "cblocks:wood_".. colours[i][1] .. " 2",
|
||||
recipe = {
|
||||
{"group:wood","group:wood", "dye:" .. colours[i][1]},
|
||||
}
|
||||
})
|
||||
|
||||
-- stone brick
|
||||
|
||||
cblocks_stairs("cblocks:stonebrick_" .. colours[i][1], {
|
||||
description = colours[i][2] .. " Stone Brick",
|
||||
tiles = {"default_stone_brick.png^[colorize:" .. colours[i][3]},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "cblocks:stonebrick_".. colours[i][1] .. " 2",
|
||||
recipe = {
|
||||
{"default:stonebrick","default:stonebrick", "dye:" .. colours[i][1]},
|
||||
}
|
||||
})
|
||||
|
||||
-- glass (no stairs because they dont support transparant nodes)
|
||||
|
||||
minetest.register_node("cblocks:glass_" .. colours[i][1], {
|
||||
description = colours[i][2] .. " Glass",
|
||||
tiles = {"cblocks.png^[colorize:" .. colours[i][3]},
|
||||
drawtype = "glasslike",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
use_texture_alpha = true,
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 3},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "cblocks:glass_".. colours[i][1] .. " 2",
|
||||
recipe = {
|
||||
{"default:glass","default:glass", "dye:" .. colours[i][1]},
|
||||
}
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
-- add lucky blocks
|
||||
if minetest.get_modpath("lucky_block") then
|
||||
lucky_block:add_blocks({
|
||||
{"dro", {"cblocks:wood_"}, 10, true},
|
||||
{"dro", {"cblocks:stonebrick_"}, 10, true},
|
||||
{"dro", {"cblocks:glass_"}, 10, true},
|
||||
{"exp"},
|
||||
})
|
||||
end
|
||||
|
||||
print ("[MOD] Cblocks loaded")
|
21
cblocks/license.txt
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 TenPlus1
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
1
cblocks/mod.conf
Normal file
@ -0,0 +1 @@
|
||||
name = cblocks
|
BIN
cblocks/screenshot.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
cblocks/textures/cblocks.png
Normal file
After Width: | Height: | Size: 84 B |
@ -16,9 +16,18 @@ Only needed for craft recipes: default, mesecons_luacontroller, basic_materials
|
||||
How to use digilines buttons:
|
||||
Connect to a digiline (or digimese), right-click, and set a channel and message.
|
||||
When the button is pressed (right-click), it will send that message on that channel, over digilines.
|
||||
If the "Protected" checkbox is checked, only players allowed to interact in the area can push the button.
|
||||
If the "Manual Light Control" checkbox is checked, the light will not illuminate automatically when the button is pushed - use the "light_on" and "light_off" commands to control it.
|
||||
Note that the settings cannot be changed after setting - you must dig and re-place the button to do so.
|
||||
|
||||
|
||||
How to use the wall knob:
|
||||
Connect to a digiline, right-click, and set the channel and the minimum and maximum values.
|
||||
Left-click to decrease the current setting or right-click to increase it. If the "protected" checkbox was checked, then only players allowed to interact in the area can do this.
|
||||
Each time the setting is changed, the new setting is sent on the selected channel.
|
||||
Note that the settings cannot be changed after setting - you must dig and re-place the knob to do so.
|
||||
|
||||
|
||||
How to use digimese:
|
||||
It conducts digilines signals (like digilines) in all directions (like mese). That's about it, really.
|
||||
|
||||
@ -26,7 +35,7 @@ It conducts digilines signals (like digilines) in all directions (like mese). Th
|
||||
How to use vertical/insulated digilines:
|
||||
These work exactly like the mesecons equivalents, that is:
|
||||
Vertical digilines will automatically connect to other vertical digilines directly above or below them, and form "plates" on each end of the stack. Signals can only be conducted into or out of the stack at these "plates".
|
||||
Insulated digilines conduct like regular digilines, but only into/out of the ends of the "wire".
|
||||
Insulated digilines conduct like regular digilines, but only into/out of the ends of the "wire" or at locations where an intermediate connection has been placed.
|
||||
|
||||
|
||||
How to use the digilines player detector:
|
||||
|
@ -167,6 +167,7 @@ digistuff.vertical_autoconnect = function(pos)
|
||||
shouldbe = "digistuff:vertical_top"
|
||||
end
|
||||
end
|
||||
if node.name == "digistuff:vertical_tap" then shouldbe = "digistuff:vertical_tap" end
|
||||
if shouldbe ~= node.name or upnode.name == "digistuff:vertical_bottom" or dnnode.name == "digistuff:vertical_top" then
|
||||
node.name = shouldbe
|
||||
minetest.set_node(pos,node)
|
||||
@ -183,6 +184,44 @@ digistuff.vertical_remove = function(pos)
|
||||
digistuff.vertical_autoconnect(dnpos)
|
||||
end
|
||||
|
||||
minetest.register_node("digistuff:vertical_tap", {
|
||||
description = "Vertical Digiline Intermediate Connection",
|
||||
tiles = {"digistuff_digiline_full.png"},
|
||||
paramtype = "light",
|
||||
groups = {dig_immediate = 3,vertical_digiline = 1,},
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,-0.4375,0.5},
|
||||
{-0.05,-0.4375,-0.05,0.05,0.5,0.05},
|
||||
},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.5,-0.5,0.5,-0.4375,0.5},
|
||||
},
|
||||
},
|
||||
after_place_node = digistuff.vertical_autoconnect,
|
||||
after_destruct = digistuff.vertical_remove,
|
||||
digiline = {
|
||||
receptor = {},
|
||||
wire = {
|
||||
rules = {
|
||||
{x = 1,y = 0,z = 0},
|
||||
{x = -1,y = 0,z = 0},
|
||||
{x = 0,y = 0,z = 1},
|
||||
{x = 0,y = 0,z = -1},
|
||||
{x = 0,y = 1,z = 0},
|
||||
{x = 0,y = -1,z = 0},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("digistuff:vertical_bottom", {
|
||||
description = "Vertical Digiline",
|
||||
tiles = {"digistuff_digiline_full.png"},
|
||||
@ -505,6 +544,15 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digistuff:vertical_tap 5",
|
||||
recipe = {
|
||||
{"","digistuff:vertical_bottom",""},
|
||||
{"digilines:wire_std_00000000","digistuff:vertical_bottom","digilines:wire_std_00000000"},
|
||||
{"","digistuff:vertical_bottom",""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digistuff:insulated_corner 3",
|
||||
recipe = {
|
||||
|
@ -1,3 +1,5 @@
|
||||
digistuff.mesecons_installed = minetest.get_modpath("mesecons")
|
||||
|
||||
digistuff.rotate_rules = function(rulesin,dir)
|
||||
local rules = {}
|
||||
for k,v in ipairs(rulesin) do rules[k] = v end
|
||||
@ -42,3 +44,14 @@ digistuff.rotate_rules = function(rulesin,dir)
|
||||
return {}
|
||||
end
|
||||
end
|
||||
|
||||
digistuff.check_protection = function(pos,player)
|
||||
assert(type(pos) == "table","Position must be a table")
|
||||
assert(type(player) == "string" or type(player) == "userdata","Invalid player specified")
|
||||
if type(player) == "userdata" then player = player:get_player_name() end
|
||||
if minetest.is_protected(pos,player) and not minetest.check_player_privs(player,{protection_bypass=true}) then
|
||||
minetest.record_protection_violation(pos,player)
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
@ -1,7 +1,48 @@
|
||||
digistuff.button_turnoff = function (pos)
|
||||
digistuff.button_turnoff = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
minetest.swap_node(pos, {name = "digistuff:button_off", param2=node.param2})
|
||||
if minetest.get_modpath("mesecons") then minetest.sound_play("mesecons_button_pop", {pos=pos}) end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local mlight = meta:get_int("mlight") == 1
|
||||
if node.name == "digistuff:button_off_pushed" then node.name = "digistuff:button_off"
|
||||
elseif node.name == "digistuff:button_on" and not mlight then node.name = "digistuff:button_off"
|
||||
elseif node.name == "digistuff:button_on_pushed" then
|
||||
if mlight then node.name = "digistuff:button_on"
|
||||
else node.name = "digistuff:button_off" end
|
||||
end
|
||||
minetest.swap_node(pos,node)
|
||||
if digistuff.mesecons_installed then minetest.sound_play("mesecons_button_pop", {pos=pos}) end
|
||||
end
|
||||
|
||||
digistuff.button_push = function(pos,node,player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_int("protected") == 1 and not digistuff.check_protection(pos,player) then return end
|
||||
local mlight = meta:get_int("mlight") == 1
|
||||
digiline:receptor_send(pos, digistuff.button_get_rules(node), meta:get_string("channel"), meta:get_string("msg"))
|
||||
local newnode = "digistuff:button_on_pushed"
|
||||
if meta:get_int("mlight") == 1 and (node.name == "digistuff:button_off" or node.name == "digistuff:button_off_pushed") then newnode = "digistuff:button_off_pushed" end
|
||||
if node.name ~= newnode then minetest.swap_node(pos, {name = newnode, param2=node.param2}) end
|
||||
if digistuff.mesecons_installed then minetest.sound_play("mesecons_button_push", {pos=pos}) end
|
||||
minetest.get_node_timer(pos):start(0.25)
|
||||
end
|
||||
|
||||
digistuff.button_handle_digilines = function(pos,node,channel,msg)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if channel ~= meta:get_string("channel") then return end
|
||||
if meta:get_int("mlight") == 0 then return end
|
||||
if msg == "light_on" then
|
||||
if node.name == "digistuff:button_off" then
|
||||
node.name = "digistuff:button_on"
|
||||
elseif node.name == "digistuff:button_off_pushed" then
|
||||
node.name = "digistuff:button_on_pushed"
|
||||
end
|
||||
minetest.swap_node(pos,node)
|
||||
elseif msg == "light_off" then
|
||||
if node.name == "digistuff:button_on" then
|
||||
node.name = "digistuff:button_off"
|
||||
elseif node.name == "digistuff:button_on_pushed" then
|
||||
node.name = "digistuff:button_off_pushed"
|
||||
end
|
||||
minetest.swap_node(pos,node)
|
||||
end
|
||||
end
|
||||
|
||||
digistuff.button_get_rules = function(node)
|
||||
@ -58,19 +99,26 @@ minetest.register_node("digistuff:button", {
|
||||
description = "Digilines Button",
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec","size[8,4;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;6,2;msg;Message;${msg}]button_exit[2.25,3;3,1;submit;Save]")
|
||||
meta:set_string("formspec","size[7.5,3]field[1,0;6,2;channel;Channel;${channel}]field[1,1;6,2;msg;Message;${msg}]checkbox[1,1.75;protected;Protected]checkbox[1,2;mlight;Manual Light Control]button_exit[3,2;3,1;submit;Save]")
|
||||
end,
|
||||
after_place_node = digistuff.place_receiver,
|
||||
after_destruct = digistuff.remove_receiver,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
print(dump(fields))
|
||||
local meta = minetest.get_meta(pos)
|
||||
if fields.channel and fields.channel ~= "" then
|
||||
meta:set_string("channel",fields.channel)
|
||||
meta:set_string("msg",fields.msg)
|
||||
meta:set_string("formspec","")
|
||||
minetest.swap_node(pos, {name = "digistuff:button_off", param2=minetest.get_node(pos).param2})
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(),"Please set a channel!")
|
||||
if fields.submit then
|
||||
if fields.channel ~= "" then
|
||||
meta:set_string("channel",fields.channel)
|
||||
meta:set_string("msg",fields.msg)
|
||||
meta:set_string("formspec","")
|
||||
minetest.swap_node(pos, {name = "digistuff:button_off", param2=minetest.get_node(pos).param2})
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(),"Please set a channel!")
|
||||
end
|
||||
elseif fields.protected then
|
||||
meta:set_int("protected",fields.protected == "true" and 1 or 0)
|
||||
elseif fields.mlight then
|
||||
meta:set_int("mlight",fields.mlight == "true" and 1 or 0)
|
||||
end
|
||||
end,
|
||||
sounds = default and default.node_sound_stone_defaults(),
|
||||
@ -108,22 +156,110 @@ minetest.register_node("digistuff:button_off", {
|
||||
wire = {
|
||||
rules = digistuff.button_get_rules,
|
||||
},
|
||||
effector = {
|
||||
action = digistuff.button_handle_digilines,
|
||||
},
|
||||
},
|
||||
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
|
||||
drop = "digistuff:button",
|
||||
after_destruct = digistuff.remove_receiver,
|
||||
description = "Digilines Button (off state - you hacker you!)",
|
||||
on_rightclick = function (pos, node, clicker)
|
||||
local meta = minetest.get_meta(pos)
|
||||
digiline:receptor_send(pos, digistuff.button_get_rules(node), meta:get_string("channel"), meta:get_string("msg"))
|
||||
minetest.swap_node(pos, {name = "digistuff:button_on", param2=node.param2})
|
||||
if minetest.get_modpath("mesecons") then minetest.sound_play("mesecons_button_push", {pos=pos}) end
|
||||
minetest.get_node_timer(pos):start(0.25)
|
||||
end,
|
||||
on_rightclick = digistuff.button_push,
|
||||
sounds = default and default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("digistuff:button_off_pushed", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_off.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
legacy_wallmounted = true,
|
||||
walkable = false,
|
||||
sunlight_propagates = true,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -6/16, -6/16, 6/16, 6/16, 6/16, 8/16 },
|
||||
{ -4/16, -2/16, 11/32, 4/16, 2/16, 6/16 }
|
||||
}
|
||||
},
|
||||
digiline =
|
||||
{
|
||||
receptor = {},
|
||||
wire = {
|
||||
rules = digistuff.button_get_rules,
|
||||
},
|
||||
effector = {
|
||||
action = digistuff.button_handle_digilines,
|
||||
},
|
||||
},
|
||||
on_timer = digistuff.button_turnoff,
|
||||
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
|
||||
drop = "digistuff:button",
|
||||
after_destruct = digistuff.remove_receiver,
|
||||
description = "Digilines Button (off, pushed state - you hacker you!)",
|
||||
on_rightclick = digistuff.button_push,
|
||||
sounds = default and default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("digistuff:button_on", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_sides.png",
|
||||
"digistuff_digibutton_on.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
legacy_wallmounted = true,
|
||||
walkable = false,
|
||||
light_source = 7,
|
||||
sunlight_propagates = true,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -6/16, -6/16, 6/16, 6/16, 6/16, 8/16 }, -- the thin plate behind the button
|
||||
{ -4/16, -2/16, 4/16, 4/16, 2/16, 6/16 } -- the button itself
|
||||
}
|
||||
},
|
||||
digiline =
|
||||
{
|
||||
receptor = {},
|
||||
wire = {
|
||||
rules = digistuff.button_get_rules,
|
||||
},
|
||||
effector = {
|
||||
action = digistuff.button_handle_digilines,
|
||||
},
|
||||
},
|
||||
on_timer = digistuff.button_turnoff,
|
||||
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
|
||||
drop = 'digistuff:button',
|
||||
after_destruct = digistuff.remove_receiver,
|
||||
on_rightclick = digistuff.button_push,
|
||||
description = "Digilines Button (on state - you hacker you!)",
|
||||
sounds = default and default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("digistuff:button_on_pushed", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"digistuff_digibutton_sides.png",
|
||||
@ -156,18 +292,16 @@ minetest.register_node("digistuff:button_on", {
|
||||
wire = {
|
||||
rules = digistuff.button_get_rules,
|
||||
},
|
||||
effector = {
|
||||
action = digistuff.button_handle_digilines,
|
||||
},
|
||||
},
|
||||
on_timer = digistuff.button_turnoff,
|
||||
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
|
||||
drop = 'digistuff:button',
|
||||
after_destruct = digistuff.remove_receiver,
|
||||
on_rightclick = function (pos, node, clicker)
|
||||
local meta = minetest.get_meta(pos)
|
||||
digiline:receptor_send(pos, digistuff.button_get_rules(node), meta:get_string("channel"), meta:get_string("msg"))
|
||||
if minetest.get_modpath("mesecons") then minetest.sound_play("mesecons_button_push", {pos=pos}) end
|
||||
minetest.get_node_timer(pos):start(0.25)
|
||||
end,
|
||||
description = "Digilines Button (on state - you hacker you!)",
|
||||
on_rightclick = digistuff.button_push,
|
||||
description = "Digilines Button (on, pushed state - you hacker you!)",
|
||||
sounds = default and default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
@ -210,26 +344,30 @@ minetest.register_node("digistuff:wall_knob", {
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("min",0)
|
||||
meta:set_int("max",14)
|
||||
meta:set_string("formspec","size[8,4;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;3,2;min;Minimum;${min}]field[4,2;3,2;max;Maximum;${max}]button_exit[2.25,3;3,1;submit;Save]")
|
||||
meta:set_string("formspec","size[7.5,3;]field[1,0;6,2;channel;Channel;${channel}]field[1,1;3,2;min;Minimum;${min}]field[4,1;3,2;max;Maximum;${max}]checkbox[1,2;protected;Protected]button_exit[3,2;3,1;submit;Save]")
|
||||
end,
|
||||
after_place_node = digistuff.place_receiver,
|
||||
after_destruct = digistuff.remove_receiver,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if fields.channel and fields.channel ~= "" then
|
||||
if tonumber(fields.min) and tonumber(fields.max) and math.floor(fields.min) < math.floor(fields.max) then
|
||||
meta:set_string("channel",fields.channel)
|
||||
meta:set_int("min",math.floor(tonumber(fields.min)))
|
||||
meta:set_int("max",math.floor(tonumber(fields.max)))
|
||||
meta:set_int("value",math.floor(tonumber(fields.min)))
|
||||
meta:set_string("infotext",string.format("Current setting: %d\nLeft-click to turn down or right-click to turn up",math.floor(tonumber(fields.min))))
|
||||
meta:set_string("formspec","")
|
||||
minetest.swap_node(pos, {name = "digistuff:wall_knob_configured", param2=minetest.get_node(pos).param2})
|
||||
if fields.submit then
|
||||
if fields.channel ~= "" then
|
||||
if tonumber(fields.min) and tonumber(fields.max) and math.floor(fields.min) < math.floor(fields.max) then
|
||||
meta:set_string("channel",fields.channel)
|
||||
meta:set_int("min",math.floor(tonumber(fields.min)))
|
||||
meta:set_int("max",math.floor(tonumber(fields.max)))
|
||||
meta:set_int("value",math.floor(tonumber(fields.min)))
|
||||
meta:set_string("infotext",string.format("Current setting: %d\nLeft-click to turn down or right-click to turn up",math.floor(tonumber(fields.min))))
|
||||
meta:set_string("formspec","")
|
||||
minetest.swap_node(pos, {name = "digistuff:wall_knob_configured", param2=minetest.get_node(pos).param2})
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(),"Minimum and maximum must both be numbers, and maximum must be greater than minimum")
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(),"Minimum and maximum must both be numbers, and maximum must be greater than minimum")
|
||||
minetest.chat_send_player(sender:get_player_name(),"Please set a channel!")
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(),"Please set a channel!")
|
||||
elseif fields.protected then
|
||||
meta:set_int("protected",fields.protected == "true" and 1 or 0)
|
||||
end
|
||||
end,
|
||||
sounds = default and default.node_sound_stone_defaults(),
|
||||
@ -266,6 +404,7 @@ minetest.register_node("digistuff:wall_knob_configured", {
|
||||
after_destruct = digistuff.remove_receiver,
|
||||
on_rightclick = function(pos,node,player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_int("protected") == 1 and not digistuff.check_protection(pos,player) then return end
|
||||
local max = meta:get_int("max")
|
||||
local value = meta:get_int("value")
|
||||
local full = player:get_player_control().aux1
|
||||
@ -276,6 +415,7 @@ minetest.register_node("digistuff:wall_knob_configured", {
|
||||
end,
|
||||
on_punch = function(pos,node,player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_int("protected") == 1 and not digistuff.check_protection(pos,player) then return end
|
||||
local min = meta:get_int("min")
|
||||
local value = meta:get_int("value")
|
||||
local full = player:get_player_control().aux1
|
||||
|
@ -89,28 +89,19 @@ end
|
||||
-- 3d-ify default mtg wood and steel doors and trap doors
|
||||
|
||||
if minetest.get_modpath("doors") then
|
||||
local function clone_node(name)
|
||||
local node2 = {}
|
||||
local node = minetest.registered_nodes[name]
|
||||
for k,v in pairs(node) do
|
||||
node2[k]=v
|
||||
end
|
||||
return node2
|
||||
end
|
||||
|
||||
local def
|
||||
for _,mat in ipairs({"wood", "steel"}) do
|
||||
def = clone_node("doors:door_"..mat.."_a")
|
||||
def = table.copy(minetest.registered_nodes["doors:door_"..mat.."_a"])
|
||||
def.mesh = "homedecor_3d_door_"..mat.."_a.obj"
|
||||
minetest.register_node(":doors:door_"..mat.."_a", def)
|
||||
|
||||
def = clone_node("doors:door_"..mat.."_b")
|
||||
def = table.copy(minetest.registered_nodes["doors:door_"..mat.."_b"])
|
||||
def.mesh = "homedecor_3d_door_"..mat.."_b.obj"
|
||||
minetest.register_node(":doors:door_"..mat.."_b", def)
|
||||
end
|
||||
|
||||
for _,mat in ipairs({"", "_steel"}) do
|
||||
def = clone_node("doors:trapdoor"..mat)
|
||||
def = table.copy(minetest.registered_nodes["doors:trapdoor"..mat])
|
||||
def.drawtype = "mesh"
|
||||
def.mesh = "homedecor_3d_trapdoor"..mat..".obj"
|
||||
def.tiles = {
|
||||
@ -119,7 +110,7 @@ if minetest.get_modpath("doors") then
|
||||
}
|
||||
minetest.register_node(":doors:trapdoor"..mat, def)
|
||||
|
||||
def = clone_node("doors:trapdoor"..mat.."_open")
|
||||
def = table.copy(minetest.registered_nodes["doors:trapdoor"..mat.."_open"])
|
||||
def.mesh = "homedecor_3d_trapdoor"..mat.."_open.obj"
|
||||
def.drawtype = "mesh"
|
||||
def.tiles = {
|
||||
|
@ -3,17 +3,6 @@
|
||||
local S = homedecor.gettext
|
||||
local mesecons_mp = minetest.get_modpath("mesecons")
|
||||
|
||||
-- clone node
|
||||
|
||||
function hd_doors_clone_node(name)
|
||||
local node2 = {}
|
||||
local node = minetest.registered_nodes[name]
|
||||
for k,v in pairs(node) do
|
||||
node2[k]=v
|
||||
end
|
||||
return node2
|
||||
end
|
||||
|
||||
-- new doors using minetest_game doors API
|
||||
|
||||
local door_list = {
|
||||
@ -181,22 +170,22 @@ for _, door in ipairs(door_list) do
|
||||
local nn_b = "doors:homedecor_"..door.name.."_b"
|
||||
|
||||
if door.alpha then
|
||||
local def = hd_doors_clone_node(nn_a)
|
||||
local def = table.copy(minetest.registered_nodes[nn_a])
|
||||
def.use_texture_alpha = true
|
||||
def.mesh = "door_a.obj" -- leaving this out will break the _a model
|
||||
minetest.register_node(":"..nn_a, def) -- assignment when the override takes place
|
||||
|
||||
def = hd_doors_clone_node(nn_b)
|
||||
def = table.copy(minetest.registered_nodes[nn_b])
|
||||
def.use_texture_alpha = true
|
||||
minetest.register_node(":"..nn_b, def)
|
||||
end
|
||||
|
||||
if door.custom_model and hd_3d then
|
||||
def = hd_doors_clone_node(nn_a)
|
||||
def = table.copy(minetest.registered_nodes[nn_a])
|
||||
def.mesh = door.custom_model.."_a.obj"
|
||||
minetest.register_node(":"..nn_a, def)
|
||||
|
||||
def = hd_doors_clone_node(nn_b)
|
||||
def = table.copy(minetest.registered_nodes[nn_b])
|
||||
def.mesh = door.custom_model.."_b.obj"
|
||||
minetest.register_node(":"..nn_b, def)
|
||||
end
|
||||
|
@ -11,6 +11,8 @@ local function is_protected(pos, clicker)
|
||||
return false
|
||||
end
|
||||
|
||||
local hd_mesecons = minetest.get_modpath("mesecons")
|
||||
|
||||
-- control and brightness for dimmable lamps
|
||||
|
||||
local brightn_cycle = {
|
||||
@ -51,7 +53,7 @@ local rules_alldir = {
|
||||
|
||||
local actions
|
||||
|
||||
if minetest.get_modpath("mesecons") then
|
||||
if hd_mesecons then
|
||||
|
||||
actions = {
|
||||
action_off = function(pos, node)
|
||||
@ -132,7 +134,7 @@ if minetest.get_modpath("digilines") then
|
||||
end
|
||||
end)
|
||||
|
||||
if minetest.get_modpath("mesecons") then
|
||||
if hd_mesecons then
|
||||
homedecor.digiline_wall_light = {
|
||||
effector = {
|
||||
action = on_digiline_receive_string,
|
||||
@ -182,10 +184,14 @@ function homedecor.toggle_light(pos, node, clicker, itemstack, pointed_thing)
|
||||
local level = string.sub(node.name, sep + 1)
|
||||
local n = tonumber(level) or 0
|
||||
|
||||
if level == "off" or n < 4 then
|
||||
newsuff = "_14"
|
||||
else
|
||||
if level == "on" then
|
||||
newsuff = "_off"
|
||||
elseif level == "off" then
|
||||
newsuff = "_on"
|
||||
elseif n > 3 then
|
||||
newsuff = "_0"
|
||||
else
|
||||
newsuff = "_14"
|
||||
end
|
||||
|
||||
minetest.swap_node(pos, {name = string.sub(node.name, 1, sep - 1)..newsuff, param2 = node.param2})
|
||||
@ -749,6 +755,15 @@ for _, light_brightn_name in ipairs({"off", "on"}) do
|
||||
|
||||
local onflag = (light_brightn_name == "on")
|
||||
local nici = (light_brightn_name == "off") and 1 or nil
|
||||
local nici_m = (light_brightn_name == "off") and 1 or nil
|
||||
local on_rc = homedecor.toggle_light
|
||||
local di = "on"
|
||||
|
||||
if hd_mesecons then
|
||||
nici_m = (light_brightn_name ~= "off") and 1 or nil
|
||||
on_rc = nil
|
||||
di = "off"
|
||||
end
|
||||
|
||||
local gen_ls_tex_white = "homedecor_generic_light_source_off.png"
|
||||
if onflag then gen_ls_tex_white = "homedecor_generic_light_source_white.png" end
|
||||
@ -829,14 +844,14 @@ for _, light_brightn_name in ipairs({"off", "on"}) do
|
||||
"homedecor:rope_light_on_floor_off",
|
||||
"group:mesecon_conductor_craftable"
|
||||
},
|
||||
groups = {cracky=3, not_in_creative_inventory = nici},
|
||||
groups = {cracky=3, oddly_breakable_by_hand=3, not_in_creative_inventory = nici_m},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_rightclick = homedecor.toggle_light,
|
||||
drop = {
|
||||
items = {
|
||||
{items = {"homedecor:rope_light_on_floor_on"} },
|
||||
{items = {"homedecor:rope_light_on_floor_"..di} },
|
||||
}
|
||||
},
|
||||
on_rightclick = on_rc,
|
||||
mesecons = {
|
||||
conductor = {
|
||||
state = mesecon and (onflag and mesecon.state.on or mesecon.state.off),
|
||||
@ -875,14 +890,14 @@ for _, light_brightn_name in ipairs({"off", "on"}) do
|
||||
"homedecor:rope_light_on_ceiling_off",
|
||||
"group:mesecon_conductor_craftable"
|
||||
},
|
||||
groups = {cracky=3, not_in_creative_inventory = nici},
|
||||
groups = {cracky=3, oddly_breakable_by_hand=3, not_in_creative_inventory = nici_m},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_rightclick = homedecor.toggle_light,
|
||||
drop = {
|
||||
items = {
|
||||
{items = {"homedecor:rope_light_on_ceiling_on"}},
|
||||
{items = {"homedecor:rope_light_on_ceiling_"..di}},
|
||||
}
|
||||
},
|
||||
on_rightclick = on_rc,
|
||||
mesecons = {
|
||||
conductor = {
|
||||
state = mesecon and (onflag and mesecon.state.on or mesecon.state.off),
|
||||
@ -1837,6 +1852,11 @@ minetest.register_alias("torch_wall", "homedecor:torch_
|
||||
minetest.register_alias("homedecor:plasma_ball", "homedecor:plasma_ball_on")
|
||||
minetest.register_alias("homedecor:wall_lamp", "homedecor:wall_lamp_on")
|
||||
|
||||
minetest.register_alias("homedecor:rope_light_on_floor_0", "homedecor:rope_light_on_floor_off")
|
||||
minetest.register_alias("homedecor:rope_light_on_floor_14", "homedecor:rope_light_on_floor_on")
|
||||
|
||||
minetest.register_alias("homedecor:rope_light_on_ceiling_0", "homedecor:rope_light_on_ceiling_off")
|
||||
minetest.register_alias("homedecor:rope_light_on_ceiling_14", "homedecor:rope_light_on_ceiling_on")
|
||||
|
||||
for name, level in pairs(word_to_bright) do
|
||||
minetest.register_alias("homedecor:glowlight_half_"..name, "homedecor:glowlight_half_"..level)
|
||||
|
Before Width: | Height: | Size: 270 B After Width: | Height: | Size: 263 B |
Before Width: | Height: | Size: 231 B After Width: | Height: | Size: 223 B |
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 231 B |
Before Width: | Height: | Size: 239 B After Width: | Height: | Size: 218 B |
Before Width: | Height: | Size: 272 B After Width: | Height: | Size: 265 B |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 154 B After Width: | Height: | Size: 154 B |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 322 B After Width: | Height: | Size: 262 B |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 324 B After Width: | Height: | Size: 269 B |
Before Width: | Height: | Size: 330 B After Width: | Height: | Size: 277 B |
Before Width: | Height: | Size: 483 B After Width: | Height: | Size: 419 B |
@ -286,4 +286,4 @@ msgstr "%s Panel"
|
||||
#: stairsplus/common.lua
|
||||
#, lua-format
|
||||
msgid "%s Stairs"
|
||||
msgstr "% Schody"
|
||||
msgstr "%s Schody"
|
||||
|
@ -1,6 +1,7 @@
|
||||
default
|
||||
biome_lib
|
||||
vessels
|
||||
doors?
|
||||
stairs?
|
||||
moreblocks?
|
||||
intllib?
|
||||
|
@ -15,6 +15,41 @@
|
||||
|
||||
moretrees = {}
|
||||
|
||||
minetest.override_item("default:sapling", {
|
||||
description = "Sapling"
|
||||
})
|
||||
|
||||
minetest.override_item("default:tree", {
|
||||
description = "Tree"
|
||||
})
|
||||
|
||||
minetest.override_item("default:wood", {
|
||||
description = "Wooden Planks"
|
||||
})
|
||||
|
||||
minetest.override_item("default:leaves", {
|
||||
description = "Leaves"
|
||||
})
|
||||
|
||||
minetest.override_item("default:fence_wood", {
|
||||
description = "Wooden Fence"
|
||||
})
|
||||
|
||||
minetest.override_item("default:fence_rail_wood", {
|
||||
description = "Wooden Fence Rail"
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doors") then
|
||||
minetest.override_item("doors:gate_wood_closed", {
|
||||
description = "Wooden Fence Gate"
|
||||
})
|
||||
|
||||
minetest.override_item("doors:gate_wood_open", {
|
||||
description = "Wooden Fence Gate"
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- Read the default config file (and if necessary, copy it to the world folder).
|
||||
|
||||
local worldpath=minetest.get_worldpath()
|
||||
@ -36,17 +71,6 @@ else
|
||||
end
|
||||
moretrees.intllib = S
|
||||
|
||||
-- clone node
|
||||
|
||||
function moretrees.clone_node(name)
|
||||
local node2 = {}
|
||||
local node = minetest.registered_nodes[name]
|
||||
for k,v in pairs(node) do
|
||||
node2[k]=v
|
||||
end
|
||||
return node2
|
||||
end
|
||||
|
||||
-- infinite stacks checking
|
||||
|
||||
if minetest.get_modpath("unified_inventory") or not
|
||||
|
@ -404,7 +404,7 @@ default.register_leafdecay({
|
||||
|
||||
|
||||
if moretrees.enable_redefine_apple then
|
||||
local appledef = moretrees.clone_node("default:apple")
|
||||
local appledef = table.copy(minetest.registered_nodes["default:apple"])
|
||||
appledef.groups.attached_node = 1
|
||||
minetest.register_node(":default:apple", appledef)
|
||||
end
|
||||
|
@ -109,21 +109,11 @@ minetest.register_craft({
|
||||
|
||||
-- Chiseled Quartz
|
||||
minetest.register_craft({
|
||||
output = 'quartz:chiseled 2',
|
||||
output = 'quartz:chiseled 4',
|
||||
recipe = {
|
||||
{'stairs:slab_quartzblock', '', ''},
|
||||
{'stairs:slab_quartzblock', '', ''},
|
||||
{'', '', ''},
|
||||
}
|
||||
})
|
||||
|
||||
-- Chiseled Quartz (for stairsplus)
|
||||
minetest.register_craft({
|
||||
output = 'quartz:chiseled 2',
|
||||
recipe = {
|
||||
{'quartz:slab_block', '', ''},
|
||||
{'quartz:slab_block', '', ''},
|
||||
{'', '', ''},
|
||||
{'quartz:block', 'quartz:block', ''},
|
||||
{'quartz:block', 'quartz:block', ''},
|
||||
{'', '', ''},
|
||||
}
|
||||
})
|
||||
|
||||
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 98 B After Width: | Height: | Size: 76 B |
@ -10,3 +10,4 @@ streets_trafficlight?
|
||||
trafficlight?
|
||||
digilines?
|
||||
digistuff?
|
||||
coloredwood?
|
||||
|
@ -49,17 +49,6 @@ end
|
||||
|
||||
local digiline_wire_node = "digilines:wire_std_00000000"
|
||||
|
||||
-- clone node
|
||||
|
||||
local function clone_node(name)
|
||||
local node2 = {}
|
||||
local node = minetest.registered_nodes[name]
|
||||
for k,v in pairs(node) do
|
||||
node2[k]=v
|
||||
end
|
||||
return node2
|
||||
end
|
||||
|
||||
minetest.register_privilege("streetlight", {
|
||||
description = "Allows using streetlight spawners",
|
||||
give_to_singleplayer = true
|
||||
@ -222,7 +211,7 @@ for _, pole in ipairs(poles_tab) do
|
||||
local lightparam2 = light[4] or 0
|
||||
|
||||
if enable_digilines then
|
||||
local def = clone_node(matnode)
|
||||
local def = table.copy(minetest.registered_nodes[matnode])
|
||||
local dl_overlay
|
||||
|
||||
if def.drawtype == "fencelike" then
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 184 B After Width: | Height: | Size: 134 B |
Before Width: | Height: | Size: 644 B After Width: | Height: | Size: 508 B |
Before Width: | Height: | Size: 215 B After Width: | Height: | Size: 179 B |