fix mergeconflicts
|
@ -1,28 +1,18 @@
|
|||
Minetest Game mod: default
|
||||
==========================
|
||||
See license.txt for license information.
|
||||
|
||||
License of source code:
|
||||
-----------------------
|
||||
Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Authors of source code
|
||||
----------------------
|
||||
Originally by celeron55, Perttu Ahola <celeron55@gmail.com> (LGPL 2.1)
|
||||
Various Minetest developers and contributors (LGPL 2.1)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
http://www.gnu.org/licenses/lgpl-2.1.html
|
||||
|
||||
License of media (textures and sounds)
|
||||
--------------------------------------
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
Authors of media files
|
||||
-----------------------
|
||||
Authors of media (textures, models and sounds)
|
||||
----------------------------------------------
|
||||
Everything not listed in here:
|
||||
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
celeron55, Perttu Ahola <celeron55@gmail.com> (CC BY-SA 3.0)
|
||||
|
||||
Cisoun's WTFPL texture pack:
|
||||
Cisoun's texture pack (CC BY-SA 3.0):
|
||||
default_jungletree.png
|
||||
default_lava.png
|
||||
default_leaves.png
|
||||
|
@ -32,59 +22,57 @@ Cisoun's WTFPL texture pack:
|
|||
default_tree_top.png
|
||||
default_water.png
|
||||
|
||||
Cisoun's conifers mod (WTFPL):
|
||||
Cisoun's conifers mod (CC BY-SA 3.0):
|
||||
default_pine_needles.png
|
||||
|
||||
Originating from G4JC's Almost MC Texture Pack:
|
||||
Originating from G4JC's Almost MC Texture Pack (CC BY-SA 3.0):
|
||||
default_torch.png
|
||||
default_torch_on_ceiling.png
|
||||
default_torch_on_floor.png
|
||||
|
||||
VanessaE's animated torches (WTFPL):
|
||||
VanessaE's animated torches (CC BY-SA 3.0):
|
||||
default_torch_animated.png
|
||||
default_torch_on_ceiling_animated.png
|
||||
default_torch_on_floor_animated.png
|
||||
default_torch_on_floor.png
|
||||
|
||||
RealBadAngel's animated water (WTFPL):
|
||||
RealBadAngel's animated water (CC BY-SA 3.0):
|
||||
default_water_source_animated.png
|
||||
default_water_flowing_animated.png
|
||||
|
||||
VanessaE (WTFPL):
|
||||
VanessaE (CC BY-SA 3.0):
|
||||
default_desert_sand.png
|
||||
default_desert_stone.png
|
||||
default_sand.png
|
||||
default_mese_crystal.png
|
||||
default_mese_crystal_fragment.png
|
||||
|
||||
Calinou (CC BY-SA):
|
||||
Calinou (CC BY-SA 3.0):
|
||||
default_brick.png
|
||||
default_papyrus.png
|
||||
default_mineral_copper.png
|
||||
default_glass_detail.png
|
||||
|
||||
MirceaKitsune (WTFPL):
|
||||
MirceaKitsune (CC BY-SA 3.0):
|
||||
character.x
|
||||
|
||||
Jordach (CC BY-SA 3.0):
|
||||
character.png
|
||||
|
||||
PilzAdam (WTFPL):
|
||||
PilzAdam (CC BY-SA 3.0):
|
||||
default_jungleleaves.png
|
||||
default_junglesapling.png
|
||||
default_obsidian_glass.png
|
||||
default_obsidian_shard.png
|
||||
default_mineral_gold.png
|
||||
default_snowball.png
|
||||
|
||||
jojoa1997 (WTFPL):
|
||||
jojoa1997 (CC BY-SA 3.0):
|
||||
default_obsidian.png
|
||||
|
||||
InfinityProject (WTFPL):
|
||||
InfinityProject (CC BY-SA 3.0):
|
||||
default_mineral_diamond.png
|
||||
|
||||
Splizard (CC BY-SA 3.0):
|
||||
default_snow.png
|
||||
default_pine_sapling.png
|
||||
|
||||
Zeg9 (CC BY-SA 3.0):
|
||||
|
@ -100,10 +88,13 @@ paramat (CC BY-SA 3.0):
|
|||
default_pinetree_top.png
|
||||
default_pinewood.png
|
||||
default_acacia_leaves.png
|
||||
default_acacia_leaves_simple.png
|
||||
default_acacia_sapling.png
|
||||
default_acacia_tree.png
|
||||
default_acacia_tree_top.png
|
||||
default_acacia_wood.png
|
||||
default_acacia_bush_stem.png
|
||||
default_bush_stem.png
|
||||
default_junglewood.png
|
||||
default_jungletree_top.png
|
||||
default_sandstone_brick.png
|
||||
|
@ -122,8 +113,8 @@ paramat (CC BY-SA 3.0):
|
|||
default_dry_grass_*.png
|
||||
default_grass.png
|
||||
default_grass_side.png
|
||||
default_snow_side.png
|
||||
default_mese_block.png
|
||||
default_silver_sand.png
|
||||
|
||||
brunob.santos (CC BY-SA 4.0):
|
||||
default_desert_cobble.png
|
||||
|
@ -149,6 +140,9 @@ BlockMen (CC BY-SA 3.0):
|
|||
bubble.png
|
||||
gui_*.png
|
||||
|
||||
Wuzzy (CC BY-SA 3.0):
|
||||
default_bookshelf_slot.png (based on default_book.png)
|
||||
|
||||
sofar (CC BY-SA 3.0):
|
||||
default_book_written.png, based on default_book.png
|
||||
default_aspen_sapling
|
||||
|
@ -156,18 +150,17 @@ sofar (CC BY-SA 3.0):
|
|||
default_aspen_tree
|
||||
default_aspen_tree_top, derived from default_pine_tree_top (by paramat)
|
||||
default_aspen_wood, derived from default_pine_wood (by paramat)
|
||||
|
||||
sofar (WTFPL):
|
||||
default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel
|
||||
|
||||
Neuromancer (CC BY-SA 2.0):
|
||||
default_cobble.png, based on texture by Brane praefect
|
||||
default_mossycobble.png, based on texture by Brane praefect
|
||||
|
||||
Neuromancer (CC BY-SA 3.0):
|
||||
default_dirt.png
|
||||
default_furnace_*.png
|
||||
|
||||
Gambit (WTFPL):
|
||||
Gambit (CC BY-SA 3.0):
|
||||
default_bronze_ingot.png
|
||||
default_copper_ingot.png
|
||||
default_copper_lump.png
|
||||
|
@ -181,19 +174,37 @@ Gambit (WTFPL):
|
|||
default_ladder_steel.png
|
||||
default_sign_wall_wood.png
|
||||
default_flint.png
|
||||
default_snow.png
|
||||
default_snow_side.png
|
||||
default_snowball.png
|
||||
default_key.png
|
||||
default_key_skeleton.png
|
||||
|
||||
asl97 (WTFPL):
|
||||
asl97 (CC BY-SA 3.0):
|
||||
default_ice.png
|
||||
|
||||
KevDoy (CC BY-SA 3.0)
|
||||
heart.png
|
||||
|
||||
Pithydon (CC BY-SA 3.0)
|
||||
default_coral_brown.png
|
||||
default_coral_orange.png
|
||||
default_coral_skeleton.png
|
||||
|
||||
Ferk (CC0 1.0)
|
||||
default_item_smoke.png
|
||||
default_item_smoke.ogg, based on sound by http://opengameart.org/users/bart
|
||||
|
||||
Glass breaking sounds (CC BY 3.0):
|
||||
1: http://www.freesound.org/people/cmusounddesign/sounds/71947/
|
||||
2: http://www.freesound.org/people/Tomlija/sounds/97669/
|
||||
3: http://www.freesound.org/people/lsprice/sounds/88808/
|
||||
|
||||
Mito551 (sounds) (CC BY-SA):
|
||||
sonictechtonic (CC BY 3.0):
|
||||
https://www.freesound.org/people/sonictechtonic/sounds/241872/
|
||||
player_damage.ogg
|
||||
|
||||
Mito551 (sounds) (CC BY-SA 3.0):
|
||||
default_dig_choppy.ogg
|
||||
default_dig_cracky.ogg
|
||||
default_dig_crumbly.1.ogg
|
||||
|
@ -227,3 +238,27 @@ Mito551 (sounds) (CC BY-SA):
|
|||
default_dirt_footstep.1.ogg
|
||||
default_dirt_footstep.2.ogg
|
||||
default_glass_footstep.ogg
|
||||
|
||||
Metal sounds:
|
||||
default_dig_metal.ogg - yadronoff - CC-BY-3.0
|
||||
- https://www.freesound.org/people/yadronoff/sounds/320397/
|
||||
default_dug_metal.*.ogg - Iwan Gabovitch - qubodup - CC0
|
||||
- http://opengameart.org/users/qubodup
|
||||
default_metal_footstep.*.ogg - Ottomaani138 - CC0
|
||||
- https://www.freesound.org/people/Ottomaani138/sounds/232692/
|
||||
default_place_node_metal.*.ogg - Ogrebane - CC0
|
||||
- http://opengameart.org/content/wood-and-metal-sound-effects-volume-2
|
||||
|
||||
Tool breaking sounds added by sofar: CC-BY-3.0
|
||||
default_tool_breaks.* - http://www.freesound.org/people/HerbertBoland/sounds/33206/
|
||||
|
||||
AGFX (CC BY 3.0)
|
||||
https://www.freesound.org/people/AGFX/packs/1253/
|
||||
default_water_footstep.1.ogg
|
||||
default_water_footstep.2.ogg
|
||||
default_water_footstep.3.ogg
|
||||
(default_water_footstep.4.ogg is silent)
|
||||
|
||||
blukotek (CC0 1.0)
|
||||
https://www.freesound.org/people/blukotek/sounds/251660/
|
||||
default_dig_snappy.ogg
|
||||
|
|
|
@ -23,7 +23,7 @@ minetest.register_alias("papyrus", "default:papyrus")
|
|||
minetest.register_alias("bookshelf", "default:bookshelf")
|
||||
minetest.register_alias("glass", "default:glass")
|
||||
minetest.register_alias("wooden_fence", "default:fence_wood")
|
||||
minetest.register_alias("rail", "default:rail")
|
||||
minetest.register_alias("rail", "carts:rail")
|
||||
minetest.register_alias("ladder", "default:ladder_wood")
|
||||
minetest.register_alias("default:ladder_wood", "default:ladder")
|
||||
minetest.register_alias("wood", "default:wood")
|
||||
|
|
|
@ -35,6 +35,20 @@ minetest.register_craft({
|
|||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:wood',
|
||||
recipe = {
|
||||
{'default:bush_stem'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:acacia_wood',
|
||||
recipe = {
|
||||
{'default:acacia_bush_stem'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:stick 4',
|
||||
recipe = {
|
||||
|
@ -339,11 +353,9 @@ minetest.register_craft({
|
|||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:rail 24',
|
||||
output = 'default:skeleton_key',
|
||||
recipe = {
|
||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
||||
{'default:steel_ingot', 'group:stick', 'default:steel_ingot'},
|
||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
||||
{'default:gold_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -776,16 +788,185 @@ minetest.register_craft({
|
|||
recipe = "default:clay_lump",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = 'cooking',
|
||||
output = 'default:gold_ingot',
|
||||
recipe = 'default:skeleton_key',
|
||||
cooktime = 5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = 'cooking',
|
||||
output = 'default:gold_ingot',
|
||||
recipe = 'default:key',
|
||||
cooktime = 5,
|
||||
})
|
||||
|
||||
--
|
||||
-- Fuels
|
||||
--
|
||||
|
||||
-- Support use of group:tree
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "group:tree",
|
||||
burntime = 30,
|
||||
})
|
||||
|
||||
-- Burn time for all woods are in order of wood density,
|
||||
-- which is also the order of wood colour darkness:
|
||||
-- aspen, pine, apple, acacia, jungle
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:aspen_tree",
|
||||
burntime = 22,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:pine_tree",
|
||||
burntime = 26,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:tree",
|
||||
burntime = 30,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:acacia_tree",
|
||||
burntime = 34,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:jungletree",
|
||||
burntime = 38,
|
||||
})
|
||||
|
||||
|
||||
-- Support use of group:wood
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "group:wood",
|
||||
burntime = 7,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:aspen_wood",
|
||||
burntime = 5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:pine_wood",
|
||||
burntime = 6,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:wood",
|
||||
burntime = 7,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:acacia_wood",
|
||||
burntime = 8,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:junglewood",
|
||||
burntime = 9,
|
||||
})
|
||||
|
||||
|
||||
-- Support use of group:sapling
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "group:sapling",
|
||||
burntime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:aspen_sapling",
|
||||
burntime = 8,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:pine_sapling",
|
||||
burntime = 9,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:sapling",
|
||||
burntime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:acacia_sapling",
|
||||
burntime = 11,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:junglesapling",
|
||||
burntime = 12,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_aspen_wood",
|
||||
burntime = 5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_pine_wood",
|
||||
burntime = 6,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_wood",
|
||||
burntime = 7,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_acacia_wood",
|
||||
burntime = 8,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_junglewood",
|
||||
burntime = 9,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:bush_stem",
|
||||
burntime = 7,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:acacia_bush_stem",
|
||||
burntime = 8,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:junglegrass",
|
||||
|
@ -816,46 +997,10 @@ minetest.register_craft({
|
|||
burntime = 30,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_wood",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_acacia_wood",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_junglewood",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_pine_wood",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:fence_aspen_wood",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:ladder_wood",
|
||||
burntime = 5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "group:wood",
|
||||
burntime = 7,
|
||||
burntime = 2,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -888,12 +1033,6 @@ minetest.register_craft({
|
|||
burntime = 30,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "group:sapling",
|
||||
burntime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:apple",
|
||||
|
@ -923,3 +1062,58 @@ minetest.register_craft({
|
|||
recipe = "default:dry_grass_1",
|
||||
burntime = 2,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:paper",
|
||||
burntime = 1,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:book",
|
||||
burntime = 3,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:book_written",
|
||||
burntime = 3,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:dry_shrub",
|
||||
burntime = 2,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "group:stick",
|
||||
burntime = 1,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:pick_wood",
|
||||
burntime = 6,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:shovel_wood",
|
||||
burntime = 4,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:axe_wood",
|
||||
burntime = 6,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "default:sword_wood",
|
||||
burntime = 5,
|
||||
})
|
||||
|
|
|
@ -3,12 +3,13 @@
|
|||
minetest.register_craftitem("default:stick", {
|
||||
description = "Stick",
|
||||
inventory_image = "default_stick.png",
|
||||
groups = {stick = 1},
|
||||
groups = {stick = 1, flammable = 2},
|
||||
})
|
||||
|
||||
minetest.register_craftitem("default:paper", {
|
||||
description = "Paper",
|
||||
inventory_image = "default_paper.png",
|
||||
groups = {flammable = 3},
|
||||
})
|
||||
|
||||
local lpp = 14 -- Lines per book's page
|
||||
|
@ -105,7 +106,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
|
||||
elseif fields.book_next or fields.book_prev then
|
||||
local data = minetest.deserialize(stack:get_metadata())
|
||||
if not data.page then return end
|
||||
if not data or not data.page then
|
||||
return
|
||||
end
|
||||
|
||||
if fields.book_next then
|
||||
data.page = data.page + 1
|
||||
|
@ -130,14 +133,14 @@ end)
|
|||
minetest.register_craftitem("default:book", {
|
||||
description = "Book",
|
||||
inventory_image = "default_book.png",
|
||||
groups = {book = 1},
|
||||
groups = {book = 1, flammable = 3},
|
||||
on_use = book_on_use,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("default:book_written", {
|
||||
description = "Book With Text",
|
||||
inventory_image = "default_book_written.png",
|
||||
groups = {book = 1, not_in_creative_inventory = 1},
|
||||
groups = {book = 1, not_in_creative_inventory = 1, flammable = 3},
|
||||
stack_max = 1,
|
||||
on_use = book_on_use,
|
||||
})
|
||||
|
@ -174,7 +177,7 @@ end)
|
|||
minetest.register_craftitem("default:coal_lump", {
|
||||
description = "Coal Lump",
|
||||
inventory_image = "default_coal_lump.png",
|
||||
groups = {coal = 1}
|
||||
groups = {coal = 1, flammable = 1}
|
||||
})
|
||||
|
||||
minetest.register_craftitem("default:iron_lump", {
|
||||
|
|
|
@ -88,13 +88,36 @@ end
|
|||
function default.node_sound_glass_defaults(table)
|
||||
table = table or {}
|
||||
table.footstep = table.footstep or
|
||||
{name = "default_glass_footstep", gain = 0.5}
|
||||
{name = "default_glass_footstep", gain = 0.25}
|
||||
table.dig = table.dig or
|
||||
{name = "default_glass_footstep", gain = 0.45}
|
||||
table.dug = table.dug or
|
||||
{name = "default_break_glass", gain = 1.0}
|
||||
default.node_sound_defaults(table)
|
||||
return table
|
||||
end
|
||||
|
||||
function default.node_sound_metal_defaults(table)
|
||||
table = table or {}
|
||||
table.footstep = table.footstep or
|
||||
{name = "default_metal_footstep", gain = 0.5}
|
||||
table.dig = table.dig or
|
||||
{name = "default_dig_metal", gain = 0.5}
|
||||
table.dug = table.dug or
|
||||
{name = "default_dug_metal", gain = 0.5}
|
||||
table.place = table.place or
|
||||
{name = "default_place_node_metal", gain = 0.5}
|
||||
default.node_sound_defaults(table)
|
||||
return table
|
||||
end
|
||||
|
||||
function default.node_sound_water_defaults(table)
|
||||
table = table or {}
|
||||
table.footstep = table.footstep or
|
||||
{name = "default_water_footstep", gain = 0.2}
|
||||
default.node_sound_defaults(table)
|
||||
return table
|
||||
end
|
||||
|
||||
--
|
||||
-- Lavacooling
|
||||
|
@ -122,7 +145,7 @@ end
|
|||
minetest.register_abm({
|
||||
label = "Lava cooling",
|
||||
nodenames = {"default:lava_source", "default:lava_flowing"},
|
||||
neighbors = {"group:water"},
|
||||
neighbors = {"group:cools_lava", "group:water"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
catch_up = false,
|
||||
|
@ -333,7 +356,7 @@ minetest.register_abm({
|
|||
end
|
||||
-- Remove node
|
||||
minetest.remove_node(pos)
|
||||
nodeupdate(pos)
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
})
|
||||
|
||||
|
@ -346,47 +369,36 @@ minetest.register_abm({
|
|||
label = "Grass spread",
|
||||
nodenames = {"default:dirt"},
|
||||
neighbors = {
|
||||
"default:dirt_with_grass",
|
||||
"default:dirt_with_dry_grass",
|
||||
"default:dirt_with_snow",
|
||||
"air",
|
||||
"group:grass",
|
||||
"group:dry_grass",
|
||||
"default:snow",
|
||||
},
|
||||
interval = 6,
|
||||
chance = 67,
|
||||
chance = 50,
|
||||
catch_up = false,
|
||||
action = function(pos, node)
|
||||
-- Most likely case, half the time it's too dark for this.
|
||||
-- Check for darkness: night, shadow or under a light-blocking node
|
||||
-- Returns if ignore above
|
||||
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
|
||||
if (minetest.get_node_light(above) or 0) < 13 then
|
||||
return
|
||||
end
|
||||
|
||||
-- Look for likely neighbors.
|
||||
local p2 = minetest.find_node_near(pos, 1, {"default:dirt_with_grass",
|
||||
"default:dirt_with_dry_grass", "default:dirt_with_snow"})
|
||||
-- Look for spreading dirt-type neighbours
|
||||
local p2 = minetest.find_node_near(pos, 1, "group:spreading_dirt_type")
|
||||
if p2 then
|
||||
-- But the node needs to be under air in this case.
|
||||
local n2 = minetest.get_node(above)
|
||||
if n2 and n2.name == "air" then
|
||||
local n3 = minetest.get_node(p2)
|
||||
minetest.set_node(pos, {name = n3.name})
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- Anything on top?
|
||||
local n2 = minetest.get_node(above)
|
||||
if not n2 then
|
||||
local n3 = minetest.get_node(p2)
|
||||
minetest.set_node(pos, {name = n3.name})
|
||||
return
|
||||
end
|
||||
|
||||
local name = n2.name
|
||||
-- Snow check is cheapest, so comes first.
|
||||
-- Else, any seeding nodes on top?
|
||||
local name = minetest.get_node(above).name
|
||||
-- Snow check is cheapest, so comes first
|
||||
if name == "default:snow" then
|
||||
minetest.set_node(pos, {name = "default:dirt_with_snow"})
|
||||
-- Most likely case first.
|
||||
-- Most likely case first
|
||||
elseif minetest.get_item_group(name, "grass") ~= 0 then
|
||||
minetest.set_node(pos, {name = "default:dirt_with_grass"})
|
||||
elseif minetest.get_item_group(name, "dry_grass") ~= 0 then
|
||||
|
@ -402,11 +414,7 @@ minetest.register_abm({
|
|||
|
||||
minetest.register_abm({
|
||||
label = "Grass covered",
|
||||
nodenames = {
|
||||
"default:dirt_with_grass",
|
||||
"default:dirt_with_dry_grass",
|
||||
"default:dirt_with_snow",
|
||||
},
|
||||
nodenames = {"group:spreading_dirt_type"},
|
||||
interval = 8,
|
||||
chance = 50,
|
||||
catch_up = false,
|
||||
|
@ -429,7 +437,7 @@ minetest.register_abm({
|
|||
|
||||
minetest.register_abm({
|
||||
label = "Moss growth",
|
||||
nodenames = {"default:stone", "default:cobble", "default:stonebrick", "stairs:slab_cobble", "stairs:stair_cobble"},
|
||||
nodenames = {"default:stone", "default:cobble", "default:stonebrick", "stairs:slab_cobble", "stairs:stair_cobble", "stairs:slab_cobble", "walls:cobble"},
|
||||
neighbors = {"group:water"},
|
||||
interval = 16,
|
||||
chance = 200,
|
||||
|
@ -445,6 +453,8 @@ minetest.register_abm({
|
|||
minetest.set_node(pos, {name = "stairs:slab_mossycobble", param2 = node.param2})
|
||||
elseif node.name == "stairs:stair_cobble" then
|
||||
minetest.set_node(pos, {name = "stairs:stair_mossycobble", param2 = node.param2})
|
||||
elseif node.name == "walls:cobble" then
|
||||
minetest.set_node(pos, {name = "walls:mossycobble", param2 = node.param2})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
@ -488,3 +498,19 @@ function default.intersects_protection(minp, maxp, player_name, interval)
|
|||
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Coral death near air
|
||||
--
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"default:coral_brown", "default:coral_orange"},
|
||||
neighbors = {"air"},
|
||||
interval = 17,
|
||||
chance = 5,
|
||||
catch_up = false,
|
||||
action = function(pos, node)
|
||||
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
||||
end,
|
||||
})
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
--
|
||||
|
||||
local function active_formspec(fuel_percent, item_percent)
|
||||
local formspec =
|
||||
local formspec =
|
||||
"size[8,8.5]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
|
@ -22,6 +22,8 @@ local function active_formspec(fuel_percent, item_percent)
|
|||
"listring[current_player;main]"..
|
||||
"listring[current_name;src]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;fuel]"..
|
||||
"listring[current_player;main]"..
|
||||
default.get_hotbar_bg(0, 4.25)
|
||||
return formspec
|
||||
end
|
||||
|
@ -42,6 +44,8 @@ local inactive_formspec =
|
|||
"listring[current_player;main]"..
|
||||
"listring[current_name;src]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;fuel]"..
|
||||
"listring[current_player;main]"..
|
||||
default.get_hotbar_bg(0, 4.25)
|
||||
|
||||
--
|
||||
|
@ -109,62 +113,70 @@ local function furnace_node_timer(pos, elapsed)
|
|||
local fuel_totaltime = meta:get_float("fuel_totaltime") or 0
|
||||
|
||||
local inv = meta:get_inventory()
|
||||
local srclist = inv:get_list("src")
|
||||
local fuellist = inv:get_list("fuel")
|
||||
local srclist, fuellist
|
||||
|
||||
--
|
||||
-- Cooking
|
||||
--
|
||||
local cookable, cooked
|
||||
|
||||
-- Check if we have cookable content
|
||||
local cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
local cookable = true
|
||||
local update = true
|
||||
while update do
|
||||
update = false
|
||||
|
||||
if cooked.time == 0 then
|
||||
cookable = false
|
||||
end
|
||||
srclist = inv:get_list("src")
|
||||
fuellist = inv:get_list("fuel")
|
||||
|
||||
-- Check if we have enough fuel to burn
|
||||
if fuel_time < fuel_totaltime then
|
||||
-- The furnace is currently active and has enough fuel
|
||||
fuel_time = fuel_time + 1
|
||||
--
|
||||
-- Cooking
|
||||
--
|
||||
|
||||
-- If there is a cookable item then check if it is ready yet
|
||||
if cookable then
|
||||
src_time = src_time + 1
|
||||
if src_time >= cooked.time then
|
||||
-- Place result in dst list if possible
|
||||
if inv:room_for_item("dst", cooked.item) then
|
||||
inv:add_item("dst", cooked.item)
|
||||
inv:set_stack("src", 1, aftercooked.items[1])
|
||||
src_time = 0
|
||||
-- Check if we have cookable content
|
||||
local aftercooked
|
||||
cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
cookable = cooked.time ~= 0
|
||||
|
||||
-- Check if we have enough fuel to burn
|
||||
if fuel_time < fuel_totaltime then
|
||||
-- The furnace is currently active and has enough fuel
|
||||
fuel_time = fuel_time + elapsed
|
||||
-- If there is a cookable item then check if it is ready yet
|
||||
if cookable then
|
||||
src_time = src_time + elapsed
|
||||
if src_time >= cooked.time then
|
||||
-- Place result in dst list if possible
|
||||
if inv:room_for_item("dst", cooked.item) then
|
||||
inv:add_item("dst", cooked.item)
|
||||
inv:set_stack("src", 1, aftercooked.items[1])
|
||||
src_time = src_time - cooked.time
|
||||
update = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Furnace ran out of fuel
|
||||
if cookable then
|
||||
-- We need to get new fuel
|
||||
local fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||
|
||||
if fuel.time == 0 then
|
||||
-- No valid fuel in fuel list
|
||||
fuel_totaltime = 0
|
||||
fuel_time = 0
|
||||
src_time = 0
|
||||
else
|
||||
-- Take fuel from fuel list
|
||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||
|
||||
fuel_totaltime = fuel.time
|
||||
fuel_time = 0
|
||||
end
|
||||
else
|
||||
-- We don't need to get new fuel since there is no cookable item
|
||||
fuel_totaltime = 0
|
||||
-- Furnace ran out of fuel
|
||||
if cookable then
|
||||
-- We need to get new fuel
|
||||
local fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||
|
||||
if fuel.time == 0 then
|
||||
-- No valid fuel in fuel list
|
||||
fuel_totaltime = 0
|
||||
src_time = 0
|
||||
else
|
||||
-- Take fuel from fuel list
|
||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||
update = true
|
||||
|
||||
fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime)
|
||||
src_time = src_time + elapsed
|
||||
end
|
||||
else
|
||||
-- We don't need to get new fuel since there is no cookable item
|
||||
fuel_totaltime = 0
|
||||
src_time = 0
|
||||
end
|
||||
fuel_time = 0
|
||||
src_time = 0
|
||||
end
|
||||
|
||||
elapsed = 0
|
||||
end
|
||||
|
||||
--
|
||||
|
@ -175,7 +187,11 @@ local function furnace_node_timer(pos, elapsed)
|
|||
local item_percent = 0
|
||||
if cookable then
|
||||
item_percent = math.floor(src_time / cooked.time * 100)
|
||||
item_state = item_percent .. "%"
|
||||
if item_percent > 100 then
|
||||
item_state = "100% (output full)"
|
||||
else
|
||||
item_state = item_percent .. "%"
|
||||
end
|
||||
else
|
||||
if srclist[1]:is_empty() then
|
||||
item_state = "Empty"
|
||||
|
@ -188,7 +204,7 @@ local function furnace_node_timer(pos, elapsed)
|
|||
local active = "inactive "
|
||||
local result = false
|
||||
|
||||
if fuel_time <= fuel_totaltime and fuel_totaltime ~= 0 then
|
||||
if fuel_totaltime ~= 0 then
|
||||
active = "active "
|
||||
local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
|
||||
fuel_state = fuel_percent .. "%"
|
||||
|
@ -202,8 +218,7 @@ local function furnace_node_timer(pos, elapsed)
|
|||
end
|
||||
swap_node(pos, "default:furnace")
|
||||
-- stop timer on the inactive furnace
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:stop()
|
||||
minetest.get_node_timer(pos):stop()
|
||||
end
|
||||
|
||||
local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")"
|
||||
|
@ -251,13 +266,11 @@ minetest.register_node("default:furnace", {
|
|||
end,
|
||||
|
||||
on_metadata_inventory_move = function(pos)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(1.0)
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos)
|
||||
-- start timer function, it will sort out whether furnace can burn or not.
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(1.0)
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
end,
|
||||
on_blast = function(pos)
|
||||
local drops = {}
|
||||
|
|
|
@ -41,7 +41,9 @@ dofile(default_path.."/functions.lua")
|
|||
dofile(default_path.."/trees.lua")
|
||||
dofile(default_path.."/nodes.lua")
|
||||
dofile(default_path.."/furnace.lua")
|
||||
dofile(default_path.."/torch.lua")
|
||||
dofile(default_path.."/tools.lua")
|
||||
dofile(default_path.."/item_entity.lua")
|
||||
dofile(default_path.."/craftitems.lua")
|
||||
dofile(default_path.."/crafting.lua")
|
||||
dofile(default_path.."/mapgen.lua")
|
||||
|
|
74
mods/default/item_entity.lua
Normal file
|
@ -0,0 +1,74 @@
|
|||
-- mods/default/item_entity.lua
|
||||
|
||||
local builtin_item = minetest.registered_entities["__builtin:item"]
|
||||
|
||||
local item = {
|
||||
set_item = function(self, itemstring)
|
||||
builtin_item.set_item(self, itemstring)
|
||||
|
||||
local stack = ItemStack(itemstring)
|
||||
local itemdef = minetest.registered_items[stack:get_name()]
|
||||
if itemdef and itemdef.groups.flammable ~= 0 then
|
||||
self.flammable = itemdef.groups.flammable
|
||||
end
|
||||
end,
|
||||
|
||||
burn_up = function(self)
|
||||
-- disappear in a smoke puff
|
||||
self.object:remove()
|
||||
local p = self.object:getpos()
|
||||
minetest.sound_play("default_item_smoke", {
|
||||
pos = p,
|
||||
max_hear_distance = 8,
|
||||
})
|
||||
minetest.add_particlespawner({
|
||||
amount = 3,
|
||||
time = 0.1,
|
||||
minpos = {x = p.x - 0.1, y = p.y + 0.1, z = p.z - 0.1 },
|
||||
maxpos = {x = p.x + 0.1, y = p.y + 0.2, z = p.z + 0.1 },
|
||||
minvel = {x = 0, y = 2.5, z = 0},
|
||||
maxvel = {x = 0, y = 2.5, z = 0},
|
||||
minacc = {x = -0.15, y = -0.02, z = -0.15},
|
||||
maxacc = {x = 0.15, y = -0.01, z = 0.15},
|
||||
minexptime = 4,
|
||||
maxexptime = 6,
|
||||
minsize = 5,
|
||||
maxsize = 5,
|
||||
collisiondetection = true,
|
||||
texture = "default_item_smoke.png"
|
||||
})
|
||||
end,
|
||||
|
||||
on_step = function(self, dtime)
|
||||
builtin_item.on_step(self, dtime)
|
||||
|
||||
if self.flammable then
|
||||
-- flammable, check for igniters
|
||||
self.ignite_timer = (self.ignite_timer or 0) + dtime
|
||||
if self.ignite_timer > 10 then
|
||||
self.ignite_timer = 0
|
||||
|
||||
local node = minetest.get_node_or_nil(self.object:getpos())
|
||||
if not node then
|
||||
return
|
||||
end
|
||||
|
||||
-- Immediately burn up flammable items in lava
|
||||
if minetest.get_item_group(node.name, "lava") > 0 then
|
||||
self:burn_up()
|
||||
else
|
||||
-- otherwise there'll be a chance based on its igniter value
|
||||
local burn_chance = self.flammable
|
||||
* minetest.get_item_group(node.name, "igniter")
|
||||
if burn_chance > 0 and math.random(0, burn_chance) ~= 0 then
|
||||
self:burn_up()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
-- set defined item as new __builtin:item, with the old one as fallback table
|
||||
setmetatable(item, builtin_item)
|
||||
minetest.register_entity(":__builtin:item", item)
|
|
@ -1,6 +1,6 @@
|
|||
-- mods/default/legacy.lua
|
||||
|
||||
-- Horrible crap to support old code registering falling nodes
|
||||
-- Horrible stuff to support old code registering falling nodes
|
||||
-- Don't use this and never do what this does, it's completely wrong!
|
||||
-- (More specifically, the client and the C++ code doesn't get the group)
|
||||
function default.register_falling_node(nodename, texture)
|
||||
|
|
174
mods/default/license.txt
Normal file
|
@ -0,0 +1,174 @@
|
|||
License of source code
|
||||
----------------------
|
||||
|
||||
GNU Lesser General Public License, version 2.1
|
||||
Copyright (C) 2011-2016 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2011-2016 Various Minetest developers and contributors
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the terms
|
||||
of the GNU Lesser General Public License as published by the Free Software Foundation;
|
||||
either version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
See the GNU Lesser General Public License for more details:
|
||||
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
|
||||
|
||||
|
||||
Licenses of media (textures, models and sounds)
|
||||
-----------------------------------------------
|
||||
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
Copyright (C) 2010-2016:
|
||||
celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Cisoun
|
||||
G4JC
|
||||
VanessaE
|
||||
RealBadAngel
|
||||
Calinou
|
||||
MirceaKitsune
|
||||
Jordach
|
||||
PilzAdam
|
||||
jojoa1997
|
||||
InfinityProject
|
||||
Splizard
|
||||
Zeg9
|
||||
paramat
|
||||
BlockMen
|
||||
sofar
|
||||
Neuromancer
|
||||
Gambit
|
||||
asl97
|
||||
KevDoy
|
||||
Mito551
|
||||
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format.
|
||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
|
||||
Under the following terms:
|
||||
|
||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||
that suggests the licensor endorses you or your use.
|
||||
|
||||
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
||||
your contributions under the same license as the original.
|
||||
|
||||
No additional restrictions — You may not apply legal terms or technological measures that
|
||||
legally restrict others from doing anything the license permits.
|
||||
|
||||
Notices:
|
||||
|
||||
You do not have to comply with the license for elements of the material in the public
|
||||
domain or where your use is permitted by an applicable exception or limitation.
|
||||
No warranties are given. The license may not give you all of the permissions necessary
|
||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||
rights may limit how you use the material.
|
||||
|
||||
For more details:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
-----------------------
|
||||
|
||||
Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
Copyright (C) 2014-2016 brunob.santos
|
||||
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format.
|
||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
|
||||
Under the following terms:
|
||||
|
||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||
that suggests the licensor endorses you or your use.
|
||||
|
||||
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
||||
your contributions under the same license as the original.
|
||||
|
||||
No additional restrictions — You may not apply legal terms or technological measures that
|
||||
legally restrict others from doing anything the license permits.
|
||||
|
||||
Notices:
|
||||
|
||||
You do not have to comply with the license for elements of the material in the public
|
||||
domain or where your use is permitted by an applicable exception or limitation.
|
||||
No warranties are given. The license may not give you all of the permissions necessary
|
||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||
rights may limit how you use the material.
|
||||
|
||||
For more details:
|
||||
http://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
-----------------------
|
||||
|
||||
Attribution-ShareAlike 2.0 Generic (CC BY-SA 2.0)
|
||||
Copyright (C) 2014-2016 Neuromancer
|
||||
|
||||
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format.
|
||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
|
||||
Under the following terms:
|
||||
|
||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||
that suggests the licensor endorses you or your use.
|
||||
|
||||
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
||||
your contributions under the same license as the original.
|
||||
|
||||
No additional restrictions — You may not apply legal terms or technological measures that
|
||||
legally restrict others from doing anything the license permits.
|
||||
|
||||
Notices:
|
||||
|
||||
You do not have to comply with the license for elements of the material in the public
|
||||
domain or where your use is permitted by an applicable exception or limitation.
|
||||
No warranties are given. The license may not give you all of the permissions necessary
|
||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||
rights may limit how you use the material.
|
||||
|
||||
For more details:
|
||||
http://creativecommons.org/licenses/by-sa/2.0/
|
||||
|
||||
-----------------------
|
||||
|
||||
Attribution 3.0 Unported (CC BY 3.0)
|
||||
Copyright (C) 2009 cmusounddesign
|
||||
Copyright (C) 2010 Tomlija
|
||||
Copyright (C) 2010 lsprice
|
||||
Copyright (C) 2014 sonictechtonic
|
||||
Copyright (C) 2015 yadronoff
|
||||
Copyright (C) 2007 HerbertBoland
|
||||
Copyright (C) 2006 AGFX
|
||||
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format.
|
||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
|
||||
Under the following terms:
|
||||
|
||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||
that suggests the licensor endorses you or your use.
|
||||
|
||||
No additional restrictions — You may not apply legal terms or technological measures that
|
||||
legally restrict others from doing anything the license permits.
|
||||
|
||||
Notices:
|
||||
|
||||
You do not have to comply with the license for elements of the material in the public
|
||||
domain or where your use is permitted by an applicable exception or limitation.
|
||||
No warranties are given. The license may not give you all of the permissions necessary
|
||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||
rights may limit how you use the material.
|
||||
|
||||
For more details:
|
||||
http://creativecommons.org/licenses/by/3.0/
|
|
@ -43,6 +43,7 @@ minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebr
|
|||
--
|
||||
|
||||
function default.register_ores()
|
||||
minetest.clear_registered_ores()
|
||||
-- Blob ores
|
||||
-- These first to avoid other ores in blobs
|
||||
|
||||
|
@ -109,6 +110,8 @@ function default.register_ores()
|
|||
octaves = 1,
|
||||
persist = 0.0
|
||||
},
|
||||
biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest",
|
||||
"deciduous_forest", "savanna", "rainforest"}
|
||||
})
|
||||
|
||||
-- Gravel
|
||||
|
@ -379,10 +382,10 @@ end
|
|||
function default.register_biomes()
|
||||
minetest.clear_registered_biomes()
|
||||
|
||||
-- Permanent ice
|
||||
-- Icesheet
|
||||
|
||||
minetest.register_biome({
|
||||
name = "glacier",
|
||||
name = "icesheet",
|
||||
node_dust = "default:snowblock",
|
||||
node_top = "default:snowblock",
|
||||
depth_top = 1,
|
||||
|
@ -398,36 +401,36 @@ function default.register_biomes()
|
|||
y_min = -8,
|
||||
y_max = 31000,
|
||||
heat_point = 0,
|
||||
humidity_point = 50,
|
||||
humidity_point = 73,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "glacier_ocean",
|
||||
name = "icesheet_ocean",
|
||||
node_dust = "default:snowblock",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 3,
|
||||
--node_stone = "",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
node_water_top = "default:ice",
|
||||
depth_water_top = 10,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
y_min = -112,
|
||||
y_max = -9,
|
||||
heat_point = 0,
|
||||
humidity_point = 50,
|
||||
humidity_point = 73,
|
||||
})
|
||||
|
||||
-- Cold
|
||||
-- Tundra
|
||||
|
||||
minetest.register_biome({
|
||||
name = "tundra",
|
||||
--node_dust = "",
|
||||
node_top = "default:dirt_with_snow",
|
||||
depth_top = 1,
|
||||
node_filler = "default:dirt",
|
||||
depth_filler = 1,
|
||||
node_dust = "default:snowblock",
|
||||
--node_top = ,
|
||||
--depth_top = ,
|
||||
--node_filler = ,
|
||||
--depth_filler = ,
|
||||
--node_stone = "",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
|
@ -437,8 +440,8 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = 2,
|
||||
y_max = 31000,
|
||||
heat_point = 15,
|
||||
humidity_point = 35,
|
||||
heat_point = 0,
|
||||
humidity_point = 40,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -457,8 +460,8 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = -3,
|
||||
y_max = 1,
|
||||
heat_point = 15,
|
||||
humidity_point = 35,
|
||||
heat_point = 0,
|
||||
humidity_point = 40,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -477,10 +480,11 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = -4,
|
||||
heat_point = 15,
|
||||
humidity_point = 35,
|
||||
heat_point = 0,
|
||||
humidity_point = 40,
|
||||
})
|
||||
|
||||
-- Taiga
|
||||
|
||||
minetest.register_biome({
|
||||
name = "taiga",
|
||||
|
@ -498,8 +502,8 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = 2,
|
||||
y_max = 31000,
|
||||
heat_point = 15,
|
||||
humidity_point = 65,
|
||||
heat_point = 25,
|
||||
humidity_point = 70,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -518,16 +522,16 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = 1,
|
||||
heat_point = 15,
|
||||
humidity_point = 65,
|
||||
heat_point = 25,
|
||||
humidity_point = 70,
|
||||
})
|
||||
|
||||
-- Temperate
|
||||
-- Snowy grassland
|
||||
|
||||
minetest.register_biome({
|
||||
name = "stone_grassland",
|
||||
--node_dust = "",
|
||||
node_top = "default:dirt_with_grass",
|
||||
name = "snowy_grassland",
|
||||
node_dust = "default:snow",
|
||||
node_top = "default:dirt_with_snow",
|
||||
depth_top = 1,
|
||||
node_filler = "default:dirt",
|
||||
depth_filler = 1,
|
||||
|
@ -538,34 +542,14 @@ function default.register_biomes()
|
|||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 6,
|
||||
y_max = 31000,
|
||||
heat_point = 40,
|
||||
humidity_point = 35,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "stone_grassland_dunes",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 2,
|
||||
--node_stone = "",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 5,
|
||||
y_max = 5,
|
||||
heat_point = 40,
|
||||
y_max = 31000,
|
||||
heat_point = 20,
|
||||
humidity_point = 35,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "stone_grassland_ocean",
|
||||
name = "snowy_grassland_ocean",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
|
@ -580,10 +564,73 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = 4,
|
||||
heat_point = 40,
|
||||
heat_point = 20,
|
||||
humidity_point = 35,
|
||||
})
|
||||
|
||||
-- Grassland
|
||||
|
||||
minetest.register_biome({
|
||||
name = "grassland",
|
||||
--node_dust = "",
|
||||
node_top = "default:dirt_with_grass",
|
||||
depth_top = 1,
|
||||
node_filler = "default:dirt",
|
||||
depth_filler = 1,
|
||||
--node_stone = "",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 6,
|
||||
y_max = 31000,
|
||||
heat_point = 50,
|
||||
humidity_point = 35,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "grassland_dunes",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 2,
|
||||
--node_stone = "",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 5,
|
||||
y_max = 5,
|
||||
heat_point = 50,
|
||||
humidity_point = 35,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "grassland_ocean",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 3,
|
||||
--node_stone = "",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = 4,
|
||||
heat_point = 50,
|
||||
humidity_point = 35,
|
||||
})
|
||||
|
||||
-- Coniferous forest
|
||||
|
||||
minetest.register_biome({
|
||||
name = "coniferous_forest",
|
||||
|
@ -601,8 +648,8 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = 6,
|
||||
y_max = 31000,
|
||||
heat_point = 40,
|
||||
humidity_point = 65,
|
||||
heat_point = 45,
|
||||
humidity_point = 70,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -621,8 +668,8 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = 5,
|
||||
y_max = 5,
|
||||
heat_point = 40,
|
||||
humidity_point = 65,
|
||||
heat_point = 45,
|
||||
humidity_point = 70,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -641,71 +688,11 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = 4,
|
||||
heat_point = 40,
|
||||
humidity_point = 65,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_biome({
|
||||
name = "sandstone_grassland",
|
||||
--node_dust = "",
|
||||
node_top = "default:dirt_with_grass",
|
||||
depth_top = 1,
|
||||
node_filler = "default:dirt",
|
||||
depth_filler = 1,
|
||||
node_stone = "default:sandstone",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 6,
|
||||
y_max = 31000,
|
||||
heat_point = 60,
|
||||
humidity_point = 35,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "sandstone_grassland_dunes",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 2,
|
||||
node_stone = "default:sandstone",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 5,
|
||||
y_max = 5,
|
||||
heat_point = 60,
|
||||
humidity_point = 35,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "sandstone_grassland_ocean",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 3,
|
||||
node_stone = "default:sandstone",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = 4,
|
||||
heat_point = 60,
|
||||
humidity_point = 35,
|
||||
heat_point = 45,
|
||||
humidity_point = 70,
|
||||
})
|
||||
|
||||
-- Deciduous forest
|
||||
|
||||
minetest.register_biome({
|
||||
name = "deciduous_forest",
|
||||
|
@ -724,11 +711,11 @@ function default.register_biomes()
|
|||
y_min = 1,
|
||||
y_max = 31000,
|
||||
heat_point = 60,
|
||||
humidity_point = 65,
|
||||
humidity_point = 68,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "deciduous_forest_swamp",
|
||||
name = "deciduous_forest_shore",
|
||||
--node_dust = "",
|
||||
node_top = "default:dirt",
|
||||
depth_top = 1,
|
||||
|
@ -741,10 +728,10 @@ function default.register_biomes()
|
|||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -3,
|
||||
y_min = -1,
|
||||
y_max = 0,
|
||||
heat_point = 60,
|
||||
humidity_point = 65,
|
||||
humidity_point = 68,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -762,12 +749,12 @@ function default.register_biomes()
|
|||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = -4,
|
||||
y_max = -2,
|
||||
heat_point = 60,
|
||||
humidity_point = 65,
|
||||
humidity_point = 68,
|
||||
})
|
||||
|
||||
-- Hot
|
||||
-- Desert
|
||||
|
||||
minetest.register_biome({
|
||||
name = "desert",
|
||||
|
@ -785,8 +772,8 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = 5,
|
||||
y_max = 31000,
|
||||
heat_point = 85,
|
||||
humidity_point = 20,
|
||||
heat_point = 92,
|
||||
humidity_point = 16,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -805,10 +792,95 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = 4,
|
||||
heat_point = 85,
|
||||
humidity_point = 20,
|
||||
heat_point = 92,
|
||||
humidity_point = 16,
|
||||
})
|
||||
|
||||
-- Sandstone desert
|
||||
|
||||
minetest.register_biome({
|
||||
name = "sandstone_desert",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 0,
|
||||
node_stone = "default:sandstone",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 5,
|
||||
y_max = 31000,
|
||||
heat_point = 60,
|
||||
humidity_point = 0,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "sandstone_desert_ocean",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 3,
|
||||
node_stone = "default:sandstone",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = 4,
|
||||
heat_point = 60,
|
||||
humidity_point = 0,
|
||||
})
|
||||
|
||||
-- Cold desert
|
||||
|
||||
minetest.register_biome({
|
||||
name = "cold_desert",
|
||||
--node_dust = "",
|
||||
node_top = "default:silver_sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:silver_sand",
|
||||
depth_filler = 1,
|
||||
--node_stone = "",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 5,
|
||||
y_max = 31000,
|
||||
heat_point = 40,
|
||||
humidity_point = 0,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "cold_desert_ocean",
|
||||
--node_dust = "",
|
||||
node_top = "default:sand",
|
||||
depth_top = 1,
|
||||
node_filler = "default:sand",
|
||||
depth_filler = 3,
|
||||
--node_stone = "",
|
||||
--node_water_top = "",
|
||||
--depth_water_top = ,
|
||||
--node_water = "",
|
||||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = 4,
|
||||
heat_point = 40,
|
||||
humidity_point = 0,
|
||||
})
|
||||
|
||||
-- Savanna
|
||||
|
||||
minetest.register_biome({
|
||||
name = "savanna",
|
||||
|
@ -826,12 +898,12 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
heat_point = 85,
|
||||
humidity_point = 50,
|
||||
heat_point = 89,
|
||||
humidity_point = 42,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "savanna_swamp",
|
||||
name = "savanna_shore",
|
||||
--node_dust = "",
|
||||
node_top = "default:dirt",
|
||||
depth_top = 1,
|
||||
|
@ -844,10 +916,10 @@ function default.register_biomes()
|
|||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -3,
|
||||
y_min = -1,
|
||||
y_max = 0,
|
||||
heat_point = 85,
|
||||
humidity_point = 50,
|
||||
heat_point = 89,
|
||||
humidity_point = 42,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -865,11 +937,12 @@ function default.register_biomes()
|
|||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = -4,
|
||||
heat_point = 85,
|
||||
humidity_point = 50,
|
||||
y_max = -2,
|
||||
heat_point = 89,
|
||||
humidity_point = 42,
|
||||
})
|
||||
|
||||
-- Rainforest
|
||||
|
||||
minetest.register_biome({
|
||||
name = "rainforest",
|
||||
|
@ -887,8 +960,8 @@ function default.register_biomes()
|
|||
depth_riverbed = 2,
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
heat_point = 85,
|
||||
humidity_point = 80,
|
||||
heat_point = 86,
|
||||
humidity_point = 65,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -905,10 +978,10 @@ function default.register_biomes()
|
|||
--node_river_water = "",
|
||||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -3,
|
||||
y_min = -1,
|
||||
y_max = 0,
|
||||
heat_point = 85,
|
||||
humidity_point = 80,
|
||||
heat_point = 86,
|
||||
humidity_point = 65,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -926,9 +999,9 @@ function default.register_biomes()
|
|||
node_riverbed = "default:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -112,
|
||||
y_max = -4,
|
||||
heat_point = 85,
|
||||
humidity_point = 80,
|
||||
y_max = -2,
|
||||
heat_point = 86,
|
||||
humidity_point = 65,
|
||||
})
|
||||
|
||||
-- Underground
|
||||
|
@ -1047,7 +1120,8 @@ function default.register_mgv6_decorations()
|
|||
})
|
||||
end
|
||||
|
||||
-- All mapgens except mgv6 and singlenode
|
||||
|
||||
-- All mapgens except mgv6
|
||||
|
||||
local function register_grass_decoration(offset, scale, length)
|
||||
minetest.register_decoration({
|
||||
|
@ -1062,13 +1136,11 @@ local function register_grass_decoration(offset, scale, length)
|
|||
octaves = 3,
|
||||
persist = 0.6
|
||||
},
|
||||
biomes = {"stone_grassland", "sandstone_grassland",
|
||||
"deciduous_forest", "coniferous_forest",
|
||||
"stone_grassland_dunes", "sandstone_grassland_dunes",
|
||||
"coniferous_forest_dunes"},
|
||||
biomes = {"grassland", "grassland_dunes", "deciduous_forest",
|
||||
"coniferous_forest", "coniferous_forest_dunes"},
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
decoration = "default:grass_"..length,
|
||||
decoration = "default:grass_" .. length,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -1088,10 +1160,11 @@ local function register_dry_grass_decoration(offset, scale, length)
|
|||
biomes = {"savanna"},
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
decoration = "default:dry_grass_"..length,
|
||||
decoration = "default:dry_grass_" .. length,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
function default.register_decorations()
|
||||
minetest.clear_registered_decorations()
|
||||
|
||||
|
@ -1112,7 +1185,7 @@ function default.register_decorations()
|
|||
biomes = {"deciduous_forest"},
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
})
|
||||
|
||||
|
@ -1157,9 +1230,9 @@ function default.register_decorations()
|
|||
sidelen = 80,
|
||||
fill_ratio = 0.1,
|
||||
biomes = {"rainforest", "rainforest_swamp"},
|
||||
y_min = 0,
|
||||
y_min = -1,
|
||||
y_max = 31000,
|
||||
schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
rotation = "random",
|
||||
})
|
||||
|
@ -1207,7 +1280,7 @@ function default.register_decorations()
|
|||
biomes = {"taiga", "coniferous_forest"},
|
||||
y_min = 2,
|
||||
y_max = 31000,
|
||||
schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts",
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
})
|
||||
|
||||
|
@ -1261,7 +1334,7 @@ function default.register_decorations()
|
|||
biomes = {"savanna"},
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
rotation = "random",
|
||||
})
|
||||
|
@ -1313,7 +1386,7 @@ function default.register_decorations()
|
|||
biomes = {"deciduous_forest"},
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts",
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/aspen_tree.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
})
|
||||
|
||||
|
@ -1349,6 +1422,7 @@ function default.register_decorations()
|
|||
flags = "place_center_x",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
-- Large cactus
|
||||
|
||||
minetest.register_decoration({
|
||||
|
@ -1366,7 +1440,7 @@ function default.register_decorations()
|
|||
biomes = {"desert"},
|
||||
y_min = 5,
|
||||
y_max = 31000,
|
||||
schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/large_cactus.mts",
|
||||
flags = "place_center_x",
|
||||
rotation = "random",
|
||||
})
|
||||
|
@ -1407,10 +1481,52 @@ function default.register_decorations()
|
|||
octaves = 3,
|
||||
persist = 0.7
|
||||
},
|
||||
biomes = {"savanna_swamp"},
|
||||
biomes = {"savanna_shore"},
|
||||
y_min = 0,
|
||||
y_max = 0,
|
||||
schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/papyrus.mts",
|
||||
})
|
||||
|
||||
-- Bush
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass", "default:dirt_with_snow"},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = -0.004,
|
||||
scale = 0.01,
|
||||
spread = {x = 100, y = 100, z = 100},
|
||||
seed = 137,
|
||||
octaves = 3,
|
||||
persist = 0.7,
|
||||
},
|
||||
biomes = {"snowy_grassland", "grassland", "deciduous_forest"},
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/bush.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
})
|
||||
|
||||
-- Acacia bush
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_dry_grass"},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = -0.004,
|
||||
scale = 0.01,
|
||||
spread = {x = 100, y = 100, z = 100},
|
||||
seed = 90155,
|
||||
octaves = 3,
|
||||
persist = 0.7,
|
||||
},
|
||||
biomes = {"savanna"},
|
||||
y_min = 1,
|
||||
y_max = 31000,
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/acacia_bush.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
})
|
||||
|
||||
-- Grasses
|
||||
|
@ -1446,7 +1562,8 @@ function default.register_decorations()
|
|||
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = {"default:desert_sand", "default:dirt_with_snow"},
|
||||
place_on = {"default:desert_sand",
|
||||
"default:sand", "default:silver_sand"},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0,
|
||||
|
@ -1456,11 +1573,36 @@ function default.register_decorations()
|
|||
octaves = 3,
|
||||
persist = 0.6
|
||||
},
|
||||
biomes = {"desert", "tundra"},
|
||||
biomes = {"desert", "sandstone_desert", "cold_desert"},
|
||||
y_min = 2,
|
||||
y_max = 31000,
|
||||
decoration = "default:dry_shrub",
|
||||
})
|
||||
|
||||
-- Coral reef
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:sand"},
|
||||
noise_params = {
|
||||
offset = -0.1,
|
||||
scale = 0.1,
|
||||
spread = {x = 200, y = 200, z = 200},
|
||||
seed = 7013,
|
||||
octaves = 3,
|
||||
persist = 1,
|
||||
},
|
||||
biomes = {
|
||||
"desert_ocean",
|
||||
"savanna_ocean",
|
||||
"rainforest_ocean",
|
||||
},
|
||||
y_min = -8,
|
||||
y_max = -2,
|
||||
schematic = minetest.get_modpath("default") .. "/schematics/corals.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
rotation = "random",
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
|
|
58
mods/default/models/torch_ceiling.obj
Normal file
|
@ -0,0 +1,58 @@
|
|||
# Blender v2.77 (sub 0) OBJ File: 'torch_ceiling.blend'
|
||||
# www.blender.org
|
||||
mtllib torch_ceiling.mtl
|
||||
o Cube_Cube.001
|
||||
v -0.062469 -0.047331 0.068152
|
||||
v -0.062469 -0.559515 -0.164388
|
||||
v -0.062469 0.004344 -0.045667
|
||||
v -0.062469 -0.507839 -0.278206
|
||||
v 0.062531 -0.047331 0.068152
|
||||
v 0.062531 -0.559515 -0.164388
|
||||
v 0.062531 0.004344 -0.045667
|
||||
v 0.062531 -0.507839 -0.278206
|
||||
v 0.353584 0.040000 0.363553
|
||||
v 0.353584 -0.397500 0.363553
|
||||
v -0.353522 0.040000 -0.343553
|
||||
v -0.353522 -0.397500 -0.343553
|
||||
v 0.353584 0.040000 -0.343553
|
||||
v -0.353522 0.040000 0.363553
|
||||
v 0.353584 -0.397500 -0.343553
|
||||
v -0.353522 -0.397500 0.363553
|
||||
vt 0.5625 0.5000
|
||||
vt 0.5625 0.6250
|
||||
vt 0.4375 0.6250
|
||||
vt 0.4375 0.5000
|
||||
vt 0.4375 0.0000
|
||||
vt 0.5625 0.0000
|
||||
vt 0.5625 0.1250
|
||||
vt 0.4375 0.1250
|
||||
vt 0.5625 0.6250
|
||||
vt 0.4375 0.6250
|
||||
vt 0.4375 0.6250
|
||||
vt 0.4375 0.0000
|
||||
vt 0.5625 0.6250
|
||||
vt 0.5625 0.0000
|
||||
vt 1.0000 0.5625
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.5625
|
||||
vt 0.0000 0.5625
|
||||
vt 1.0000 0.5625
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vn 0.0000 0.9105 0.4134
|
||||
vn -0.0000 -0.4134 0.9105
|
||||
vn -1.0000 0.0000 0.0000
|
||||
vn 0.7071 0.0000 -0.7071
|
||||
vn 0.7071 0.0000 0.7071
|
||||
usemtl Material.001
|
||||
s off
|
||||
f 3/1/1 1/2/1 5/3/1 7/4/1
|
||||
f 8/5/1 4/6/1 2/7/1 6/8/1
|
||||
f 3/9/2 4/6/2 8/5/2 7/10/2
|
||||
f 1/11/3 3/9/3 4/6/3 2/12/3
|
||||
f 5/13/2 1/11/2 2/12/2 6/14/2
|
||||
f 7/10/3 8/5/3 6/14/3 5/13/3
|
||||
usemtl Material.002
|
||||
f 9/15/4 10/16/4 12/17/4 11/18/4
|
||||
f 13/19/5 14/20/5 16/21/5 15/22/5
|
50
mods/default/models/torch_floor.obj
Normal file
|
@ -0,0 +1,50 @@
|
|||
# Blender v2.76 (sub 11) OBJ File: 'torch_floor.blend'
|
||||
# www.blender.org
|
||||
mtllib torch_floor.mtl
|
||||
o Cube_Cube.001
|
||||
v 0.062500 0.062500 -0.062500
|
||||
v 0.062500 -0.500000 -0.062500
|
||||
v 0.062500 0.062500 0.062500
|
||||
v 0.062500 -0.500000 0.062500
|
||||
v -0.062500 0.062500 -0.062500
|
||||
v -0.062500 -0.500000 -0.062500
|
||||
v -0.062500 0.062500 0.062500
|
||||
v -0.062500 -0.500000 0.062500
|
||||
v -0.353553 -0.500000 0.353553
|
||||
v -0.353553 0.500000 0.353553
|
||||
v 0.353553 -0.500000 -0.353553
|
||||
v 0.353553 0.500000 -0.353553
|
||||
v -0.353553 -0.500000 -0.353553
|
||||
v 0.353553 -0.500000 0.353553
|
||||
v -0.353553 0.500000 -0.353553
|
||||
v 0.353553 0.500000 0.353553
|
||||
vt 0.562500 0.500000
|
||||
vt 0.562500 0.625000
|
||||
vt 0.437500 0.625000
|
||||
vt 0.437500 0.500000
|
||||
vt 0.437500 0.000000
|
||||
vt 0.562500 0.000000
|
||||
vt 0.562500 0.125000
|
||||
vt 0.437500 0.125000
|
||||
vt 1.000000 0.000000
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.000000 0.000000
|
||||
vn 0.000000 1.000000 0.000000
|
||||
vn 0.000000 0.000000 -1.000000
|
||||
vn 1.000000 0.000000 0.000000
|
||||
vn -0.707100 0.000000 -0.707100
|
||||
vn -0.707100 -0.000000 0.707100
|
||||
g Cube_Cube.001_Cube_Cube.001_Material.001
|
||||
usemtl Material.001
|
||||
s off
|
||||
f 3/1/1 1/2/1 5/3/1 7/4/1
|
||||
f 8/5/1 4/6/1 2/7/1 6/8/1
|
||||
f 3/2/2 4/6/2 8/5/2 7/3/2
|
||||
f 1/3/3 3/2/3 4/6/3 2/5/3
|
||||
f 5/2/2 1/3/2 2/5/2 6/6/2
|
||||
f 7/3/3 8/5/3 6/6/3 5/2/3
|
||||
g Cube_Cube.001_Cube_Cube.001_Material.002
|
||||
usemtl Material.002
|
||||
f 9/9/4 10/10/4 12/11/4 11/12/4
|
||||
f 13/12/5 14/9/5 16/10/5 15/11/5
|
64
mods/default/models/torch_wall.obj
Normal file
|
@ -0,0 +1,64 @@
|
|||
# Blender v2.76 (sub 11) OBJ File: 'torch_wall.blend'
|
||||
# www.blender.org
|
||||
mtllib torch_wall.mtl
|
||||
o Cube_Cube.001
|
||||
v 0.062469 -0.195248 0.023570
|
||||
v 0.062469 -0.476498 -0.463570
|
||||
v 0.062469 -0.303502 0.086070
|
||||
v 0.062469 -0.584752 -0.401070
|
||||
v -0.062531 -0.195248 0.023570
|
||||
v -0.062531 -0.476498 -0.463570
|
||||
v -0.062531 -0.303502 0.086070
|
||||
v -0.062531 -0.584752 -0.401070
|
||||
v -0.353584 -0.613553 0.022500
|
||||
v -0.353584 -0.613553 0.460000
|
||||
v 0.353522 0.093553 0.022500
|
||||
v 0.353522 0.093553 0.460000
|
||||
v -0.353584 0.093553 0.022500
|
||||
v 0.353522 -0.613553 0.022500
|
||||
v -0.353584 0.093553 0.460000
|
||||
v 0.353522 -0.613553 0.460000
|
||||
v 0.353553 0.056811 -0.121957
|
||||
v 0.353553 -0.224439 -0.609096
|
||||
v -0.353553 -0.555561 0.231596
|
||||
v -0.353553 -0.836811 -0.255543
|
||||
v -0.353553 0.056811 -0.121957
|
||||
v -0.353553 -0.224439 -0.609096
|
||||
v 0.353553 -0.555561 0.231596
|
||||
v 0.353553 -0.836811 -0.255543
|
||||
vt 0.562500 0.500000
|
||||
vt 0.562500 0.625000
|
||||
vt 0.437500 0.625000
|
||||
vt 0.437500 0.500000
|
||||
vt 0.437500 0.000000
|
||||
vt 0.562500 0.000000
|
||||
vt 0.562500 0.125000
|
||||
vt 0.437500 0.125000
|
||||
vt 0.000000 0.562500
|
||||
vt 0.000000 -0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 1.000000 0.562500
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vn -0.000000 0.500000 0.866000
|
||||
vn -0.000000 0.866000 -0.500000
|
||||
vn 1.000000 0.000000 0.000000
|
||||
vn -0.707100 0.612400 -0.353600
|
||||
vn -0.707100 -0.612400 0.353600
|
||||
vn -0.707100 0.707100 -0.000000
|
||||
vn -0.707100 -0.707100 -0.000000
|
||||
g Cube_Cube.001_Cube_Cube.001_Material.001
|
||||
usemtl Material.001
|
||||
s off
|
||||
f 3/1/1 1/2/1 5/3/1 7/4/1
|
||||
f 8/5/1 4/6/1 2/7/1 6/8/1
|
||||
f 3/2/2 4/6/2 8/5/2 7/3/2
|
||||
f 1/3/3 3/2/3 4/6/3 2/5/3
|
||||
f 5/2/2 1/3/2 2/5/2 6/6/2
|
||||
f 7/3/3 8/5/3 6/6/3 5/2/3
|
||||
f 17/9/4 18/10/4 20/11/4 19/12/4
|
||||
f 21/9/5 22/10/5 24/11/5 23/12/5
|
||||
g Cube_Cube.001_Cube_Cube.001_Material.002
|
||||
usemtl Material.002
|
||||
f 9/12/6 10/13/6 12/14/6 11/9/6
|
||||
f 13/9/7 14/12/7 16/13/7 15/14/7
|
|
@ -47,6 +47,7 @@ default:dirt_with_snow
|
|||
|
||||
default:sand
|
||||
default:desert_sand
|
||||
default:silver_sand
|
||||
|
||||
default:gravel
|
||||
|
||||
|
@ -110,8 +111,8 @@ default:mese
|
|||
default:stone_with_diamond
|
||||
default:diamondblock
|
||||
|
||||
Plantlife (non-cubic)
|
||||
---------------------
|
||||
Plantlife
|
||||
---------
|
||||
|
||||
default:cactus
|
||||
default:papyrus
|
||||
|
@ -130,6 +131,18 @@ default:dry_grass_3
|
|||
default:dry_grass_4
|
||||
default:dry_grass_5
|
||||
|
||||
default:bush_stem
|
||||
default:bush_leaves
|
||||
default:acacia_bush_stem
|
||||
default:acacia_bush_leaves
|
||||
|
||||
Corals
|
||||
------
|
||||
|
||||
default:coral_brown
|
||||
default:coral_orange
|
||||
default:coral_skeleton
|
||||
|
||||
Liquids
|
||||
-------
|
||||
(1. Source 2. Flowing)
|
||||
|
@ -146,8 +159,6 @@ default:lava_flowing
|
|||
Tools / "Advanced" crafting / Non-"natural"
|
||||
-------------------------------------------
|
||||
|
||||
default:torch
|
||||
|
||||
default:chest
|
||||
default:chest_locked
|
||||
|
||||
|
@ -168,8 +179,6 @@ default:fence_aspen_wood
|
|||
default:glass
|
||||
default:obsidian_glass
|
||||
|
||||
default:rail
|
||||
|
||||
default:brick
|
||||
|
||||
default:meselamp
|
||||
|
@ -347,7 +356,7 @@ minetest.register_node("default:dirt_with_grass", {
|
|||
tiles = {"default_grass.png", "default_dirt.png",
|
||||
{name = "default_dirt.png^default_grass_side.png",
|
||||
tileable_vertical = false}},
|
||||
groups = {crumbly = 3, soil = 1},
|
||||
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.25},
|
||||
|
@ -372,7 +381,7 @@ minetest.register_node("default:dirt_with_dry_grass", {
|
|||
"default_dirt.png",
|
||||
{name = "default_dirt.png^default_dry_grass_side.png",
|
||||
tileable_vertical = false}},
|
||||
groups = {crumbly = 3, soil = 1},
|
||||
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},
|
||||
|
@ -384,7 +393,7 @@ minetest.register_node("default:dirt_with_snow", {
|
|||
tiles = {"default_snow.png", "default_dirt.png",
|
||||
{name = "default_dirt.png^default_snow_side.png",
|
||||
tileable_vertical = false}},
|
||||
groups = {crumbly = 3, soil = 1},
|
||||
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
|
||||
drop = 'default:dirt',
|
||||
light_source = 1,
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
|
@ -406,6 +415,13 @@ minetest.register_node("default:desert_sand", {
|
|||
sounds = default.node_sound_sand_defaults(),
|
||||
})
|
||||
|
||||
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(),
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("default:gravel", {
|
||||
description = "Gravel",
|
||||
|
@ -438,7 +454,6 @@ minetest.register_node("default:snow", {
|
|||
paramtype = "light",
|
||||
buildable_to = true,
|
||||
floodable = true,
|
||||
walkable = false,
|
||||
drawtype = "nodebox",
|
||||
light_source = 2,
|
||||
node_box = {
|
||||
|
@ -465,13 +480,20 @@ minetest.register_node("default:snow", {
|
|||
minetest.register_node("default:snowblock", {
|
||||
description = "Snow Block",
|
||||
tiles = {"default_snow.png"},
|
||||
groups = {crumbly = 3, puts_out_fire = 1},
|
||||
light_source = 2,
|
||||
groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1},
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_snow_footstep", gain = 0.15},
|
||||
dug = {name = "default_snow_footstep", gain = 0.2},
|
||||
dig = {name = "default_snow_footstep", gain = 0.2}
|
||||
}),
|
||||
|
||||
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,
|
||||
})
|
||||
|
||||
minetest.register_node("default:ice", {
|
||||
|
@ -479,7 +501,7 @@ minetest.register_node("default:ice", {
|
|||
tiles = {"default_ice.png"},
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
groups = {cracky = 3, puts_out_fire = 1},
|
||||
groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
|
@ -521,7 +543,7 @@ minetest.register_node("default:sapling", {
|
|||
on_timer = default.grow_sapling,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
|
||||
},
|
||||
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
|
||||
attached_node = 1, sapling = 1},
|
||||
|
@ -549,7 +571,6 @@ minetest.register_node("default:leaves", {
|
|||
description = "Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
waving = 1,
|
||||
visual_scale = 1.3,
|
||||
tiles = {"default_leaves.png"},
|
||||
special_tiles = {"default_leaves_simple.png"},
|
||||
paramtype = "light",
|
||||
|
@ -587,7 +608,7 @@ minetest.register_node("default:apple", {
|
|||
is_ground_content = false,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
|
||||
fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16}
|
||||
},
|
||||
groups = {fleshy = 3, dig_immediate = 3, flammable = 2,
|
||||
leafdecay = 3, leafdecay_drop = 1},
|
||||
|
@ -628,7 +649,6 @@ minetest.register_node("default:jungleleaves", {
|
|||
description = "Jungle Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
waving = 1,
|
||||
visual_scale = 1.3,
|
||||
tiles = {"default_jungleleaves.png"},
|
||||
special_tiles = {"default_jungleleaves_simple.png"},
|
||||
paramtype = "light",
|
||||
|
@ -659,7 +679,7 @@ minetest.register_node("default:junglesapling", {
|
|||
on_timer = default.grow_sapling,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
|
||||
},
|
||||
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
|
||||
attached_node = 1, sapling = 1},
|
||||
|
@ -709,7 +729,6 @@ minetest.register_node("default:pine_wood", {
|
|||
minetest.register_node("default:pine_needles",{
|
||||
description = "Pine Needles",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"default_pine_needles.png"},
|
||||
waving = 1,
|
||||
paramtype = "light",
|
||||
|
@ -740,7 +759,7 @@ minetest.register_node("default:pine_sapling", {
|
|||
on_timer = default.grow_sapling,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
|
||||
},
|
||||
groups = {snappy = 2, dig_immediate = 3, flammable = 3,
|
||||
attached_node = 1, sapling = 1},
|
||||
|
@ -790,8 +809,8 @@ minetest.register_node("default:acacia_wood", {
|
|||
minetest.register_node("default:acacia_leaves", {
|
||||
description = "Acacia Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"default_acacia_leaves.png"},
|
||||
special_tiles = {"default_acacia_leaves_simple.png"},
|
||||
waving = 1,
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
|
@ -821,7 +840,7 @@ minetest.register_node("default:acacia_sapling", {
|
|||
on_timer = default.grow_sapling,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
|
||||
},
|
||||
groups = {snappy = 2, dig_immediate = 3, flammable = 2,
|
||||
attached_node = 1, sapling = 1},
|
||||
|
@ -870,7 +889,6 @@ minetest.register_node("default:aspen_wood", {
|
|||
minetest.register_node("default:aspen_leaves", {
|
||||
description = "Aspen Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"default_aspen_leaves.png"},
|
||||
waving = 1,
|
||||
paramtype = "light",
|
||||
|
@ -901,7 +919,7 @@ minetest.register_node("default:aspen_sapling", {
|
|||
on_timer = default.grow_sapling,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||
fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16}
|
||||
},
|
||||
groups = {snappy = 2, dig_immediate = 3, flammable = 3,
|
||||
attached_node = 1, sapling = 1},
|
||||
|
@ -959,7 +977,7 @@ minetest.register_node("default:steelblock", {
|
|||
tiles = {"default_steel_block.png"},
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 1, level = 2},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
@ -976,7 +994,7 @@ minetest.register_node("default:copperblock", {
|
|||
tiles = {"default_copper_block.png"},
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 1, level = 2},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("default:bronzeblock", {
|
||||
|
@ -984,7 +1002,7 @@ minetest.register_node("default:bronzeblock", {
|
|||
tiles = {"default_bronze_block.png"},
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 1, level = 2},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
@ -1019,7 +1037,7 @@ minetest.register_node("default:goldblock", {
|
|||
tiles = {"default_gold_block.png"},
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
@ -1048,7 +1066,7 @@ minetest.register_node("default:cactus", {
|
|||
tiles = {"default_cactus_top.png", "default_cactus_top.png",
|
||||
"default_cactus_side.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {snappy = 1, choppy = 3},
|
||||
groups = {choppy = 3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_place = minetest.rotate_node,
|
||||
})
|
||||
|
@ -1064,7 +1082,7 @@ minetest.register_node("default:papyrus", {
|
|||
walkable = false,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
||||
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
|
||||
},
|
||||
groups = {snappy = 3, flammable = 2},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
|
@ -1090,7 +1108,7 @@ minetest.register_node("default:dry_shrub", {
|
|||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -1106,11 +1124,11 @@ minetest.register_node("default:junglegrass", {
|
|||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
|
||||
groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 1.19, 7 / 16},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -1127,11 +1145,11 @@ minetest.register_node("default:grass_1", {
|
|||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
|
||||
groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16},
|
||||
},
|
||||
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
|
@ -1157,11 +1175,11 @@ for i = 2, 5 do
|
|||
buildable_to = true,
|
||||
drop = "default:grass_1",
|
||||
groups = {snappy = 3, flora = 1, attached_node = 1,
|
||||
not_in_creative_inventory = 1, grass = 1},
|
||||
not_in_creative_inventory = 1, grass = 1, flammable = 1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
@ -1183,7 +1201,7 @@ minetest.register_node("default:dry_grass_1", {
|
|||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16},
|
||||
},
|
||||
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
|
@ -1213,11 +1231,95 @@ for i = 2, 5 do
|
|||
sounds = default.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -1 / 16, 6 / 16},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
minetest.register_node("default:bush_stem", {
|
||||
description = "Bush Stem",
|
||||
drawtype = "plantlike",
|
||||
visual_scale = 1.18,
|
||||
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(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.54, 7 / 16},
|
||||
},
|
||||
})
|
||||
|
||||
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},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("default:acacia_bush_stem", {
|
||||
description = "Acacia Bush Stem",
|
||||
drawtype = "plantlike",
|
||||
visual_scale = 1.18,
|
||||
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(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.54, 7 / 16},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("default:acacia_bush_leaves", {
|
||||
description = "Acacia Bush Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
waving = 1,
|
||||
tiles = {"default_acacia_leaves_simple.png"},
|
||||
paramtype = "light",
|
||||
groups = {snappy = 3, flammable = 2, leaves = 1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
|
||||
--
|
||||
-- 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(),
|
||||
})
|
||||
|
||||
|
||||
--
|
||||
-- Liquids
|
||||
--
|
||||
|
@ -1263,7 +1365,8 @@ minetest.register_node("default:water_source", {
|
|||
liquid_alternative_source = "default:water_source",
|
||||
liquid_viscosity = 1,
|
||||
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
|
||||
groups = {water = 3, liquid = 3, puts_out_fire = 1},
|
||||
groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("default:water_flowing", {
|
||||
|
@ -1308,7 +1411,8 @@ minetest.register_node("default:water_flowing", {
|
|||
liquid_viscosity = 1,
|
||||
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
|
||||
groups = {water = 3, liquid = 3, puts_out_fire = 1,
|
||||
not_in_creative_inventory = 1},
|
||||
not_in_creative_inventory = 1, cools_lava = 1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
@ -1354,7 +1458,8 @@ minetest.register_node("default:river_water_source", {
|
|||
liquid_renewable = false,
|
||||
liquid_range = 2,
|
||||
post_effect_color = {a = 103, r = 30, g = 76, b = 90},
|
||||
groups = {water = 3, liquid = 3, puts_out_fire = 1},
|
||||
groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("default:river_water_flowing", {
|
||||
|
@ -1401,7 +1506,8 @@ minetest.register_node("default:river_water_flowing", {
|
|||
liquid_range = 2,
|
||||
post_effect_color = {a = 103, r = 30, g = 76, b = 90},
|
||||
groups = {water = 3, liquid = 3, puts_out_fire = 1,
|
||||
not_in_creative_inventory = 1},
|
||||
not_in_creative_inventory = 1, cools_lava = 1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
@ -1502,58 +1608,6 @@ minetest.register_node("default:lava_flowing", {
|
|||
-- Tools / "Advanced" crafting / Non-"natural"
|
||||
--
|
||||
|
||||
minetest.register_node("default:torch", {
|
||||
description = "Torch",
|
||||
drawtype = "torchlike",
|
||||
tiles = {
|
||||
{
|
||||
name = "default_torch_on_floor_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 3.0
|
||||
},
|
||||
},
|
||||
{
|
||||
name="default_torch_on_ceiling_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 3.0
|
||||
},
|
||||
},
|
||||
{
|
||||
name="default_torch_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 3.0
|
||||
},
|
||||
},
|
||||
},
|
||||
inventory_image = "default_torch_on_floor.png",
|
||||
wield_image = "default_torch_on_floor.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "wallmounted",
|
||||
sunlight_propagates = true,
|
||||
is_ground_content = false,
|
||||
walkable = false,
|
||||
light_source = default.LIGHT_MAX - 1,
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1},
|
||||
wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1},
|
||||
wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1},
|
||||
},
|
||||
groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1},
|
||||
legacy_wallmounted = true,
|
||||
sounds = default.node_sound_defaults(),
|
||||
})
|
||||
|
||||
|
||||
local chest_formspec =
|
||||
"size[8,9]" ..
|
||||
default.gui_bg ..
|
||||
|
@ -1583,16 +1637,30 @@ local function get_locked_chest_formspec(pos)
|
|||
end
|
||||
|
||||
local function has_locked_chest_privilege(meta, player)
|
||||
local name = ""
|
||||
if player then
|
||||
if minetest.check_player_privs(player, "protection_bypass") then
|
||||
return true
|
||||
end
|
||||
name = player:get_player_name()
|
||||
end
|
||||
if name ~= meta:get_string("owner") then
|
||||
else
|
||||
return false
|
||||
end
|
||||
|
||||
-- is player wielding the right key?
|
||||
local item = player:get_wielded_item()
|
||||
if item:get_name() == "default:key" then
|
||||
local key_meta = minetest.parse_json(item:get_metadata())
|
||||
local secret = meta:get_string("key_lock_secret")
|
||||
if secret ~= key_meta.secret then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
if player:get_player_name() ~= meta:get_string("owner") then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -1712,6 +1780,41 @@ minetest.register_node("default:chest_locked", {
|
|||
return itemstack
|
||||
end,
|
||||
on_blast = function() end,
|
||||
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 = minetest.parse_json(itemstack:get_metadata())
|
||||
|
||||
if secret ~= key_meta.secret then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.show_formspec(
|
||||
player:get_player_name(),
|
||||
"default:chest_locked",
|
||||
get_locked_chest_formspec(pos)
|
||||
)
|
||||
end,
|
||||
on_skeleton_key_use = function(pos, player, newsecret)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
local name = player:get_player_name()
|
||||
|
||||
-- verify placer is owner of lockable chest
|
||||
if owner ~= name then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
minetest.chat_send_player(name, "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,
|
||||
})
|
||||
|
||||
|
||||
|
@ -1727,6 +1830,25 @@ local bookshelf_formspec =
|
|||
"listring[current_player;main]" ..
|
||||
default.get_hotbar_bg(0,2.85)
|
||||
|
||||
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
|
||||
end
|
||||
return formspec
|
||||
end
|
||||
|
||||
minetest.register_node("default:bookshelf", {
|
||||
description = "Bookshelf",
|
||||
tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
|
||||
|
@ -1738,7 +1860,7 @@ minetest.register_node("default:bookshelf", {
|
|||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", bookshelf_formspec)
|
||||
meta:set_string("formspec", get_bookshelf_formspec(nil))
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("books", 8 * 2)
|
||||
end,
|
||||
|
@ -1755,14 +1877,20 @@ minetest.register_node("default:bookshelf", {
|
|||
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" moves stuff in bookshelf at " .. minetest.pos_to_string(pos))
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory()))
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" moves stuff to bookshelf at " .. minetest.pos_to_string(pos))
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory()))
|
||||
end,
|
||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" takes stuff from bookshelf at " .. minetest.pos_to_string(pos))
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory()))
|
||||
end,
|
||||
on_blast = function(pos)
|
||||
local drops = {}
|
||||
|
@ -1823,7 +1951,7 @@ register_sign("wood", "Wooden", {
|
|||
})
|
||||
|
||||
register_sign("steel", "Steel", {
|
||||
sounds = default.node_sound_defaults(),
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
groups = {cracky = 2, attached_node = 1}
|
||||
})
|
||||
|
||||
|
@ -1869,7 +1997,7 @@ minetest.register_node("default:ladder_steel", {
|
|||
--wall_side = = <default>
|
||||
},
|
||||
groups = {cracky = 2},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
default.register_fence("default:fence_wood", {
|
||||
|
@ -1945,27 +2073,6 @@ minetest.register_node("default:obsidian_glass", {
|
|||
})
|
||||
|
||||
|
||||
minetest.register_node("default:rail", {
|
||||
description = "Rail",
|
||||
drawtype = "raillike",
|
||||
tiles = {"default_rail.png", "default_rail_curved.png",
|
||||
"default_rail_t_junction.png", "default_rail_crossing.png"},
|
||||
inventory_image = "default_rail.png",
|
||||
wield_image = "default_rail.png",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
is_ground_content = false,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
-- but how to specify the dimensions for curved and sideways rails?
|
||||
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
|
||||
},
|
||||
groups = {dig_immediate = 2, attached_node = 1,
|
||||
connect_to_raillike = minetest.raillike_group("rail")},
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("default:brick", {
|
||||
description = "Brick Block",
|
||||
paramtype2 = "facedir",
|
||||
|
|
|
@ -25,7 +25,6 @@ default.player_register_model("character.b3d", {
|
|||
walk = { x=168, y=187, },
|
||||
mine = { x=189, y=198, },
|
||||
walk_mine = { x=200, y=219, },
|
||||
-- Extra animations (not currently used by the game).
|
||||
sit = { x= 81, y=160, },
|
||||
},
|
||||
})
|
||||
|
@ -95,7 +94,7 @@ minetest.register_on_joinplayer(function(player)
|
|||
default.player_attached[player:get_player_name()] = false
|
||||
default.player_set_model(player, "character.b3d")
|
||||
player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30)
|
||||
|
||||
|
||||
-- set GUI
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
player:set_inventory_formspec(default.gui_survival_form)
|
||||
|
|
BIN
mods/default/schematics/acacia_bush.mts
Normal file
BIN
mods/default/schematics/bush.mts
Normal file
BIN
mods/default/schematics/corals.mts
Normal file
BIN
mods/default/sounds/default_dig_metal.ogg
Normal file
BIN
mods/default/sounds/default_dig_snappy.ogg
Normal file
BIN
mods/default/sounds/default_dug_metal.1.ogg
Normal file
BIN
mods/default/sounds/default_dug_metal.2.ogg
Normal file
BIN
mods/default/sounds/default_item_smoke.ogg
Normal file
BIN
mods/default/sounds/default_metal_footstep.1.ogg
Normal file
BIN
mods/default/sounds/default_metal_footstep.2.ogg
Normal file
BIN
mods/default/sounds/default_metal_footstep.3.ogg
Normal file
BIN
mods/default/sounds/default_place_node_metal.1.ogg
Normal file
BIN
mods/default/sounds/default_place_node_metal.2.ogg
Normal file
BIN
mods/default/sounds/default_tool_breaks.1.ogg
Normal file
BIN
mods/default/sounds/default_tool_breaks.2.ogg
Normal file
BIN
mods/default/sounds/default_tool_breaks.3.ogg
Normal file
BIN
mods/default/sounds/default_water_footstep.1.ogg
Normal file
BIN
mods/default/sounds/default_water_footstep.2.ogg
Normal file
BIN
mods/default/sounds/default_water_footstep.3.ogg
Normal file
BIN
mods/default/sounds/default_water_footstep.4.ogg
Normal file
BIN
mods/default/sounds/player_damage.ogg
Normal file
BIN
mods/default/textures/default_acacia_bush_stem.png
Normal file
After Width: | Height: | Size: 476 B |
BIN
mods/default/textures/default_acacia_leaves_simple.png
Normal file
After Width: | Height: | Size: 688 B |
Before Width: | Height: | Size: 682 B After Width: | Height: | Size: 579 B |
Before Width: | Height: | Size: 731 B After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 3.9 KiB |
BIN
mods/default/textures/default_bookshelf_slot.png
Normal file
After Width: | Height: | Size: 216 B |
BIN
mods/default/textures/default_bush_stem.png
Normal file
After Width: | Height: | Size: 428 B |
BIN
mods/default/textures/default_coral_brown.png
Normal file
After Width: | Height: | Size: 401 B |
BIN
mods/default/textures/default_coral_orange.png
Normal file
After Width: | Height: | Size: 358 B |
BIN
mods/default/textures/default_coral_skeleton.png
Normal file
After Width: | Height: | Size: 256 B |
Before Width: | Height: | Size: 527 B After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 552 B After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 3 KiB After Width: | Height: | Size: 4 KiB |
BIN
mods/default/textures/default_item_smoke.png
Normal file
After Width: | Height: | Size: 307 B |
Before Width: | Height: | Size: 184 B After Width: | Height: | Size: 425 B |
Before Width: | Height: | Size: 430 B After Width: | Height: | Size: 417 B |
Before Width: | Height: | Size: 736 B After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 823 B After Width: | Height: | Size: 5.1 KiB |
BIN
mods/default/textures/default_key.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
mods/default/textures/default_key_skeleton.png
Normal file
After Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 685 B After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 304 B After Width: | Height: | Size: 773 B |
Before Width: | Height: | Size: 817 B After Width: | Height: | Size: 838 B |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 5 KiB |
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 203 B After Width: | Height: | Size: 391 B |
Before Width: | Height: | Size: 242 B |
Before Width: | Height: | Size: 262 B |
Before Width: | Height: | Size: 241 B |
Before Width: | Height: | Size: 247 B |
Before Width: | Height: | Size: 637 B After Width: | Height: | Size: 4.4 KiB |
BIN
mods/default/textures/default_silver_sand.png
Normal file
After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 164 B After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 376 B After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 183 B After Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 545 B After Width: | Height: | Size: 4.1 KiB |
|
@ -32,7 +32,10 @@ minetest.register_tool("default:pick_wood", {
|
|||
},
|
||||
damage_groups = {fleshy=2},
|
||||
},
|
||||
groups = {flammable = 2},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:pick_stone", {
|
||||
description = "Stone Pickaxe",
|
||||
inventory_image = "default_tool_stonepick.png",
|
||||
|
@ -44,7 +47,9 @@ minetest.register_tool("default:pick_stone", {
|
|||
},
|
||||
damage_groups = {fleshy=3},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:pick_steel", {
|
||||
description = "Steel Pickaxe",
|
||||
inventory_image = "default_tool_steelpick.png",
|
||||
|
@ -56,7 +61,9 @@ minetest.register_tool("default:pick_steel", {
|
|||
},
|
||||
damage_groups = {fleshy=4},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:pick_bronze", {
|
||||
description = "Bronze Pickaxe",
|
||||
inventory_image = "default_tool_bronzepick.png",
|
||||
|
@ -68,7 +75,9 @@ minetest.register_tool("default:pick_bronze", {
|
|||
},
|
||||
damage_groups = {fleshy=4},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:pick_mese", {
|
||||
description = "Mese Pickaxe",
|
||||
inventory_image = "default_tool_mesepick.png",
|
||||
|
@ -80,7 +89,9 @@ minetest.register_tool("default:pick_mese", {
|
|||
},
|
||||
damage_groups = {fleshy=5},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:pick_diamond", {
|
||||
description = "Diamond Pickaxe",
|
||||
inventory_image = "default_tool_diamondpick.png",
|
||||
|
@ -92,6 +103,7 @@ minetest.register_tool("default:pick_diamond", {
|
|||
},
|
||||
damage_groups = {fleshy=5},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
--
|
||||
|
@ -110,7 +122,10 @@ minetest.register_tool("default:shovel_wood", {
|
|||
},
|
||||
damage_groups = {fleshy=2},
|
||||
},
|
||||
groups = {flammable = 2},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:shovel_stone", {
|
||||
description = "Stone Shovel",
|
||||
inventory_image = "default_tool_stoneshovel.png",
|
||||
|
@ -123,7 +138,9 @@ minetest.register_tool("default:shovel_stone", {
|
|||
},
|
||||
damage_groups = {fleshy=2},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:shovel_steel", {
|
||||
description = "Steel Shovel",
|
||||
inventory_image = "default_tool_steelshovel.png",
|
||||
|
@ -136,7 +153,9 @@ minetest.register_tool("default:shovel_steel", {
|
|||
},
|
||||
damage_groups = {fleshy=3},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:shovel_bronze", {
|
||||
description = "Bronze Shovel",
|
||||
inventory_image = "default_tool_bronzeshovel.png",
|
||||
|
@ -149,7 +168,9 @@ minetest.register_tool("default:shovel_bronze", {
|
|||
},
|
||||
damage_groups = {fleshy=3},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:shovel_mese", {
|
||||
description = "Mese Shovel",
|
||||
inventory_image = "default_tool_meseshovel.png",
|
||||
|
@ -162,7 +183,9 @@ minetest.register_tool("default:shovel_mese", {
|
|||
},
|
||||
damage_groups = {fleshy=4},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:shovel_diamond", {
|
||||
description = "Diamond Shovel",
|
||||
inventory_image = "default_tool_diamondshovel.png",
|
||||
|
@ -175,6 +198,7 @@ minetest.register_tool("default:shovel_diamond", {
|
|||
},
|
||||
damage_groups = {fleshy=4},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
--
|
||||
|
@ -192,7 +216,10 @@ minetest.register_tool("default:axe_wood", {
|
|||
},
|
||||
damage_groups = {fleshy=2},
|
||||
},
|
||||
groups = {flammable = 2},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:axe_stone", {
|
||||
description = "Stone Axe",
|
||||
inventory_image = "default_tool_stoneaxe.png",
|
||||
|
@ -204,7 +231,9 @@ minetest.register_tool("default:axe_stone", {
|
|||
},
|
||||
damage_groups = {fleshy=3},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:axe_steel", {
|
||||
description = "Steel Axe",
|
||||
inventory_image = "default_tool_steelaxe.png",
|
||||
|
@ -216,7 +245,9 @@ minetest.register_tool("default:axe_steel", {
|
|||
},
|
||||
damage_groups = {fleshy=4},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:axe_bronze", {
|
||||
description = "Bronze Axe",
|
||||
inventory_image = "default_tool_bronzeaxe.png",
|
||||
|
@ -228,7 +259,9 @@ minetest.register_tool("default:axe_bronze", {
|
|||
},
|
||||
damage_groups = {fleshy=4},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:axe_mese", {
|
||||
description = "Mese Axe",
|
||||
inventory_image = "default_tool_meseaxe.png",
|
||||
|
@ -240,7 +273,9 @@ minetest.register_tool("default:axe_mese", {
|
|||
},
|
||||
damage_groups = {fleshy=6},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:axe_diamond", {
|
||||
description = "Diamond Axe",
|
||||
inventory_image = "default_tool_diamondaxe.png",
|
||||
|
@ -252,6 +287,7 @@ minetest.register_tool("default:axe_diamond", {
|
|||
},
|
||||
damage_groups = {fleshy=7},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
--
|
||||
|
@ -268,8 +304,11 @@ minetest.register_tool("default:sword_wood", {
|
|||
snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1},
|
||||
},
|
||||
damage_groups = {fleshy=2},
|
||||
}
|
||||
},
|
||||
groups = {flammable = 2},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:sword_stone", {
|
||||
description = "Stone Sword",
|
||||
inventory_image = "default_tool_stonesword.png",
|
||||
|
@ -280,8 +319,10 @@ minetest.register_tool("default:sword_stone", {
|
|||
snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1},
|
||||
},
|
||||
damage_groups = {fleshy=4},
|
||||
}
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:sword_steel", {
|
||||
description = "Steel Sword",
|
||||
inventory_image = "default_tool_steelsword.png",
|
||||
|
@ -292,8 +333,10 @@ minetest.register_tool("default:sword_steel", {
|
|||
snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2},
|
||||
},
|
||||
damage_groups = {fleshy=6},
|
||||
}
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:sword_bronze", {
|
||||
description = "Bronze Sword",
|
||||
inventory_image = "default_tool_bronzesword.png",
|
||||
|
@ -304,8 +347,10 @@ minetest.register_tool("default:sword_bronze", {
|
|||
snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2},
|
||||
},
|
||||
damage_groups = {fleshy=6},
|
||||
}
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:sword_mese", {
|
||||
description = "Mese Sword",
|
||||
inventory_image = "default_tool_mesesword.png",
|
||||
|
@ -316,8 +361,10 @@ minetest.register_tool("default:sword_mese", {
|
|||
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
|
||||
},
|
||||
damage_groups = {fleshy=7},
|
||||
}
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:sword_diamond", {
|
||||
description = "Diamond Sword",
|
||||
inventory_image = "default_tool_diamondsword.png",
|
||||
|
@ -328,5 +375,78 @@ minetest.register_tool("default:sword_diamond", {
|
|||
snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3},
|
||||
},
|
||||
damage_groups = {fleshy=8},
|
||||
}
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
})
|
||||
|
||||
minetest.register_tool("default:skeleton_key", {
|
||||
description = "Skeleton Key",
|
||||
inventory_image = "default_key_skeleton.png",
|
||||
groups = {key = 1},
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local pos = pointed_thing.under
|
||||
local node = minetest.get_node(pos)
|
||||
|
||||
if not node then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local on_skeleton_key_use = minetest.registered_nodes[node.name].on_skeleton_key_use
|
||||
if on_skeleton_key_use then
|
||||
-- make a new key secret in case the node callback needs it
|
||||
local random = math.random
|
||||
local newsecret = string.format(
|
||||
"%04x%04x%04x%04x",
|
||||
random(2^16) - 1, random(2^16) - 1,
|
||||
random(2^16) - 1, random(2^16) - 1)
|
||||
|
||||
local secret, _, _ = on_skeleton_key_use(pos, placer, newsecret)
|
||||
|
||||
if secret then
|
||||
-- finish and return the new key
|
||||
itemstack:take_item()
|
||||
itemstack:add_item("default:key")
|
||||
itemstack:set_metadata(minetest.write_json({
|
||||
secret = secret
|
||||
}))
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_tool("default:key", {
|
||||
description = "Key",
|
||||
inventory_image = "default_key.png",
|
||||
groups = {key = 1, not_in_creative_inventory = 1},
|
||||
stack_max = 1,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local pos = pointed_thing.under
|
||||
local node = minetest.get_node(pos)
|
||||
|
||||
if not node or node.name == "ignore" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local ndef = minetest.registered_nodes[node.name]
|
||||
if not ndef then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local on_key_use = ndef.on_key_use
|
||||
if on_key_use then
|
||||
on_key_use(pos, placer)
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
})
|
||||
|
|
147
mods/default/torch.lua
Normal file
|
@ -0,0 +1,147 @@
|
|||
|
||||
--[[
|
||||
|
||||
Torch mod - formerly mod "Torches"
|
||||
======================
|
||||
|
||||
(c) Copyright BlockMen (2013-2015)
|
||||
(C) Copyright sofar <sofar@foo-projects.org> (2016)
|
||||
|
||||
This mod changes the default torch drawtype from "torchlike" to "mesh",
|
||||
giving the torch a three dimensional appearance. The mesh contains the
|
||||
proper pixel mapping to make the animation appear as a particle above
|
||||
the torch, while in fact the animation is just the texture of the mesh.
|
||||
|
||||
|
||||
License:
|
||||
~~~~~~~~
|
||||
(c) Copyright BlockMen (2013-2015)
|
||||
|
||||
Textures and Meshes/Models:
|
||||
CC-BY 3.0 BlockMen
|
||||
Note that the models were entirely done from scratch by sofar.
|
||||
|
||||
Code:
|
||||
Licensed under the GNU LGPL version 2.1 or higher.
|
||||
You can redistribute it and/or modify it under
|
||||
the terms of the GNU Lesser General Public License
|
||||
as published by the Free Software Foundation;
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt
|
||||
|
||||
--]]
|
||||
|
||||
minetest.register_node("default:torch", {
|
||||
description = "Torch",
|
||||
drawtype = "mesh",
|
||||
mesh = "torch_floor.obj",
|
||||
inventory_image = "default_torch_on_floor.png",
|
||||
wield_image = "default_torch_on_floor.png",
|
||||
tiles = {{
|
||||
name = "default_torch_on_floor_animated.png",
|
||||
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
|
||||
}},
|
||||
paramtype = "light",
|
||||
paramtype2 = "wallmounted",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
liquids_pointable = false,
|
||||
light_source = 13,
|
||||
groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1},
|
||||
drop = "default:torch",
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8},
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local under = pointed_thing.under
|
||||
local node = minetest.get_node(under)
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
if def and def.on_rightclick and
|
||||
((not placer) or (placer and not placer:get_player_control().sneak)) then
|
||||
return def.on_rightclick(under, node, placer, itemstack,
|
||||
pointed_thing) or itemstack
|
||||
end
|
||||
|
||||
local above = pointed_thing.above
|
||||
local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above))
|
||||
local fakestack = itemstack
|
||||
if wdir == 0 then
|
||||
fakestack:set_name("default:torch_ceiling")
|
||||
elseif wdir == 1 then
|
||||
fakestack:set_name("default:torch")
|
||||
else
|
||||
fakestack:set_name("default:torch_wall")
|
||||
end
|
||||
|
||||
itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir)
|
||||
itemstack:set_name("default:torch")
|
||||
|
||||
return itemstack
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("default:torch_wall", {
|
||||
drawtype = "mesh",
|
||||
mesh = "torch_wall.obj",
|
||||
tiles = {{
|
||||
name = "default_torch_on_floor_animated.png",
|
||||
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
|
||||
}},
|
||||
paramtype = "light",
|
||||
paramtype2 = "wallmounted",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
light_source = 13,
|
||||
groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1},
|
||||
drop = "default:torch",
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8},
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("default:torch_ceiling", {
|
||||
drawtype = "mesh",
|
||||
mesh = "torch_ceiling.obj",
|
||||
tiles = {{
|
||||
name = "default_torch_on_floor_animated.png",
|
||||
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
|
||||
}},
|
||||
paramtype = "light",
|
||||
paramtype2 = "wallmounted",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
light_source = 13,
|
||||
groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1},
|
||||
drop = "default:torch",
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8},
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_lbm({
|
||||
name = "default:3dtorch",
|
||||
nodenames = {"default:torch", "torches:floor", "torches:wall"},
|
||||
action = function(pos, node)
|
||||
if node.param2 == 0 then
|
||||
minetest.set_node(pos, {name = "default:torch_ceiling",
|
||||
param2 = node.param2})
|
||||
elseif node.param2 == 1 then
|
||||
minetest.set_node(pos, {name = "default:torch",
|
||||
param2 = node.param2})
|
||||
else
|
||||
minetest.set_node(pos, {name = "default:torch_wall",
|
||||
param2 = node.param2})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
|
@ -435,12 +435,17 @@ function default.sapling_on_place(itemstack, placer, pointed_thing,
|
|||
sapling_name, minp_relative, maxp_relative, interval)
|
||||
-- Position of sapling
|
||||
local pos = pointed_thing.under
|
||||
local node = minetest.get_node(pos)
|
||||
local pdef = minetest.registered_nodes[node.name]
|
||||
local node = minetest.get_node_or_nil(pos)
|
||||
local pdef = node and minetest.registered_nodes[node.name]
|
||||
|
||||
if pdef and pdef.on_rightclick and not placer:get_player_control().sneak then
|
||||
return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing)
|
||||
end
|
||||
|
||||
if not pdef or not pdef.buildable_to then
|
||||
pos = pointed_thing.above
|
||||
node = minetest.get_node(pos)
|
||||
pdef = minetest.registered_nodes[node.name]
|
||||
node = minetest.get_node_or_nil(pos)
|
||||
pdef = node and minetest.registered_nodes[node.name]
|
||||
if not pdef or not pdef.buildable_to then
|
||||
return itemstack
|
||||
end
|
||||
|
|