2013-05-19 18:43:04 +02:00
|
|
|
-- mods/default/nodes.lua
|
|
|
|
|
2015-08-09 09:50:57 +02:00
|
|
|
|
|
|
|
--[[ Node name convention:
|
|
|
|
|
|
|
|
Although many node names are in combined-word form, the required form for new
|
|
|
|
node names is words separated by underscores. If both forms are used in written
|
|
|
|
language (for example pinewood and pine wood) the underscore form should be used.
|
|
|
|
|
|
|
|
--]]
|
|
|
|
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
--[[ Index:
|
|
|
|
|
|
|
|
Stone
|
|
|
|
-----
|
2016-03-21 10:23:12 +01:00
|
|
|
(1. Material 2. Cobble variant 3. Brick variant 4. Modified forms)
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:stone
|
|
|
|
default:cobble
|
|
|
|
default:stonebrick
|
2016-06-23 05:37:19 +02:00
|
|
|
default:stone_block
|
2014-12-07 16:29:36 +01:00
|
|
|
default:mossycobble
|
|
|
|
|
|
|
|
default:desert_stone
|
|
|
|
default:desert_cobble
|
|
|
|
default:desert_stonebrick
|
2016-06-23 05:37:19 +02:00
|
|
|
default:desert_stone_block
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:sandstone
|
|
|
|
default:sandstonebrick
|
2016-06-23 05:37:19 +02:00
|
|
|
default:sandstone_block
|
2017-03-07 04:03:30 +01:00
|
|
|
default:desert_sandstone
|
|
|
|
default:desert_sandstone_brick
|
|
|
|
default:desert_sandstone_block
|
|
|
|
default:silver_sandstone
|
|
|
|
default:silver_sandstone_brick
|
|
|
|
default:silver_sandstone_block
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:obsidian
|
|
|
|
default:obsidianbrick
|
2016-06-23 05:37:19 +02:00
|
|
|
default:obsidian_block
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
Soft / Non-Stone
|
|
|
|
----------------
|
2016-03-21 10:23:12 +01:00
|
|
|
(1. Material 2. Modified forms)
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:dirt
|
|
|
|
default:dirt_with_grass
|
|
|
|
default:dirt_with_grass_footsteps
|
2015-08-11 22:28:28 +02:00
|
|
|
default:dirt_with_dry_grass
|
2014-12-07 16:29:36 +01:00
|
|
|
default:dirt_with_snow
|
2017-02-26 02:37:35 +01:00
|
|
|
default:dirt_with_rainforest_litter
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:sand
|
|
|
|
default:desert_sand
|
2016-10-04 04:45:49 +02:00
|
|
|
default:silver_sand
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:gravel
|
|
|
|
|
|
|
|
default:clay
|
|
|
|
|
|
|
|
default:snow
|
|
|
|
default:snowblock
|
|
|
|
|
|
|
|
default:ice
|
|
|
|
|
|
|
|
Trees
|
|
|
|
-----
|
2016-03-21 10:23:12 +01:00
|
|
|
(1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling 5. Fruits)
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:tree
|
|
|
|
default:wood
|
|
|
|
default:leaves
|
|
|
|
default:sapling
|
|
|
|
default:apple
|
|
|
|
|
|
|
|
default:jungletree
|
|
|
|
default:junglewood
|
|
|
|
default:jungleleaves
|
|
|
|
default:junglesapling
|
|
|
|
|
2015-08-09 09:50:57 +02:00
|
|
|
default:pine_tree
|
|
|
|
default:pine_wood
|
2014-12-07 16:29:36 +01:00
|
|
|
default:pine_needles
|
|
|
|
default:pine_sapling
|
|
|
|
|
2015-07-01 14:03:14 +02:00
|
|
|
default:acacia_tree
|
|
|
|
default:acacia_wood
|
|
|
|
default:acacia_leaves
|
|
|
|
default:acacia_sapling
|
|
|
|
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
default:aspen_tree
|
|
|
|
default:aspen_wood
|
|
|
|
default:aspen_leaves
|
|
|
|
default:aspen_sapling
|
2016-03-21 10:23:12 +01:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
Ores
|
|
|
|
----
|
2016-03-21 10:23:12 +01:00
|
|
|
(1. In stone 2. Blocks)
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:stone_with_coal
|
|
|
|
default:coalblock
|
|
|
|
|
|
|
|
default:stone_with_iron
|
|
|
|
default:steelblock
|
|
|
|
|
|
|
|
default:stone_with_copper
|
|
|
|
default:copperblock
|
2017-04-19 03:48:00 +02:00
|
|
|
|
|
|
|
default:stone_with_tin
|
|
|
|
default:tinblock
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
default:bronzeblock
|
|
|
|
|
|
|
|
default:stone_with_gold
|
|
|
|
default:goldblock
|
|
|
|
|
|
|
|
default:stone_with_mese
|
|
|
|
default:mese
|
|
|
|
|
|
|
|
default:stone_with_diamond
|
|
|
|
default:diamondblock
|
|
|
|
|
2016-10-12 02:49:31 +02:00
|
|
|
Plantlife
|
|
|
|
---------
|
2016-03-21 10:23:12 +01:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
default:cactus
|
|
|
|
default:papyrus
|
|
|
|
default:dry_shrub
|
|
|
|
default:junglegrass
|
2015-07-01 14:03:14 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
default:grass_1
|
|
|
|
default:grass_2
|
|
|
|
default:grass_3
|
|
|
|
default:grass_4
|
|
|
|
default:grass_5
|
|
|
|
|
2015-07-01 14:03:14 +02:00
|
|
|
default:dry_grass_1
|
|
|
|
default:dry_grass_2
|
|
|
|
default:dry_grass_3
|
|
|
|
default:dry_grass_4
|
|
|
|
default:dry_grass_5
|
|
|
|
|
2016-10-13 01:48:56 +02:00
|
|
|
default:bush_stem
|
|
|
|
default:bush_leaves
|
2017-04-12 10:25:21 +02:00
|
|
|
default:bush_sapling
|
2016-10-13 01:48:56 +02:00
|
|
|
default:acacia_bush_stem
|
|
|
|
default:acacia_bush_leaves
|
2017-04-12 10:25:21 +02:00
|
|
|
default:acacia_bush_sapling
|
2016-10-13 01:48:56 +02:00
|
|
|
|
2016-10-12 02:49:31 +02:00
|
|
|
Corals
|
|
|
|
------
|
|
|
|
|
|
|
|
default:coral_brown
|
|
|
|
default:coral_orange
|
|
|
|
default:coral_skeleton
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
Liquids
|
|
|
|
-------
|
|
|
|
(1. Source 2. Flowing)
|
|
|
|
|
|
|
|
default:water_source
|
|
|
|
default:water_flowing
|
|
|
|
|
2015-04-17 07:50:06 +02:00
|
|
|
default:river_water_source
|
|
|
|
default:river_water_flowing
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
default:lava_source
|
|
|
|
default:lava_flowing
|
|
|
|
|
|
|
|
Tools / "Advanced" crafting / Non-"natural"
|
|
|
|
-------------------------------------------
|
2016-03-21 10:23:12 +01:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
default:chest
|
|
|
|
default:chest_locked
|
|
|
|
|
|
|
|
default:bookshelf
|
|
|
|
|
2016-03-06 12:16:33 +01:00
|
|
|
default:sign_wall_wood
|
|
|
|
default:sign_wall_steel
|
2015-08-25 05:11:46 +02:00
|
|
|
|
2016-03-03 10:52:45 +01:00
|
|
|
default:ladder_wood
|
|
|
|
default:ladder_steel
|
2015-08-25 05:11:46 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
default:fence_wood
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
default:fence_acacia_wood
|
|
|
|
default:fence_junglewood
|
|
|
|
default:fence_pine_wood
|
|
|
|
default:fence_aspen_wood
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
default:glass
|
|
|
|
default:obsidian_glass
|
|
|
|
|
|
|
|
default:brick
|
|
|
|
|
2015-03-05 16:46:49 +01:00
|
|
|
default:meselamp
|
2017-02-09 01:01:30 +01:00
|
|
|
default:mese_post_light
|
2015-03-05 16:46:49 +01:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
Misc
|
|
|
|
----
|
2016-03-21 10:23:12 +01:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
default:cloud
|
|
|
|
|
|
|
|
--]]
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Stone
|
|
|
|
--
|
|
|
|
|
2013-05-19 18:43:04 +02:00
|
|
|
minetest.register_node("default:stone", {
|
|
|
|
description = "Stone",
|
|
|
|
tiles = {"default_stone.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3, stone = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = 'default:cobble',
|
|
|
|
legacy_mineral = true,
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:cobble", {
|
|
|
|
description = "Cobblestone",
|
|
|
|
tiles = {"default_cobble.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3, stone = 2},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:stonebrick", {
|
|
|
|
description = "Stone Brick",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_stone_brick.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 2, stone = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2016-06-23 05:37:19 +02:00
|
|
|
minetest.register_node("default:stone_block", {
|
|
|
|
description = "Stone Block",
|
|
|
|
tiles = {"default_stone_block.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 2, stone = 1},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:mossycobble", {
|
|
|
|
description = "Mossy Cobblestone",
|
|
|
|
tiles = {"default_mossycobble.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3, stone = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
|
2013-05-19 18:43:04 +02:00
|
|
|
minetest.register_node("default:desert_stone", {
|
|
|
|
description = "Desert Stone",
|
|
|
|
tiles = {"default_desert_stone.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3, stone = 1},
|
2014-04-07 16:29:00 +02:00
|
|
|
drop = 'default:desert_cobble',
|
2013-05-19 18:43:04 +02:00
|
|
|
legacy_mineral = true,
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:desert_cobble", {
|
|
|
|
description = "Desert Cobblestone",
|
|
|
|
tiles = {"default_desert_cobble.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3, stone = 2},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:desert_stonebrick", {
|
|
|
|
description = "Desert Stone Brick",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_desert_stone_brick.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 2, stone = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2016-06-23 05:37:19 +02:00
|
|
|
minetest.register_node("default:desert_stone_block", {
|
|
|
|
description = "Desert Stone Block",
|
|
|
|
tiles = {"default_desert_stone_block.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 2, stone = 1},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:sandstone", {
|
|
|
|
description = "Sandstone",
|
|
|
|
tiles = {"default_sandstone.png"},
|
2016-05-05 01:22:57 +02:00
|
|
|
groups = {crumbly = 1, cracky = 3},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:sandstonebrick", {
|
|
|
|
description = "Sandstone Brick",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_sandstone_brick.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 2},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
2013-06-08 18:08:48 +02:00
|
|
|
|
2016-06-23 05:37:19 +02:00
|
|
|
minetest.register_node("default:sandstone_block", {
|
|
|
|
description = "Sandstone Block",
|
|
|
|
tiles = {"default_sandstone_block.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 2},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
2017-03-07 04:03:30 +01:00
|
|
|
minetest.register_node("default:desert_sandstone", {
|
|
|
|
description = "Desert Sandstone",
|
|
|
|
tiles = {"default_desert_sandstone.png"},
|
|
|
|
groups = {crumbly = 1, cracky = 3},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:desert_sandstone_brick", {
|
|
|
|
description = "Desert Sandstone Brick",
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
|
|
|
tiles = {"default_desert_sandstone_brick.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 2},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:desert_sandstone_block", {
|
|
|
|
description = "Desert Sandstone Block",
|
|
|
|
tiles = {"default_desert_sandstone_block.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 2},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:silver_sandstone", {
|
|
|
|
description = "Silver Sandstone",
|
|
|
|
tiles = {"default_silver_sandstone.png"},
|
|
|
|
groups = {crumbly = 1, cracky = 3},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:silver_sandstone_brick", {
|
|
|
|
description = "Silver Sandstone Brick",
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
|
|
|
tiles = {"default_silver_sandstone_brick.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 2},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:silver_sandstone_block", {
|
|
|
|
description = "Silver Sandstone Block",
|
|
|
|
tiles = {"default_silver_sandstone_block.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 2},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
minetest.register_node("default:obsidian", {
|
|
|
|
description = "Obsidian",
|
|
|
|
tiles = {"default_obsidian.png"},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 1, level = 2},
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:obsidianbrick", {
|
|
|
|
description = "Obsidian Brick",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_obsidian_brick.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 1, level = 2},
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2016-06-23 05:37:19 +02:00
|
|
|
minetest.register_node("default:obsidian_block", {
|
|
|
|
description = "Obsidian Block",
|
|
|
|
tiles = {"default_obsidian_block.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
groups = {cracky = 1, level = 2},
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
--
|
|
|
|
-- Soft / Non-Stone
|
|
|
|
--
|
|
|
|
|
|
|
|
minetest.register_node("default:dirt", {
|
|
|
|
description = "Dirt",
|
|
|
|
tiles = {"default_dirt.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {crumbly = 3, soil = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_dirt_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:dirt_with_grass", {
|
|
|
|
description = "Dirt with Grass",
|
2015-08-19 00:26:32 +02:00
|
|
|
tiles = {"default_grass.png", "default_dirt.png",
|
|
|
|
{name = "default_dirt.png^default_grass_side.png",
|
|
|
|
tileable_vertical = false}},
|
2016-09-22 12:56:15 +02:00
|
|
|
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = 'default:dirt',
|
|
|
|
sounds = default.node_sound_dirt_defaults({
|
2015-08-25 05:11:46 +02:00
|
|
|
footstep = {name = "default_grass_footstep", gain = 0.25},
|
2013-05-19 18:43:04 +02:00
|
|
|
}),
|
|
|
|
})
|
|
|
|
|
2015-08-11 22:28:28 +02:00
|
|
|
minetest.register_node("default:dirt_with_grass_footsteps", {
|
|
|
|
description = "Dirt with Grass and Footsteps",
|
|
|
|
tiles = {"default_grass.png^default_footprint.png", "default_dirt.png",
|
2015-08-19 00:26:32 +02:00
|
|
|
{name = "default_dirt.png^default_grass_side.png",
|
|
|
|
tileable_vertical = false}},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1},
|
2015-08-11 22:28:28 +02:00
|
|
|
drop = 'default:dirt',
|
|
|
|
sounds = default.node_sound_dirt_defaults({
|
2015-08-25 05:11:46 +02:00
|
|
|
footstep = {name = "default_grass_footstep", gain = 0.25},
|
2015-08-11 22:28:28 +02:00
|
|
|
}),
|
|
|
|
})
|
|
|
|
|
2015-07-01 14:03:14 +02:00
|
|
|
minetest.register_node("default:dirt_with_dry_grass", {
|
|
|
|
description = "Dirt with Dry Grass",
|
|
|
|
tiles = {"default_dry_grass.png",
|
|
|
|
"default_dirt.png",
|
2015-08-19 00:26:32 +02:00
|
|
|
{name = "default_dirt.png^default_dry_grass_side.png",
|
|
|
|
tileable_vertical = false}},
|
2016-09-22 12:56:15 +02:00
|
|
|
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
|
2015-07-01 14:03:14 +02:00
|
|
|
drop = 'default:dirt',
|
|
|
|
sounds = default.node_sound_dirt_defaults({
|
|
|
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
|
|
|
}),
|
|
|
|
})
|
|
|
|
|
2013-05-19 18:43:04 +02:00
|
|
|
minetest.register_node("default:dirt_with_snow", {
|
|
|
|
description = "Dirt with Snow",
|
2015-08-19 00:26:32 +02:00
|
|
|
tiles = {"default_snow.png", "default_dirt.png",
|
|
|
|
{name = "default_dirt.png^default_snow_side.png",
|
|
|
|
tileable_vertical = false}},
|
2017-03-18 18:54:03 +01:00
|
|
|
groups = {crumbly = 3, spreading_dirt_type = 1, snowy = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = 'default:dirt',
|
|
|
|
sounds = default.node_sound_dirt_defaults({
|
2016-01-18 22:35:21 +01:00
|
|
|
footstep = {name = "default_snow_footstep", gain = 0.15},
|
2013-05-19 18:43:04 +02:00
|
|
|
}),
|
|
|
|
})
|
|
|
|
|
2017-02-26 02:37:35 +01:00
|
|
|
minetest.register_node("default:dirt_with_rainforest_litter", {
|
|
|
|
description = "Dirt with Rainforest Litter",
|
|
|
|
tiles = {
|
|
|
|
"default_rainforest_litter.png",
|
|
|
|
"default_dirt.png",
|
|
|
|
{name = "default_dirt.png^default_rainforest_litter_side.png",
|
|
|
|
tileable_vertical = false}
|
|
|
|
},
|
|
|
|
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
|
|
|
|
drop = "default:dirt",
|
|
|
|
sounds = default.node_sound_dirt_defaults({
|
|
|
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
|
|
|
}),
|
|
|
|
})
|
|
|
|
|
2013-05-19 18:43:04 +02:00
|
|
|
minetest.register_node("default:sand", {
|
|
|
|
description = "Sand",
|
|
|
|
tiles = {"default_sand.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {crumbly = 3, falling_node = 1, sand = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_sand_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:desert_sand", {
|
|
|
|
description = "Desert Sand",
|
|
|
|
tiles = {"default_desert_sand.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {crumbly = 3, falling_node = 1, sand = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_sand_defaults(),
|
|
|
|
})
|
|
|
|
|
2016-10-04 04:45:49 +02:00
|
|
|
minetest.register_node("default:silver_sand", {
|
|
|
|
description = "Silver Sand",
|
|
|
|
tiles = {"default_silver_sand.png"},
|
|
|
|
groups = {crumbly = 3, falling_node = 1, sand = 1},
|
|
|
|
sounds = default.node_sound_sand_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
|
2013-05-19 18:43:04 +02:00
|
|
|
minetest.register_node("default:gravel", {
|
|
|
|
description = "Gravel",
|
|
|
|
tiles = {"default_gravel.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {crumbly = 2, falling_node = 1},
|
2016-04-25 00:10:46 +02:00
|
|
|
sounds = default.node_sound_gravel_defaults(),
|
2016-03-11 18:27:22 +01:00
|
|
|
drop = {
|
|
|
|
max_items = 1,
|
|
|
|
items = {
|
|
|
|
{items = {'default:flint'}, rarity = 16},
|
|
|
|
{items = {'default:gravel'}}
|
|
|
|
}
|
|
|
|
}
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:clay", {
|
|
|
|
description = "Clay",
|
|
|
|
tiles = {"default_clay.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {crumbly = 3},
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = 'default:clay_lump 4',
|
2013-06-11 23:23:10 +02:00
|
|
|
sounds = default.node_sound_dirt_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
minetest.register_node("default:snow", {
|
|
|
|
description = "Snow",
|
|
|
|
tiles = {"default_snow.png"},
|
|
|
|
inventory_image = "default_snowball.png",
|
|
|
|
wield_image = "default_snowball.png",
|
|
|
|
paramtype = "light",
|
|
|
|
buildable_to = true,
|
2016-04-02 21:14:18 +02:00
|
|
|
floodable = true,
|
2014-12-07 16:29:36 +01:00
|
|
|
drawtype = "nodebox",
|
|
|
|
node_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {
|
2015-07-24 02:24:13 +02:00
|
|
|
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
},
|
2017-01-31 15:14:13 +01:00
|
|
|
groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1, snowy = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_dirt_defaults({
|
2016-01-18 22:35:21 +01:00
|
|
|
footstep = {name = "default_snow_footstep", gain = 0.15},
|
|
|
|
dug = {name = "default_snow_footstep", gain = 0.2},
|
|
|
|
dig = {name = "default_snow_footstep", gain = 0.2}
|
2014-12-07 16:29:36 +01:00
|
|
|
}),
|
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
pos.y = pos.y - 1
|
|
|
|
if minetest.get_node(pos).name == "default:dirt_with_grass" then
|
2015-07-24 02:24:13 +02:00
|
|
|
minetest.set_node(pos, {name = "default:dirt_with_snow"})
|
2014-12-07 16:29:36 +01:00
|
|
|
end
|
|
|
|
end,
|
|
|
|
})
|
2015-02-26 09:21:28 +01:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:snowblock", {
|
|
|
|
description = "Snow Block",
|
|
|
|
tiles = {"default_snow.png"},
|
2017-01-31 15:14:13 +01:00
|
|
|
groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1, snowy = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_dirt_defaults({
|
2016-01-18 22:35:21 +01:00
|
|
|
footstep = {name = "default_snow_footstep", gain = 0.15},
|
|
|
|
dug = {name = "default_snow_footstep", gain = 0.2},
|
|
|
|
dig = {name = "default_snow_footstep", gain = 0.2}
|
2014-12-07 16:29:36 +01:00
|
|
|
}),
|
2016-11-08 18:30:58 +01:00
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
pos.y = pos.y - 1
|
|
|
|
if minetest.get_node(pos).name == "default:dirt_with_grass" then
|
|
|
|
minetest.set_node(pos, {name = "default:dirt_with_snow"})
|
|
|
|
end
|
|
|
|
end,
|
2014-12-07 16:29:36 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:ice", {
|
|
|
|
description = "Ice",
|
|
|
|
tiles = {"default_ice.png"},
|
2015-04-05 01:40:23 +02:00
|
|
|
is_ground_content = false,
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype = "light",
|
2016-11-10 05:04:20 +01:00
|
|
|
groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_glass_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
--
|
|
|
|
-- Trees
|
|
|
|
--
|
|
|
|
|
2013-05-19 18:43:04 +02:00
|
|
|
minetest.register_node("default:tree", {
|
|
|
|
description = "Tree",
|
|
|
|
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
|
2013-11-07 17:48:00 +01:00
|
|
|
paramtype2 = "facedir",
|
2013-11-30 08:42:57 +01:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
|
2013-11-07 17:48:00 +01:00
|
|
|
on_place = minetest.rotate_node
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:wood", {
|
|
|
|
description = "Wooden Planks",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_wood.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:sapling", {
|
|
|
|
description = "Sapling",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
tiles = {"default_sapling.png"},
|
|
|
|
inventory_image = "default_sapling.png",
|
|
|
|
wield_image = "default_sapling.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2014-11-29 11:23:45 +01:00
|
|
|
sunlight_propagates = true,
|
2014-12-07 16:29:36 +01:00
|
|
|
walkable = false,
|
2016-03-07 06:39:07 +01:00
|
|
|
on_timer = default.grow_sapling,
|
2014-12-07 16:29:36 +01:00
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
|
|
|
|
attached_node = 1, sapling = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2016-07-19 02:01:59 +02:00
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
minetest.get_node_timer(pos):start(math.random(2400,4800))
|
|
|
|
end,
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
|
|
|
"default:sapling",
|
|
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
|
|
-- minp_relative.y = 1 because sapling pos has been checked
|
|
|
|
{x = -2, y = 1, z = -2},
|
|
|
|
{x = 2, y = 6, z = 2},
|
|
|
|
-- maximum interval of interior volume check
|
|
|
|
4)
|
|
|
|
|
|
|
|
return itemstack
|
|
|
|
end,
|
2014-12-07 16:29:36 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:leaves", {
|
|
|
|
description = "Leaves",
|
|
|
|
drawtype = "allfaces_optional",
|
|
|
|
waving = 1,
|
|
|
|
tiles = {"default_leaves.png"},
|
2015-07-08 15:52:17 +02:00
|
|
|
special_tiles = {"default_leaves_simple.png"},
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype = "light",
|
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = {
|
|
|
|
max_items = 1,
|
|
|
|
items = {
|
|
|
|
{
|
|
|
|
-- player will get sapling with 1/20 chance
|
2014-12-07 16:29:36 +01:00
|
|
|
items = {'default:sapling'},
|
2013-05-19 18:43:04 +02:00
|
|
|
rarity = 20,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
-- player will get leaves only if he get no saplings,
|
|
|
|
-- this is because max_items is 1
|
2014-12-07 16:29:36 +01:00
|
|
|
items = {'default:leaves'},
|
2013-05-19 18:43:04 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2014-12-07 16:29:36 +01:00
|
|
|
|
2014-12-06 11:08:41 +01:00
|
|
|
after_place_node = default.after_place_leaves,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:apple", {
|
|
|
|
description = "Apple",
|
2013-05-19 18:43:04 +02:00
|
|
|
drawtype = "plantlike",
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_apple.png"},
|
|
|
|
inventory_image = "default_apple.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2014-12-07 16:29:36 +01:00
|
|
|
sunlight_propagates = true,
|
2013-05-19 18:43:04 +02:00
|
|
|
walkable = false,
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16}
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {fleshy = 3, dig_immediate = 3, flammable = 2,
|
|
|
|
leafdecay = 3, leafdecay_drop = 1},
|
2015-05-14 17:33:10 +02:00
|
|
|
on_use = minetest.item_eat(2),
|
2013-06-11 23:23:10 +02:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
after_place_node = function(pos, placer, itemstack)
|
|
|
|
if placer:is_player() then
|
2015-08-25 05:11:46 +02:00
|
|
|
minetest.set_node(pos, {name = "default:apple", param2 = 1})
|
2014-12-07 16:29:36 +01:00
|
|
|
end
|
|
|
|
end,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
2013-11-02 11:00:48 +01:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
minetest.register_node("default:jungletree", {
|
|
|
|
description = "Jungle Tree",
|
2015-08-25 05:11:46 +02:00
|
|
|
tiles = {"default_jungletree_top.png", "default_jungletree_top.png",
|
|
|
|
"default_jungletree.png"},
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
|
|
|
|
on_place = minetest.rotate_node
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:junglewood", {
|
|
|
|
description = "Junglewood Planks",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_junglewood.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:jungleleaves", {
|
|
|
|
description = "Jungle Leaves",
|
2013-05-19 18:43:04 +02:00
|
|
|
drawtype = "allfaces_optional",
|
2013-12-04 00:47:35 +01:00
|
|
|
waving = 1,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_jungleleaves.png"},
|
2015-07-08 15:52:17 +02:00
|
|
|
special_tiles = {"default_jungleleaves_simple.png"},
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2013-11-30 08:42:57 +01:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = {
|
|
|
|
max_items = 1,
|
|
|
|
items = {
|
2015-08-25 05:11:46 +02:00
|
|
|
{items = {'default:junglesapling'}, rarity = 20},
|
|
|
|
{items = {'default:jungleleaves'}}
|
2013-05-19 18:43:04 +02:00
|
|
|
}
|
|
|
|
},
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
after_place_node = default.after_place_leaves,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:junglesapling", {
|
|
|
|
description = "Jungle Sapling",
|
2013-05-19 18:43:04 +02:00
|
|
|
drawtype = "plantlike",
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_junglesapling.png"},
|
|
|
|
inventory_image = "default_junglesapling.png",
|
|
|
|
wield_image = "default_junglesapling.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2014-11-29 11:23:45 +01:00
|
|
|
sunlight_propagates = true,
|
2013-05-19 18:43:04 +02:00
|
|
|
walkable = false,
|
2016-03-07 06:39:07 +01:00
|
|
|
on_timer = default.grow_sapling,
|
2013-05-19 18:43:04 +02:00
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
|
|
|
|
attached_node = 1, sapling = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2016-07-19 02:01:59 +02:00
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
minetest.get_node_timer(pos):start(math.random(2400,4800))
|
|
|
|
end,
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
|
|
|
"default:junglesapling",
|
|
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
|
|
-- minp_relative.y = 1 because sapling pos has been checked
|
|
|
|
{x = -2, y = 1, z = -2},
|
|
|
|
{x = 2, y = 15, z = 2},
|
|
|
|
-- maximum interval of interior volume check
|
|
|
|
4)
|
|
|
|
|
|
|
|
return itemstack
|
|
|
|
end,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-04-15 21:04:34 +02:00
|
|
|
|
2015-08-09 09:50:57 +02:00
|
|
|
minetest.register_node("default:pine_tree", {
|
2014-12-07 16:29:36 +01:00
|
|
|
description = "Pine Tree",
|
2015-08-09 09:50:57 +02:00
|
|
|
tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png",
|
|
|
|
"default_pine_tree.png"},
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype2 = "facedir",
|
2013-11-30 08:42:57 +01:00
|
|
|
is_ground_content = false,
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
2013-06-22 11:00:23 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
on_place = minetest.rotate_node
|
|
|
|
})
|
2013-06-22 11:00:23 +02:00
|
|
|
|
2015-08-09 09:50:57 +02:00
|
|
|
minetest.register_node("default:pine_wood", {
|
|
|
|
description = "Pine Wood Planks",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2015-08-09 09:50:57 +02:00
|
|
|
tiles = {"default_pine_wood.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:pine_needles",{
|
|
|
|
description = "Pine Needles",
|
|
|
|
drawtype = "allfaces_optional",
|
|
|
|
tiles = {"default_pine_needles.png"},
|
|
|
|
waving = 1,
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2013-11-30 08:42:57 +01:00
|
|
|
is_ground_content = false,
|
2015-07-01 14:03:14 +02:00
|
|
|
groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
drop = {
|
|
|
|
max_items = 1,
|
|
|
|
items = {
|
2015-07-01 14:03:14 +02:00
|
|
|
{items = {"default:pine_sapling"}, rarity = 20},
|
|
|
|
{items = {"default:pine_needles"}}
|
2014-12-07 16:29:36 +01:00
|
|
|
}
|
|
|
|
},
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
|
|
|
|
after_place_node = default.after_place_leaves,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:pine_sapling", {
|
|
|
|
description = "Pine Sapling",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
tiles = {"default_pine_sapling.png"},
|
|
|
|
inventory_image = "default_pine_sapling.png",
|
|
|
|
wield_image = "default_pine_sapling.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2015-07-01 14:03:14 +02:00
|
|
|
sunlight_propagates = true,
|
2014-12-07 16:29:36 +01:00
|
|
|
walkable = false,
|
2016-03-07 06:39:07 +01:00
|
|
|
on_timer = default.grow_sapling,
|
2013-05-19 18:43:04 +02:00
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {snappy = 2, dig_immediate = 3, flammable = 3,
|
2015-08-09 09:50:57 +02:00
|
|
|
attached_node = 1, sapling = 1},
|
2015-07-01 14:03:14 +02:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2016-07-19 02:01:59 +02:00
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
minetest.get_node_timer(pos):start(math.random(2400,4800))
|
|
|
|
end,
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
|
|
|
"default:pine_sapling",
|
|
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
|
|
-- minp_relative.y = 1 because sapling pos has been checked
|
|
|
|
{x = -2, y = 1, z = -2},
|
|
|
|
{x = 2, y = 12, z = 2},
|
|
|
|
-- maximum interval of interior volume check
|
|
|
|
4)
|
|
|
|
|
|
|
|
return itemstack
|
|
|
|
end,
|
2015-07-01 14:03:14 +02:00
|
|
|
})
|
|
|
|
|
2015-08-25 05:11:46 +02:00
|
|
|
|
2015-07-01 14:03:14 +02:00
|
|
|
minetest.register_node("default:acacia_tree", {
|
|
|
|
description = "Acacia Tree",
|
2015-08-09 09:50:57 +02:00
|
|
|
tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png",
|
|
|
|
"default_acacia_tree.png"},
|
2015-07-01 14:03:14 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
|
|
|
|
on_place = minetest.rotate_node
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:acacia_wood", {
|
|
|
|
description = "Acacia Wood Planks",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2015-07-01 14:03:14 +02:00
|
|
|
tiles = {"default_acacia_wood.png"},
|
|
|
|
is_ground_content = false,
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1},
|
2015-07-01 14:03:14 +02:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:acacia_leaves", {
|
|
|
|
description = "Acacia Leaves",
|
|
|
|
drawtype = "allfaces_optional",
|
|
|
|
tiles = {"default_acacia_leaves.png"},
|
2016-11-02 18:58:06 +01:00
|
|
|
special_tiles = {"default_acacia_leaves_simple.png"},
|
2015-09-01 07:12:21 +02:00
|
|
|
waving = 1,
|
2015-07-01 14:03:14 +02:00
|
|
|
paramtype = "light",
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
|
|
|
|
drop = {
|
|
|
|
max_items = 1,
|
|
|
|
items = {
|
|
|
|
{items = {"default:acacia_sapling"}, rarity = 20},
|
|
|
|
{items = {"default:acacia_leaves"}}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
|
|
|
|
after_place_node = default.after_place_leaves,
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:acacia_sapling", {
|
|
|
|
description = "Acacia Tree Sapling",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
tiles = {"default_acacia_sapling.png"},
|
|
|
|
inventory_image = "default_acacia_sapling.png",
|
|
|
|
wield_image = "default_acacia_sapling.png",
|
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
walkable = false,
|
2016-03-07 06:39:07 +01:00
|
|
|
on_timer = default.grow_sapling,
|
2015-07-01 14:03:14 +02:00
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
|
2015-07-01 14:03:14 +02:00
|
|
|
},
|
2015-08-09 09:50:57 +02:00
|
|
|
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
|
|
|
|
attached_node = 1, sapling = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2016-07-19 02:01:59 +02:00
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
minetest.get_node_timer(pos):start(math.random(2400,4800))
|
|
|
|
end,
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
|
|
|
"default:acacia_sapling",
|
|
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
|
|
-- minp_relative.y = 1 because sapling pos has been checked
|
|
|
|
{x = -4, y = 1, z = -4},
|
|
|
|
{x = 4, y = 6, z = 4},
|
|
|
|
-- maximum interval of interior volume check
|
|
|
|
4)
|
|
|
|
|
|
|
|
return itemstack
|
|
|
|
end,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
minetest.register_node("default:aspen_tree", {
|
|
|
|
description = "Aspen Tree",
|
|
|
|
tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png",
|
|
|
|
"default_aspen_tree.png"},
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
is_ground_content = false,
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3},
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
|
|
|
|
on_place = minetest.rotate_node
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:aspen_wood", {
|
|
|
|
description = "Aspen Wood Planks",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
tiles = {"default_aspen_wood.png"},
|
|
|
|
is_ground_content = false,
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:aspen_leaves", {
|
|
|
|
description = "Aspen Leaves",
|
|
|
|
drawtype = "allfaces_optional",
|
|
|
|
tiles = {"default_aspen_leaves.png"},
|
|
|
|
waving = 1,
|
|
|
|
paramtype = "light",
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
|
|
|
|
drop = {
|
|
|
|
max_items = 1,
|
|
|
|
items = {
|
|
|
|
{items = {"default:aspen_sapling"}, rarity = 20},
|
|
|
|
{items = {"default:aspen_leaves"}}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
|
|
|
|
after_place_node = default.after_place_leaves,
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:aspen_sapling", {
|
|
|
|
description = "Aspen Tree Sapling",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
tiles = {"default_aspen_sapling.png"},
|
|
|
|
inventory_image = "default_aspen_sapling.png",
|
|
|
|
wield_image = "default_aspen_sapling.png",
|
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
walkable = false,
|
2016-03-07 06:39:07 +01:00
|
|
|
on_timer = default.grow_sapling,
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16}
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
},
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {snappy = 2, dig_immediate = 3, flammable = 3,
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
attached_node = 1, sapling = 1},
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2016-07-19 02:01:59 +02:00
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
minetest.get_node_timer(pos):start(math.random(2400,4800))
|
|
|
|
end,
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
|
|
|
"default:aspen_sapling",
|
|
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
|
|
-- minp_relative.y = 1 because sapling pos has been checked
|
|
|
|
{x = -2, y = 1, z = -2},
|
|
|
|
{x = 2, y = 12, z = 2},
|
|
|
|
-- maximum interval of interior volume check
|
|
|
|
4)
|
|
|
|
|
|
|
|
return itemstack
|
|
|
|
end,
|
Aspen trees.
Adds a birch-like tree to the default_game. Aspen was chosen on
purpose instead of birch, as several birch tree mods already exist
and choosing a different name avoids any conflicts.
Schematics were made for both normal and sapling version, assuring
saplings will not be able to grief. The shape of the Aspen is "fanning
out at the top" and provides an easy tree to walk under, but still a
somewhat thick cover. The Aspen trunk is 4 to 6 blocks tall, with up
to three layers of leaves on top, making it slightly taller than an
Apple tree, but shorter than a Pine tree, which provides a good blend.
Textures were painted from scratch, except tree_top and _wood
variants, which are color modified versions of the pine_wood
variants. Appropriate licenses have been chosen for the new textures.
The leaf texture is light enough to contrast other trees, but dark
enough to offset against our light default grass color. The leaves
are drawn in the typical minetest default fashion with plenty of
transparancy, but enough definition to suggest that you're seeing
something that looks like leaves. The placement of leaves in the
schematic also suggests the top of the tree is sparse and you can
see the sky through the leaves.
Sapling texture is both traditional and different, with lush green
leaves and a well-defined stem, but slightly stick-like and skinny,
as these plants tend to grow up first, then out.
Add fallen Aspen logs. We make these logs a minimum of 2 blocks long,
and up to 3. This allows us to make these logs a place where both
red and brown mushrooms can be found, to these may be attractive to
players. However, the spawn rate for these has been reduced a lot
compared to the other logs, to account for the scarcity of Aspen.
Add stairs, slabs for these wood types as well.
Mapgen will place these trees in deciduous forests only, but in
a way that the biome is a range between entirely Apple trees, and
mostly entirely Aspen trees, with a bias to Apple trees. To make
fallen logs somewhat correlated with trees, we modify the planting
of Apple trees and logs to use perlin noise and not fill ratio,
otherwise you'd always end up with Apple logs in Aspen tree areas,
which would be suspicious. There still is a bit of a mix.
2016-01-05 02:56:20 +01:00
|
|
|
})
|
2016-07-19 02:01:59 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
--
|
|
|
|
-- Ores
|
|
|
|
--
|
|
|
|
|
|
|
|
minetest.register_node("default:stone_with_coal", {
|
|
|
|
description = "Coal Ore",
|
|
|
|
tiles = {"default_stone.png^default_mineral_coal.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3},
|
2014-12-07 16:29:36 +01:00
|
|
|
drop = 'default:coal_lump',
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:coalblock", {
|
|
|
|
description = "Coal Block",
|
|
|
|
tiles = {"default_coal_block.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
minetest.register_node("default:stone_with_iron", {
|
|
|
|
description = "Iron Ore",
|
|
|
|
tiles = {"default_stone.png^default_mineral_iron.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 2},
|
2014-12-07 16:29:36 +01:00
|
|
|
drop = 'default:iron_lump',
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:steelblock", {
|
|
|
|
description = "Steel Block",
|
|
|
|
tiles = {"default_steel_block.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 1, level = 2},
|
2016-10-20 01:34:22 +02:00
|
|
|
sounds = default.node_sound_metal_defaults(),
|
2014-12-07 16:29:36 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
minetest.register_node("default:stone_with_copper", {
|
|
|
|
description = "Copper Ore",
|
|
|
|
tiles = {"default_stone.png^default_mineral_copper.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 2},
|
2014-12-07 16:29:36 +01:00
|
|
|
drop = 'default:copper_lump',
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:copperblock", {
|
|
|
|
description = "Copper Block",
|
|
|
|
tiles = {"default_copper_block.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 1, level = 2},
|
2016-10-20 01:34:22 +02:00
|
|
|
sounds = default.node_sound_metal_defaults(),
|
2014-12-07 16:29:36 +01:00
|
|
|
})
|
|
|
|
|
2017-04-19 03:48:00 +02:00
|
|
|
|
|
|
|
minetest.register_node("default:stone_with_tin", {
|
|
|
|
description = "Tin Ore",
|
|
|
|
tiles = {"default_stone.png^default_mineral_tin.png"},
|
|
|
|
groups = {cracky = 2},
|
|
|
|
drop = "default:tin_lump",
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:tinblock", {
|
|
|
|
description = "Tin Block",
|
|
|
|
tiles = {"default_tin_block.png"},
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 1, level = 2},
|
|
|
|
sounds = default.node_sound_metal_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:bronzeblock", {
|
|
|
|
description = "Bronze Block",
|
|
|
|
tiles = {"default_bronze_block.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 1, level = 2},
|
2016-10-20 01:34:22 +02:00
|
|
|
sounds = default.node_sound_metal_defaults(),
|
2014-12-07 16:29:36 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
minetest.register_node("default:stone_with_mese", {
|
|
|
|
description = "Mese Ore",
|
|
|
|
tiles = {"default_stone.png^default_mineral_mese.png"},
|
2015-03-05 16:46:49 +01:00
|
|
|
groups = {cracky = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
drop = "default:mese_crystal",
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:mese", {
|
|
|
|
description = "Mese Block",
|
|
|
|
tiles = {"default_mese_block.png"},
|
2015-03-05 16:46:49 +01:00
|
|
|
paramtype = "light",
|
|
|
|
groups = {cracky = 1, level = 2},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
2015-03-05 16:46:49 +01:00
|
|
|
light_source = 3,
|
2014-12-07 16:29:36 +01:00
|
|
|
})
|
2015-02-26 09:21:28 +01:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
|
|
|
|
minetest.register_node("default:stone_with_gold", {
|
|
|
|
description = "Gold Ore",
|
|
|
|
tiles = {"default_stone.png^default_mineral_gold.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 2},
|
2014-12-07 16:29:36 +01:00
|
|
|
drop = "default:gold_lump",
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:goldblock", {
|
|
|
|
description = "Gold Block",
|
|
|
|
tiles = {"default_gold_block.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 1},
|
2016-10-20 01:34:22 +02:00
|
|
|
sounds = default.node_sound_metal_defaults(),
|
2014-12-07 16:29:36 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
minetest.register_node("default:stone_with_diamond", {
|
|
|
|
description = "Diamond Ore",
|
|
|
|
tiles = {"default_stone.png^default_mineral_diamond.png"},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
drop = "default:diamond",
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:diamondblock", {
|
|
|
|
description = "Diamond Block",
|
|
|
|
tiles = {"default_diamond_block.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 1, level = 3},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Plantlife (non-cubic)
|
|
|
|
--
|
|
|
|
|
|
|
|
minetest.register_node("default:cactus", {
|
|
|
|
description = "Cactus",
|
2015-08-25 05:11:46 +02:00
|
|
|
tiles = {"default_cactus_top.png", "default_cactus_top.png",
|
|
|
|
"default_cactus_side.png"},
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype2 = "facedir",
|
2016-12-04 07:55:32 +01:00
|
|
|
groups = {choppy = 3},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
on_place = minetest.rotate_node,
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:papyrus", {
|
|
|
|
description = "Papyrus",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
tiles = {"default_papyrus.png"},
|
|
|
|
inventory_image = "default_papyrus.png",
|
|
|
|
wield_image = "default_papyrus.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2014-11-29 11:23:45 +01:00
|
|
|
sunlight_propagates = true,
|
2013-05-19 18:43:04 +02:00
|
|
|
walkable = false,
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {snappy = 3, flammable = 2},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
|
|
|
|
after_dig_node = function(pos, node, metadata, digger)
|
|
|
|
default.dig_up(pos, node, digger)
|
|
|
|
end,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:dry_shrub", {
|
|
|
|
description = "Dry Shrub",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
waving = 1,
|
|
|
|
tiles = {"default_dry_shrub.png"},
|
|
|
|
inventory_image = "default_dry_shrub.png",
|
|
|
|
wield_image = "default_dry_shrub.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2014-11-29 11:23:45 +01:00
|
|
|
sunlight_propagates = true,
|
2013-05-19 18:43:04 +02:00
|
|
|
walkable = false,
|
2014-12-07 16:29:36 +01:00
|
|
|
buildable_to = true,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {snappy = 3, flammable = 3, attached_node = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
selection_box = {
|
2014-12-07 16:29:36 +01:00
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16},
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:junglegrass", {
|
|
|
|
description = "Jungle Grass",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
waving = 1,
|
2017-02-12 00:06:47 +01:00
|
|
|
visual_scale = 1.69,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_junglegrass.png"},
|
|
|
|
inventory_image = "default_junglegrass.png",
|
|
|
|
wield_image = "default_junglegrass.png",
|
|
|
|
paramtype = "light",
|
2014-11-29 11:23:45 +01:00
|
|
|
sunlight_propagates = true,
|
2014-12-07 16:29:36 +01:00
|
|
|
walkable = false,
|
|
|
|
buildable_to = true,
|
2017-03-17 06:06:57 +01:00
|
|
|
groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 1.19, 7 / 16},
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2015-08-25 05:11:46 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:grass_1", {
|
|
|
|
description = "Grass",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
waving = 1,
|
|
|
|
tiles = {"default_grass_1.png"},
|
2014-12-12 17:47:31 +01:00
|
|
|
-- Use texture of a taller grass stage in inventory
|
2014-12-07 16:29:36 +01:00
|
|
|
inventory_image = "default_grass_3.png",
|
|
|
|
wield_image = "default_grass_3.png",
|
|
|
|
paramtype = "light",
|
2014-11-29 11:23:45 +01:00
|
|
|
sunlight_propagates = true,
|
2014-12-07 16:29:36 +01:00
|
|
|
walkable = false,
|
|
|
|
buildable_to = true,
|
2016-10-24 20:34:00 +02:00
|
|
|
groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16},
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
-- place a random grass node
|
2015-08-25 05:11:46 +02:00
|
|
|
local stack = ItemStack("default:grass_" .. math.random(1,5))
|
2014-12-07 16:29:36 +01:00
|
|
|
local ret = minetest.item_place(stack, placer, pointed_thing)
|
2015-08-25 05:11:46 +02:00
|
|
|
return ItemStack("default:grass_1 " ..
|
|
|
|
itemstack:get_count() - (1 - ret:get_count()))
|
2014-12-07 16:29:36 +01:00
|
|
|
end,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2015-08-25 05:11:46 +02:00
|
|
|
for i = 2, 5 do
|
|
|
|
minetest.register_node("default:grass_" .. i, {
|
2014-12-07 16:29:36 +01:00
|
|
|
description = "Grass",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
waving = 1,
|
2015-08-25 05:11:46 +02:00
|
|
|
tiles = {"default_grass_" .. i .. ".png"},
|
|
|
|
inventory_image = "default_grass_" .. i .. ".png",
|
|
|
|
wield_image = "default_grass_" .. i .. ".png",
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype = "light",
|
2014-11-29 11:23:45 +01:00
|
|
|
sunlight_propagates = true,
|
2014-12-07 16:29:36 +01:00
|
|
|
walkable = false,
|
|
|
|
buildable_to = true,
|
|
|
|
drop = "default:grass_1",
|
2016-03-21 10:23:12 +01:00
|
|
|
groups = {snappy = 3, flora = 1, attached_node = 1,
|
2016-10-24 20:34:00 +02:00
|
|
|
not_in_creative_inventory = 1, grass = 1, flammable = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16},
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
2015-08-25 05:11:46 +02:00
|
|
|
|
2015-07-17 16:53:56 +02:00
|
|
|
minetest.register_node("default:dry_grass_1", {
|
|
|
|
description = "Dry Grass",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
waving = 1,
|
|
|
|
tiles = {"default_dry_grass_1.png"},
|
|
|
|
inventory_image = "default_dry_grass_3.png",
|
|
|
|
wield_image = "default_dry_grass_3.png",
|
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
walkable = false,
|
|
|
|
buildable_to = true,
|
2016-04-16 22:53:03 +02:00
|
|
|
groups = {snappy = 3, flammable = 3, flora = 1,
|
|
|
|
attached_node = 1, dry_grass = 1},
|
2015-07-17 16:53:56 +02:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16},
|
2015-07-17 16:53:56 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
-- place a random dry grass node
|
2015-08-25 05:11:46 +02:00
|
|
|
local stack = ItemStack("default:dry_grass_" .. math.random(1, 5))
|
2015-07-17 16:53:56 +02:00
|
|
|
local ret = minetest.item_place(stack, placer, pointed_thing)
|
2015-08-25 05:11:46 +02:00
|
|
|
return ItemStack("default:dry_grass_1 " ..
|
|
|
|
itemstack:get_count() - (1 - ret:get_count()))
|
2015-07-17 16:53:56 +02:00
|
|
|
end,
|
|
|
|
})
|
|
|
|
|
2015-08-25 05:11:46 +02:00
|
|
|
for i = 2, 5 do
|
|
|
|
minetest.register_node("default:dry_grass_" .. i, {
|
2015-07-01 14:03:14 +02:00
|
|
|
description = "Dry Grass",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
waving = 1,
|
2015-08-25 05:11:46 +02:00
|
|
|
tiles = {"default_dry_grass_" .. i .. ".png"},
|
|
|
|
inventory_image = "default_dry_grass_" .. i .. ".png",
|
|
|
|
wield_image = "default_dry_grass_" .. i .. ".png",
|
2015-07-01 14:03:14 +02:00
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
walkable = false,
|
|
|
|
buildable_to = true,
|
2016-04-16 22:53:03 +02:00
|
|
|
groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1,
|
|
|
|
not_in_creative_inventory=1, dry_grass = 1},
|
2015-07-01 14:03:14 +02:00
|
|
|
drop = "default:dry_grass_1",
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
2016-11-05 06:58:12 +01:00
|
|
|
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -1 / 16, 6 / 16},
|
2015-07-01 14:03:14 +02:00
|
|
|
},
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
2016-10-12 02:49:31 +02:00
|
|
|
|
2016-10-13 01:48:56 +02:00
|
|
|
minetest.register_node("default:bush_stem", {
|
|
|
|
description = "Bush Stem",
|
|
|
|
drawtype = "plantlike",
|
2017-02-12 00:06:47 +01:00
|
|
|
visual_scale = 1.41,
|
2016-10-13 01:48:56 +02:00
|
|
|
tiles = {"default_bush_stem.png"},
|
|
|
|
inventory_image = "default_bush_stem.png",
|
|
|
|
wield_image = "default_bush_stem.png",
|
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
2016-11-05 06:58:12 +01:00
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.54, 7 / 16},
|
|
|
|
},
|
2016-10-13 01:48:56 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:bush_leaves", {
|
|
|
|
description = "Bush Leaves",
|
|
|
|
drawtype = "allfaces_optional",
|
|
|
|
waving = 1,
|
|
|
|
tiles = {"default_leaves_simple.png"},
|
|
|
|
paramtype = "light",
|
|
|
|
groups = {snappy = 3, flammable = 2, leaves = 1},
|
2017-04-12 10:25:21 +02:00
|
|
|
drop = {
|
|
|
|
max_items = 1,
|
|
|
|
items = {
|
|
|
|
{items = {"default:bush_sapling"}, rarity = 5},
|
|
|
|
{items = {"default:bush_leaves"}}
|
|
|
|
}
|
|
|
|
},
|
2016-10-13 01:48:56 +02:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2017-03-09 21:18:58 +01:00
|
|
|
|
|
|
|
after_place_node = default.after_place_leaves,
|
2016-10-13 01:48:56 +02:00
|
|
|
})
|
|
|
|
|
2017-04-12 10:25:21 +02:00
|
|
|
minetest.register_node("default:bush_sapling", {
|
|
|
|
description = "Bush Sapling",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
tiles = {"default_bush_sapling.png"},
|
|
|
|
inventory_image = "default_bush_sapling.png",
|
|
|
|
wield_image = "default_bush_sapling.png",
|
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
walkable = false,
|
|
|
|
on_timer = default.grow_sapling,
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16}
|
|
|
|
},
|
|
|
|
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
|
|
|
|
attached_node = 1, sapling = 1},
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
minetest.get_node_timer(pos):start(math.random(1200, 2400))
|
|
|
|
end,
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
|
|
|
"default:bush_sapling",
|
|
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
|
|
{x = -1, y = 0, z = -1},
|
|
|
|
{x = 1, y = 1, z = 1},
|
|
|
|
-- maximum interval of interior volume check
|
|
|
|
2)
|
|
|
|
|
|
|
|
return itemstack
|
|
|
|
end,
|
|
|
|
})
|
|
|
|
|
2016-10-13 01:48:56 +02:00
|
|
|
minetest.register_node("default:acacia_bush_stem", {
|
|
|
|
description = "Acacia Bush Stem",
|
|
|
|
drawtype = "plantlike",
|
2017-02-12 00:06:47 +01:00
|
|
|
visual_scale = 1.41,
|
2016-10-13 01:48:56 +02:00
|
|
|
tiles = {"default_acacia_bush_stem.png"},
|
|
|
|
inventory_image = "default_acacia_bush_stem.png",
|
|
|
|
wield_image = "default_acacia_bush_stem.png",
|
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
2016-11-05 06:58:12 +01:00
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.54, 7 / 16},
|
|
|
|
},
|
2016-10-13 01:48:56 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:acacia_bush_leaves", {
|
|
|
|
description = "Acacia Bush Leaves",
|
|
|
|
drawtype = "allfaces_optional",
|
|
|
|
waving = 1,
|
2016-11-02 18:58:06 +01:00
|
|
|
tiles = {"default_acacia_leaves_simple.png"},
|
2016-10-13 01:48:56 +02:00
|
|
|
paramtype = "light",
|
|
|
|
groups = {snappy = 3, flammable = 2, leaves = 1},
|
2017-04-12 10:25:21 +02:00
|
|
|
drop = {
|
|
|
|
max_items = 1,
|
|
|
|
items = {
|
|
|
|
{items = {"default:acacia_bush_sapling"}, rarity = 5},
|
|
|
|
{items = {"default:acacia_bush_leaves"}}
|
|
|
|
}
|
|
|
|
},
|
2016-10-13 01:48:56 +02:00
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
2017-03-09 21:18:58 +01:00
|
|
|
|
|
|
|
after_place_node = default.after_place_leaves,
|
2016-10-13 01:48:56 +02:00
|
|
|
})
|
|
|
|
|
2017-04-12 10:25:21 +02:00
|
|
|
minetest.register_node("default:acacia_bush_sapling", {
|
|
|
|
description = "Acacia Bush Sapling",
|
|
|
|
drawtype = "plantlike",
|
|
|
|
tiles = {"default_acacia_bush_sapling.png"},
|
|
|
|
inventory_image = "default_acacia_bush_sapling.png",
|
|
|
|
wield_image = "default_acacia_bush_sapling.png",
|
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
walkable = false,
|
|
|
|
on_timer = default.grow_sapling,
|
|
|
|
selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 2 / 16, 3 / 16}
|
|
|
|
},
|
|
|
|
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
|
|
|
|
attached_node = 1, sapling = 1},
|
|
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
minetest.get_node_timer(pos):start(math.random(1200, 2400))
|
|
|
|
end,
|
|
|
|
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
|
|
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
|
|
|
|
"default:acacia_bush_sapling",
|
|
|
|
-- minp, maxp to be checked, relative to sapling pos
|
|
|
|
{x = -1, y = 0, z = -1},
|
|
|
|
{x = 1, y = 1, z = 1},
|
|
|
|
-- maximum interval of interior volume check
|
|
|
|
2)
|
|
|
|
|
|
|
|
return itemstack
|
|
|
|
end,
|
|
|
|
})
|
|
|
|
|
2016-10-13 01:48:56 +02:00
|
|
|
|
2016-10-12 02:49:31 +02:00
|
|
|
--
|
|
|
|
-- Corals
|
|
|
|
--
|
|
|
|
|
|
|
|
minetest.register_node("default:coral_brown", {
|
|
|
|
description = "Brown Coral",
|
|
|
|
tiles = {"default_coral_brown.png"},
|
|
|
|
groups = {cracky = 3},
|
|
|
|
drop = "default:coral_skeleton",
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:coral_orange", {
|
|
|
|
description = "Orange Coral",
|
|
|
|
tiles = {"default_coral_orange.png"},
|
|
|
|
groups = {cracky = 3},
|
|
|
|
drop = "default:coral_skeleton",
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:coral_skeleton", {
|
|
|
|
description = "Coral Skeleton",
|
|
|
|
tiles = {"default_coral_skeleton.png"},
|
|
|
|
groups = {cracky = 3},
|
|
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
})
|
|
|
|
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
--
|
|
|
|
-- Liquids
|
|
|
|
--
|
|
|
|
|
|
|
|
minetest.register_node("default:water_source", {
|
|
|
|
description = "Water Source",
|
|
|
|
drawtype = "liquid",
|
|
|
|
tiles = {
|
2013-05-19 18:43:04 +02:00
|
|
|
{
|
2014-12-07 16:29:36 +01:00
|
|
|
name = "default_water_source_animated.png",
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
2014-12-15 13:27:20 +01:00
|
|
|
length = 2.0,
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
special_tiles = {
|
|
|
|
-- New-style water source material (mostly unused)
|
2013-05-19 18:43:04 +02:00
|
|
|
{
|
2014-12-07 16:29:36 +01:00
|
|
|
name = "default_water_source_animated.png",
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
2014-12-15 13:27:20 +01:00
|
|
|
length = 2.0,
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
backface_culling = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
|
|
|
},
|
2014-12-07 15:17:09 +01:00
|
|
|
alpha = 160,
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
|
|
|
walkable = false,
|
|
|
|
pointable = false,
|
|
|
|
diggable = false,
|
|
|
|
buildable_to = true,
|
2015-04-05 01:40:23 +02:00
|
|
|
is_ground_content = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = "",
|
2013-08-02 08:12:20 +02:00
|
|
|
drowning = 1,
|
2014-12-07 16:29:36 +01:00
|
|
|
liquidtype = "source",
|
2013-05-19 18:43:04 +02:00
|
|
|
liquid_alternative_flowing = "default:water_flowing",
|
|
|
|
liquid_alternative_source = "default:water_source",
|
2014-12-07 15:17:09 +01:00
|
|
|
liquid_viscosity = 1,
|
2015-12-06 04:09:29 +01:00
|
|
|
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
|
2016-11-10 05:04:20 +01:00
|
|
|
groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1},
|
2016-11-17 03:41:38 +01:00
|
|
|
sounds = default.node_sound_water_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:water_flowing", {
|
|
|
|
description = "Flowing Water",
|
|
|
|
drawtype = "flowingliquid",
|
|
|
|
tiles = {"default_water.png"},
|
2013-05-19 18:43:04 +02:00
|
|
|
special_tiles = {
|
|
|
|
{
|
2014-12-15 13:27:20 +01:00
|
|
|
name = "default_water_flowing_animated.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
backface_culling = false,
|
2014-12-07 16:29:36 +01:00
|
|
|
animation = {
|
2014-12-15 13:27:20 +01:00
|
|
|
type = "vertical_frames",
|
2014-12-07 16:29:36 +01:00
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
2014-12-15 13:27:20 +01:00
|
|
|
length = 0.8,
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2014-12-15 13:27:20 +01:00
|
|
|
name = "default_water_flowing_animated.png",
|
2014-12-07 16:29:36 +01:00
|
|
|
backface_culling = true,
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
2014-12-15 13:27:20 +01:00
|
|
|
length = 0.8,
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
},
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
2014-12-07 15:17:09 +01:00
|
|
|
alpha = 160,
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype2 = "flowingliquid",
|
2013-05-19 18:43:04 +02:00
|
|
|
walkable = false,
|
|
|
|
pointable = false,
|
|
|
|
diggable = false,
|
|
|
|
buildable_to = true,
|
2015-04-05 01:40:23 +02:00
|
|
|
is_ground_content = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = "",
|
2013-08-02 08:12:20 +02:00
|
|
|
drowning = 1,
|
2014-12-07 16:29:36 +01:00
|
|
|
liquidtype = "flowing",
|
2013-05-19 18:43:04 +02:00
|
|
|
liquid_alternative_flowing = "default:water_flowing",
|
|
|
|
liquid_alternative_source = "default:water_source",
|
2014-12-07 15:17:09 +01:00
|
|
|
liquid_viscosity = 1,
|
2015-12-06 04:09:29 +01:00
|
|
|
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {water = 3, liquid = 3, puts_out_fire = 1,
|
2016-11-10 05:04:20 +01:00
|
|
|
not_in_creative_inventory = 1, cools_lava = 1},
|
2016-11-17 03:41:38 +01:00
|
|
|
sounds = default.node_sound_water_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
|
2015-04-17 07:50:06 +02:00
|
|
|
minetest.register_node("default:river_water_source", {
|
|
|
|
description = "River Water Source",
|
|
|
|
drawtype = "liquid",
|
|
|
|
tiles = {
|
|
|
|
{
|
2015-05-30 08:20:25 +02:00
|
|
|
name = "default_river_water_source_animated.png",
|
2015-04-17 07:50:06 +02:00
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
|
|
|
length = 2.0,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
special_tiles = {
|
|
|
|
{
|
2015-05-30 08:20:25 +02:00
|
|
|
name = "default_river_water_source_animated.png",
|
2015-04-17 07:50:06 +02:00
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
|
|
|
length = 2.0,
|
|
|
|
},
|
|
|
|
backface_culling = false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
alpha = 160,
|
|
|
|
paramtype = "light",
|
|
|
|
walkable = false,
|
|
|
|
pointable = false,
|
|
|
|
diggable = false,
|
|
|
|
buildable_to = true,
|
|
|
|
is_ground_content = false,
|
|
|
|
drop = "",
|
|
|
|
drowning = 1,
|
|
|
|
liquidtype = "source",
|
|
|
|
liquid_alternative_flowing = "default:river_water_flowing",
|
|
|
|
liquid_alternative_source = "default:river_water_source",
|
|
|
|
liquid_viscosity = 1,
|
|
|
|
liquid_renewable = false,
|
|
|
|
liquid_range = 2,
|
2015-12-06 04:09:29 +01:00
|
|
|
post_effect_color = {a = 103, r = 30, g = 76, b = 90},
|
2016-11-10 05:04:20 +01:00
|
|
|
groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1},
|
2016-11-17 03:41:38 +01:00
|
|
|
sounds = default.node_sound_water_defaults(),
|
2015-04-17 07:50:06 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("default:river_water_flowing", {
|
|
|
|
description = "Flowing River Water",
|
|
|
|
drawtype = "flowingliquid",
|
2015-05-30 08:20:25 +02:00
|
|
|
tiles = {"default_river_water.png"},
|
2015-04-17 07:50:06 +02:00
|
|
|
special_tiles = {
|
|
|
|
{
|
2015-05-30 08:20:25 +02:00
|
|
|
name = "default_river_water_flowing_animated.png",
|
2015-04-17 07:50:06 +02:00
|
|
|
backface_culling = false,
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
|
|
|
length = 0.8,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2015-05-30 08:20:25 +02:00
|
|
|
name = "default_river_water_flowing_animated.png",
|
2015-04-17 07:50:06 +02:00
|
|
|
backface_culling = true,
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
|
|
|
length = 0.8,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
alpha = 160,
|
|
|
|
paramtype = "light",
|
|
|
|
paramtype2 = "flowingliquid",
|
|
|
|
walkable = false,
|
|
|
|
pointable = false,
|
|
|
|
diggable = false,
|
|
|
|
buildable_to = true,
|
|
|
|
is_ground_content = false,
|
|
|
|
drop = "",
|
|
|
|
drowning = 1,
|
|
|
|
liquidtype = "flowing",
|
|
|
|
liquid_alternative_flowing = "default:river_water_flowing",
|
|
|
|
liquid_alternative_source = "default:river_water_source",
|
|
|
|
liquid_viscosity = 1,
|
|
|
|
liquid_renewable = false,
|
|
|
|
liquid_range = 2,
|
2015-12-06 04:09:29 +01:00
|
|
|
post_effect_color = {a = 103, r = 30, g = 76, b = 90},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {water = 3, liquid = 3, puts_out_fire = 1,
|
2016-11-10 05:04:20 +01:00
|
|
|
not_in_creative_inventory = 1, cools_lava = 1},
|
2016-11-17 03:41:38 +01:00
|
|
|
sounds = default.node_sound_water_defaults(),
|
2015-04-17 07:50:06 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:lava_source", {
|
|
|
|
description = "Lava Source",
|
|
|
|
drawtype = "liquid",
|
|
|
|
tiles = {
|
2013-05-19 18:43:04 +02:00
|
|
|
{
|
2014-12-07 16:29:36 +01:00
|
|
|
name = "default_lava_source_animated.png",
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
2014-12-15 13:27:20 +01:00
|
|
|
length = 3.0,
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
special_tiles = {
|
|
|
|
-- New-style lava source material (mostly unused)
|
2013-05-19 18:43:04 +02:00
|
|
|
{
|
2014-12-07 16:29:36 +01:00
|
|
|
name = "default_lava_source_animated.png",
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
2014-12-15 13:27:20 +01:00
|
|
|
length = 3.0,
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
backface_culling = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
paramtype = "light",
|
2014-12-07 15:17:09 +01:00
|
|
|
light_source = default.LIGHT_MAX - 1,
|
2013-05-19 18:43:04 +02:00
|
|
|
walkable = false,
|
|
|
|
pointable = false,
|
|
|
|
diggable = false,
|
|
|
|
buildable_to = true,
|
2015-04-05 01:40:23 +02:00
|
|
|
is_ground_content = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = "",
|
2013-08-02 08:12:20 +02:00
|
|
|
drowning = 1,
|
2014-12-07 16:29:36 +01:00
|
|
|
liquidtype = "source",
|
2013-05-19 18:43:04 +02:00
|
|
|
liquid_alternative_flowing = "default:lava_flowing",
|
|
|
|
liquid_alternative_source = "default:lava_source",
|
2014-12-07 15:17:09 +01:00
|
|
|
liquid_viscosity = 7,
|
2013-05-19 18:43:04 +02:00
|
|
|
liquid_renewable = false,
|
2014-12-07 16:29:36 +01:00
|
|
|
damage_per_second = 4 * 2,
|
2015-12-06 04:09:29 +01:00
|
|
|
post_effect_color = {a = 191, r = 255, g = 64, b = 0},
|
2016-07-07 18:25:42 +02:00
|
|
|
groups = {lava = 3, liquid = 2, igniter = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:lava_flowing", {
|
|
|
|
description = "Flowing Lava",
|
|
|
|
drawtype = "flowingliquid",
|
|
|
|
tiles = {"default_lava.png"},
|
2013-05-19 18:43:04 +02:00
|
|
|
special_tiles = {
|
|
|
|
{
|
2014-12-15 13:27:20 +01:00
|
|
|
name = "default_lava_flowing_animated.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
backface_culling = false,
|
2014-12-07 16:29:36 +01:00
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
2014-12-15 13:27:20 +01:00
|
|
|
length = 3.3,
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2014-12-15 13:27:20 +01:00
|
|
|
name = "default_lava_flowing_animated.png",
|
2014-12-07 16:29:36 +01:00
|
|
|
backface_culling = true,
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 16,
|
|
|
|
aspect_h = 16,
|
2014-12-15 13:27:20 +01:00
|
|
|
length = 3.3,
|
2014-12-07 16:29:36 +01:00
|
|
|
},
|
|
|
|
},
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
|
|
|
paramtype = "light",
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype2 = "flowingliquid",
|
2014-12-07 15:17:09 +01:00
|
|
|
light_source = default.LIGHT_MAX - 1,
|
2013-05-19 18:43:04 +02:00
|
|
|
walkable = false,
|
|
|
|
pointable = false,
|
|
|
|
diggable = false,
|
|
|
|
buildable_to = true,
|
2015-04-05 01:40:23 +02:00
|
|
|
is_ground_content = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
drop = "",
|
2013-08-02 08:12:20 +02:00
|
|
|
drowning = 1,
|
2014-12-07 16:29:36 +01:00
|
|
|
liquidtype = "flowing",
|
2013-05-19 18:43:04 +02:00
|
|
|
liquid_alternative_flowing = "default:lava_flowing",
|
|
|
|
liquid_alternative_source = "default:lava_source",
|
2014-12-07 15:17:09 +01:00
|
|
|
liquid_viscosity = 7,
|
2013-05-19 18:43:04 +02:00
|
|
|
liquid_renewable = false,
|
2014-12-07 16:29:36 +01:00
|
|
|
damage_per_second = 4 * 2,
|
2015-12-06 04:09:29 +01:00
|
|
|
post_effect_color = {a = 191, r = 255, g = 64, b = 0},
|
2016-07-07 18:25:42 +02:00
|
|
|
groups = {lava = 3, liquid = 2, igniter = 1,
|
2015-08-25 05:11:46 +02:00
|
|
|
not_in_creative_inventory = 1},
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
--
|
|
|
|
-- Tools / "Advanced" crafting / Non-"natural"
|
|
|
|
--
|
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
local function get_chest_formspec(pos)
|
2015-08-25 05:11:46 +02:00
|
|
|
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
|
2013-06-03 21:56:17 +02:00
|
|
|
local formspec =
|
2015-08-25 05:11:46 +02:00
|
|
|
"size[8,9]" ..
|
|
|
|
default.gui_bg ..
|
|
|
|
default.gui_bg_img ..
|
|
|
|
default.gui_slots ..
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
"list[nodemeta:" .. spos .. ";default:chest;0,0.3;8,4;]" ..
|
2015-08-25 05:11:46 +02:00
|
|
|
"list[current_player;main;0,4.85;8,1;]" ..
|
|
|
|
"list[current_player;main;0,6.08;8,3;8]" ..
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
"listring[nodemeta:" .. spos .. ";default:chest]" ..
|
2015-08-25 05:11:46 +02:00
|
|
|
"listring[current_player;main]" ..
|
2014-04-14 22:09:18 +02:00
|
|
|
default.get_hotbar_bg(0,4.85)
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
return formspec
|
2013-06-03 21:56:17 +02:00
|
|
|
end
|
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
local function chest_lid_obstructed(pos)
|
|
|
|
local above = { x = pos.x, y = pos.y + 1, z = pos.z }
|
|
|
|
local def = minetest.registered_nodes[minetest.get_node(above).name]
|
|
|
|
-- allow ladders, signs, wallmounted things and torches to not obstruct
|
|
|
|
if def.drawtype == "airlike" or
|
|
|
|
def.drawtype == "signlike" or
|
|
|
|
def.drawtype == "torchlike" or
|
|
|
|
(def.drawtype == "nodebox" and def.paramtype2 == "wallmounted") then
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
2014-12-07 16:29:36 +01:00
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
local open_chests = {}
|
|
|
|
|
|
|
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
|
|
if formname ~= "default:chest" then
|
|
|
|
return
|
|
|
|
end
|
2017-05-07 06:15:34 +02:00
|
|
|
if not player or not fields.quit then
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
return
|
|
|
|
end
|
|
|
|
local pn = player:get_player_name()
|
|
|
|
|
2017-05-07 06:15:34 +02:00
|
|
|
if not open_chests[pn] then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
local pos = open_chests[pn].pos
|
|
|
|
local sound = open_chests[pn].sound
|
|
|
|
local swap = open_chests[pn].swap
|
|
|
|
local node = minetest.get_node(pos)
|
|
|
|
|
|
|
|
open_chests[pn] = nil
|
|
|
|
for k, v in pairs(open_chests) do
|
|
|
|
if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap,
|
|
|
|
param2 = node.param2 })
|
|
|
|
minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10})
|
|
|
|
return true
|
|
|
|
end)
|
|
|
|
|
|
|
|
function default.register_chest(name, d)
|
|
|
|
local def = table.copy(d)
|
|
|
|
def.drawtype = "mesh"
|
|
|
|
def.visual = "mesh"
|
|
|
|
def.paramtype = "light"
|
|
|
|
def.paramtype2 = "facedir"
|
|
|
|
def.legacy_facedir_simple = true
|
|
|
|
def.is_ground_content = false
|
|
|
|
|
|
|
|
if def.protected then
|
|
|
|
def.on_construct = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("infotext", "Locked Chest")
|
|
|
|
meta:set_string("owner", "")
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
inv:set_size("default:chest", 8*4)
|
|
|
|
end
|
|
|
|
def.after_place_node = function(pos, placer)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("owner", placer:get_player_name() or "")
|
|
|
|
meta:set_string("infotext", "Locked Chest (owned by " ..
|
|
|
|
meta:get_string("owner") .. ")")
|
|
|
|
end
|
|
|
|
def.can_dig = function(pos,player)
|
|
|
|
local meta = minetest.get_meta(pos);
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
return inv:is_empty("default:chest") and
|
|
|
|
default.can_interact_with_node(player, pos)
|
|
|
|
end
|
|
|
|
def.allow_metadata_inventory_move = function(pos, from_list, from_index,
|
|
|
|
to_list, to_index, count, player)
|
|
|
|
if not default.can_interact_with_node(player, pos) then
|
|
|
|
return 0
|
|
|
|
end
|
|
|
|
return count
|
|
|
|
end
|
|
|
|
def.allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
|
|
if not default.can_interact_with_node(player, pos) then
|
|
|
|
return 0
|
|
|
|
end
|
|
|
|
return stack:get_count()
|
|
|
|
end
|
|
|
|
def.allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
|
|
|
if not default.can_interact_with_node(player, pos) then
|
|
|
|
return 0
|
|
|
|
end
|
|
|
|
return stack:get_count()
|
|
|
|
end
|
|
|
|
def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
|
|
|
if not default.can_interact_with_node(clicker, pos) then
|
|
|
|
return itemstack
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.sound_play(def.sound_open, {gain = 0.3,
|
|
|
|
pos = pos, max_hear_distance = 10})
|
|
|
|
if not chest_lid_obstructed(pos) then
|
|
|
|
minetest.swap_node(pos,
|
|
|
|
{ name = "default:" .. name .. "_open",
|
|
|
|
param2 = node.param2 })
|
|
|
|
end
|
|
|
|
minetest.after(0.2, minetest.show_formspec,
|
|
|
|
clicker:get_player_name(),
|
|
|
|
"default:chest", get_chest_formspec(pos))
|
|
|
|
open_chests[clicker:get_player_name()] = { pos = pos,
|
|
|
|
sound = def.sound_close, swap = name }
|
|
|
|
end
|
|
|
|
def.on_blast = function() end
|
|
|
|
def.on_key_use = function(pos, player)
|
|
|
|
local secret = minetest.get_meta(pos):get_string("key_lock_secret")
|
|
|
|
local itemstack = player:get_wielded_item()
|
|
|
|
local key_meta = itemstack:get_meta()
|
|
|
|
|
|
|
|
if key_meta:get_string("secret") == "" then
|
|
|
|
key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret)
|
|
|
|
itemstack:set_metadata("")
|
|
|
|
end
|
|
|
|
|
|
|
|
if secret ~= key_meta:get_string("secret") then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.show_formspec(
|
|
|
|
player:get_player_name(),
|
|
|
|
"default:chest_locked",
|
|
|
|
get_chest_formspec(pos)
|
|
|
|
)
|
|
|
|
end
|
|
|
|
def.on_skeleton_key_use = function(pos, player, newsecret)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
local owner = meta:get_string("owner")
|
|
|
|
local pn = player:get_player_name()
|
|
|
|
|
|
|
|
-- verify placer is owner of lockable chest
|
|
|
|
if owner ~= pn then
|
|
|
|
minetest.record_protection_violation(pos, pn)
|
|
|
|
minetest.chat_send_player(pn, "You do not own this chest.")
|
|
|
|
return nil
|
|
|
|
end
|
|
|
|
|
|
|
|
local secret = meta:get_string("key_lock_secret")
|
|
|
|
if secret == "" then
|
|
|
|
secret = newsecret
|
|
|
|
meta:set_string("key_lock_secret", secret)
|
|
|
|
end
|
|
|
|
|
|
|
|
return secret, "a locked chest", owner
|
|
|
|
end
|
|
|
|
else
|
|
|
|
def.on_construct = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("infotext", "Chest")
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
inv:set_size("default:chest", 8*4)
|
|
|
|
end
|
|
|
|
def.can_dig = function(pos,player)
|
|
|
|
local meta = minetest.get_meta(pos);
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
return inv:is_empty("default:chest")
|
|
|
|
end
|
|
|
|
def.on_rightclick = function(pos, node, clicker)
|
|
|
|
minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos,
|
|
|
|
max_hear_distance = 10})
|
|
|
|
if not chest_lid_obstructed(pos) then
|
|
|
|
minetest.swap_node(pos, {
|
|
|
|
name = "default:" .. name .. "_open",
|
|
|
|
param2 = node.param2 })
|
|
|
|
end
|
|
|
|
minetest.after(0.2, minetest.show_formspec,
|
|
|
|
clicker:get_player_name(),
|
|
|
|
"default:chest", get_chest_formspec(pos))
|
|
|
|
open_chests[clicker:get_player_name()] = { pos = pos,
|
|
|
|
sound = def.sound_close, swap = name }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def.on_metadata_inventory_move = function(pos, from_list, from_index,
|
2015-08-25 05:11:46 +02:00
|
|
|
to_list, to_index, count, player)
|
|
|
|
minetest.log("action", player:get_player_name() ..
|
|
|
|
" moves stuff in chest at " .. minetest.pos_to_string(pos))
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
end
|
|
|
|
def.on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
2015-08-25 05:11:46 +02:00
|
|
|
minetest.log("action", player:get_player_name() ..
|
2016-01-02 13:04:31 +01:00
|
|
|
" moves " .. stack:get_name() ..
|
|
|
|
" to chest at " .. minetest.pos_to_string(pos))
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
end
|
|
|
|
def.on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
2015-08-25 05:11:46 +02:00
|
|
|
minetest.log("action", player:get_player_name() ..
|
2016-01-02 13:04:31 +01:00
|
|
|
" takes " .. stack:get_name() ..
|
|
|
|
" from chest at " .. minetest.pos_to_string(pos))
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
end
|
|
|
|
def.on_blast = function(pos)
|
2016-04-16 04:21:45 +02:00
|
|
|
local drops = {}
|
|
|
|
default.get_inventory_drops(pos, "main", drops)
|
|
|
|
drops[#drops+1] = "default:chest"
|
|
|
|
minetest.remove_node(pos)
|
|
|
|
return drops
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
end
|
2014-12-07 16:29:36 +01:00
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
local def_opened = table.copy(def)
|
|
|
|
local def_closed = table.copy(def)
|
2017-02-26 18:24:12 +01:00
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
def_opened.mesh = "chest_open.obj"
|
|
|
|
def_opened.drop = "default:" .. name
|
|
|
|
def_opened.groups.not_in_creative_inventory = 1
|
|
|
|
def_opened.selection_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 },
|
|
|
|
}
|
|
|
|
def_opened.can_dig = function()
|
|
|
|
return false
|
|
|
|
end
|
Keys: Allow easy sharing of access without commands
This code adds the key concept to minetest_game, and integrates it
with lockable nodes. Currently supported lockable items are the Steel
Door, the Steel Trapdoor, and the Locked Chest.
The goal of this modification is to introduce a fine-grained multi-
player permission system that is intuitive and usable without any
console or chat commands, and doesn't require extra privileges to
be granted or setup. Keys can also physically be conveyed to other
players, adding to gameplay and adding some personality that is
preferable to console commands or editing formspecs.
A skeleton key can be crafted with 1 gold ingot. Skeleton keys can
then be matched to a lockable node by right-clicking the skeleton
key on a lockable node, which changes the skeleton key to a "key".
Gold was chosen as it's currently a not-so very useful item, and
therefore it's likely that players have some, but aren't really
using it for any purpose.
This key can subsequently used by any player to open or access that
lockable node, including retrieving items from Locked Chests, or
putting items in them.
They key is programmed to fit only the particular locked node it is
programmed to. This is achieved by storing a secret value in both
key and locked node. If this secret value doesn't match, the key
will not open the locked node. This allows many keys to be created
for one chest or door, but a key will only fit one node ever. The
secrets are stored in node, and item meta for the key.
If a locked node is removed, all keys that opened it are no longer
valid. Even if a new door/chest is placed in exactly the same spot,
the old keys will no longer fit that node.
Keys can be smelted back in gold ingots if they are no longer useful.
The method of storing a secret in nodemeta and itemstackmeta is secure
as there is no way for the client to create new items on the server
with a particular secret metadata value. Even if you could possible
create such an itemstack on the client, the server does not ever read
itemstackmeta from a client package.
The patch adds an API that allows other nodes and nodes added by
mods to use the same keys as well. The method how to implement this
is described in game_api.txt. The mod should add 2 callbacks to it's
node definition. Example code is given.
Textures are from PixelBOX, thanks to Gambit.
2015-12-26 20:16:49 +01:00
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
def_closed.mesh = "cube.obj"
|
|
|
|
|
|
|
|
minetest.register_node("default:" .. name, def_closed)
|
|
|
|
minetest.register_node("default:" .. name .. "_open", def_opened)
|
|
|
|
|
|
|
|
-- convert old chests to this new variant
|
|
|
|
minetest.register_lbm({
|
|
|
|
label = "update chests to opening chests",
|
|
|
|
name = "default:upgrade_" .. name,
|
|
|
|
nodenames = {"default:" .. name},
|
|
|
|
action = function(pos, node)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("formspec", nil)
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
local list = inv:get_list("main")
|
|
|
|
inv:set_list("main", nil)
|
|
|
|
inv:set_size("default:chest", 8*4)
|
|
|
|
inv:set_list("default:chest", list)
|
Keys: Allow easy sharing of access without commands
This code adds the key concept to minetest_game, and integrates it
with lockable nodes. Currently supported lockable items are the Steel
Door, the Steel Trapdoor, and the Locked Chest.
The goal of this modification is to introduce a fine-grained multi-
player permission system that is intuitive and usable without any
console or chat commands, and doesn't require extra privileges to
be granted or setup. Keys can also physically be conveyed to other
players, adding to gameplay and adding some personality that is
preferable to console commands or editing formspecs.
A skeleton key can be crafted with 1 gold ingot. Skeleton keys can
then be matched to a lockable node by right-clicking the skeleton
key on a lockable node, which changes the skeleton key to a "key".
Gold was chosen as it's currently a not-so very useful item, and
therefore it's likely that players have some, but aren't really
using it for any purpose.
This key can subsequently used by any player to open or access that
lockable node, including retrieving items from Locked Chests, or
putting items in them.
They key is programmed to fit only the particular locked node it is
programmed to. This is achieved by storing a secret value in both
key and locked node. If this secret value doesn't match, the key
will not open the locked node. This allows many keys to be created
for one chest or door, but a key will only fit one node ever. The
secrets are stored in node, and item meta for the key.
If a locked node is removed, all keys that opened it are no longer
valid. Even if a new door/chest is placed in exactly the same spot,
the old keys will no longer fit that node.
Keys can be smelted back in gold ingots if they are no longer useful.
The method of storing a secret in nodemeta and itemstackmeta is secure
as there is no way for the client to create new items on the server
with a particular secret metadata value. Even if you could possible
create such an itemstack on the client, the server does not ever read
itemstackmeta from a client package.
The patch adds an API that allows other nodes and nodes added by
mods to use the same keys as well. The method how to implement this
is described in game_api.txt. The mod should add 2 callbacks to it's
node definition. Example code is given.
Textures are from PixelBOX, thanks to Gambit.
2015-12-26 20:16:49 +01:00
|
|
|
end
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
})
|
|
|
|
end
|
Keys: Allow easy sharing of access without commands
This code adds the key concept to minetest_game, and integrates it
with lockable nodes. Currently supported lockable items are the Steel
Door, the Steel Trapdoor, and the Locked Chest.
The goal of this modification is to introduce a fine-grained multi-
player permission system that is intuitive and usable without any
console or chat commands, and doesn't require extra privileges to
be granted or setup. Keys can also physically be conveyed to other
players, adding to gameplay and adding some personality that is
preferable to console commands or editing formspecs.
A skeleton key can be crafted with 1 gold ingot. Skeleton keys can
then be matched to a lockable node by right-clicking the skeleton
key on a lockable node, which changes the skeleton key to a "key".
Gold was chosen as it's currently a not-so very useful item, and
therefore it's likely that players have some, but aren't really
using it for any purpose.
This key can subsequently used by any player to open or access that
lockable node, including retrieving items from Locked Chests, or
putting items in them.
They key is programmed to fit only the particular locked node it is
programmed to. This is achieved by storing a secret value in both
key and locked node. If this secret value doesn't match, the key
will not open the locked node. This allows many keys to be created
for one chest or door, but a key will only fit one node ever. The
secrets are stored in node, and item meta for the key.
If a locked node is removed, all keys that opened it are no longer
valid. Even if a new door/chest is placed in exactly the same spot,
the old keys will no longer fit that node.
Keys can be smelted back in gold ingots if they are no longer useful.
The method of storing a secret in nodemeta and itemstackmeta is secure
as there is no way for the client to create new items on the server
with a particular secret metadata value. Even if you could possible
create such an itemstack on the client, the server does not ever read
itemstackmeta from a client package.
The patch adds an API that allows other nodes and nodes added by
mods to use the same keys as well. The method how to implement this
is described in game_api.txt. The mod should add 2 callbacks to it's
node definition. Example code is given.
Textures are from PixelBOX, thanks to Gambit.
2015-12-26 20:16:49 +01:00
|
|
|
|
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
default.register_chest("chest", {
|
|
|
|
description = "Chest",
|
|
|
|
tiles = { "default_chest_wood.png" },
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
sound_open = "default_chest_open",
|
|
|
|
sound_close = "default_chest_close",
|
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2},
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
Improve Chest appearance - opening chests.
Adds a mesh model that appears when a chest is opened. The chest
stays visibly open as long as the player keeps it open. When the
player closes the formspec, the chest returns back to the closed
shape. While opening and closing, a sound plays.
A second person inspecting the chest will trigger a second sound
open. However, only after the last player closes the chest, does the
chest actually visually close and is the sound close played. This
keeps mesh updates to a minimum.
While it's possible that a server shutting down may cause chests
to remain open, this does not affect the chests' working matter,
and opening or closing them should fix them.
Old chests are converted to the new style by LBM. I previously
had them converted on open but this was unreliable, and LBMs
don't have that problem.
Open chests cannot be dug up. This prevents people from keeping
a chest open and digging it out as well, since closing a chest
would place a chest back (swap) at the spot. We could protect
against this, but it still messes up the client and causes a lot
of "missing node inventory" error messages otherwise. It's
unlikely but possible that a player lagging out causes a chest
to stay "open" and thus unremovable by digging, but there are
other ways of dealing with that - a server restart fixes that
issue.
If the lid of the chest is obstructed, the sounds continue to play,
but the lid isn't opened. Obstructed means that a node is present
above the chest lid, however, we ignore several node types like signs,
torches (not 3d) and wallmounted nodeboxes (typically signs) since
they don't pose any major obstruction in almost any case, and are
typically found above chests. Additionally, the selection box of the
opened chest does not include the lid, and so one can still interact
with e.g. a sign behind an open lid.
Due to the fact that chests now have 7+ textures, we can no longer
use materials (limit: 6) to texture the chest, and so there is now
a single UV mapped image that applies both to open and closed chests.
While this does mean texture pack makers need to create it, this
is extremely simple and consists of a simple cut'n'paste over the
template and should be really easy to do. Only one texture file is
now then used for both open and closed chests.
2016-01-18 00:32:50 +01:00
|
|
|
default.register_chest("chest_locked", {
|
|
|
|
description = "Locked Chest",
|
|
|
|
tiles = { "default_chest_wood_locked.png" },
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
sound_open = "default_chest_open",
|
|
|
|
sound_close = "default_chest_close",
|
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2},
|
|
|
|
protected = true,
|
|
|
|
})
|
2013-05-19 18:43:04 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
local bookshelf_formspec =
|
2015-08-25 05:11:46 +02:00
|
|
|
"size[8,7;]" ..
|
|
|
|
default.gui_bg ..
|
|
|
|
default.gui_bg_img ..
|
|
|
|
default.gui_slots ..
|
|
|
|
"list[context;books;0,0.3;8,2;]" ..
|
|
|
|
"list[current_player;main;0,2.85;8,1;]" ..
|
|
|
|
"list[current_player;main;0,4.08;8,3;8]" ..
|
|
|
|
"listring[context;books]" ..
|
|
|
|
"listring[current_player;main]" ..
|
2014-12-07 16:29:36 +01:00
|
|
|
default.get_hotbar_bg(0,2.85)
|
2013-05-19 18:43:04 +02:00
|
|
|
|
2016-11-06 21:36:36 +01:00
|
|
|
local function get_bookshelf_formspec(inv)
|
|
|
|
local formspec = bookshelf_formspec
|
|
|
|
local invlist = inv and inv:get_list("books")
|
|
|
|
-- Inventory slots overlay
|
|
|
|
local bx, by = 0, 0.3
|
|
|
|
for i = 1, 16 do
|
|
|
|
if i == 9 then
|
|
|
|
bx = 0
|
|
|
|
by = by + 1
|
|
|
|
end
|
|
|
|
if not invlist or invlist[i]:is_empty() then
|
|
|
|
formspec = formspec ..
|
|
|
|
"image[" .. bx .. "," .. by .. ";1,1;default_bookshelf_slot.png]"
|
|
|
|
end
|
|
|
|
bx = bx + 1
|
2016-10-27 19:42:47 +02:00
|
|
|
end
|
2016-11-06 21:36:36 +01:00
|
|
|
return formspec
|
2016-10-27 19:42:47 +02:00
|
|
|
end
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:bookshelf", {
|
|
|
|
description = "Bookshelf",
|
2016-05-24 06:29:30 +02:00
|
|
|
tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
|
|
|
|
"default_wood.png", "default_bookshelf.png", "default_bookshelf.png"},
|
|
|
|
paramtype2 = "facedir",
|
2014-12-07 16:29:36 +01:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_wood_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
on_construct = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos)
|
2016-11-06 21:36:36 +01:00
|
|
|
meta:set_string("formspec", get_bookshelf_formspec(nil))
|
2014-12-07 16:29:36 +01:00
|
|
|
local inv = meta:get_inventory()
|
2015-08-25 05:11:46 +02:00
|
|
|
inv:set_size("books", 8 * 2)
|
2014-12-07 16:29:36 +01:00
|
|
|
end,
|
|
|
|
can_dig = function(pos,player)
|
2016-03-23 19:48:22 +01:00
|
|
|
local inv = minetest.get_meta(pos):get_inventory()
|
2014-12-07 16:29:36 +01:00
|
|
|
return inv:is_empty("books")
|
|
|
|
end,
|
2016-03-23 19:48:22 +01:00
|
|
|
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
|
|
|
if minetest.get_item_group(stack:get_name(), "book") ~= 0 then
|
|
|
|
return stack:get_count()
|
2014-12-07 16:29:36 +01:00
|
|
|
end
|
2016-03-23 19:48:22 +01:00
|
|
|
return 0
|
2014-12-07 16:29:36 +01:00
|
|
|
end,
|
2016-03-23 19:48:22 +01:00
|
|
|
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
2015-08-25 05:11:46 +02:00
|
|
|
minetest.log("action", player:get_player_name() ..
|
|
|
|
" moves stuff in bookshelf at " .. minetest.pos_to_string(pos))
|
2016-11-06 21:36:36 +01:00
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory()))
|
2014-12-07 16:29:36 +01:00
|
|
|
end,
|
|
|
|
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
2015-08-25 05:11:46 +02:00
|
|
|
minetest.log("action", player:get_player_name() ..
|
|
|
|
" moves stuff to bookshelf at " .. minetest.pos_to_string(pos))
|
2016-11-06 21:36:36 +01:00
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory()))
|
2014-12-07 16:29:36 +01:00
|
|
|
end,
|
|
|
|
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
2015-08-25 05:11:46 +02:00
|
|
|
minetest.log("action", player:get_player_name() ..
|
|
|
|
" takes stuff from bookshelf at " .. minetest.pos_to_string(pos))
|
2016-11-06 21:36:36 +01:00
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory()))
|
2014-12-07 16:29:36 +01:00
|
|
|
end,
|
2016-04-16 04:21:45 +02:00
|
|
|
on_blast = function(pos)
|
|
|
|
local drops = {}
|
|
|
|
default.get_inventory_drops(pos, "books", drops)
|
|
|
|
drops[#drops+1] = "default:bookshelf"
|
|
|
|
minetest.remove_node(pos)
|
|
|
|
return drops
|
|
|
|
end,
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2016-03-06 12:16:33 +01:00
|
|
|
local function register_sign(material, desc, def)
|
|
|
|
minetest.register_node("default:sign_wall_" .. material, {
|
|
|
|
description = desc .. " Sign",
|
|
|
|
drawtype = "nodebox",
|
|
|
|
tiles = {"default_sign_wall_" .. material .. ".png"},
|
|
|
|
inventory_image = "default_sign_" .. material .. ".png",
|
|
|
|
wield_image = "default_sign_" .. material .. ".png",
|
|
|
|
paramtype = "light",
|
|
|
|
paramtype2 = "wallmounted",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
is_ground_content = false,
|
|
|
|
walkable = false,
|
|
|
|
node_box = {
|
|
|
|
type = "wallmounted",
|
|
|
|
wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
|
|
|
|
wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
|
|
|
|
wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
|
|
|
|
},
|
|
|
|
groups = def.groups,
|
|
|
|
legacy_wallmounted = true,
|
|
|
|
sounds = def.sounds,
|
|
|
|
|
|
|
|
on_construct = function(pos)
|
|
|
|
--local n = minetest.get_node(pos)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("formspec", "field[text;;${text}]")
|
|
|
|
end,
|
|
|
|
on_receive_fields = function(pos, formname, fields, sender)
|
|
|
|
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
|
|
|
|
local player_name = sender:get_player_name()
|
|
|
|
if minetest.is_protected(pos, player_name) then
|
|
|
|
minetest.record_protection_violation(pos, player_name)
|
|
|
|
return
|
|
|
|
end
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
if not fields.text then return end
|
|
|
|
minetest.log("action", (player_name or "") .. " wrote \"" ..
|
|
|
|
fields.text .. "\" to sign at " .. minetest.pos_to_string(pos))
|
|
|
|
meta:set_string("text", fields.text)
|
|
|
|
meta:set_string("infotext", '"' .. fields.text .. '"')
|
|
|
|
end,
|
|
|
|
})
|
|
|
|
end
|
2013-05-19 18:43:04 +02:00
|
|
|
|
2016-03-06 12:16:33 +01:00
|
|
|
register_sign("wood", "Wooden", {
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
2016-03-21 11:25:25 +01:00
|
|
|
groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3}
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2016-03-06 12:16:33 +01:00
|
|
|
register_sign("steel", "Steel", {
|
2016-10-20 01:34:22 +02:00
|
|
|
sounds = default.node_sound_metal_defaults(),
|
2016-03-06 12:16:33 +01:00
|
|
|
groups = {cracky = 2, attached_node = 1}
|
|
|
|
})
|
2015-08-25 05:11:46 +02:00
|
|
|
|
2016-03-03 10:52:45 +01:00
|
|
|
minetest.register_node("default:ladder_wood", {
|
|
|
|
description = "Wooden Ladder",
|
2014-12-07 16:29:36 +01:00
|
|
|
drawtype = "signlike",
|
2016-03-03 10:52:45 +01:00
|
|
|
tiles = {"default_ladder_wood.png"},
|
|
|
|
inventory_image = "default_ladder_wood.png",
|
|
|
|
wield_image = "default_ladder_wood.png",
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2014-12-07 16:29:36 +01:00
|
|
|
paramtype2 = "wallmounted",
|
2014-11-29 11:23:45 +01:00
|
|
|
sunlight_propagates = true,
|
2013-05-19 18:43:04 +02:00
|
|
|
walkable = false,
|
2014-12-07 16:29:36 +01:00
|
|
|
climbable = true,
|
|
|
|
is_ground_content = false,
|
2013-05-19 18:43:04 +02:00
|
|
|
selection_box = {
|
2014-12-07 16:29:36 +01:00
|
|
|
type = "wallmounted",
|
|
|
|
--wall_top = = <default>
|
|
|
|
--wall_bottom = = <default>
|
|
|
|
--wall_side = = <default>
|
2013-05-19 18:43:04 +02:00
|
|
|
},
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2},
|
2014-12-07 16:29:36 +01:00
|
|
|
legacy_wallmounted = true,
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2016-03-03 10:52:45 +01:00
|
|
|
minetest.register_node("default:ladder_steel", {
|
|
|
|
description = "Steel Ladder",
|
|
|
|
drawtype = "signlike",
|
|
|
|
tiles = {"default_ladder_steel.png"},
|
|
|
|
inventory_image = "default_ladder_steel.png",
|
|
|
|
wield_image = "default_ladder_steel.png",
|
|
|
|
paramtype = "light",
|
|
|
|
paramtype2 = "wallmounted",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
walkable = false,
|
|
|
|
climbable = true,
|
|
|
|
is_ground_content = false,
|
|
|
|
selection_box = {
|
|
|
|
type = "wallmounted",
|
|
|
|
--wall_top = = <default>
|
|
|
|
--wall_bottom = = <default>
|
|
|
|
--wall_side = = <default>
|
|
|
|
},
|
|
|
|
groups = {cracky = 2},
|
2016-10-20 01:34:22 +02:00
|
|
|
sounds = default.node_sound_metal_defaults(),
|
2016-03-03 10:52:45 +01:00
|
|
|
})
|
|
|
|
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
default.register_fence("default:fence_wood", {
|
2014-12-07 16:29:36 +01:00
|
|
|
description = "Wooden Fence",
|
2015-12-15 06:49:20 +01:00
|
|
|
texture = "default_fence_wood.png",
|
2016-07-31 01:15:42 +02:00
|
|
|
inventory_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
|
|
|
wield_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
material = "default:wood",
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
sounds = default.node_sound_wood_defaults()
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_fence("default:fence_acacia_wood", {
|
|
|
|
description = "Acacia Fence",
|
2015-12-15 06:49:20 +01:00
|
|
|
texture = "default_fence_acacia_wood.png",
|
2016-07-31 01:15:42 +02:00
|
|
|
inventory_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
|
|
|
wield_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
material = "default:acacia_wood",
|
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
|
|
|
sounds = default.node_sound_wood_defaults()
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_fence("default:fence_junglewood", {
|
|
|
|
description = "Junglewood Fence",
|
2015-12-15 06:49:20 +01:00
|
|
|
texture = "default_fence_junglewood.png",
|
2016-07-31 01:15:42 +02:00
|
|
|
inventory_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
|
|
|
wield_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
material = "default:junglewood",
|
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
|
|
|
sounds = default.node_sound_wood_defaults()
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
default.register_fence("default:fence_pine_wood", {
|
|
|
|
description = "Pine Fence",
|
2015-12-15 06:49:20 +01:00
|
|
|
texture = "default_fence_pine_wood.png",
|
2016-07-31 01:15:42 +02:00
|
|
|
inventory_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
|
|
|
wield_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
material = "default:pine_wood",
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
sounds = default.node_sound_wood_defaults()
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_fence("default:fence_aspen_wood", {
|
|
|
|
description = "Aspen Fence",
|
2015-12-15 06:49:20 +01:00
|
|
|
texture = "default_fence_aspen_wood.png",
|
2016-07-31 01:15:42 +02:00
|
|
|
inventory_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
|
|
|
wield_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
material = "default:aspen_wood",
|
2016-08-27 03:41:31 +02:00
|
|
|
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
|
Create API for fence.register, and use it.
This converts the call to minetest.register() for the default
fence node, so it can be called by other mods to quickly
setup other fences.
Since this creates an API, insert it into the game_api.txt.
The api looks like minetest.register(name, {def}), and has two
uncommon fields: "texture" and "material". Any normal nodedef
property can be passed through, except "drawtype". The "fence"
group will always be added.
The default fence recipe is modified to be as follows:
wood, stick, wood
wood, stick, wood
This recipe yields 4 fence nodes.
This allows us to create according recipes for acacia, pine,
aspen, and junglewood fences without adding new stick types:
pine wood, stick, pine wood
pine wood, stick, pine wood
This is a from-scratch implementation, written by heart but inspired
by (#665 - Add many wooden fences).
Stick and fences nodes are named in a consistent way.
2015-12-15 06:49:20 +01:00
|
|
|
sounds = default.node_sound_wood_defaults()
|
|
|
|
})
|
2013-05-19 18:43:04 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:glass", {
|
|
|
|
description = "Glass",
|
|
|
|
drawtype = "glasslike_framed_optional",
|
|
|
|
tiles = {"default_glass.png", "default_glass_detail.png"},
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2017-03-29 05:59:19 +02:00
|
|
|
paramtype2 = "glasslikeliquidlevel",
|
2014-12-07 16:29:36 +01:00
|
|
|
sunlight_propagates = true,
|
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3, oddly_breakable_by_hand = 3},
|
2013-05-19 18:43:04 +02:00
|
|
|
sounds = default.node_sound_glass_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:obsidian_glass", {
|
|
|
|
description = "Obsidian Glass",
|
2015-03-01 04:15:16 +01:00
|
|
|
drawtype = "glasslike_framed_optional",
|
|
|
|
tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"},
|
2013-05-19 18:43:04 +02:00
|
|
|
paramtype = "light",
|
2017-03-29 05:59:19 +02:00
|
|
|
paramtype2 = "glasslikeliquidlevel",
|
2014-12-07 16:29:36 +01:00
|
|
|
is_ground_content = false,
|
|
|
|
sunlight_propagates = true,
|
|
|
|
sounds = default.node_sound_glass_defaults(),
|
2015-06-17 19:07:55 +02:00
|
|
|
groups = {cracky = 3},
|
2013-05-19 18:43:04 +02:00
|
|
|
})
|
|
|
|
|
2014-10-21 19:53:04 +02:00
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
minetest.register_node("default:brick", {
|
|
|
|
description = "Brick Block",
|
2016-05-29 22:45:18 +02:00
|
|
|
paramtype2 = "facedir",
|
|
|
|
place_param2 = 0,
|
2014-12-07 16:29:36 +01:00
|
|
|
tiles = {"default_brick.png"},
|
2014-10-21 19:53:04 +02:00
|
|
|
is_ground_content = false,
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {cracky = 3},
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_stone_defaults(),
|
2014-10-21 19:53:04 +02:00
|
|
|
})
|
|
|
|
|
2015-03-05 16:46:49 +01:00
|
|
|
|
|
|
|
minetest.register_node("default:meselamp", {
|
|
|
|
description = "Mese Lamp",
|
|
|
|
drawtype = "glasslike",
|
|
|
|
tiles = {"default_meselamp.png"},
|
|
|
|
paramtype = "light",
|
|
|
|
sunlight_propagates = true,
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {cracky = 3, oddly_breakable_by_hand = 3},
|
|
|
|
sounds = default.node_sound_glass_defaults(),
|
2015-05-11 23:29:18 +02:00
|
|
|
light_source = default.LIGHT_MAX,
|
2015-03-05 16:46:49 +01:00
|
|
|
})
|
|
|
|
|
2017-02-09 01:01:30 +01:00
|
|
|
minetest.register_node("default:mese_post_light", {
|
|
|
|
description = "Mese Post Light",
|
|
|
|
tiles = {"default_mese_post_light_top.png", "default_mese_post_light_top.png",
|
|
|
|
"default_mese_post_light_side_dark.png", "default_mese_post_light_side_dark.png",
|
|
|
|
"default_mese_post_light_side.png", "default_mese_post_light_side.png"},
|
|
|
|
wield_image = "default_mese_post_light_side.png",
|
|
|
|
drawtype = "nodebox",
|
|
|
|
node_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {
|
|
|
|
{-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
paramtype = "light",
|
|
|
|
light_source = default.LIGHT_MAX,
|
|
|
|
sunlight_propagates = true,
|
|
|
|
is_ground_content = false,
|
|
|
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
|
|
|
})
|
|
|
|
|
2014-12-07 16:29:36 +01:00
|
|
|
--
|
|
|
|
-- Misc
|
|
|
|
--
|
|
|
|
|
|
|
|
minetest.register_node("default:cloud", {
|
|
|
|
description = "Cloud",
|
|
|
|
tiles = {"default_cloud.png"},
|
2015-06-14 05:58:54 +02:00
|
|
|
is_ground_content = false,
|
2014-12-07 16:29:36 +01:00
|
|
|
sounds = default.node_sound_defaults(),
|
2015-08-25 05:11:46 +02:00
|
|
|
groups = {not_in_creative_inventory = 1},
|
2014-12-07 16:29:36 +01:00
|
|
|
})
|
Leafdecay: Node timer based implementation, API
This implements a node-timer based leafdecay mechanism, and exposes
an API to use it in mods.
The API is documented in game_api.txt.
`default.register_leafdecay(leafdecaydef)`
`leafdecaydef` is a table, with following members:
{
trunks = { "default:tree"}, -- nodes considered trunks
leaves = { "default:leaves", "default:apple"}, -- nodes considered leaves
radius = 3, -- activates leafdecay this far from the trunk
}
The algorithm will drop `leaves` items in the area if no `trunks` are found
in the `trunk_radius` sized area around the position of the leaf. If a node
listed in `leaves` has a group `leafdecay_drop > 0`, then the item is dropped,
otherwise the item is removed but not dropped.
The algorithm also implements a value `default.leafdecay_speed` (default
15) which can be modified to increase or decrease of the leaf decay. The
algorithm will vary the actual speed a bit to introduce randomness.
Leaf decay is randomized by 0.1 seconds to reduce the chance that
decay happens many times on the same second interval. This requires
nodetimer_interval to be set to values lower than 1.0 to have an
effect.
The leaves will decay between 2 and 10 seconds after digging the trunk,
and happen at non-integer second intervals.
-- The API was added by sofar.
2017-02-08 01:28:02 +01:00
|
|
|
|
|
|
|
--
|
|
|
|
-- register trees for leafdecay
|
|
|
|
--
|
|
|
|
|
|
|
|
if minetest.get_mapgen_setting("mg_name") == "v6" then
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:tree"},
|
|
|
|
leaves = {"default:apple", "default:leaves"},
|
|
|
|
radius = 2,
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:jungletree"},
|
|
|
|
leaves = {"default:jungleleaves"},
|
|
|
|
radius = 3,
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:pine_tree"},
|
|
|
|
leaves = {"default:pine_needles"},
|
|
|
|
radius = 3,
|
|
|
|
})
|
|
|
|
else
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:tree"},
|
|
|
|
leaves = {"default:apple", "default:leaves"},
|
|
|
|
radius = 3,
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:jungletree"},
|
|
|
|
leaves = {"default:jungleleaves"},
|
|
|
|
radius = 2,
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:pine_tree"},
|
|
|
|
leaves = {"default:pine_needles"},
|
|
|
|
radius = 2,
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:acacia_tree"},
|
|
|
|
leaves = {"default:acacia_leaves"},
|
|
|
|
radius = 2,
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:aspen_tree"},
|
|
|
|
leaves = {"default:aspen_leaves"},
|
2017-03-17 06:17:57 +01:00
|
|
|
radius = 3,
|
Leafdecay: Node timer based implementation, API
This implements a node-timer based leafdecay mechanism, and exposes
an API to use it in mods.
The API is documented in game_api.txt.
`default.register_leafdecay(leafdecaydef)`
`leafdecaydef` is a table, with following members:
{
trunks = { "default:tree"}, -- nodes considered trunks
leaves = { "default:leaves", "default:apple"}, -- nodes considered leaves
radius = 3, -- activates leafdecay this far from the trunk
}
The algorithm will drop `leaves` items in the area if no `trunks` are found
in the `trunk_radius` sized area around the position of the leaf. If a node
listed in `leaves` has a group `leafdecay_drop > 0`, then the item is dropped,
otherwise the item is removed but not dropped.
The algorithm also implements a value `default.leafdecay_speed` (default
15) which can be modified to increase or decrease of the leaf decay. The
algorithm will vary the actual speed a bit to introduce randomness.
Leaf decay is randomized by 0.1 seconds to reduce the chance that
decay happens many times on the same second interval. This requires
nodetimer_interval to be set to values lower than 1.0 to have an
effect.
The leaves will decay between 2 and 10 seconds after digging the trunk,
and happen at non-integer second intervals.
-- The API was added by sofar.
2017-02-08 01:28:02 +01:00
|
|
|
})
|
2017-03-09 21:18:58 +01:00
|
|
|
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:bush_stem"},
|
|
|
|
leaves = {"default:bush_leaves"},
|
|
|
|
radius = 1,
|
|
|
|
})
|
|
|
|
|
|
|
|
default.register_leafdecay({
|
|
|
|
trunks = {"default:acacia_bush_stem"},
|
|
|
|
leaves = {"default:acacia_bush_leaves"},
|
|
|
|
radius = 1,
|
|
|
|
})
|