VoxeLibre/mods/ITEMS/mcl_crimson/init.lua

938 lines
31 KiB
Lua
Raw Permalink Normal View History

local modname = minetest.get_current_modname()
local S = minetest.get_translator(modname)
local modpath = minetest.get_modpath(modname)
-- Warped and Crimson fungus
-- by debiankaios
-- adapted for mcl2 by cora
2022-04-29 12:24:29 +02:00
local MAXIMUM_VINE_HEIGHT = 25
local wood_slab_groups = {handy = 1, axey = 1, material_wood = 1, wood_slab = 1}
local wood_stair_groups = {handy = 1, axey = 1, material_wood = 1, wood_stairs = 1}
local function generate_warped_tree(pos)
minetest.place_schematic(pos,modpath.."/schematics/warped_fungus_1.mts","random",nil,false,"place_center_x,place_center_z")
end
2022-04-29 12:24:29 +02:00
function generate_crimson_tree(pos)
minetest.place_schematic(pos,modpath.."/schematics/crimson_fungus_1.mts","random",nil,false,"place_center_x,place_center_z")
end
2022-04-29 12:24:29 +02:00
function grow_vines(pos, moreontop, vine, dir)
-- Sanity checks
2022-09-15 04:31:35 +02:00
if dir == nil then dir = 1 end
if not moreontop or moreontop < 1 then return false end
local allowed_nodes = {}
allowed_nodes[vine] = true
-- Find the root, tip and calculate height
local root,_,root_node = mcl_util.trace_nodes(pos, -dir, allowed_nodes, MAXIMUM_VINE_HEIGHT)
if not root then return false end
local tip,height,tip_node = mcl_util.trace_nodes(vector.offset(root, 0, dir, 0), dir, allowed_nodes, MAXIMUM_VINE_HEIGHT)
if not tip then return false end
local res = false
for i = 1,moreontop do
-- Check if we can grow into this position
if height >= MAXIMUM_VINE_HEIGHT then return res end
if tip_node.name ~= "air" then return res end
-- Update world map data
minetest.set_node(tip, {name = vine})
-- Move to the next position and flag that growth has occured
tip = vector.offset(tip, 0, dir, 0)
tip_node = minetest.get_node(tip)
height = height + 1
res = true
end
return res
2022-06-19 13:27:12 +02:00
end
2022-09-15 05:02:48 +02:00
local nether_plants = {
["mcl_crimson:crimson_nylium"] = {
"mcl_crimson:crimson_roots",
"mcl_crimson:crimson_fungus",
"mcl_crimson:warped_fungus",
},
["mcl_crimson:warped_nylium"] = {
"mcl_crimson:warped_roots",
"mcl_crimson:warped_fungus",
"mcl_crimson:twisting_vines",
"mcl_crimson:nether_sprouts",
},
}
local function has_nylium_neighbor(pos)
local p = minetest.find_node_near(pos,1,{"mcl_crimson:warped_nylium","mcl_crimson:crimson_nylium"})
if p then
return minetest.get_node(p)
end
end
local function spread_nether_plants(pos,node)
local n = node.name
local nn = minetest.find_nodes_in_area_under_air(vector.offset(pos,-5,-3,-5),vector.offset(pos,5,3,5),{n})
table.shuffle(nn)
nn[1] = pos
for i=1,math.random(1,math.min(#nn,12)) do
2022-09-19 14:19:49 +02:00
local p = vector.offset(nn[i],0,1,0)
if minetest.get_node(p).name == "air" then
minetest.set_node(p,{name=nether_plants[n][math.random(#nether_plants[n])]})
mcl_dye.add_bone_meal_particle(vector.offset(nn[i],0,1,0))
end
2022-09-15 05:02:48 +02:00
end
end
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:warped_fungus", {
description = S("Warped Fungus"),
_tt_help = S("Warped fungus is a mushroom found in the nether's warped forest."),
_doc_items_longdesc = S("Warped fungus is a mushroom found in the nether's warped forest."),
2022-04-29 12:24:29 +02:00
drawtype = "plantlike",
2023-02-14 03:00:19 +01:00
tiles = { "mcl_crimson_warped_fungus.png" },
inventory_image = "mcl_crimson_warped_fungus.png",
wield_image = "mcl_crimson_warped_fungus.png",
2022-04-29 12:24:29 +02:00
sunlight_propagates = true,
paramtype = "light",
walkable = false,
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1,compostability=65},
2022-04-29 12:24:29 +02:00
light_source = 1,
sounds = mcl_sounds.node_sound_leaves_defaults(),
2022-04-29 12:24:29 +02:00
node_placement_prediction = "",
_on_bone_meal = function(itemstack, placer, pointed_thing)
local pos = pointed_thing.under
local nodepos = minetest.get_node(vector.offset(pos, 0, -1, 0))
if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then
local random = math.random(1, 5)
if random == 1 then
minetest.remove_node(pos)
generate_warped_tree(pos)
return true
end
2022-05-04 00:24:09 +02:00
end
return false
2022-05-04 00:24:09 +02:00
end,
2022-04-29 12:24:29 +02:00
_mcl_blast_resistance = 0,
})
mcl_flowerpots.register_potted_flower("mcl_crimson:warped_fungus", {
name = "warped_fungus",
desc = S("Warped Fungus"),
2023-02-14 03:00:19 +01:00
image = "mcl_crimson_warped_fungus.png",
_on_bone_meal = function(itemstack, placer, pointed_thing)
local n = has_nylium_neighbor(pointed_thing.under)
if n then
minetest.set_node(pointed_thing.under,n)
end
end,
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:twisting_vines", {
2022-05-04 00:24:09 +02:00
description = S("Twisting Vines"),
drawtype = "plantlike",
2023-02-08 12:06:59 +01:00
tiles = { "mcl_crimson_twisting_vines_plant.png" },
inventory_image = "mcl_crimson_twisting_vines.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
climbable = true,
buildable_to = true,
groups = {dig_immediate=3, shearsy=1, vines=1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, deco_block=1, compostability=50},
sounds = mcl_sounds.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 },
},
node_placement_prediction = "",
_on_bone_meal = function(itemstack, placer, pointed_thing)
return grow_vines(pointed_thing.under, math.random(1, 3),"mcl_crimson:twisting_vines")
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local pn = clicker:get_player_name()
if clicker:is_player() and minetest.is_protected(vector.offset(pos,0,1,0), pn or "") then
minetest.record_protection_violation(vector.offset(pos,0,1,0), pn)
return itemstack
end
if clicker:get_wielded_item():get_name() == "mcl_crimson:twisting_vines" then
if not minetest.is_creative_enabled(clicker:get_player_name()) then
itemstack:take_item()
end
2022-09-15 04:31:35 +02:00
grow_vines(pos, 1, "mcl_crimson:twisting_vines")
2023-02-02 23:30:15 +01:00
local idef = itemstack:get_definition()
local itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing)
if success then
if idef.sounds and idef.sounds.place then
minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true)
end
end
elseif clicker:get_wielded_item():get_name() == "mcl_bone_meal:bone_meal" then
return mcl_bone_meal.use_bone_meal(itemstack, clicker, {under=pos, above=pos})
end
return itemstack
end,
on_place = function(itemstack, placer, pointed_thing)
local under = pointed_thing.under
local unode = minetest.get_node(under)
local unode_def = minetest.registered_nodes[unode.name]
local above = pointed_thing.above
local anode = minetest.get_node(above)
local anode_def = minetest.registered_nodes[anode.name]
if under.y < above.y then
minetest.set_node(above, {name = "mcl_crimson:twisting_vines"})
if not minetest.is_creative_enabled(placer:get_player_name()) then
itemstack:take_item()
end
elseif unode_def and unode_def.on_rightclick then
return unode_def.on_rightclick(under, unode, placer, itemstack, pointed_thing)
elseif anode_def and anode_def.on_rightclick then
return unode_def.on_rightclick(above, anode, placer, itemstack, pointed_thing)
end
return itemstack
end,
on_dig = function(pos, node, digger)
local above = vector.offset(pos,0,1,0)
local abovenode = minetest.get_node(above)
minetest.node_dig(pos, node, digger)
if abovenode.name == node.name then
minetest.registered_nodes[node.name].on_dig(above, node, digger)
end
2023-02-08 11:10:42 +01:00
end,
drop = {
max_items = 1,
items = {
2022-05-04 00:12:53 +02:00
{items = {"mcl_crimson:twisting_vines"}, rarity = 3},
},
},
_mcl_shears_drop = true,
_mcl_silk_touch_drop = true,
_mcl_fortune_drop = {
items = {
{items = {"mcl_crimson:twisting_vines"}, rarity = 3},
},
items = {
{items = {"mcl_crimson:twisting_vines"}, rarity = 1.8181818181818181},
},
"mcl_crimson:twisting_vines",
"mcl_crimson:twisting_vines",
},
_mcl_blast_resistance = 0,
})
2022-09-15 04:30:58 +02:00
minetest.register_node("mcl_crimson:weeping_vines", {
description = S("Weeping Vines"),
drawtype = "plantlike",
tiles = { "mcl_crimson_weeping_vines.png" },
inventory_image = "mcl_crimson_weeping_vines.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
climbable = true,
buildable_to = true,
groups = {dig_immediate=3, shearsy=1, vines=1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, deco_block=1, compostability=50},
sounds = mcl_sounds.node_sound_leaves_defaults(),
2022-09-15 04:30:58 +02:00
selection_box = {
type = "fixed",
fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 },
},
node_placement_prediction = "",
_on_bone_meal = function(itemstack, placer, pointed_thing)
return grow_vines(pointed_thing.under, math.random(1, 3),"mcl_crimson:weeping_vines", -1)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local pn = clicker:get_player_name()
if clicker:is_player() and minetest.is_protected(vector.offset(pos,0,1,0), pn or "") then
minetest.record_protection_violation(vector.offset(pos,0,1,0), pn)
return itemstack
end
if clicker:get_wielded_item():get_name() == "mcl_crimson:weeping_vines" then
if not minetest.is_creative_enabled(clicker:get_player_name()) then
itemstack:take_item()
end
2022-09-15 04:30:58 +02:00
grow_vines(pos, 1, "mcl_crimson:weeping_vines", -1)
2023-02-02 23:30:15 +01:00
local idef = itemstack:get_definition()
local itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing)
if success then
if idef.sounds and idef.sounds.place then
minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true)
end
end
elseif clicker:get_wielded_item():get_name() == "mcl_bone_meal:bone_meal" then
return mcl_bone_meal.use_bone_meal(itemstack, clicker, {under=pos, above=pos})
2022-09-15 04:30:58 +02:00
end
return itemstack
2022-09-15 04:30:58 +02:00
end,
on_place = function(itemstack, placer, pointed_thing)
local under = pointed_thing.under
local unode = minetest.get_node(under)
local unode_def = minetest.registered_nodes[unode.name]
local above = pointed_thing.above
local anode = minetest.get_node(above)
local anode_def = minetest.registered_nodes[anode.name]
if under.y > above.y then
minetest.set_node(above, {name = "mcl_crimson:weeping_vines"})
if not minetest.is_creative_enabled(placer:get_player_name()) then
itemstack:take_item()
end
elseif unode_def and unode_def.on_rightclick then
return unode_def.on_rightclick(under, unode, placer, itemstack, pointed_thing)
elseif anode_def and anode_def.on_rightclick then
return unode_def.on_rightclick(above, anode, placer, itemstack, pointed_thing)
end
return itemstack
end,
on_dig = function(pos, node, digger)
local below = vector.offset(pos,0,-1,0)
local belownode = minetest.get_node(below)
minetest.node_dig(pos, node, digger)
if belownode.name == node.name then
minetest.registered_nodes[node.name].on_dig(below, node, digger)
end
2023-02-08 11:10:42 +01:00
end,
2022-09-15 04:30:58 +02:00
drop = {
max_items = 1,
items = {
{items = {"mcl_crimson:weeping_vines"}, rarity = 3},
},
},
_mcl_shears_drop = true,
_mcl_silk_touch_drop = true,
_mcl_fortune_drop = {
items = {
{items = {"mcl_crimson:weeping_vines"}, rarity = 3},
},
items = {
{items = {"mcl_crimson:weeping_vines"}, rarity = 1.8181818181818181},
},
"mcl_crimson:weeping_vines",
"mcl_crimson:weeping_vines",
},
_mcl_blast_resistance = 0,
2022-09-15 04:30:58 +02:00
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:nether_sprouts", {
2022-05-04 00:24:09 +02:00
description = S("Nether Sprouts"),
drawtype = "plantlike",
2023-02-08 12:06:59 +01:00
tiles = { "mcl_crimson_nether_sprouts.png" },
inventory_image = "mcl_crimson_nether_sprouts.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
buildable_to = true,
2023-02-06 00:48:50 +01:00
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1,shearsy=1,compostability=50},
sounds = mcl_sounds.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = { -4/16, -0.5, -4/16, 4/16, 0, 4/16 },
},
node_placement_prediction = "",
drop = "",
_mcl_shears_drop = true,
_mcl_silk_touch_drop = false,
2022-05-04 00:24:09 +02:00
_mcl_blast_resistance = 0,
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:warped_roots", {
2022-05-04 00:24:09 +02:00
description = S("Warped Roots"),
drawtype = "plantlike",
2023-02-08 12:06:59 +01:00
tiles = { "mcl_crimson_warped_roots.png" },
inventory_image = "mcl_crimson_warped_roots.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
buildable_to = true,
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1,shearsy = 1,compostability=65},
sounds = mcl_sounds.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 },
},
node_placement_prediction = "",
_mcl_silk_touch_drop = false,
2022-05-04 00:24:09 +02:00
_mcl_blast_resistance = 0,
2022-04-29 12:24:29 +02:00
})
mcl_flowerpots.register_potted_flower("mcl_crimson:warped_roots", {
name = "warped_roots",
desc = S("Warped Roots"),
image = "mcl_crimson_warped_roots.png",
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:warped_wart_block", {
2022-05-04 00:24:09 +02:00
description = S("Warped Wart Block"),
tiles = {"mcl_crimson_warped_wart_block.png"},
groups = {handy = 1, hoey = 7, swordy = 1, deco_block = 1, compostability = 85},
_mcl_hardness = 1,
sounds = mcl_sounds.node_sound_leaves_defaults({
footstep={name="default_dirt_footstep", gain=0.7},
dug={name="default_dirt_footstep", gain=1.5},
}),
2022-04-29 12:24:29 +02:00
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:shroomlight", {
2022-05-04 00:24:09 +02:00
description = S("Shroomlight"),
2023-02-08 12:06:59 +01:00
tiles = {"mcl_crimson_shroomlight.png"},
groups = {handy = 1, hoey = 7, swordy = 1, deco_block = 1, compostability = 65},
2022-06-17 15:54:36 +02:00
light_source = minetest.LIGHT_MAX,
_mcl_hardness = 1,
sounds = mcl_sounds.node_sound_leaves_defaults({
footstep={name="default_dirt_footstep", gain=0.7},
dug={name="default_dirt_footstep", gain=1.5},
}),
2022-04-29 12:24:29 +02:00
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:warped_hyphae", {
description = S("Warped Hyphae"),
_doc_items_longdesc = S("The stem of a warped hyphae"),
_doc_items_hidden = false,
tiles = {
2023-02-08 11:10:42 +01:00
"mcl_crimson_warped_hyphae.png",
"mcl_crimson_warped_hyphae.png",
2022-12-14 15:25:43 +01:00
{
name = "mcl_crimson_warped_hyphae_side.png",
2022-12-14 15:25:43 +01:00
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
},
2022-05-04 00:24:09 +02:00
},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
2022-05-04 00:12:53 +02:00
_mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae",
2022-04-29 12:24:29 +02:00
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:warped_nylium", {
2022-05-04 00:24:09 +02:00
description = S("Warped Nylium"),
tiles = {
2023-02-08 11:10:42 +01:00
"mcl_crimson_warped_nylium.png",
"mcl_nether_netherrack.png",
2023-02-08 11:10:42 +01:00
"mcl_nether_netherrack.png^mcl_crimson_warped_nylium_side.png",
"mcl_nether_netherrack.png^mcl_crimson_warped_nylium_side.png",
"mcl_nether_netherrack.png^mcl_crimson_warped_nylium_side.png",
"mcl_nether_netherrack.png^mcl_crimson_warped_nylium_side.png",
},
2022-05-04 00:24:09 +02:00
is_ground_content = true,
drop = "mcl_nether:netherrack",
groups = {pickaxey=1, building_block=1, material_stone=1},
2022-12-08 12:09:30 +01:00
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_hardness = 0.4,
_mcl_blast_resistance = 0.4,
2022-05-04 00:24:09 +02:00
_mcl_silk_touch_drop = true,
_on_bone_meal = function(itemstack, placer, pointed_thing)
local node = minetest.get_node(pointed_thing.under)
2024-04-19 01:28:58 +02:00
spread_nether_plants(pointed_thing.under,node)
return true
end,
2022-04-29 12:24:29 +02:00
})
--Stem bark, stripped stem and bark
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:warped_hyphae_bark", {
description = S("Warped Hyphae Bark"),
_doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."),
2022-12-14 15:25:43 +01:00
tiles = {
{
name = "mcl_crimson_warped_hyphae_side.png",
2022-12-14 15:25:43 +01:00
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
},
},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
is_ground_content = false,
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
_mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae_bark",
})
minetest.register_craft({
output = "mcl_crimson:warped_hyphae_bark 3",
recipe = {
{ "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" },
{ "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" },
},
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:stripped_warped_hyphae", {
description = S("Stripped Warped Hyphae"),
_doc_items_longdesc = S("The stripped hyphae of a warped fungus"),
_doc_items_hidden = false,
2023-02-08 12:06:59 +01:00
tiles = {"mcl_crimson_warped_stem_stripped_top.png", "mcl_crimson_warped_stem_stripped_top.png", "mcl_crimson_warped_stem_stripped_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:stripped_warped_hyphae_bark", {
description = S("Stripped Warped Hyphae Bark"),
_doc_items_longdesc = S("The stripped hyphae bark of a warped fungus"),
2023-02-08 12:06:59 +01:00
tiles = {"mcl_crimson_warped_stem_stripped_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
is_ground_content = false,
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
})
minetest.register_craft({
output = "mcl_crimson:stripped_warped_hyphae_bark 3",
recipe = {
{ "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" },
{ "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" },
},
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:warped_hyphae_wood", {
2022-05-04 00:24:09 +02:00
description = S("Warped Hyphae Wood"),
2023-02-08 11:10:42 +01:00
tiles = {"mcl_crimson_warped_hyphae_wood.png"},
groups = {handy = 5,axey = 1, wood=1,building_block = 1, material_wood = 1},
2022-11-26 12:54:34 +01:00
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 3,
2022-05-04 00:24:09 +02:00
_mcl_hardness = 2,
2022-04-29 12:24:29 +02:00
})
mcl_stairs.register_stair("warped_hyphae_wood", "mcl_crimson:warped_hyphae_wood", wood_stair_groups, false, S("Warped Stair"))
mcl_stairs.register_slab("warped_hyphae_wood", "mcl_crimson:warped_hyphae_wood", wood_slab_groups, false, S("Warped Slab"))
2022-04-29 12:24:29 +02:00
minetest.register_craft({
2022-05-04 00:24:09 +02:00
output = "mcl_crimson:warped_hyphae_wood 4",
recipe = {
{"mcl_crimson:warped_hyphae"},
},
2022-04-29 12:24:29 +02:00
})
minetest.register_craft({
output = "mcl_crimson:warped_hyphae_wood 4",
recipe = {
{"mcl_crimson:warped_hyphae_bark"},
},
})
minetest.register_craft({
output = "mcl_crimson:warped_hyphae_wood 4",
recipe = {
{"mcl_crimson:stripped_warped_hyphae"},
},
})
minetest.register_craft({
output = "mcl_crimson:warped_hyphae_wood 4",
recipe = {
{"mcl_crimson:stripped_warped_hyphae_bark"},
},
})
2022-04-29 12:24:29 +02:00
minetest.register_craft({
output = "mcl_crimson:warped_nylium 2",
2022-05-04 00:24:09 +02:00
recipe = {
{"mcl_crimson:warped_wart_block"},
{"mcl_nether:netherrack"},
},
2022-04-29 12:24:29 +02:00
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:crimson_fungus", {
description = S("Crimson Fungus"),
_tt_help = S("Crimson fungus is a mushroom found in the nether's crimson forest."),
_doc_items_longdesc = S("Crimson fungus is a mushroom found in the nether's crimson forest."),
2022-04-29 12:24:29 +02:00
drawtype = "plantlike",
2023-02-14 03:00:19 +01:00
tiles = { "mcl_crimson_crimson_fungus.png" },
inventory_image = "mcl_crimson_crimson_fungus.png",
wield_image = "mcl_crimson_crimson_fungus.png",
2022-04-29 12:24:29 +02:00
sunlight_propagates = true,
paramtype = "light",
walkable = false,
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1,compostability=65},
2022-04-29 12:24:29 +02:00
light_source = 1,
sounds = mcl_sounds.node_sound_leaves_defaults(),
2022-04-29 12:24:29 +02:00
selection_box = {
type = "fixed",
fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 },
},
node_placement_prediction = "",
_on_bone_meal = function(itemstack, placer, pointed_thing)
local pos = pointed_thing.under
local nodepos = minetest.get_node(vector.offset(pos, 0, -1, 0))
if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then
local random = math.random(1, 5)
if random == 1 then
minetest.remove_node(pos)
generate_crimson_tree(pos)
return true
end
2022-05-04 00:24:09 +02:00
end
-- Failed to spread nylium
return false
2022-05-04 00:24:09 +02:00
end,
2022-04-29 12:24:29 +02:00
_mcl_blast_resistance = 0,
})
mcl_flowerpots.register_potted_flower("mcl_crimson:crimson_fungus", {
name = "crimson_fungus",
desc = S("Crimson Fungus"),
2023-02-14 03:00:19 +01:00
image = "mcl_crimson_crimson_fungus.png",
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:crimson_roots", {
2022-05-04 00:24:09 +02:00
description = S("Crimson Roots"),
drawtype = "plantlike",
2023-02-14 02:42:05 +01:00
tiles = { "mcl_crimson_crimson_roots.png" },
inventory_image = "mcl_crimson_crimson_roots.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
buildable_to = true,
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1,shearsy = 1,compostability=65},
sounds = mcl_sounds.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 },
},
node_placement_prediction = "",
_mcl_silk_touch_drop = false,
2022-05-04 00:24:09 +02:00
_mcl_blast_resistance = 0,
})
mcl_flowerpots.register_potted_flower("mcl_crimson:crimson_roots", {
name = "crimson_roots",
desc = S("Crimson Roots"),
2023-02-14 02:42:05 +01:00
image = "mcl_crimson_crimson_roots.png",
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:crimson_hyphae", {
description = S("Crimson Hyphae"),
_doc_items_longdesc = S("The stem of a crimson hyphae"),
_doc_items_hidden = false,
tiles = {
2023-02-14 05:23:04 +01:00
"mcl_crimson_crimson_hyphae.png",
"mcl_crimson_crimson_hyphae.png",
2022-12-14 15:25:43 +01:00
{
name = "mcl_crimson_crimson_hyphae_side.png",
2022-12-14 15:25:43 +01:00
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
},
2022-05-04 00:24:09 +02:00
},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
2022-06-18 14:28:05 +02:00
_mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae",
2022-04-29 12:24:29 +02:00
})
--Stem bark, stripped stem and bark
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:crimson_hyphae_bark", {
description = S("Crimson Hyphae Bark"),
_doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."),
2022-12-14 15:25:43 +01:00
tiles = {
{
name = "mcl_crimson_crimson_hyphae_side.png",
2022-12-14 15:25:43 +01:00
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
},
},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
is_ground_content = false,
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
_mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae_bark",
})
minetest.register_craft({
output = "mcl_crimson:crimson_hyphae_bark 3",
recipe = {
{ "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" },
{ "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" },
},
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:stripped_crimson_hyphae", {
description = S("Stripped Crimson Hyphae"),
_doc_items_longdesc = S("The stripped stem of a crimson hyphae"),
_doc_items_hidden = false,
2023-02-08 12:06:59 +01:00
tiles = {"mcl_crimson_crimson_stem_stripped_top.png", "mcl_crimson_crimson_stem_stripped_top.png", "mcl_crimson_crimson_stem_stripped_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:stripped_crimson_hyphae_bark", {
description = S("Stripped Crimson Hyphae Bark"),
_doc_items_longdesc = S("The stripped wood of a crimson hyphae"),
2023-02-08 12:06:59 +01:00
tiles = {"mcl_crimson_crimson_stem_stripped_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
is_ground_content = false,
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
})
minetest.register_craft({
output = "mcl_crimson:stripped_crimson_hyphae_bark 3",
recipe = {
{ "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" },
{ "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" },
},
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:crimson_hyphae_wood", {
2022-05-04 00:24:09 +02:00
description = S("Crimson Hyphae Wood"),
2023-02-15 17:23:08 +01:00
tiles = {"mcl_crimson_crimson_hyphae_wood.png"},
groups = {handy = 5, axey = 1, wood = 1, building_block = 1, material_wood = 1},
2022-11-26 12:54:34 +01:00
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 3,
2022-05-04 00:24:09 +02:00
_mcl_hardness = 2,
2022-04-29 12:24:29 +02:00
})
2022-05-04 00:12:53 +02:00
minetest.register_node("mcl_crimson:crimson_nylium", {
2022-05-04 00:24:09 +02:00
description = S("Crimson Nylium"),
tiles = {
2023-02-14 05:23:04 +01:00
"mcl_crimson_crimson_nylium.png",
"mcl_nether_netherrack.png",
2023-02-14 05:23:04 +01:00
"mcl_nether_netherrack.png^mcl_crimson_crimson_nylium_side.png",
"mcl_nether_netherrack.png^mcl_crimson_crimson_nylium_side.png",
"mcl_nether_netherrack.png^mcl_crimson_crimson_nylium_side.png",
"mcl_nether_netherrack.png^mcl_crimson_crimson_nylium_side.png",
},
groups = {pickaxey = 1, building_block = 1, material_stone = 1},
2022-12-08 12:09:30 +01:00
sounds = mcl_sounds.node_sound_stone_defaults(),
2022-05-04 00:24:09 +02:00
is_ground_content = true,
drop = "mcl_nether:netherrack",
_mcl_hardness = 0.4,
_mcl_blast_resistance = 0.4,
2022-05-04 00:24:09 +02:00
_mcl_silk_touch_drop = true,
_on_bone_meal = function(itemstack, placer, pointed_thing)
local node = minetest.get_node(pointed_thing.under)
spread_nether_plants(pointed_thing.under,node)
return true
end,
2022-04-29 12:24:29 +02:00
})
minetest.register_craft({
2022-05-04 00:24:09 +02:00
output = "mcl_crimson:crimson_hyphae_wood 4",
recipe = {
{"mcl_crimson:crimson_hyphae"},
},
2022-04-29 12:24:29 +02:00
})
minetest.register_craft({
output = "mcl_crimson:crimson_hyphae_wood 4",
recipe = {
{"mcl_crimson:crimson_hyphae_bark"},
},
})
minetest.register_craft({
output = "mcl_crimson:crimson_hyphae_wood 4",
recipe = {
{"mcl_crimson:stripped_crimson_hyphae"},
},
})
minetest.register_craft({
output = "mcl_crimson:crimson_hyphae_wood 4",
recipe = {
{"mcl_crimson:stripped_crimson_hyphae_bark"},
},
})
2022-04-29 12:24:29 +02:00
minetest.register_craft({
output = "mcl_crimson:crimson_nylium 2",
2022-05-04 00:24:09 +02:00
recipe = {
{"mcl_nether:nether_wart"},
{"mcl_nether:netherrack"},
},
2022-04-29 12:24:29 +02:00
})
mcl_stairs.register_stair("crimson_hyphae_wood", "mcl_crimson:crimson_hyphae_wood", wood_stair_groups, false, S("Crimson Stair"))
mcl_stairs.register_slab("crimson_hyphae_wood", "mcl_crimson:crimson_hyphae_wood", wood_slab_groups, false, S("Crimson Slab"))
2022-04-29 12:24:29 +02:00
2024-01-06 13:18:20 +01:00
minetest.register_abm({
label = "Turn Crimson Nylium and Warped Nylium below solid block into Netherrack",
nodenames = {"mcl_crimson:crimson_nylium","mcl_crimson:warped_nylium"},
neighbors = {"group:solid"},
interval = 8,
chance = 50,
action = function(pos, node)
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
local name = minetest.get_node(above).name
local nodedef = minetest.registered_nodes[name]
if name ~= "ignore" and nodedef and (nodedef.groups and nodedef.groups.solid) then
minetest.set_node(pos, {name = "mcl_nether:netherrack"})
end
end
})
mcl_doors:register_door("mcl_crimson:crimson_door", {
description = S("Crimson Door"),
_doc_items_longdesc = S("Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal."),
_doc_items_usagehelp = S("To open or close a wooden door, rightclick it or supply its lower half with a redstone signal."),
inventory_image = "mcl_crimson_crimson_door.png",
groups = {handy=1,axey=1, material_wood=1},
_mcl_hardness = 3,
_mcl_blast_resistance = 3,
tiles_bottom = "mcl_crimson_crimson_door_bottom.png",
tiles_top = "mcl_crimson_crimson_door_top.png",
sounds = mcl_sounds.node_sound_wood_defaults(),
})
mcl_doors:register_trapdoor("mcl_crimson:crimson_trapdoor", {
description = S("Crimson Trapdoor"),
_doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."),
_doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."),
tile_front = "mcl_crimson_crimson_trapdoor.png",
tile_side = "mcl_crimson_crimson_trapdoor_side.png",
wield_image = "mcl_crimson_crimson_trapdoor.png",
groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1},
_mcl_hardness = 3,
_mcl_blast_resistance = 3,
sounds = mcl_sounds.node_sound_wood_defaults(),
})
2022-11-03 22:08:15 +01:00
mcl_fences.register_fence_and_fence_gate(
"crimson_fence",
S("Crimson Fence"),
S("Crimson Fence Gate"),
"mcl_crimson_crimson_fence.png",
{handy=1,axey=1,fence_wood=1},
2022-11-03 22:08:15 +01:00
minetest.registered_nodes["mcl_crimson:crimson_hyphae"]._mcl_hardness,
minetest.registered_nodes["mcl_crimson:crimson_hyphae"]._mcl_blast_resistance,
{"group:fence_wood"},
mcl_sounds.node_sound_wood_defaults())
mcl_doors:register_door("mcl_crimson:warped_door", {
description = S("Warped Door"),
_doc_items_longdesc = S("Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal."),
_doc_items_usagehelp = S("To open or close a wooden door, rightclick it or supply its lower half with a redstone signal."),
inventory_image = "mcl_crimson_warped_door.png",
groups = {handy=1,axey=1, material_wood=1},
_mcl_hardness = 3,
_mcl_blast_resistance = 3,
tiles_bottom = "mcl_crimson_warped_door_bottom.png",
tiles_top = "mcl_crimson_warped_door_top.png",
sounds = mcl_sounds.node_sound_wood_defaults(),
})
mcl_doors:register_trapdoor("mcl_crimson:warped_trapdoor", {
description = S("Warped Trapdoor"),
_doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."),
_doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."),
tile_front = "mcl_crimson_warped_trapdoor.png",
tile_side = "mcl_crimson_warped_trapdoor_side.png",
wield_image = "mcl_crimson_warped_trapdoor.png",
groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1},
_mcl_hardness = 3,
_mcl_blast_resistance = 3,
sounds = mcl_sounds.node_sound_wood_defaults(),
})
2022-11-03 22:07:57 +01:00
mcl_fences.register_fence_and_fence_gate(
"warped_fence",
S("Warped Fence"),
S("Warped Fence Gate"),
"mcl_crimson_warped_fence.png",
{handy=1,axey=1,fence_wood=1},
2022-11-03 22:07:57 +01:00
minetest.registered_nodes["mcl_crimson:warped_hyphae"]._mcl_hardness,
minetest.registered_nodes["mcl_crimson:warped_hyphae"]._mcl_blast_resistance,
{"group:fence_wood"},
mcl_sounds.node_sound_wood_defaults())
-- Door, Trapdoor, and Fence/Gate Crafting
local crimson_wood = "mcl_crimson:crimson_hyphae_wood"
local warped_wood = "mcl_crimson:warped_hyphae_wood"
minetest.register_craft({
output = "mcl_crimson:crimson_door 3",
recipe = {
{crimson_wood, crimson_wood},
{crimson_wood, crimson_wood},
{crimson_wood, crimson_wood}
}
})
minetest.register_craft({
output = "mcl_crimson:warped_door 3",
recipe = {
{warped_wood, warped_wood},
{warped_wood, warped_wood},
{warped_wood, warped_wood}
}
})
minetest.register_craft({
output = "mcl_crimson:crimson_trapdoor 2",
recipe = {
{crimson_wood, crimson_wood, crimson_wood},
{crimson_wood, crimson_wood, crimson_wood},
}
})
minetest.register_craft({
output = "mcl_crimson:warped_trapdoor 2",
recipe = {
{warped_wood, warped_wood, warped_wood},
{warped_wood, warped_wood, warped_wood},
}
})
minetest.register_craft({
output = "mcl_crimson:crimson_fence 3",
recipe = {
{crimson_wood, "mcl_core:stick", crimson_wood},
{crimson_wood, "mcl_core:stick", crimson_wood},
}
})
minetest.register_craft({
output = "mcl_crimson:warped_fence 3",
recipe = {
{warped_wood, "mcl_core:stick", warped_wood},
{warped_wood, "mcl_core:stick", warped_wood},
}
})
minetest.register_craft({
output = "mcl_crimson:crimson_fence_gate",
recipe = {
{"mcl_core:stick", crimson_wood, "mcl_core:stick"},
{"mcl_core:stick", crimson_wood, "mcl_core:stick"},
}
})
minetest.register_craft({
output = "mcl_crimson:warped_fence_gate",
recipe = {
{"mcl_core:stick", warped_wood, "mcl_core:stick"},
{"mcl_core:stick", warped_wood, "mcl_core:stick"},
}
})
2024-01-06 13:18:20 +01:00
dofile(modpath.."/alias.lua")