1
0
mirror of https://github.com/minetest/minetest_game.git synced 2025-06-30 05:40:24 +02:00

Merge remote-tracking branch 'upstream/master' into dev

This commit is contained in:
2023-11-26 13:53:43 +01:00
87 changed files with 755 additions and 737 deletions

View File

@ -38,16 +38,23 @@ function default.chest.chest_lid_close(pn)
default.chest.open_chests[pn] = nil
for k, v in pairs(default.chest.open_chests) do
if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then
if vector.equals(v.pos, pos) then
-- another player is also looking at the chest
return true
end
end
local node = minetest.get_node(pos)
minetest.after(0.2, minetest.swap_node, pos, { name = swap,
param2 = node.param2 })
minetest.sound_play(sound, {gain = 0.3, pos = pos,
max_hear_distance = 10}, true)
minetest.after(0.2, function()
local current_node = minetest.get_node(pos)
if current_node.name ~= swap .. "_open" then
-- the chest has already been replaced, don't try to replace what's there.
return
end
minetest.swap_node(pos, {name = swap, param2 = node.param2})
minetest.sound_play(sound, {gain = 0.3, pos = pos,
max_hear_distance = 10}, true)
end)
end
default.chest.open_chests = {}

View File

@ -744,16 +744,23 @@ function default.log_player_action(player, ...)
minetest.log("action", msg)
end
local nop = function() end
function default.set_inventory_action_loggers(def, name)
local on_move = def.on_metadata_inventory_move or nop
def.on_metadata_inventory_move = function(pos, from_list, from_index,
to_list, to_index, count, player)
default.log_player_action(player, "moves stuff in", name, "at", pos)
return on_move(pos, from_list, from_index, to_list, to_index, count, player)
end
local on_put = def.on_metadata_inventory_put or nop
def.on_metadata_inventory_put = function(pos, listname, index, stack, player)
default.log_player_action(player, "moves", stack:get_name(), "to", name, "at", pos)
default.log_player_action(player, "moves", stack:get_name(), stack:get_count(), "to", name, "at", pos)
return on_put(pos, listname, index, stack, player)
end
local on_take = def.on_metadata_inventory_take or nop
def.on_metadata_inventory_take = function(pos, listname, index, stack, player)
default.log_player_action(player, "takes", stack:get_name(), "from", name, "at", pos)
default.log_player_action(player, "takes", stack:get_name(), stack:get_count(), "from", name, "at", pos)
return on_take(pos, listname, index, stack, player)
end
end

View File

@ -19,7 +19,7 @@ Licenses of media (textures, models and sounds)
-----------------------------------------------
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
Copyright (C) 2010-2018:
Copyright (C) 2010-2023:
celeron55, Perttu Ahola <celeron55@gmail.com>
Cisoun
@ -52,6 +52,7 @@ Copyright (C) 2010-2018:
random-geek
Extex101
An0n3m0us
Lopano
You are free to:
Share — copy and redistribute the material in any medium or format.

View File

@ -108,7 +108,7 @@ Acacia Tree Sapling=Akazienbaumsetzling
Aspen Tree=Espenbaum
Aspen Wood Planks=Espenholzplanken
Aspen Tree Leaves=Espenbaumblätter
Aspen Tree Sapling=Esepenbaumsetzling
Aspen Tree Sapling=Espenbaumsetzling
Coal Ore=Kohleerz
Coal Block=Kohleblock
Iron Ore=Eisenerz

View File

@ -111,7 +111,7 @@ Aspen Tree Leaves=Feuilles de tremble
Aspen Tree Sapling=Pousse de tremble
Coal Ore=Minerai de charbon
Coal Block=Bloc de charbon
Iron Ore=Bloc de fer
Iron Ore=Minerai de fer
Steel Block=Bloc d'acier
Copper Ore=Minerai de cuivre
Copper Block=Bloc de cuivre

View File

