forked from minetest/minetest_game
Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
51de4236ab | |||
5d0795a1a7 | |||
4c0c7ae146 | |||
4bd6bce86e | |||
3653859961 | |||
9fdbc1f407 | |||
1d4eb43f26 | |||
91849c3b4e | |||
2d9f34cf29 | |||
c21dccd7fa | |||
a4b4de6d0e | |||
672fdbcc11 | |||
3c0fa5f8b0 | |||
7b8ad5786c | |||
066d23cdfd | |||
cf6f458906 | |||
e547d279ab | |||
3804d8a078 | |||
a4823a4261 | |||
9df85d7752 | |||
fa9424c31b | |||
eb71e01887 | |||
83133210cc | |||
90fde974a2 | |||
02bfcae53d | |||
9bbde070a1 | |||
6fed6867cb | |||
c4bb058421 | |||
b0ab4fb4ab | |||
d7784c0729 | |||
179f4c3f91 | |||
486509876a | |||
c3c5f8a228 |
@ -22,7 +22,8 @@ minetest.register_node("bones:bones", {
|
|||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {dig_immediate=2},
|
groups = {dig_immediate=2},
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_gravel_footstep", gain=0.45},
|
footstep = {name="default_gravel_footstep", gain=0.5},
|
||||||
|
dug = {name="default_gravel_footstep", gain=1.0},
|
||||||
}),
|
}),
|
||||||
|
|
||||||
can_dig = function(pos, player)
|
can_dig = function(pos, player)
|
||||||
|
@ -44,6 +44,15 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
|
|||||||
if pointed_thing.type ~= "node" then
|
if pointed_thing.type ~= "node" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Call on_rightclick if the pointed node defines it
|
||||||
|
if user and not user:get_player_control().sneak then
|
||||||
|
local n = minetest.get_node(pointed_thing.under)
|
||||||
|
local nn = n.name
|
||||||
|
if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then
|
||||||
|
return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, user, itemstack) or itemstack
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local place_liquid = function(pos, node, source, flowing, fullness)
|
local place_liquid = function(pos, node, source, flowing, fullness)
|
||||||
if math.floor(fullness/128) == 1 or (not minetest.setting_getbool("liquid_finite")) then
|
if math.floor(fullness/128) == 1 or (not minetest.setting_getbool("liquid_finite")) then
|
||||||
|
@ -28,9 +28,10 @@ minetest.after(0, function()
|
|||||||
on_put = function(inv, listname, index, stack, player)
|
on_put = function(inv, listname, index, stack, player)
|
||||||
end,
|
end,
|
||||||
on_take = function(inv, listname, index, stack, player)
|
on_take = function(inv, listname, index, stack, player)
|
||||||
print(player:get_player_name().." takes item from creative inventory; listname="..dump(listname)..", index="..dump(index)..", stack="..dump(stack))
|
--print(player:get_player_name().." takes item from creative inventory; listname="..dump(listname)..", index="..dump(index)..", stack="..dump(stack))
|
||||||
if stack then
|
if stack then
|
||||||
print("stack:get_name()="..dump(stack:get_name())..", stack:get_count()="..dump(stack:get_count()))
|
minetest.log("action", player:get_player_name().." takes "..dump(stack:get_name()).." from creative inventory")
|
||||||
|
--print("stack:get_name()="..dump(stack:get_name())..", stack:get_count()="..dump(stack:get_count()))
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
@ -47,7 +48,7 @@ minetest.after(0, function()
|
|||||||
inv:add_item("main", ItemStack(itemstring))
|
inv:add_item("main", ItemStack(itemstring))
|
||||||
end
|
end
|
||||||
creative_inventory.creative_inventory_size = #creative_list
|
creative_inventory.creative_inventory_size = #creative_list
|
||||||
print("creative inventory size: "..dump(creative_inventory.creative_inventory_size))
|
--print("creative inventory size: "..dump(creative_inventory.creative_inventory_size))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Create the trash field
|
-- Create the trash field
|
||||||
@ -122,20 +123,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
if minetest.setting_getbool("creative_mode") then
|
if minetest.setting_getbool("creative_mode") then
|
||||||
|
local digtime = 0.5
|
||||||
minetest.register_item(":", {
|
minetest.register_item(":", {
|
||||||
type = "none",
|
type = "none",
|
||||||
wield_image = "wieldhand.png",
|
wield_image = "wieldhand.png",
|
||||||
wield_scale = {x=1,y=1,z=2.5},
|
wield_scale = {x=1,y=1,z=2.5},
|
||||||
|
range = 10,
|
||||||
tool_capabilities = {
|
tool_capabilities = {
|
||||||
full_punch_interval = 0.5,
|
full_punch_interval = 0.5,
|
||||||
max_drop_level = 3,
|
max_drop_level = 3,
|
||||||
groupcaps = {
|
groupcaps = {
|
||||||
crumbly = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
|
crumbly = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
||||||
cracky = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
|
cracky = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
||||||
snappy = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
|
snappy = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
||||||
choppy = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
|
choppy = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
||||||
oddly_breakable_by_hand = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
|
oddly_breakable_by_hand = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
||||||
},
|
},
|
||||||
damage_groups = {fleshy = 10},
|
damage_groups = {fleshy = 10},
|
||||||
}
|
}
|
||||||
|
@ -22,10 +22,6 @@ Authors of media files
|
|||||||
Everything not listed in here:
|
Everything not listed in here:
|
||||||
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
|
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||||
|
|
||||||
Originating from work by kddekadenz/Dogers:
|
|
||||||
default_grass_footstep.{1,2,3}.ogg
|
|
||||||
default_dig_crumbly.{1,2}.ogg
|
|
||||||
|
|
||||||
Cisoun's WTFPL texture pack:
|
Cisoun's WTFPL texture pack:
|
||||||
default_chest_front.png
|
default_chest_front.png
|
||||||
default_chest_lock.png
|
default_chest_lock.png
|
||||||
@ -141,7 +137,45 @@ Zeg9 (CC BY-SA 3.0):
|
|||||||
default_gold_block.png
|
default_gold_block.png
|
||||||
default_diamond_block.png
|
default_diamond_block.png
|
||||||
|
|
||||||
|
kaeza (WTFPL):
|
||||||
|
bubble.png
|
||||||
|
|
||||||
Glass breaking sounds (CC BY 3.0):
|
Glass breaking sounds (CC BY 3.0):
|
||||||
1: http://www.freesound.org/people/cmusounddesign/sounds/71947/
|
1: http://www.freesound.org/people/cmusounddesign/sounds/71947/
|
||||||
2: http://www.freesound.org/people/Tomlija/sounds/97669/
|
2: http://www.freesound.org/people/Tomlija/sounds/97669/
|
||||||
3: http://www.freesound.org/people/lsprice/sounds/88808/
|
3: http://www.freesound.org/people/lsprice/sounds/88808/
|
||||||
|
|
||||||
|
Mito551 (sounds) (CC BY-SA):
|
||||||
|
default_dig_choppy.ogg
|
||||||
|
default_dig_cracky.ogg
|
||||||
|
default_dig_crumbly.1.ogg
|
||||||
|
default_dig_crumbly.2.ogg
|
||||||
|
default_dig_dig_immediate.ogg
|
||||||
|
default_dig_oddly_breakable_by_hand.ogg
|
||||||
|
default_dug_node.1.ogg
|
||||||
|
default_dug_node.2.ogg
|
||||||
|
default_grass_footstep.1.ogg
|
||||||
|
default_grass_footstep.2.ogg
|
||||||
|
default_grass_footstep.3.ogg
|
||||||
|
default_gravel_footstep.1.ogg
|
||||||
|
default_gravel_footstep.2.ogg
|
||||||
|
default_gravel_footstep.3.ogg
|
||||||
|
default_gravel_footstep.4.ogg
|
||||||
|
default_grass_footstep.1.ogg
|
||||||
|
default_place_node.1.ogg
|
||||||
|
default_place_node.2.ogg
|
||||||
|
default_place_node.3.ogg
|
||||||
|
default_place_node_hard.1.ogg
|
||||||
|
default_place_node_hard.2.ogg
|
||||||
|
default_snow_footstep.1.ogg
|
||||||
|
default_snow_footstep.2.ogg
|
||||||
|
default_hard_footstep.1.ogg
|
||||||
|
default_hard_footstep.2.ogg
|
||||||
|
default_hard_footstep.3.ogg
|
||||||
|
default_sand_footstep.1.ogg
|
||||||
|
default_sand_footstep.2.ogg
|
||||||
|
default_wood_footstep.1.ogg
|
||||||
|
default_wood_footstep.2.ogg
|
||||||
|
default_dirt_footstep.1.ogg
|
||||||
|
default_dirt_footstep.2.ogg
|
||||||
|
default_glass_footstep.ogg
|
||||||
|
@ -24,8 +24,8 @@ minetest.register_craft({
|
|||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'default:fence_wood 2',
|
output = 'default:fence_wood 2',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:stick', 'default:stick', 'default:stick'},
|
{'group:stick', 'group:stick', 'group:stick'},
|
||||||
{'default:stick', 'default:stick', 'default:stick'},
|
{'group:stick', 'group:stick', 'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ minetest.register_craft({
|
|||||||
recipe = {
|
recipe = {
|
||||||
{'group:wood', 'group:wood', 'group:wood'},
|
{'group:wood', 'group:wood', 'group:wood'},
|
||||||
{'group:wood', 'group:wood', 'group:wood'},
|
{'group:wood', 'group:wood', 'group:wood'},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ minetest.register_craft({
|
|||||||
output = 'default:torch 4',
|
output = 'default:torch 4',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:coal_lump'},
|
{'default:coal_lump'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -50,8 +50,8 @@ minetest.register_craft({
|
|||||||
output = 'default:pick_wood',
|
output = 'default:pick_wood',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'group:wood', 'group:wood', 'group:wood'},
|
{'group:wood', 'group:wood', 'group:wood'},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -59,8 +59,8 @@ minetest.register_craft({
|
|||||||
output = 'default:pick_stone',
|
output = 'default:pick_stone',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'group:stone', 'group:stone', 'group:stone'},
|
{'group:stone', 'group:stone', 'group:stone'},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -68,8 +68,8 @@ minetest.register_craft({
|
|||||||
output = 'default:pick_steel',
|
output = 'default:pick_steel',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -77,8 +77,8 @@ minetest.register_craft({
|
|||||||
output = 'default:pick_bronze',
|
output = 'default:pick_bronze',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
|
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -86,8 +86,8 @@ minetest.register_craft({
|
|||||||
output = 'default:pick_mese',
|
output = 'default:pick_mese',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
|
{'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -95,8 +95,8 @@ minetest.register_craft({
|
|||||||
output = 'default:pick_diamond',
|
output = 'default:pick_diamond',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:diamond', 'default:diamond', 'default:diamond'},
|
{'default:diamond', 'default:diamond', 'default:diamond'},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
{'', 'default:stick', ''},
|
{'', 'group:stick', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -104,8 +104,8 @@ minetest.register_craft({
|
|||||||
output = 'default:shovel_wood',
|
output = 'default:shovel_wood',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'group:wood'},
|
{'group:wood'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -113,8 +113,8 @@ minetest.register_craft({
|
|||||||
output = 'default:shovel_stone',
|
output = 'default:shovel_stone',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'group:stone'},
|
{'group:stone'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -122,8 +122,8 @@ minetest.register_craft({
|
|||||||
output = 'default:shovel_steel',
|
output = 'default:shovel_steel',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:steel_ingot'},
|
{'default:steel_ingot'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -131,8 +131,8 @@ minetest.register_craft({
|
|||||||
output = 'default:shovel_bronze',
|
output = 'default:shovel_bronze',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:bronze_ingot'},
|
{'default:bronze_ingot'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -140,8 +140,8 @@ minetest.register_craft({
|
|||||||
output = 'default:shovel_mese',
|
output = 'default:shovel_mese',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:mese_crystal'},
|
{'default:mese_crystal'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -149,8 +149,8 @@ minetest.register_craft({
|
|||||||
output = 'default:shovel_diamond',
|
output = 'default:shovel_diamond',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:diamond'},
|
{'default:diamond'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -158,8 +158,8 @@ minetest.register_craft({
|
|||||||
output = 'default:axe_wood',
|
output = 'default:axe_wood',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'group:wood', 'group:wood'},
|
{'group:wood', 'group:wood'},
|
||||||
{'group:wood', 'default:stick'},
|
{'group:wood', 'group:stick'},
|
||||||
{'', 'default:stick'},
|
{'', 'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -167,8 +167,8 @@ minetest.register_craft({
|
|||||||
output = 'default:axe_stone',
|
output = 'default:axe_stone',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'group:stone', 'group:stone'},
|
{'group:stone', 'group:stone'},
|
||||||
{'group:stone', 'default:stick'},
|
{'group:stone', 'group:stick'},
|
||||||
{'', 'default:stick'},
|
{'', 'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -176,8 +176,8 @@ minetest.register_craft({
|
|||||||
output = 'default:axe_steel',
|
output = 'default:axe_steel',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:steel_ingot', 'default:steel_ingot'},
|
{'default:steel_ingot', 'default:steel_ingot'},
|
||||||
{'default:steel_ingot', 'default:stick'},
|
{'default:steel_ingot', 'group:stick'},
|
||||||
{'', 'default:stick'},
|
{'', 'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -185,8 +185,8 @@ minetest.register_craft({
|
|||||||
output = 'default:axe_bronze',
|
output = 'default:axe_bronze',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:bronze_ingot', 'default:bronze_ingot'},
|
{'default:bronze_ingot', 'default:bronze_ingot'},
|
||||||
{'default:bronze_ingot', 'default:stick'},
|
{'default:bronze_ingot', 'group:stick'},
|
||||||
{'', 'default:stick'},
|
{'', 'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -194,8 +194,8 @@ minetest.register_craft({
|
|||||||
output = 'default:axe_mese',
|
output = 'default:axe_mese',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:mese_crystal', 'default:mese_crystal'},
|
{'default:mese_crystal', 'default:mese_crystal'},
|
||||||
{'default:mese_crystal', 'default:stick'},
|
{'default:mese_crystal', 'group:stick'},
|
||||||
{'', 'default:stick'},
|
{'', 'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -203,8 +203,8 @@ minetest.register_craft({
|
|||||||
output = 'default:axe_diamond',
|
output = 'default:axe_diamond',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:diamond', 'default:diamond'},
|
{'default:diamond', 'default:diamond'},
|
||||||
{'default:diamond', 'default:stick'},
|
{'default:diamond', 'group:stick'},
|
||||||
{'', 'default:stick'},
|
{'', 'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ minetest.register_craft({
|
|||||||
recipe = {
|
recipe = {
|
||||||
{'group:wood'},
|
{'group:wood'},
|
||||||
{'group:wood'},
|
{'group:wood'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -222,7 +222,7 @@ minetest.register_craft({
|
|||||||
recipe = {
|
recipe = {
|
||||||
{'group:stone'},
|
{'group:stone'},
|
||||||
{'group:stone'},
|
{'group:stone'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -231,7 +231,7 @@ minetest.register_craft({
|
|||||||
recipe = {
|
recipe = {
|
||||||
{'default:steel_ingot'},
|
{'default:steel_ingot'},
|
||||||
{'default:steel_ingot'},
|
{'default:steel_ingot'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ minetest.register_craft({
|
|||||||
recipe = {
|
recipe = {
|
||||||
{'default:bronze_ingot'},
|
{'default:bronze_ingot'},
|
||||||
{'default:bronze_ingot'},
|
{'default:bronze_ingot'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -249,7 +249,7 @@ minetest.register_craft({
|
|||||||
recipe = {
|
recipe = {
|
||||||
{'default:mese_crystal'},
|
{'default:mese_crystal'},
|
||||||
{'default:mese_crystal'},
|
{'default:mese_crystal'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -258,7 +258,7 @@ minetest.register_craft({
|
|||||||
recipe = {
|
recipe = {
|
||||||
{'default:diamond'},
|
{'default:diamond'},
|
||||||
{'default:diamond'},
|
{'default:diamond'},
|
||||||
{'default:stick'},
|
{'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -266,7 +266,7 @@ minetest.register_craft({
|
|||||||
output = 'default:rail 15',
|
output = 'default:rail 15',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
{'default:steel_ingot', '', 'default:steel_ingot'},
|
||||||
{'default:steel_ingot', 'default:stick', 'default:steel_ingot'},
|
{'default:steel_ingot', 'group:stick', 'default:steel_ingot'},
|
||||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
{'default:steel_ingot', '', 'default:steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -474,9 +474,9 @@ minetest.register_craft({
|
|||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'default:ladder',
|
output = 'default:ladder',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:stick', '', 'default:stick'},
|
{'group:stick', '', 'group:stick'},
|
||||||
{'default:stick', 'default:stick', 'default:stick'},
|
{'group:stick', 'group:stick', 'group:stick'},
|
||||||
{'default:stick', '', 'default:stick'},
|
{'group:stick', '', 'group:stick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
minetest.register_craftitem("default:stick", {
|
minetest.register_craftitem("default:stick", {
|
||||||
description = "Stick",
|
description = "Stick",
|
||||||
inventory_image = "default_stick.png",
|
inventory_image = "default_stick.png",
|
||||||
|
groups = {stick=1},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("default:paper", {
|
minetest.register_craftitem("default:paper", {
|
||||||
|
@ -9,16 +9,18 @@ function default.node_sound_defaults(table)
|
|||||||
table.footstep = table.footstep or
|
table.footstep = table.footstep or
|
||||||
{name="", gain=1.0}
|
{name="", gain=1.0}
|
||||||
table.dug = table.dug or
|
table.dug = table.dug or
|
||||||
{name="default_dug_node", gain=1.0}
|
{name="default_dug_node", gain=0.25}
|
||||||
table.place = table.place or
|
table.place = table.place or
|
||||||
{name="default_place_node", gain=0.5}
|
{name="default_place_node_hard", gain=1.0}
|
||||||
return table
|
return table
|
||||||
end
|
end
|
||||||
|
|
||||||
function default.node_sound_stone_defaults(table)
|
function default.node_sound_stone_defaults(table)
|
||||||
table = table or {}
|
table = table or {}
|
||||||
table.footstep = table.footstep or
|
table.footstep = table.footstep or
|
||||||
{name="default_hard_footstep", gain=0.2}
|
{name="default_hard_footstep", gain=0.5}
|
||||||
|
table.dug = table.dug or
|
||||||
|
{name="default_hard_footstep", gain=1.0}
|
||||||
default.node_sound_defaults(table)
|
default.node_sound_defaults(table)
|
||||||
return table
|
return table
|
||||||
end
|
end
|
||||||
@ -26,9 +28,11 @@ end
|
|||||||
function default.node_sound_dirt_defaults(table)
|
function default.node_sound_dirt_defaults(table)
|
||||||
table = table or {}
|
table = table or {}
|
||||||
table.footstep = table.footstep or
|
table.footstep = table.footstep or
|
||||||
{name="", gain=0.5}
|
{name="default_dirt_footstep", gain=1.0}
|
||||||
--table.dug = table.dug or
|
table.dug = table.dug or
|
||||||
-- {name="default_dirt_break", gain=0.5}
|
{name="default_dirt_footstep", gain=1.5}
|
||||||
|
table.place = table.place or
|
||||||
|
{name="default_place_node", gain=1.0}
|
||||||
default.node_sound_defaults(table)
|
default.node_sound_defaults(table)
|
||||||
return table
|
return table
|
||||||
end
|
end
|
||||||
@ -36,11 +40,11 @@ end
|
|||||||
function default.node_sound_sand_defaults(table)
|
function default.node_sound_sand_defaults(table)
|
||||||
table = table or {}
|
table = table or {}
|
||||||
table.footstep = table.footstep or
|
table.footstep = table.footstep or
|
||||||
{name="default_grass_footstep", gain=0.25}
|
{name="default_sand_footstep", gain=0.5}
|
||||||
--table.dug = table.dug or
|
|
||||||
-- {name="default_dirt_break", gain=0.25}
|
|
||||||
table.dug = table.dug or
|
table.dug = table.dug or
|
||||||
{name="", gain=0.25}
|
{name="default_sand_footstep", gain=1.0}
|
||||||
|
table.place = table.place or
|
||||||
|
{name="default_place_node", gain=1.0}
|
||||||
default.node_sound_defaults(table)
|
default.node_sound_defaults(table)
|
||||||
return table
|
return table
|
||||||
end
|
end
|
||||||
@ -48,7 +52,9 @@ end
|
|||||||
function default.node_sound_wood_defaults(table)
|
function default.node_sound_wood_defaults(table)
|
||||||
table = table or {}
|
table = table or {}
|
||||||
table.footstep = table.footstep or
|
table.footstep = table.footstep or
|
||||||
{name="default_hard_footstep", gain=0.3}
|
{name="default_wood_footstep", gain=0.5}
|
||||||
|
table.dug = table.dug or
|
||||||
|
{name="default_wood_footstep", gain=1.0}
|
||||||
default.node_sound_defaults(table)
|
default.node_sound_defaults(table)
|
||||||
return table
|
return table
|
||||||
end
|
end
|
||||||
@ -56,11 +62,13 @@ end
|
|||||||
function default.node_sound_leaves_defaults(table)
|
function default.node_sound_leaves_defaults(table)
|
||||||
table = table or {}
|
table = table or {}
|
||||||
table.footstep = table.footstep or
|
table.footstep = table.footstep or
|
||||||
{name="default_grass_footstep", gain=0.25}
|
{name="default_grass_footstep", gain=0.35}
|
||||||
|
table.dug = table.dug or
|
||||||
|
{name="default_grass_footstep", gain=0.85}
|
||||||
table.dig = table.dig or
|
table.dig = table.dig or
|
||||||
{name="default_dig_crumbly", gain=0.4}
|
{name="default_dig_crumbly", gain=0.4}
|
||||||
table.dug = table.dug or
|
table.place = table.place or
|
||||||
{name="", gain=1.0}
|
{name="default_place_node", gain=1.0}
|
||||||
default.node_sound_defaults(table)
|
default.node_sound_defaults(table)
|
||||||
return table
|
return table
|
||||||
end
|
end
|
||||||
@ -68,7 +76,7 @@ end
|
|||||||
function default.node_sound_glass_defaults(table)
|
function default.node_sound_glass_defaults(table)
|
||||||
table = table or {}
|
table = table or {}
|
||||||
table.footstep = table.footstep or
|
table.footstep = table.footstep or
|
||||||
{name="default_hard_footstep", gain=0.25}
|
{name="default_glass_footstep", gain=0.5}
|
||||||
table.dug = table.dug or
|
table.dug = table.dug or
|
||||||
{name="default_break_glass", gain=1.0}
|
{name="default_break_glass", gain=1.0}
|
||||||
default.node_sound_defaults(table)
|
default.node_sound_defaults(table)
|
||||||
@ -118,16 +126,69 @@ function on_punchnode(p, node)
|
|||||||
end
|
end
|
||||||
minetest.register_on_punchnode(on_punchnode)
|
minetest.register_on_punchnode(on_punchnode)
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Grow trees
|
||||||
|
--
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {"default:sapling"},
|
||||||
|
interval = 10,
|
||||||
|
chance = 50,
|
||||||
|
action = function(pos, node)
|
||||||
|
local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
|
||||||
|
local is_soil = minetest.get_item_group(nu, "soil")
|
||||||
|
if is_soil == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.log("action", "A sapling grows into a tree at "..minetest.pos_to_string(pos))
|
||||||
|
local vm = minetest.get_voxel_manip()
|
||||||
|
local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
|
||||||
|
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
|
||||||
|
local data = vm:get_data()
|
||||||
|
default.grow_tree(data, a, pos, math.random(1, 4) == 1, math.random(1,100000))
|
||||||
|
vm:set_data(data)
|
||||||
|
vm:write_to_map(data)
|
||||||
|
vm:update_map()
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {"default:junglesapling"},
|
||||||
|
interval = 10,
|
||||||
|
chance = 50,
|
||||||
|
action = function(pos, node)
|
||||||
|
local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
|
||||||
|
local is_soil = minetest.get_item_group(nu, "soil")
|
||||||
|
if is_soil == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.log("action", "A jungle sapling grows into a tree at "..minetest.pos_to_string(pos))
|
||||||
|
local vm = minetest.get_voxel_manip()
|
||||||
|
local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y-1, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
|
||||||
|
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
|
||||||
|
local data = vm:get_data()
|
||||||
|
default.grow_jungletree(data, a, pos, math.random(1,100000))
|
||||||
|
vm:set_data(data)
|
||||||
|
vm:write_to_map(data)
|
||||||
|
vm:update_map()
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Lavacooling
|
-- Lavacooling
|
||||||
--
|
--
|
||||||
|
|
||||||
default.cool_lava_source = function(pos)
|
default.cool_lava_source = function(pos)
|
||||||
minetest.set_node(pos, {name="default:obsidian"})
|
minetest.set_node(pos, {name="default:obsidian"})
|
||||||
|
minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
|
||||||
end
|
end
|
||||||
|
|
||||||
default.cool_lava_flowing = function(pos)
|
default.cool_lava_flowing = function(pos)
|
||||||
minetest.set_node(pos, {name="default:stone"})
|
minetest.set_node(pos, {name="default:stone"})
|
||||||
|
minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
@ -303,3 +364,4 @@ minetest.register_abm({
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -19,3 +19,4 @@ dofile(minetest.get_modpath("default").."/craftitems.lua")
|
|||||||
dofile(minetest.get_modpath("default").."/crafting.lua")
|
dofile(minetest.get_modpath("default").."/crafting.lua")
|
||||||
dofile(minetest.get_modpath("default").."/mapgen.lua")
|
dofile(minetest.get_modpath("default").."/mapgen.lua")
|
||||||
dofile(minetest.get_modpath("default").."/player.lua")
|
dofile(minetest.get_modpath("default").."/player.lua")
|
||||||
|
dofile(minetest.get_modpath("default").."/trees.lua")
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
-- Aliases for map generator outputs
|
-- Aliases for map generator outputs
|
||||||
--
|
--
|
||||||
|
|
||||||
minetest.register_alias("mapgen_air", "air")
|
|
||||||
minetest.register_alias("mapgen_stone", "default:stone")
|
minetest.register_alias("mapgen_stone", "default:stone")
|
||||||
minetest.register_alias("mapgen_tree", "default:tree")
|
minetest.register_alias("mapgen_tree", "default:tree")
|
||||||
minetest.register_alias("mapgen_leaves", "default:leaves")
|
minetest.register_alias("mapgen_leaves", "default:leaves")
|
||||||
@ -26,6 +25,7 @@ minetest.register_alias("mapgen_stone_with_iron", "default:stone_with_iron")
|
|||||||
minetest.register_alias("mapgen_mese", "default:mese")
|
minetest.register_alias("mapgen_mese", "default:mese")
|
||||||
minetest.register_alias("mapgen_desert_sand", "default:desert_sand")
|
minetest.register_alias("mapgen_desert_sand", "default:desert_sand")
|
||||||
minetest.register_alias("mapgen_desert_stone", "default:desert_stone")
|
minetest.register_alias("mapgen_desert_stone", "default:desert_stone")
|
||||||
|
minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Ore generation
|
-- Ore generation
|
||||||
@ -270,6 +270,17 @@ if minetest.setting_get("mg_name") == "indev" then
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
minetest.register_ore({
|
||||||
|
ore_type = "scatter",
|
||||||
|
ore = "default:clay",
|
||||||
|
wherein = "default:sand",
|
||||||
|
clust_scarcity = 15*15*15,
|
||||||
|
clust_num_ores = 64,
|
||||||
|
clust_size = 5,
|
||||||
|
height_max = 0,
|
||||||
|
height_min = -10,
|
||||||
|
})
|
||||||
|
|
||||||
function default.generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max)
|
function default.generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max)
|
||||||
minetest.log('action', "WARNING: default.generate_ore is deprecated")
|
minetest.log('action', "WARNING: default.generate_ore is deprecated")
|
||||||
|
|
||||||
@ -351,7 +362,7 @@ function default.make_nyancat(pos, facedir, length)
|
|||||||
elseif facedir == 3 then
|
elseif facedir == 3 then
|
||||||
tailvec.x = -1
|
tailvec.x = -1
|
||||||
else
|
else
|
||||||
print("default.make_nyancat(): Invalid facedir: "+dump(facedir))
|
--print("default.make_nyancat(): Invalid facedir: "+dump(facedir))
|
||||||
facedir = 0
|
facedir = 0
|
||||||
tailvec.z = 1
|
tailvec.z = 1
|
||||||
end
|
end
|
||||||
@ -360,7 +371,7 @@ function default.make_nyancat(pos, facedir, length)
|
|||||||
for i=1,length do
|
for i=1,length do
|
||||||
p.x = p.x + tailvec.x
|
p.x = p.x + tailvec.x
|
||||||
p.z = p.z + tailvec.z
|
p.z = p.z + tailvec.z
|
||||||
minetest.set_node(p, {name="default:nyancat_rainbow"})
|
minetest.set_node(p, {name="default:nyancat_rainbow", param2=facedir})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -388,41 +399,6 @@ end
|
|||||||
|
|
||||||
minetest.register_on_generated(function(minp, maxp, seed)
|
minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
if maxp.y >= 2 and minp.y <= 0 then
|
if maxp.y >= 2 and minp.y <= 0 then
|
||||||
-- Generate clay
|
|
||||||
-- Assume X and Z lengths are equal
|
|
||||||
local divlen = 4
|
|
||||||
local divs = (maxp.x-minp.x)/divlen+1;
|
|
||||||
for divx=0+1,divs-1-1 do
|
|
||||||
for divz=0+1,divs-1-1 do
|
|
||||||
local cx = minp.x + math.floor((divx+0.5)*divlen)
|
|
||||||
local cz = minp.z + math.floor((divz+0.5)*divlen)
|
|
||||||
if minetest.get_node({x=cx,y=1,z=cz}).name == "default:water_source" and
|
|
||||||
minetest.get_node({x=cx,y=0,z=cz}).name == "default:sand" then
|
|
||||||
local is_shallow = true
|
|
||||||
local num_water_around = 0
|
|
||||||
if minetest.get_node({x=cx-divlen*2,y=1,z=cz+0}).name == "default:water_source" then
|
|
||||||
num_water_around = num_water_around + 1 end
|
|
||||||
if minetest.get_node({x=cx+divlen*2,y=1,z=cz+0}).name == "default:water_source" then
|
|
||||||
num_water_around = num_water_around + 1 end
|
|
||||||
if minetest.get_node({x=cx+0,y=1,z=cz-divlen*2}).name == "default:water_source" then
|
|
||||||
num_water_around = num_water_around + 1 end
|
|
||||||
if minetest.get_node({x=cx+0,y=1,z=cz+divlen*2}).name == "default:water_source" then
|
|
||||||
num_water_around = num_water_around + 1 end
|
|
||||||
if num_water_around >= 2 then
|
|
||||||
is_shallow = false
|
|
||||||
end
|
|
||||||
if is_shallow then
|
|
||||||
for x1=-divlen,divlen do
|
|
||||||
for z1=-divlen,divlen do
|
|
||||||
if minetest.get_node({x=cx+x1,y=0,z=cz+z1}).name == "default:sand" then
|
|
||||||
minetest.set_node({x=cx+x1,y=0,z=cz+z1}, {name="default:clay"})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Generate papyrus
|
-- Generate papyrus
|
||||||
local perlin1 = minetest.get_perlin(354, 3, 0.7, 100)
|
local perlin1 = minetest.get_perlin(354, 3, 0.7, 100)
|
||||||
-- Assume X and Z lengths are equal
|
-- Assume X and Z lengths are equal
|
||||||
|
@ -48,7 +48,7 @@ minetest.register_node("default:stone_with_copper", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:stone_with_mese", {
|
minetest.register_node("default:stone_with_mese", {
|
||||||
description = "Mese Crystals in Stone",
|
description = "Mese Ore",
|
||||||
tiles = {"default_stone.png^default_mineral_mese.png"},
|
tiles = {"default_stone.png^default_mineral_mese.png"},
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {cracky=1},
|
groups = {cracky=1},
|
||||||
@ -66,7 +66,7 @@ minetest.register_node("default:stone_with_gold", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:stone_with_diamond", {
|
minetest.register_node("default:stone_with_diamond", {
|
||||||
description = "Diamonds in Stone",
|
description = "Diamond Ore",
|
||||||
tiles = {"default_stone.png^default_mineral_diamond.png"},
|
tiles = {"default_stone.png^default_mineral_diamond.png"},
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {cracky=1},
|
groups = {cracky=1},
|
||||||
@ -95,7 +95,7 @@ minetest.register_node("default:dirt_with_grass", {
|
|||||||
groups = {crumbly=3,soil=1},
|
groups = {crumbly=3,soil=1},
|
||||||
drop = 'default:dirt',
|
drop = 'default:dirt',
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_grass_footstep", gain=0.4},
|
footstep = {name="default_grass_footstep", gain=0.25},
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ minetest.register_node("default:dirt_with_grass_footsteps", {
|
|||||||
groups = {crumbly=3,soil=1,not_in_creative_inventory=1},
|
groups = {crumbly=3,soil=1,not_in_creative_inventory=1},
|
||||||
drop = 'default:dirt',
|
drop = 'default:dirt',
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_grass_footstep", gain=0.4},
|
footstep = {name="default_grass_footstep", gain=0.25},
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -117,10 +117,9 @@ minetest.register_node("default:dirt_with_snow", {
|
|||||||
groups = {crumbly=3},
|
groups = {crumbly=3},
|
||||||
drop = 'default:dirt',
|
drop = 'default:dirt',
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_grass_footstep", gain=0.4},
|
footstep = {name="default_snow_footstep", gain=0.25},
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
minetest.register_alias("dirt_with_snow", "default:dirt_with_snow")
|
|
||||||
|
|
||||||
minetest.register_node("default:dirt", {
|
minetest.register_node("default:dirt", {
|
||||||
description = "Dirt",
|
description = "Dirt",
|
||||||
@ -130,6 +129,42 @@ minetest.register_node("default:dirt", {
|
|||||||
sounds = default.node_sound_dirt_defaults(),
|
sounds = default.node_sound_dirt_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {"default:dirt"},
|
||||||
|
interval = 2,
|
||||||
|
chance = 200,
|
||||||
|
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 nodedef and (nodedef.sunlight_propagates or nodedef.paramtype == "light")
|
||||||
|
and nodedef.liquidtype == "none"
|
||||||
|
and (minetest.get_node_light(above) or 0) >= 13 then
|
||||||
|
if name == "default:snow" or name == "default:snowblock" then
|
||||||
|
minetest.set_node(pos, {name = "default:dirt_with_snow"})
|
||||||
|
else
|
||||||
|
minetest.set_node(pos, {name = "default:dirt_with_grass"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {"default:dirt_with_grass"},
|
||||||
|
interval = 2,
|
||||||
|
chance = 20,
|
||||||
|
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 not ((nodedef.sunlight_propagates or nodedef.paramtype == "light")
|
||||||
|
and nodedef.liquidtype == "none") then
|
||||||
|
minetest.set_node(pos, {name = "default:dirt"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_node("default:sand", {
|
minetest.register_node("default:sand", {
|
||||||
description = "Sand",
|
description = "Sand",
|
||||||
tiles = {"default_sand.png"},
|
tiles = {"default_sand.png"},
|
||||||
@ -152,7 +187,8 @@ minetest.register_node("default:gravel", {
|
|||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {crumbly=2, falling_node=1},
|
groups = {crumbly=2, falling_node=1},
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_gravel_footstep", gain=0.45},
|
footstep = {name="default_gravel_footstep", gain=0.5},
|
||||||
|
dug = {name="default_gravel_footstep", gain=1.0},
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -178,9 +214,7 @@ minetest.register_node("default:clay", {
|
|||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {crumbly=3},
|
groups = {crumbly=3},
|
||||||
drop = 'default:clay_lump 4',
|
drop = 'default:clay_lump 4',
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults(),
|
||||||
footstep = "",
|
|
||||||
}),
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:brick", {
|
minetest.register_node("default:brick", {
|
||||||
@ -193,15 +227,19 @@ minetest.register_node("default:brick", {
|
|||||||
minetest.register_node("default:tree", {
|
minetest.register_node("default:tree", {
|
||||||
description = "Tree",
|
description = "Tree",
|
||||||
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
|
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_place = minetest.rotate_node
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:jungletree", {
|
minetest.register_node("default:jungletree", {
|
||||||
description = "Jungle Tree",
|
description = "Jungle Tree",
|
||||||
tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
|
tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_place = minetest.rotate_node
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:junglewood", {
|
minetest.register_node("default:junglewood", {
|
||||||
@ -250,11 +288,8 @@ minetest.register_node("default:junglesapling", {
|
|||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||||
},
|
},
|
||||||
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
|
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
})
|
})
|
||||||
-- aliases for tree growing abm in content_abm.cpp
|
|
||||||
minetest.register_alias("sapling", "default:sapling")
|
|
||||||
minetest.register_alias("junglesapling", "default:junglesapling")
|
|
||||||
|
|
||||||
minetest.register_node("default:junglegrass", {
|
minetest.register_node("default:junglegrass", {
|
||||||
description = "Jungle Grass",
|
description = "Jungle Grass",
|
||||||
@ -303,9 +338,11 @@ minetest.register_node("default:leaves", {
|
|||||||
minetest.register_node("default:cactus", {
|
minetest.register_node("default:cactus", {
|
||||||
description = "Cactus",
|
description = "Cactus",
|
||||||
tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
|
tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {snappy=1,choppy=3,flammable=2},
|
groups = {snappy=1,choppy=3,flammable=2},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_place = minetest.rotate_node
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:papyrus", {
|
minetest.register_node("default:papyrus", {
|
||||||
@ -428,17 +465,20 @@ minetest.register_node("default:water_flowing", {
|
|||||||
},
|
},
|
||||||
alpha = WATER_ALPHA,
|
alpha = WATER_ALPHA,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
paramtype2 = "flowingliquid",
|
||||||
walkable = false,
|
walkable = false,
|
||||||
pointable = false,
|
pointable = false,
|
||||||
diggable = false,
|
diggable = false,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
drop = "",
|
drop = "",
|
||||||
|
drowning = 1,
|
||||||
liquidtype = "flowing",
|
liquidtype = "flowing",
|
||||||
liquid_alternative_flowing = "default:water_flowing",
|
liquid_alternative_flowing = "default:water_flowing",
|
||||||
liquid_alternative_source = "default:water_source",
|
liquid_alternative_source = "default:water_source",
|
||||||
liquid_viscosity = WATER_VISC,
|
liquid_viscosity = WATER_VISC,
|
||||||
|
freezemelt = "default:snow",
|
||||||
post_effect_color = {a=64, r=100, g=100, b=200},
|
post_effect_color = {a=64, r=100, g=100, b=200},
|
||||||
groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
|
groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1, freezes=1, melt_around=1},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:water_source", {
|
minetest.register_node("default:water_source", {
|
||||||
@ -463,12 +503,14 @@ minetest.register_node("default:water_source", {
|
|||||||
diggable = false,
|
diggable = false,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
drop = "",
|
drop = "",
|
||||||
|
drowning = 1,
|
||||||
liquidtype = "source",
|
liquidtype = "source",
|
||||||
liquid_alternative_flowing = "default:water_flowing",
|
liquid_alternative_flowing = "default:water_flowing",
|
||||||
liquid_alternative_source = "default:water_source",
|
liquid_alternative_source = "default:water_source",
|
||||||
liquid_viscosity = WATER_VISC,
|
liquid_viscosity = WATER_VISC,
|
||||||
|
freezemelt = "default:ice",
|
||||||
post_effect_color = {a=64, r=100, g=100, b=200},
|
post_effect_color = {a=64, r=100, g=100, b=200},
|
||||||
groups = {water=3, liquid=3, puts_out_fire=1},
|
groups = {water=3, liquid=3, puts_out_fire=1, freezes=1},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:lava_flowing", {
|
minetest.register_node("default:lava_flowing", {
|
||||||
@ -489,12 +531,14 @@ minetest.register_node("default:lava_flowing", {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
paramtype2 = "flowingliquid",
|
||||||
light_source = LIGHT_MAX - 1,
|
light_source = LIGHT_MAX - 1,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
pointable = false,
|
pointable = false,
|
||||||
diggable = false,
|
diggable = false,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
drop = "",
|
drop = "",
|
||||||
|
drowning = 1,
|
||||||
liquidtype = "flowing",
|
liquidtype = "flowing",
|
||||||
liquid_alternative_flowing = "default:lava_flowing",
|
liquid_alternative_flowing = "default:lava_flowing",
|
||||||
liquid_alternative_source = "default:lava_source",
|
liquid_alternative_source = "default:lava_source",
|
||||||
@ -527,6 +571,7 @@ minetest.register_node("default:lava_source", {
|
|||||||
diggable = false,
|
diggable = false,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
drop = "",
|
drop = "",
|
||||||
|
drowning = 1,
|
||||||
liquidtype = "source",
|
liquidtype = "source",
|
||||||
liquid_alternative_flowing = "default:lava_flowing",
|
liquid_alternative_flowing = "default:lava_flowing",
|
||||||
liquid_alternative_source = "default:lava_source",
|
liquid_alternative_source = "default:lava_source",
|
||||||
@ -559,7 +604,7 @@ minetest.register_node("default:torch", {
|
|||||||
wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
|
wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
|
||||||
wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
|
wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
|
||||||
},
|
},
|
||||||
groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1},
|
groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1,hot=2},
|
||||||
legacy_wallmounted = true,
|
legacy_wallmounted = true,
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
})
|
})
|
||||||
@ -593,13 +638,28 @@ minetest.register_node("default:sign_wall", {
|
|||||||
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
|
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
fields.text = fields.text or ""
|
fields.text = fields.text or ""
|
||||||
print((sender:get_player_name() or "").." wrote \""..fields.text..
|
minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
|
||||||
"\" to sign at "..minetest.pos_to_string(pos))
|
"\" to sign at "..minetest.pos_to_string(pos))
|
||||||
meta:set_string("text", fields.text)
|
meta:set_string("text", fields.text)
|
||||||
meta:set_string("infotext", '"'..fields.text..'"')
|
meta:set_string("infotext", '"'..fields.text..'"')
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
default.chest_formspec =
|
||||||
|
"size[8,9]"..
|
||||||
|
"list[current_name;main;0,0;8,4;]"..
|
||||||
|
"list[current_player;main;0,5;8,4;]"
|
||||||
|
|
||||||
|
function default.get_locked_chest_formspec(pos)
|
||||||
|
local spos = pos.x .. "," .. pos.y .. "," ..pos.z
|
||||||
|
local formspec =
|
||||||
|
"size[8,9]"..
|
||||||
|
"list[nodemeta:".. spos .. ";main;0,0;8,4;]"..
|
||||||
|
"list[current_player;main;0,5;8,4;]"
|
||||||
|
return formspec
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node("default:chest", {
|
minetest.register_node("default:chest", {
|
||||||
description = "Chest",
|
description = "Chest",
|
||||||
tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
|
tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
|
||||||
@ -610,10 +670,7 @@ minetest.register_node("default:chest", {
|
|||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("formspec",
|
meta:set_string("formspec",default.chest_formspec)
|
||||||
"size[8,9]"..
|
|
||||||
"list[current_name;main;0,0;8,4;]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]")
|
|
||||||
meta:set_string("infotext", "Chest")
|
meta:set_string("infotext", "Chest")
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("main", 8*4)
|
inv:set_size("main", 8*4)
|
||||||
@ -718,15 +775,27 @@ minetest.register_node("default:chest_locked", {
|
|||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if has_locked_chest_privilege(meta, clicker) then
|
if has_locked_chest_privilege(meta, clicker) then
|
||||||
local pos = pos.x .. "," .. pos.y .. "," ..pos.z
|
minetest.show_formspec(
|
||||||
minetest.show_formspec(clicker:get_player_name(), "default:chest_locked",
|
clicker:get_player_name(),
|
||||||
"size[8,9]"..
|
"default:chest_locked",
|
||||||
"list[nodemeta:".. pos .. ";main;0,0;8,4;]"..
|
default.get_locked_chest_formspec(pos)
|
||||||
"list[current_player;main;0,5;8,4;]")
|
)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function default.get_furnace_active_formspec(pos, percent)
|
||||||
|
local formspec =
|
||||||
|
"size[8,9]"..
|
||||||
|
"image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||||
|
(100-percent)..":default_furnace_fire_fg.png]"..
|
||||||
|
"list[current_name;fuel;2,3;1,1;]"..
|
||||||
|
"list[current_name;src;2,1;1,1;]"..
|
||||||
|
"list[current_name;dst;5,1;2,2;]"..
|
||||||
|
"list[current_player;main;0,5;8,4;]"
|
||||||
|
return formspec
|
||||||
|
end
|
||||||
|
|
||||||
default.furnace_inactive_formspec =
|
default.furnace_inactive_formspec =
|
||||||
"size[8,9]"..
|
"size[8,9]"..
|
||||||
"image[2,2;1,1;default_furnace_fire_bg.png]"..
|
"image[2,2;1,1;default_furnace_fire_bg.png]"..
|
||||||
@ -810,7 +879,7 @@ minetest.register_node("default:furnace_active", {
|
|||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
light_source = 8,
|
light_source = 8,
|
||||||
drop = "default:furnace",
|
drop = "default:furnace",
|
||||||
groups = {cracky=2, not_in_creative_inventory=1},
|
groups = {cracky=2, not_in_creative_inventory=1,hot=1},
|
||||||
legacy_facedir_simple = true,
|
legacy_facedir_simple = true,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
@ -928,7 +997,7 @@ minetest.register_abm({
|
|||||||
-- take stuff from "src" list
|
-- take stuff from "src" list
|
||||||
inv:set_stack("src", 1, aftercooked.items[1])
|
inv:set_stack("src", 1, aftercooked.items[1])
|
||||||
else
|
else
|
||||||
print("Could not insert '"..cooked.item:to_string().."'")
|
--print("Could not insert '"..cooked.item:to_string().."'")
|
||||||
end
|
end
|
||||||
meta:set_string("src_time", 0)
|
meta:set_string("src_time", 0)
|
||||||
end
|
end
|
||||||
@ -939,14 +1008,7 @@ minetest.register_abm({
|
|||||||
meta:get_float("fuel_totaltime") * 100)
|
meta:get_float("fuel_totaltime") * 100)
|
||||||
meta:set_string("infotext","Furnace active: "..percent.."%")
|
meta:set_string("infotext","Furnace active: "..percent.."%")
|
||||||
hacky_swap_node(pos,"default:furnace_active")
|
hacky_swap_node(pos,"default:furnace_active")
|
||||||
meta:set_string("formspec",
|
meta:set_string("formspec",default.get_furnace_active_formspec(pos, percent))
|
||||||
"size[8,9]"..
|
|
||||||
"image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
|
||||||
(100-percent)..":default_furnace_fire_fg.png]"..
|
|
||||||
"list[current_name;fuel;2,3;1,1;]"..
|
|
||||||
"list[current_name;src;2,1;1,1;]"..
|
|
||||||
"list[current_name;dst;5,1;2,2;]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]")
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1089,7 +1151,9 @@ minetest.register_node("default:nyancat", {
|
|||||||
|
|
||||||
minetest.register_node("default:nyancat_rainbow", {
|
minetest.register_node("default:nyancat_rainbow", {
|
||||||
description = "Nyan Cat Rainbow",
|
description = "Nyan Cat Rainbow",
|
||||||
tiles = {"default_nc_rb.png"},
|
tiles = {"default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
|
||||||
|
"default_nc_rb.png", "default_nc_rb.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
groups = {cracky=2},
|
groups = {cracky=2},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
})
|
})
|
||||||
@ -1108,7 +1172,7 @@ minetest.register_node("default:sapling", {
|
|||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||||
},
|
},
|
||||||
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
|
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:apple", {
|
minetest.register_node("default:apple", {
|
||||||
@ -1126,7 +1190,7 @@ minetest.register_node("default:apple", {
|
|||||||
},
|
},
|
||||||
groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=3,leafdecay_drop=1},
|
groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=3,leafdecay_drop=1},
|
||||||
on_use = minetest.item_eat(1),
|
on_use = minetest.item_eat(1),
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
after_place_node = function(pos, placer, itemstack)
|
after_place_node = function(pos, placer, itemstack)
|
||||||
if placer:is_player() then
|
if placer:is_player() then
|
||||||
minetest.set_node(pos, {name="default:apple", param2=1})
|
minetest.set_node(pos, {name="default:apple", param2=1})
|
||||||
@ -1143,6 +1207,7 @@ minetest.register_node("default:dry_shrub", {
|
|||||||
wield_image = "default_dry_shrub.png",
|
wield_image = "default_dry_shrub.png",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
walkable = false,
|
walkable = false,
|
||||||
|
buildable_to = true,
|
||||||
groups = {snappy=3,flammable=3,attached_node=1},
|
groups = {snappy=3,flammable=3,attached_node=1},
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
selection_box = {
|
selection_box = {
|
||||||
@ -1255,7 +1320,8 @@ minetest.register_node("default:ice", {
|
|||||||
tiles = {"default_ice.png"},
|
tiles = {"default_ice.png"},
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
groups = {cracky=3},
|
freezemelt = "default:water_source",
|
||||||
|
groups = {cracky=3, melts=1},
|
||||||
sounds = default.node_sound_glass_defaults(),
|
sounds = default.node_sound_glass_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -1267,16 +1333,19 @@ minetest.register_node("default:snow", {
|
|||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
|
leveled = 7,
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
|
freezemelt = "default:water_flowing",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "leveled",
|
||||||
fixed = {
|
fixed = {
|
||||||
{-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5},
|
{-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
groups = {crumbly=3,falling_node=1},
|
groups = {crumbly=3,falling_node=1, melts=1, float=1},
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_grass_footstep", gain=0.4},
|
footstep = {name="default_snow_footstep", gain=0.25},
|
||||||
|
dug = {name="default_snow_footstep", gain=0.75},
|
||||||
}),
|
}),
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
pos.y = pos.y - 1
|
pos.y = pos.y - 1
|
||||||
@ -1291,8 +1360,10 @@ minetest.register_node("default:snowblock", {
|
|||||||
description = "Snow Block",
|
description = "Snow Block",
|
||||||
tiles = {"default_snow.png"},
|
tiles = {"default_snow.png"},
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {crumbly=3},
|
freezemelt = "default:water_source",
|
||||||
|
groups = {crumbly=3, melts=1},
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_grass_footstep", gain=0.4},
|
footstep = {name="default_snow_footstep", gain=0.25},
|
||||||
|
dug = {name="default_snow_footstep", gain=0.75},
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
@ -1,132 +1,190 @@
|
|||||||
-- Minetest 0.4 mod: player
|
-- Minetest 0.4 mod: player
|
||||||
-- See README.txt for licensing and other information.
|
-- See README.txt for licensing and other information.
|
||||||
|
|
||||||
--
|
--[[
|
||||||
-- Start of configuration area:
|
|
||||||
--
|
|
||||||
|
|
||||||
-- Player animation speed
|
API
|
||||||
animation_speed = 30
|
---
|
||||||
|
|
||||||
|
default.player_register_model(name, def)
|
||||||
|
^ Register a new model to be used by players.
|
||||||
|
^ <name> is the model filename such as "character.x", "foo.b3d", etc.
|
||||||
|
^ See Model Definition below for format of <def>.
|
||||||
|
|
||||||
|
default.registered_player_models[name]
|
||||||
|
^ See Model Definition below for format.
|
||||||
|
|
||||||
|
default.player_set_model(player, model_name)
|
||||||
|
^ <player> is a PlayerRef.
|
||||||
|
^ <model_name> is a model registered with player_register_model.
|
||||||
|
|
||||||
|
default.player_set_animation(player, anim_name [, speed])
|
||||||
|
^ <player> is a PlayerRef.
|
||||||
|
^ <anim_name> is the name of the animation.
|
||||||
|
^ <speed> is in frames per second. If nil, default from the model is used
|
||||||
|
|
||||||
|
default.player_set_textures(player, textures)
|
||||||
|
^ <player> is a PlayerRef.
|
||||||
|
^ <textures> is an array of textures
|
||||||
|
^ If <textures> is nil, the default textures from the model def are used
|
||||||
|
|
||||||
|
default.player_get_animation(player)
|
||||||
|
^ <player> is a PlayerRef.
|
||||||
|
^ Returns a table containing fields "model", "textures" and "animation".
|
||||||
|
^ Any of the fields of the returned table may be nil.
|
||||||
|
|
||||||
|
Model Definition
|
||||||
|
----------------
|
||||||
|
|
||||||
|
model_def = {
|
||||||
|
animation_speed = 30, -- Default animation speed, in FPS.
|
||||||
|
textures = {"character.png", }, -- Default array of textures.
|
||||||
|
visual_size = {x=1, y=1,}, -- Used to scale the model.
|
||||||
|
animations = {
|
||||||
|
-- <anim_name> = { x=<start_frame>, y=<end_frame>, },
|
||||||
|
foo = { x= 0, y=19, },
|
||||||
|
bar = { x=20, y=39, },
|
||||||
|
-- ...
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
]]
|
||||||
|
|
||||||
-- Player animation blending
|
-- Player animation blending
|
||||||
-- Note: This is currently broken due to a bug in Irrlicht, leave at 0
|
-- Note: This is currently broken due to a bug in Irrlicht, leave at 0
|
||||||
animation_blend = 0
|
local animation_blend = 0
|
||||||
|
|
||||||
-- Default player appearance
|
default.registered_player_models = { }
|
||||||
default_model = "character.x"
|
|
||||||
default_textures = {"character.png", }
|
|
||||||
|
|
||||||
-- Frame ranges for each player model
|
-- Local for speed.
|
||||||
function player_get_animations(model)
|
local models = default.registered_player_models
|
||||||
if model == "character.x" then
|
|
||||||
return {
|
function default.player_register_model(name, def)
|
||||||
stand_START = 0,
|
models[name] = def
|
||||||
stand_END = 79,
|
|
||||||
sit_START = 81,
|
|
||||||
sit_END = 160,
|
|
||||||
lay_START = 162,
|
|
||||||
lay_END = 166,
|
|
||||||
walk_START = 168,
|
|
||||||
walk_END = 187,
|
|
||||||
mine_START = 189,
|
|
||||||
mine_END = 198,
|
|
||||||
walk_mine_START = 200,
|
|
||||||
walk_mine_END = 219
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--
|
-- Default player appearance
|
||||||
-- End of configuration area.
|
default.player_register_model("character.x", {
|
||||||
--
|
animation_speed = 30,
|
||||||
|
textures = {"character.png", },
|
||||||
|
animations = {
|
||||||
|
-- Standard animations.
|
||||||
|
stand = { x= 0, y= 79, },
|
||||||
|
lay = { x=162, y=166, },
|
||||||
|
walk = { x=168, y=187, },
|
||||||
|
mine = { x=189, y=198, },
|
||||||
|
walk_mine = { x=200, y=219, },
|
||||||
|
-- Extra animations (not currently used by the game).
|
||||||
|
sit = { x= 81, y=160, },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
-- Player stats and animations
|
-- Player stats and animations
|
||||||
local player_model = {}
|
local player_model = {}
|
||||||
|
local player_textures = {}
|
||||||
local player_anim = {}
|
local player_anim = {}
|
||||||
local player_sneak = {}
|
local player_sneak = {}
|
||||||
local ANIM_STAND = 1
|
|
||||||
local ANIM_SIT = 2
|
function default.player_get_animation(player)
|
||||||
local ANIM_LAY = 3
|
local name = player:get_player_name()
|
||||||
local ANIM_WALK = 4
|
return {
|
||||||
local ANIM_WALK_MINE = 5
|
model = player_model[name],
|
||||||
local ANIM_MINE = 6
|
textures = player_textures[name],
|
||||||
|
animation = player_anim[name],
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
-- Called when a player's appearance needs to be updated
|
-- Called when a player's appearance needs to be updated
|
||||||
function player_update_visuals(pl)
|
function default.player_set_model(player, model_name)
|
||||||
local name = pl:get_player_name()
|
local name = player:get_player_name()
|
||||||
|
local model = models[model_name]
|
||||||
|
if model then
|
||||||
|
if player_model[name] == model_name then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
player:set_properties({
|
||||||
|
mesh = model_name,
|
||||||
|
textures = player_textures[name] or model.textures,
|
||||||
|
visual = "mesh",
|
||||||
|
visual_size = model.visual_size or {x=1, y=1},
|
||||||
|
})
|
||||||
|
default.player_set_animation(player, "stand")
|
||||||
|
else
|
||||||
|
player:set_properties({
|
||||||
|
textures = { "player.png", "player_back.png", },
|
||||||
|
visual = "upright_sprite",
|
||||||
|
})
|
||||||
|
end
|
||||||
|
player_model[name] = model_name
|
||||||
|
end
|
||||||
|
|
||||||
player_model[name] = default_model
|
function default.player_set_textures(player, textures)
|
||||||
player_anim[name] = 0 -- Animation will be set further below immediately
|
local name = player:get_player_name()
|
||||||
player_sneak[name] = false
|
player_textures[name] = textures
|
||||||
prop = {
|
player:set_properties({textures = textures,})
|
||||||
mesh = default_model,
|
end
|
||||||
textures = default_textures,
|
|
||||||
visual = "mesh",
|
function default.player_set_animation(player, anim_name, speed)
|
||||||
visual_size = {x=1, y=1},
|
local name = player:get_player_name()
|
||||||
}
|
if player_anim[name] == anim_name then
|
||||||
pl:set_properties(prop)
|
return
|
||||||
|
end
|
||||||
|
local model = player_model[name] and models[player_model[name]]
|
||||||
|
if not (model and model.animations[anim_name]) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local anim = model.animations[anim_name]
|
||||||
|
player_anim[name] = anim_name
|
||||||
|
player:set_animation(anim, speed or model.animation_speed, animation_blend)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Update appearance when the player joins
|
-- Update appearance when the player joins
|
||||||
minetest.register_on_joinplayer(player_update_visuals)
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
default.player_set_model(player, "character.x")
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Localize for better performance.
|
||||||
|
local player_set_animation = default.player_set_animation
|
||||||
|
|
||||||
-- Check each player and apply animations
|
-- Check each player and apply animations
|
||||||
function player_step(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
for _, pl in pairs(minetest.get_connected_players()) do
|
for _, player in pairs(minetest.get_connected_players()) do
|
||||||
local name = pl:get_player_name()
|
local name = player:get_player_name()
|
||||||
local anim = player_get_animations(player_model[name])
|
local model_name = player_model[name]
|
||||||
local controls = pl:get_player_control()
|
local model = model_name and models[model_name]
|
||||||
local walking = false
|
if model then
|
||||||
local animation_speed_mod = animation_speed
|
local controls = player:get_player_control()
|
||||||
|
local walking = false
|
||||||
|
local animation_speed_mod = model.animation_speed or 30
|
||||||
|
|
||||||
-- Determine if the player is walking
|
-- Determine if the player is walking
|
||||||
if controls.up or controls.down or controls.left or controls.right then
|
if controls.up or controls.down or controls.left or controls.right then
|
||||||
walking = true
|
walking = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Determine if the player is sneaking, and reduce animation speed if so
|
-- Determine if the player is sneaking, and reduce animation speed if so
|
||||||
if controls.sneak and pl:get_hp() ~= 0 and (walking or controls.LMB) then
|
if controls.sneak then
|
||||||
animation_speed_mod = animation_speed_mod / 2
|
animation_speed_mod = animation_speed_mod / 2
|
||||||
-- Refresh player animation below if sneak state changed
|
|
||||||
if not player_sneak[name] then
|
|
||||||
player_anim[name] = 0
|
|
||||||
player_sneak[name] = true
|
|
||||||
end
|
end
|
||||||
else
|
|
||||||
-- Refresh player animation below if sneak state changed
|
|
||||||
if player_sneak[name] then
|
|
||||||
player_anim[name] = 0
|
|
||||||
player_sneak[name] = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Apply animations based on what the player is doing
|
-- Apply animations based on what the player is doing
|
||||||
if pl:get_hp() == 0 then
|
if player:get_hp() == 0 then
|
||||||
if player_anim[name] ~= ANIM_LAY then
|
player_set_animation(player, "lay")
|
||||||
pl:set_animation({x=anim.lay_START, y=anim.lay_END}, animation_speed_mod, animation_blend)
|
elseif walking then
|
||||||
player_anim[name] = ANIM_LAY
|
if player_sneak[name] ~= controls.sneak then
|
||||||
|
player_anim[name] = nil
|
||||||
|
player_sneak[name] = controls.sneak
|
||||||
|
end
|
||||||
|
if controls.LMB then
|
||||||
|
player_set_animation(player, "walk_mine", animation_speed_mod)
|
||||||
|
else
|
||||||
|
player_set_animation(player, "walk", animation_speed_mod)
|
||||||
|
end
|
||||||
|
elseif controls.LMB then
|
||||||
|
player_set_animation(player, "mine")
|
||||||
|
else
|
||||||
|
player_set_animation(player, "stand", animation_speed_mod)
|
||||||
end
|
end
|
||||||
elseif walking and controls.LMB then
|
|
||||||
if player_anim[name] ~= ANIM_WALK_MINE then
|
|
||||||
pl:set_animation({x=anim.walk_mine_START, y=anim.walk_mine_END}, animation_speed_mod, animation_blend)
|
|
||||||
player_anim[name] = ANIM_WALK_MINE
|
|
||||||
end
|
|
||||||
elseif walking then
|
|
||||||
if player_anim[name] ~= ANIM_WALK then
|
|
||||||
pl:set_animation({x=anim.walk_START, y=anim.walk_END}, animation_speed_mod, animation_blend)
|
|
||||||
player_anim[name] = ANIM_WALK
|
|
||||||
end
|
|
||||||
elseif controls.LMB then
|
|
||||||
if player_anim[name] ~= ANIM_MINE then
|
|
||||||
pl:set_animation({x=anim.mine_START, y=anim.mine_END}, animation_speed_mod, animation_blend)
|
|
||||||
player_anim[name] = ANIM_MINE
|
|
||||||
end
|
|
||||||
elseif player_anim[name] ~= ANIM_STAND then
|
|
||||||
pl:set_animation({x=anim.stand_START, y=anim.stand_END}, animation_speed_mod, animation_blend)
|
|
||||||
player_anim[name] = ANIM_STAND
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end)
|
||||||
minetest.register_globalstep(player_step)
|
|
||||||
|
|
||||||
-- END
|
|
||||||
|
BIN
mods/default/sounds/default_cool_lava.1.ogg
Normal file
BIN
mods/default/sounds/default_cool_lava.1.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_cool_lava.2.ogg
Normal file
BIN
mods/default/sounds/default_cool_lava.2.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_cool_lava.3.ogg
Normal file
BIN
mods/default/sounds/default_cool_lava.3.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mods/default/sounds/default_dig_crumbly.ogg
Normal file
BIN
mods/default/sounds/default_dig_crumbly.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mods/default/sounds/default_dirt_footstep.1.ogg
Normal file
BIN
mods/default/sounds/default_dirt_footstep.1.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_dirt_footstep.2.ogg
Normal file
BIN
mods/default/sounds/default_dirt_footstep.2.ogg
Normal file
Binary file not shown.
Binary file not shown.
BIN
mods/default/sounds/default_dug_node.2.ogg
Normal file
BIN
mods/default/sounds/default_dug_node.2.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_glass_footstep.ogg
Normal file
BIN
mods/default/sounds/default_glass_footstep.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mods/default/sounds/default_hard_footstep.3.ogg
Normal file
BIN
mods/default/sounds/default_hard_footstep.3.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mods/default/sounds/default_place_node_hard.1.ogg
Normal file
BIN
mods/default/sounds/default_place_node_hard.1.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_place_node_hard.2.ogg
Normal file
BIN
mods/default/sounds/default_place_node_hard.2.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_sand_footstep.1.ogg
Normal file
BIN
mods/default/sounds/default_sand_footstep.1.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_sand_footstep.2.ogg
Normal file
BIN
mods/default/sounds/default_sand_footstep.2.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_snow_footstep.1.ogg
Normal file
BIN
mods/default/sounds/default_snow_footstep.1.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_snow_footstep.2.ogg
Normal file
BIN
mods/default/sounds/default_snow_footstep.2.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_snow_footstep.3.ogg
Normal file
BIN
mods/default/sounds/default_snow_footstep.3.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_wood_footstep.1.ogg
Normal file
BIN
mods/default/sounds/default_wood_footstep.1.ogg
Normal file
Binary file not shown.
BIN
mods/default/sounds/default_wood_footstep.2.ogg
Normal file
BIN
mods/default/sounds/default_wood_footstep.2.ogg
Normal file
Binary file not shown.
BIN
mods/default/textures/bubble.png
Normal file
BIN
mods/default/textures/bubble.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 273 B |
@ -11,7 +11,7 @@ minetest.register_item(":", {
|
|||||||
groupcaps = {
|
groupcaps = {
|
||||||
crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
|
crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
|
||||||
snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
|
snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
|
||||||
oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3}
|
oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0}
|
||||||
},
|
},
|
||||||
damage_groups = {fleshy=1},
|
damage_groups = {fleshy=1},
|
||||||
}
|
}
|
||||||
|
150
mods/default/trees.lua
Normal file
150
mods/default/trees.lua
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
local c_air = minetest.get_content_id("air")
|
||||||
|
local c_ignore = minetest.get_content_id("ignore")
|
||||||
|
local c_tree = minetest.get_content_id("default:tree")
|
||||||
|
local c_leaves = minetest.get_content_id("default:leaves")
|
||||||
|
local c_apple = minetest.get_content_id("default:apple")
|
||||||
|
|
||||||
|
function default.grow_tree(data, a, pos, is_apple_tree, seed)
|
||||||
|
--[[
|
||||||
|
NOTE: Tree-placing code is currently duplicated in the engine
|
||||||
|
and in games that have saplings; both are deprecated but not
|
||||||
|
replaced yet
|
||||||
|
]]--
|
||||||
|
local pr = PseudoRandom(seed)
|
||||||
|
local th = pr:next(4, 5)
|
||||||
|
local x, y, z = pos.x, pos.y, pos.z
|
||||||
|
for yy = y, y+th-1 do
|
||||||
|
local vi = a:index(x, yy, z)
|
||||||
|
if a:contains(x, yy, z) and (data[vi] == c_air or yy == y) then
|
||||||
|
data[vi] = c_tree
|
||||||
|
end
|
||||||
|
end
|
||||||
|
y = y+th-1 -- (x, y, z) is now last piece of trunk
|
||||||
|
local leaves_a = VoxelArea:new{MinEdge={x=-2, y=-1, z=-2}, MaxEdge={x=2, y=2, z=2}}
|
||||||
|
local leaves_buffer = {}
|
||||||
|
|
||||||
|
-- Force leaves near the trunk
|
||||||
|
local d = 1
|
||||||
|
for xi = -d, d do
|
||||||
|
for yi = -d, d do
|
||||||
|
for zi = -d, d do
|
||||||
|
leaves_buffer[leaves_a:index(xi, yi, zi)] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add leaves randomly
|
||||||
|
for iii = 1, 8 do
|
||||||
|
local d = 1
|
||||||
|
local xx = pr:next(leaves_a.MinEdge.x, leaves_a.MaxEdge.x - d)
|
||||||
|
local yy = pr:next(leaves_a.MinEdge.y, leaves_a.MaxEdge.y - d)
|
||||||
|
local zz = pr:next(leaves_a.MinEdge.z, leaves_a.MaxEdge.z - d)
|
||||||
|
|
||||||
|
for xi = 0, d do
|
||||||
|
for yi = 0, d do
|
||||||
|
for zi = 0, d do
|
||||||
|
leaves_buffer[leaves_a:index(xx+xi, yy+yi, zz+zi)] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add the leaves
|
||||||
|
for xi = leaves_a.MinEdge.x, leaves_a.MaxEdge.x do
|
||||||
|
for yi = leaves_a.MinEdge.y, leaves_a.MaxEdge.y do
|
||||||
|
for zi = leaves_a.MinEdge.z, leaves_a.MaxEdge.z do
|
||||||
|
if a:contains(x+xi, y+yi, z+zi) then
|
||||||
|
local vi = a:index(x+xi, y+yi, z+zi)
|
||||||
|
if data[vi] == c_air or data[vi] == c_ignore then
|
||||||
|
if leaves_buffer[leaves_a:index(xi, yi, zi)] then
|
||||||
|
if is_apple_tree and pr:next(1, 100) <= 10 then
|
||||||
|
data[vi] = c_apple
|
||||||
|
else
|
||||||
|
data[vi] = c_leaves
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local c_jungletree = minetest.get_content_id("default:jungletree")
|
||||||
|
local c_jungleleaves = minetest.get_content_id("default:jungleleaves")
|
||||||
|
|
||||||
|
function default.grow_jungletree(data, a, pos, seed)
|
||||||
|
--[[
|
||||||
|
NOTE: Tree-placing code is currently duplicated in the engine
|
||||||
|
and in games that have saplings; both are deprecated but not
|
||||||
|
replaced yet
|
||||||
|
]]--
|
||||||
|
local pr = PseudoRandom(seed)
|
||||||
|
local x, y, z = pos.x, pos.y, pos.z
|
||||||
|
for xi = -1, 1 do
|
||||||
|
for zi = -1, 1 do
|
||||||
|
if pr:next(1, 3) >= 2 then
|
||||||
|
local vi1 = a:index(x+xi, y, z+zi)
|
||||||
|
local vi2 = a:index(x+xi, y-1, z+zi)
|
||||||
|
if a:contains(x+xi, y-1, z+zi) and data[vi2] == c_air then
|
||||||
|
data[vi2] = c_jungletree
|
||||||
|
elseif a:contains(x+xi, y, z+zi) and data[vi1] == c_air then
|
||||||
|
data[vi1] = c_jungletree
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local th = pr:next(8, 12)
|
||||||
|
for yy = y, y+th-1 do
|
||||||
|
local vi = a:index(x, yy, z)
|
||||||
|
if a:contains(x, yy, z) and (data[vi] == c_air or yy == y) then
|
||||||
|
data[vi] = c_jungletree
|
||||||
|
end
|
||||||
|
end
|
||||||
|
y = y+th-1 -- (x, y, z) is now last piece of trunk
|
||||||
|
local leaves_a = VoxelArea:new{MinEdge={x=-3, y=-2, z=-3}, MaxEdge={x=3, y=2, z=3}}
|
||||||
|
local leaves_buffer = {}
|
||||||
|
|
||||||
|
-- Force leaves near the trunk
|
||||||
|
local d = 1
|
||||||
|
for xi = -d, d do
|
||||||
|
for yi = -d, d do
|
||||||
|
for zi = -d, d do
|
||||||
|
leaves_buffer[leaves_a:index(xi, yi, zi)] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add leaves randomly
|
||||||
|
for iii = 1, 30 do
|
||||||
|
local d = 1
|
||||||
|
local xx = pr:next(leaves_a.MinEdge.x, leaves_a.MaxEdge.x - d)
|
||||||
|
local yy = pr:next(leaves_a.MinEdge.y, leaves_a.MaxEdge.y - d)
|
||||||
|
local zz = pr:next(leaves_a.MinEdge.z, leaves_a.MaxEdge.z - d)
|
||||||
|
|
||||||
|
for xi = 0, d do
|
||||||
|
for yi = 0, d do
|
||||||
|
for zi = 0, d do
|
||||||
|
leaves_buffer[leaves_a:index(xx+xi, yy+yi, zz+zi)] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add the leaves
|
||||||
|
for xi = leaves_a.MinEdge.x, leaves_a.MaxEdge.x do
|
||||||
|
for yi = leaves_a.MinEdge.y, leaves_a.MaxEdge.y do
|
||||||
|
for zi = leaves_a.MinEdge.z, leaves_a.MaxEdge.z do
|
||||||
|
if a:contains(x+xi, y+yi, z+zi) then
|
||||||
|
local vi = a:index(x+xi, y+yi, z+zi)
|
||||||
|
if data[vi] == c_air or data[vi] == c_ignore then
|
||||||
|
if leaves_buffer[leaves_a:index(xi, yi, zi)] then
|
||||||
|
data[vi] = c_jungleleaves
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,6 +1,8 @@
|
|||||||
-- Minetest 0.4 mod: farming
|
-- Minetest 0.4 mod: farming
|
||||||
-- See README.txt for licensing and other information.
|
-- See README.txt for licensing and other information.
|
||||||
|
|
||||||
|
farming = {}
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Soil
|
-- Soil
|
||||||
--
|
--
|
||||||
@ -30,7 +32,10 @@ minetest.register_abm({
|
|||||||
pos.y = pos.y+1
|
pos.y = pos.y+1
|
||||||
local nn = minetest.get_node(pos).name
|
local nn = minetest.get_node(pos).name
|
||||||
pos.y = pos.y-1
|
pos.y = pos.y-1
|
||||||
if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].walkable then
|
if minetest.registered_nodes[nn] and
|
||||||
|
minetest.registered_nodes[nn].walkable and
|
||||||
|
minetest.get_item_group(nn, "plant") == 0
|
||||||
|
then
|
||||||
minetest.set_node(pos, {name="default:dirt"})
|
minetest.set_node(pos, {name="default:dirt"})
|
||||||
end
|
end
|
||||||
-- check if there is water nearby
|
-- check if there is water nearby
|
||||||
@ -59,7 +64,7 @@ minetest.register_abm({
|
|||||||
-- Hoes
|
-- Hoes
|
||||||
--
|
--
|
||||||
-- turns nodes with group soil=1 into soil
|
-- turns nodes with group soil=1 into soil
|
||||||
local function hoe_on_use(itemstack, user, pointed_thing, uses)
|
function farming.hoe_on_use(itemstack, user, pointed_thing, uses)
|
||||||
local pt = pointed_thing
|
local pt = pointed_thing
|
||||||
-- check if pointing at a node
|
-- check if pointing at a node
|
||||||
if not pt then
|
if not pt then
|
||||||
@ -106,7 +111,7 @@ minetest.register_tool("farming:hoe_wood", {
|
|||||||
inventory_image = "farming_tool_woodhoe.png",
|
inventory_image = "farming_tool_woodhoe.png",
|
||||||
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
return hoe_on_use(itemstack, user, pointed_thing, 30)
|
return farming.hoe_on_use(itemstack, user, pointed_thing, 30)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -115,7 +120,7 @@ minetest.register_tool("farming:hoe_stone", {
|
|||||||
inventory_image = "farming_tool_stonehoe.png",
|
inventory_image = "farming_tool_stonehoe.png",
|
||||||
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
return hoe_on_use(itemstack, user, pointed_thing, 90)
|
return farming.hoe_on_use(itemstack, user, pointed_thing, 90)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -124,7 +129,7 @@ minetest.register_tool("farming:hoe_steel", {
|
|||||||
inventory_image = "farming_tool_steelhoe.png",
|
inventory_image = "farming_tool_steelhoe.png",
|
||||||
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
return hoe_on_use(itemstack, user, pointed_thing, 200)
|
return farming.hoe_on_use(itemstack, user, pointed_thing, 200)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -133,7 +138,7 @@ minetest.register_tool("farming:hoe_bronze", {
|
|||||||
inventory_image = "farming_tool_bronzehoe.png",
|
inventory_image = "farming_tool_bronzehoe.png",
|
||||||
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
return hoe_on_use(itemstack, user, pointed_thing, 220)
|
return farming.hoe_on_use(itemstack, user, pointed_thing, 220)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -141,8 +146,8 @@ minetest.register_craft({
|
|||||||
output = "farming:hoe_wood",
|
output = "farming:hoe_wood",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"group:wood", "group:wood"},
|
{"group:wood", "group:wood"},
|
||||||
{"", "default:stick"},
|
{"", "group:stick"},
|
||||||
{"", "default:stick"},
|
{"", "group:stick"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -150,8 +155,8 @@ minetest.register_craft({
|
|||||||
output = "farming:hoe_stone",
|
output = "farming:hoe_stone",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"group:stone", "group:stone"},
|
{"group:stone", "group:stone"},
|
||||||
{"", "default:stick"},
|
{"", "group:stick"},
|
||||||
{"", "default:stick"},
|
{"", "group:stick"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -159,8 +164,8 @@ minetest.register_craft({
|
|||||||
output = "farming:hoe_steel",
|
output = "farming:hoe_steel",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"default:steel_ingot", "default:steel_ingot"},
|
{"default:steel_ingot", "default:steel_ingot"},
|
||||||
{"", "default:stick"},
|
{"", "group:stick"},
|
||||||
{"", "default:stick"},
|
{"", "group:stick"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -168,8 +173,8 @@ minetest.register_craft({
|
|||||||
output = "farming:hoe_bronze",
|
output = "farming:hoe_bronze",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"default:bronze_ingot", "default:bronze_ingot"},
|
{"default:bronze_ingot", "default:bronze_ingot"},
|
||||||
{"", "default:stick"},
|
{"", "group:stick"},
|
||||||
{"", "default:stick"},
|
{"", "group:stick"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ minetest.register_node("fire:basic_flame", {
|
|||||||
}},
|
}},
|
||||||
inventory_image = "fire_basic_flame.png",
|
inventory_image = "fire_basic_flame.png",
|
||||||
light_source = 14,
|
light_source = 14,
|
||||||
groups = {igniter=2,dig_immediate=3},
|
groups = {igniter=2,dig_immediate=3,hot=3},
|
||||||
drop = '',
|
drop = '',
|
||||||
walkable = false,
|
walkable = false,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
|
@ -46,7 +46,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||||||
elseif flower_choice == 4 then
|
elseif flower_choice == 4 then
|
||||||
flower = "flowers:dandelion_white"
|
flower = "flowers:dandelion_white"
|
||||||
elseif flower_choice == 5 then
|
elseif flower_choice == 5 then
|
||||||
flower = "flowers:flower_geranium"
|
flower = "flowers:geranium"
|
||||||
elseif flower_choice == 6 then
|
elseif flower_choice == 6 then
|
||||||
flower = "flowers:viola"
|
flower = "flowers:viola"
|
||||||
end
|
end
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
minetest.register_on_newplayer(function(player)
|
minetest.register_on_newplayer(function(player)
|
||||||
print("on_newplayer")
|
--print("on_newplayer")
|
||||||
if minetest.setting_getbool("give_initial_stuff") then
|
if minetest.setting_getbool("give_initial_stuff") then
|
||||||
print("giving give_initial_stuff to player")
|
minetest.log("action", "Giving initial stuff to player "..player:get_player_name())
|
||||||
player:get_inventory():add_item('main', 'default:pick_steel')
|
player:get_inventory():add_item('main', 'default:pick_steel')
|
||||||
player:get_inventory():add_item('main', 'default:torch 99')
|
player:get_inventory():add_item('main', 'default:torch 99')
|
||||||
player:get_inventory():add_item('main', 'default:axe_steel')
|
player:get_inventory():add_item('main', 'default:axe_steel')
|
||||||
|
@ -158,7 +158,7 @@ minetest.register_craft({
|
|||||||
output = "screwdriver:screwdriver",
|
output = "screwdriver:screwdriver",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"default:steel_ingot"},
|
{"default:steel_ingot"},
|
||||||
{"default:stick"}
|
{"group:stick"}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -25,39 +25,38 @@ function stairs.register_stair(subname, recipeitem, groups, images, description,
|
|||||||
if pointed_thing.type ~= "node" then
|
if pointed_thing.type ~= "node" then
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
local p0 = pointed_thing.under
|
local p0 = pointed_thing.under
|
||||||
local p1 = pointed_thing.above
|
local p1 = pointed_thing.above
|
||||||
|
local param2 = 0
|
||||||
|
|
||||||
|
local placer_pos = placer:getpos()
|
||||||
|
if placer_pos then
|
||||||
|
local dir = {
|
||||||
|
x = p1.x - placer_pos.x,
|
||||||
|
y = p1.y - placer_pos.y,
|
||||||
|
z = p1.z - placer_pos.z
|
||||||
|
}
|
||||||
|
param2 = minetest.dir_to_facedir(dir)
|
||||||
|
end
|
||||||
|
|
||||||
if p0.y-1 == p1.y then
|
if p0.y-1 == p1.y then
|
||||||
local fakestack = ItemStack("stairs:stair_" .. subname.."upside_down")
|
param2 = param2 + 20
|
||||||
local ret = minetest.item_place(fakestack, placer, pointed_thing)
|
if param2 == 21 then
|
||||||
if ret:is_empty() then
|
param2 = 23
|
||||||
itemstack:take_item()
|
elseif param2 == 23 then
|
||||||
return itemstack
|
param2 = 21
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Otherwise place regularly
|
return minetest.item_place(itemstack, placer, pointed_thing, param2)
|
||||||
return minetest.item_place(itemstack, placer, pointed_thing)
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- for replace ABM
|
||||||
minetest.register_node(":stairs:stair_" .. subname.."upside_down", {
|
minetest.register_node(":stairs:stair_" .. subname.."upside_down", {
|
||||||
drop = "stairs:stair_" .. subname,
|
replace_name = "stairs:stair_" .. subname,
|
||||||
drawtype = "nodebox",
|
groups = {slabs_replace=1},
|
||||||
tiles = images,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
is_ground_content = true,
|
|
||||||
groups = groups,
|
|
||||||
sounds = sounds,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{-0.5, 0, -0.5, 0.5, 0.5, 0.5},
|
|
||||||
{-0.5, -0.5, 0, 0.5, 0, 0.5},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
@ -87,6 +86,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
|
|||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
tiles = images,
|
tiles = images,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = groups,
|
groups = groups,
|
||||||
sounds = sounds,
|
sounds = sounds,
|
||||||
@ -106,21 +106,32 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
|
|||||||
local p0 = pointed_thing.under
|
local p0 = pointed_thing.under
|
||||||
local p1 = pointed_thing.above
|
local p1 = pointed_thing.above
|
||||||
local n0 = minetest.get_node(p0)
|
local n0 = minetest.get_node(p0)
|
||||||
if n0.name == "stairs:slab_" .. subname and
|
local n1 = minetest.get_node(p1)
|
||||||
p0.y+1 == p1.y then
|
local param2 = 0
|
||||||
|
|
||||||
|
local n0_is_upside_down = (n0.name == "stairs:slab_" .. subname and
|
||||||
|
n0.param2 >= 20)
|
||||||
|
|
||||||
|
if n0.name == "stairs:slab_" .. subname and not n0_is_upside_down and p0.y+1 == p1.y then
|
||||||
slabpos = p0
|
slabpos = p0
|
||||||
slabnode = n0
|
slabnode = n0
|
||||||
|
elseif n1.name == "stairs:slab_" .. subname then
|
||||||
|
slabpos = p1
|
||||||
|
slabnode = n1
|
||||||
end
|
end
|
||||||
if slabpos then
|
if slabpos then
|
||||||
-- Remove the slab at slabpos
|
-- Remove the slab at slabpos
|
||||||
minetest.remove_node(slabpos)
|
minetest.remove_node(slabpos)
|
||||||
-- Make a fake stack of a single item and try to place it
|
-- Make a fake stack of a single item and try to place it
|
||||||
local fakestack = ItemStack(recipeitem)
|
local fakestack = ItemStack(recipeitem)
|
||||||
|
fakestack:set_count(itemstack:get_count())
|
||||||
|
|
||||||
pointed_thing.above = slabpos
|
pointed_thing.above = slabpos
|
||||||
fakestack = minetest.item_place(fakestack, placer, pointed_thing)
|
local success
|
||||||
|
fakestack, success = minetest.item_place(fakestack, placer, pointed_thing)
|
||||||
-- If the item was taken from the fake stack, decrement original
|
-- If the item was taken from the fake stack, decrement original
|
||||||
if not fakestack or fakestack:is_empty() then
|
if success then
|
||||||
itemstack:take_item(1)
|
itemstack:set_count(fakestack:get_count())
|
||||||
-- Else put old node back
|
-- Else put old node back
|
||||||
else
|
else
|
||||||
minetest.set_node(slabpos, slabnode)
|
minetest.set_node(slabpos, slabnode)
|
||||||
@ -131,61 +142,43 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
|
|||||||
-- Upside down slabs
|
-- Upside down slabs
|
||||||
if p0.y-1 == p1.y then
|
if p0.y-1 == p1.y then
|
||||||
-- Turn into full block if pointing at a existing slab
|
-- Turn into full block if pointing at a existing slab
|
||||||
if n0.name == "stairs:slab_" .. subname.."upside_down" then
|
if n0_is_upside_down then
|
||||||
-- Remove the slab at the position of the slab
|
-- Remove the slab at the position of the slab
|
||||||
minetest.remove_node(p0)
|
minetest.remove_node(p0)
|
||||||
-- Make a fake stack of a single item and try to place it
|
-- Make a fake stack of a single item and try to place it
|
||||||
local fakestack = ItemStack(recipeitem)
|
local fakestack = ItemStack(recipeitem)
|
||||||
|
fakestack:set_count(itemstack:get_count())
|
||||||
|
|
||||||
pointed_thing.above = p0
|
pointed_thing.above = p0
|
||||||
fakestack = minetest.item_place(fakestack, placer, pointed_thing)
|
local success
|
||||||
|
fakestack, success = minetest.item_place(fakestack, placer, pointed_thing)
|
||||||
-- If the item was taken from the fake stack, decrement original
|
-- If the item was taken from the fake stack, decrement original
|
||||||
if not fakestack or fakestack:is_empty() then
|
if success then
|
||||||
itemstack:take_item(1)
|
itemstack:set_count(fakestack:get_count())
|
||||||
-- Else put old node back
|
-- Else put old node back
|
||||||
else
|
else
|
||||||
minetest.set_node(p0, n0)
|
minetest.set_node(p0, n0)
|
||||||
end
|
end
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Place upside down slab
|
-- Place upside down slab
|
||||||
local fakestack = ItemStack("stairs:slab_" .. subname.."upside_down")
|
param2 = 20
|
||||||
local ret = minetest.item_place(fakestack, placer, pointed_thing)
|
|
||||||
if ret:is_empty() then
|
|
||||||
itemstack:take_item()
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- If pointing at the side of a upside down slab
|
-- If pointing at the side of a upside down slab
|
||||||
if n0.name == "stairs:slab_" .. subname.."upside_down" and
|
if n0_is_upside_down and p0.y+1 ~= p1.y then
|
||||||
p0.y+1 ~= p1.y then
|
param2 = 20
|
||||||
-- Place upside down slab
|
|
||||||
local fakestack = ItemStack("stairs:slab_" .. subname.."upside_down")
|
|
||||||
local ret = minetest.item_place(fakestack, placer, pointed_thing)
|
|
||||||
if ret:is_empty() then
|
|
||||||
itemstack:take_item()
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Otherwise place regularly
|
return minetest.item_place(itemstack, placer, pointed_thing, param2)
|
||||||
return minetest.item_place(itemstack, placer, pointed_thing)
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- for replace ABM
|
||||||
minetest.register_node(":stairs:slab_" .. subname.."upside_down", {
|
minetest.register_node(":stairs:slab_" .. subname.."upside_down", {
|
||||||
drop = "stairs:slab_"..subname,
|
replace_name = "stairs:slab_"..subname,
|
||||||
drawtype = "nodebox",
|
groups = {slabs_replace=1},
|
||||||
tiles = images,
|
|
||||||
paramtype = "light",
|
|
||||||
is_ground_content = true,
|
|
||||||
groups = groups,
|
|
||||||
sounds = sounds,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.5, 0, -0.5, 0.5, 0.5, 0.5},
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
@ -196,6 +189,23 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Replace old "upside_down" nodes with new param2 versions
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {"group:slabs_replace"},
|
||||||
|
interval = 1,
|
||||||
|
chance = 1,
|
||||||
|
action = function(pos, node)
|
||||||
|
node.name = minetest.registered_nodes[node.name].replace_name
|
||||||
|
node.param2 = node.param2 + 20
|
||||||
|
if node.param2 == 21 then
|
||||||
|
node.param2 = 23
|
||||||
|
elseif node.param2 == 23 then
|
||||||
|
node.param2 = 21
|
||||||
|
end
|
||||||
|
minetest.set_node(pos, node)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
-- Nodes will be called stairs:{stair,slab}_<subname>
|
-- Nodes will be called stairs:{stair,slab}_<subname>
|
||||||
function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds)
|
function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds)
|
||||||
stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds)
|
stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds)
|
||||||
|
Reference in New Issue
Block a user