2021-05-29 17:12:33 +03:00
local S = minetest.get_translator ( minetest.get_current_modname ( ) )
local vector = vector
2019-03-08 01:22:28 +02:00
2017-03-01 02:16:52 +02:00
local template = {
Add `compostability` to node definition group.
* mcl_cake/init.lua (cake);
* mcl_core/craftitems.lua (apple);
* mcl_core/nodes_base.lua (dirt with grass);
* mcl_core/nodes_cactuscane.lua (cactus, sugarcane);
* mcl_core/nodes_climb.lua (vines);
* mcl_core/nodes_trees.lua (leaves, saplings);
* mcl_dye/init.lua (cocoa beans);
* mcl_farming/beetroot.lua (beetroot, & seeds);
* mcl_farming/carrots.lua (carrot);
* mcl_farming/melon.lua (melon, & slice, & seeds);
* mcl_farming/potatoes.lua (potato, baked potato);
* mcl_farming/pumpkin.lua (pumpkin, carved &, & seeds, & pie);
* mcl_farming/wheat.lua (wheat, cookie, bread, hay block);
* mcl_flowers/init.lua (flowers, ferns, grass, & tall variants);
* mcl_mushrooms/small.lua (red and brown mushrooms);
* mcl_mushrooms/huge.lua (red and brown huge mushrooms);
* mcl_nether/init.lua (nether wart block);
* mcl_nether/nether_wart.lua (nether wart);
* mcl_ocean/kelp.lua (kelp, dried &, & block);
* mcl_ocean/sea_pickle.lua (sea pickle);
* mcl_ocean/seagrass.lua (seagrass).
2022-03-29 13:54:51 +03:00
groups = {
handy = 1 , axey = 1 , building_block = 1 , material_wood = 1 ,
flammable = - 1 , compostability = 85
} ,
2017-03-01 02:16:52 +02:00
sounds = mcl_sounds.node_sound_wood_defaults ( ) ,
is_ground_content = true ,
2020-04-17 22:40:13 +03:00
_mcl_blast_resistance = 0.2 ,
2017-03-01 02:16:52 +02:00
_mcl_hardness = 0.2 ,
2020-11-02 20:09:23 +02:00
_mcl_silk_touch_drop = true ,
2017-03-01 02:16:52 +02:00
}
local red = table.copy ( template )
red.drop = {
items = {
2021-05-29 17:12:33 +03:00
{ items = { " mcl_mushrooms:mushroom_red " } , rarity = 2 } ,
{ items = { " mcl_mushrooms:mushroom_red " } , rarity = 2 } ,
2017-03-01 02:16:52 +02:00
}
}
local brown = table.copy ( template )
brown.drop = {
items = {
2021-05-29 17:12:33 +03:00
{ items = { " mcl_mushrooms:mushroom_brown " } , rarity = 2 } ,
{ items = { " mcl_mushrooms:mushroom_brown " } , rarity = 2 } ,
2017-03-01 02:16:52 +02:00
}
}
2017-12-11 17:28:28 +02:00
-- Convert a number to a string with 6 binary digits
local function to_binary ( num )
local binary = " "
while ( num > 0 ) do
local remainder_binary = ( num % 2 ) > 0 and 1 or 0
binary = binary .. remainder_binary
num = math.floor ( num / 2 )
end
binary = string.reverse ( binary )
while ( string.len ( binary ) < 6 ) do
b inary = " 0 " .. binary
end
return binary
end
2017-03-01 02:16:52 +02:00
2021-05-29 17:12:33 +03:00
local function register_mushroom ( color , species_id , template , d_cap , d_stem , d_stem_all , longdesc_cap , longdesc_stem )
2017-03-01 02:16:52 +02:00
2017-12-11 17:28:28 +02:00
-- Stem texture on all sides
2017-03-01 02:16:52 +02:00
local stem_full = table.copy ( template )
stem_full.description = d_stem_all
2019-03-08 01:22:28 +02:00
stem_full._doc_items_longdesc = S ( " This decorative block is like a huge mushroom stem, but with the stem texture on all sides. " )
2017-03-01 02:16:52 +02:00
stem_full.tiles = { " mcl_mushrooms_mushroom_block_skin_stem.png " }
2017-12-11 17:28:28 +02:00
stem_full.groups . huge_mushroom = species_id
stem_full.groups . huge_mushroom_stem = 2
Add `compostability` to node definition group.
* mcl_cake/init.lua (cake);
* mcl_core/craftitems.lua (apple);
* mcl_core/nodes_base.lua (dirt with grass);
* mcl_core/nodes_cactuscane.lua (cactus, sugarcane);
* mcl_core/nodes_climb.lua (vines);
* mcl_core/nodes_trees.lua (leaves, saplings);
* mcl_dye/init.lua (cocoa beans);
* mcl_farming/beetroot.lua (beetroot, & seeds);
* mcl_farming/carrots.lua (carrot);
* mcl_farming/melon.lua (melon, & slice, & seeds);
* mcl_farming/potatoes.lua (potato, baked potato);
* mcl_farming/pumpkin.lua (pumpkin, carved &, & seeds, & pie);
* mcl_farming/wheat.lua (wheat, cookie, bread, hay block);
* mcl_flowers/init.lua (flowers, ferns, grass, & tall variants);
* mcl_mushrooms/small.lua (red and brown mushrooms);
* mcl_mushrooms/huge.lua (red and brown huge mushrooms);
* mcl_nether/init.lua (nether wart block);
* mcl_nether/nether_wart.lua (nether wart);
* mcl_ocean/kelp.lua (kelp, dried &, & block);
* mcl_ocean/sea_pickle.lua (sea pickle);
* mcl_ocean/seagrass.lua (seagrass).
2022-03-29 13:54:51 +03:00
stem_full.groups . compostability = 65
2017-03-01 02:16:52 +02:00
minetest.register_node ( " mcl_mushrooms: " .. color .. " _mushroom_block_stem_full " , stem_full )
2017-12-11 17:28:28 +02:00
-- Stem
2017-03-01 02:16:52 +02:00
local stem = table.copy ( template )
stem.description = d_stem
2017-12-11 17:28:28 +02:00
stem._doc_items_longdesc = longdesc_stem
2017-03-01 02:16:52 +02:00
stem.tiles = { " mcl_mushrooms_mushroom_block_inside.png " , " mcl_mushrooms_mushroom_block_inside.png " , " mcl_mushrooms_mushroom_block_skin_stem.png " }
2017-12-11 17:28:28 +02:00
stem.groups . huge_mushroom = species_id
stem.groups . huge_mushroom_stem = 1
Add `compostability` to node definition group.
* mcl_cake/init.lua (cake);
* mcl_core/craftitems.lua (apple);
* mcl_core/nodes_base.lua (dirt with grass);
* mcl_core/nodes_cactuscane.lua (cactus, sugarcane);
* mcl_core/nodes_climb.lua (vines);
* mcl_core/nodes_trees.lua (leaves, saplings);
* mcl_dye/init.lua (cocoa beans);
* mcl_farming/beetroot.lua (beetroot, & seeds);
* mcl_farming/carrots.lua (carrot);
* mcl_farming/melon.lua (melon, & slice, & seeds);
* mcl_farming/potatoes.lua (potato, baked potato);
* mcl_farming/pumpkin.lua (pumpkin, carved &, & seeds, & pie);
* mcl_farming/wheat.lua (wheat, cookie, bread, hay block);
* mcl_flowers/init.lua (flowers, ferns, grass, & tall variants);
* mcl_mushrooms/small.lua (red and brown mushrooms);
* mcl_mushrooms/huge.lua (red and brown huge mushrooms);
* mcl_nether/init.lua (nether wart block);
* mcl_nether/nether_wart.lua (nether wart);
* mcl_ocean/kelp.lua (kelp, dried &, & block);
* mcl_ocean/sea_pickle.lua (sea pickle);
* mcl_ocean/seagrass.lua (seagrass).
2022-03-29 13:54:51 +03:00
stem.groups . compostability = 65
2017-03-01 02:16:52 +02:00
minetest.register_node ( " mcl_mushrooms: " .. color .. " _mushroom_block_stem " , stem )
2017-12-11 17:28:28 +02:00
-- Mushroom block (cap)
-- Each side can either be the cap or the pores texture.
-- Cubes have 6 sides, so there's a total of 2^6 = 64 combinations
for s = 0 , 63 do
local block = table.copy ( template )
local bin = to_binary ( s )
if s == 63 then
-- All-faces cap. This block is exposed to the player
block.description = d_cap
block._doc_items_longdesc = longdesc_cap
2019-03-24 09:16:04 +02:00
block._doc_items_usagehelp = S ( " By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently. " )
2017-12-11 17:28:28 +02:00
block.tiles = { " mcl_mushrooms_mushroom_block_skin_ " .. color .. " .png " }
2021-05-29 17:12:33 +03:00
function block . on_construct ( pos )
2017-12-11 17:28:28 +02:00
local sides = {
{ { x = 0 , y = 1 , z = 0 } , 2 } ,
{ { x = 0 , y =- 1 , z = 0 } , 1 } ,
{ { x = 1 , y = 0 , z = 0 } , 4 } ,
{ { x =- 1 , y = 0 , z = 0 } , 3 } ,
{ { x = 0 , y = 0 , z = 1 } , 6 } ,
{ { x = 0 , y = 0 , z =- 1 } , 5 } ,
}
-- Replace the side of a mushroom node. Returns the new node.
-- Or nil, if unchanged.
2021-05-29 17:12:33 +03:00
local function replace_side ( pos , node , side )
2017-12-11 17:28:28 +02:00
local bin = string.sub ( node.name , - 6 )
if string.sub ( bin , side , side ) == " 1 " then
local new_bin
if side == 1 then
new_bin = " 0 " .. string.sub ( bin , side + 1 , 6 )
elseif side == 6 then
new_bin = string.sub ( bin , 1 , side - 1 ) .. " 0 "
else
new_bin = string.sub ( bin , 1 , side - 1 ) .. " 0 " .. string.sub ( bin , side + 1 , 6 )
end
return { name = string.sub ( node.name , 1 , - 7 ) .. new_bin }
end
end
local node = minetest.get_node ( pos )
local species_self = minetest.get_item_group ( node.name , " huge_mushroom " )
local node_update = table.copy ( node )
for i = 1 , # sides do
local neighbor = vector.add ( pos , sides [ i ] [ 1 ] )
local neighbor_node = minetest.get_node ( neighbor )
local node_set = false
if minetest.get_item_group ( neighbor_node.name , " huge_mushroom_cap " ) ~= 0 and minetest.get_item_group ( neighbor_node.name , " huge_mushroom " ) == species_self then
local i2 = sides [ i ] [ 2 ]
local node_return = replace_side ( pos , node_update , i )
if node_return then
node_update = node_return
node_set = true
end
local new_neighbor = replace_side ( neighbor , neighbor_node , i2 )
if new_neighbor then
minetest.set_node ( neighbor , new_neighbor )
end
end
if node_set then
minetest.set_node ( pos , node_update )
end
end
end
else
-- Cap block with pores on at least 1 side.
-- These blocks are used internally.
block._doc_items_create_entry = false
block.groups . not_in_creative_inventory = 1
block.groups . not_in_craft_guide = 1
block.tiles = { }
for t = 1 , string.len ( bin ) do
if string.sub ( bin , t , t ) == " 1 " then
block.tiles [ t ] = " mcl_mushrooms_mushroom_block_skin_ " .. color .. " .png "
else
block.tiles [ t ] = " mcl_mushrooms_mushroom_block_inside.png "
end
end
if minetest.get_modpath ( " doc " ) then
doc.add_entry_alias ( " nodes " , " mcl_mushrooms: " .. color .. " _mushroom_block_cap_111111 " , " nodes " , " mcl_mushrooms: " .. color .. " _mushroom_block_cap_ " .. bin )
end
end
block.groups . huge_mushroom = species_id
block.groups . huge_mushroom_cap = s
-- bin is a binary string with 6 digits. Each digit stands for the
-- texture of one of the sides, in the same order as the tiles parameter.
-- 0 = pores; 1 = cap.
minetest.register_node ( " mcl_mushrooms: " .. color .. " _mushroom_block_cap_ " .. bin , block )
end
2017-03-01 02:16:52 +02:00
end
2017-03-11 20:50:09 +02:00
2019-03-08 01:22:28 +02:00
local longdesc_red = S ( " Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides. " )
local longdesc_red_stem = S ( " The stem part of a huge red mushroom. " )
register_mushroom ( " red " , 1 , red , S ( " Huge Red Mushroom Block " ) , S ( " Huge Red Mushroom Stem " ) , S ( " Huge Red Mushroom All-Faces Stem " ) , longdesc_red , longdesc_red_stem )
2017-03-11 20:50:09 +02:00
2019-03-08 01:22:28 +02:00
local longdesc_brown = S ( " Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides. " )
local longdesc_brown_stem = S ( " The stem part of a huge brown mushroom. " )
register_mushroom ( " brown " , 2 , brown , S ( " Huge Brown Mushroom Block " ) , S ( " Huge Brown Mushroom Stem " ) , S ( " Huge Brown Mushroom All-Faces Stem " ) , longdesc_brown , longdesc_brown_stem )
2017-03-01 16:06:06 +02:00
minetest.register_craft ( {
type = " fuel " ,
recipe = " group:huge_mushroom " ,
burntime = 15 ,
} )
2017-12-11 17:57:07 +02:00
-- Legacy support
local colors = { " red " , " brown " }
for c = 1 , 2 do
local color = colors [ c ]
minetest.register_alias ( " mcl_mushrooms: " .. color .. " _mushroom_block_cap_full " , " mcl_mushrooms: " .. color .. " _mushroom_block_cap_111111 " )
minetest.register_alias ( " mcl_mushrooms: " .. color .. " _mushroom_block_cap_top " , " mcl_mushrooms: " .. color .. " _mushroom_block_cap_100000 " )
minetest.register_alias ( " mcl_mushrooms: " .. color .. " _mushroom_block_pores_full " , " mcl_mushrooms: " .. color .. " _mushroom_block_cap_000000 " )
end
minetest.register_lbm ( {
label = " Replace legacy mushroom cap blocks " ,
name = " mcl_mushrooms:replace_legacy_mushroom_caps " ,
nodenames = { " mcl_mushrooms:brown_mushroom_block_cap_corner " , " mcl_mushrooms:brown_mushroom_block_cap_side " , " mcl_mushrooms:red_mushroom_block_cap_corner " , " mcl_mushrooms:red_mushroom_block_cap_side " } ,
action = function ( pos , node )
for c = 1 , 2 do
local color = colors [ c ]
if node.name == " mcl_mushrooms: " .. color .. " _mushroom_block_cap_side " then
if node.param2 == 0 then
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_100001 " } )
elseif node.param2 == 1 then
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_100100 " } ) -- OK
elseif node.param2 == 2 then
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_100010 " } )
elseif node.param2 == 3 then
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_101000 " } )
else
-- Fallback
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_101111 " } )
end
elseif node.name == " mcl_mushrooms: " .. color .. " _mushroom_block_cap_corner " then
if node.param2 == 0 then
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_101001 " } )
elseif node.param2 == 1 then
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_100101 " } ) -- OK
elseif node.param2 == 2 then
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_100110 " } ) -- OK
elseif node.param2 == 3 then
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_101010 " } )
else
-- Fallback
minetest.set_node ( pos , { name = " mcl_mushrooms: " .. color .. " _mushroom_block_cap_101111 " } )
end
end
end
end ,
} )