@ -1,44 +1,44 @@
# textdomain: default
Locked Chest=Заблокована Скриня
Locked Chest (owned by @1)=Заблокована Скриня (власник: @1)
You do not own this chest.=Ви не власник цієї скрині.
a locked chest=заблокована скриня
Locked Chest=Замкнена скриня
Locked Chest (owned by @1)=Замкнена скриня (власник @1)
You do not own this chest.=Ви не власник цієї скрині.
a locked chest=замкнена скриня
Chest=Скриня
Write=Писати
Read=Читати
Title:=Заголовок:
Contents:=Вміст:
Save=Зберегти
by @1=@1
by @1=Автор: @1
Page @1 of @2=Сторінка @1 з @2
The book you were writing to mysteriously disappeared.=
"@1" by @2="@1" @2
The book you were writing to mysteriously disappeared.=Книга, в яку ви писали, загадковим чином зникла.
"@1" by @2=@2 — "@1"
Blueberries=Чорниці
Book=Книга
Book with Text=Книга З Текстом
Bronze Ingot=Бронзовий Злиток
Clay Brick=Глиняна Цегла
Clay Lump=Шматок Глини
Coal Lump=Шматок Вугілля
Copper Ingot=Мідний Злиток
Copper Lump=Шматок Меді
Diamond=Алмаз
Book with Text=Книга з текстом
Bronze Ingot=Бронзовий злиток
Clay Brick=Глиняна цегла
Clay Lump=Шматок глини
Coal Lump=Шматок вугілля
Copper Ingot=Мідний злиток
Copper Lump=Шматок міді
Diamond=Діамант
Flint=Кремінь
Gold Ingot=Золотий Злиток
Gold Lump=Шматок Золота
Iron Lump=Шматок Заліза
Gold Ingot=Золотий злиток
Gold Lump=Шматок золота
Iron Lump=Шматок заліза
Mese Crystal=Кристал Месе
Mese Crystal Fragment=Уламок Кристалу Месе
Obsidian Shard=Обсидіановий Уламок
Mese Crystal Fragment=Уламок кристалу Месе
Obsidian Shard=Обсидіановий уламок
Paper=Папір
Steel Ingot=Залізний Злиток
Stick=Палка
Tin Ingot=Шматок Олова
Tin Lump=Уламок Олова
Furnace is empty=Пічка Порожня
100% (output full)=100% (повне приготування)
Steel Ingot=Сталевий злиток
Stick=Палиця
Tin Ingot=Олов'яний злиток
Tin Lump=Шматок олова
Furnace is empty=Піч порожня
100% (output full)=100% (піч переповнена)
@1%=@1%
Not cookable=Не може бути приготовлено
Not cookable=Не може бути приготовано
Empty=Порожньо
Furnace active=Піч запалена
Furnace inactive=Піч не запалена
@ -46,170 +46,170 @@ Furnace inactive=Піч не запалена
Furnace=Піч
Stone=Камінь
Cobblestone=Кругляк
Stone Brick=Кам'яна Цегла
Stone Block=Кам'яний Блок
Mossy Cobblestone=Моховий Кругляк
Desert Stone=Пустельний Камінь
Desert Cobblestone=Пустельний Камінь
Desert Stone Brick=Пустельна Кам'яна Цегла
Desert Stone Block=Пустельний Кам'яний Блок
Sandstone=Піщаник
Sandstone Brick=Цегла З Піщанику
Sandstone Block=Блок З Піщанику
Desert Sandstone=Пустельний Піщаник
Desert Sandstone Brick=Пустельна Цегла З Піщанику
Desert Sandstone Block=Пустельний Блок З Піщанику
Silver Sandstone=Срібний Піщаник
Silver Sandstone Brick=Цегла Із Срібного Піщанику
Silver Sandstone Block=Блок Із Срібного Піщанику
Stone Brick=Кам'яна цегла
Stone Block=Блок каменю
Mossy Cobblestone=Моховитий кругляк
Desert Stone=Пустельний камінь
Desert Cobblestone=Пустельний кругляк
Desert Stone Brick=Цегла з пустельного каменю
Desert Stone Block=Блок пустельного каменю
Sandstone=Пісковик
Sandstone Brick=Пісковикова цегла
Sandstone Block=Блок пісковику
Desert Sandstone=Пустельний пісковик
Desert Sandstone Brick=Цегла з пустельного пісковику
Desert Sandstone Block=Блок пустельного пісковику
Silver Sandstone=Срібний пісковик
Silver Sandstone Brick=Цегла зі срібного пісковику
Silver Sandstone Block=Блок срібного пісковику
Obsidian=Обсидіан
Obsidian Brick=Обсидіанова Цегла
Obsidian Block=Обсидіановий Блок
Obsidian Brick=Обсидіанова цегла
Obsidian Block=Блок обсидіану
Dirt=Земля
Dirt with Grass=Земля З Травою
Dirt with Grass and Footsteps=Земля З Травою Та Слідами
Dirt with Savanna Grass=Земля Із Саванною Травою
Dirt with Snow=Земля Зі Снігом
Dirt with Rainforest Litter=Земля Із Тропічною Підстилкою
Dirt with Coniferous Litter=Земля Із Сосновою Підстилкою
Savanna Dirt=Саваннова Земля
Savanna Dirt with Savanna Grass=Саваннова Земля Із Травою
Permafrost=Заморожений Ґрунт
Permafrost with Stones=Заморожений Ґрунт Із Камінням
Permafrost with Moss=Заморожений Ґрунт Із Мохом
Dirt with Grass=Земля з травою
Dirt with Grass and Footsteps=Земля з травою та слідами
Dirt with Savanna Grass=Земля із саванною травою
Dirt with Snow=Земля зі снігом
Dirt with Rainforest Litter=Земля з тропічно-лісовою підстилкою
Dirt with Coniferous Litter=Земля з хвойно-лісовою підстилкою
Savanna Dirt=Саванна земля
Savanna Dirt with Savanna Grass=Саванна земля із саванною травою
Permafrost=Вічна мерзлота
Permafrost with Stones=Вічна мерзлота з камінням
Permafrost with Moss=Вічна мерзлота з мохом
Sand=Пісок
Desert Sand=Пустельний Пісок
Silver Sand=Срібний Пісок
Desert Sand=Пустельний пісок
Silver Sand=Срібний пісок
Gravel=Гравій
Clay=Глиняний Блок
Clay=Глина
Snow=Сніг
Snow Block=Сніговий Блок
Ice=Лід
Cave Ice=Печерний Лід
Apple Tree=Стовбур Яблуні
Apple Wood Planks=Яблуневі Дошки
Apple Tree Sapling=Саджанець Яблуні
Apple Tree Leaves=Яблуневе Листя
Snow Block=Блок снігу
Ice=Крига
Cave Ice=Печерова крига
Apple Tree=Стовбур яблуні
Apple Wood Planks=Яблуневі дошки
Apple Tree Sapling=Саджанець яблуні
Apple Tree Leaves=Яблуневе листя
Apple=Яблуко
Apple Marker=Яблучна Мітка
Jungle Tree=Стовбур Тропічного Дерева
Jungle Wood Planks=Дошки З Тропічного Дерева
Jungle Tree Leaves=Листя Тропічного Дерева
Jungle Tree Sapling=Саджанець Тропічного Дерева
Emergent Jungle Tree Sapling=Саджанець Тропічного Дерева, Що Виріс
Pine Tree=Сосновий Стовбур
Pine Wood Planks=Соснові Дошки
Pine Needles=Соснова Хвоя
Pine Tree Sapling=Саджанець Сосни
Acacia Tree=Стовбур Акації
Acacia Wood Planks=Дошки Акації
Acacia Tree Leaves=Листя Акації
Acacia Tree Sapling=Саджанець Акації
Aspen Tree=Стовбур Осики
Aspen Wood Planks=Осикові Дошки
Aspen Tree Leaves=Осикове Листя
Aspen Tree Sapling=Саджанець Осики
Coal Ore=Поклади Вугілля
Coal Block=Вугільний Блок
Iron Ore=Залізна Руда
Steel Block=Сталевий Блок
Copper Ore=Мідна Руда
Copper Block=Мідний Блок
Tin Ore=Олов'яна Руда
Tin Block=Олов'яний Блок
Bronze Block=Бронзовий Блок
Mese Ore=Месева Руда
Mese Block=Месевий Блок
Gold Ore=Золота Руда
Gold Block=Золотий Блок
Diamond Ore=Поклади Алмазу
Diamond Block=Алмазний Блок
Apple Marker=Мітка яблука
Jungle Tree=Стовбур тропічного дерева
Jungle Wood Planks=Дошки з тропічного дерева
Jungle Tree Leaves=Листя тропічного дерева
Jungle Tree Sapling=Саджанець тропічного дерева
Emergent Jungle Tree Sapling=Молодий саджанець тропічного дерева
Pine Tree=Сосновий стовбур
Pine Wood Planks=Соснові дошки
Pine Needles=Соснова хвоя
Pine Tree Sapling=Саджанець сосни
Acacia Tree=Акацієвий стовбур
Acacia Wood Planks=Акацієві дошки
Acacia Tree Leaves=Акацієве листя
Acacia Tree Sapling=Саджанець акації
Aspen Tree=Осиковий стовбур
Aspen Wood Planks=Осикові дошки
Aspen Tree Leaves=Осикове листя
Aspen Tree Sapling=Саджанець осики
Coal Ore=Поклади вугілля
Coal Block=Блок вугілля
Iron Ore=Поклади заліза
Steel Block=Блок сталі
Copper Ore=Поклади міді
Copper Block=Блок міді
Tin Ore=Поклади олова
Tin Block=Блок олова
Bronze Block=Блок бронзи
Mese Ore=Поклади Месе
Mese Block=Блок Месе
Gold Ore=Поклади золота
Gold Block=Блок золота
Diamond Ore=Поклади діамантів
Diamond Block=Блок діамантів
Cactus=Кактус
Large Cactus Seedling=Саджанець Кактуса
Large Cactus Seedling=Великий саджанець кактуса
Papyrus=Папірус
Dry Shrub=Сухий Кущ
Jungle Grass=Тропічна Трава
Dry Shrub=Сухий кущ
Jungle Grass=Тропічна трава
Grass=Трава
Savanna Grass=Саваннова Трава
Savanna Grass=Саванна трава
Fern=Папороть
Marram Grass=Пісколюб
Bush Stem=Стебла Куща
Bush Leaves=Листя Куща
Bush Sapling=Саджанець Куща
Blueberry Bush Leaves with Berries=Кущ Чорниці З Ягодами
Blueberry Bush Leaves=Кущ Чорниці
Blueberry Bush Sapling=Саджанець Куща Чорниці
Acacia Bush Stem=Стебла Куща Акації
Acacia Bush Leaves=Листя Куща Акації
Acacia Bush Sapling=Саджанець Куща Акації
Pine Bush Stem=Стебла Хвойного Куща
Pine Bush Needles=Хвоя Куща
Pine Bush Sapling=Саджанець Хвойного Куща
Marram Grass=Пляжна трава
Bush Stem=Стебла куща
Bush Leaves=Листя куща
Bush Sapling=Саджанець куща
Blueberry Bush Leaves with Berries=Кущ чорниці з ягодами
Blueberry Bush Leaves=Кущ чорниці
Blueberry Bush Sapling=Саджанець куща чорниці
Acacia Bush Stem=Стебла акацієвого куща
Acacia Bush Leaves=Листя акацієвого куща
Acacia Bush Sapling=Саджанець акацієвого куща
Pine Bush Stem=Стебла соснового куща
Pine Bush Needles=Хвоя соснового куща
Pine Bush Sapling=Саджанець соснового куща
Kelp=Ламінарія
Green Coral=Зелений Корал
Pink Coral=Рожевий Корал
Cyan Coral=Блакитний Корал
Brown Coral=Коричневий Корал
Orange Coral=Помаранчевий Корал
Coral Skeleton=Кораловий Остов
Water Source=Водне Джерело
Flowing Water=Проточна Вода
River Water Source=Річкове Водне Джерело
Flowing River Water=Проточна Річна Вода
Lava Source=Лавове Джерело
Flowing Lava=Проточна Лава
Empty Bookshelf=Порожня Книжкова Полиця
Bookshelf (@1 written, @2 empty books)=Книжкова Полиця (@1 книг з записами, @2 чисті книги)
Bookshelf=Книжкова Полиця
Text too long=Текст надто довгий
Green Coral=Зелений корал
Pink Coral=Рожевий корал
Cyan Coral=Блакитний корал
Brown Coral=Коричневий корал
Orange Coral=Помаранчевий корал
Coral Skeleton=Скелет корала
Water Source=Водне джерело
Flowing Water=Проточна вода
River Water Source=Річкове водне джерело
Flowing River Water=Проточна річкова вода
Lava Source=Лавове джерело
Flowing Lava=Проточна лава
Empty Bookshelf=Порожня книжкова полиця
Bookshelf (@1 written, @2 empty books)=Книжкова полиця (книги: @1 з текстом, @2 без тексту)
Bookshelf=Книжкова полиця
Text too long=Текст занадто довгий
"@1"="@1"
Wooden Sign=Дерев'яна Табличка
Steel Sign=Сталева Табличка
Wooden Ladder=Дерев'яна Драбина
Steel Ladder=Сталеві Сходи
Apple Wood Fence=Яблуневий Дерев'яний Паркан
Acacia Wood Fence=Дерев'яний Паркан З Акації
Jungle Wood Fence=Дерев'яний Паркан З Тропічного Дерева
Pine Wood Fence=Сосновий Дерев'яний Паркан
Aspen Wood Fence=Осиковий Дерев'яний Паркан
Apple Wood Fence Rail=Яблуневий Дерев'яний Рейковий Паркан
Acacia Wood Fence Rail=Дерев'яний Рейковий Паркан З Акації
Jungle Wood Fence Rail=Дерев'яний Рейковий Паркан З Тропічного Дерева
Pine Wood Fence Rail=Сосновий Дерев'яний Рейковий Паркан
Aspen Wood Fence Rail=Осиковий Дерев'яний Рейковий Паркан
Wooden Sign=Дерев'яна табличка
Steel Sign=Сталева табличка
Wooden Ladder=Дерев'яна драбина
Steel Ladder=Сталева драбина
Apple Wood Fence=Яблуневий паркан
Acacia Wood Fence=Акацієвий паркан
Jungle Wood Fence=Паркан із тропічного дерева
Pine Wood Fence=Сосновий паркан
Aspen Wood Fence=Осиковий паркан
Apple Wood Fence Rail=Яблуневий рейковий паркан
Acacia Wood Fence Rail=Акацієвий рейковий паркан
Jungle Wood Fence Rail=Рейковий паркан з тропічного дерева
Pine Wood Fence Rail=Сосновий рейковий паркан
Aspen Wood Fence Rail=Осиковий рейковий паркан
Glass=Скло
Obsidian Glass=Обсидіанове Скло
Brick Block=Цегляний Блок
Mese Lamp=Месе Лампа
Apple Wood Mese Post Light=Стовповий Месе Світильник З Яблуні
Acacia Wood Mese Post Light=Стовповий Месе Світильник З Акації
Jungle Wood Mese Post Light=Стовповий Месе Світильник Із Тропічного Дерева
Pine Wood Mese Post Light=Стовповий Месе Світильник Із Сосни
Aspen Wood Mese Post Light=Стовповий Месе Світильник З Осики
Obsidian Glass=Обсидіанове скло
Brick Block=Цегляний блок
Mese Lamp=Месеампа
Apple Wood Mese Post Light=Яблуневий стовповий Месе-світильник
Acacia Wood Mese Post Light=Акацієвий стовповий Месе-світильник
Jungle Wood Mese Post Light=Стовповий Месе-світильник із тропічного дерева
Pine Wood Mese Post Light=Сосновий стовповий Месе-світильник
Aspen Wood Mese Post Light=Осиковий стовповий Месе-світильник
Cloud=Хмара
Wooden Pickaxe=Дерев'яна Кірка
Stone Pickaxe=Кам'яна Кірка
Bronze Pickaxe=Бронзова Кірка
Steel Pickaxe=Сталева Кірка
Mese Pickaxe=Месе Кірка
Diamond Pickaxe=Алмазна Кірка
Wooden Shovel=Дерев'янна Лопата
Stone Shovel=Кам'яна Лопата
Bronze Shovel=Бронзова Лопата
Steel Shovel=Сталева Лопата
Mese Shovel=Месе Лопата
Diamond Shovel=Алмазна Лопата
Wooden Axe=Дерев'яна Сокира
Stone Axe=Кам'яна Сокира
Bronze Axe=Бронзова Сокира
Steel Axe=Сталева Сокира
Mese Axe=Месе Сокира
Diamond Axe=Алмазна Сокира
Wooden Sword=Дерев'яний Меч
Stone Sword=Кам'яний Меч
Bronze Sword=Бронзовий Меч
Steel Sword=Сталевий Меч
Mese Sword=Месе Меч
Diamond Sword=Алмазний Меч
Torch=Факел
@1 will intersect protection on growth.=@1 перетне захист за зростанням.
Wooden Pickaxe=Дерев'яне кайло
Stone Pickaxe=Кам'яне кайло
Bronze Pickaxe=Бронзове кайло
Steel Pickaxe=Сталеве кайло
Mese Pickaxe=Месе-кайло
Diamond Pickaxe=Діамантове кайло
Wooden Shovel=Дерев'яна лопата
Stone Shovel=Кам'яна лопата
Bronze Shovel=Бронзова лопата
Steel Shovel=Сталева лопата
Mese Shovel=Месеопата
Diamond Shovel=Діамантова лопата
Wooden Axe=Дерев'яна сокира
Stone Axe=Кам'яна сокира
Bronze Axe=Бронзова сокира
Steel Axe=Сталева сокира
Mese Axe=Месе-сокира
Diamond Axe=Діамантова сокира
Wooden Sword=Дерев'яний меч
Stone Sword=Кам'яний меч
Bronze Sword=Бронзовий меч
Steel Sword=Сталевий меч
Mese Sword=Месееч
Diamond Sword=Діамантовий меч
Torch=Смолоскип
@1 will intersect protection on growth.=@1 перетне захист коли виросте.

View File

@ -2024,7 +2024,7 @@ minetest.register_node("default:sand_with_kelp", {
return itemstack
end,
after_destruct = function(pos, oldnode)
after_dig_node = function(pos, oldnode, oldmetadata, digger)
minetest.set_node(pos, {name = "default:sand"})
end
})
@ -2099,7 +2099,7 @@ minetest.register_node("default:coral_green", {
on_place = coral_on_place,
after_destruct = function(pos, oldnode)
after_dig_node = function(pos, oldnode, oldmetadata, digger)
minetest.set_node(pos, {name = "default:coral_skeleton"})
end,
})
@ -2130,7 +2130,7 @@ minetest.register_node("default:coral_pink", {
on_place = coral_on_place,
after_destruct = function(pos, oldnode)
after_dig_node = function(pos, oldnode, oldmetadata, digger)
minetest.set_node(pos, {name = "default:coral_skeleton"})
end,
})
@ -2161,7 +2161,7 @@ minetest.register_node("default:coral_cyan", {
on_place = coral_on_place,
after_destruct = function(pos, oldnode)
after_dig_node = function(pos, oldnode, oldmetadata, digger)
minetest.set_node(pos, {name = "default:coral_skeleton"})
end,
})
@ -2549,6 +2549,15 @@ local default_bookshelf_def = {
end
return 0
end,
on_metadata_inventory_put = function(pos)
update_bookshelf(pos)
end,
on_metadata_inventory_take = function(pos)
update_bookshelf(pos)
end,
on_metadata_inventory_move = function(pos)
update_bookshelf(pos)
end,
on_blast = function(pos)
local drops = {}
default.get_inventory_drops(pos, "books", drops)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 B

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 327 B

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 B

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 449 B

After

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 B

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 B

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 B

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 B

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 426 B

After

Width:  |  Height:  |  Size: 481 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 676 B

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 590 B

After

Width:  |  Height:  |  Size: 630 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

After

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -26,6 +26,10 @@ function default.can_grow(pos)
return true
end
function default.on_grow_failed(pos)
minetest.get_node_timer(pos):start(300)
end
-- 'is snow nearby' function
@ -34,84 +38,6 @@ local function is_snow_nearby(pos)
end
-- Grow sapling
function default.grow_sapling(pos)
if not default.can_grow(pos) then
-- try again 5 min later
minetest.get_node_timer(pos):start(300)
return
end
local mg_name = minetest.get_mapgen_setting("mg_name")
local node = minetest.get_node(pos)
if node.name == "default:sapling" then
minetest.log("action", "A sapling grows into a tree at "..
minetest.pos_to_string(pos))
if mg_name == "v6" then
default.grow_tree(pos, random(1, 4) == 1)
else
default.grow_new_apple_tree(pos)
end
elseif node.name == "default:junglesapling" then
minetest.log("action", "A jungle sapling grows into a tree at "..
minetest.pos_to_string(pos))
if mg_name == "v6" then
default.grow_jungle_tree(pos)
else
default.grow_new_jungle_tree(pos)
end
elseif node.name == "default:pine_sapling" then
minetest.log("action", "A pine sapling grows into a tree at "..
minetest.pos_to_string(pos))
local snow = is_snow_nearby(pos)
if mg_name == "v6" then
default.grow_pine_tree(pos, snow)
elseif snow then
default.grow_new_snowy_pine_tree(pos)
else
default.grow_new_pine_tree(pos)
end
elseif node.name == "default:acacia_sapling" then
minetest.log("action", "An acacia sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_acacia_tree(pos)
elseif node.name == "default:aspen_sapling" then
minetest.log("action", "An aspen sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_aspen_tree(pos)
elseif node.name == "default:bush_sapling" then
minetest.log("action", "A bush sapling grows into a bush at "..
minetest.pos_to_string(pos))
default.grow_bush(pos)
elseif node.name == "default:blueberry_bush_sapling" then
minetest.log("action", "A blueberry bush sapling grows into a bush at "..
minetest.pos_to_string(pos))
default.grow_blueberry_bush(pos)
elseif node.name == "default:acacia_bush_sapling" then
minetest.log("action", "An acacia bush sapling grows into a bush at "..
minetest.pos_to_string(pos))
default.grow_acacia_bush(pos)
elseif node.name == "default:pine_bush_sapling" then
minetest.log("action", "A pine bush sapling grows into a bush at "..
minetest.pos_to_string(pos))
default.grow_pine_bush(pos)
elseif node.name == "default:emergent_jungle_sapling" then
minetest.log("action", "An emergent jungle sapling grows into a tree at "..
minetest.pos_to_string(pos))
default.grow_new_emergent_jungle_tree(pos)
end
end
minetest.register_lbm({
name = "default:convert_saplings_to_node_timer",
nodenames = {"default:sapling", "default:junglesapling",
"default:pine_sapling", "default:acacia_sapling",
"default:aspen_sapling"},
action = function(pos)
minetest.get_node_timer(pos):start(math.random(300, 1500))
end
})
--
-- Tree generation
@ -209,7 +135,6 @@ function default.grow_tree(pos, is_apple_tree, bad)
vm:update_map()
end
-- Jungle tree
function default.grow_jungle_tree(pos, bad)
@ -604,3 +529,78 @@ function default.sapling_on_place(itemstack, placer, pointed_thing,
return itemstack
end
-- Grow sapling
default.sapling_growth_defs = {}
function default.register_sapling_growth(name, def)
default.sapling_growth_defs[name] = {
can_grow = def.can_grow or default.can_grow,
on_grow_failed = def.on_grow_failed or default.on_grow_failed,
grow = assert(def.grow)
}
end
function default.grow_sapling(pos)
local node = minetest.get_node(pos)
local sapling_def = default.sapling_growth_defs[node.name]
if not sapling_def then
minetest.log("warning", "default.grow_sapling called on undefined sapling " .. node.name)
return
end
if not sapling_def.can_grow(pos) then
sapling_def.on_grow_failed(pos)
return
end
minetest.log("action", "Growing sapling " .. node.name .. " at " .. minetest.pos_to_string(pos))
sapling_def.grow(pos)
end
local function register_sapling_growth(nodename, grow)
default.register_sapling_growth("default:" .. nodename, {grow = grow})
end
if minetest.get_mapgen_setting("mg_name") == "v6" then
register_sapling_growth("sapling", function(pos)
default.grow_tree(pos, random(1, 4) == 1)
end)
register_sapling_growth("junglesapling", default.grow_jungle_tree)
register_sapling_growth("pine_sapling", function(pos)
local snow = is_snow_nearby(pos)
default.grow_pine_tree(pos, snow)
end)
else
register_sapling_growth("sapling", default.grow_new_apple_tree)
register_sapling_growth("junglesapling", default.grow_new_jungle_tree)
register_sapling_growth("pine_sapling", function(pos)
local snow = is_snow_nearby(pos)
if snow then
default.grow_new_snowy_pine_tree(pos)
else
default.grow_new_pine_tree(pos)
end
end)
end
register_sapling_growth("acacia_sapling", default.grow_new_acacia_tree)
register_sapling_growth("aspen_sapling", default.grow_new_aspen_tree)
register_sapling_growth("bush_sapling", default.grow_bush)
register_sapling_growth("blueberry_bush_sapling", default.grow_blueberry_bush)
register_sapling_growth("acacia_bush_sapling", default.grow_acacia_bush)
register_sapling_growth("pine_bush_sapling", default.grow_pine_bush)
register_sapling_growth("emergent_jungle_sapling", default.grow_new_emergent_jungle_tree)
-- Backwards compatibility for saplings that used to use ABMs; does not need to include newer saplings.
minetest.register_lbm({
name = "default:convert_saplings_to_node_timer",
nodenames = {"default:sapling", "default:junglesapling",
"default:pine_sapling", "default:acacia_sapling",
"default:aspen_sapling"},
action = function(pos)
minetest.get_node_timer(pos):start(math.random(300, 1500))
end
})